Code Cave (пещера в коде) представляет собой кусок кода, который записывается другой программой в память стороннего процесса. Этот код может быть выполнен посредством создания удаленного потока внутри целевого процесса. Code cave зачастую является ссылкой на секцию скриптовых функций кода, куда в принципе можно инжектировать любые инструкции. Например, если в памяти скрипта 5 байт, и 3 байта используются, в оставшиеся 2 байта скрипта можно добавить внешний код.
Контрольная сумма
Контрольная сумма представляет собой небольшую порцию информации из блока цифровых данных для обнаружения ошибок, которые могут появиться во время передачи или хранения файла. Обычно при помощи контрольной суммы проверяется установочный файл после его получения с сервера. Между нами говоря, контрольные суммы обычно используются для верификации целостности данных, но они не учитывают «подлинность» информации.
Рассмотрим ниже более подробно основные методы проникновения. Примеры из этого раздела будут продемонстрированы на базе исполняемого файла SSH-клиента с именем putty. Есть несколько причин для выбора именно этого приложения в качестве подопытного образца. Putty написан на C++ и использует множество библиотек и API-функций. Во-вторых, внедрение вредоноса в ssh-клиент привлекает меньше внимания, поскольку программа уже выполняет tcp-соединение, и, таким образом, будет проще избежать мониторинга со стороны системы безопасности.
Код бэкдора [96] будет взят из шелл-кода, используемого при обратном TCP-соединении и написанного Стивеном Фивером (Stephen Fever) под meterpreter. Главная цель — инжектировать шелл-код в целевой PE-файл без «порчи» функциональности приложения. Инжектированный шелл-код будет запускаться в отдельном потоке и будет постоянно пытаться подсоединиться к обработчику. Вторая задача — во время выполнения всех этих манипуляций необходимо оставаться незаметным настолько, насколько это возможно.
Общий подход внедрения вредоноса в PE-файл состоит из 4 шагов:
1. Нахождение доступного пространства для кода трояна.
2. Перехват потока выполнения.
3. Внедрение трояна.
4. Восстановление потока выполнения.
В каждом этом шаге есть свои проблемы и свои нюансы, которые напрямую влияют на устойчивость, долговременность и незаметность встроенного вредоноса, что будет показано далее.
8.7.3. Решение проблемы нахождения доступного пространства для кода трояна
Нахождение доступного пространства — первый шаг к реализации нашей задачи. Чрезвычайно важно выбрать правильное место внутри PE-файла для внедрения программного бэкдора. Оценка угрозы со стороны зараженного файла сильно зависит от того, как вы решите эту задачу. Здесь существует два подхода.
Первый — добавление новой секции. По сравнению со вторым подходом здесь больше вероятность обнаружения трояна. Хотя, с другой стороны, при добавлении новой секции у нас нет ограничений по пространству, и мы можем внедрить троян любого размера (любой сложности).
При помощи дизассемблера или редактора LordPE РЕ-файл можно расширить при помощи добавления заголовка новой секции. На рисунке ниже показана таблица секций исполняемого файла putty. При помощи PE-редактора добавлена новая секция «NewSec» размером 1000 байт.
Рис. 8.20. Таблица секций
Во время создания новой секции важно установить флаги на чтение/запись/выполнение, чтобы запустить шелл-код, когда РЕ-об-раз проецируется (тар) в память.
Puc. 8.21. Выставление флагов на чтение/запись/выполнение
После добавления заголовка секции атакующему необходимо адаптировать размер файла, что делается в шестнадцатеричном редакторе при помощи добавления пустых байтов размером с новую секцию в конец файла.
Puc. 8.22. Добавление пустых байтов
После добавления новой пустой секции необходимо запустить исполняемый файл и проверить, есть ли ошибки. Если все прошло гладко, новая секция готова к модификации в отладчике.
Рис. 8.23. Новая секция. NewSec успешно добавлена в исполняемый файл
Читать дальше
Конец ознакомительного отрывка
Купить книгу