Статья опубликована в рамках: CXXXVIII Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 06 июня 2024 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
РАСШИРЕНИЯ ДЛЯ СИГНАТУРНОГО МЕТОДА АНАЛИЗА ПРОГРАММ
EXTENSIONS FOR SIGNATURE METHOD OF PROGRAM ANALYSIS
Ekaterina Trushkina
student, Faculty of Mechanics and Mathematics, Department of Information Systems Security, Samara State University,
Russia, Samara
АННОТАЦИЯ
Рассмотрена проблема поиска уязвимостей, программных закладок в программном обеспечении, что является частью процесса реверс-инжиниринга.
В работе приведено описание сигнатурного анализа программного кода (поиск по сигнатурам), а также описан пример реализации автоматизации процесса формирования самих сигнатур для дальнейшего эффективного поиска уязвимостей. Также упомянута общая парадигма языка единого представления для программного кода, в качестве дальнейшего развития части анализа кода в реверс-инжиниринге.
Описаны все преимущества и недостатки стандартного сигнатурного и других расширенных методов, а также дана рекомендация по работе с анализом кода программного продукта, используя вышеупомянутые методы.
ABSTRACT
The paper addresses the issue of vulnerability and backdoor discovery in software, which is part of the reverse engineering process. It provides a description of signature-based code analysis (signature search) and an example of automating the process of generating signatures for effective vulnerability detection. Additionally, it mentions the general paradigm of a unified representation language for source code as a future development in code analysis for reverse engineering. The paper outlines the advantages and disadvantages of the standard signature-based method and other advanced methods, along with recommendations for conducting software code analysis using the aforementioned methods.
Ключевые слова: информационная безопасность, дизассемблирование, реверс-инжиниринг, программные закладки, уязвимость, сигнатурный метод.
Keywords: information security, disassembly, reverse engineering, software bookmarks, vulnerability, signature method.
Введение
Современный технологичный мир уже невозможно представить без гаджетов, программ, мессенджеров для общения и работы, поэтому вопрос безопасности информации, которая передается от одного лица другому, является основополагающим, ведь информация – это не просто набор слов и предложений, а ресурс, способный нанести юридическому или физическому лицу репутационный, экономический или же ущерб личного характера. Именно поэтому необходимо рассмотреть вопросы, связанные с уязвимостями, вирусами, программных закладок, поскольку они могут быть в любом приборе или программе, которыми человек пользуется каждый день и даже не догадывается.
Поиск уязвимостей в программном обеспечении является частью большого процесса реверс-инжиниринга – это процесс анализа продукта или системы для понимания её работы или структуры, особенно когда код не доступен из-за ограничений или недоступности исходного кода. Поэтому необходимо развивать различные способы использования реверс-инжиниринга для быстрого и эффективного предотвращения негативных последствий.
Общие сведения
За последние время технологии претерпели значительное развитие, в результате чего методы атак на информационные системы стали более изощренными и сложными, что затрудняет их обнаружение из-за повышенной скрытности. Именно поэтому поиск различных недекларированных возможностей в программной обеспечение любого рядового пользователя является достаточно сложным делом. Ведь программные закладки и уязвимости хоть и имеют некий шаблон, но чаще всего они являются достаточно непредсказуемыми, что затрудняет выделение конкретного метода поиска вирусов, который с 99% вероятностью сможет найти закладку любого типа.
Поэтому в данной статье будут рассмотрены различные методы поиска уязвимостей в программном обеспечение, с помощью которых в дальнейшем появиться возможность автоматизировать и ускорить процесс поиска программных закладок.
Сигнатурный анализ программного кода
Одним из часто используемым методом поиска уязвимостей является сигнатурный анализ. Сигнатурный анализ программного кода – это метод обнаружения уязвимостей вредоносного программного кода – путем сравнения характеристик (задаются аналитиком или предусмотрены разработчиком) кода с известными сигнатурами уязвимостей. Эти сигнатуры представляют собой уникальные строки кода (чаще всего последовательность байт), структуры данных или другие характеристики, которые характеризуют конкретные виды угроз.
Основными этапами работы такого метода являются:
- создание списка сигнатур. Это предварительная работа, в которой либо аналитик кода, либо разработчик подобного специализированного программного обеспечения создают базу данных, где хранятся все известные сигнатуры;
- сравнение. На данном этапе происходит сравнение сигнатур из базы данных и анализируемый код, для определения наличия угроз;
- обнаружение подозрительных мест в исходном коде. Если находится соответственное место в анализируемом коде, система присылает предупреждение о наличии возможной уязвимости или вредоносном коде;
- реагирование. На последнем этапе необходимо исследовать потенциально вредоносный код и принять меры по устранению опасности.
Данный метод широко используется при анализе из-за своих преимуществ:
- простота реализации: данный метод легко реализовать, внедрить и использовать в любой системе, ведь он основан на простом сравнении известных сигнатур и анализируемого кода;
- быстрота и эффективность: данный метод быстро проводит свой поиск, поэтому большинство уже известных уязвимостей можно найти, не используя какие-либо сложные анализу кода.
Но все-таки подобные методы не являются «панацеей», и их необходимо использовать всегда в паре с другими методами анализа кода из-за недостатков:
- ограниченность: данный метод не буде эффективным против новых уязвимостей, которые появляются быстро;
- ложные срабатывания: метод подвержен ложным срабатываниям, когда хороший код может быть ошибочно определен как вредоносный из-за схожести сигнатур;
- неэффективность при изменении кода: если вредоносный код немного изменен, чтобы избежать обнаружения по сигнатуре, этот метод становится неэффективным;
- недостаточная защита от уязвимостей нулевого дня: сигнатурный метод неспособен обнаруживать уязвимости нулевого дня, которые еще не были обнаружены и задокументированы;
- устаревания сигнатур: необходимо при использовании данного метода обновлять базы данных сигнатур;
- отсутствие четко определенного алгоритма выделения и методики оценки сигнатур.
Именно поэтому возникает создание автоматизированной системы выделения сигнатур, разрушающих программные воздействия (РПВ). А.Д. Чорняк предложил один из способов возможной реализации подобной системы в своей статье «Статистический метод выделения сигнатур разрушающих программных воздействий» [1], основной идее которой является:
- создание множества файлов их их потомков, подверженных РПВ, где высчитываются контрольные суммы файловой системы до и после заражения;
- необходимо создать достаточно большое множество программ, которые будут не подвержены РПВ – они являются «чистой системой без вирусов»;
- далее провести выявления последовательности, присутствующей во всех файлах первого множества и не встречающейся ни в одном файле второго множества;
- после нахождения подобных сигнатур, автор предлагает использовать «байесовский» подход для вычисления вероятностей, таким образов будут вычисленные вероятности для каждой найденной сигнатуры, или же использовать частотный признак появления байтов сигнатур в каждом «зараженном файле».
Таким образом использование такого доработанного метода поиска сигнатур, способно: повысить скорость выявления сигнатур; минимизировать влияние человеческого фактора и ложных срабатываний; дать оценку сигнатурам, используя вероятностные оценки. Подобное улучшение сигнатурного метода поиска уязвимостей в программной обеспечение способствует более качественному анализа люблю программного кода, но всё же не является единственным методом, который стоит использовать при анализе.
Автоматизация анализа поиска уязвимостей с помощью анализа текста
В наше время чаще всего для анализа уязвимостей используют уже утвержденные базы данных классификаций и оценки критичности уязвимостей (например, база данных CVSS). В то же время, работая с подобными базами данных, нельзя не обойтись без ручного поиска, т.к. каждое программное обеспечение имеет свои особенности, поэтому анализ подобного кода требует достаточно времени аналитика. Поэтому В.И. Васильев, А.М. Вульфин и Н.В. Кучкарова в статье «Автоматизация анализа уязвимостей программного обеспечения на основе технологии Text Mining» [2] предлагают использовать машинное обучения для облегчения и дальнейшего автоматизирования поиска программных закладок. Суть данного подхода заключается в следующем: исходные текстовые описания уязвимостей, хранящиеся в базах данных, содержат большой объем информации, который необходимо интерпретировать доступно для человека, что и позволяют методы Text Mining. Поэтому для того, чтобы использовать подобный метод, необходимо данных текст переработать таким образом, чтобы дальнейшее машинное обучение могло проходить гладко.
Авторы предлагают включить в саму систему следующие подсистемы [2]:
- подсистема локального хранения актуальной копии БДУ ФСТЭК;
- подсистема сопоставления угроз и уязвимостей на основе текстового описания;
- подсистема оценки актуальных угроз и уязвимостей.
Таким образом использование машинного обучения способствует сокращению времени ручного составления такой базы, что ускорит весь анализ программного кода. Также данное решение может исправить недостаток в сигнатурном методе о составлении подобных сигнатур, а также использоваться как сравнительный метод с методом поиска сигнатур РПВ, о котором было написано выше.
Парадигма языка единого представления программного кода
Сигнатурный метод является скорее первой ступенью в поисках уязвимостей программного кода, но что делать, если ранее предполагаемой уязвимости не было, или же были использованы шифровальщики для запутывания кода, что сигнатурный метод не смог определить уязвимость? Именно из-за невозможности поиска всех уязвимостей автоматически существует проблема представления анализируемого кода в человеко-читаемом виде, где все алгоритмы будут определены, сама структура программы будет понятна, а также появиться возможность искать в программных продуктах «бэкдоры» (модификация в коде, которая намеренно помещается в него разработчиком, с целью дальнейшего получения информации). Таким образом, представление кода, которое объединяло бы в себе алгоритмы, архитектуру программы и было бы ориентировано на работу с ним эксперта, который гипотетически использует вспомогательные средства анализа, представляется весьма актуальным.
В статье М.В. Буйневича, К.Е. Израилова, В.В. Покусова «Основные положения парадигмы языка единого представления программного кода в интересах поиска в нем средне и высокоуровневых уязвимостей» [3], были приведены примеры различных описаний пвсевдокодов, свойства алгоритмов и упоминание парадигмы структурного программирования, что впоследствие помогло вывести основные этапы формирования такого способа представления алгоритма:
- алгоритм должен представлять из себя словесное описания, псевдокод и графическую схему, по типу классической блок-схемы;
- общепринятого представления структуры программ нет, поэтому скорее всего все данные описания буду иметь специфический характер;
- соединение алгоритма и архитектуры программы в единое представление является достаточно сложным процессом.
Именно из-за отсутствия какого-либо решения о представлении алгоритма и архитектуры как единое целое, авторы предложили разработать собственное представление, учитывая преимущества и недостатки уже существующих. Для этого они определили основные парадигмы программирования с учетом их особенностей [3]:
- концепция структурного программирования заключается в представлении программы в виде иерархической структуры блоков;
- процедурное программирование включает в себя последовательное выполнение операторов, объединенных в подпрограммы;
- объектно-ориентированное программирование описывает программу как набор объектов, каждый из которых является экземпляром определенного класса, образующих иерархию наследования;
- декларативное программирование предполагает задание спецификации решения задачи, то есть описание проблемы и ожидаемого результата.
Новая парадигма программирования связывает машинно-ориентированную область кодирования с человеко-ориентированной областью анализа программ. Представление программы в виде псевдокода по этой парадигме позволяет более эффективно обнаруживать уязвимости, чем традиционные методы, такие как блок-схемы и языки программирования. Продолжение развития данной парадигмы является её проверка на реальных условиях и дальнейшая оценка использования данной парадигмы в условиях поиска уязвимостей.
Этот пример подчеркивает важность поиска уязвимостей в любом программном коде и актуальность разнообразных методов и подходов к обнаружению программных закладок. Отсутствие универсальной схемы поиска подчеркивает необходимость использования как стандартных методов анализа, так и разработку инновационных подходов. Эти новые методы могут способствовать автоматизации процесса обнаружения уязвимостей, а также облегчить поиск нестандартных уязвимостей для аналитиков.
Рекомендации
Рассмотрение основных методов поиска уязвимостей – сигнатурного метода, статистического метода выделения сигнатур, автоматизации анализа поиска уязвимостей с помощью анализа текста и парадигмы языка единого представления программного кода – позволяет понять, что разработка новых подходов к обнаружению уязвимостей является критически важной задачей. Эти методы способствуют более эффективному и быстрому выявлению потенциальных угроз в программном коде, а также помогают автоматизировать процесс анализа, что в конечном итоге повышает безопасность программного обеспечения. Внедрение инновационных подходов в области поиска уязвимостей не только улучшает качество анализа, но и способствует созданию более надежных и безопасных программных продуктов.
Выводы
- Важно помнить, что стандартные методы не являются «панацеей» от всех уязвимостей, необходимо постоянно улучшать и модифицировать средства защиты, чтобы в последствии минимизировать возможный ущерб.
- Также необходимо внедрять новые методы, тем самым расширяя область воздействия на уязвимости. Более современные методы способы выявлять намного больше уязвимостей, чем строго определенные алгоритмы поиска.
- Упомянутые методы – это не полный список инструментария любого эксперта, однако являются неотъемлемой частью анализа любого программного продукта, включая и проблемы, с которыми сталкивается аналитик при своей работе.
Список литературы:
- Чорняк А. Д. Статистический метод выделения сигнатур разрушающих программных воздействий / А.Д. Чорняк // Безопасность информационных технологий: журнал –2010, Том 17, №1.
- Васильев В.И., Вульфин А.М., Кучкарова Н.В. Автоматизация анализа уязвимостей программного обеспечения на основе технологии Text Mining / В.И. Васильев, А.М. Вульфин, Н.В. Кучкарова // Вопросы кибербезопасности: журнал – 2020, № 4 (38) – С.22-31.
- Буйневич М.В., Израилов К.Е, Покусов В.В. Основные положения парадигмы языка единого представления программного кода в интересах поиска в нем средне- и высокоуровневых уязвимостей М.В. Буйневич, К.Е. Израилов, В.В, Покусов // Вопросы кибербезопасности: журнал – 2021, № 6 (46) – С.78-89.
Оставить комментарий