Recently in Research Category

Допустим, обнаружено приложение на PHP+SQLITE3. Допустим, в нем имеются уязвимости LFI+SQLINJ. В этом посте хочу описать технику позволяющую в некоторых случаях подгрузить бэкдор на уязвимый сервер.

На просторах интернета можно найти интернет шлюз построенный на линухе Ideco ICS (стоит $$).
Вот и я, одним хмурым утром его нашел. 


Его внутренности вызывают двойственное впечатление. С одной стороны реализовано местами достаточно секурно, с другой стороны - веб-интерфейс - во-первых написан на php, что как бы намекает, а во-вторых содержит строки следующего вида:

eval($_GET['generator']

PoC: https://127.255.255.0/loaders/contloader.php?generator=phpinfo&control=combobox

причем, предварительно параметры никак не проверяются на корректность, что подтверждает мои опасения.

На этом лулзы не кончились, я обожаю товарищей, которые путают понятия шифрование и кодирование. Мой пациент хранит пароли в БД поксоренные на 188.

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

К чему это я? Тестируйте свой код и делайте ему ревью, аудит и т.д., а главное - доверьте это дело профессионалам.

ЗЫ: Разрабам из Айдеко, уже давно сообщено про эти баги, и даже, наверно, их исправили, поскольку с версии 3.1.5 уже вышло много апдейтов, а если нет, то сами себе злобные буратины, я их предупреждал.

ЗЫ2: Любопытно, изменили ли они свой подход к изготовлению своих поделок.

Еще в 1985 году Ф. Коэн показал, что:
1. Существует машина (Тьюринга), для которой любая последовательность символов на ленте является вирусом (то есть, через некоторое количество шагов на ленте появится "копия" этой последовательности).
2. Существует машина, для которой любая последовательность символов не является вирусом.

Из этого факта, применительно к современным реалиям, следует довольно простой вывод. Чтобы остановить распространение вирусов достаточно ввести запрет на создание (изменение) исполняемых файлов. Очевидным результатом является невозможность несанкционированного создания файлов и последующего запуска. Не нужны антивирусные базы, так как борьба осуществляется не с проявлениями проблемы, а с самой причиной.
С другой стороны, данный метод сведет на нет лишь распространение вирусов, но он не затрагивает вопросов несанкционированного исполнения кода на целевой системе (эксплоиты). То есть, компьютер остается зараженным до последующей перезагрузки.

Что же касается практического использования, возможна реализация через перехват системных вызовов создания / записи файлов, а также составление списка доверенных приложений, которым разрешено создание исполняемых файлов (файловые менеджеры, компоновщики), недоверенных приложений (некоторые серверные процессы) и остальных, для которых, при попытке создания исполняемого файла, разрешение будет спрашиваться у пользователя.
Тут очевидны проблемы: как гарантированно отличать исполняемые файлы от прочих и как не быть слишком навязчивым по отношению к пользователю.

Как известно, сигнатура - последовательность байт, однозначно идентифицирующая угрозу (в частности, компьютерный вирус).

Сигнатура должна обладать свойством однозначного детектирования некоторой угрозы. Другими словами, последовательность байт в сигнатуре должна быть достаточно длинной и уникальной, чтобы не давать ложных срабатываний. В то же самое время, одна сигнатура должна определять все возможные вариации конкретной угрозы.
В качестве сигнатуры могут использоваться:
  •  Последовательности инструкций.
  •  Строковые константы, например, сообщения или имя вируса, данное создателем и указанное в файле.
  •  Маркер-признак зараженности файла, используемый вирусом, чтобы не допустить повторного заражения
Антивирусная база, в свою очередь, содержит вирусные записи, состоящие из:
  • Вирусной сигнатуры.
  •  Местоположение для поиска сигнатуры (заголовок исполняемого файла, смещение в секции кода или данных и т.д.).
  • Метод поиска: обычное сканирование, распаковка исполняемого файла, эмуляция кода и т.д.
Несмотря на тот факт, что в самой базе часто хранится не последовательность байт из тела вируса, а контрольная сумма или хеш некоторых участков тела вируса  (для уменьшения размера базы, а также увеличения скорости сканирования), возможно выделение этих самых байт, которые используются в сигнатуре методом простого перебора значений. То есть, модифицируется каждый байт файла, затем проверяется антивирусом. Если файл не опознан как зараженный, это значит, что данный байт входит в сигнатуру. Понятно, что данный метод работает либо для нешифрованных вирусов, либо для вирусов, детект которых осуществляется непосредственно по декриптору без эмуляции и иных попыток получения расшифрованного тела вируса.

Например, в случае Email-Worm.Win32.Bagle.a для KAV (и его лицензированного аналога от F-Secure) получим следующие смещения в файле, используемые для расчета хеша:
0-1-60-61-62-63-200-201-202-203-220-221-240-241-242-243-460-461-462-463-469-470-471-9688-9689
Байты, выделенные полужирным соответствуют критическим участкам PE-заголовка - сигнатуры MZ, PE+00, смещение на PE-заголовок.
Выделенные курсивом байты также являются частью PE-заголовка.
Сами же значения байтов следующие:
4D-5A-C8-00-00-00-50-45-00-00-E0-00-8A-31-00-00-00-10-00-00-04-00-00-FA-FF

Во вложении доступны инструменты, применяемые в этом эксперименте: программа generate.exe выдает в подкаталог files измененные версии указанной вредоносной программы, перл-скрипт парсит лог проверки KIS данного каталога.
Запуск KIS можно выполнить из командной строки, например, так:
C:\KIS\avp.exe SCAN files /R:log10.txt /i0

Оригинальная идея E. Filiol & M. Christodorescu.
Reblog this post [with Zemanta]
Иногда бывает полезно знать распределение команд процессора в исследуемой программе. В частности, при исследовании AV, эвристик которых может считать статистику и выдавать алерты при отклонении от типового распределения - таким образом выявляются генераторы мусора, использующие экзотические инструкции.

Для этих исследовательских целей реализована небольшая утилита на основе движка OllyDbg. Умеет выдавать статистику как по отдельным инструкциям, так и группам инструкций, генерировать вывод формате GNU Plot, дизассемблировать рекурсивно от точки входа или целиком кодовую секцию. Картинка здесь.

Программа генерации здесь.




About this Archive

This page is an archive of recent entries in the Research category.

News is the previous category.

Thoughts is the next category.

Find recent content on the main index or look in the archives to find all content.