Изображение сгенерировано нейросетью Kandinsky 3.0
Изображение сгенерировано нейросетью Kandinsky 3.0

Полное название: Предварительная оценка вероятности наличия уязвимостей в программах в двоичном представлении с учетом семантики средствами нейронных сетей.

Предварительная оценка вероятности наличия уязвимостей (vulnerability prediction, VP) в бинарных программах с использованием статического анализа является популярной темой исследований. Традиционные методы VP основаны на применении шаблонов уязвимостей, которые требуют трудоемкой разработки шаблонов уязвимостей силами экспертами по безопасности. Развитие искусственного интеллекта (ИИ) открыло новые возможности для VP.

Нейронные сети позволяют обучать шаблоны уязвимостей автоматически. Тем не менее, в современных исследованиях рассматриваются только один или два типа функций и используются традиционные модели, например, word2vec, которые не учитывают большое количество информации на уровне инструкций. В этой статье предлагается модель SAViP для VP в бинарных программах.

Для получения полной двоичной информации предлагается интегрировать три типа признаков: семантические, статистические и структурные. Получение семантических признаков для построения семантической модели выполняется с помощью маскированного языкового моделирования (Masked Language Model, MLM) путем обучения модели RoBERTa на ассемблерном коде. С помощью этой модели нестандартно объединяются начальный токен и токен опкода для создания эмбедингов инструкций. Для оценки статистических признаков создается 56-мерный вектор признаков объектов, содержащий 43 вида инструкций. Структурные признаки оцениваются за счет улучшения способности сети structure2vec получать признаки сети с помощью механизма внимания для вершин (self-attention). За счет этих доработок достоверность VP по сравнению с существующими методами значительно повышается. Представленные в данной работе эксперименты показывают, что SAViP достигает полноты 77,85% и достоверности топ-100~600 выше 95%. Полученные результаты соответственно на 10% и 13% лучше, чем у самого передового в настоящее время фреймворка V-Fuzz.

1 Введение

Статический анализ бинарных программ является важной частью исследований безопасности программного обеспечения. Методы динамического анализа требуют многократного выполнения программы, а статические методы могут сразу же приступать к исследованию безопасности без выполнения программы, поэтому снижаются требования к вычислительной мощности и временны́е затраты. Более того, динамические методы позволяют исследовать безопасность только на трассах выполнения программ, а статические методы являются более комплексными и рассматривают всю программу.

VP с помощью статического анализа является важным компонентом тестирования безопасности программного обеспечения. С помощью данного показателя исследователи могут проанализировать недостатки программ. Кроме того, успешная модель VP может ускорить динамический анализ. Например, модель VP можно рассматривать в качестве эталона для выбора начальных значений для направленного фаззера, который выделяет наиболее уязвимую часть программ и позволяет избежать бесполезной траты времени. Но традиционный статический анализ также имеет многочисленные ограничения. Большинство методов статического анализа зависят от длительной и трудоемкой разработки шаблонов уязвимостей силами специалистов по безопасности. Обычно эти шаблоны разрабатываются вручную, автоматизировать этот процесс может быть сложно, поэтому их применение в крупномасштабных программах затруднено. Кроме того, многие инструменты статического анализа [1,2] предназначены для исходных кодов, разработанных на определенных языках, например, Reshift [3] обнаруживает уязвимости только для программ, написанных на JAVA.

Учитывая эти недостатки, для обнаружения уязвимостей некоторые исследователи пытаются применить нейронные сети [4-10] по следующим причинам. Во-первых, за счет большого количества выборок нейронные сети могут автоматически обучаться на шаблонах уязвимостей. Во-вторых, нейронные сети могут выявлять глубоко вложенные и запутанные алгоритмы программ, которые даже экспертам сложно выделить как шаблоны. Кроме того, с помощью нейронных сетей можно одновременно обнаружить несколько типов уязвимостей, а с помощью шаблонов можно обнаружить один раз только один конкретный тип уязвимости.

