PDA

Просмотр полной версии : Отлов вирусов дизассемблером IDA



SDA
01.12.2005, 22:18
Сегодня существует великое множество компаний, выпускающий софт, якобы споcобный защитить от всех бед человечества. Антивирусы, файерволы, анти-руткиты, анти-кейлоггеры, анти-хакеры и прочее добро просто заполонили интернет. На каждый такой вид программ можно привести по 20 примеров от разных производителей. И все, как один, использует совершенно уникальную и неповторимую технологию, что позволяет ему работать значительно лучше и эффективнее прочих.

Действительно, некоторые программы умеют использовать традиционные средства защиты - узнавать сигнатуру вируса из базы данных, дедовским способом закрыть порты, или, увидев в таблице импортов динамической библиотеки функцию SetWindowsHookEx, радостно закричать на нее, что это страшный вирус.

С каждым днем защиты совершенствуются, хакерам/вирьмейкерам и прочей нечести становится все труднее зарабатывать на кусок хлеба. Но почему-то идеальной защиты до сих пор не придумано, и антивирусы с анти-хакерами до сих пор достаточно тупы. Что не лучшим образом влияет на сохранность конфиденциальной информации бедных юзеров. Стоит лишь немного поменять / переписать / зашифровать вирус/кейлоггер/бекдур, и любой Антивирус Касперского вместе с NOD32 почему-то хором перестают кричать на 5_минут_назад_вирус. Вы часто получали от "друзей" "прикольный flash-мультик", проверяли его антивирусом, запускали - и все было в порядке? Но очень скоро откуда-то появлялись непонятные окошки с надписями типа "Коля - дурень", переворачивался экран, открывался дисковод, отключалась мышка... Если такое с Вами когда-то произошло, то можете быть уверены, это самое лучшее последствие из тех, которое могло произойти после запуска "не той" программы.

Большинство вредоносных программ скрытны. Ваш бухгалтерский отчет за третий квартал скачивается украинским хакером, Вашу почту читаю Ташкентские восьмикласcники в то время, как Вы, ничего не подозревая, спокойно режетесь в только что присланную игрушку. А ведь не нужно быть мистером гениальностью для того, чтобы за 5 минут, не сильно напрягаясь, определить вредоносную программу.
"Крэкерский" софт часто бывает на cracklab.ru.

Все, что нам потребуется, это дизассемблер IDA и немного мозгов. Никаких знаний ассемблера или PE-формата. Вот представьте, что Вам прислали игрушку типа змейки. Что она должна делать? Ну, наверное, выводить на экран какие-то картинки, воспринимать нажатия кнопок и все в этом духе. Но что если, пропустив гаму через IDA, Вы узнаете, что программа использует функции для работы с сетью и прописывает себя на автозапуск? Если первое еще можно оправдать интернет-обновлениями или даже игрой по сети (ага, в змейку), то второе для игры никуда не годится. Значит это неправильная гама, и мы не будем ее запускать из соображений безопасности.

Рассмотрим несколько так называемых "вирусов". Лот номер один:

Trojan.DownLoader.1007
Ни для кого не секрет, как мы любим кряки. Как замечательно скачать программу и, не платя ни копейки, пользоваться ею. Но почему-то никому не приходит в голову, что у крэкеров тоже бывает чувство юмора, и они не упустят свой шанс протроянить пару-тройку сотен доверчивых пользователей.

Дизассемблировав один из таких кряков (как ни странно, это легко сделать, перетащив нужный файл на надпись "Drag a file here to disassemble"), я заглянул в закладку Imports ИДЫ.

Запомните имена всех этих функций или выпишите где-нибудь. Все они хранятся в библиотеке WSOCK32.DLL и используются для... работы с сетью.
На кой черт таблетке с cracks.am работать с сетью?
Это неправильный кряк, мы не будем его запускать!
А из названия троя легко видеть, что занимается он ни чем другим, как скачивает из сети другой троян и запускает на нашем компьютере. А тот делает с нашей машиной, что хочется его хозяину.

Win32.HLLW.Tibic
Этот троян лежит в файлообменных сетях с заманчивым именем Microsoft Office XP Activation Crack.exe :)).
Давайте заглянем в импорты (сделав сначала File -> Close и дизассемблировать его аналогично предыдущему трояну):
Функции Reg* используются для работы с реестром. Охотно верю, что кряк может править что-то в реестре, но зачем ему либа WININET.DLL? Функции в ней, как легко видеть из их названий, используются для скачивания файлов из сети. Нужен нам кряк, качаюший что-то из инета? Нет, не нужен!

Trojan.PSW.LDPinch.400
Пинч занимается тем, что крадет пароли от многих известных программ. Он очень часто используется нашими хакерами. По своему он незаменим. Глянем импорты.
Из новых функций мы видим здесь CreatePipe и bind. Первая предназначена для перенаправления ввода-ввывода в консольных приложениях, а вторая для создания серверов. Стандартный случай для троянов. Запускается командный интерпретатор cmd.exe, открывается какой-то порт и весь ввод-вывод передается в инет, хакеру. Так осуществляется контроль над машиной.

Функция RegSetValueExA используется для установления значения ключей реестра. Давайте попробуем посмотреть, какие параметры принимает эта функция. Нажмем Alt+T. Введем названия нашей функции и будем давить Ctr+T до тех пор, пока не найдем такой кусок кода

Напротив aSoftwareMicr_0 мы видим странный комментарий. Два раза кликнув по надписи aSoftwareMicr_0, мы найдем строчку

Software\Microsoft\Windows\CurrentVersion\Run

