Выбрать главу

Без функции NtReadVirtualMemory малварь обломается с чтением содержимого защищенного процесса, а значит, не сможет отличить антивирус/брандмауэр от остальных программ. Запрет на создание удаленных потоков NariveAPI-функцией NtCreateThread не позволит внедриться в адресное пространство жертвы, тем более что NtWriteVirtualMemory все равно не работает. Ну и как бедная малварь должна копировать зловредный код?

Аналогичным образом обстоят дела и с другими атаками. Обработанный Фемидой файл практически неуязвим. Зачастую настолько неуязвим, что вообще неработоспособен. Фемида не самый корректный упаковщик, и простейший контроль целостности, выполняемый антивирусом/брандмауэром, тут же показывает, что с файлом что-то не то. Как следствие, антивирус/брандмауэр выдает на экран предупреждающее сообщение или вообще отказывается работать. В такой ситуации нам остается либо взять в лапы hiew и вырезать из антивируса/брандмауэра систему самоконтроля, которая нам только мешает, либо же, поигравшись с настройками протектора, выбрать компромиссный вариант, который и от малвари защищает и ругательств со стороны защиты не вызывает.

Способ 2. Зовем на помощь отладчик

Если примирить защиту с протектором никак не получается, имеет смысл обратиться за помощью к отладчику, например к бесплатно распространяемому OllyDdb. Просто загружаем защищаемую программу в Ольку (или прицепляется к уже запущенному процессу: «File — > Attach») и нажимаем <F9> (Run) для нормального продолжения выполнения программы без трассировки.

Что это дает? Во-первых, поскольку отладка в Windows нереентерабельна, то процесс, находящийся под покровительством Ольки, не может отлаживать никто другой, и попытки малвари зацепиться за него ни к чему не приведут. Так же Олька позволяет отслеживать появление новых потоков (как локальных, так и удаленных). Достаточно в меню «Options — > Debugging Options» взвести галочку «Break on new thread» во вкладке Event. Тогда отладчик будет останавливаться всякий раз при создании нового потока. И хотя антивирусы/брандмауэры активно создают свои собственные потоки в целях производственной необходимости (что очень надоедает), все-таки такая защита лучше, чем совсем никакой.

А если еще взвести и галочку «Break on new module» (DLL), то отладчик будет останавливаться при загрузке всякой динамической библиотеки. И хотя опять-таки антивирусы/брандмауэры могут подгружать библиотеки по ходу дела, обычно это происходит в строго определенных ситуациях при совершении пользователем тем или иных действий. Беспричинная загрузка DLL с вероятностью, близкой к единице, свидетельствует об атаке!

Способ 3. Используем биты NX/XD

Наконец, высший пилотаж — защита кодовых секций от внедрения. Работает только на процессорах с поддержкой битов NX/XD (то есть достаточно современных процессорах) и с XP SP2 с задействованным аппаратным DEP для всех приложений (по умолчанию DEP распространяется только на системные компоненты).

В отладчике нажимаем <ALT-M>, чтобы увидеть карту адресного пространства. Находим там модуль, имя которого совпадает с именем антивирусного процесса; видим секцию. text (реже CODE), щелкаем правой клавишей мыши, в контекстом меню выбираем пункт «Set Access — > Execute» — и все! С этого момента любая попытка чтения секции кода приведет к исключению, отлавливаемому отладчиком и блокирующему атаку. Напоминаю, что этот трюк действует только при соответствующей поддержке со стороны операционной системы и процессора (за подробностями отсылаю к своей статье, где все это описано). Правда, если антивирус/брандмауэр попытается подсчитать контрольную сумму кодовой секции для проверки собственной целостности, то его встретит жестокий облом. Впрочем, мы можем нажать <F9> для продолжения выполнения кода или на время снять запрет на чтение кодовой секции, только это все равно не спасет от малвари, модифицирующей стек или секцию данных. Но, к счастью, умной малвари в живой природе практически не встречается, и все больше приходится бороться со студенческими поделками.

Другая возможная проблема — антивирус/брандмауэр может не захотеть запускаться из-под отладчика, например, потому что доверху нашпигован различными антиотладочными приемами. Ну и что нам делать?!

Способ 4. Настраиваем права доступа

Хорошая идея — запустить антивирус/брандмауэр от имени администратора, а самим работать в пользовательской сессии. Тогда малварь, обладающая пользовательскими правами, просто не сможет открыть процесс защищенного приложения. Запуск программ от имени другого пользователя (в данном случае администратора) осуществляется штатной командой runas с ключами /profile и /env, копирующими профиль и среду текущего пользователя. Без этих ключей антивирус/брандмауэр, не найдя своих настроек, может просто не запуститься!