Тем не менее, современные методы использования нейронных сетей для VP все еще имеют ограничения. Во-первых, большинство нейронных сетей предназначены для обнаружения уязвимостей в исходных кодах [4,5,6]. Но для многих программ доступны только двоичные файлы, исходный код которых не доступен для анализа безопасности [7]. Это затрудняет применение существующих методов при реальном тестировании безопасности программного обеспечения. Во-вторых, существующим методам не хватает эффективных семантических функций. Признаки программ можно разделить на три измерения: семантическое, статистическое и структурное. Тем не менее, существующие двоичные методы выделяют только один или два типа признаков, и большинство [11] фокусируются только на семантических и структурных. В V-Fuzz [12] учитывается оценка статистических признаков, но отсутствует возможность извлекать семантические признаки. Более того, подсчитывается соответствующие количества всех инструкций, а это является избыточным и приводит к увеличению потребности в вычислительных ресурсах. Кроме того, следует отметить, что в большинстве работ [8,11] семантические признаки извлекаются с использованием word2vec [13], который рассчитывает только эмбединги слов и теряет информацию уровня инструкций.

Для решения вышеупомянутых проблем предлагается SAViP – семантическая модель VP в двоичных программах. Как показано на рисунке 1, сначала дизассемблируются двоичные программы, и функция на языке ассемблера представляется в виде графа потока управления (Control Flow Graph, CFG). Затем CFG преобразуется в граф потока управления с атрибутами (Attributed Control Flow Graph, ACFG) и генерируется эмбединг функции. И в конце выполняется VP с учетом эмбедингов. Обобщенно SAViP состоит из трех частей, которые отдельно моделируют семантические, статистические и структурные признаки бинарных программ.

Рисунок 1 – Два типа графов представления бинарных программ.  CFG – это граф потока управления для ассемблерных функций. ACFG – это векторизация CFG. Каждый базовый блок ACFG соответствует вектору признака блока CFG
Рисунок 1 – Два типа графов представления бинарных программ.
CFG – это граф потока управления для ассемблерных функций. ACFG – это векторизация CFG. Каждый базовый блок ACFG соответствует вектору признака блока CFG

Для получения семантических признаков используется предварительное обучение усовершенствованного процесса обработки естественного языка (Natural Language Process, NLP) модели RoBERTa [14] для ассемблерных программ. Сначала используется динамическое маскирование в ассемблерных файлах, чтобы получить лучшее представление инструкций. Затем используется предварительно обученная модель для извлечения семантических признаков каждой инструкции. Код операции играет существенную роль в семантике каждой ассемблерной инструкции, поэтому предлагается использовать комбинацию конечных скрытых векторов начального токена и токена кода операции. Данный подход не только учитывает все инструкции, но и уделяет больше внимания коду операции. Для статистических признаков создается 56-мерный вектор признаков, описывающий 43 вида инструкций. Для уменьшения размерности статистических признаков рассматриваются только четыре типа инструкций [15]:

  1. инструкции передачи данных,

  2. двоичной арифметики,

  3. логические инструкции,

  4. инструкции передачи управления.

Проведенный эксперимент показывает, что в этих инструкциях содержится бо́льшая часть информации об уязвимостях. Чтобы объединить структурные признаки, то есть CFG данной функции и два других типа признаков вместе, в качестве промежуточного представления используется ACFG [16]. Каждая вершина в ACFG является составным блочным вектором соответствующих семантических и статистических признаков. В заключение выполняется доработка сети structure2vec [17] за счет реализации механизма self-attention для вершины. Благодаря разработанной графовой нейронной сети каждая вершина блока заданной ассемблерной функции может объединять информацию, полученную от своих соседей, и получить признаки всей ассемблерной функции.

Эксперименты проводятся на наборе данных Juliet Test Suite v1.3 [18], который широко используется в работах, связанных с уязвимостями. Предлагаемый метод SAViP достигает полноты 77,85% и достоверности первых 100~600 результатов выше 95%. Полученные результаты соответственно на 10% и 13% лучше, чем у самого передового в настоящее время фреймворка V-Fuzz. Также определяются наилучшие параметры, которые могут сбалансировать производительность модели и затраты времени с помощью сравнительных экспериментов. Кроме того, абляционное исследование показывает, что в наибольшей степени на производительность SAViP влияют семантические признаки.

