Что можно найти, если сделать реверс-инжиниринг 16 тысяч Android-приложений

Сайт Fallible помогает провести реверс-инжиринг Android приложения с целью получения секретов, прошитых в исходном коде. Компания периодически анализирует приложения заказчиков на безопасность и решила выложить сервис в откртый доступ. За пару месяц среди 16 тысяч приложений было найдено около двух с половиной тысяч приложений с ключами или секретами к внешним сервисам.

Например, получив секретный код приложения Uber, можно было рассылать произвольные уведомления как будто из настоящего приложения Uber.

Некоторые разработчики даже оставляют секретные коды к аккаунту Amazon Web Services c правами на запуск и остановку экземпляров виртуальных машин. Тут стоит упомянуть о существовании помощников, которые могут защитить от нечаянного коммита секретов в публичный репозиторий. Например, https://github.com/awslabs/git-secrets.

Простая обфускация через ProGuard лишь замедляет декомпиляцию и не остановит упорного злоумышленника от извлечения секретов. Рекомендуется по возможности не использовать коды доступа внутри приложения или использовать разные коды с разными уровнями доступа. Здесь можно почитать про способы защиты чувствительных данных в Android-приложениях.

via Hackernoon

 

Algorithm Visualizer — визуализатор алгоритмов

Проект Algorithm Visualizer представляет собой коллекцию широко известных алгоритмов, работу которых можно наглядно проследить и детально в них разобраться. Код на JavaScript можно поправить на лету и посмотреть, к чему приведут изменения.

GraphSearchК примеру, при поиске в графе обрабатываемые вершины будут подсвечиваться по мере поиска. Для сортировки переставляемые элементы выстроены в диаграмме, что очень облегчает понимание непростых алгоритмов.

Sort

Проект будет интересен студентам и всем осваивающим программирование. Исходный код открыт , так что любой может поучаствовать в совершенствовании примеров.

 

Почему протокол NTLM устарел

Аутентификационный протокол NTLM является устаревшим, так как обладает недостатками, которые могут скомпрометировать безопасность приложений и операционной системы. Отсутствие серверной аутентификации — одна из главных проблем, позволяет хакеру обмануть пользователей и заставить их подключиться к взломанному серверу.

Как следствие отсутствия серверной аутентификации, приложения, использующие NTLM могут быть уязвимы к атакам типа «отражение« Идея такой атаки состоит в том, чтобы запутать целевой компьютер в Challenge-response authenticationи заставить его  правильно ответить на свой же запрос инициировав новое встречное подключение с теми же параметрами. Правильный ответ можно использовать для дальнейшего нормального процесса аутентификации.

Хотя протокол Kerberos доступен уже долгие  годы, множество приложений продолжают поддерживать только NTLM режим, что существенно ухудшает безопасность системы. Однако Kerberos не может заменить NTLM во всех сценариях, например, когда клиент аутентифицируется в системе, но не состоит в домене. В таком случае необходимо использовать протокол Negotiage, который использует Kerberos всегда, когда это только возможно и переключается на совместимость с NTLM только когда нет возможности работы по Kerberos.

Стоит помнить, что Negotiage не серебряная пуля — можно найти случаи, в которых атакующий может соединиться через NTLM, но такие случаи более редко и трудно эксплуатируемы. Как минимум, приложения, правильно переписанные на Negotiate перестают страдать от уязвимости к NTLM атакам типа «отражение».

Еще одним предостережением против использования NTLM является возможность прекращения поддержки NTLM в новых версиях Windows, такие приложения просто не смогут аутентифицироваться.

 

По материалам ServerFault.

Необычный способ делать деньги

tuvalu1

Тувалу — крошечный полинезийский остров с населением всего лишь  10 тысяч человек. Основные доходу государству приносит рыболовств и доверительный фонда Тувалу, заработок на туризме ничтожен. После обретения независимости от Британии, остров сильно зависит от иностранной помощи.

Звездный час страны настал с появлением и интернета и получением домена .tv. Правительство заключило договор с канадским бизнесменом Jason Chapnik и получило 20% в компании DotTV. Первый платеж в 18 миллионов долларов удвоил ВВП страны. Verisign приобрел DoTV в 2002 году и продлил соглашение по управлению доменом .tv до 2021 года.

Такой дополнительный источник дохода позволил стране Тувалу стать финансово независимой и даже вступить в ООН. Членство в ООН стоит 20 тысяч долларов в год, что раньше было слишком большой суммой для небольшой страны. Вливания пошли на пользу инфраструктуре, развитию дорог, электрической сети и школ, Тувалу даже экспортирует еду!

Ссылки:
Economy of Tuvalu

What are some unusual ways by which people make money

Как добавить рабочий стол с поддержкой RDP для Amazon EC2 Ubuntu

