СПОСОБ И СИСТЕМА УСТРАНЕНИЯ УЯЗВИМОСТЕЙ В ПРОГРАММНОМ КОДЕ Российский патент 2024 года по МПК G06F21/56 G06F21/60 G06F21/12 G06F17/00 

Описание патента на изобретение RU2821220C1

ОБЛАСТЬ ТЕХНИКИ

[0001] Заявленное техническое решение в общем относится к области вычислительной техники, а в частности к автоматизированному способу и системе устранения уязвимостей в программном коде с помощью алгоритмов машинного обучения.

УРОВЕНЬ ТЕХНИКИ

[0002] С развитием информационных технологий IT-решения (information technology - информационные технологии) стали оказывать существенное влияние на все сферы и отрасли жизнедеятельности. В настоящее время различные компании и организации активно внедряют и используют в своей структуре IТ-решения.

[0003] Разработка программного обеспечения для крупных финансовых организаций (например, банков) всегда трудоемкий и кропотливый труд. Кроме того, при разработке программного продукта необходимо учесть все риски возникновения уязвимостей в программном коде. Для данных проверок привлекаются эксперты по кибербезопасности, которые вручную проверяют наличие уязвимостей в программном коде в разрабатываемом продукте, что многократно увеличивает время проверки, а также не исключает человеческого фактора.

[0004] Из уровня техники известен патент US 8631384 В2 "Creating a test progression plan", патентообладатель: IBM, опубл. 01.12.2011. В данном решении описывается автоматизированный процесс составления планов тестирования программных продуктов. Известное решение обеспечивает автоматическое создание плана выполнения теста программного обеспечения путем вычисления для каждой единицы периода тестирования х усилий по выполнению тестовых блоков АТТх и усилий по завершению выполнения тестового блока ССх. В вычислении вводятся три переменные, характеризующие стратегию тестирования: эффективность, которая представляет эффективность группы тестирования, коэффициент плотности дефектов и значение коэффициента проверки. Выбирая стратегию тестирования, менеджер тестов определяет значения трех переменных, которые влияют на план развития. Во время выполнения теста кумулятивная кривая «попытка» значений АТТх и кумулятивная кривая «завершение» значений ССх позволяют менеджеру тестирования сравнить уже предпринятые усилия с ожидаемыми усилиями, предпринятыми для испытательных блоков, которые были предприняты и для испытательных единиц, которые были закончены, то есть, когда дефекты, найденные в коде, были исправлены.

[0005] Недостатком известных решений в данной области техники является отсутствие возможности автоматизированного устранения уязвимостей в программном коде.

РАСКРЫТИЕ ИЗОБРЕТЕНИЯ

[0006] В заявленном техническом решении предлагается новый подход к устранению уязвимостей в программном коде. В данном решении используется алгоритм машинного обучения, который позволяет автоматизировать процесс проверки программного кода и значительно ускорить процесс устранения уязвимостей в программном коде.

[0007] Таким образом, решается техническая проблема автоматизированного устранения уязвимостей в программном коде.

[0008] Техническим результатом, достигающимся при решении данной проблемы, является повышение безопасности программного обеспечения за счет устранения уязвимостей в программном коде.

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

- получают данные об уязвимостях в программном коде;

- получают на основе предыдущего этапа данные, содержащие по меньшей мере блок исходного кода и тип обнаруженной уязвимости;

- преобразуют исходный код, содержащий уязвимость в дерево абстрактного синтаксиса (AST), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами;

- формируют путь обхода вершин в AST;

- формируют упорядоченную последовательность, которая представляет собой типы каждого элемента пути;

- осуществляют обработку упорядоченной последовательности с помощью кодирующей модели машинного обучения, обученной на упорядоченных последовательностях данных об уязвимостях, в ходе которой получают представление упорядоченной последовательности в виде матрицы скрытых состояний;

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

- переводят полученную на предыдущем этапе упорядоченную последовательность в блок исходного кода, эквивалентный по функционалу изначальному блоку исходного кода.

[0010] В одном из частных вариантов реализации способа упорядоченная последовательность, которая представляет собой типы каждого элемента пути, является многомерной и представляет собой граф.