Таким образом, в ходе данного исследования получены следующие результаты:

  • семантическая модель VP SAViP использует семантические, статистические и структурные признаки двоичных программ;

  • улучшенное извлечение семантической информации из инструкций решается за счет предварительного обучения модели RoBERTa языку ассемблера и использования предварительно обученной модели для генерирования семантических эмбедингов инструкций;

  • эксперименты показывают, что SAViP значительно совершеннее V-fuzz (полнота +10%) и достигает лучших результатов в VP.

2 Связанные исследования

2.1 Предварительная оценка вероятности наличия уязвимостей

VP является важным направлением исследований в области безопасности программного обеспечения. Традиционные решения используют методы на основе шаблонов уязвимостей, которые предварительно разрабатываются для последующего использования. Но эти методы не являются эффективными и имеют плохую масштабируемость. В последнее время методы глубокого обучения доказывают свою эффективность в этой области, но, как и традиционные методы, они также имеют некоторые недостатки. Во-первых, большинство исследований основано на анализе исходного кода [5,6,19], тогда как в действительности прикладное программное обеспечение часто имеет закрытый исходный код, и получение исходного кода может быть затруднительным. Во-вторых, двоичным методам всегда не хватает информации, и они, как правило, продолжительны по времени.

Типичный метод, основанный на глубоком обучении [8], использует LLVM IR [20] и word2vec для получения эмбедингов слов. Этот метод объединяет в массив векторы слов, имеющихся в функции, и для классификации использует рекуррентную нейронную сеть (Recurrent Neural Network, RNN) [21]. Но модель word2vec является моделью эмбединга слов, и ее нельзя использовать для выявления внутренних свойств функций на уровне инструкций. Более того, эта модель игнорирует статистические и структурные признаки, а учитывает лишь поверхностные семантические признаки. Использование RNN также значительно увеличивает время на обучение модели и требует более мощной аппаратной поддержки. В BVDetector [11] этот метод усовершенствуется за счет добавления анализа потоков данных и управления, но по-прежнему зависит от модели word2vec и RNN [22]. Кроме того, при извлечении семантических признаков в методе [8] и BVDetector [11] теряются данные о позиции инструкций, хотя для семантики инструкций они важны. Для извлечения семантических признаков в SAViP используется RoBERTa [14], современная модель NLP, которая объединяет семантику и данные об позиции инструкций и генерирует более содержательные эмбединги.

Динамический анализ в V-Fuzz [12] ускоряется за счет использования вероятности уязвимости функции [23-25]. В модели V-Fuzz используются структурные и статистические признаки, а VP рассчитывается с помощью сети графовых эмбедингов. Такой подход в значительной степени сохраняет информацию из двоичных программ, но полностью игнорирует семантические признаки, поэтому V-Fuzz менее достоверно определяет разновидности уязвимостей. Кроме того, V-Fuzz подсчитывает все инструкции архитектуры x86, поэтому создает чрезмерно избыточный вектор признаков.

2.2 Промежуточное представление

Для анализа бинарной программы необходимо использовать соответствующую форму представления, т.е. преобразовать программу в форму, пригодную для анализа. Чтобы получить векторное представление слов функции, можно объединить все ее основные блоки, как описано в [8]. Но при этом полностью игнорируется внутренняя структура функции и генерируется вектор слишком большой размерности. Для объединения семантических, статистических и структурных признаков для промежуточного представления функции предлагаемая модель использует ACFG [16].

ACFG – это векторизация CFG. С помощью CFG функции, как показано на рисунке 1a, если получить векторное представление каждого базового блока, то можно использовать этот набор векторов для представления этого базового блока. Новый граф, полученный таким образом, как показано на рисунке 1б, называется ACFG. Хотя ACFG векторизует признаки основного блока, он сохраняет структурные признаки графа. При обучении ACFG его можно разделить на матрицу признаков и матрицу смежности. Эти две матрицы используются в качестве входных данных графовой нейронной сети (Graph Neural Network, GNN) [26]. Этот метод представления позволяет не только сосредоточить внимание на признаках каждого базового блока, но и сохранить связи (структурные признаки) между каждым базовым блоком. Кроме того, его можно хорошо применять к различным моделям глубокого обучения.

2.3 Предобученная языковая модель

