В свою очередь, секция данных CLR содержит два важных сегмента: сегмент метаданных и сегмент кода промежуточного языка (IL):
Метаданные содержат информацию, относящуюся к сборке, включая манифест сборки. Манифест подробно описывает сборку, включая уникальный идентификатор (с помощью хеша, номера версии, и т. д.), данные об экспортируемых компонентах, расширенную информацию о типе (поддерживаемую общей системой типов (Common Type System — CTS)), внешние ссылки, и список файлов в сборке. Среда CLR широко использует метаданные.
Код промежуточного языка (Intermediate Language — IL) — абстрактный, независимый от языка код, который удовлетворяет требованиям общего промежуточного языка (Common Intermediate Language — CIL).NET CLR. Термин «промежуточный» относится к природе кода IL, обладающего межъязыковой и кроссплатфор-менной совместимостью. Этот промежуточный язык, подобный байт-коду Java, позволяет платформам и языкам поддерживать общую среду. NET CLR. IL поддерживает объектно-ориентированное программирование (полиморфизм, наследование, абстрактные типы, и т. д.), исключения, события, и различные структуры данных.
8.7.2. Основные методы размещения программного трояна в РЕ-файлах
В работе [96] проанализировано несколько наиболее известных методов, используемых для размещения вредоноса в PE-файле. Чтобы понять суть излагаемого материала читателю необходимо быть знакомым с ассемблером для архитектуры х86 и отладчиками хотя бы на среднем уровне и понимать формат РЕ файлов. Этот документ был опубликован 8 декабря 2016 года на сайте pentest.blog, а также подготовлен в PDF формате для офлайнового чтения. Ниже мы приведем только основные его положения, наиболее ясно изложенные в работах [97-100].
Все специалисты по безопасности и аналитики «вредоносов» имеют дело с бэкдорами на ежедневной основе. Помещение трояна в систему или в конкретную программу — наиболее популярный способ для поддержки постоянного доступа к целевой машине. В большинстве статей рассказывается о методах для имплантирования вредоносов в 32 битные РЕ файлы, но поскольку РЕ-формат представляет собой модифицированную версию формата Unix COFF (Common Object File Format; Общий формат объектных файлов), логика, заложенная в основу этих техник, применима и ко всем остальным типам исполняемых файлов. Кроме того, незаметность встроенного программного вредоноса очень важна и напрямую влияет на длительность нахождения в системе. Методы, которые будут описаны ниже [97-101] направлены на снижение процента обнаружения трояна настолько насколько возможно.
Прежде всего нам следует определиться с используемой далее терминологией, для чего дадим определение четырем основным понятиям.
Как известно специалистам по информационной безопасности в сети существуют целые группы, состоящие из «светлых» хакеров (или «белых шляп»), которые атакуют цифровую инфраструктуру организации, как если бы это делал реальный злоумышленник, только и исключительно для того, чтобы протестировать устойчивость этой системы к различным потенциальным внешним угрозам (по-другому это называется пентест). Например, компания Microsoft уже много лет регулярно проводит подобные кибер-учения. Плюсы от подобных мероприятий лежат на поверхности — в процессе могут найтись «бреши» в защите и новые проблемы безопасности, которые можно заранее устранить. Кроме того, здесь могут обнаружиться пути попадания конфиденциальной информации наружу, нестандартные схемы эксплуатации и другие «недокументированные» возможности системы.
ASLR представляет собой технику безопасности, направленную на защиту от атак, связанных с переполнение буфера. Чтобы не дать злоумышленнику корректно перейти на определенную функцию внутри памяти, ASLR в случайном порядке выстраивает позиции ключевые областей информации в адресном пространстве процесса. Сюда же включается базовый адрес исполняемого файла и позиции стека, кучи и библиотек.
Code Cave (пещера в коде) представляет собой кусок кода, который записывается другой программой в память стороннего процесса. Этот код может быть выполнен посредством создания удаленного потока внутри целевого процесса. Code cave зачастую является ссылкой на секцию скриптовых функций кода, куда в принципе можно инжектировать любые инструкции. Например, если в памяти скрипта 5 байт, и 3 байта используются, в оставшиеся 2 байта скрипта можно добавить внешний код.