ПРОБЛЕМНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК ДЛЯ СИСТЕМ ВИЗУАЛИЗАЦИИ СОБЫТИЙ БЕЗОПАСНОСТИ В КАЧЕСТВЕ PYTHON МОДУЛЯ 
С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Таким образом, начали появляться проблемно-ориентированные языки, целью которых является решение определенных проблем, обеспечение программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме [1; 2]. 
Одной из таких задач является процесс визуализации большого объема событий систем безопасности в режиме реального времени для возможности людей, работающих с ними, быстро реагировать на критические изменения, приводящие к нарушениям или аварийным ситуациям.  
События, происходящие в системе, сохраняются с помощью логов – текстовых строк с информации о событии. В больших системах генерируется очень много log сообщений.  Для их анализа человеку необходимо использовать систему визуализации событий безопасности, которая в удобном виде отображают события, их изменения, а также отображают отклонения от средних значений – аномальное поведение, которое может говорить о нарушении безопасности.  
Таким образом, системы визуализации имеют широкий спектр применения, и их оптимизация для поддержания работы в режиме реального времени становятся как никогда актуальной.  
Наиболее актуальным и оптимальным средством для реализации подобных задач является язык Python [3] и его модули.  
Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности труда разработчика и читаемости кода. Синтаксис ядра Python минимален. В то же время стандартная библиотека включает в себя большой объём полезных функций. 
Модуль в языке Python – файл, куда помещены классы, функции или данные, позволяющий использовать их в других программах. 
В языке Python существует несколько библиотек для работы с данными, автоматизирующие работу на GPU, однако для работы с этими средствами требуется наличие большого опыта работы на языке Python, а также знание этих библиотек. 
Аналогов среди средств для упрощённой работы с событиями безопасности на GPU, имеющих комбинированный набор всех необходимых функций, нет, либо они имеют крайне ограниченное использование. Поэтому возникла потребность в создании проблемно-ориентированного языка, позволяющего разработчику удобно работать с этими средствами. 
Обзор реализованных решений 
Существует множество систем визуализации событий безопасности, которые можно кластеризовать по способу отображения данных, источнику данных, а также по направленности их работы. 
По способу отображения данных выделяют: 
1. Глиф, 
2. Трехмерный узел связи, 
3. Узел связи, 
4. Точечный график, 
5. Радиальная панель, 
6. Flying term, 
7. ID карта, 
8. Цветовая карта, 
9. Трехмерный точечный график, 
10. Параллельные координаты, 
11. Древовидная структура (Treemap), 
12. Гистограмма. 
Более подробное описание всех систем, способ и анализ их работы можно посмотреть в статье [4]. В данной работе рассмотрим только некоторые системы. 
1. Программное обеспечение Cube of Doom [5] разработано описано 
исследователем Стивеном Лау. The Spinning Cube of Potential Doom (см. Рисунок 1) представляет собой анимированное визуальное отображение сетевого трафика, собранного с помощью Bro Intrusion Detection System (сейчас Zeek) [6]. Она была разработана Верном Паксоном из Национальной лаборатории Лоуренса Беркли и Центра интернет-исследований Международного института компьютерных наук в Беркли, Калифорния. Система отслеживает сетевые ссылки, выискивая трафик, который потенциально нарушает правила доступа и использования сайта. Куб отображает общий уровень вредоносного трафика таким образом, который легко понять даже тем, кто не имеет опыта в области компьютерной безопасности и сетевых технологий. Куб использует способность Bro регистрировать все попытки и случаи завершенных TCP-соединений, отображая информацию в трехмерном 3D-кубе, который пользователь вращает по своему желанию. Каждая ось представляет отдельный компонент TCPсоединения:  
X - локальное пространство IP-адресов;  
Z - глобальное пространство IP-адресов; 
Y - номера портов, используемые в соединениях для поиска служб и координации связи (например, 22 для SSH и 80 для HTTP).
Рисунок 1. The Spinning Cube of Potential Doom 
Соединения TCP отображаются в виде отдельных точек для каждого соединения. Успешные TCP-соединения отображаются белыми точками. Неполные TCP-соединения отображаются цветными точками. Неполные соединения – это попытки установить связь с несуществующими системами или системами, которые больше не прослушивают этот конкретный номер порта. Куб окрашивает неполные соединения, используя цветовую карту радуги, цвет которой зависит от номера порта; цветовое отображение помогает зрителям определить местоположение точки в трехмерном пространстве. Практически все цветные точки можно считать вредоносным трафиком, который ищет потенциально уязвимые системы. Большое число, наблюдаемое в нижней части диапазона портов (от 0 до 1024), представляет собой попытки найти хорошо известные службы (такие как HTTP и SSH). 
Данное ПО достаточно наглядно отображает события безопасности, в нем можно легко замечать зависимости и вероятные атаки, однако оно не обладает достаточной гибкостью. В нем нет возможности отобразить другие состояния, кроме описываемых. Также нет возможности более подробно рассмотреть конкретное соединение. 
2. Программное обеспечение NVision IP [7; 8] представляет собой IP-сеть на одной матричной сетке 256×256, каждая ячейка которой представляет взаимодействия между соответствующими сетевыми хостами. В представлении пространства системы все подсети перечислены вдоль горизонтальной оси, в то время как хосты каждой подсети перечислены вдоль вертикальной оси. По мере увеличения количества визуализируемых элементов неизбежно уменьшается часть экрана, выделяемая для каждого объекта. NVision IP использует функцию увеличителя, позволяющую пользователю наводить курсор на экран дисплея. Если аналитика интересует определенная часть дисплея, она может выбрать ее с помощью функции увеличителя. Затем для каждого хоста отображается гистограмма, отображающая их активность по общим и необычным номерам портов.   
Рисунок 2. NVision IP 
Функция увеличителя является удобным инструментом для точечного взаимодействия с данными. Двухмерные гистограммы являются удобным показателем взаимодействия величин в рамках двух характеристик. Однако данная система неудобна для анализа того, что происходит с системой в режиме реального времени. 
3. Программное обеспечение VISUAL [9] является частью архитектуры “Network Eye” визуализации безопасности, разработанной Департаментом компьютерной безопасности Политехнического института Вирджинии и государственного университета. VISUAL отображает сетевые события графически, в режиме реального времени. Он отображает сети с домашними хостами до 2500 соединений и внешними хостами – до 10 000. Система показывает относительную активность хостов, отображает их в постоянном положении и показывает используемые порты и протоколы.  
Тип данных, которые мы хотим визуализировать, поступает из инструментов сетевого мониторинга, таких как TCPDump [10] или Ethereal [11]: пакеты связи, отправляемые между компьютерами. Данные пакета включают в себя: IP-адрес источника и назначения, порт источника и назначения (для TCP/UDP), протокол и время наблюдения. Пользователь может видеть, какие домашние хосты получили подключения от большого количества внешних хостов (разветвление) и какие внешние хосты взаимодействуют с большим количеством внутренних хостов (разветвление). Хотя существует множество способов обнаружения этих явлений, исследователи показали, что конкретная визуализация позволяет даже неподготовленным пользователям обнаруживать эти закономерности. Кроме того, схемы связи видны в контексте общего состояния сети. Визуализация этой программы также показывает относительное количество активности среди внешних хостов путем изменения размеров их маркеров. 
Система VISUAL является системой внешнего\внутреннего мониторинга. 
Визуализации этого класса связаны с взаимодействием внутренних хостов по отношению к внешним IP-адресам. Этот класс визуализации включает отображение внутренних хостов в отношении обмена внешними IP-адресами. Поскольку искусство отображения внутренних хостов само по себе является сложным действием, добавление бремени отображения сотен и тысяч внешних IP-адресов является нетривиальным процессом для систем этого класса. 
VISUAL – одна из самых ранних систем этого класса. Это система визуализации безопасности, предназначенная для того, чтобы аналитик мог видеть схемы связи между внутренней сетью в отношении внешних источников. Как показано на Рис. 3, внутренняя сеть представлена сеткой, в каждой ячейке которой изображен один из внутренних хостов. Внешние источники представлены в виде квадратов за пределами внутренней сетки с размером квадрата, обозначающим уровень активности. Простые прямые линии используются для представления соединения между внутренним и внешним хостами. Для фильтрации внутренних или внешних хостов, что приводит к менее загроможденному дисплею, можно использовать несколько механизмов фильтрации. По запросу пользователя также может быть отображена различная подробная информация о хосте.  
Рисунок 3. VISUAL 
Таким образом, в данной системе есть множество возможностей, но она обладает такими недостатками как: отсутствие наглядности при работе с большим числом внешних событий и также сложности оптимизации ввиду работы с большим кол-вом данных. 
Способы визуализации данных в разных программах имеют свои собственные методы и синтаксис, не всегда интуитивно понятный конечному пользователю. В разных языках функции, выполняющие один и тот же функционал, могут иметь различное написание и порядок употребления параметров. В средствах визуализации не используются сложно-
визуализируемые, но более наглядные демонстрации и, следовательно, в них не учитывается распараллеливание и работа с GPU. 
Для решения возникших проблем предлагается разработать свой проблемно-ориентированный язык [12] и соответствующее ему транслирующее средство [13]. 
Постановка задачи 
• Разработать свой проблемно-ориентированный язык [12] и соответствующее ему транслирующее средство [13]. 
• Разработать интерфейс соответствующей системы визуализации, учитывающий достоинства и недостатки других схожих систем. 
Формальное описание проблемно-ориентированного языка 
Пусть есть файл с логами .log. Необходимо считать данные из файла и проанализировать их. После этого система визуализации должна в нужном формате выводить определенную информацию. 
Формальное описание предлагаемого проблемно-ориентирована языка, имеющего схожий синтаксис с языком Python, описывающий объекты и команды обработчика данных, представлено ниже: 
Рисунок 4. Формальное описание проблемно-ориентированного языка 
Пример кода на разработанном языке 
В качестве примера рассмотрим создание нового объекта системы визуализации, с несколькими введенными текстами и курсорами и последующий вывод обработанной информации: 
Рисунок 5. Пример работы с языком 
Данный пример описывает следующее: 
- Импортируются данные из файла 
- Создается оболочка для графика, готовая использовать GPU 
- Устанавливается слежение за пользователем с указанным IP адресом на действия, вызывающие ошибку 400 или 404 
Данный модуль разработан для интегрированного использования с языком Python. Это означает, что на компьютере необходимо наличие интерпретатора Python и предложенного модуля, для работы с текстовым редактором.  
Также данное транслирующее средство также включает в себя встроенный диагностический аппарат, показывающий ошибки в коде в виде исключений. 
Примеры работы программного обеспечения 
Рассмотрим пример с использованием разработанного программного обеспечения. Ниже представлен код на разработанном программно-ориентированном языке. 
Рисунок 6. Пример работы языка  
Результат выполнения представлен на рис. 7.  
Рисунок 7. Результат выполнения визуализации 
В данном примере создается отбор и фокусировка на пользователях с указанными ip адресами и вызывающих указанные ошибки. Из данного графика хорошо видно, что пользователи совершили много попыток входа за короткий промежуток времени, что позволяет допускать, что данные пользователи взломботы. 
Из приведенного примера видно, что использование данного программного продукта является интуитивно понятным обычному пользователю, что позволяет значительно более просто работать и автоматизировать обработку текстовой информации. Любую ось графика можно легко заменить на любую другую информацию. Также система визуализации делает представление данных максимально наглядным, тк программа позволяет выбирать цвета для точек и автоматически старается подобрать комплиментарный цвет фона для максимальной читабельности.  
Ниже (Рис. 8, 9) представлен еще пример работы программного продукта, демонстрирующий работоспособность системы. 
Рисунок 8. Пример работы языка 
Рисунок 9. Результат выполнения программы 
В данном примере из множества всех событий из разных лог-файлов, создается фокусировка на пользователях с указанным IP и использующих информационный ресурс посредством 'Windows NT 6.1'. Желтыми точками подсвечивается пересечение множеств выбранных событий. Белые точки – другие устройства, используемые пользователями с данным IP. 
Таким образом, выше были рассмотрены примеры с разными визуализации, в каждом из них был получен корректный результат в виде наглядного представления о состоянии системы. 
В результате проведённой работы были разработаны проблемно-ориентированный язык программирования и специализированное интерпретирующее средство, соответствующее данному языку, базирующееся на языке Python. В него заложен необходимый функционал, требуемый для использования GPU и визуализации, а также присутствует возможность и дальше расширять функционал представленного программного продукта.