Google опубликовала модель BERT [27], основанную на Transformer [28], и предложила первую глубокую двунаправленную NLP-систему предварительного обучения без учителя. Благодаря обучению на 13G языко-ориентированных данных, получены беспрецедентные результаты. Наиболее важной задачей предварительного обучения в BERT является маскированное языковое моделирование (MLM), которая маскирует токен в каждом обучающем случае с вероятностью 15%, а затем использует модель для прогнозирования токена в позиции маски. Но BERT использует метод статического маскирования в задаче MLM, поэтому в некоторых позициях появляются токены, которые невозможно обучить, т.к. замаски́рованные токены не будут изменяться в течение всего процесса обучения. В модели RoBERTa [14] эта проблема ослаблена за счет использования динамического маскирования, которое увеличивает вероятность маскирования для каждого токена. Из-за небольшой длины ассемблерных инструкций важен токен в любой позиции. Поэтому в предлагаемом исследовании способность RoBERTa к динамическому маскированию для обучения языковой модели используется для извлечения семантических признаков инструкций ассемблера.

2.4 Графовая нейронная сеть (Graph Neural Network, GNN)

После получения признаков основного блока и преобразования CFG в ACFG также необходимо извлечение признаков всей ACFG, которое предполагает извлечение признаков графа. Графы – это широко используемый подход к представлению; решаемые задачи включают классификацию вершин [29,30], прогнозирование связей [31,32], рекомендации [33,34] и т. д. Все они требуют определенных векторов признаков для представления графов или вершин. Алгоритмы построения графовых эмбедингов и GNN [26] являются эффективными способами решения этой проблемы.

Алгоритм построения графовых эмбедингов для представления вершин графа использует малоразмерный плотный вектор, который наилучшим образом описывает структурные признаки графа. Классическими примерами алгоритмов графа эмбедингов являются DeepWalk [35], Node2Vec [36], GraRep [37] и т. д. GNN по сути являются расширением алгоритма построения графовых эмбедингов, которые по существу относятся к методу обработки информации графа, основанному на глубоком обучении.

Количество базовых блоков на языке ассемблера ограничено, как и размер CFG, следовательно, необходимость в выборе сложных алгоритмов GNN отсутствует. Применяемая GNN является усовершенствованной реализацией structure2vec [17], которая может генерировать эмбединги ACFG. Structure2vec – это классическая простая модель GNN, которую также можно классифицировать как фреймворк для передачи сообщений. За несколько итераций он может передать признаки каждой вершины графа по всему логическому соединению. Построение данной модели и подробности ее алгоритма представлены в разделе про построение модели.

Часть 2

Часть 3

