STRUCTURAL-PARAMETRIC SYNTHESIS OF UNMANNED SYSTEMS UNDER CONDITIONS OF UNCERTAINTY BASED ON STATISTICAL ANALYSIS OF EXPERIMENTAL DATA
A.K. Grishko, N.K. Yurkov, M.H. Tran А.К. Гришко, Чан Минь Хай, Н.К. Юрков
A generalized formulation of the problem of structural-parametric synthesis of complex technical systems under conditions of uncertainty based on the results of experimental data is presented, which complements the methodology of systems engineering in life cycle management and is of current importance for the country's economy. Approaches to solving the problem of restoring design-functional connections and clarifying the design parameters and characteristics of unmanned systems obtained from the results offield tests are proposed. As an example, a prototype of a subsonic unmanned system with specified design requirements is considered. The goal of the work is to develop a methodology for statistical analysis of structural-parametric design connections and statistical assessments of the compliance of design parameters of unmanned systems under conditions of uncertainty based on experimental data. Methods. The methodological basis is the theory of structural-parametric synthesis and statistical analysis of complex systems, as well as methods of mathematical statistics and parametric optimization. Results. The problem of structural-parametric synthesis is formed by supplementing it with operators for disclosing uncontrollable factors. In order to find an analytical solution, a decomposition of the problem was carried out and the need to solve a set of interrelated problems to find a correspondence between design parameters and experimental data was shown. The quality of the reconstructed dependencies was assessed according to the criterion of regularity and unbiasedness. Conclusions. The solution to this problem allows us to analyze the compliance of the design parameters and characteristics of unmanned systems with experimental data, which makes it possible to restore the design and functional connections of the designed unmanned system. This will make it possible to more efficiently use financial, production and time resources when designing unmanned systems.
Key words: unmanned systems, structural-parametric synthesis, uncertainty, statistical analysis.
Grishko Alexey Konstantinovich, candidate of technical sciences, docent, alexey-grishko@rambler. ru, Russia, Penza, Penza State University,
Tran Minh Hai, candidate degree candidate those. sciences, Russia, Penza, Penza State University,
Yurkov Nikolay Kondratievich, doctor of technical sciences, professor, head of the department, yurkov_nk@mail. ru, Russia, Penza, Penza State University
УДК 004.056.57
DOI: 10.24412/2071-6168-2024-2-12-13
СТАТИЧЕСКИЙ АНАЛИЗ МЕТОДОВ ИНФИЦИРОВАНИЯ ФАЙЛОВ PE-ФОРМАТА ОПЕРАЦИОННЫХ
СИСТЕМ WINDOWS
Е.В. Егоров
В представленной статье осуществляется обширный анализ формата файла операционной системы (ОС) Windows, известного как Portable Executable (PE). Обсуждаются ключевые методы внедрения вредоносного программного обеспечения (ВПО) в структуру исполняемого файла, а также способы обнаружения таких вредоносных вмешательств. В рамках исследования проводится анализ информативных параметров PE-формата, пригодных для создания высокоэффективных моделей искусственного интеллекта (ИИ). Особое внимание уделяется их применимости в контексте обнаружения вредоносного кода (ВК) в файлах PE. Результаты анализа представляют собой ценный вклад в развитие методов качественного обучения ИИ, направленных на анализ и выявление вредоносных аспектов в программном обеспечении (ПО) ОС Windows.
Ключевые слова: PE-формат, вредоносное программное обеспечение, вредоносный код, искусственный интеллект, отбор признаков.
В настоящее время с постоянным ростом цифровых технологий происходит и параллельная эволюция угроз в сфере кибербезопасности. Внедрение вредоносного программного обеспечения и модификация исполняемых файлов ОС Windows PE формата являются темами, требующими серьезного внимания и интенсивного исследования.
Существующие средства обнаружения угроз, основанные на традиционных методах, в том числе и на сопоставлении сигнатур [1], сталкиваются с усилением сложности атак и их постоянным технологическим совершенствованием. В контексте данной проблемы, особенностями которой являются внедрение вредоносного программного обеспечения и трансформация файлов PE-формата, вопрос об эффективности традиционных методов становится актуальным.
Обнаружение измененных вредоносных файлов PE-формата с использованием стандартных механизмов статического анализа файлов становится задачей нетривиальной, из-за сложности скрытия вредоносного программного обеспечения различными способами и интеллектуального прироста методов маскировки. В свете этой сложности на передний план выходит потребность в реинжиниринге средств обнаружения с использованием передовых технологий, в частности, искусственного интеллекта. Исследование роли искусственного интеллекта в области кибербезопасности открывает новые перспективы для эффективного обнаружения модифицированных вредоносных файлов.
Определение наиболее уязвимых точек, подвергающихся потенциальной модификации со стороны нарушителей, предоставит более точные критерии для идентификации вредоносных файлов при обучении моделей искусственного интеллекта. Это позволит повысить уровень детализации и точности анализа, обеспечивая моделям искусственного интеллекта более глубокое восприятие угроз и повышая их способность выявлять даже самые запутанные и тонкие формы внедрения вредоносного программного обеспечения в различные файлы PE-формата.
12
В данной статье рассматривается статический анализ исполняемых файлов PE-формата с целью выявления техник и механизмов внедрения ВПО, выявления наиболее уязвимых параметров структуры PE-формата и его недостатков, чаще всего подвергающихся манипуляциям со стороны нарушителей [2]. Полученные результаты способствуют формированию наиболее точных характеристик, необходимых для качественного и успешного обучения моделей искусственного интеллекта.
PE-формат файла ОС Windows. Portable Executable (PE) - это формат исполняемых и объектных файлов, в том числе и библиотек, используемый в 32- и 64-битных операционных системах семейства Windows. PE-формат служит для организации и хранения исполняемого кода (программ) и связанных с ним данных.
PE-формат является стандартным форматом исполняемых файлов для операционных систем Windows начиная с Windows 95 и продолжая вплоть до современных версий. Формат обеспечивает гибкость и расширяемость, позволяя включать в себя различные компоненты программы и ресурсы, что делает его универсальным для разнообразных приложений, включая исполняемые файлы, библиотеки DLL и другие [3].
PE-формат, используемый в операционных системах Windows, разделяет исполняемые файлы на два основных типа: файлы с расширением EXE и DLL.
Файлы DLL (Dynamic Link Libraries) предназначены для предоставления функций или данных, которые могут быть использованы другими программами. Эти файлы, обозначаемые расширениями .dll, .sys, .ocx, .cpl, .fon, .drv, обычно спроектированы таким образом, чтобы могли быть выполнены в контексте других программ [4].
В свою очередь, EXE-файлы предназначены для запуска в собственных процессах. Они обычно имеют расширение .exe и, в отличие от DLL, не экспортируют символы, то есть не предоставляют функций или данных для использования в других программах.
Тем не менее, несмотря на такое условное разделение, PE-формат не накладывает жестких ограничений, и поэтому возможно создание гибридных файлов. Например, EXE-файл может экспортировать символы, предоставляя свои функции для использования в других программных средах. Такая гибкость формата позволяет разработчикам создавать многофункциональные файлы, сочетая характеристики как EXE, так и DLL в одном исполняемом файле.
Структура PE файла представлена на рисунке. Атрибуты этой структуры, а также статистика по последовательностям байт этой структуры используется для получения признаков.
fanew
— MS-DOS stub
UNUSED
L-* PE SIGNATURE
COFF FILE HEADER
и
J OPTIONAL HEADER
е
н
SECTION TABLE
SECTION 1
SECTION N
OVERLAY
■ - ■ offset: О
■■■offset: ejfanew --■offset: ejfanew + 4-
--■ offset: ejfanew + 24
__ offset: ejfanew + 24 + SizeOfOptionalHeader
Основные компоненты PE-формата включают в себя:
1.Заголовок MS-DOS. Это начальная часть файла, предназначенная для совместимости с MS-DOS. MS-DOS содержит в себе подпрограмму Stub, которая обеспечивает возможность запуска программы в среде MS-DOS, если это необходимо. Атрибут e_lfanew представляет собой смещение PE File Header относительно начала файла и служит указателем на PE Signature. Важно отметить, что не обязательно, чтобы значение e_lfanew указывало на область, непосредственно следующую за MS-DOS Stub. Благодаря гибкой структуре, это смещение может быть нацелено на любое место внутри файла, и не обязательно ограничивается областью непосредственно после MS-DOS Stub.
2. Заголовок PE. Данный заголовок содержит информацию о структуре PE-файла, включая адрес, с которого начинается исполняемый код, размеры различных секций, точку входа и другие ключевые параметры. Первый элемент PE File Header представляет собой сигнатуру PE-файла, которая обязательна для присутствия и должна иметь значение PEx0x0. Она служит меткой, позволяющей определить, является ли данный файл формата PE. Если данная сигнатура отсутствует, это указывает на то, что перед нами не PE-файл.
Затем следует COFF File Header, также известный как файловый заголовок, представляющий собой структуру, содержащую общие характеристики данного PE-файла. Среди этих характеристик можно выделить: тип целевой машины, например, ARM, MIPS и др., количество секций, дата создания файла, указатель на таблицу символов, количество символов, размер опционального заголовка и характеристики файла (исполняемый или библиотека DLL). Этот файловый заголовок COFF предоставляет ключевую информацию о структуре PE-файла и его общих атрибутах.
Следующий важный элемент PE-заголовка представляет собой Опциональный заголовок (Optional Header). Эта структура содержит детализированную информацию о данном PE-файле. В ее состав входят различные параметры, такие как тип подсистемы, размер кода, объем инициализированных и неинициализированных данных (значения которых не проверяются и могут принимать любые значения), адрес точки входа (соответствует местоположению кода в первой секции, обычно .text), базовый адрес загрузки ImageBase (кратен 64кб.), выравнивание, SizeOfImage (кратен 64кб.), каталог данных (Data Directory), содержащий количество элементов, соответствующее параметру NumberOfRvaAndSizes, Checksum (не равно 0), и множество другой информации [5].
3. Таблица секций. Следом за Optional Header находится таблица секций. Количество секций может быть любым. Их наименование в целом не имеют особого значения и, по существу, не проверяются (почти везде). Загрузчик ориентируется на массив DataDirectory в опциональном заголовке для поиска необходимых данных.
Каждая отдельная секция в PE-файле характеризуется рядом параметров, включая адрес начала секции как в памяти, так и в самом файле, а также виртуальной (VirtualSize) и физической (SizeOfRawData) длинами секции. Важно отметить, что виртуальные адреса секций должны быть упорядочены последовательно, без перекрытий и промежутков, чтобы обеспечить корректную организацию памяти. Кроме того, каждая секция обладает полем Characteristics, предоставляющим информацию о том, как данная секция будет обрабатываться во время выполнения программы. Эти характеристики включают в себя права на чтение, запись, выполнение и другие особенности, которые определяют поведение секции в контексте работы программы.
В приложениях для Windows NT часто используются множество стандартных секций, таких как: .text (.CODE) для хранения кода программы, .bss для неинициализированных данных, .rdata для данных только для чтения, .data для глобальных переменных, .rsrc для ресурсов, .edata для экспорта, .idata для импорта, .debug для отладочной информации и так далее. Эти секции создают линкеры, следуя спецификации Microsoft.
Таблица экспорта. Механизм экспорта в PE-файлах обеспечивает возможность доступа к переменным или функциям из другого исполняемого модуля. В большинстве случаев EXE-файлы ограничивают внешний доступ к своим ресурсам, в то время как DLL-файлы, как правило, предоставляют экспорт функций. Для хранения информации об экспорте часто выделяется отдельная секция - .edata, в которой содержится таблица секций. Однако обычно поиск этой таблицы секций осуществляется через каталог данных, индекс которого равен 0 в массиве DataDirectory.
Таблица экспорта содержит массив, в котором хранятся адреса функций. Каждая функция в этой таблице может быть вызвана по ее ординалу, который представляет собой своего рода индекс в данном массиве. Если функция экспортируется по ординалу, загрузчик обращается к таблице адресов функций, минимизируя лишние операции. Тем не менее, в большинстве случаев функции экспортируются по именам, что приводит к необходимости дополнительного этапа поиска и связывания во время выполнения программы [6].
Таблица импорта. Механизм импорта в PE-файлах предоставляет возможность использовать функции или переменные из модулей, отличных от того, в котором выполняется программа. Например, если в нашей программе есть вызов функции GetMessage, расположенной в библиотеке KERNEL32.DLL, то вместо непосредственной инструкции CALL используется инструкция JMP DWORD PTR [XXXXXXXX]. Адрес, указанный как XXXXXXXX, фактически соответствует записи в таблице импорта, представляющей собой место, где хранится адрес функции GetMessage из библиотеки KERNEL32.DLL [6].
Это эффективное решение, позволяющее сосредотачивать адреса функций в одном центральном месте. При загрузке DLL по определенному адресу, загрузчику необходимо внести изменения только в адресе функции в таблице импорта, вместо того чтобы изменять этот адрес в каждом месте, где происходит вызов данной функции. Такой подход значительно облегчает поддержку и обновление программы, поскольку изменения в адресе функции нужно внести лишь в одном месте - в таблице импорта.
В PE-файлах существует четыре различных способа осуществления импорта: стандартный механизм импорта, биндинг, bound-импорт и delay-импорт. Каждый из этих методов предоставляет уникальные возможности и уровни гибкости в управлении внешними ресурсами. Это дает разработчикам возможность выбрать оптимальный подход в соответствии с требованиями конкретного приложения.
Основным и наиболее часто используемым методом импорта является стандартный механизм. В секции импорта содержится информация о функциях и переменных, используемых программой, а также о модулях, из которых они импортируются. При использовании стандартного механизма импорта программа получает доступ к импортируемым функциям и переменным непосредственно после своего запуска [7].
Bound-импорт представляет собой совокупность стандартного механизма импорта и биндинга. В этом подходе происходит предварительная привязка адресов функций и переменных в процессе компиляции. Программа, использующая bound-импорт, может обращаться к связанным адресам непосредственно с момента своего запуска
[7].
Биндинг - это процесс динамического связывания, при котором адреса функций и переменных устанавливаются в процессе выполнения программы, а не на стадии компиляции. Такой метод позволяет программе получать доступ к функциям и переменным в более гибкой форме, добавляя дополнительный уровень динамизма [8].
Delay-импорт представляет собой отсроченное связывание импорта до тех пор, пока он не станет необходимым в ходе выполнения программы. Это позволяет ускорить запуск программы и снизить общую нагрузку на ресурсы. Программа с Delay-импортом начинает связывать адреса функций и переменных только в момент первого вызова, что способствует оптимизации производительности [8].
4. Overlay (оверлей). Участок исполняемого файла, который не подвергается загрузке в память системным загрузчиком, называется оверлеем. Данные из оверлея могут быть загружены в память программой в процессе её выполнения, обеспечивая дополнительный функционал. Оверлеи иногда применяются с целью снижения общего объема памяти, используемого программой. В контексте данной работы оверлеи могут использоваться для размещения вредоносного программного обеспечения в случае, если виртуальное пространство программы не обладает достаточным свободным местом. В этом случае ВПО сохраняется на диске и динамически загружается небольшим загрузчиком во время исполнения программы.
Более подробную информацию о спецификации PE формата можно посмотреть на сайте Microsoft [3] или в заголовке winnt.h пакета Windows SDK.
Методы инфицирования файлов PE-формата. Для более детального и точного выявления уязвимых характеристик PE-формата представим сценарий, в котором у нас имеется незараженный файл, и мы проводим анализ возможности его инфицирования.
Метод 1. Внедрение в PE-заголовок. Общий размер всех заголовков в стандартной MS-DOS заглушке составляет в среднем 300h байт, тогда как физический адрес первой секции начинается с 400h байт. Можно сделать вывод, что около 100h байт пустого пространства, согласно рекомендациям Microsoft, потенциально ничем не заполнены, что не является оптимальным.
При заражении файла нарушитель проверяет условие SizeOfHeaders < PointerToRawData (Физический адрес первой секции) и в случае обнаружение непрерывной последовательности нулей внедряет ВПО. Затем корректирует значение SizeOfHeaders, установив его на начало первой секции, иначе вредоносный код просто не загрузиться в память системным загрузчиком, заполнив остальное место нулями. Однако, современные линкеры могут использовать данную область, помещая туда таблицу имен, содержащую перечень загружаемых DLL. Несмотря на это, отсутствие пустого пространства в PE-Header и установка значения SizeOfHeaders равное физическому началу первой секции, может являться признаком заражения файла.
Метод 2. Встраивание в упорядоченную последовательность байт
Цепочки нулей или другие регулярные последовательности (FF FF FF) необязательно должны быть в конце секции. Эти последовательности могут быть любыми, при условии, что их можно восстановить в исходный вид перед передачей управления. Если в файле присутствует более одной внедряемой цепочки, ВПО может распределиться по телу файла. Регулярные последовательности такого рода часто обнаруживаются в ресурсах, таких как изображения, например, bitmap и иконках.
Для выявления внедрения ВПО в регулярную последовательность применяется процесс дизассемблиро-вания, который представляет собой преобразование машинного кода обратно в инструкции ассемблера. Этот процесс включает в себя обнаружение длинных последовательностей команд jmp или call, протянувшихся через одну или несколько секций файла. Часто такие команды располагаются в местах, которые не характерны для обычного исполняемого кода, например, в секциях данных. Таким образом, при анализе дезассемблированного кода важно выявить аномальные последовательности переходов (jmp) или вызовов (call), которые выходят за рамки ожидаемых структур исполняемого кода.
Метод 3. Вложение в конец секции. Нарушитель исследует секции с подходящими характеристиками и достаточно свободным пространством в конце. Для этого анализируется заголовок каждой секции, вычисляя разницу между размерами SizeOfRawData (физический размер секции) и VirtualSize (виртуальный размер секции). Важным также является проверка наличия последовательности нулей в конце секции. Эти шаги позволяют определить доступное пространство для внедрения вредоносного программного обеспечения (ВПО). Стоит отметить, что не всегда физический размер больше виртуального и наоборот. Размеры корректируются с использованием специальных параметров, таких как FileAlignment и SectionAlignment.
Когда исполняемый файл загружается в память, операционная система выделяет блоки памяти для каждой секции. Параметр FileAlignment определяет минимальный размер (в байтах), кратный которому должны быть расположены различные структуры данных в исполняемом файле на диске. Это улучшает производительность при загрузке данных в память, так как часто используемые структуры данных могут быть выровнены по оптимальной границе, которая обеспечивает быстрый доступ к памяти.
SectionAlignment определяет границу выравнивания секций в виртуальной памяти, когда файл загружается в память. Обеспечивает выравнивание секций для оптимальной производительности выполнения программы. Он применяется к данным в виртуальной памяти и обеспечивает оптимальное размещение секций в памяти после их загрузки.
Значения FileAlignment и SectionAlignment могут различаться в разных операционных системах и компиляторах, но обычно это степени двойки, такие как 512 байт, 1024 байта, 4096 байт и т.д. В операционных системах семейства Windows, например, типичные значения могут быть 512 байт для FileAlignment и 4096 байт (4KB) для SectionAlignment.
Для корректной загрузки программы необходимо:
SectionAlignment должно быть больше или равно 1000h байт;
FileAlignment должно быть больше или равно 200h байт;
SectionAlignment должно быть больше или равно FileAlignment.
Если хотя бы одно из указанных условий не соблюдается, файл не будет загружен. В ситуациях, где виртуальный размер секции (VirtualSize) меньше физического размера секции (SizeOfRawData), загрузчик может игнорировать физический размер при загрузке в память. Это означает, что физический размер может принимать любое значение. Тем не менее, если SizeOfRawData превышает VirtualSize на величину, большую или равную FileAlignment, то, вероятно, в файле содержится серединный оверлей. Кроме того, если виртуальный размер секции равен нулю, то загрузчик может использовать физический размер вместо него. В этом случае физический размер будет округлен вверх до ближайшей границы, определенной параметром SectionAlignment [9].
Не все секции в исполняемых файлах предоставляют удобные возможности для внедрения ВПО, например, в такие как секция перемещаемых элементов или секция импорта может быть бесполезным, так как упаковщик может самостоятельно их реконструировать. Наиболее уязвимыми для таких манипуляций считаются секции, у которых определенные атрибуты создают подходящие условия для внедрения, например:
IMAGE_SCN_MEM_SHARED и IMAGE_SCN_MEM_DISCARDABLE сброшены (то есть секция не разделяется между процессами и не может быть удалена из памяти);
IMAGE_SCN_MEM_READ или IMAGE_SCN_MEM_EXECUTE установлены (то есть секция доступна для чтения или выполнения);
IMAGE_SCN_CNT_CODE или IMAGE_SCN_CNT_INITIALIZED_DATA установлены (то есть секция содержит исполняемый код или инициализированные данные).
Эти атрибуты делают секцию подходящей для размещения вредоносного кода, так как она может быть выполнена, прочитана, и оставаться в памяти, даже если другие части файла были удалены.
Метод 4. Внедрение путем сжатия части файла. Внедрение в регулярные последовательности представляет собой одну из форм техники внедрения в файл, при которой определенные части файла сжимаются, используя, различные алгоритмы сжатия, например, RLE (Run-Length Encoding), Хаффмана, Лемпеля-Зива и д.р. Идея заключается в сжатии подходящей секции файла, а затем использовании освободившегося места для записи внедренного кода.
Применение более сложных алгоритмов сжатия может упростить процесс выбора участков для внедрения. Однако, стоит отметить, что некоторые файлы, которые уже сжаты, или секции с атрибутом
IMAGE_SCN_MEM_WRITE, защищающим их от записи, могут быть исключением из этой стратегии. В таких случаях нарушитель подбирает более подходящие секции для внедрения, как описано во втором методе.
Распознание подобного способа возможно путем дисассемблирования (его применение указано во 2 методе) или вычисления энтропии секций.
Энтропия рассчитывается следующим образом (энтропия Шеннона) [10]:
n
H =pi log pi'
i=1
где n - количество возможных значений случайной величины; pi - вероятность появления i-го значения; log -
логарифм с основанием равным 256, что соответствует количеству возможных значений в байте.
Таким образом, энтропия H принимает значения в пределах от 0 до 1. Высокое значение энтропии в секции может свидетельствовать о наличии сжатия данных в секции, использовании упаковщиков или шифровальных методов для скрытия ВПО.
Метод 5. Увеличение размера заголовка. Максимальный размер заголовка ограничен виртуальным адресом первой секции, поскольку заголовок не может перекрываться с данными страничного изображения. Учитывая, что минимальный виртуальный адрес составляет 1000h, а стандартный размер заголовка - 300h, нарушитель может располагать около 700h свободного пространства для использования в своих целях, включая внедрение ВПО, а в случае нехватки места, оставшаяся часть заголовка загружается в оверлей.
Системный загрузчик ответственен за загрузку только первых байт заголовка, соответствующих размеру SizeOfHeaders, и оставляет остальные (если они есть) в оверлее. Нарушитель изменяет SizeOfHeaders, смещает PointerToRawData всех секций на произвольное значение, даже на гигабайт, и внедряет ВПО в заголовок. Однако в заголовке могут содержаться структуры, зависящие от физического расположения, такие как таблица отладочной информации, и после изменения заголовка они могут быть перемещены. В таком случае злоумышленнику необходимо корректировать все структуры, связанные с физическими смещениями внутри файла, перечисленные в DATA DIRECTORY Также важно убедиться в отсутствии оверлеев, поскольку их адресация происходит относительно начала файла. Нехарактерные значения SizeOfHeaders, смещения PointerToRawData и отсутствие регулярных последовательностей могут быть признаками наличия вредоносного программного обеспечения в файле
[9].
Метод 6. Перемещение части секции в оверлей. Вместо того чтобы использовать полное или частичное сжатие секции, нарушитель может просто переместить ее содержимое в оверлей, который может быть размещен в конце, середине или начале файла. Самый простой способ - это дописать содержимое секции в конец файла. При этом не требуется вносить корректировки в какие-либо поля PE-заголовка. Процесс заключается в том, что нарушитель выбирает наиболее уязвимую для манипуляции секцию, копирует размер ВПО в байтах любой части этой секции в конец файла, а на освободившееся место встраивает вредоносный код.
Устроить оверлей в середине файла, например, поместив его между секциями кода и данными, является более сложной задачей, но при этом нарушитель может достичь наиболее высокого уровня скрытности. Для этого потребуется увеличить смещение PointerToRawData всех последующих секций на значение, выровненное вверх до ближайшей границы FileAlignment, физически сдвинуть все последующие секции внутри файла и перенести выбранную часть секции в оверлей.
Обнаружение оверлея в середине файла легко осуществляется через анализ расхождения между физическими и виртуальными адресами, что практически не характерно для большинства обычных файлов. Однако наличие оверлея в конце файла считается нормальным. Идентификация такого метода включает в себя прямой анализ дисассемблированного кода и обнаружение в нем кросс-ссылок, ведущих в середину функций [9].
Метод 7. Создание собственного оверлея. Также нарушитель может перемещать в оверлей не только исходную часть секции, но и внедрять своё собственное вредоносное программное обеспечение. Тем не менее, для активации этого ВПО по-прежнему требуется, как минимум, небольшой загрузчик, который встраивается в свободное место в файле. Данный метод прост и надежен в реализации. Внедрение и обнаружение ВПО идентично в 6 методе, за исключением сброса в оверлей не оригинальной секции, а самого вредоносного кода [9].
Метод 8. Создание собственной секции. Добавление новой секции в конец файла представляет собой простой и удобный метод внедрения вредоносного кода. При использовании этого метода вредоносное программное обеспечение не зависит от наличия свободного места в файле, и размер внедряемого кода не ограничен. Злоумышленник записывает вредоносный код в конец файла, увеличивает значение NumberOfSections на единицу и выравнивает физический размер новой секции с учетом параметра FileAlignment. Затем происходит пересчет SizeOfImage, и в таблицу секций в заголовке добавляется новый элемент с указанными физическими и виртуальными адресами, размерами, а также атрибутами, установленными в поля Characteristics - IMAGE_SCN_MEM_READ и IMAGE_SCN_CNT_CODE [9].
Данный метод легко распознается при обнаружении кодовой секции в конце файла, в то время как в стандартном файле кодовая секция всегда идет первой.
Метод 9. Расширение последней секции файла. Этот метод является наиболее очевидным и широко распространенным способом внедрения вредоносного кода в целом среди нарушителей информационного пространства. Однако он крайне конфликтен, слишком заметен и на практике может быть успешно применен только к некоторым PE-файлам, которые соответствуют всем необходимым требованиям.
Перед тем как внедрять вредоносное программное обеспечение, нарушителю необходимо провести ряд проверок. Физический размер последней секции, выровненной в соответствии с параметром FileAlignment, должен достигать физического конца файла. В противном случае существует риск столкнуться с оверлеем или даже более неприятной ситуацией - наличием мусора, оставшегося после сборки файла. В таком случае нарушителю придется внедрять вредоносный код не в конец секции, а в конец файла. Также часто избегают внедрения между концом последней секции и оверлеем, поскольку оверлеи адресуются относительно начала файла. Некоторые секции активны только во время загрузки файла и затем удаляются из памяти. Поэтому перед заражением удостоверяются в отсутствии или самостоятельно отключают следующие атрибуты: IMAGE_SCN_MEM_SHARED,
IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_CNT_UNINITIALIZED_DATA, а также установить атрибут IMAGE_SCN_MEM_READ. После внедрения ВПО нарушитель производит перерасчет SizeOflmage, физические размер и адрес начала последней секции [9].
Этот метод заражения можно выявить, обращая внимание на характерные атрибуты и присутствие кода в последней секции файла, что является необычным для стандартных незараженных файлов.
Заключение. В данной статье представлен анализ основных методов инфицирования файлов вредоносным программным кодом и их признаков, а также способы выявления подобных инфекций. Однако, помимо рассмотренных методов, существуют и другие, которые в данной статье не были подробно проанализированы. На основе представленных в статье данных можно сделать вывод, что статического анализа формата PE недостаточно для полного распознавания всех используемых методов инфицирования. Однако, при наличии заражения, файл подвергается изменениям в структуре данных и параметрах, что позволяет выявить его как потенциально вредоносный.
Для эффективного обучения моделей искусственного интеллекта, способных в будущем выявлять факт заражения файла, необходимо грамотно подходить к отбору признаков. Использование всех параметров структуры PE-формата в качестве основы для создания обучающей выборки может оказаться неэффективным. В статье представлены основные параметры, подвергающиеся изменениям со стороны нарушителя, признаки, которые могут служить ключевыми индикаторами наличия или отсутствия вредоносного кода. Эти показатели могут варьироваться в зависимости от методов анализа и используемых алгоритмов, но их основная цель заключается в том, чтобы выделить наиболее значимые аспекты файла, способствующие в определении возможного заражения.
Список литературы
1. Jinrong Bai, Junfeng Wang, Guozhong Zou. A Malware Detection Scheme Based on Mining Format Information // The Scientific World Journal. 2014. Vol. 2014.
2. Hahn K. Robust Static Analysis of Portable Executable Malware // HTWK Leipzig. 2014.
3. Microsoft Corporation. PE Format specification [Электронный ресурс] URL: https://learn.microsoft.com/ru-ru/windows/win32/debug/pe-format?redirectedfrom=MSDN (дата обращения: 12.12.2023).
4. Microsoft Corporation. What is a DLL? 2023 [Электронный ресурс]. URL: https://support.microsoft.com/kb/815065/EN-US (дата обращения: 12.12.2023).
5. Касперски K. Путь воина - внедрение в pe/coff-файлы. 2004 [Электронный ресурс] URL: http://samag.ru/archive/article/297 (дата обращения: 12.12.2023).
6. От зеленого к красному: Глава 2: Формат исполняемого файла ОС Windows. PE32 и PE64. Способы заражения исполняемых файлов [Электронный ресурс] URL: https://wasm.in/blogs/ot-zelenogo-k-krasnomu-glava-2-format-ispolnjaemogo-faila-os-windows-pe32-i-pe64-sposoby-zarazheniia-ispolniaemyx-fajlov.390 (дата обращения: 12.12.2023).
7. PE-формат. Часть 3 - Импорт [Электронный ресурс] URL: https://kaimi.io/2011/09/pe-format-import (дата обращения: 12.12.2023).
8. Структура исполняемых файлов Win32 и Win64 - Ю.С. Лукач [Электронный ресурс] URL: http://cs.usu.edu.ru/docs/pe (дата обращения: 12.12.2023).
9. Касперски K. Техника внедрения кода в РЕ-файлы и методы его удаления // Системный администратор. 2004. №7(20). С. 62-84.
10. Shannon C. E. A Mathematical Theory of Communication // Bell System Technical Journal. 1948. Vol. 27.
P. 379-423.
Егоров Елизар Валерьевич, младший научный сотрудник научно-исследовательской лаборатории, Россия, Санкт-Петербург, Военно-космическая академия имени А. Ф.Можайского
STATIC ANALYSIS OF INFECTION METHODS PE-FORMAT FILES FOR WINDOWS OPERATING SYSTEMS
E. V. Egorov
The presented article provides a comprehensive analysis of the Windows operating system (OS) file format, known as Portable Executable (PE). The key methods of introducing malicious software into the structure of an executable file are discussed, as well as ways to detect such malicious interventions. The study analyzes the informative parameters of the PE format suitable for creating highly efficient artificial intelligence (AI) models. Special attention is paid to their applicability in the context of detecting malicious code in PE files. The results of the analysis represent a valuable contribution to the development of high-quality learning methods and aimed at analyzing and identifying malicious aspects in Windows OS software.
Key words: PE format, malicious software, malicious code, artificial intelligence, feature selection.
Egorov Elizar Valerievich, junior researcher employee in research laboratory, Russia, Saint-Petersburg, Military Space Academy