Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #70, СЕНТЯБРЬ 2006 г.

детектор лжи

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #070, стр. 070-060-4


Будем считать, что связки «soft-ice + IceExt» для просмотра всех процессов (включая скрытые) вполне достаточно.

[допрос потоков.]

В последнее время все чаще и чаще малварь не создает для себя отдельный процесс (который очень легко заметить), а предпочитает внедряться в один из уже существующих. Для этого используются два механизма. В первом малварь выделяет в целевом процессе блок памяти функцией VirtualAllocEx, копирует себя через WriteProcessMemory и создает удаленный поток посредством CreateRemoteThread. Второй механизм начинается так же, как и первый, только вместо создания удаленного потока малварь останавливает текущий поток процесса и изменяет регистр EIP функцией SetThreadContext (естественно, предварительно сохранив его оригинальное значение через GetThreadContext), передавая управление своей собственной процедуре, вызывающей CreateThread, восстанавливающей EIP и «размораживающей» ранее остановленный поток. Первый механизм работает только на NT, второй — на всех 32-разядных системах семейства Windows.

Как обнаружить такой метод вторжения? Естественно, количество потоков атакуемого процесса увеличивается на единицу, однако, это еще не показатель. Никто и никогда не может сказать точно, сколько у приложения должно быть потоков. Даже его непосредственный разработчик! Проведем простой эксперимент. Запусти «Блокнот» и, переключившись на «Диспетчер Задач», увидишь один единственный поток. Теперь зайди в меню «файл» и скажи «открыть». Количество потоков внезапно подскакивает аж до пяти! Закрывай окно открытия файла — один поток исчезает, остается четыре. Что за ерунда такая?! Оказывается, все дело в динамических библиотеках SHLWAPI.DLL, RPCRT4.DLL и OLE32.DLL, «обслуживающих» окно и порождающих свои собственные, дочерние потоки. Некоторые драйвера так же могут порождать потоки в чужих приложениях (как правило, с целью вызова прикладных API). И тебе необходимо как-то научиться отличать «легальные» потоки от «нелегальных», иначе борьба с малварью обречена на провал.

Идея проста, как 3-х дюймовая дискета. Стартовый адрес легального потока лежит в пределах страничного имиджа (в секции .code и .text), а нелегального — в куче, то есть в области динамической памяти, выделенной функцией VirtualAllocEx. Чтобы разоблачить нелегалов, прежде всего понадобится карта адресного пространства. Soft-ice отображает ее не в самом наглядном виде, и лучше воспользоваться OllyDbg или PE-TOOLS.

Назад на стр. 070-060-3  Содержание  Вперед на стр. 070-060-5