[0011] В другом частном варианте реализации способа преобразуют исходный код, содержащий уязвимость в граф потока управления (CFG - control flow graph), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0012] В другом частном варианте реализации способа преобразуют исходный код, содержащий уязвимость в граф зависимостей управления (CDG - Control Dependence Graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0013] В другом частном варианте реализации способа преобразуют исходный код, содержащий уязвимость в граф зависимости данных (DDG - Data Dependence Graph), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0014] В другом частном варианте реализации способа преобразуют исходный код, содержащий уязвимость в граф зависимости программы (PDG - Program Dependence graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0015] В другом частном варианте реализации способа преобразуют исходный код, содержащий уязвимость в граф свойств кода (CPG - Code Property Graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0016] Кроме того, заявленный технический результат достигается за счет системы устранения уязвимостей в программном коде, содержащей:

- по меньшей мере один процессор;

- по меньшей мере одну память, соединенную с процессором, которая содержит машиночитаемые инструкции, которые при их выполнении по меньшей мере одним процессором обеспечивают выполнение заявленного способа.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

[0017] Фиг. 1 иллюстрирует блок-схему заявленного способа.

[0018] Фиг. 2 иллюстрирует пример общего вида вычислительной системы, которая обеспечивает реализацию заявленного решения.

ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ

[0001] Ниже будут описаны понятия и термины, необходимые для понимания данного технического решения.

[0002] Модель в машинном обучении (МО) - совокупность методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение в процессе применения решений множества сходных задач.

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

[0004] Эксплойт - компьютерная программа, фрагмент программного кода или последовательность команд, использующие уязвимости в программном обеспечении и применяемые для проведения атаки на вычислительную систему.

[0005] Эксплуатируемая уязвимость - уязвимость в программном обеспечении, для которой может быть создан и применен эксплойт.

[0006] AST - абстрактное синтаксическое дерево. Конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0007] F-1 мера представляет собой совместную оценку точности и полноты.

[0008] ROC-кривая - графическая характеристика качества бинарного классификатора, отражающая зависимость доли истинно-положительных классификаций от доли ложно-положительных классификаций при варьировании порога решающего правила.

[0009] Матрица ошибок - это способ разбить классифицируемые объекты на четыре категории в зависимости от комбинации реального класса и ответа классификатора.

[0010] Коннекторы - программные компоненты, осуществляющие сбор данных от источников информации (Система управления задачами /Система для совместной работы над релизами /Система управления версиями /Система управления проектами /Система управления сервисами предприятия /и др.) и приведение данных к необходимым структуре и формату.

[0011] Хранилище - система для хранения больших объемов собранных и обработанных коннекторами данных, а также генерируемой иными компонентами системы.

[0012] Данное техническое решение может быть реализовано на компьютере, в виде автоматизированной информационной системы (АИС) или машиночитаемого носителя, содержащего инструкции для выполнения вышеупомянутого способа.

[0013] Техническое решение может быть реализовано в виде распределенной компьютерной системы.

[0014] В данном решении под системой подразумевается компьютерная система, ЭВМ (электронно-вычислительная машина), ЧПУ (числовое программное управление), ПЛК (программируемый логический контроллер), компьютеризированные системы управления и любые другие устройства, способные выполнять заданную, четко определенную последовательность вычислительных операций (действий, инструкций).

[0015] Под устройством обработки команд подразумевается электронный блок либо интегральная схема (микропроцессор), исполняющая машинные инструкции (программы)/

[0016] Устройство обработки команд считывает и выполняет машинные инструкции (программы) с одного или более устройства хранения данных, например, таких устройств, как оперативно запоминающие устройства (ОЗУ) и/или постоянные запоминающие устройства (ПЗУ). В качестве ПЗУ могут выступать, но, не ограничиваясь, жесткие диски (HDD), флеш-память, твердотельные накопители (SSD), оптические носители данных (CD, DVD, BD, MD и т.п.) и др.

[0017] Программа - последовательность инструкций, предназначенных для исполнения устройством управления вычислительной машины или устройством обработки команд.

[0018] Подготовка данных для обучения.

[0019] Обучение модели проводилось на исторических данных об уязвимостях программного обеспечения, размеченных на 2 класса:

код с уязвимостью (класс 1),

код без уязвимости (класс 0).

[0020] Обучение модели МО для каждого типа уязвимости производится на заранее размеченных данных. Всего было доступно на момент создания модели от 2178 до 55949 уязвимостей в зависимости от типа уязвимости, обнаруженных в заданный временной диапазон, например, 1-3 месяца.

