Набор статей и руководств по дизассемблеру IDA


             

ВИРУСЫ В СКРИПТАХ IDA - часть 5



Рассмотрим типичную ситуацию - пишет человек книгу, которую периодически резервирует на внешний носитель (дискету, скажем). При этом, разумеется, новая копия затирает предыдущую. Если в этот момент целостность сохраняемого документа была нарушена то восстановление окажется невозможным (ведь оригинал затерт). Что стоит вирусу в огромном документе стереть несколько фрагментов или исказить их? Маловероятно, что пользователь на это сразу обратит внимание. А когда обратит, то скорее всего будет уже поздно и потребуется тщательно перечитать весь текст, проводя утомительную работу по его восстановлению. То же можно отнести и к электронным таблицам, например. Или текстам программ (на платформах Visual Studio, IDA и т.д.)
Проблема в невозможности отличить действия пользователя от действий вируса. Макрос оболочки FAR, удаляющий все файлы без подтверждения будет работать и защищенных операционных системах, наследуя права пользователя, и в отличие от "обычных" вирусов он не вызовет подозрений при установке. Да и антивирусы его не заметят. Ну никто не собирается поддерживать все программные пакеты, включая такие незначительные как FAR.
Итак, макрокоманды. Записанные последовательности нажатий или сочетаний клавиш, которые могут впоследствии выполняться автоматически. Это настолько удобно, что сегодня поддерживается практически всеми пакетами. Отказываться от этой возможности бессмысленно, но необходимо по крайней мере обеспечить такой уровень безопасности, что бы вирус не мог создавать и назначать горячие клавиши макросам самостоятельно.
К сожалению в жизни макросы настолько тесно связаны с интегрируемым языком, что последний называют макроязыком, чаще чем скриптами. Вирусу ничего не стоит, скажем, на клавишу Insert "подцепить" последовательность в стиле "Выделить все", "удалить", "записать". После чего пользователю остается только рвать на себе волосы.
В IDA нет подобных функций и никакого программного управления макросами там нет. Все они должны быть непосредственно заданы в файле idatui.cfg или введены с клавиатуры. Однако, это ограничение для вирусов "прозрачно". Они открывают нужный файл, записывают в него вредоносный макрос и_
Другие пакеты имеют схожие проблемы с безопасностью. Некоторые из них, как например FAR, хранят макросы в реестре. Вирус может либо импортировать новую запись в реестр, либо воспользоваться функциями API для его модификации. И то и то современные приложения обычно предоставляют скриптам в свое распоряжение.
Кроме того, существует такое понятие, как эмуляция ввода. Для этого достаточно послать окну соответствующую серию сообщений. Причем никто не запрещает выходить за пределы родительского окна и посылать сообщения любому на свой выбор. Для этого достаточно воспользоваться функцией Win32 API FindWindow.
Чаще всего предметом атак становиться эксплодер или проводник Windows. Вирус может использовать его для размножения и внедрения в другие объекты, а так же для всевозможных "шуток" типа трясущихся или "убегающих от курсора" окон.
Заявление, что такое возможно из языка IDA вызвало большой скепсис среди разработчиков антивирусов. Действительно, ее язык не поддерживает функции win32 API и никак не представляет такой возможности. На само же деле это возможно. Возможно благодаря функции _CALL, которая передает управление по указанному физическому адресу. Впрочем, задача вычисления адресов требуемых функций, и передача параметров (call никаких параметров не принимает и не возвращает) достаточно нетривиальна и интересна сама по себе. Не вникая в подробности технической реализации, оптимальное решение заключается в поиске свободного фрагмента памяти (а под win32 это уже весьма нетривиальная задача и для ее решения необходимо быть осведомленным во многих тонкостях организации памяти) и копировании в него простейшего менеджера, обеспечивающего обмен параметрами и вычисления необходимого адреса процедуры. Разумеется, что ничего не остается, кроме как воспользоваться GetProcAddress. Весь фокус в том "волшебном" способе получения адреса этой функции. Зная его ничего не стоит вызывать из IDA все богатство функций win32 API. В этом случае возможности вируса будут ограничиваться лишь злобностью или фантазией злоумышленника.
Все описанные выше вирусы можно назвать неризедентыми, поскольку они активны только в момент запуска макроса или скрипта. Однако, существуют и такие, что остаются в течении всего сеанса работы.
Что бы получать управление вирусу приходится перехватывать одно из многочисленных событий, таких, например, открытие файла или документа, начало и завершения сеанса работы. По аналогии с древними "досовскими" вирусами это можно назвать перехватом прерываний. Хотя в данном случае рассматриваются уже не прерывания, но с точки зрения вируса нет существенной разницы, да и обработка их осуществляется аналогично.
Отметим, что только резидентные вирусы способны стелсироваться. Для этого они должны грузиться по возможности раньше остальных программ. В IDA файл IDA.IDC автоматически выполняется каждый раз при запуске. Очень часто он становиться объектом атаки вирусов. К счастью он состоит не многим более десятка строк и любые посторонние включения нетрудно заметить. Впрочем, это не характерно для других приложений. Часто число строк в стартовых файлах (то есть файлах инициализации) очень велико и их нельзя отключить без ущерба для работы системы. Чем больше файл, тем легче затеряться в нем вирусу. Особенно, если приложение не озабоченно проверкой целостности своего хозяйства.
Стоить отдать должное тем разработчикам, которые из соображений политики безопасности хотя бы предоставляют возможность отключения обработки макросов, скриптов и событий. Word на самом деле не относиться к их числу. Генерация событий не отключается. Блокируется лишь выполнение макросов. При этом существует достаточно много способов перехватить управление на себя (ведь события все продолжают генерироваться и обрабатываться!) То что пока нет известных вирусов, реализующих такие идеи, еще не повод беспечно считать, что их не будет в и дальнейшем.
Впрочем, разработчикам антивирусов вероятно это известно, более того даже имеют готовые модули для интеграции в свой продукт, но не делают этого. Почему? Не хотят вирусописателям дарить лишние идеи. Ждут пока те до этого додумаются сами. Это по официальным данным.
А по неофициальным - просто дают понять значимость новых версий и необходимость технической поддержки. Какая разница догадаются вирусописатели до новой идеи сегодня или через день. А вот пользователь страдает. Его любимый антивирус не защищает от новых насекомых, а ведь мог бы_.
В этот отношении IDA аналогична. Файл 'OnLoad.idc' выполняется при любой загрузке анализируемых файлов в дизассемблер. Следовательно, вирус может это перехватить и представить файл как незараженный.
Такие вирусы действительно существуют. Они поражают PE файлы windows и отличаются от "обычных" только тем, что так модифицируют 'OnLoad.idc', что с IDA неправильно дизассемблирует зараженные файлы, следовательно и результаты анализа окажутся неверны. Конечно, трудно поверить, что разработчики и исследователи вирусов могу допустить такое на своем компьютере. Но где гарантия что беспечность не сыграет своей злой роли, так что на это просто не обратят внимание? Тем более, что IDA широко используется для анализа вирусов и противодействие ей это достаточно эффективный способ затруднить анализ.
Отсюда же возможно внедрение вируса во все дизассемблируемые файлы. Дело в том, что IDA лишь однократно загружает файл в свою базу, а потом к нему уже никогда не обращается. Неплохая мысль после окончания загрузки его инфицировать. Если до этого момента файл был здоров, что и подтвердит дизассемблирование, то никто не поинтересуется дальнейшей судьбой этого файла.
Такое случилось в одной организации, когда уважаемая фирма подрядилось провести в оной тщательный поиск вирусов и закладок. Юный хакер в это время сумел добраться по локальной сети организации и модифицировать файл 'OnLoad.idc' (а поиск "насекомых" проводился, разумеется, с помощью IDA). В результате ни одна закладка обнаружена не была, да еще и оказались добавлены новые.
Нельзя назвать мастером того, кто досконально не знает своего инструмента. Его сильных и слабых сторон. К сожалению, сегодня программные пакеты настолько сложны и велики, что просто не реально полностью изучить их до появления новой кардинально переработанной версии.
Следовательно, даже специалисты не застрахованы от атак злоумышленников. И это случается на порядок чаще, чем того можно было предполагать. Ведь не все "специалисты" профессионалы. Это такие же люди с присущими им слабостями и беспечностью.
Только беспечностью объясняться вера в непогрешимость IDA. На самом же деле она, как и любой другой программный пакет может быть заражена вирусами без ведома пользователя. И если разработчики антивирусного обеспечения не изменят своего отношения к ситуации в ближайшем времени, то вирусописатели могут склониться в сторону вирусов-скриптов для узкоспециализированных продуктов.




Содержание  Назад  Вперед