10. Механизмы обнаружения

Механизмы обнаружения

Введение

Для обнаружения вредоносных программ в решениях по безопасности используется несколько методик. Важно понимать, какие методы используются для обнаружения или классификации вредоносного ПО.

Обнаружение статики/сигнатур

Сигнатура - это ряд байтов или строк в составе вредоносной программы, которые однозначно ее идентифицируют. Также могут быть заданы другие условия, например, имена переменных и импортируемых функций. После сканирования программы решение безопасности пытается сопоставить ее со списком известных правил. Эти правила должны быть предварительно созданы и переданы в решение безопасности. YARA - один из инструментов, который используется производителями средств защиты для создания правил обнаружения. Например, если шелл-код содержит последовательность байтов, начинающуюся с FC 48 83 E4 F0 E8 C0 00 00 00 41 51 41 50 52 51 то это может быть использовано для обнаружения того, что полезная нагрузка представляет собой Msfvenom's x64 exec payload. Аналогичный механизм обнаружения может быть использован и для строк внутри файла.

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

Обнаружение хэширования

Обнаружение хэширования является подмножеством статического/сигнатурного обнаружения. Это очень простой метод обнаружения, который является самым быстрым и простым способом обнаружения вредоносных программ. Данный метод заключается в простом сохранении хэшей (например, MD5, SHA256) известных вредоносных программ в базе данных. Хеш файла вредоносной программы сравнивается с хешем из базы данных решения безопасности, чтобы определить, есть ли положительное совпадение.
Уклониться от обнаружения хэширования очень просто, хотя, скорее всего, одного этого недостаточно. Если изменить хотя бы 1 байт в файле, то хэш файла изменится для любого алгоритма хэширования, и, следовательно, файл будет иметь хэш, который, скорее всего, будет уникальным.

Эвристическое обнаружение

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

Динамический эвристический анализ (обнаружение в песочнице)

Обнаружение в "песочнице" динамически анализирует поведение файла, выполняя его в среде "песочницы". В процессе выполнения файла решение безопасности будет искать подозрительные действия или действия, которые классифицируются как вредоносные. Например, выделение памяти не обязательно является вредоносным действием, а вот выделение памяти, подключение к Интернету для получения шелл-кода, запись шелл-кода в память и выполнение его в такой последовательности считается вредоносным поведением.
Для обнаружения среды "песочницы" разработчики вредоносного ПО встраивают в нее антипесочные технологии. Если вредоносная программа подтверждает, что она выполняется в "песочнице", то она выполняет доброкачественный код, в противном случае - вредоносный код.

Обнаружение на основе поведенческих факторов

После запуска вредоносной программы решения безопасности будут продолжать поиск подозрительных действий, совершаемых запущенным процессом. В частности, будут обнаружены такие подозрительные признаки, как загрузка DLL, вызов определенного Windows API и подключение к Интернету. После обнаружения подозрительного поведения решение безопасности проведет сканирование запущенного процесса в памяти. Если процесс признан вредоносным, он завершается.

CНекоторые действия могут привести к немедленному завершению процесса без выполнения сканирования памяти. Например, если вредоносная программа выполняет внедрение процесса в notepad.exe и подключается к Интернету, это, скорее всего, приведет к немедленному завершению процесса из-за высокой вероятности того, что это вредоносная активность.
Лучший способ избежать обнаружения по поведению - заставить процесс вести себя как можно более доброкачественно (например, не порождать дочерний процесс cmd.exe). Кроме того, сканирование в памяти можно обойти с помощью шифрования памяти. Это более сложная тема, которая будет рассмотрена в следующих модулях.

API Hooking

Перехват API - это техника, используемая решениями безопасности, в основном EDR, для мониторинга выполнения процессов или кода в реальном времени на предмет вредоносного поведения. API hooking работает путем перехвата часто используемых API и последующего анализа параметров этих API в режиме реального времени. Это мощный способ обнаружения, поскольку он позволяет решению безопасности видеть содержимое, передаваемое в API после его деобфускации или расшифровки. Такое обнаружение считается комбинацией обнаружения в реальном времени и обнаружения на основе поведения.
На приведенной ниже схеме показан высокий уровень API hooking.

Существует несколько способов обхода крючков API, таких как отсоединение DLL и прямые вызовы системы. Эти вопросы будут рассмотрены в последующих модулях.

Проверка IAT

Одним из компонентов, рассмотренных в структуре ПЭ, является таблица адресов импорта (Import Address Table или IAT). Если кратко описать функциональность IAT, то она содержит имена функций, которые используются в PE во время выполнения. В ней также указаны библиотеки (DLL), которые экспортируют эти функции. Эта информация является ценной для решения по обеспечению безопасности, поскольку позволяет узнать, какие WinAPI использует исполняемый файл.

Например, программы-вымогатели используются для шифрования файлов, поэтому они, скорее всего, будут использовать криптографические функции и функции управления файлами. Когда решение безопасности видит IAT, содержащий такие типы функций, как CreateFileA/W, SetFilePointer, Read/WriteFile, CryptCreateHash, CryptHashData, CryptGetHashParam, то программа либо помечается, либо подвергается дополнительной проверке. На рисунке ниже показан dumpbin.exe инструмент, используемый для проверки IAT бинарного двигателя.

Одним из решений, позволяющих избежать сканирования IAT, является использование хеширования API, которое будет рассмотрено в последующих модулях.

Ручной анализ

Несмотря на обход всех вышеупомянутых механизмов обнаружения, "синяя" команда и специалисты по анализу вредоносных программ все равно могут вручную проанализировать вредоносную программу. Защитник, хорошо разбирающийся в реверс-инжиниринге вредоносных программ, скорее всего, сможет обнаружить их. Кроме того, защитные решения часто отправляют копии подозрительных файлов в "облако" для дальнейшего анализа.
Разработчики вредоносного ПО могут применять методы защиты от реверсинга, чтобы усложнить процесс реверс-инжиниринга. К таким методам относятся обнаружение отладчика и обнаружение виртуализированной среды, которые будут рассмотрены в следующих модулях.