Ниже предлагается один из самых быстрых способов поднять удаленный рабочий стол для северного дистрибутива Ubuntu — решение работает на Amazon Web Services. Достоинством RDP в отличие от VNC является возможность «из коробки» подключаться из Windows без установки дополнительных программ — достаточно выполнить команду mstsc для открытия терминала.

sudo apt-get update
sudo apt-get install lxde
sudo start lxdm
sudo apt-get install xrdp

Так же необходимо задать пароль, к примеру, для пользователя по умолчанию ubuntu:

sudo passwd ubuntu

Единственным недостатком решения является то, что повторное подключение приводит к запуску новой сессии. В качестве временного исправления можно использовать правку файла /etc/xrdp/xrdp.ini с заданием port=-1 в секции [xrdp1], но это работает только при подключении к уже запущенной последнее сессии, при перезагрузке компьютера почему-то необходимо вернуть значение порта по умолчанию.

Профилирование производительности приложения без установки Visual Studio

Думаю, многие программисты пользовались средствами анализа производительности, удобно интегрированных прямо в Visual Studio. Процесс настолько интуитивно понятен из графического интерфейса, что совсем не приходится задумываться, что в действительности, за сбор статистики работы приложения отвечает консольное приложение VsPerfCmd. Задумываться о том, что «под капотом» может понадобиться, если, к примеру, нужно собрать данные на компьютере без установленной Visual Studio. Сразу в голову приходит аналогия с удаленной отладкой, но в данном случае всё даже проще — специальный сервис просто собирает статистику в файл результатов, который потом можно открыть Visual Studio или добавить к существующим отчетам анализа производительности. Единственное требование — к исследуемым dll и exe файлам должны быть скопированы pdb-файлы, в противном случае проанализировать узкие места не удастся. Итак, первым делом, нужно установить сервис сбора статистики, инсталлятор находится в %VSInstallDir% Team ToolsPerformance ToolsSetups. Для VS 2012 — «C:Program Files (x86)Microsoft Visual Studio 11.0Team ToolsPerformance ToolsSetupsvs_profiler_x64_enu.exe»

Далее — запускаем сервис с нужным типом анализа и параметрами анализируемого приложения(путь и параметры командной строки). Ниже приведен скрипт на Powershell, который позволяет автоматизировать процесс присоединения к процессу и остановки сбора статистики при выходе из приложения. При подобной автоматизации процесс сбора и анализа производительности на удаленной машине не отличается от аналогичного процесса работы прямо из Visual Studio.

$tool = "C:Program Files (x86)Microsoft Visual Studio 11.0Team ToolsPerformance ToolsVSPerfCmd.exe"
$toolProcess = Start-Process $tool -ArgumentList "/Start:Sample /Output:c:perfstats2.vsp /Launch:""$analyzedProgramPath"" /Args:args "
$processName = [io.path]::GetFileNameWithoutExtension($analyzedProgramPath)
for ($i=0; $i -lt 1000; $i = $i+1) {
    $p = get-process ProcessName -ErrorAction SilentlyContinue<
    if (!$p) { break; }

    sleep -s 1 } Write-Host "Stopping collect..." $tool /Shutdown /Analyze:Procid

 

Если нужно подключиться к ранее запущенному процессу, например, к сервису можно пользоваться опций Attach.

 

LINT для английского языка

Модуль  write-good  для NodeJS предназначен для проверки текстов на английском на «академичность» стиля. Автор поставил себе задачу автоматизацию трех проблем в научных текстах:

1. Чрезмерное использование Passive Voice. Помимо того, что большое количество пассивного залога ухудшает стиль текста, в научной статье это, как правило, связано с сокрытием существенной информации или неполноте фактов. Пример:

Плохо:        Termination is guaranteed on any input.
Лучше:       Termination is guaranteed on any input by a finite state-space.
Хорошо:     A finite state-space guarantees termination on any input.

2. Обтекамые выражения и лишние слова

Плохо:    It is quite difficult to find untainted samples.
Лучше:    It is difficult to find untainted samples.

Часто студенты в работах используют «ленивые» слова, чтобы избежать необходимости количественного описания. Например, several, exceedingly, many, most, few, vast.

Плохо:    There is very close match between the two semantics.
Лучше:    There is a close match between the two semantics.

3. Лексические иллюзии. Очень сложно заметить повторы слов, когда они разделены переносом строк.

Конечно, реализация очень несложная, но может быть интересна как раз свой простотой, чтобы понять, с чего легче начать разработку анализа текстов.

  Ссылки:

https://github.com/devd/Academic-Writing-Check

http://homepages.ed.ac.uk/martinc/msc/doc/hc.pdf

Марсоход Curiosity: C++ и особенности автономного передвижения

Интереснейший доклад с CPP Con приоткрывает завесу над тем, как устроено управление марсоходом Curiosity.

