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

Умри, но сейчас

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

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


И все равно, создание дополнительного протока — слишком заметно. Может ли малварь без него обойтись? Может! И для этого существует множество путей. Не все из них ведут в рай, но все-таки. Самое простое — внедрившись в атакуемый процесс через VirtualAllocEx и загрузив свою DLL, установить таймер, воспользовавшись API-функцией SetTimer, и периодически получать таймерные сообщения, обрабатывая их в контексте основного потока (точнее того потока, с которым ассоциирован фокус ввода). Но это уже технические детали, в которые можно не вдаваться. Главное, что новый поток не создается. Правда, остается таймер...

Хитрая малварь действует очень скрытно. Получив дескриптор главного окна программы, она вызывает API-функцию GetWindowLong с параметром GWL_WNDPROC, получая адрес оконной процедуры (где происходит обработка сообщений) и тут же меняет его на свой через SetWindowLong. Этим она не только перехватывает все сообщения (в том числе передвижения мыши и нажатия клавиш, что очень полезно для шпионской деятельности), но и гарантированно обеспечивает себя процессорным временем, не создавая ни таймеров, ни новых потоков. Правда, пытливый исследователь, вооруженный soft-ice, может забеспокоиться: с чего бы это главное окно обрабатывается какой-то там посторонней DLL? Однако, при компонентом подходе к программированию такие случаи достаточно часто встречаются и в легальных программах, особенно если они написаны на DELPHI.

А вот еще один путь. Асинхронные сокеты — практически неиспользуемые, но очень мощные. Главное их достоинство в том, что, ожидая подключения клиента или передавая/принимая данные по сети, сокет немедленно возвращает управление, сигнализируя о завершении процесса приема/передачи через специальный CALLBACK. В практическом плане это означает, что малварь может установить асинхронный сокет и тут же возвратить основному потоку управление, будучи при этом абсолютно уверенной, что в нужный момент операционная система вспомнит о ней и передаст управление CALLBACK-процедуре, расположенной внутри загруженной малварью динамической библиотеки. Внешне все выглядит чики-чики — никаких тебе дополнительных потоков, никаких перехватов чего бы то ни было, вообще ничего подозрительного.

[приговор.]

Список перечисленных слабых мест, конечно же, не является исчерпывающим. Ошибок в продуктах творчества пионеров очень много и все они тупы и до неприличия однообразны. Хорошая малварь все еще встречается, но редко. И с каждым годом все реже и реже. Дизассемблировать нечего. Ковыряться в мегабайтах неаппетитного кода — неинтересно. В общем, скука смертная и никакого позитивного продвижения вперед.

Назад на стр. 070-076-5  Содержание