anomaly-forge
Гибридная система автоматической разметки и обнаружения аномалий для IEC 61850. Состоит из двух режимов: 1) генератор синтетических размеченных данных на основе формального DSL-синтаксиса GOOSE для обучения ИНС; 2) классификатор на основе ИНС, обучаемый на этих данных. Универсальные правила могут уточняться по реальной выборке.
Описание
Существующие IDS/IPS (например, Snort и Suricata) не анализируют семантику промышленных протоколов IEC 61850 (GOOSE, SV, MMS), поэтому не обнаруживают специализированные атаки на эти протоколы. Для обучения искусственных нейронных сетей (ИНС) требуется большой объём размеченных наборов данных, однако в промышленности такие наборы отсутствуют из-за конфиденциальности информации об объектах КИИ и невозможности моделирования атак для их сбора. Предлагаемое решение может автоматически размечать наборы данных, используя универсальные правила работы протокола GOOSE для обнаружения аномалий, либо генерировать синтетические размечённые данные для обучения и тестирования ИНС. Универсальные правила задаются формальным синтаксисом (декларативный DSL) и могут быть уточнены с использованием выборки данных, собранной на реальном объекте. Обученная ИНС может выявлять аномалии без необходимости переобучения или дообучения на конкретной цифровой подстанции.
Карточка модели
Общее описание
Модель предназначена для обнаружения семантических аномалий в промышленных протоколах IEC 61850 (GOOSE, SV, MMS), используемых в цифровых подстанциях электроэнергетики. Модель решает задачу автоматической разметки трафика и выявления аномалий без необходимости дообучения на конкретном объекте.
Практическая ценность: обнаружение специализированных атак на протоколы IEC 61850, которые не выявляются стандартными IDS/IPS (Snort, Suricata); автоматическая генерация размеченных датасетов для обучения нейросетевых моделей; снижение затрат на ручную разметку данных и моделирование атак.
Отрасль применения: Электроэнергетика (цифровые подстанции, объекты критической информационной инфраструктуры).
Тип компании: Энергетические компании, системные интеграторы, разработчики систем кибербезопасности для КИИ.
Архитектура и логика работы
Тип модели: Гибридная система на основе правил (DSL) с возможностью генерации синтетических данных для обучения нейронных сетей. Принцип обработки:
анализ правил разметки из файла DSL - правила описывают семантически корректные диапазоны значений для полей протоколов;
метод labeling() проверяет входные данные по правилам и возвращает битовую маску аномалий;
метод augmentating() генерирует синтетические размеченные данные для обучения ИНС.
Тип решаемой задачи: Классификация (бинарная — норма/аномалия) + генерация синтетических данных.
Функциональность:
Разметка (labeling) — проверяет входной вектор признаков по набору правил, возвращает список булевых значений (True — норма, False — аномалия) для каждого проверяемого параметра.
Аугментация (augment) — генерирует синтетический датасет с метками на основе базовых строк или случайных значений, с возможностью модификации признаков в соответствии с правилами.
Вход и выход
Входные данные
enpoint/labeling — принимает строку данных: первые два поля служебные (type — 0/learn или 1/test, label — пустая строка), остальные — числовые признаки, соответствующие заголовкам
endpoint /augment — принимает параметры: кол-во строк данных и, необязательно, данные для модификации
Выходные данные
enpoint/labeling возвращает JSON
{"predictions": [true, true, false, true], "labels_names": ["test1", "test2", "test3", "test4"]};
endpoint /augment возвращает JSON
{"headers": ["type", "label", "stnum", "sqnum", ..., "test1", "test2"], "rows": [[0, "", 155, 32, ..., 1.0, 0.0], ...]};
endpoint /health возвращает JSON
{"status": "ok", "input_headers": ["type", "label", "stnum", "sqnum", ...], "output_headers": ["test1", "test2", ...]}.
Описание файла правил DSL
Назначение: файл является конфигурационным файлом модели, определяющим структуру входных данных (имена и порядок полей в первой строке) и правила семантической валидации (логические условия для каждого проверяемого параметра протоколов IEC 61850).
Общая структура:
первая строка — <заголовок_1>\t<заголовок_2>\t...\t<заголовок_N>, затем строки правил в формате <имя_теста>\t|\t[<индекс>]:<тип_размера>\t<оператор>\t<значение>.
Виды правил:
CompareTest (сравнение) —
<testname> | [<column>]:<size> <operator> <value>(операторы: ==, <>, >, <, >=, <=; value: число, MIN, MAX, AVG, LAST, FIRST или ссылка на другой столбец);InSetTest (проверка вхождения) —
<testname> | [<column>]:<size> inset <values>(values: список значений через запятую, также LAST, FIRST, MIN, MAX, ANY);InRangeTest (проверка диапазона) —
<testname> | [<column>]:<size> inrange <left_bracket><min>..<max><right_bracket>(скобки: [] — включительно, () — исключительно, ][ — вне диапазона; min/max: число, LAST, FIRST, MIN, MAX);OnMapTest (проверка соответствия пар) —
<testname> | [<column1>]:<size> :: [<column2>] onmap <pairs>(pairs: список пар вида value1~value2, где значение может быть числом, , FIRST, LAST, MIN, MAX, ANY);ConditionalTest (условный тест) —
<testname> | <innertest> if <cond_test1> <cond_test2> ...(условный тест, выполняемый при истинности всех условий).
Технические требования
Минимальные аппаратные требования:
Процессор x86_64, 2 ядра, ОЗУ 1 GB, GPU не требуется;
Программное окружение:
Операционная система Linux (Ubuntu 20.04/22.04), Windows (WSL2), Docker; Python 3.9+; зависимости — bentoml>=1.0.0 (только для инференса).
Предпросмотр файлов
Файлы защищены автором