[0021] В обучающей выборке использовались исключительно уникальные уязвимости, количество которых варьируется от 153 до 2147 в зависимости от типа уязвимости. Для оценки качества модели набор данных был разбит на 2 части: тренировочную и контрольную выборки. Разбиение происходило случайным образом в отношении 70% на тренировочную выборку и 30% на контрольную выборку.

[0022] Взвешенная f-1 мера для всех классификаторов в среднем составляет около 0.89.

[0023] Как показано на Фиг. 1 компьютерно-реализуемый способ устранения уязвимостей в программном коде (100) состоит из нескольких этапов, выполняемых по меньшей мере одним процессором.

[0024] На этапе (101) получают данные об уязвимостях в программном коде.

[0025] На данном этапе получают данные об уязвимостях. В одном из частных вариантов изобретения эти данные получены в результате сканирования программного кода с помощью инструмента SAST (Static Application Security Testing).

[0026] Далее на этапе (102) получают на основе предыдущего этапа данные, содержащие по меньшей мере файл исходного кода и тип обнаруженной уязвимости.

[0027] Далее на этапе (103) преобразуют исходный код, содержащий уязвимость в дерево абстрактного синтаксиса (AST), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0028] На данном этапе производится синтаксический анализ (парсинг) исходного кода, содержащегося в файле, полученном на Этапе (103), и написанного на любом языке программирования (Java, С#, ASP, Visual Basic, С, С++, PHP, Apex, Ruby, JavaScript, VBScript, Perl, Swift, Python, Groovy, Scala и др.), результатом которого является дерево разбора или дерево абстрактного синтаксиса, отображающее зависимости между всеми элементами исходного кода, содержащими информацию об их положениях в исходном коде (номер строки начала элемента, номер колонки начала элемента, номер строки окончания элемента, номер колонки окончания элемента), их классах, таких как выражения (expressions), инструкции (statements), объявления (declarations) и др., типах их классов, их именах, их родительских и наследных элементах, комментариях к ним и пр.

[0029] В одном из частных вариантов реализации заявленного технического решения, преобразуют исходный код, содержащий уязвимость в граф потока управления (CFG -control flow graph), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0030] В другом частном варианте реализации заявленного технического решения преобразуют исходный код, содержащий уязвимость в граф зависимостей управления (CDG - Control Dependence Graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0031] В другом частном варианте реализации заявленного технического решения преобразуют исходный код, содержащий уязвимость в граф зависимости данных (DDG - Data Dependence Graph), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0032] В другом частном варианте реализации заявленного технического решения преобразуют исходный код, содержащий уязвимость в граф зависимости программы (PDG - Program Dependence graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0033] В другом частном варианте реализации заявленного технического решения преобразуют исходный код, содержащий уязвимость в граф свойств кода (CPG - Code Property Graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

[0034] Далее на этапе (104) формируют путь обхода вершин AST.

[0035] Далее на этапе (105) формируют упорядоченную последовательность, которая представляет собой типы каждого элемента.

[0036] На данном этапе из пути обхода вершин в AST, сформированного на этапе (105), в котором каждый элемент содержит информацию, полученную на этапе (104), формируется упорядоченная последовательность типов классов элементов (типов вершин) этого пути.

[0037] В одном из частных вариантов изобретения упорядоченная последовательность, представляющая собой типы каждого элемента пути, является многомерной и представляет собой граф (представление дерева абстрактного синтаксиса (AST) в виде графа).

[0038] Далее на этапе (106) осуществляют обработку упорядоченной последовательности с помощью кодирующей модели машинного обучения (МО), обученной на упорядоченных последовательностях данных об уязвимостях, в ходе которой получают представление упорядоченной последовательности в виде матрицы скрытых состояний.

[0039] На данном этапе формируется словарь всех возможных типов классов (типов) вершин AST, полученных на Этапе (103). Значениями данного словаря для каждой последовательности, сформированной на этапе (105), будут являться количества соответствующих типов, имеющихся в данной последовательности и/или N-граммы таких типов. Из значений такого словаря формируется численный вектор с одинаковой размерностью для всех последовательностей по меньшей мере по одному из методов:

• Мешок слов (bag-of-words),

• One-hot encoding (ОНЕ),

• Кодирование словаря уникальными индексами,

• Word2Vec,

• Векторные представления типов - «Embedding» и/или их совокупности.

[0040] Для получения Embedding типов могут быть использованы такие технологии как нейронные сети: Полносвязанные, Рекуррентные, Сверточные, Трансформеры. В одном из частных вариантов изобретения для получения векторных представлений типов используются предобученные нейронные сети, такие как DistilBERT: smaller, faster, cheaper, lighter; ALBERT (Lite BERT Google); TinyBERT; T-NLG (Turing Natural Language Generation); USE (Universal Sentence Encoder); ELMo (Embeddings from Language Models) или наследуемые от них сети.

[0041] Векторизация

Для извлечения признаков из сформированных словарей применялся метод векторизации TF-IDF (term-frequency times inverse document-frequency). Векторизатор обучался на обучающей выборке без использования стоп-слов (stop_words=None), без использования IDF, так как, исходя из размера обучающей выборки и наличия в каждом элементе обучающей выборки очень распространенных признаков, IDF-компонент не позволит вычислить особенные признаки для каждого словаря, использовались 1 и 2-граммы (параметр подбирался опытным путем).

[0042] Обучение модели машинного обучения

Для получения матрицы скрытых последовательностей используется блок энкодера (кодировки) генеративной модели машинного обучения. Данный блок может представлять собой слой Embedding, случайно обученный или инициализированный. Далее могут идти нейронные сети: Полносвязанные, Рекуррентные, Сверточные, Трансформеры. В одном из частных вариантов изобретения блок энкодера представляет собой по меньшей мере один слой нейронные сети из типов Рекуррентные нейронные сети (Recurrent neural networks, RNN), Долгая краткосрочная память (Long short term memory, LSTM), Управляемые рекуррентные нейроны (Gated recurrent units, GRU), Нейронные машины Тьюринга (Neural Turing machines, NMT), Двунаправленные RNN, LSTM и GRU (BiRNN, BiLSTM и BiGRU), Глубокие остаточные сети (Deep residual networks, DRN), Нейронные эхо-сети (Echo state networks, ESN), Машины неустойчивых состояний (Liquid state machines, LSM), самоорганизующаяся карта Кохонена (Kohonen networks, KN, или organising (feature) map, SOM, SOFM).

[0043] Далее на этапе (107) осуществляют обработку матрицы скрытых последовательностей с помощью генеративной модели машинного обучения (МО), обученной на матрицах скрытых состояний последовательностей для уязвимостей, последовательностей без уязвимостей и их исходных кодах, в ходе которой получают новую упорядоченную последовательность, соответствующую исходному программному коду по выполняемым функциям, но с устраненной в нем уязвимостью.

[0044] Данная обработка осуществляется блоком генератора (декодера) генеративной модели машинного обучения. Этот блок может представлять собой декодер типа Вариационный автоэнкодер (VAE), Методы глубокого обучения, ограниченную машину Больцмана (RBM), Глубокую сеть доверия (Deep Belief Network - DBN), нейронные сети: Полносвязанные, Рекуррентные, Сверточные, Трансформеры.

[0045] В одном из частных вариантов изобретения блок декодера представляет собой по меньшей мере один слой нейронные сети из типов Сверточных нейронных сете (CNN), Рекуррентные нейронные сети (Recurrent neural networks, RNN), Долгая краткосрочная память (Long short term memory, LSTM), Управляемые рекуррентные нейроны (Gated recurrent units, GRU), Нейронные машины Тьюринга (Neural Turing machines, NMT), Двунаправленные RNN, LSTM и GRU (BiRNN, BiLSTM и BiGRU), Глубокие остаточные сети (Deep residual networks, DRN), Нейронные эхо-сети (Echo state networks, ESN), Машины неустойчивых состояний (Liquid state machines, LSM), самоорганизующаяся карта Кохонена (Kohonen networks, KN, или organising (feature) map, SOM, SOFM).

[0046] В одном из частных вариантов изобретения в качестве модели машинного обучения используется Генеративно-состязательные сети (англ. Generative adversarial networks, сокр. GAN). Данная генеративно-состязательная сеть может содержать блок энкодера со слоями указанные в разделе выше. Может содержать блок декодера со слоями указанные в разделе выше. Блок дискриминатора (дискриминантной модели) в одном из частных вариантов изобретения содержит нейронные сети: Полносвязанные, Рекуррентные, Сверточные, Трансформеры; Классификаторы: DecisionTree (дерево решений), LogRegression (логистическая регрессия), Bayes (Наивный байесовский классификатор), SVM (метод опорных векторов), K-means (к-соседей), RandomForest (случайный лес), градиентные бустинги: XGBoost, LightGBM.

[0047] Обучение происходит следующим образом: операции производятся над двумя группами блоков программного кода, где первые блоки программного кода - это код с уязвимостью, а вторые блоки программного кода - это код без уязвимости. Данные блоки переводятся в упорядоченную последовательность элементов AST дерева в соответствии с этапами (101)-(106).

[0048] Далее получают последовательность кода с уязвимостью - А, соответствующую ей последовательность кода без уязвимости - Б. Полученную последовательность А (кода с уязвимостью) подают в блок энкодера (кодировки) генеративной модели машинного обучения. Получают матрицу скрытых состояний (107). Данную матрицу скрытых состояний подают в блок генератора (декодера) генеративной модели машинного обучения (108). Получают новую (восстановленную) упорядоченную последовательность - В. Данную последовательность (В) сравнивают с исходной последовательностью Б (кода без уязвимости). Полученные несоответствия пересчитывают в количественную характеристику по выбранной функции потерь. Данную количественную характеристику используют для обучения нейронной сети по выбранному алгоритму обучения.

[0049] В одном из частных вариантов изобретения используется по меньшей мере одна из функций потерь: KLD (Вычисляет потерю дивергенции Кулбека-Лейблера между истинным значением и предсказанным значением), МАЕ (Вычисляет среднюю абсолютную ошибку между метками и прогнозами), МАРЕ (Вычисляет среднюю абсолютную процентную ошибку между истинным значением и предсказанным значением), MSE (Вычисляет среднеквадратичную ошибку между метками и прогнозами), MSLE (Вычисляет среднеквадратичную логарифмическую ошибку между истинным значением и предсказанным значением), binary_crossentropy (Вычисляет двоичную потерю кроссэнтропии), binary_focal_crossentropy (Вычисляет двоичную потерю фокальной кроссэнтропии), categoricalcrossentropy (Вычисляет категориальную потерю кроссэнтропии), categorical_hinge (Вычисляет категориальную потерю «лассо» между истинным значением и предсказанным значением), cosinesimilarity (Вычисляет косинусное сходство между метками и предсказаниями), hinge (Вычисляет потери в шарнире между истинным значением и предсказанным значением), huber (Вычисляет величину потерь по Хуберу), kl_divergence (Вычисляет потерю дивергенции Кулбека-Лейблера между истинным значением и предсказанным значением), kullback_leibler divergence (Вычисляет потерю дивергенции Кулбека-Лейблера между истинным значением и предсказанным значением), logcosh (Логарифм гиперболического косинуса ошибки прогнозирования), logcosh (Логарифм гиперболического косинуса ошибки прогнозирования), mean_absolute_error (Вычисляет среднюю абсолютную ошибку между метками и прогнозами), mean_absolute_percentage_error (Вычисляет среднюю абсолютную процентную ошибку между истинным значением и предсказанным значением), mean_squared_error (Вычисляет среднеквадратичную ошибку между метками и прогнозами), mean_squared_logarithmic_error (Вычисляет среднеквадратичную логарифмическую ошибку между истинным значением и предсказанным значением), poisson (Вычисляет потери Пуассона между истинным значением и предсказанным значением), sparse_categorical_crossentropy (Вычисляет разреженную категориальную потерю кроссэнтропии), squared_hinge (Вычисляет квадрат потерь на «лассо» между истинным значением и предсказанным значением). Данные функции потерь часто имеют следующие обозначения: binary_cross_entropy, binary_cross_entropy_with_logits, poisson_nll_loss, cosine_embedding_loss, cross_entropy, ctc_loss, gaussian_nl_loss, hingee_mbedding_loss, kl_div, Il_loss, mse_loss, margin_ranking_loss, multilabel_margin_loss, multilabel_soft_margin_loss, multirnargin_loss, nll_loss, huber_loss, smooth_Il_loss, soft_margin_loss, triplet_margin_loss, triplet_margin_with_distance_loss.

[0050] В одном из частных вариантов изобретения используется по меньшей мере один из алгоритмов обучения: Adadelta, Adagrad, Adam, AdamW, SparseAdam, Adamax, ASGD, LBFGS, NAdam, RAdam, RMSprop, Rprop, FTRL, SGD, FastSGD, SGD-Nesterov, SAGA, SAGA+.

[0051] Далее на этапе (108) переводят полученную на предыдущем этапе упорядоченную последовательность в блок исходного кода, эквивалентный по функционалу изначальному блоку исходного кода.

[0052] В результате, данный подход позволяет формировать и приоритизировать задачи по устранению недостатков в разрабатываемом программном обеспечении, тем самым повышая скорость разработки программного кода, уменьшает количество ошибок в программном коде, а также напрямую влияет на безопасность программного кода, что обеспечивает повышение скорости обновления программного обеспечения или вывода программного обеспечения на рынок за счет исключения из уязвимостей и увеличивая надежность программного обеспечения от действий злоумышленников, направленных на:

• Хищение чувствительной информации,

• Причинение репутационного или финансового ущерба организации или пользователю,

• Уничтожение важных данных или препятствование доступу к важным данным,

• Искажение информации,

• Хищение денежных средств.

[0053] На Фиг. 2 представлен пример общего вида вычислительной системы (300), которая обеспечивает реализацию заявленного способа или является частью компьютерной системы, например, сервером, персональным компьютером, частью вычислительного кластера, обрабатывающим необходимые данные для осуществления заявленного технического решения.

[0054] В общем случае, система (300) содержит объединенные общей шиной информационного обмена один или несколько процессоров (301), средства памяти, такие как ОЗУ (302) и ПЗУ (303), интерфейсы ввода/вывода (304), устройства ввода/вывода (1105), и устройство для сетевого взаимодействия (306).

[0055] Процессор (301) (или несколько процессоров, многоядерный процессор и т.п.) может выбираться из ассортимента устройств, широко применяемых в настоящее время, например, таких производителей, как: Intel™, AMD™, Apple™, Samsung Exynos™, MediaTEK™, Qualcomm Snapdragon™ и т.п.Под процессором или одним из используемых процессоров в системе (300) также необходимо учитывать графический процессор, например, GPU NVIDIA или Graphcore, тип которых также является пригодным для полного или частичного выполнения способа, а также может применяться для обучения и применения моделей машинного обучения в различных информационных системах.

[0056] ОЗУ (302) представляет собой оперативную память и предназначено для хранения исполняемых процессором (301) машиночитаемых инструкций для выполнения необходимых операций по логической обработке данных. ОЗУ (302), как правило, содержит исполняемые инструкции операционной системы и соответствующих программных компонент (приложения, программные модули и т.п.). При этом, в качестве ОЗУ (302) может выступать доступный объем памяти графической карты или графического процессора.

[0057] ПЗУ (303) представляет собой одно или более устройств постоянного хранения данных, например, жесткий диск (HDD), твердотельный накопитель данных (SSD), флэш-память (EEPROM, NAND и т.п.), оптические носители информации (CD-R/RW, DVD-R/RW, BlueRay Disc, MD) и др.

[0058] Для организации работы компонентов системы (300) и организации работы внешних подключаемых устройств применяются различные виды интерфейсов В/В (304). Выбор соответствующих интерфейсов зависит от конкретного исполнения вычислительного устройства, которые могут представлять собой, не ограничиваясь: PCI, AGP, PS/2, IrDa, FireWire, LPT, COM, SATA, IDE, Lightning, USB (2.0, 3.0, 3.1, micro, mini, type C), TRS/Audio jack (2.5, 3.5, 6.35), HDMI, DVI, VGA, Display Port, RJ45, RS232 и т.п.

[0059] Для обеспечения взаимодействия пользователя с вычислительной системой (300) применяются различные средства (305) В/В информации, например, клавиатура, дисплей (монитор), сенсорный дисплей, тач-пад, джойстик, манипулятор мышь, световое перо, стилус, сенсорная панель, трекбол, динамики, микрофон, средства дополненной реальности, оптические сенсоры, планшет, световые индикаторы, проектор, камера, средства биометрической идентификации (сканер сетчатки глаза, сканер отпечатков пальцев, модуль распознавания голоса) и т.п.

[0060] Средство сетевого взаимодействия (306) обеспечивает передачу данных посредством внутренней или внешней вычислительной сети, например, Интранет, Интернет, ЛВС и т.п. В качестве одного или более средств (306) может использоваться, но не ограничиваться: Ethernet карта, GSM модем, GPRS модем, LTE модем, 5G модем, модуль спутниковой связи, NFC модуль, Bluetooth и/или BLE модуль, Wi-Fi модуль и др.

[0061] Представленные материалы заявки раскрывают предпочтительные примеры реализации технического решения и не должны трактоваться как ограничивающие иные, частные примеры его воплощения, не выходящие за пределы испрашиваемой правовой охраны, которые являются очевидными для специалистов соответствующей области техники.

Похожие патенты RU2821220C1

название год авторы номер документа
СПОСОБ И СИСТЕМА ВЫЯВЛЕНИЯ ЭКСПЛУАТИРУЕМЫХ УЯЗВИМОСТЕЙ В ПРОГРАММНОМ КОДЕ 2022
  • Максимова Анна Андреевна
  • Гончаренко Лейла Халидовна
  • Бачевский Артем Евгеньевич
  • Гуртова Кристина Сергеевна
  • Умеренко Григорий Сергеевич
  • Анистратенко Михаил Артурович
RU2790005C1
Способ автоматического создания параллельной программы с временной параметризацией многопроцессорных вычислительных систем с одинаковым доступом к памяти 2022
  • Викторов Дмитрий Сергеевич
  • Брежнев Дмитрий Юрьевич
  • Толмачёв Алексей Александрович
  • Калачников Андрей Сергеевич
  • Якунина Гаяне Размиковна
RU2786347C1
БЫСТРОЕ ВЫЧИСЛЕНИЕ СВЕРТОЧНОЙ НЕЙРОННОЙ СЕТИ 2018
  • Лю, Юнчао
  • Хуан, Циинь
  • Пань, Гочжэнь
  • Ли, Сычжун
  • Сюй, Цзяньго
  • Чжан, Хайтао
  • Ван, Линь
RU2722473C1
СПОСОБ И СИСТЕМА ОПРЕДЕЛЕНИЯ ПРИНАДЛЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПО ЕГО ИСХОДНОМУ КОДУ 2019
  • Слипенчук Павел Владимирович
  • Померанцев Илья Сергеевич
RU2728498C1
СПОСОБ ПЕРЕДАЧИ ДВИЖЕНИЯ СУБЪЕКТА ИЗ ВИДЕО НА АНИМИРОВАННОГО ПЕРСОНАЖА 2019
  • Ашманов Станислав Игоревич
  • Сухачев Павел Сергеевич
RU2708027C1
СПОСОБ И УСТРОЙСТВО ДЛЯ ГЕНЕРАЦИИ УДАЛЕННЫХ ВЫЗОВОВ 2023
  • Селютин Дмитрий Сергеевич
  • Ларионов Александр Витальевич
  • Белоусов Александр Юрьевич
RU2814437C1
СПОСОБ ГЕНЕРАЦИИ БАЗ ЗНАНИЙ ДЛЯ СИСТЕМ ВЕРИФИКАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ РАСПРЕДЕЛЕННЫХ ВЫЧИСЛИТЕЛЬНЫХ КОМПЛЕКСОВ И УСТРОЙСТВО ДЛЯ ЕГО РЕАЛИЗАЦИИ 2006
  • Пучков Федор Михайлович
  • Шапченко Кирилл Александрович
RU2364930C2
ЛИНГВИСТИЧЕСКИ ИНФОРМИРОВАННЫЕ СТАТИСТИЧЕСКИЕ МОДЕЛИ СТРУКТУРЫ СОСТАВЛЯЮЩИХ ДЛЯ УПОРЯДОЧЕНИЯ В РЕАЛИЗАЦИИ ПРЕДЛОЖЕНИЙ ДЛЯ СИСТЕМЫ ГЕНЕРИРОВАНИЯ ЕСТЕСТВЕННОГО ЯЗЫКА 2004
  • Ринггер Эрик
  • Геймон Майкл
  • Сметс Мартин
  • Корстон-Оливер Саймон
  • Мур Роберт К.
RU2336552C2
СПОСОБ ИНТЕРПРЕТАЦИИ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ 2018
  • Жаров Ярослав Максимович
  • Корженков Денис Михайлович
  • Швечиков Павел Дмитриевич
RU2689818C1
СПОСОБ И СИСТЕМА ГЕНЕРАЦИИ ТЕКСТА ДЛЯ ЦИФРОВОГО АССИСТЕНТА 2022
  • Тихонова Мария Ивановна
RU2796208C1

Иллюстрации к изобретению RU 2 821 220 C1

Реферат патента 2024 года СПОСОБ И СИСТЕМА УСТРАНЕНИЯ УЯЗВИМОСТЕЙ В ПРОГРАММНОМ КОДЕ

Изобретение относится к области вычислительной техники. Технический результат заключается в повышении безопасности программного обеспечения за счет устранения уязвимостей в программном коде. Компьютерно-реализуемый способ устранения уязвимостей в программном коде, выполняемый с помощью по меньшей мере одного процессора и содержащий этапы, на которых: получают данные об уязвимостях в программном коде; получают данные, содержащие по меньшей мере блок исходного кода и тип обнаруженной уязвимости; преобразуют исходный код, содержащий уязвимость в дерево абстрактного синтаксиса (AST), где внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами; формируют путь обхода вершин в AST; формируют упорядоченную последовательность и осуществляют ее обработку с помощью кодирующей модели машинного обучения; осуществляют обработку матрицы скрытых последовательностей с помощью генеративной модели машинного обучения, обученной на матрицах скрытых состояний последовательностей для уязвимостей, в ходе которой получают новую упорядоченную последовательность, соответствующую исходному программному коду, но с устраненной в нем уязвимостью; переводят полученную на предыдущем этапе упорядоченную последовательность в блок исходного кода. 2 н. и 6 з.п. ф-лы, 2 ил.

Формула изобретения RU 2 821 220 C1

1. Компьютерно-реализуемый способ устранения уязвимостей в программном коде, выполняемый с помощью по меньшей мере одного процессора и содержащий этапы, на которых:

- получают данные об уязвимостях в программном коде;

- получают на основе предыдущего этапа данные, содержащие по меньшей мере блок исходного кода и тип обнаруженной уязвимости;

- преобразуют исходный код, содержащий уязвимость, в дерево абстрактного синтаксиса (AST), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами;

- формируют путь обхода вершин в AST;

- формируют упорядоченную последовательность, которая представляет собой типы каждого элемента пути;

- осуществляют обработку упорядоченной последовательности с помощью кодирующей модели машинного обучения, обученной на упорядоченных последовательностях данных об уязвимостях, в ходе которой получают представление упорядоченной последовательности в виде матрицы скрытых состояний;

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

- переводят полученную на предыдущем этапе упорядоченную последовательность в блок исходного кода, эквивалентный по функционалу изначальному блоку исходного кода.

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

3. Способ по п. 1, характеризующийся тем, что преобразуют исходный код, содержащий уязвимость, в граф потока управления (CFG - control flow graph), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

4. Способ по п. 1, характеризующийся тем, что преобразуют исходный код, содержащий уязвимость, в граф зависимостей управления (CDG - Control Dependence Graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

5. Способ по п. 1, характеризующийся тем, что преобразуют исходный код, содержащий уязвимость, в граф зависимости данных (DDG - Data Dependence Graph), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

6. Способ по п. 1, характеризующийся тем, что преобразуют исходный код, содержащий уязвимость, в граф зависимости программы (PDG - Program Dependence graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

7. Способ по п. 1, характеризующийся тем, что преобразуют исходный код, содержащий уязвимость, в граф свойств кода (CPG - Code Property Graphs), в котором внутренние вершины сопоставлены с операторами языка программирования, а листья с соответствующими операндами.

8. Система устранения уязвимостей в программном коде, содержащая по меньшей мере один процессор и память, хранящую машиночитаемые инструкции, которые при их выполнении процессором реализуют способ по любому из пп. 1-7.

Документы, цитированные в отчете о поиске Патент 2024 года RU2821220C1

СПОСОБ И СИСТЕМА ВЫЯВЛЕНИЯ ЭКСПЛУАТИРУЕМЫХ УЯЗВИМОСТЕЙ В ПРОГРАММНОМ КОДЕ 2022
  • Максимова Анна Андреевна
  • Гончаренко Лейла Халидовна
  • Бачевский Артем Евгеньевич
  • Гуртова Кристина Сергеевна
  • Умеренко Григорий Сергеевич
  • Анистратенко Михаил Артурович
RU2790005C1
US 11568055 B2, 31.01.2023
US 20210124830 A1, 29.04.2021
CN 114692155 A, 01.07.2022
СИСТЕМА И СПОСОБ ОЦЕНКИ ВРЕДОНОСНОСТИ КОДА, ИСПОЛНЯЕМОГО В АДРЕСНОМ ПРОСТРАНСТВЕ ДОВЕРЕННОГО ПРОЦЕССА 2013
  • Павлющик Михаил Александрович
RU2531861C1

RU 2 821 220 C1

Авторы

Вышегородцев Кирилл Евгеньевич

Кузьмин Александр Михайлович

Даты

2024-06-18Публикация

2023-05-11Подача