[youtube=http://www.youtube.com/watch?v=3SdSKZFoUa8&feature=player_embedded]

Одной из основных сложностей в управлении устройством, находящимся на Марсе, является существенное время прохождения сигнала. Лишь в одну сторону требуется 4 минуты 22 секунды. Задача становится еще более трудной, если узнать, что антенны Deep Space Network делятся между многими космическими миссиями. Команда Curiosity может отправлять сигнал всего лишь один раз в сутки, а получать лишь несколько раз в день. Поэтому инженеры в течение дня готовят команды для управления ровером. Команды управления включают в себя управление движением, использование механической руки и проведение экспериментов.

После выполнения команд марсоход отправляет результаты работы и наблюдений на спутник на орбите Марса. Отправка сигнала сразу на Землю, потребовала бы гораздо больше энергии, чем на спутник, находящийся в 322 километрах  на орбите.

Разработка марсохода, способного практически самостоятельно перемещаться по поверхности, является сложной задачей, требующей работы тысяч людей.  Объем работы впечатляет еще больше, если узнать технические характеристики компьютера ровера:  частота процессора 133 МГц и 128 Мб оперативной памяти (адресуемой памяти лишь 32 Мб).

Характеристики Curiosity во втором столбце

Программный код содержит более 100 модулей, каждый из которых общается с другими через очередь сообщений с минимальным числом блокировок и разделяемой памяти. Модуль навигации – один из наиболее объемных и занимает 10% от всего объектного кода.

Большая часть кода для автономного передвижения написана на C++.  Исторически исследователи использовали C++ для разработки высокоуровневых автономных алгоритмов, таких как:  стерео-зрение, построение карт, планирование пути и визуальная одометрия. Однако до 2000 года C++ код никогда не летал на Марс, все модули разрабатывались на языке C.  При разработке марсоходов разработчики оценили, что риск ошибки при переписывании существующего протестированного кода с C++ на C выше, чем использование новой среды на C++.  С++ победил!

Марсоход Curiosity имеет множество стерео-камер, позволяющих надежно оценивать обстановку вокруг, даже если с частью камер возникнут проблемы.

Марсоход умеет передвигаться в нескольких режимах. Во-первых, конечно же, есть полностью ручной режим  прямого управления. Этот режим использовался во время первых движений по планете,  чтобы получить представление о безопасности окружающей территории.

Читать далее Марсоход Curiosity: C++ и особенности автономного передвижения

Как открыть Excel на втором мониторе

Excel (в версии до 2013) обладает поведением, отличающимся от других офисных продуктов, таких как Microsoft Word. Если в Word можно легко открывать документы в разных окнах и соответственно, легко растаскивать их по мониторам, то в Excel по умолчанию все таблицы открываются в одном окне.

Самым простым способом способом открыть таблицы Excel на разных экранах является открытие новой копии процесса Excel. Для этого нужно снова  запустить Excel из списка всех программ и уже из нового экземпляра приложения открывать второй файл. Тем не менее следует помнить, что в таком сценарии могут возникнуть различные ошибки связывания документов и копирования-вставки.

Cистема модулей C++ уже доступна в Visual Studio 2015

Первое обновление Update 1 к Visual Studio 2015 принесло новую экспериментальную возможность для C++. Долгожданная Система модулей C++, которая возможно войдет в стандарт C++ 17.

Любой, кто разрабатывал большой проект на C++, знаком с проблемами, связанными с необходимостью связывать компоненты через заголовочные файлы. Дупликация между заголовочными файлами и исходным кодом, необходимость использовать идиому PIMPL, не говоря уже об огромных накладных расходах на вычитывание с диска бесконечных цепочек маленьких заголовочных файлов при компиляции

Итак, чтобы попробовать новые возможности, необходимо:

  • Создать исходный файл модуля с расширением ixx (почему-то для cpp файлов это не работает) и использовать ключи компилятора /experimental:module
// file: MyModule.ixx
module M;

export int f(int x)
{
    return 2 + x;
}
export double g(double y, int z)
{
    return y * z;
}
 
    • В файле, куда подключается модуль использовать ключи компилятора /experimental:module /module:reference ../Modules/M.ifc
// file: main.cpp
#include "stdafx.h"
#include <iostream>

import M;

int main()
{
    std::cout<<f(5)<<std::endl;
    std::cout<<g(0.0, 1);
    return 0;
}
 

При компиляции модуля помимо обычного OBJ файла появляется файл IFC, содержащий метаданные об интерфейсе модуля. Представление этого файла основано на работе Gabriel Dos Reis and Bjarne Stroustrup под названием «Внутреннее представление программы», реализацию можно найти на GitHub.

Следует отметить, что пока Visual Studio не предлагает встроенных средств для просмотра интерфейсов модулей, как это сделано, к примеру, для .NET сборок. Ожидаем, что полная поддержка модулей принесет с собой и удобные вспомогательные инструменты для работы с ними

Полный исходный код можно найти на BitBucket