Значит, программа что-то делает с реестром, и использует эту строку. Вообще-то любой более-менее продвинутый пользователь знает, что в этом ключе прописываются на автозапуск многие программы. Пуск -> Выполнить -> regedit. Найдите ключ в HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE - эти программы запускаются вместе с Вашей операционной системой. Уверен, Вы найдете там и Ваш антивирус.

Trojan.Microjo.17
Микроджойнер - известная хакерская утилита от создателя Пинча. Ее задача - объединять несколько программ в одну. Скрестив калькулятор со злым вирусом, можно получить внешне безобидную программу, на самом деле исполняющую вредоносный код.

Давайте сначала дизассемблируем несколько заведомо безвредных программ. Предлагаю стандартный набор: Блокнот, Калькулятор и пасьянс Косынка. Все они лежат в c:\windows\system32 и называются соответственно notepad.exe, calc.exe и sol.exe. В нормальных программах большАя часть функций импортируется из KERNEL32.DLL и USER32.DLL. Также в них почти наверняка должны использоваться функции TranslateMessage и DispatchMessage - они присутствуют во всех оконных приложениях. Если Вы продолжете эксперименты и попробуете дизассемблировать нечто серьезнее Блокнота, то обратите внимание на то, что нормальные проги могут дизассемблироваться достаточно долго - 10 минут и дольше.

Попробуем дизассемблировать Trojan.Microjo.17. Странно, это заняло всего несколько секунд (как и в случае со всеми предыдущими вирусами). Заглянем в импорты:

004010C4 LoadLibraryA KERNEL32

Всего одна функция. Странно, такого мы еще не видели. Очень подозрительная программа, совсем не похожа на нормальную. Здравомыслящий человек такую не запустит.

Только не надо делать выводы, что все, что дизассемблируется долго - не вирусы. Это совсем не так. Просто при дизассемблировании нужно про себя помечать, если оно прошло быстро. Вирусы/черви/трояны, как правило, достаточно простые программы и обрабатываются ИДОЙ в секунды. Но не стоит забывать об исключениях.

Итак, мы научились определять, прописывается ли программа на автозапуск. Также теперь мы легко разоблачим любые попытки работы с сетью без помощи всяких файерволов. Это не значит, что файерволл совсем не нужен. Беда в том, что некоторые вирусы/черви умеют обходить файерволлы, о чем почему-то не говорит ни один разработчик огненных стен. Также теперь мы на глаз способны определить подозрительность любой программы.

Нынче стало модно шифровать/паковать свои программы. Еще бы! Это позволяет уменьшить размер проги в 2-3 раза и затруднить чьи-либо попытки порыться в ее коде. В том числе и наши :((.

Для определения упаковщиков/протекторов/компиляторов существует просто незаменимая программа PEiD. Просто перетащив на окно утилиты нужную нам прогу, мы сразу узнаем все о ее упаковщике и был ли такой вообще применен. Зная имя и автора упаковщика/криптора мы найдем на просторах интернета соответствующий распаковщик/декриптор и узнаем, чем на самом деле занимается прога.

Win32.HLLW.LoveSan.based
Также известен под именем MSBlast. Пару лет назад этим червем был заражен каждый второй компьютер. Лично я еще помню сообщение об аварийном завершении работы системы и обратном отсчете одной минуты с последующим ребутом. Настоящая звезда.

Перетащив звезду на PEiD, мы убедимся, что она упакована UPX, следовательно о вредоносности программы по ее IDA - листингу невозможно судить до тех пор, пока мы не распакуем червя. Чем же распаковать этот UPX? Оказывается, что упаковщик умеет самостоятельно распаковывать упакованные им же самим программы. Пишем в командной строке "upx -d msblast.exe" и получаем распакованный файл. Убедимся, что больше он ничем не упакован, перетащив файл в PEiD. Утилита выдаст нам

LCC Win32 1.x -> Jacob Navia [Overlay]

LCC - это компилятор, значит, код распакован. Смотрим в IDA. Как видно, программа использует множество функций для работы с сетью и ни одной из USER32.DLL - следовательно, нет даже намека на интерфейс. Прога без интерфейса и работающая с сетью. Трем от греха подальше.

Win32.HLLM.Netsky.35328
Этот червь пришел одному из участников форума http://www.security-teams.net/ в письме под видом текстового документа. Он имел иконку, которую обычно имеют txt-файлы и имя
document.txt ...много-много пробелов... .exe

Файл действительно был сильно похож на текстовик, и бедняга повелся. Благо, он вскоре заподозрил неладное, и мы решили с ним эту проблему.

Запакован Netsky небезизвестным упаковщиком FSG - об этом свидетельствует PEiD. При некотором везении в достаточно короткие сроки Yandex найдет для него распаковщик. Лично мне нравится Quick Unpack - это универсальный распаковщик, поддерживающий десятки различных крипторов/пакеров разных версий и FSG в том числе. Жмем пимпу рядом с загадочным OEP, должны появиться какие-то циферки, у меня это 00401189. Затем распаковываем.

Глядим в IDA. Как видно, ничего общего с нормальными программами. Скажу по секрету, что на самом деле троян лезет в свои ресурсы, извлекает и расшифровывает что-то из них прямо в Windows-директорию. Даже представить страшно. Но об этом мы поговорим в какой-нибудь другой статье.

Вот мы и подошли к заключению. Надеюсь, я обучил Вас основным навыкам отличать вредоносный код от безобидных приложений. Возможно, когда-нибудь Вы сильно насолите кому-то. Ваш антивирус будет предательски молчать перед зловещим экзешником, и перед Вами встанет выбор: кому стоит доверять сильнее - антивирусу, интелектуальной собственности людей, заинтересованных только в своем обогащении, или своим светлым мозгам, заинтересованных в Вашей безопасности. Делайте выбор аккуратно.

http://drmist.ru