УСТРОЙСТВО ВЫЯВЛЕНИЯ УЯЗВИМОСТЕЙ

Полезная модель относится к компьютерной технике, а более конкретно к области информационной безопасности, и предназначена для выявления уязвимостей в исходных текстах компьютерных программ.
Из уровня техники известна система для определения программных закладок (патент РФ №114799 на полезную модель, кл. G06F 21/00, опубл. 2012 г), содержащая блоки лексического, синтаксического и сигнатурного анализа, предназначенная для автоматического составления описания объектов на естественном языке, а также для обнаружения новых или потенциально опасных конструкций кода.
Из уровня техники также известны система и метод обнаружения дефектов в компьютерной программе с помощью анализа потока управления и анализа потока данных (патент США US 7900193 (B1) на изобретение, кл. G06F 9/44, опубл. 2011 г), использующая граф потока управления и граф потока данных для определения потенциально опасных конструкций кода.
Также известно устройство, проводящее статический анализ безопасности системного кода (заявка KHP CN 103793652 A на изобретение, кл. G06F 21/57, опубл. 2014 г), использующее абстрактное синтаксическое дерево, анализ потока данных и анализ потока управления для определения потенциально опасных конструкций кода.
Недостатками вышеперечисленных технических решений являются их сложность и повышенная вероятность обнаружения ложных потенциально вредоносных объектов.
Техническим результатом, на достижение которого направлено заявляемое устройство, является снижение вероятности ложных срабатываний при обнаружении уязвимостей в компьютерных системах, что в свою очередь приводит к повышению точности выявления уязвимостей в компьютерных системах.
Технический результат достигается за счет того, что устройство выявления уязвимостей содержит модуль построения абстрактного синтаксического дерева, соединенный с модулем построения графа вызовов, который соединен с модулем проведения локального анализа функций, соединенным с модулем проверки на наличие дефекта, и блок памяти, соединенный с модулями построения абстрактного синтаксического дерева, построения графа вызовов, проведения локального анализа функций и модулем проверки на наличие уязвимости, модуль проверки на наличие уязвимости осуществляет сравнение признаков данных функций и операций с признаками, указанными в правилах для проверки на уязвимости, которые хранятся в блоке памяти, при этом совпадение этих признаков свидетельствует о наличии уязвимости.
Устройство выявления уязвимостей производит анализ потоков данных, состоящий в анализе изменений данных в конструкциях компьютерной программы. При этом отслеживаются изменения признаков данных функций и операций компьютерной программы.
Признак данных - это такой атрибут данных, который может привести к уязвимости, если такие данные передаются в чувствительную точку программы.
Чувствительная точка - программная конструкция, выполнение которой чувствительно к одному из признаков и может привести к уязвимости.
Признаками данных являются:
- Загрязненность. Если данные, передаваемые в функцию не проверяются, то такие данные являются загрязненными.
- Константность. Если данным присваивается постоянное значение, то такие данные являются константными.
- Состояние выделенной памяти. Память для данных может быть не выделена, выделена и освобождена.
Могут быть использованы при анализе потоков данных и другие признаки данных.
Как упоминалось ранее, наличие определенного признака может привести к уязвимости.
Так наличие такого признака, как загрязненность, может потенциально привести к инъекции кода. Константность может свидетельствовать о «зашитых» в код паролях. А признак «состояние выделенной памяти» может свидетельствовать об ошибках в работе с памятью.
Все вышеуказанные уязвимости могут быть использованы злоумышленником для проведения атак на информационные системы, поэтому крайне важно исследовать исходные тексты программ на наличие данных дефектов.
На фигуре 1 показано устройство выявления уязвимостей, состоящее из модуля построения абстрактного синтаксического дерева (1), модуля построения графа вызовов (2), модуля проведения локального анализа функций (3), модуля проверки на наличие уязвимости (4) и блока памяти (5).
Модуль построения абстрактного синтаксического дерева осуществляет лексический и синтаксический анализ входных данных.
Во время лексического анализа осуществляется распознавание и выделение лексем из входной последовательности символов.
Далее полученный набор лексем в результате синтаксического анализа преобразуются в абстрактное-синтаксическое дерево, т.е. в ориентированное дерево, в котором внутренние вершины сопоставлены с операторами языка программирования, а листья - с соответствующими операндами.
Абстрактное-синтаксическое дерево записывается в блок памяти для хранения и использования в дальнейшей обработке.
Модуль построения графа вызова на основе полученного абстрактного-синтаксического дерева формирует граф вызова - ориентированный граф, отображающий вызовы между функциями в компьютерной программе.
Граф вызова, также как и абстрактное-синтаксическое дерево, записывается в блок памяти для хранения и использования в дальнейшей обработке.
Модуль проведения локального анализа функции производит локальный анализ функции для каждого начального узла графа вызова, а также определяет признаки аргументов функции.
Локальный анализ проводится с целью определения чувствительных точек в узлах графа вызова. Определение чувствительных точек происходит путем сравнения узлов графа вызова с сигнатурами чувствительных точек, хранящимися в блоке памяти.
При нахождении чувствительной точки, информация об этом поступает в модуль проверки на наличие уязвимости, который осуществляет сравнение признаков данных в этой чувствительной точки с признаками, указанными в правилах проверки на уязвимости. При совпадении признаков принимается решение о найденной уязвимости.
Правила для проверки на уязвимости перед началом работы устройства выявления уязвимостей записываются в блок памяти.
Модули устройства выявления уязвимостей могут быть выполнены на цифровых микросхемах, при этом могут быть использованы микроконтроллеры, блок флэш-памяти.