Список литературы

  1. SonarQube. Available online: https://www.sonarqube.org/ (accessed on 7 January 2022).

  2. DeepScan. Available online: https://deepscan.io/ (accessed on 7 January 2022).

  3. Reshift Security. Available online: https://www.reshiftsecurity.com/ (accessed on 7 January 2022).

  4. Wang, S.; Liu, T.; Tan, L. Automatically Learning Semantic Features for Defect Prediction. In Proceedings of the 2016 IEEE/ACM 38th International Conference on Software Engineering, Austin, TX, USA, 14–22 May 2016; pp. 297–308. [Google Scholar]

  5. Li, Z.; Zou, D.; Xu, S.; Ou, X.; Jin, H.; Wang, S.; Deng, Z.; Zhong, Y. VulDeePecker: A deep learning-based system for vulnerability detection. In Proceedings of the 25th Network and Distributed System Security Symposium, San Diego, CA, USA, 18–21 February 2018; pp. 1–15. [Google Scholar]

  6. Wang, S.; Liu, T.; Nam, J.; Tan, L. Deep Semantic Feature Learning for Software Defect Prediction. IEEE Trans. Softw. Eng. 2020, 46, 1267–1293. [Google Scholar] [CrossRef]

  7. Luo, Z.; Wang, P.; Wang, B.; Tang, Y.; Xie, W.; Zhou, X.; Liu, D.; Lu, K. VulHawk: Cross-architecture Vulnerability Detection with Entropy-based Binary Code Search. In Proceedings of the 2023 Network and Distributed System Security Symposium, San Diego, CA, USA, February 2023. [Google Scholar]

  8. Zheng, J.; Pang, J.; Zhang, X.; Zhou, X.; Li, M.; Wang, J. Recurrent Neural Network Based Binary Code Vulnerability Detection. In Proceedings of the 2019 2nd International Conference on Algorithms, Computing and Artificial Intelligence, Hong Kong, China, 20–22 December 2019; pp. 160–165. [Google Scholar]

  9. Han, W.; Pang, J.; Zhou, X.; Zhu, D. Binary vulnerability mining technology based on neural network feature fusion. In Proceedings of the 2022 5th International Conference on Advanced Electronic Materials, Computers and Software Engineering (AEMCSE), Wuhan, China, 22–24 April 2022; pp. 257–261. [Google Scholar]

  10. Duan, B.; Zhou, X.; Wu, X. Improve vulnerability prediction performance using self-attention mechanism and convolutional neural network. In Proceedings of the International Conference on Neural Networks, Information, and Communication Engineering (NNICE), Guangzhou, China, June 2022. [Google Scholar]

  11. Tian, J.; Xing, W.; Li, Z. BVDetector: A program slice-based binary code vulnerability intelligent detection system. Inf. Softw. Technol. 2020, 123, 106289. [Google Scholar] [CrossRef]

  12. Li, Y.; Ji, S.; Lyu, C.; Chen, Y.; Chen, J.; Gu, Q. V-Fuzz: Vulnerability-Oriented Evolutionary Fuzzing. arXiv 2019, arXiv:1901.01142. [Google Scholar]

  13. Mikolov, T.; Chen, K.; Corrado, G.; Dean, J. Efficient estimation of word representations in vector space. arXiv 2013, arXiv:1301.3781. [Google Scholar]

  14. Liu, Y.; Ott, M.; Goyal, N.; Du, J.; Joshi, M.; Chen, D. Roberta: A robustly optimized bert pretraining approach. arXiv 2019, arXiv:1907.11692. [Google Scholar]

  15. Intel. Available online: https://software.intel.com/en-us/articles/intel-sdm (accessed on 7 January 2022).

  16. Feng, Q.; Zhou, R.; Xu, C.; Cheng, Y.; Testa, B.; Yin, H. Scalable graph-based bug search for firmware images. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, New York, NY, USA, 24–28 October 2016; pp. 480–491. [Google Scholar]

  17. Dai, D.H.; Dai, B.; Song, L. Discriminative embeddings of latent variable models for structured data. In Proceedings of the International Conference on Machine Learning, New York, NY, USA, 19–24 June 2016; pp. 2702–2711. [Google Scholar]

  18. Software Assurance Reference Dataset. Available online: https://samate.nist.gov/SRD/testsuite.php (accessed on 7 January 2022).

  19. Zou, D.; Wang, S.; Xu, S.; Li, Z.; Jin, H. μVulDeePecker: A Deep Learning-Based System for Multiclass Vulnerability Detection. IEEE Trans. Dependable Secur. Comput. 2021, 18, 2224–2236. [Google Scholar] [CrossRef]

  20. LLVM Compiler Infrastructure. Available online: https://llvm.org/docs/LangRef.html (accessed on 7 January 2022).

  21. Zaremba, W.; Sutskever, I.; Vinyals, O. Recurrent neural network regularization. arXiv 2014, arXiv:1409.2329. [Google Scholar]

  22. Cho, K.; Van Merriënboer, B.; Gulcehre, C.; Bahdanau, D.; Bougares, F.; Schwenk, H. Learning phrase representations using RNN encoder-decoder for statistical machine translation. arXiv 2014, arXiv:1406.1078. [Google Scholar]

  23. Rawat, S.; Jain, V.; Kumar, A.; Cojocar, L.; Giuffrida, C.; Bos, H. VUzzer: Application-aware Evolutionary Fuzzing. In Proceedings of the 25th Network and Distributed System Security Symposium, San Diego, CA, USA, 26 February–1 March 2017; Volume 17, pp. 1–14. [Google Scholar]

  24. Zhang, G.; Zhou, X.; Luo, Y.; Wu, X.; Min, E. Ptfuzz: Guided fuzzing with processor trace feedback. IEEE Access 2018, 6, 37302–37313. [Google Scholar] [CrossRef]

  25. Song, C.; Zhou, X.; Yin, Q.; He, X.; Zhang, H.; Lu, K. P-fuzz: A parallel grey-box fuzzing framework. Appl. Sci. 2019, 9, 5100. [Google Scholar] [CrossRef][Green Version]

  26. Xu, K.; Hu, W.; Leskovec, J.; Jegelka, S. How powerful are graph neural networks? arXiv 2018, arXiv:1810.00826. [Google Scholar]

  27. Devlin, J.; Chang, M.W.; Lee, K.; Toutanova, K. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv 2018, arXiv:1810.04805. [Google Scholar]

  28. Vaswani, A.; Shazeer, N.; Parmar, N.; Uszkoreit, J.; Jones, L.; Gomez, A.N. Attention is all you need. In Proceedings of the Advances in Neural Information Processing Systems, Long Beach, CA, USA, 4 December 2017; pp. 5998–6008. [Google Scholar]

  29. Kumar, S.; Chaudhary, S.; Kumar, S.; Yadav, R.K. Node Classification in Complex Networks using Network Embedding Techniques. In Proceedings of the 2020 5th International Conference on Communication and Electronics Systems, Coimbatore, India, 10–12 June 2020; pp. 369–374. [Google Scholar]

  30. Mithe, S.; Potika, K. A unified framework on node classification using graph convolutional networks. In Proceedings of the 2020 Second International Conference on Transdisciplinary AI, Irvine, CA, USA, 21–23 September 2020; pp. 67–74. [Google Scholar]

  31. Deylami, H.A.; Asadpour, M. Link prediction in social networks using hierarchical community detection. In Proceedings of the 2015 7th Conference on Information and Knowledge Technology, Urmia, Iran, 26–28 May 2015; pp. 1–5. [Google Scholar]

  32. Abbasi, F.; Talat, R.; Muzammal, M. An Ensemble Framework for Link Prediction in Signed Graph. In Proceedings of the 2019 22nd International Multitopic Conference, Islamabad, Pakistan, 29–30 November 2019; pp. 1–6. [Google Scholar]

  33. Ting, Y.; Yan, C.; Xiang-wei, M. Personalized Recommendation System Based on Web Log Mining and Weighted Bipartite Graph. In Proceedings of the 2013 International Conference on Computational and Information Sciences, Shiyang, China, 21–23 June 2013; pp. 587–590. [Google Scholar]

  34. Suzuki, T.; Oyama, S.; Kurihara, M. A Framework for Recommendation Algorithms Using Knowledge Graph and Random Walk Methods. In Proceedings of the 2020 IEEE International Conference on Big Data, Atlanta, GA, USA, 10–13 December 2020; pp. 3085–3087. [Google Scholar]

  35. Perozzi, B.; Al-Rfou, R.; Skiena, S. Deepwalk: Online learning of social representations. In Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, New York, NY, USA, 24–27 August 2014. [Google Scholar]

  36. Grover, A.; Leskovec, J. node2vec: Scalable feature learning for networks. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, San Francisco, CA, USA, 13–17 August 2016. [Google Scholar]

  37. Cao, S.; Lu, W.; Xu, Q. Grarep: Learning graph representations with global structural information. In Proceedings of the 24th ACM International on Conference on Information and Knowledge Management, Melbourne, Australia, 18–23 October 2015. [Google Scholar]

  38. Hex-Rays. Available online: https://www.hex-rays.com/products/ida/ (accessed on 7 January 2022).

  39. Networkx. Available online: https://networkx.org/ (accessed on 7 January 2022).

  40. Xu, X.; Liu, C.; Feng, Q.; Yin, H.; Song, L.; Song, D. Neural network-based graph embedding for cross-platform binary code similarity detection. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security, Dallas, TX, USA, 30 October–3 November 2017; pp. 363–376. [Google Scholar]

  41. Han, W.; Joe, B.; Lee, B.; Song, C.; Shin, I. Enhancing memory error detection for large-scale applications and fuzz testing. In Proceedings of the 25th Network and Distributed System Security Symposium, San Diego, CA, USA, 18–21 February 2018; pp. 1–47. [Google Scholar]

Комментарии (0)