Троян в упаковке
A.M.D.F. (amdf@front.ru)
🕛 30.10.2006, 17:14
Маскировка вредоносного кодаДля тебя, наверное, не секрет, что почти все публичные трояны, которые можно найти в Сети, давно уже занесены в базы антивирусов и их распространение - проблематичная задача. Однако известно ли тебе, что любую заразу можно довольно легко замаскировать под обычное приложение, после чего ни один даже самый навороченный антивирус не обнаружит подставу? Держись! Сегодня мы с тобой так замаскируем MyDoom.e, что впору будет организовывать новую эпидемию :).
Обнаружение
Для начала неплохо было бы разобраться с тем, как, собственно, антивирусные программы отличают зараженные файлы и трояны от обыкновенных бинарников. Я не буду вникать в тонкости этого процесса, а расскажу лишь в общих чертах. У каждого антивируса в обновляемой базе хранятся специальные записи, по которым можно запалить трояна или вирус. Такие записи называются сигнатурами. Сигнатурой может быть некая последовательность байт, характерная для данного вируса, контрольная сумма или еще какой-то характерный признак. Для сложных вирусов, которые не имеют постоянных сигнатур, изобретаются иные методы обнаружения. Антивирус берет файл и начинает искать в нем сигнатуры из своих баз. Если сигнатура обнаружена, то антивирус радостно сообщает пользователю, что данная программа - опаснейший троян. А вот этого-то тебе как раз и не хотелось бы, не так ли? Нужно сделать так, чтобы узнаваемой сигнатуры в файле попросту не было. В этом случае антивирус дополнительно проверяет файл эвристическим анализатором. Алгоритм зависит от конкретного антивируса, а в некоторых эвристика и вовсе нет. Эвристик - штука темная, срабатывает, в основном, на вирусы, написанные на ассемблере, поэтому, скорее всего, антивирус ничего не обнаружит и пойдет дальше по своим делам. Как же убрать эту сигнатуру? Практика показывает, что это не так уж и сложно.
Среди троянописателей и вирмейкеров принято паковать свои творения специальными упаковщиками EXE-файлов. Плюсов от этого немало: например, червяк становится меньше в размерах, а значит, за то же время может разослать больше своих копий и его присутствие становится менее заметным для пользователя. Трояны тоже пакуют, так как они по своей природе должны быть маленькими и незаметными.
Чертик в коробочке
Что же представляет собой упакованный exe-файл? Это PE-заголовок, небольшой загрузчик и прикрепленные сжатые данные исходного файла. Эти данные могут быть дополнительно зашифрованы. При запуске управление передается загрузчику, который распаковывает эти данные прямо во время выполнения и передает управление коду самой программы. С точки зрения пользователя никаких отличий нет - программа точно так же запускается и работает как обычно.
Упаковщиков довольно много. Все они используют разные алгоритмы сжатия и шифрования и разные загрузчики. Антивирусу довольно сложно понять, что скрывается в упакованном файле. Он должен анализировать непосредственно код программы, а код в упакованном файле - это лишь код загрузчика. Для анализа кода его нужно предварительно распаковать. Для этого антивирус должен знать, прежде всего, чем упакован файл, и применить соответствующий алгоритм. Для каждого из упаковщиков необходим свой специальный алгоритм, а то и несколько сразу, так как некоторые программы поддерживают несколько разных способов упаковки. Если антивирус верно определил, чем упакован файл, и если он поддерживает данный алгоритм распаковки, то успешно извлечет из файла код программы и проверит его. У антивируса начинаются проблемы в том случае, когда тип упаковщика ему неизвестен. Антивирусы умеют вскрывать файлы, сжатые большинством популярных упаковщиков.
Для того чтобы попавший в базу троян или вирус перестал определяться антивирусом, необходимо либо упаковать его заново неизвестным антивирусу упаковщиком, либо затруднить или сделать невозможным определение того, чем сжат файл. Сейчас я покажу, как это можно сделать.
Приступаем
Для опытов я взял давно присутствующий во всех антивирусных базах вирус MyDoom.e. Для проверки я использовал два антивируса, которые нашлись у меня на компьютере, - Kaspersky Anti-Virus 4.5 и Norton Anti-Virus 2002. Данный экземпляр MyDoom запакован UPX’ом - довольно известным и распространенным упаковщиком. Я определил это по названиям секций в PE-заголовке файла (UPX0 и UPX1), а также по присутствующей там строчке «1.24 UPX». Распаковать UPX не составляет труда - это позволяет делать и сама утилита upx.exe, стоит только указать ключ -d. Практически все антивирусы умеют делать это, так как разработчики UPX активно сотрудничают с компаниями, занимающимися разработками в сфере сетевой безопасности, о чем прямо упоминается в лицензии программы. На самом деле распаковать файл бывает непросто. Не все программы для сжатия исполняемых файлов поддерживают распаковку. Приходится искать в интернете специальные распаковщики, которые далеко не всегда работают корректно.
После распаковки файл, конечно же, тоже определяется антивирусом. Теперь необходимо запаковать файл таким упаковщиком, который был бы ему неизвестен. Упаковщиков в инете действительно много, и есть из чего выбрать. Для опытов я выбрал PECompact2. Этот упаковщик замечателен тем, что дает на выбор пять разных вариантов сжатия и два загрузчика. Различные способы сжатия реализованы в виде кодеков.
Я взял распакованный файл и попытался сжать его заново. Были выбраны следующие настройки упаковщика: наивысший уровень компрессии, кодек для сжатия - LZMA SDK Codec, загрузчик - стандартный. Я выбрал именно LZMA, так как именно этот алгоритм дает наименьший размер итогового файла. Высокий коэффициент сжатия достигается за счет использования того же самого алгоритма сжатия, что используется в архиваторе 7zip. По размеру сжатых файлов 7zip, как известно, иногда обгоняет даже RAR.
Вирус успешно сжался. Затем я проверил получившийся сжатый файл антивирусными программами AVP и NAV, и что ты думаешь? Оба антивируса показали, что файл чист! Это говорит о том, что используемый кодек сжатия им неизвестен и ничего подозрительного в этом файле антивирусы не углядели.
После сжатия необходимо проверить вирус или троян на работоспособность, а то может получиться так, что на компьютере-жертве он просто вылетит с ошибкой. Такое иногда случается со сжатыми файлами. Разумеется, запускать вирус на своем компе, чтобы проверить, работает ли он, я не стал. Для проверки можно просто взять несколько других программ, сжать их с теми же параметрами и проверить, не возникают ли в них ошибки. Если все программы заработали, то и с Трояном, скорее всего, ничего не случится.
Маскировка
Для повышения защиты от детектирования антивирусом нужно применить дополнительные меры по маскировке. Можно вообще не переупаковывать файл, а попытаться скрыть от антивируса информацию о том, чем на самом деле бинарник сжат. Допустим, вирус сжат обычным UPX. Если антивирус не будет об этом знать, то не сможет найти подходящий способ распаковки. Защитить программу от определения типа компилятора и упаковщика, использованного для ее создания, позволяет модификация точки входа. Эту процедуру можно выполнить с помощью специальных утилит, таких как, например, HidePE. С помощью этой программы можно сделать так, чтобы файлы, упакованные, например, с помощью UPX, определялись как упакованные ASProtect или VBOX. После обработки этой программой вируса Mydoom.e ни Kaspersky, ни Norton не смогли его определить. От разработчиков HidePE доступна еще одна подобная программа - StealthPE. Она отличается более богатым набором инструментов для скрытия информации о типе упаковщика. Среди таких программ от других разработчиков следует упомянуть о DotFix FakeSigner, которая предлагает на выбор более 200 различных сигнатур компиляторов и упаковщиков для внедрения в программу.
Возможные проблемы
В реальной ситуации с распаковкой и упаковкой программ может возникнуть куча проблем. Например, у тебя есть троян, но ты не знаешь, чем он упакован. Можно попытаться использовать одну из специальных утилит, например, PEiDentfier или PE Sniffer из PE Tools. Если эти программы не дали тебе необходимой информации, тогда попытайся определить на глаз. Разработчики упаковщиков любят вставлять названия своих программ в обработанные файлы. Так что если ты нашел в начале файле «FSG», то, скорее всего, перед тобой файл, сжатый именно FSG. Допустим, ты знаешь, чем упакован файл, но этот упаковщик не поддерживает распаковку. Не беспокойся, умные люди наверняка давно написали распаковщик именно для этой программы. Как говорит разработчик UPX: «Just do a websearch on "unpackers"». Любой алгоритм упаковки можно сломать, просто некоторые алгоритмы ломаются на лету, а некоторые требуют специального подхода и недюжинных знаний в программировании на ассемблере.
Что в итоге
Что можно сделать с помощью этих несложных процедур? Много чего. Спровоцировать новую вирусную эпидемию, взяв известный вирус и наделав из него пять новых разновидностей. Поставить троян на машину человека, который может хоть каждый день сканировать свой жесткий диск антивирусным сканером и ничего не обнаруживать. Всеми этими способами успешно пользуются разработчики программного обеспечения для защиты своих творений от взлома. Крэки все равно рано или поздно появляются, но хорошая защита исполняемого файла может как минимум задержать этот процесс. На пару деньков. Не проспи Новый год, удачи! :)
Оверлеи
Некоторые программы дописывают в свое тело некоторое количество дополнительных данных, о которых нет данных в PE-заголовке, - оверлеи (overlays). При сжатии такого файла эти данные могут быть утеряны. Оверлеи могут хранить нужную для работы программы информацию, поэтому терять их не стоит. Во многих упаковщиках предусмотрена функция сохранения оверлеев. Например, в UPX это ключ -overlay=copy. Насколько корректно упаковщик работает с оверлеями, можно проверить, попробовав сжать флеш-мультик, который представляет из себя не что иное, как Flash Player с прикрепленной флешкой. Если запаковать его без сохранения оверлея, то после запуска ты увидишь лишь пустое окно, так как мультик не сохранится.
Нужный софт
Если ты захочешь повторить мои эксперименты, тебе потребуется софт, который я упоминал в этой статье:
HidePE, StealthPE http://bgcorp.narod.ru
DotFix FakeSigner www.dotfix.com
UPX 1.90w http://upx.sf.net
FSG 2.0 www.xtreeme.prv.pl
PE Compact 2.10 www.bitsum.com
PE Tools/PE Sniffer www.uinc.ru
Как всегда, этот софт ты можешь найти на нашем диске, а также на сайте http://ired.inins.ru/xa.
Простые советы
Чтобы добиться наилучшего результата, экспериментируй! Попробуй запаковать файл разными программами с различными алгоритмами сжатия - результат работы будет разнообразным. Какая-то из софтин сожмет твой бинарник в 10 раз, но он банально не запустится. Какая-то сожмет на 30%, обеспечив стабильную работу до проверки антивирусом. Но ты выберешь ту, что уменьшила размер твоего чудо-бинарника вдвое, а вероятность нелепого конфликта с антивирусом свела к нулю. Также ты можешь просто вставить в свою программу сигнатуры других программ для сжатия, что окончательно запутает глупые антивирусы.
INFO
После сжатия необходимо проверить вирус или троян на работоспособность, а то может получиться так, что на компьютере-жертве он просто вылетит с ошибкой.
WARNING
Помни, что любые действия по распространению вредоносных программ караются Уголовным кодексом РФ. Не следует нарушать законы страны, в которой ты живешь.