Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

articles:av8way [2017/09/05 02:55] (текущий)
Строка 1: Строка 1:
 +====== av8way ======
 +<​sub>​{{av8way.odt|Original file}}</​sub>​
 +
 +====== любовь с эвристикой в непристойных позах\\ (и avi-картинках) ======
 +
 +крис касперски ака мыщъх, no-email
 +
 +**по каким критериям эвристики вершат свой суд? разработчики антивирусов не разглашают алгоритмов,​ наивно полагая,​ что тем самым они усложняют жизнь хакерам,​ но стоит затащить эвристик в постель,​ как все тайное сразу же станет явным. стратегия механизма принятия решений легко определяется экспериментально. для этого даже не потребуется брать в лапы дизассемблер,​ достаточно просто сравнить "​честные"​ программы с "​нечестными"​ и выяснить чем они отличаются.**
 +
 +===== введение =====
 +
 +Эвристические анализаторы обладают поразительной способностью "​палить"​ ни в чем не повинные программы (см. рис. 9,​ 10),​ пропуская деструктивную заразу ниже радаров. Убытки от ложных позитивных срабатываний на самом деле очень значительны. Никакой дилер не возьмется распространять программу,​ если антивирус ругается на нее матом. Тоже самое относится и к простым пользователям,​ скачавшим дистрибутив непосредственно с web/ftp сервера самого разработчика. Вот и докажи после этого, что ты не козел, или, говоря математическим языком,​ козел не ты. Требуется приложить большие усилия,​ доказывая производителю антивируса,​ что твоя компания "​левых"​ людей в своем штате не держит и деструктивного кода здесь нет (кто не верит, может заглянуть в исходные тексты,​ естественно под подписку о неразглашении). Если повезет,​ создатели антивируса пойдут на уступки и добавят новое правило в базу, устанавливающее для _данного_ файла флаг исключения,​ но… запятнанной репутации (и потерянных клиентов) это, увы, не вернет.
 +
 +Идет настоящая информация война, свищут пули, летают гранаты и на какой стороне баррикады вы бы ни находились знать и учитывать характер эвристических анализаторов необходимо! Если антивирус ругается на программу — это плохая программа и ее необходимо перепроектировать. Так что, прежде чем совершенствоваться в искусстве делать себе харакири,​ лучше учите матчасть и тогда круглый год будет весна и трава.
 +
 +===== >>>​ благодарности =====
 +
 +Мыщъх благодарит BrokenSword'​а,​ supersonic'​а,​ slow'​a,​ Dr.Golov'​a и Brutaller'​а за тактико-техническую стратегическую поддержку и прицельный артиллерийский огонь.
 +
 +===== >>>​ врезка on-line антивирусные службы =====
 +
 +Антивирусы,​ как известно,​ стоят денег (причем,​ немалых) и этих антивирусов достаточно много для того, чтобы оставить мыщъх'​а без штанов,​ если покупать весь этот арсенал за живую наличность. Можно, конечно,​ добыть их в осле или ином парнокопытном,​ но… это будет нечестно,​ да и места они занимают не меньше чем стадо слонопотамов,​ а уж как конфликтуют друг с другом — только бивни летят! Демонстрационные версии,​ распространяемые забесплатно,​ зачастую поставляются в урезанном виде без эвристического анализатора (причем,​ этот факт далеко не всегда отмечен в документации),​ так что для объективного тестирования они категорически не подходят.
 +
 +К счастью,​ практически все крупные игроки,​ присутствующие на антивирусном рынке, поддерживают бесплатные on-line сканеры,​ а некоторые (как, например,​ Лаборатория Касперского — www.avp.ru) даже предоставляет полноценный антивирус в виде ActiveX модуля с поддержкой автоматического обновления (см. рис. 1) — просто фантастика!
 +
 +{{av8way_Image_0.png?​553}}
 +
 +Рисунок 1 бесплатный ActiveX сканер от Лаборатории Касперского за работой
 +
 +Проблема в том, что антивирусных компаний _очень_ много и плановый обход их служб занимает значительное время. Вот почему в сети появились **мета-антивирусы**,​ самостоятельно прогоняющие закаченный пользователем файл через все известные им on-line сервисы. Одним из таких антивирусов является знаменитый **http://​virusscan.jotti.org**,​ поддерживающий AntiVir, ArcaVir, Avast, AVGAntivirus,​ BitDefender,​ ClamAV, Dr.Web, F-ProtAntivirus,​ Fortinet, KasperskyAnti-Virus,​ NOD32, NormanVirusControl,​ VirusBuster и VBA32.
 +
 +Единственным свойственным ему недостатком (за исключением обилия рекламы) является чрезмерная загруженность (кстати говоря,​ косвенно свидетельствующая о его популярности) и вытекающая из нее необходимость подолгу простаивать в очередях,​ дожидаясь пока нас не обслужат (см. рис. 2)
 +
 +{{av8way_Image_1.png?​553}}
 +
 +Рисунок 2 знаменитый мета-антивирус http://​virusscan.jotti.org говорит,​ что прежде нас обслужат придется подождать еще 27 секунд (на самом деле, как правило,​ значительно дольше)
 +
 +Другой не менее знаменитый мета-антивирус с громким именем **VIRUS**** ****TOTAL** (**http****://​****www****.****virustotal****.****com****/​****en****/​****indexf****.****html**) намного более выносив в плане нагрузки,​ к тому же он автоматически ведет мониторинг вирусной активности (см. рис. 3),​ да и список поддерживаемых антивирусов у него побогаче:​ AntiVir, Authentium, Avast, AVG, BitDefender,​ CAT-QuickHeal,​ ClamAV, DrWeb, eTrust-InoculateIT,​ eTrust-Vet, Ewido, Fortinet, F-Prot, F-Prot4, Ikarus, Kaspersky, McAfee, Microsoft, NOD32v2, Norman, Panda, Sophos, TheHacker, UNA, VBA32 и VirusBuster.
 +
 +{{av8way_Image_2.png?​553}}
 +
 +Рисунок 3 мета-антивирус VIRUSTOTAL
 +
 +Всякий уважающий себя программист просто обязательно должен проверить только что откомпилированный файл на "​вшивость"​ — вдруг эвристикам захочется поругаться?​! К счастью,​ все эвристики,​ не смотря на их крутость,​ довольно тупые создания и их легко обмануть и чуть позже мыщъх покажет как (для людей в "​погонах":​ речь идет о _честных_ программах,​ созданных _законопослушными_ программистами без мысли кому-то что-то оторвать,​ или где-то навредить,​ а если статьей воспользуются серые крысы со стальным хвостом,​ то это уже _ваша_ проблема! и нечего вешать ее на меня).
 +
 +===== секс с эвристиком - с перезервативом и без =====
 +
 +Женская суть, как известно,​ есть точка схождения двух прямых — ее ног. Из этой точки на свет появляются антивирусы (ну, если не сами антивирусы,​ то их создатели — наверняка). Собственно говоря,​ живого вируса (то есть программу,​ паразитирующую на других программах) народ не видел уже давно и сейчас все чаще встречаются черви, троянские компоненты и другие программы,​ копирующие свою тушу на компьютер и передающую на нее управление тем или иным путем. Ни в какие файлы они _не_ внедряются,​ поскольку это довольно сложно запрограммировать (намного сложнее,​ чем написать троянскую лошадь),​ да и какой смысл внедряться в файл? Это в эпоху ранней молодости MS-DOS и тотального отсутствия Интернета,​ пользователи менялись файлами как любовницами,​ "​опыляя"​ и "​переопыляя"​ друг друга перекрестным способом. Скорость распространения вирусов определялась именно интенсивностью "​опыления",​ сейчас же основная масса файлов скачивается из Сети. Достаточно выложить программу,​ начиненную взрывчаткой,​ на какой-нибудь сервер,​ устроить массовую рассылку или забросить shell-код через дыру в системе…
 +
 +Отказ от механизма внедрения в исполняемый файл на 90% упрощает конструкцию вируса,​ попутно открывая невиданные ранее перспективны. На смену изощренным полиморфным генераторам пришли упаковщики и протекторы. Троянская лошадь,​ обработанная новой версией крутого (или не крутого,​ но малоизвестного) протектора,​ уже не будет распознана. Сигнатурный поиск отдыхает. Сейчас троянские компоненты пишутся на языках высокого уровня всеми кому не лень, увеличивая свою популяцию на пару десятков экземпляров каждый день. А многие атакующие программы разрабатываются специально под конкретно взятую жертву и в антивирусные базы никогда не попадают!
 +
 +Спасти ситуацию может только правильная политика разграничения доступа и эвристический анализ. Операционные системы семейства NT позволяют выборочно назначать привилегии и устанавливать произвольные права доступа к файлам и ветвям системного реестра. Троянская лошадь,​ запущенная из-под ограниченного аккаунта,​ может обильно унавозить территорию,​ но ничего деструктивного совершить не сможет. Естественно,​ при условии,​ что в системе нет дыр, а тот кто сидит за штурвалом этой самой системы,​ умеет рулить. К сожалению,​ подавляющее большинство пользователь знает только две кнопки (одна из которых — тормоз). А программисты до сих пор не могут научиться писать программы,​ работающие на минимально возможном уровне привилегий. Вот пользователи и сидят под "​администраторами",​ молясь на эвристику словно на икону.
 +
 +Но икона — это только графический интерфейс. Что же находится под ним?!
 +
 +===== >>>​ врезка расстрел без распаковки =====
 +
 +Для "​опознания"​ уже известного червя или троянского коня (содержащегося в антивирусной базе) совершенно необязательно его распаковывать. Достаточно просто выделить сигнатуру _упакованного_ файла. Большинство антивирусов именно так и поступают. Конечно,​ повторная упаковка скрывает сигнатуру на все 100%, вынуждая антивирус прибегнуть к распаковке,​ но… большинство червей распространяют свое тело, не внося в него никаких изменений!
 +
 +Полиморфные черви, уделяющие большое внимание запутыванию кода, зачастую совершенно забывают о PE-заголовке и множество записей антивируса NOD32, относящиеся к полиморфным червям,​ ловят их именно по неизменному (или предсказуемому) содержанию PE-заголовка,​ структуре раскладке секций и т. д.
 +
 +Подлинный полиморфизм — очень редкая вещь, в живой природе практически не встречающаяся.
 +
 +===== внутри эвристика =====
 +
 +Архитектурно эвристик состоит из следующих модулей:​ набора статических распаковщиков,​ эмулятора ЦП (а, в некоторых случаях,​ и операционной системы),​ реконструктора структур данных и поток управления (dataandcontrolflows) поверх которых "​натянут"​ собственно сам эвристический анализатор,​ представляющий собой совокупность детекторов "​правил"​. В чистом виде система правил совершенно бесполезна,​ и чтобы эвристический анализатор работал как полагается,​ ему необходимы данные,​ собираемые остальными компонентами антивируса.
 +
 +AVP славится своим арсеналом статических распаковщиков и оперативно обновляемой базой данной. Эмулятор (или что они называет эти словом) у них явно слабоват. Простая модификация кода упаковщика "​ослепляет"​ AVP и с протекторами уровня ASProtect эмулятор AVP уже не справляется. У NOD32, напротив,​ база статических упаковщиков так себе, на уровне слабого подобия левой руки, но зато эмулятор поддерживает практически полный набор инструкций процессора в том числе MMX и FPU. Но NormanVirusControl в этом смысле еще круче. Помимо виртуального процессора он создает своеобразною "​песочницу"​ (sandbox), эмулирующую реестр и файловую систему,​ что позволяет ему запускать исследуемый файл и безо всякой эвристики обнаруживать происходящие изменения.
 +
 +Но это все, что касалось распаковщиков — первой стадии анализа,​ за которой немедленно следует вторая — выявление совокупности признаков,​ характерных для троянских коней и практически никогда не встречающихся в "​честных"​ программах. В общем виде поставленная задача решения не имеет и потому приходится создавать так называемые "​наборы правил"​. Например,​ если аргумент szFileName функции UrlDownloadToFile (равно как и FTPGetFileA) указывает на исполняемый файл, NOD32 выставляет флаг 142h, означающий "​probablyunknownNewHeur_PEvirus"​. То же самое происходит,​ если вслед за UrlDownloadToFile идет вызов ShellExecute.
 +
 +Вся сложность — разобраться в потоке вызовов,​ ведь во вредоносном коде эти функции не всегда следует непосредственно друг за другом,​ а разделяются мусорными инструкциями,​ аргументы функций "​перегоняются"​ через несколько регистров/​переменных и т. д. Вот тут-то анализатор потока управления и выручает. Вместо утомительной и совершенно бесперспективной трассировке (выполняемой,​ естественно,​ на виртуальном ЦП), эвристик просто "​хватает"​ константные смещения,​ пытаясь преобразовать их в указатели,​ образующие паутину перекрестных ссылок (по такому же принципу,​ кстати говоря,​ работает и IDA Pro).
 +
 +Имея в своем распоряжении распакованный образ файла в памяти,​ эвристический анализатор находит все используемые переменные (которые только может найти),​ затем по перекрестным ссылкам определяет места их инициализации,​ а так же использование этих переменных всеми возможными способами ('​o'​ – offset: загрузка указателя,​ '​r'​ – read: чтение содержимого,​ '​w'​ – write: запись). Конечный результат работы представляет собой сложную структуру данных,​ в которой все переменные представлены теми значениями,​ какие они будут иметь на момент вызова соответствующих API-функций.
 +
 +Естественно,​ без помощи эмулятора анализатор структур данных не обходится,​ поскольку,​ в противном случае,​ простейший XOR мог бы замаскировать всю нежелательную троянскую активность или вот например,​ как без эмулятора определить какое значение имеет переменные foo и pAPI в следующем коде:
 +
 +MOV [foo], offset text_file
 +
 +XOR EAX,EAX
 +
 +JNZ init_aAPI
 +
 +MOV [foo], offset exe_file
 +
 +init_aAPI:
 +
 +MOV [pAPI], offset CreateFileA
 +
 +XOR ECX,ECX
 +
 +JNZ call_pAPI
 +
 +MOV [pAPI], offset GetVersion
 +
 +call_pAPI:
 +
 +Листинг 1 пример кода, требующего применения эмулятора ЦП
 +
 +Если учитывать _только_ перекрестные ссылки,​ то антивирус увидит,​ что обе переменные инициализируются дважды,​ но какое значение из двух правильное?​ Без эмулятора,​ антивирус должен перебрать четыре комбинации,​ а в реальной программе этих комбинаций окажутся сотни миллионов!!! Напротив,​ эмулятор ЦП тут же покажет какие условные переходы выполняются,​ а какие нет. Однако,​ эмуляторы не всесильны. В частности,​ они не понимают самомодифицирующегося кода, недокументированных инструкций да и просто незнакомым им команд. Поскольку,​ в x86 команды имеют разную длину, то продолжить декодирование и эмуляцию инструкций после встречи с неизвестной командой эмулятор не может. Но тут его выручают перекрестные ссылки на данные и тогда вместо анализа всего кода программы от точки входа до многодетной матери,​ происходит "​отрывочный"​ анализ тех фрагментов,​ на которые указывает хотя бы одна перекрестная ссылка. Вывод: чтобы "​ослепить"​ анализатор потоков данных следует исключить все константные смещения,​ заменив их сложными математическими преобразованиями,​ неподвластными эмулятору.
 +
 +Впрочем,​ многие программы "​палятся"​ и без всякой эмуляции. Антивирусу достаточно взглянуть на точку входа и, если она указывает на последнюю загружаемую секцию файла или лежит внутри PE-заголовка,​ файл приговаривается к расстрелу без предупреждений. Но вот что интересно — если в оригинальной точке входа находится jump на вирусный код, эвристические анализаторы оставляют этот факт без внимания. Интересно почему?​ Ведь в честных программах такие трюки практически не встречаются….
 +
 +Но это все была теория. Теперь самое время перейти к практике и продемонстрировать несколько _совершенно_ _безобидных_ программ,​ вызывающих недовольство эвристических анализаторов.
 +
 +===== >>>​ врезка антивирус как универсальный распаковщик =====
 +
 +Во времена старушки MS-DOS, когда новые упаковщики исполняемых файлов появлялись как грибы, а достойных отладчиков (не считая CUP'​а) не существовало,​ очень многие хакеры в качестве универсального распаковщика использовали… антивирус Dr. WEB, содержащий большое количество грамотно написанных статических распаковщиков,​ выдающих на выходе вполне работоспособные EXE, записываемые во временные файлы, автоматически удаляемые в процессе сканирования. Кто-то давил на RESET, чтобы опередить антивирус и не дать распакованному "​добру"​ бесславно погибнуть,​ кто-то запускал утилиты UNERASE/​UNDELETE,​ а кто-то вешал на функцию 41h (unlink) прерывания INT 21h специальную "​заглушку"​ имитирующую удаление файла…
 +
 +И что же изменилось за прошедший десяток лет (да какой там десяток! на наших глазах сменилось несколько поколений операционных систем,​ оставивших позади себя занесенную песком вечность,​ навеки ставшую достоянием истории). А ничего! То есть ни хрена! Все как было, так и осталось! Тот же NOD32 кладет распаковываемый файл в каталог \documents‑n‑settings\user-name\local settings\temp\,​ только XOR'​ит его байтом A5h. Аналогичным образом поступают и другие антивирусы. Для чего это делается?​ Шифровать-то зачем?​! Все очень просто — поскольку Windows это совсем не MS-DOS и "​зоопарк"​ антивирусов для нее вполне обычное дело, только представьте себе, что произойдет,​ если NOD32 начнет распаковывать вредоносный файл в temp, где его тут же словит антивирусный монитор Dr.WEB или AVP!
 +
 +Как определить ключ (и алгоритм!) шифровки?​! Можно, конечно,​ дизассемблировать антивирус,​ распотрошив его как рождественского гуся, только зачем так напрягаться?​! В подавляющем большинстве случаев шифровка происходит по XOR, ну а ключ восстанавливается прямой атакой на открытый текст: "​MZ",​ "​PE"​ и т. д., причем удается восстановить не только байтовые ключи, но и более длинные гаммы, поскольку любой PE-файл содержит до фига предсказуемой информации,​ к тому же всегда существует возможность запаковать _свой_ _собственный_ файл и скормить его антивирусу. Исключение составляют антивирусы,​ заново генерирующую гамму для каждого нового файла, но такие "​уродцы"​ мне пока не встречались.
 +
 +===== [N0]: не выносите точку входа за пределы .text =====
 +
 +Утро начинается с зарядки (если только не брать тяжелое похмелье в расчет),​ ну а хакерство — с легкой разминки,​ которой в данном случае будут игры с точкой входа в PE-файл. Создадим простейшую программу следующего содержимого,​ откомпилируем ее и будем пытать,​ прямо как немцы в Гестапо:​
 +
 +#include <​stdio.h>​
 +
 +main()
 +
 +{
 +
 +printf("​hello!\n"​);​
 +
 +}
 +
 +Листинг 2 программа,​ предназначенная для экспериментов с точкой входа
 +
 +Убедившись,​ что все (до единого!) антивирусы к ней благосклонны,​ загружаем файл в HIEW, нажимаем <​ENTER>​ для перехода в hex-режим и давим <F8>, чтобы отобразить PE-заголовок. Смотрим на RVA-адрес точки входа (в моем случае он равен 1043h), складываем его с Image base (400000h) и получаем:​ 401043h. Записываем на бумажке и нажимаем <F6>, показывающую каталог секций. Подгоняем курсор к секции .data, давим <​ENTER>​ и спускаем курсор на несколько строк вниз, где начинаются сплошные нули (в моем случае это: 4060A0h).
 +
 +Нажимаем еще раз <​ENETR>​ для перехода в ассемблерный режим и <F3> для разрешения редактирования. После чего вводим следующую последовательность команд:​ MOV EAX,​ 401043h/​JMP EAX,​ где 401043h адрес "​моей"​ точки входа. Сохраняем изменения по <F9>, двойным нажатием на <​ENTER>​ возвращаемся в hex-режим,​ переходим в начало файла, находим сигнатуру "​PE",​ отсчитываем от ее начала 28h байт и записываем RVA-адрес новой точки входа, в нашем случае равный 60A0h (4060A0h - Imagebase), естественно,​ записывать его надлежит в обратном порядке (A0h 60h). Сохраняем изменения,​ выходим из hiew'​а и загружаем файл в свой любимый мета-антивирус,​ например,​ virusscan.jotti.org.
 +
 +Все антивирусы отвечают гробовым молчанием (см. рис. 4),​ лишь "​sandboxemulation"​ (эмуляция в песочнице) выбрасывает желтый флаг опасности,​ предупреждая,​ что это может быть malware.
 +
 +{{av8way_Image_3.png?​553}}
 +
 +Рисунок 4 реакция антивирусов,​ собранных под крышей virusscan.jotti.org на точку входа в файл, находящуюся в последней секции PE-файла
 +
 +А вот VIRUS TOTAL дает куда более суровый результат и ворчит довольно-таки здорово (см. рис. 5),​ выдавая нам следующую замечательную табличку (см. таблицу 1).
 +
 +^антивирус^версия^обновление^результат|
 +|CAT-QuickHeal|8.00|11.07.2006|(Suspicious) - DNAScan|
 +|Fortinet|2.82.0.0|11.08.2006|suspicious|
 +|Ikarus|0.2.65.0|11.07.2006|Win32.SuspectCrc|
 +|Panda|9.0.0.4|11.07.2006|Suspicious file|
 +
 +Таблица 1 результат проверки файла с точкой входа, находящейся в последней секции файла мета-антивирусом VIRUS TOTAL (антивирусы,​ не обнаружившие ничего подозрительного,​ для наглядности опущены)
 +
 +{{av8way_Image_4.png?​553}}
 +
 +Рисунок 5 реакция антивирусов,​ собранных под крышей VIRUS TOTAL на точку входа в файл, находящуюся в последней секции PE-файла
 +
 +А теперь слегка изменим тактику и передвинем точку входа в PE-заголовок (например,​ можно разместить MOV EAX,​ 401043h/​JMP EAX за концом таблицы секций,​ следом за .text, .data…). Товарищ virusscan.jotti.org сразу же взводит красный флаг "​INFECTED/​MALWARE",​ а антивирус ArcaVir говорит:​ Heur.Win95. "​Heur",​ очевидно,​ сокращение от "​heuristic"​ – эвристика (см. рис. 6).
 +
 +{{av8way_Image_5.png?​553}}
 +
 +Рисунок 6 реакция антивирусов,​ собранных под крышей virusscan.jotti.org на точку входа в файл, находящуюся в PE-заголовке
 +
 +VIRUSTOTAL тоже ругается,​ но как-то невнятно (см. рис. 7),​ тем не менее, сразу два антивируса:​ CAT-QuickHeal и Fortinet предупреждают нас о грозящей опасности.
 +
 +{{av8way_Image_6.png?​552}}
 +
 +Рисунок 7 реакция антивирусов,​ собранных под крышей VIRUS TOTAL на точку входа в файл, находящуюся в PE-заголовке
 +
 +===== [N1]: не пользуйтесь полиморфными упаковщиками =====
 +
 +Упаковывая свой файл крутым полиморфным протектором,​ вы серьезно рискуете нарваться на крупные неприятности. Возьмем,​ к примеру,​ одну из поздних версий популярного hex-редактора HIEW (со штампом времени 3EDAFCCFh), упакованную ASPack'​ом и для "​надежности"​ еще и Viogen Crypt'​ом,​ что PEiD замечательно подтверждает (см. рис. 8)
 +
 +{{av8way_Image_7.png?​421}}
 +
 +Рисунок 8 PEiD показывает,​ что HIEW запакован протектором VirogenCrypt 0.75
 +
 +А теперь пропустим этот HIEW (в котором _доподлинно_ ничего деструктивного нет) через строй антивирусов. Батюшки! Какой шухер поднимается!!! Несмотря на то, что virusscan.jotti.org успешно распознает упаковщик (см. рис. 9),​ антивирусы от этого не успокаиваются и вопят как свиньи,​ заживо смываемые в унитаз (по классификации гн. Голубицкого,​ ну того который в шлеме)!
 +
 +**AntiVir** категорично классифицирует его (HIEW, а не Голубицкого) как "​Backdoor-Server/​Bifrose.B backdoor"​. **Avast**, чуть более деликатный в своих суждениях,​ видит в нем типичный троянский компонент,​ неизвестный науке: "​Win32:​Trojan-gen. {Other}",​ **Norman****Virus****Control** без всякой эвристики выдает конкретное имя "​W32/​Bifrose.CRL",​ ну а **VBA32** просто говорит,​ что это "​Backdoor.Win32.Rbot.on"​. Вот так, безо всяких церемоний опустили HIEW'​а! Раньше на него ругался и AVP на пару с Dr.WEB'​ом,​ но теперь они чего-то притихли. Наверное,​ стыдно стало. Или Сусликов их запинал.
 +
 +{{av8way_Image_8.png?​553}}
 +
 +Рисунок 9 реакция антивирусов,​ собранных под крышей virusscan.jotti.org на HIEW, упакованный протектором Viogen Crypt
 +
 +VIRUS TOTAL,​ использующий другую версию антивируса **AntiVir**,​ говорит что это "​BDS/​Bifrose.B"​ (см. рис. 10),​ к нему же присовокупляются и другие ругающиеся,​ объединенные для наглядности в следующую таблицу (см. таблицу 2).
 +
 +^антивирус^версия^обновление^результат|
 +|AntiVir|7.2.0.39|11.07.2006|BDS/​Bifrose.B|
 +|Avast|4.7.892.0|11.07.2006|Win32:​Trojan-gen. {Other}|
 +|CAT-QuickHeal|8.00|11.07.2006|(Suspicious) - DNAScan|
 +|Fortinet|2.82.0.0|11.08.2006|SPY/​BDoor|
 +|McAfee|4890|11.07.2006|BackDoor-CKA|
 +|Norman|5.80.02|11.07.2006|W32/​Bifrose.CRL|
 +|Sophos|4.11.0|11.07.2006|Mal/​Packer|
 +|UNA|1.83|11.07.2006|Backdoor.Bifrose.70FA|
 +|VBA32|3.11.1|11.07.2006|Backdoor.Win32.Rbot.on|
 +
 +Таблица 2 результат проверки HIEW'​а мета-антивирусом VIRUS TOTAL
 +
 +{{av8way_Image_9.png?​553}}
 +
 +Рисунок 10 реакция антивирусов,​ собранных под крышей VIRUS TOTAL на HIEW, упакованный протектором Viogen Crypt
 +
 +Отсюда следует два вывода и оба неутешительные:​ первое — никаким антивирусам доверять нельзя! второе — прежде чем релизить продукт,​ прогонять его через VIRUS TOTAL _обязательно_
 +
 +===== [N2]: инсталляторы и троянские лошади =====
 +
 +При разработке инсталляторов следует быть предельно осторожным,​ поскольку некоторые последовательности вызовов API-функций трактуются эвристическими анализаторами как потенциально вредоносные.
 +
 +Вот только одна из таких последовательностей,​ детектируемся антивирусом NOD32:
 +
 +; //​создаем .dll в системной директории
 +
 +; //​=======================================
 +
 +call[GetSystemDirectory];​ // получаем путь к системной директории Windiws
 +
 +call[CreateFile];​ // создаем [там] файлтипа .dll
 +
 +call[WriteFile];​ // пишем [в этот файл] всякую хрен (любую)
 +
 +
 +
 +; // копируем в системную директорию самого себя
 +
 +; //​===============================================
 +
 +call[GetSystemDirectory];​ // получаем путь к системной директории Windiws
 +
 +call[GetModuleFileName];​ // узнаем как нас зовут
 +
 +call[CopyFile];​ // копируем себя в системную директорию
 +
 +Листинг 3 псевдокод последовательности API-вызовов,​ классифицируемый эвристическим анализатором NOD32 как потенциально вредоносный
 +
 +А вот конкретный программный пример ее программного воплощения на языке Си:
 +
 +// based on animaTOR'​s and Bill_Prisoner'​s code from www.wasm.ru
 +
 +// ==============================================================
 +
 +#include <​windows.h>​
 +
 +int main(int argc, char* argv[])
 +
 +{
 +
 +// объявляем необходимые переменные
 +
 +char buf[255];​char buf2[255]; int len; HANDLE hFile; DWORD N; 
 +
 +
 +
 +// получаем имя системной директории и добавляем к нему имя нашей .dll
 +
 +GetSystemDirectory(buf,​255);​len=lstrlen(buf);​lstrcat(buf,"​\\nezumi.dll"​);​
 +
 +
 +
 +// открываем файл на запись
 +
 +hFile = CreateFile(Buffer,​GENERIC_WRITE,​0,​NULL,​CREATE_ALWAYS,​0,​0);​
 +
 +
 +
 +// записываем туда что-нибудь (хотя бы даже и мусор)
 +
 +WriteFile(hFile,"​matrix has you", sizeof("​matrix has you"​),&​N,​0);​
 +
 +
 +
 +// закрываем файл
 +
 +CloseHandle(hFile);​
 +
 +
 +
 +// получаем имя системной директории и добавляем к ней имя нашего .exe
 +
 +GetSystemDirectory(buf,​255);​ lstrcat(buf,"​\\nezumi.exe"​);​
 +
 +
 +
 +// копируем самого себя в системную директорию под [новым] именем
 +
 +GetModuleFileName(0,​buf2,​255);​CopyFile(buf2,​buf,​0);​
 +
 +
 +
 +return 0;
 +
 +}
 +
 +Листинг 4 код,​ копирующий в системную директорию фиктивную динамическую библиотеку вместе со своей тушей
 +
 +И хотя из всех антивирусов,​ один лишь NOD32 невнятно выругается на "​probablyunknownNewHeur_PE"​ (см. рис. 11,​ 12) создателям инсталляторов это оптимизма не добавляет и вполне может стоить им карьеры.
 +
 +{{av8way_Image_10.png?​553}}
 +
 +Рисунок 11 реакция NOD32 на определенную последовательность API-вызовов,​ встречающуюся как в троянских программах,​ так и в честных инсталляторах
 +
 +{{av8way_Image_11.png?​552}}
 +
 +Рисунок 12 реакция NOD32 на определенную последовательность API-вызовов,​ встречающуюся как в троянских программах,​ так и в честных инсталляторах
 +
 +Правда,​ если между вызовом GetSystemDirectory и CreateFile вставить холостой цикл (см. листинг 5),​ то эмулятор отвалится по тайм-ауту и NOD32 ничего не скажет,​ однако,​ это крайне ненадежный примем и никаких гарантий облома эвристика он не дает.
 +
 +_asm
 +
 +{
 +
 +mov ecx,144440
 +
 +next:
 +
 +mov eax,edx
 +
 +loop next
 +
 +}
 +
 +Листинг 5 "​холостой"​ цикл, "​ослепляющий"​ эвристический анализатор антивируса NOD32
 +
 +===== [N3]: искусство скачивания файлов =====
 +
 +При использовании API-функций семейства URLDownloadToFile никогда не запускайте только что полученный файл (чем пользуются некоторые программы с функцией автоматического обновления). Антивирусы начинают материться так, что уши вянут, причем выдают свои подозрения за прямое обвинение! Действительно,​ среди троянских программ такой прием весьма популярен,​ но… это еще не повод, чтобы хвостом махать! Как минимум следует убедиться,​ что скачивается что-то действительно вредоносное и весьма деструктивное.
 +
 +Ниже приведен фрагмент программы (впервые опубликованной на форуме WASM'​а),​ загружающей из сети графический файл формата .gif и запускающий его на выполнение через API-функцию ShellExecute,​ вызывающую ассоциированное с ним приложение:​
 +
 +; // based on Brutaller'​s example
 +
 +; //​==================================
 +
 +GetTempDir:;​ // получаем путь к каталогу %TEMP%
 +
 +invoke GetTempPath,​ 256,  WinTempDir
 +
 +
 +
 +; // копируем имя каталога %TEMP% в буфер FullPath,
 +
 +; // добавляя туда его имя, под которым он будет записан на диск
 +
 +invoke lstrcpy, FullPath, WinTempDir
 +
 +invoke lstrcat, FullPath, FileNameToSave
 +
 +
 +
 +Down:; // скачиваем файл из сети
 +
 +invoke URLDownloadToFile,​ 0, UrlOfFile, FullPath, 0, 0
 +
 +
 +
 +Exec:; // запускаем скаченный файл
 +
 +invoke ShellExecute,​ NULL, NULL,  FullPath, NULL, NULL,1
 +
 +
 +
 +section '​.data'​ data readable writeable
 +
 +ж
 +
 +UrlOfFile db '​http://​wasm.ru/​pic/​header.gif',​0;​ // url файла
 +
 +FileNameToSave db '​header.gif',​0;​ // имяфайланадиске
 +
 +WinTempDir rb 256; // буфердля %TEMP%
 +
 +FullPath rb 256; // буфердля FullPath
 +
 +Листинг 6 фрагмент программы,​ считывающий header.gif с WASM'​а и запускающий ассоциированное с ним приложение (полный исходный текст лежит по адресу http://​www.wasm.ru/​forum/​viewtopic.php?​id=15667)
 +
 +После трансляции FASM'​ом,​ мы получаем вполне безобидный exe, результатом работы которого (при наличии доступа к сети, конечно,​ и молчания всех брандмауэров) будет логотип WASM'​а отображающийся в MS Paint'​е или другой графической программе (см. рис. 13).
 +
 +{{av8way_Image_12.png?​530}}
 +
 +Рисунок 13 результат работы "​троянской"​ программы
 +
 +А вот что произойдет,​ если прогнать этот exe через VIRUS TOTAL (см. рис. 14). Для удобства восприятия (качество полиграфии продолжает хромать),​ все ругательства объединены в одну таблицу (см. таблицу 3).
 +
 +^антивирус^версия^обновление^результат|
 +|AntiVir|7.2.0.39|11.07.2006|HEUR/​Malware|
 +|Authentium|4.93.8|11.07.2006|Possibly a new variant of W32/​Downloader-Sml-based!Maximus|
 +|BitDefender|7.2|11.08.2006|Generic.Malware.dld!!.BFA2DC85|
 +|DrWeb|4.33|11.08.2006|DLOADER.Trojan|
 +|F-Prot|3.16f|11.07.2006|Possibly a new variant of W32/​Downloader-Sml-based!Maximus|
 +|F-Prot4|4.2.1.29|11.07.2006|W32/​Downloader-Sml-based!Maximus|
 +|NOD32v2|1.1858|11.07.2006|probably unknown NewHeur_PE virus|
 +|Norman|5.80.02|11.07.2006|W32/​Downloader|
 +|Panda|9.0.0.4|11.07.2006|Suspicious file|
 +|VBA32|3.11.1|11.07.2006|suspected of Win32.Trojan.Downloader (http://​...)|
 +
 +Таблица 3 результат анализа нашего downloader'​а различными антивирусами
 +
 +{{av8way_Image_13.png?​553}}
 +
 +Рисунок 14 безобидный downloader под перекрестным эвристическим огнем агрессивно настроенных антивирусов,​ собранных под крышей мета-антивируса VIRUS TOTAL
 +
 +Впечатляет,​ не правда ли?! А вот NormanVirusControl с virusscan.jotti.org (см. рис. 15),​ воспользовавшись могуществом своего эмулятора,​ даже показал какие изменения произошли в файловой системе (см. листинг 7).
 +
 +{{av8way_Image_14.png?​552}}
 +
 +Рисунок 15 реакция антивирусов,​ собранных под крышей мета-антивируса virusscan.jotti.org на совершенно безобидный downloader
 +
 +Sandbox: W32/​Downloader;​ [ General information ]
 +
 +* File length: 2048 bytes.
 +
 +[ Changes to filesystem ]
 +
 +* Creates file C:​\WINDOWS\TEMP\header.gif.
 +
 +[ Network services ]
 +
 +* Downloads file from http://​wasm.ru/​pic/​header.gif as C:​\WINDOWS\TEMP\header.gif.
 +
 +[ Security issues ]
 +
 +* Starting downloaded file - potential security problem.
 +
 +[ Process/​window information ]
 +
 +* Attemps to NULL C:​\WINDOWS\TEMP\header.gif NULL.
 +
 +Листинг 7  антивирус NormanVirusControl отчитывается об изменениях,​ произошедших в виртуальной файловой системе после запуска downloader'​а
 +
 +Что же делать?​! Как усмирить всю эту ораву?​! Можно, конечно,​ запутать код, нагромоздить кучу лишних API-вызовов или даже прибегнуть к шифровке,​ но… все это мутроно и нудно, к тому же нет никаких гарантий,​ что эвристик не расколет эти хитрости и не завопит с еще большей силой. Остается скачивать файлы "​вручную",​ то есть через сокеты или предлагать пользователю ходить за обновлениями самостоятельно.
 +
 +===== заключение =====
 +
 +Эвристические анализаторы не спасают от вредоносного кода (и массовые эпидемии — лучшее тому подтверждение),​ но высаживают на измену честных программистов,​ продукция которых "​палится"​ совершенно ни за что и ни про что. Так что, борьба с эвристическими анализаторами приобретает коллективный характер и ей начинают интересоваться не только хакеры,​ но и вполне респектабельные производители программного обеспечения (особенно коммерческого,​ поскольку,​ в этом случае перепуганный клиент может и в суд подать,​ а суд дело такое… его исход никогда неясен,​ а вот с open-source продуктов взятки гладки — как бы там ни визжал антивирус,​ недовольных пользователей всегда можно ткнуть носом в исходный код и попросить найти то "​деструктивное"​ место, которое антивирусу так не понравилось).
 +
 +===== >>>​ у какого антивируса эвристик самый лучший?​ =====
 +
 +Сравнивать антивирусы — это все равно, что меряться пиписьками,​ но в общем зачете NOD32, NormanVirusControl и BitDefender отлично рулят (правда,​ последний не всегда дружит с сетевыми драйверами). AVP и Dr. Web хоть и не находятся в аутсайдерах,​ до лидеров им еще далеко. Впрочем,​ этот вопрос очень спорный и ответ на него зависит в основном от того, "​кто больше заплатил"​. Ознакомится с достаточно независимым отчетом качества антивирусов можно на http://​www.av-comparatives.org.
 +
 +