В предыдущей статье мы рассказывали о том, что такое шелл-код и как он используется хакерами. В сегодняшней статье вы узнаете о том, как обнаружить шелл-кoд на взломанной машине.
Хакеры, дорожащие своей свободой и репутацией, пишут шелл-коды, используя техники, скрывающие их атаку. Так, типичная система обнаружения вторжений (англ. IDS) обычно просматривает весь входящий сетевой трафик в поисках структуры, специфичной для шелл-кода.
Если IDS находит такую структуру, то пакет, содержащий эту сигнатуру, уничтожается до того, как он еще достигнет своей цели. Однако слабая позиция IDS состоит в данном случае в том, что если трафик закодирован, то распознать его не удастся. Теперь вы понимаете, почему так ценно шифрование?
Как обнаружить шелл-кoд
Для анализа семпла нам потребуется определенные инструменты:
- IDA Pro (with plugins)
- Ollydbg
- PEiD (with Krypto ANALyzer)
Ну что же, приступим! Первым делом открываем PEiD и грузим туда наш семпл. Все как и ожидалось, никаких сюрпризов. Однако мы помним, что имеем дело с криптографией в коде малвари, поэтому попробуем запустить плагин Krypto ANALyzer (должен быть предварительно подгружен в PEiD). И вот что мы видим: сигнатуры обнаружены.
Идем дальше. Открываем IDA Pro и загружаем туда семпл, минуя множество окон и малоинформативных сведений, обращаем внимание на таблицу ресурсов… Да, и здесь тоже нет ничего бросающегося в глаза.
Быть может, попытаем счастья в поиске сетевой активности? Хм… Запускаем Process Explorer, далее выделяем процесс, запущенный нашим вредоносом, переходим в «Свойства», жмем вкладку Strings и параллельно запускаем сетевую акулу Wireshark, в окне анализа пакетов можно обнаружить GET-запрос на веб-ресурс http://www.practicalmalwareanalysis.com. Данные на вкладке Strings утилиты Process Explorer и выдернутые из пакета Wireshark совпали.
Вернемся к дизассемблеру IDA Pro. На графической диаграмме замечаем любопытные строки: подпрограмма @0x00401300 загружает некий ресурс в двоичном виде и применяет операцию XOR для некоторого значения ‘;’. На следующем скриншоте это весьма явно заметно.
Ниже скриншот окна из IDA Pro, где желтым подсвечены инструкции шифрования с помощью операции XOR.
И у нас возникает закономерный вопрос: какой ключ (шифр) используется для кодирования и что конкретно он кодирует? Вспоминая то, что мы нашли раньше, можно сделать вывод, что ключ ‘;’ призван декодировать строку, содержащую URL http://www.practicalmalwareanalysis.com.
Итак, мы определили, какой алгоритм шифрования используется и какие данные он шифрует. Пора подключать плагины, которые помогут нам в декодировании. Мы будем использовать инструменты поиска сигнатур FindCrypt2, Krypto ANALyzer и IDA Entropy Plugin, чтобы определить другие механизмы кодирования.
KANAL plugin обнаружил четыре адреса, использующих символы из строки ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/. Как думаете, на что это похоже? Да-да, мой друг, вы правильно подумали — этот набор символов представляет собой алфавит, из которого потом делаются перестановки.
А что же с сетевым трафиком?
Для его кодирования используется алгоритм Base64. Ниже представлен скрин из отладчика OllyDbg, иллюстрирующий закодированные строки.
А вот скриншот все из того же отладчика, содержащий инструкцию, которая отвечает за сам процесс кодирования.
Где-то в коде есть функция, отвечающая за декодирование информации по алгоритму Base64, и находится она по адресу 0x004010B1.
Посмотрим этот код на диаграмме из IDA Pro, желтым подсвечены ключевые характеристики кодирования, а именно: максимальная длина сообщения — 12 символов. В описании алгоритма максимальная длина в Base64 составляет 16 байт.
На сегодня все. Вы молодец, если смогли дочитать эту статью до конца, и было бы здорово, если теперь смогли бы повторить все лабораторные работы, не подглядывая.
Наш цикл статей по реверсингу для начинающих на этом заканчивается. Безусловно, мы рассмотрели только самые базовые и ключевые аспекты анализа вредоносных программ, и осталось очень много тем, о которых стоило бы рассказать. Можно продолжать эту тему до бесконечности и, наверное, написать даже целую книгу.
Надеюсь, вам было интересно и вы теперь знаете как обнаружить шелл-кoд. Узнали что-то новое для себя и теперь представляете, что такое работа вирусного аналитика.