![Изображение сгенерировано нейросетью Kandinsky 3.0 Изображение сгенерировано нейросетью Kandinsky 3.0](https://habrastorage.org/getpro/habr/upload_files/464/b82/145/464b821450150a4a23c54051d6c25602.png)
Полное название: Предварительная оценка вероятности наличия уязвимостей в программах в двоичном представлении с учетом семантики средствами нейронных сетей.
Предварительная оценка вероятности наличия уязвимостей (vulnerability prediction, VP) в бинарных программах с использованием статического анализа является популярной темой исследований. Традиционные методы VP основаны на применении шаблонов уязвимостей, которые требуют трудоемкой разработки шаблонов уязвимостей силами экспертами по безопасности. Развитие искусственного интеллекта (ИИ) открыло новые возможности для VP.
Нейронные сети позволяют обучать шаблоны уязвимостей автоматически. Тем не менее, в современных исследованиях рассматриваются только один или два типа функций и используются традиционные модели, например, word2vec, которые не учитывают большое количество информации на уровне инструкций. В этой статье предлагается модель SAViP для VP в бинарных программах.
3 Модель VP
3.1 Обзор
Чтобы точно спрогнозировать наличие уязвимости, требуется выяснить признаки уязвимого двоичного файла. Для этого предлагается получить три вида признаков – семантические, статистические и структурные, из бинарных программ для представления уязвимостей. Необходимо извлечь информацию о трех признаках из двоичной программы. На рисунке 2 показана структура всей модели.
![Рисунок 2 – Общая структура SAViP. Семантические признаки извлекаются с помощью предварительно обученной языковой модели. Эмбединг блоков – это объединение семантических и статистических признаков. Структурный признак используется в графовой нейронной сети. Выход P — это вероятность наличия уязвимости в функции Рисунок 2 – Общая структура SAViP. Семантические признаки извлекаются с помощью предварительно обученной языковой модели. Эмбединг блоков – это объединение семантических и статистических признаков. Структурный признак используется в графовой нейронной сети. Выход P — это вероятность наличия уязвимости в функции](https://habrastorage.org/getpro/habr/upload_files/4d9/729/9f8/4d97299f89f44f73b64676a0d9c40b40.png)
Сначала выполняется дизассемблирование двоичной программы с помощью ida-python [38] (для IDA-PRO 7.0). Затем из программы извлекаются ассемблерные инструкции и статистические признаки всех целевых функций. Критерии выбора целевой функции рассмотрены в разделе экспериментов. Для сохранения управляющей информации (информации о структуре) каждой функции и различных атрибутов каждого базового блока, включая ассемблерные инструкции и статистические векторы, используется networkx [39]. Ассемблерные инструкции собираются для последующего этапа семантического извлечения и будут использоваться в качестве входных данных языковой модели после токенизации. Затем после получения выходных данных (эмбедингов инструкций) выполняется объединение средних значений (пулинг, mean pooling) в выходные данные в одном и том же базовом блоке и формирование семантических эмбедингов блоков. Затем эти эмбединги объединяются со статистическими векторами базового блока, чтобы получить полный эмбединг каждого базового блока. Все эмбединги блоков функции и связь между базовыми блоками вместе образуют ACFG. Структурные признаки подаются на вход следующей GNN в виде матрицы смежности. Хотя входные данные GNN представляют собой граф ACFG, реальными входными данными являются матрица признаков и матрица смежности. После прохождения матриц через GNN в самом конце они пройдут через слой softmax, чтобы получить VP в каждой функции.
Ниже рассмотрены конкретные подробности предлагаемого решения для каждого типа функций отдельно.
3.2 Семантические признаки
Для извлечения семантики языка ассемблера выполняется предварительное обучение модели RoBERTa [14]. Для обучения языковой модели на языке ассемблера нужно создать собственный набор данных и провести соответствующее предварительное обучение для получения подходящей модели.
3.2.1 Токенизация
Во-первых, чтобы получить глубокие признаки конструкций на языке ассемблера, необходимо токенизировать инструкции ассемблера. Каждая инструкция рассматривается как предложение, которое затем унифицируется с помощью правил и разбивается на базовые токены. При определении базового токена выполняется более подробный анализ инструкции, сохраняется подробная информация, а также все коды операций и регистры, а не только операнд или тип операнда. Если разрядность числа в шестнадцатеричном представлении больше 6, то оно унифицируется как «<????>». Если нет, то оно считается значимым и сохраняется полностью. Затем переменные унифицируются как «<???>». Например, инструкция «mov [ebp+VAR_4] eax» разбивается на «mov», «[», «ebp», «+», «<???>», «]» и «eax» согласно правилам.
Набор стандартизированных данных, полученный в результате токенизации инструкций, можно использовать для предварительного обучения.
3.3.2 Предварительное обучение
После токенизации проводится предварительное обучение полученной нашей языковой модели с помощью MLM, которая заменяет некоторые токены на «<????>» в каждой эпохе и обучает модель прогнозировать исходный токен. Таким образом эта модель может выучить глубокие внутренние признаки инструкций. Для MLM требуются определенные входные данные. По правилам модели RoBERTa первым токеном каждого входа должен быть специальный токен «<?>», который обозначает начало входа. После обучения эмбединг этого специального токена можно использовать для представления всего входа. Последний введенный токен также является специальным токеном: «<?>», который соответствует начальному токену и обозначает конец входа. Кроме того, как показано на рисунке 3, также нужны эмбединги сегментации и положения, затем три токена соединяются, и получается готовый вход. Эмбединги позиции используются для определения положения каждого токена, кроме того, эмбединги сегментации могут идентифицировать различные предложения во входных данных. Смешанные эмбединги могут улучшить способность модели представлять токены в различных ситуациях.
![Рисунок 3 – Входные эмбединги SAViP Рисунок 3 – Входные эмбединги SAViP](https://habrastorage.org/getpro/habr/upload_files/eeb/563/fe3/eeb563fe3073f4efb86d6d8c050b826a.png)
3.2.3 Динамическое маскирование
В ходе предварительного обучения модель MLM сохраняется с параметрами динамического маскирования. В BERT маскирование MLM является статическим, и все маски генерируются на этапе обработки данных. Во всех эпохах замаскированный токен является фиксированным, его нельзя изменить. Другими словами, количество токенов, которые можно обучить, ограничено. При динамическом же маскировании операция маскирования задерживается до момента отправки данных в модель, поэтому их выразительные признаки могут улучшиться. Сравнение динамического и статического маскирования представлено на рисунке 4. Примечательно, что BERT повторяет выборку 10 раз, и в результате получается 10 различных положений маски. Для упрощения сравнения и отображения на рисунке показано только одна позиция.
![Рисунок 4 – Сравнение статического и динамического маскирований. Динамическое маскирование может маскировать больше позиций, чем статическое Рисунок 4 – Сравнение статического и динамического маскирований. Динамическое маскирование может маскировать больше позиций, чем статическое](https://habrastorage.org/getpro/habr/upload_files/60f/938/adc/60f938adcb2b9a91cb2c6a6a65089ac9.png)
3.2.4 Выходы
После предварительного обучения модели можно получить ряд значений слоев модели для каждой инструкции. Последний скрытый слой считается эмбедингом. Первый вектор скрытого слоя соответствует токену «<?>», так как он будет добавлен в начало входа. Следовательно, этот вектор может представлять признаки всего предложения. Кроме того, предполагается, что в инструкциях ассемблера опкод занимает более важную позицию, чем операнды. Поэтому эмбединг “<?>» и код операции конкатенируются в эмбединг инструкции, как показано на рисунке 5. Но для построения ACFG требуются эмбединги базовых блоков. Поэтому для преобразования всех эмбедингов инструкций в базовом блоке используется пулинг, т.е. эмбединги всех инструкций базового блока усредняются для получения семантического эмбединга каждого базового блока.
![Рисунок 5 – Эмбединги инструкций Рисунок 5 – Эмбединги инструкций](https://habrastorage.org/getpro/habr/upload_files/252/7e1/1e1/2527e11e1a2b0bdd3c6ec61cdf9ac2b9.png)
3.3 Статистические признаки
В отличие от сложных семантических признаков, которые компьютеру понять трудно, статистическая информация может явно представлять некоторые свойства ассемблерных кодов. Как показано в таблице 1, статистические признаки в основном состоят из трех частей: инструкций, операндов и специальных строк.
Таблица 1 – Перечень статистических признаков
Тип | Содержимое | К-во |
Инструкции | Количество всех инструкций в Таблице 2 | 43 |
Операнды
| Количество пустых операндов | 8
|
Строки | Количество строк «malloc» | 5 |
Всего | 56 |
В методе V-Fuzz [12] произвольным образом выбирается 244 инструкции, с учетом операндов и строк каждый базовый блок представляется 255-мерным вектором, и поэтому сложность обучения нейронных сетей велика. Чтобы сократить затраты на обучение, повысить эффективность и избежать усложнений, вызванной ненужными признаками, требуется уменьшить количество рассматриваемых инструкций. С учетом результатов Gemini [40] выделяются четыре наиболее распространенных типа инструкций: инструкции передачи данных, инструкции двоичной арифметики, логические инструкции и инструкции передачи управления. Эти инструкции способны влиять на память и легко приводят к уязвимостям. В таблице 2 представлен перечень таких инструкций.
Таблица 2 – Список инструкций
Тип | Перечень | К-во |
Инструкции передачи данных | mov push pop | 3 |
Инструкции двоичной арифметики | adcx adox add adc sub sbb imul mul idiv div inc dec neg cmp | 14 |
Логические инструкции | and or xor not | 4 |
Инструкции передачи управления | jmp je jz jne jnz ja jnbe jae jnb jb jnae jbe jg jnle jge jnl jl jnge jle jng call leave | 22 |
Всего | 43 |
Имеется восемь общих операндов. Каждый тип операнда имеет разную коннотацию, и по каждому ведется отдельная статистика. Кроме того, пять строк «malloc», «calloc», «free», «memcpy» и «memset» относятся к специфическим операциям с памятью. Обнаружение этих строк может помочь улучшить способность модели обнаруживать уязвимости, связанные с памятью.
Итак, рассматриваются 43 инструкции, 8 типов операндов и 5 специальных строк, которые представляются 56-мерным вектором статистических признаков. Таким образом, каждый базовый блок также можно представить в виде 56-мерного вектора, содержащего статистические признаки. Для проверки эффективности уменьшения размерности статистических признаков проведен сравнительный эксперимент, который описан в экспериментальной части статьи. Результаты экспериментов показывают, что новые статистические объекты могут сохранять большинство признаков и сокращать временные затраты.
3.4 Структурные признаки
Для построения графа используется улучшенная сеть structure2vec. Сеть обучается с помощью размеченного набора данных, чтобы она могла извлечь структурную информацию ассемблерной функции. После получения расширенного представления вершины выполняется объединение средних значений (пулинг) эмбедингов блоков в граф, а полученный результат используется в качестве эмбединга графа. Затем рассчитывается вероятность наличия уязвимости в каждой функции с использованием слоев нормализации и softmax. В целом эта нейронная сеть близка к 2-классовой классификации, но в отличие от последней сеть должна получить вероятность того, что в некоторых случаях в рассматриваемой функции имеется уязвимость.
3.4.1 Структура модели
Далее подробно описан состав нейронной сети. На рисунке 6 показан общий граф улучшенной GNN. F – матрица признаков, состоящая из всех векторов признаков базовых блоков в ACFG; A – матрица смежности ACFG плюс петля (self-loop). Увеличение петли обеспечивает постоянную поддержку механизма внимания каждым базовым блоком при сборе информации от своих соседей. Предполагая, что ACFG имеет p вершин и размерность эмбединга блока равна ?∗1, то F является матрицей размером ?∗?, а A – ?∗?. В этой GNN формируется матрица ? размерностью ?∗? для извлечения информации о каждой вершине, где e – размерность конечного вектора графового эмбединга. ? инициализируется матрицей ?????, т.е. ?0. Информация о вершине обновляется путем постоянного вычисления нового ?? следующим образом:
??+1=?(??1+???0) | (1) |
где ?1 – матрица ?∗?, а ? – многослойная нейронная сеть, соединенная полносвязными слоями. В реальной реализации после каждого полносвязанного слоя необходимо подключить нелинейный слой, чтобы улучшить выразительность модели. ? выполняет нормализацию и исправление (через ReLU) результата суммирования. Следует учесть, что операции ? здесь нельзя опустить, т.к. они позволяют эффективно исключить дисперсию градиента и повысить тренировочный эффект. После T итераций получается последняя матрица признаков графа ??, размеры которого по-прежнему ?∗?, после этого можно получить графовый эмбединг ACFG посредством следующего преобразования:
??=?2[?(??)]?? | (2) |
? является пулинговым слоем, а размерность эмбединга после выполнения пулинга становится равным 1∗?. ?2 – это матрица ?∗?. Следовательно, конечная размерность графового эмбединга ?? равна ?∗1. Для получения показателей безопасности и уязвимости выполняется преобразование ?? в двумерный вектор Z = {?0, ?1}:
?=?3???? | (3) |
где ?3 является матрицей 2∗?. Сейчас между двумя значениями Z зависимости нет. Для получения осмысленного результата в форме {?,1−?} выполняется следующее преобразование:
?=ℱ(?) | (4) |
В этом уравнении ℱ выполняет нелинейное преобразование Z. Для этого используются слой softmax и слой нормализации, позволяющие получить Q = {?,1−?}, где p является конечным результатом и представляет вероятность уязвимостей в графе ACFG.
![Рисунок 6 – Структура графовой нейронной сети. Входной ACFG делится на две матрицы: матрицу признаков и улучшенную матрицу смежности с петлей. Результатом является вероятность наличия уязвимости ACFG Рисунок 6 – Структура графовой нейронной сети. Входной ACFG делится на две матрицы: матрицу признаков и улучшенную матрицу смежности с петлей. Результатом является вероятность наличия уязвимости ACFG](https://habrastorage.org/getpro/habr/upload_files/2ce/311/bc4/2ce311bc410412dfdef25d661133eb18.png)
3.4.2 Обучение модели
Для улучшения способности различать функции и делать выводы об их уязвимости необходимо заранее установить метки для набора обучающих данных. Метка L может принимать значение 0 или 1, где 0 означает, что функция уязвима, а 1 означает, что она не подвержена уязвимостям. Предлагаемые сетевая структура и цель аналогичны задачам классификации, поэтому для расчета потерь и обновления параметров модели с помощью метода стохастического градиентного спуска используется функция перекрестной энтропии.
Список литературы
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]