27 исследование кода вредоносных программ
Малварь на просвет. Используем Python для динамического анализа вредоносного кода
Содержание статьи
Статический анализ, как ты знаешь, подразумевает исследование исполняемого файла без его запуска. Динамический куда увлекательнее: в этом случае образец запускают и отслеживают все происходящие при этом в системе события. Для исследователя интереснее всего операции с файловыми объектами, с реестром, а также все случаи создания и уничтожения процессов. Для получения более полной картины неплохо было бы отслеживать вызовы API-функций анализируемой программой. Разумеется, экспериментировать с вредоносом нужно в изолированной среде с использованием виртуальной машины или песочницы — иначе он может натворить бед.
Подробнее о методике статического анализа вредоносных файлов ты можешь прочитать в статье «Малварь на просвет. Учимся быстро искать признаки вредоносного кода».
Для отслеживания жизнедеятельности приложений существует целый арсенал готовых средств, среди которых самое известное — утилита Process Monitor из Sysinternals Suite. Эта тулза в рекламе не нуждается, она неплохо документирована и пользуется заслуженной популярностью. Process Monitor способен отслеживать все изменения в файловой системе Windows, мониторить операции создания и уничтожения процессов и потоков, регистрировать и отображать происходящее в реестре, а также фиксировать операции загрузки DLL-библиотек и драйверов устройств.
Process Monitor из состава Sysinternals Suite
Отслеживать вызовы API-функций можно с помощью утилиты API Monitor французской компании Rohitab. Туториал по работе с этой тулзой можно найти на сайте программы, правда на английском языке.
API Monitor
Самый главный недостаток этих утилит (как, впрочем, и других широко распространенных программ такого рода) именно в их популярности. Потому что с ними отлично знакомы не только аналитики, но и вирусописатели. Далеко не любая малварь позволит использовать подобные инструменты и безнаказанно исследовать свое поведение в системе. Наиболее продвинутые трояны фиксируют любые попытки запуска антивирусов и средств анализа состояния ОС, а затем либо пытаются всеми правдами и неправдами прибить соответствующий процесс, либо прекращают активные действия до лучших времен.
Тем не менее существуют способы перехитрить малварь. Один из наиболее очевидных — изобрести собственный инструмент, который будет уметь (хотя бы частично) то же самое, что делают Process Monitor, API Monitor и им подобные программы. Чем мы, благословясь, и займемся.
Для работы мы будем использовать Python (не зря же он считается одним из самых хакерских языков программирования). Отслеживать интересующие нас события, связанные с реестром, файловой системой или процессами, можно двумя путями: используя специализированные API-функции Windows и при помощи механизмов WMI (Windows Management Instrumentation, или инструментарий управления Windows).
То есть, помимо Python, нам понадобятся модуль pywin32 и модуль WMI. Установить их очень просто (на самом деле достаточно поставить только пакет WMI, а он уже самостоятельно подгрузит pywin32):
Чтобы отследить вызовы API-функций, понадобится модуль WinAppDbg. Этот модуль работает только со второй версией Python (если говорить точнее, то потребуется 2.5, 2.6 или 2.7), поэтому старый Python рано окончательно списывать в утиль. Тем более что автор WinAppDbg пока не планирует переписывать модуль под третью версию в связи с необходимостью рефакторинга большого объема кода, о чем прямо говорит в документации. Установить модуль можно через pip:
Cкачав и установив все необходимые модули, приступим к таинству написания собственного инструмента для динамического анализа малвари.
Отслеживаем процессы
Отслеживать процессы будем с помощью механизма WMI. Это делается достаточно просто:
Кейсы для применения средств анализа сетевых аномалий: обнаружение распространения вредоносного кода
Продолжу рассмотрение кейсов, связанных с применением решений по мониторингу ИБ с помощью решения класса NTA (Network Traffic Analysis). В прошлый раз я показал, как можно обнаруживать утечки информации, а в этот раз поговорим о выявлении вредоносного кода внутри корпоративной или ведомственной сети.
А что сложного в обнаружении вредоносного кода? Поставили антивирус и он ловит любые вредоносы. Увы! Если бы было все так просто, то, наверное, можно было бы навсегда и забыть про эту проблему, но нет… Число успешных заражений вредоносным кодом меньше не становится, а все потому, что злоумышленники постоянно меняют свои техники и тактики, модифицируют вредоносное ПО, используют бестелесных вредоносов, используют легальные утилиты для администрирования (тот же PowerShell)… И это если не рассматривать ситуации, когда на отдельных узлах либо вовсе нет антивируса (айтишники не хотят его ставить, потому что он тормозит), либо для данной платформы его просто не существует. А может быть и такая ситуация, с которой мне приходилось сталкиваться неоднократно в разных компаниях. Топ-менеджер подхватывает вредонос на свой домашний ноутбук или планшет и притаскивает его в компанию, чтобы местные айтишники разобрались. Устройство подключается к местному Wi-Fi и именно так начинается внутренняя эпиидемия; даже в изолированной от Интернет сети. В любом случае антивирус далеко не всегда является спасением от современного вредоносного кода и нам нужны и иные методы для обнаружение плохих парней в нашей сети.
Чем характеризуется современный вредоносный код? Есть ли какие-то признаки, которые могут подсказать нам, что в нашей сети происходит что-то не то и к нам все-таки попала какая-то зараза? Если не брать в расчет классические вирусы, которые не имеют функции самостоятельного распространения по сети (а вы давно видели классические вирусы), то среди признаков, которые могут характеризовать наличие в сети вредоносного кода, я бы назвал следующие:
Чем отличается обычное сканирование, например, сканером безопасности, от сканирования, осуществляемого вредоносным кодом? В первом случае, в большинстве ситуаций, осуществляется перебор открытых портов на одном компьютере, потом на другом, на третьем и так далее. Такие попытки идентифицировать достаточно легко. Несложно определить, когда сканер просто проверяет всего один открытый порт в диапазоне адресов. У вредоносного же кода принцип работы другой — он сканирует узлы, находит уязвимые, перебирается на них, вновь сканирует, вновь находит уязвимые и так далее.
Именно такое развитие мы и можем распознать с помощью специальных алгоритмов, заложенных в NTA.
Дополнительной подсказкой нам служит роль компьютеров, с которых зафиксировано сканирование, — во всех случаях это рабочие станции сотрудников отдела продаж и маркетинга, которые сканируют целые подсети, логически относящиеся также к подразделению продаж.
Найдя одну точку заражения с последующим распространением вредоносного кода:
Мы можем попытаться найти и остальные потенциальные жертвы вредоносного кода:
Правильно настроив систему анализа аномалий, в следующий раз мы можем уже не проводить отдельных расследований, отвечающих на вопрос, есть у нас в сети сканирование или нет? Достаточно будет просто увидеть на главной консоли соответствующий индикатор тревоги (recon):
и кликнув на него, получить список всех, кто замечен в “противоправных” компьютерных действиях (кстати, первая иллюстрация в этой статье показывает другой способ визуализации масштаба распространения вредоносного кода).
Стоит напомнить, что казалось бы простое сканирование может быть первым сигналом для более серьезных проблем. Если фишинговые письма являются одним из первых шагов, с которых злоумышленники начинают свою деятельность, то заразив один компьютер, они расширяют свой плацдарм и основной способ сделать это начинается как раз со сканирования. Так действовал WannaCry, так действовал Shamoon, так действуют сотни других вредоносных программ, повлекших за собой серьезные инциденты.
Зафиксировав факт сканирования и распространения вредоносного кода, перед нами встает задача — провести более детальное расследование и понять, не был ли какой узел уже заражен, чем заражен, когда и т.п.? Само по себе решение класса NTA это сделать не может, так как по одной телеметрии на эти вопросы не ответишь. Но в случае с Cisco Stealthwatch нам на помощь придет бесплатное решение Cisco Threat Response, ооб интеграции с которым я уже рассказывал. Нам достаточно кликнуть на интересующем нас узле и в выпадающем контекстном меню мы увидим возможность запуска CTR, который в свою очередь может собрать информацию об интересующем нас узле из различных систем — Cisco AMP for Endpoints, Cisco Umbrella, Cisco Talos и т.п.
Вот как может выглядеть картина, которую отобразит бесплатный Cisco Threat Response, опираясь на свои возможности по обогащению и визуализации событий безопасности:
CTR нам может показать вредоносные файлы, ассоциированные с интересующим нас узлом, которые мы можем проверить через песочницу Cisco Threat Grid или сервис VirusTotal. Имея данные по одному узлу, мы можем увидеть с кем он взаимодействовал или взаимодействует в рамках инцидента, откуда началась атака, какой вредоносной код в ней задействован, как произошло проникновение внутрь сети и ответить на многие другие вопросы, которые интересуют аналитика ИБ.
А затем мы можем уже проводить дополнительную проверку полученных артефактов с помощью внешних сервисов Threat Intelligence, которые могут нам предоставить больше индикаторов компрометации, больше информации об атакующих, больше информации об используемых ими техниках и тактиках. А все началось с простого сканирования сети, обнаруженного решением по анализу аномалий с помощью Netflow (или иного flow-протокола).
Анализ методов обнаружения вредоносных программ
Рубрика: Информационные технологии
Дата публикации: 01.11.2016 2016-11-01
Статья просмотрена: 3554 раза
Библиографическое описание:
Лысенко, А. В. Анализ методов обнаружения вредоносных программ / А. В. Лысенко, И. С. Кожевникова, Е. В. Ананьин, А. В. Никишова. — Текст : непосредственный // Молодой ученый. — 2016. — № 21 (125). — С. 758-761. — URL: https://moluch.ru/archive/125/34803/ (дата обращения: 17.09.2021).
Выделены и рассмотрены основные методы обнаружения вредоносных программ. Составлены критерии оценки методов обнаружения вредоносных программ. Проведена оценка методов обнаружения вредоносных программ.
Ключевые слова: вредоносная программа, метод обнаружения, вирус, червь, троянская программа
С появления первой вредоносной программы прошло более двадцати пяти лет, но на протяжении всего этого времени компании по-прежнему терпят огромные убытки, благодаря постоянному развитию и совершенствованию вредоносных программ.Статистика показывает, что наиболее распространенными являются атаки, реализуемые с помощью загрузки враждебного содержания, например несанкционированных программ, таких как вредоносные программы («троянские кони», вирусы, черви, макро-вирусы) [1].
На данный момент существует множество лабораторий, занимающихся изучением вредоносных программ и методов противодействия им, но это не снизило активность их эксплуатации. Согласно статистике «Лаборатории Касперского» в 2015 году их продукты отразили 1996324 попыток атак вредоносного программного обеспечения для кражи денежных средств. Согласно статистике лаборатории «PandaLabs» в первом квартале 2016 года ежедневно идентифицировалось 227000 образцов вредоносного программного обеспечения. С движением прогресса появляются все более усовершенствованные вредоносные программы, из-за чего вопрос борьбы с ними по-прежнему остается открытым [2].
Существует множество методов обнаружения вредоносных программ, но большинство из них частные и подходят только в определенном случае. Наиболее часто используемые методы, охватывающие больший спектр вредоносных программ это [3]:
При сканировании программа, выполняющая его, просматривает содержимое файлов, расположенных на дисках компьютера, а также содержимое оперативной памяти компьютера с целью поиска вирусов. При этом, классическое сканирование предполагает поиск вредоносных программ по их сигнатурам — по последовательностям байтов данных, характерных для данных вирусов. Метод сканирования позволяет обнаружить такие вредоносные программы, которые не используют для противодействия антивирусным программам шифрование своего программного кода, а также полиморфизм. Посредством данного метода можно обнаружить как вирус, так и сетевого червя, но приложение, использующее данный способ требует постоянной поддержки, а именно обновления базы данных вирусов, поэтому данный способ не имеет смысла без постоянного сопровождения.
При использовании эвристического анализа контролируются все действия, которые может выполнить проверяемая программа. При этом отслеживаются потенциально опасные действия, характерные для вредоносного программного обеспечения. Посредством эвристического анализа также можно обнаружить как вирусы, так и сетевого червя, но данный подход также имеет ряд недостатков. Первый заключается в возможности появления «ложной» тревоги. Так же эвристический анализ занимает большой отрезок процессорного времени, поэтому не всегда применим.
При поиске вредоносного программного обеспечения методом обнаружения изменений периодически сканируется содержимое дисков компьютера и записываются контрольные суммы файлов и критически важных внутренних областей файловых систем. При сканировании новые значения контрольных сумм сравниваются со старыми значениями. Основным недостатком данного подхода является то, что вредоносную программу можно обнаружить только после своего выполнения. Также необходимо учитывать, что изначально проверяемые приложения устанавливаются из доверенного источника [4].
В таблице 1 приведены достоинства и недостатки методов обнаружения вредоносных программ и тип вредоносных программ, которые они способны обнаружить.
Сравнительная характеристика методов обнаружения вредоносных программ
Наименование
Типы вредоносных программ, которые могут быть обнаружены данным методом
Методика исследования вредоносных программ с использованием инструмента ProcDOT
Рубрика: Информационные технологии
Дата публикации: 30.05.2016 2016-05-30
Статья просмотрена: 720 раз
Библиографическое описание:
Сергеев, Р. А. Методика исследования вредоносных программ с использованием инструмента ProcDOT / Р. А. Сергеев. — Текст : непосредственный // Молодой ученый. — 2016. — № 11 (115). — С. 229-231. — URL: https://moluch.ru/archive/115/30893/ (дата обращения: 17.09.2021).
Статья посвящена методике исследования функциональности вредоносных программ с использованием инструмента ProcDOT. Даны конкретные шаги для подготовки к проведению анализа с обоснованием выбираемых программных систем и инструментов. Кратко охарактеризованы возможности ключевого компонента представляемой методики — утилиты ProcDOT. Приведен сценарий исследования образцов вредоносных программ по предлагаемой методике. Разработанная методика может использоваться в практической деятельности для быстрого получения информации о функциональности вредоносных программ.
Ключевые слова: компьютерная безопасность, анализ вредоносных программ, утилита ProcDOT.
Современный этап развития информационных технологий характеризуется наличием множества угроз компьютерной безопасности. Одна из самых серьезных таких угроз — всевозможные вредоносные программы. В целях изучения функциональности вредоносных программ их подвергают анализу. При этом активно используются как традиционные инструменты обратной программной инженерии (отладчики, дизассемблеры), так и различные системы и утилиты, специально разработанные для нужд анализа вредоносных программ. В данной статье приводится методика исследования активности вредоносных программ c использованием инструмента ProcDOT — специальной утилиты, предназначенной для динамического анализа вредоносных образцов.
Опишем конкретные шаги по подготовке к исследованию и анализу вредоносных программ по предлагаемой методике.
В качестве среды виртуализации для анализа предлагаем использовать среду VirtualBox [1]. Данное решение по виртуализации (базовый пакет) имеет лицензию GNUGeneralPublicLicense версии 2 и обладает такими характеристиками, как кроссплатформенность, возможность создания снимков состояния системы, что хорошо отвечает особенностям динамического анализа вредоносных программ. Далее, в среду виртуализации необходимо установить операционную систему, в которой будет запускаться анализируемый образец. Поскольку представляемая методика нацелена на исследование функциональности вредоносных программ, разработанных для операционных систем Windows, то рекомендуем использовать систему WindowsXP. Даная операционная система, несмотря на то, что уже не поддерживается, отлично подходит для задач динамического анализа вредоносного программного обеспечения.
Внутри операционной системы обязательно нужно наличие утилиты ProcessMonitor [2]. Данная утилита, разработанная компанией Sysinternals, предназначена для мониторинга файловой системы, мониторинга реестра и мониторинга процессов в режиме реального времени. Здесь интересно отметить принцип работы ProcessMonitor для анализа файловой активности. ProcessMonitor распаковывает драйвер фильтра файловой системы, который располагается внутри исполняемого файла Procmon.exe в качестве ресурса [3, с. 413]. Далее он устанавливает драйвер в память, а образ драйвера на диске уничтожается. Сам драйвер фильтра регистрирует функции обратного вызова с менеджером фильтров. Таким образом, когда менеджер ввода/вывода перенаправляет пакеты IRP драйверу присоединенного устройства менеджера фильтров, менеджер фильтров уведомляет драйвер фильтра ProcessMonitor о произошедшем событии. Из этого можно сделать вывод, что ProcessMonitor производит мониторинг активности файловой системы на уровне режима ядра, в отличие от инструментов, устанавливающих перехваты на библиотеки API уровня пользователя. Отметим необходимые действия по настройке ProcessMonitor для работы с ProcDOT. Во-первых, необходимо отключить опцию показа сетевых адресов в виде имен, отключить отображение колонки «последовательность» («Sequence»), а также включить отображение колонки идентификатора треда. Все это необходимо для правильной обработки результата работы ProcessMonitor — файла формата CSV, который будет загружаться в ProcDOT.
Опционально внутри WindowsXP может быть установлен пакет языка программирования Python. В экспериментах он применялся для удобства передачи файла-результата анализа, о чем будет сказано ниже.
Далее следует важный шаг по повышению скрытности системы анализа. В настоящий момент очень распространено наличие во вредоносных программах функциональности, обеспечивающей проверку на присутствие анализирующей среды. Если такая среда по результатам подобной проверки была обнаружена, то анализируемый образец изменяет свой поток управления и не раскрывает своего вредоносного поведения. Итак, кроме таких общих рекомендаций времени установки, как избежание по возможности установки дополнений, которые могут выдать присутствие виртуальной среды, выбор не менее двух процессоров и т. д., имеет смысл изменить параметры среды виртуализации, относящиеся к идентификаторам виртуального аппаратного обеспечения. Такая возможность обеспечивается с помощью утилиты vboxmanage.exe. Изменению, в частности, необходимо подвергнуть MAC адрес сетевого адаптера.
Следующим шагом устанавливаем дистрибутив REMnux [4] операционной системы Linux в VirtualBox. Данный дистрибутив основан на Ubuntu и заключает в себе множество инструментов для анализа вредоносных программ для Windows и Linux, изучения угроз уровня браузера (обфусцированный JavaScript), изучения файлов документов и других. Для нас главным здесь является факт присутствия на данном дистрибутиве утилиты ProcDOT.
Инструмент ProcDOT представляет собой утилиту для визуального анализа активности вредоносных программ [5]. На вход данная утилита принимает файл формата CSV, получающийся в результате работы ProcessMonitor. Результатом работы ProcDOT является граф, отображающий работающие процессы, треды, их отношения, взаимодействие с файловой системой и реестром. ProcDOT предоставляет, в частности, следующие возможности: корреляция данных ProcessMonitor и PCAP (данные сетевой активности), режим анимации, детектирование и визуализация инъектирования тредов, фильтрация отображаемых данных, возможности по расширению функциональности с помощью плагинов и другие.
Заключительным подготовительным шагом предлагаемой методики является настройка внутренней сети между машинами с WindowsXP и REMnux.
Итак, сценарий анализа вредоносной программы по предлагаемой методике следующий. Вначале в машине с WindowsXP запускается утилита ProcessMonitor. Далее, запускается образец вредоносной программы. По прошествии некоторого времени (приблизительно несколько минут) завершаем работу ProcessMonitor и сохраняем получившийся в результате файл. Далее запускаем специальный модуль Python — SimpleHTTPServer, входящий в стандартный пакет языка программирования Python. Данный модуль представляет собой http сервер и предоставляет возможность загрузки файлов по данному протоколу по сети. Поскольку машина с REMnux расположена в той же внутренней сети, что и WindowsXP, то появляется удобная возможность загрузки файла CSV в машину с REMnux, что и является следующим шагом. Далее, запускается на машине с REMnux утилита ProcDOT и в нее загружается получившийся файл с расширением CSV. На рисунке представлен снимок экрана с частью полученного в результате работы ProcDOT графа, отображающего поведенческую активность вредоносной программы.
Рис. 1. Поведенческая активность вредоносной программы в виде графа
На изображенной части графа можно видеть задействованные в процессе заражения файлы, в том числе, ushata.dll, usha.exe. Данный образец — троянская программа семейства PlugX [6]. Usha.exe — загрузчик программы «Касперский», а ushata.dll — вредоносный компонент, который выдает себя за часть программы «Касперский», получая, таким образом, управление в процессе работы usha.exe.
Таким образом, представленная методика исследования вредоносных образцов с использованием инструмента ProcDOT позволяет быстро получить информацию об активности вредоносной программы и может использоваться в практике специалистов по компьютерной безопасности.
1. VirtualBox. Documentation. — URL: https://www.virtualbox.org/wiki/Documentation (датаобращения: 25.05.2016).
2. Windows Sysinternals. Process Monitor. — URL: https://technet.microsoft.com/en-us/sysinternals/processmonitor (датаобращения: 25.05.2016).
3. Russinovich M. Windows Internals / M. Russinovich, D. A. Solomon, A. Ionescu. — Redmond, Washington: Microsoft Press, 2014. — 649.
Обнаружение вредоносных программ и эксплойтов
Для обеспечения надежной защиты компьютера антивирус должен:
Разные антивирусные продукты показывают разный уровень антивирусной защиты
Поскольку многие антивирусы уже давно представлены на рынке, некоторые пользователи могут предположить, что антивирусная защита практически не отличается друг от друга и имеет одинаковые возможности обнаружения вредоносных программ. Такие пользователи могут выбирать антивирусный продукт на основе относительно неважных критериев, например на основе красивого оформления или привлекательной рекламы.
Несмотря на то, что многие антивирусы действительно существуют в течение долгого времени, количество и диапазон угроз, которые атакуют компьютеры и другие устройства, значительно изменились за последние годы. Эффективная защита компьютера зависит от способности вендора антивируса адаптироваться к новым потребностям. При оценке эффективности обнаружения вредоносных программ и защиты от них выявляются существенные различия между антивирусами.
Постоянные инвестиции и преданность делу
Чтобы защищать своих клиентов от все более сложных компьютерных атак и обеспечить оперативную защиту при появлении каждой новой вредоносной программы, поставщики антивирусных решений должны непрерывно заниматься исследованиями в области IT-безопасности. В случае отсутствия у поставщика преданности своему делу в непрекращающейся борьбе с киберпреступниками с серьезным уровнем подготовки риску могут подвергнуться:
Некоторые антивирусы отстают в «гонке вооружений»
Если антивирус одного поставщика обнаруживает только 50% всех вредоносных программ, действующих в интернете, продукт другого поставщика – 90%, а третьего — 99,9%, нетрудно сделать вывод, кто из них предлагает лучшую защиту для компьютера.
Лишь несколько антивирусных программ и сервисов предоставляют уровень защиты, в той или иной степени близкий к 100%. Большинство антивирусов в действительности не может достичь даже 90% уровня безопасности.
Некоторым антивирусным вендорам не удается поспевать за стремительным развитием вредоносных программ. Такие вендоры проигрывают создателям вредоносных программ в «гонке вооружений». Поэтому их клиенты не слишком надежно защищены от современных компьютерных угроз.
Другие статьи и ссылки, связанные с обнаружением вредоносных программ и эксплойтов
Обнаружение вредоносных программ и эксплойтов
Далеко не все антивирусные решения и сервисы предоставляют уровень защиты, в той или иной степени близкий к 100%.