Справочник по конфигурации атак
В этом документе описан формат YAML, поддерживаемый фреймворком атак в opencda/core/attack/adversary_framework.
Каждый файл конфигурации атаки должен содержать один объект attack верхнего уровня.
Пример
attack:
name: aim_client_request_speed_spoofing
requirements:
all:
- source:
kind: snapshot
node_type: rsu
service_type: aim_server
verb: exists
- source:
kind: snapshot
node_type: vehicle
service_type: aim_client
verb: exists
start_trigger:
source:
kind: snapshot
node_type: rsu
service_type: aim_server
field: tracked_vehicle_count
verb: increased
value: 1
stop_trigger:
source:
kind: snapshot
node_type: rsu
service_type: aim_server
field: tracked_vehicle_count
verb: eq
value: 0
targets:
kind: service_state_field
source:
kind: snapshot
node_type: rsu
service_type: aim_server
field: tracked_vehicle_ids
resolve_to:
node_type: vehicle
service_type: aim_client
selection: all
stages:
- id: spoof_aim_client_requests
type: spoofer
capabilities:
- request.submit
params:
rewrites:
- path: payload.speed
operation: add
value: 5.0
- path: payload.yaw
operation: add
value: 10.0
stage_stop_trigger:
source:
kind: snapshot
node_type: rsu
service_type: aim_server
field: tracked_vehicle_count
verb: eq
value: 0
Поля атаки верхнего уровня
attack.name
Тип: string | Обязательно: даНазначение: уникальное имя атаки во время выполнения.attack.requirements
Тип: ConditionSpec | Обязательно: нетНазначение: предварительные условия, которые должны быть выполнены до запуска атаки.По умолчанию: если поле не указано, требования считаются выполненными.attack.start_trigger
Тип: ConditionSpec | Обязательно: фактически даНазначение: условие запуска атаки.По умолчанию: если поле не указано, атака никогда не начинается.attack.stop_trigger
Тип: ConditionSpec | Обязательно: нетНазначение: условие, останавливающее активную атаку до выполнения этапа в текущем такте.По умолчанию: если поле не указано, триггер остановки уровня атаки отсутствует.attack.targets
Тип: TargetSpec | Обязательно: обычно даНазначение: описывает способ разрешения активных целевых сервисов из текущего снимка.По умолчанию: если поле не указано, целевые сервисы не разрешаются.attack.stages
Тип: list[StageSpec] | Обязательно: нетНазначение: упорядоченный список этапов атаки.По умолчанию: пустой список.Спецификация условия
Условия используются в:
attack.requirementsattack.start_triggerattack.stop_triggerstage.requirementsstage.stage_start_triggerstage.stage_stop_trigger
Условие может представлять собой:
конечный предикат,
группа
all,группа
any.
Пример конечного предиката
source:
kind: snapshot
node_type: rsu
service_type: aim_server
field: tracked_vehicle_count
verb: increased
value: 1
Пример группы условий
all:
- source:
kind: snapshot
node_type: rsu
service_type: aim_server
verb: exists
- any:
- source:
kind: snapshot
node_type: vehicle
service_type: aim_client
verb: exists
- source:
kind: snapshot
node_type: vehicle
service_type: movement_controller
verb: exists
Правила
Условие должно определять либо конечный предикат, либо
all, либоany.allиanyне могут одновременно находиться на одном уровне.Поддерживаются вложенные группы условий.
Поля источника
Каждый конечный предикат содержит объект source.
source.kind
Тип: string | Обязательно: даПоддерживаемые значения: snapshot, attack, stageИсточники снимка
Источники снимка считывают значения из текущего или предыдущего SimulationSnapshot.
Пример:
source:
kind: snapshot
node_type: rsu
node_id: rsu-1
service_type: aim_server
field: tracked_vehicle_count
source.node_type
Тип: string | Обязательно: нетПоддерживаемые значения: vehicle, rsuНазначение: ограничивает соответствующие узлы по типу.По умолчанию: если поле не указано, поиск выполняется по узлам транспортных средств и RSU.source.node_id
Тип: string | Обязательно: нетНазначение: ограничивает соответствующие узлы точным ID узла.source.service_type
Тип: string | Обязательно: нетНазначение: считывает данные из состояния одного сервиса поведения.source.field
Тип: string | Обязательно: нетНазначение: поле для чтения из соответствующего объекта.Примечания:
Если
service_typeзадан,fieldсчитывается из карты состояния этого сервиса.Если
service_typeне указан,fieldсчитывается из соответствующегоNodeSnapshot.Если
fieldне указано, используется весь соответствующий объект.Текущие поля снимка уровня узла:
node_id,node_typeиservice_states.
Источники атаки
Источники атаки считывают поля времени выполнения из текущего экземпляра атаки.
Пример:
source:
kind: attack
attack_name: aim_client_response_sniffer
field: status
source.attack_name
Тип: string | Обязательно: нетНазначение: ограничивает условие указанным именем атаки.По умолчанию: если поле не указано, используется текущая атака.source.field
Тип: string | Обязательно: обычно даСтабильное поддерживаемое значение: statusИсточники этапа
Источники этапа считывают поля времени выполнения из одного или нескольких этапов текущей атаки.
Пример:
source:
kind: stage
attack_name: aim_client_response_sniffer
stage_id: sniff_aim_client_responses
field: status
source.attack_name
Тип: string | Обязательно: нетНазначение: ограничивает условие указанным именем атаки.source.stage_id
Тип: string | Обязательно: нетНазначение: ограничивает условие одним настроенным ID этапа.По умолчанию: если поле не указано, учитываются все этапы текущей атаки.source.field
Тип: string | Обязательно: обычно даСтабильное поддерживаемое значение: statusПоддерживаемые операторы
Операторы снимка
Для source.kind: snapshot поддерживаются следующие операторы:
existseqgtgteltltechangedincreaseddecreasedbecameaddedremoved
Примечания:
increasedиdecreasedсравнивают текущий снимок с предыдущим тактом.addedиremovedпредназначены для значений, подобных коллекциям.
Операторы среды выполнения
Для source.kind: attack и source.kind: stage поддерживаются следующие операторы:
existseqgtgteltltechangedbecameincreaseddecreased
Примечания:
addedиremovedне поддерживаются для источников времени выполнения.Если
valueне указано,increasedиdecreasedиспользуют дельту1.
Поле value
value
Тип: any | Обязательно: зависит от оператораНазначение: целевое значение сравнения или параметр дельты.Типовое использование:
eq,gt,gte,lt,lte: необходимо указатьvalue.increased,decreased:value- минимальная дельта.became:value- новое значение, которое должно появиться в текущем такте.added,removed:value- конкретный элемент коллекции.
Спецификация цели
Цели описывают способ разрешения активных экземпляров сервисов поведения для атаки.
Пример:
targets:
kind: service_state_field
source:
kind: snapshot
node_type: rsu
service_type: aim_server
field: tracked_vehicle_ids
resolve_to:
node_type: vehicle
service_type: aim_client
selection: first
targets.kind
Тип: string | Обязательно: даТекущее поддерживаемое значение: service_state_fieldtargets.source
Тип: TriggerSourceSpec | Обязательно: даНазначение: источник снимка, значение которого должно разрешаться в один ID узла или коллекцию ID узлов.targets.resolve_to
Тип: object | Обязательно: даНазначение: описывает активные сервисы, разрешаемые для каждого ID целевого узла.targets.resolve_to.node_type
Тип: string | Обязательно: даОжидаемые значения: vehicle, rsuНазначение: информационная подсказка типа, используемая диагностикой и журналированием доступности.targets.resolve_to.service_type
Тип: string | Обязательно: нетНазначение: необязательный фильтр сервисов, передаваемый средству разрешения сервисов времени выполнения.По умолчанию: если поле не указано, возвращаются все сервисы поведения каждого разрешённого узла.targets.selection
Тип: string | Обязательно: нетПоддерживаемые значения: all, firstПо умолчанию: allПримечания:
Разрешение целей
service_state_fieldнормализует значение источника в множество ID узлов.Скалярная строка преобразуется в один ID целевого узла.
Кортеж, список, множество или frozenset добавляет каждый содержащийся в нём строковый элемент.
Спецификация этапа
Каждый элемент attack.stages описывает один этап упорядоченного конвейера времени выполнения.
Пример:
stages:
- id: spoof_selected_aim_client_position
type: spoofer
capabilities:
- request.submit
params:
rewrites:
- path: payload.position.x
operation: add
value: -20.0
requirements: ...
stage_start_trigger: ...
stage_stop_trigger: ...
stage.id
Тип: string | Обязательно: даНазначение: уникальный ID этапа внутри атаки.Примечания: повторяющиеся ID отклоняются.stage.type
Тип: string | Обязательно: даТекущие встроенные значения: sniffer, dropper, replayer, spooferstage.capabilities
Тип: list[string] | Обязательно: нетНазначение: явно заданный набор возможностей для сопоставления целевых сервисов.По умолчанию: если поле не указано, используются встроенные возможности этапа по умолчанию.Текущий словарь возможностей:
request.observerequest.submitresponse.observeresponse.submitcommand.submitstate.observe
stage.params
Тип: mapping | Обязательно: нетНазначение: конфигурационная полезная нагрузка конкретного этапа.Параметры встроенных этапов:
sniffer: без параметровreplayer: без параметровdropper:drop_rate(float в диапазоне[0.0, 1.0], по умолчанию1.0), необязательныйseedspoofer: обязательная последовательностьrewrites
stage.requirements
Тип: ConditionSpec | Обязательно: нетНазначение: дополнительные предварительные условия только для этого этапа.По умолчанию: дополнительные требования уровня этапа отсутствуют.stage.stage_start_trigger
Тип: ConditionSpec | Обязательно: нетНазначение: явное условие запуска этого этапа.По умолчанию: первый этап начинается, когда атака становится активной. Каждый следующий этап начинается, когда предыдущий достигает состояния success.stage.stage_stop_trigger
Тип: ConditionSpec | Обязательно: нетНазначение: явное условие остановки активного этапа.По умолчанию: успешный execute() немедленно переводит этап в состояние success.Правила подмены Spoofer
Этапы spoofer используют params.rewrites. Каждое правило изменения должно содержать:
path: разделённый точками путь к полю, напримерpayload.position.xoperation:set,addилиmultiplyvalue: операнд выбранной операции
Пример:
params:
rewrites:
- path: src_owner_id
operation: set
value: cav-spoofed
- path: payload.speed
operation: add
value: 8.0
Значения состояния времени выполнения
При проверке field: status в условиях attack или stage используйте следующие значения:
inactiveactivesuccessfailstopped
Примечание:
Среда выполнения также использует внутреннее состояние
STARTED, но при вычислении условий оно нормализуется вactive.
Поведение среды выполнения по умолчанию
Значения атаки по умолчанию
Если
requirementsне указано, требования считаются выполненными.Если
start_triggerне указан, атака никогда не начинается.Если
stop_triggerне указан, триггер остановки уровня атаки отсутствует.Если
targetsне указано, целевые сервисы разрешить невозможно.
Значения этапа по умолчанию
Если
requirementsне указано, дополнительные требования уровня этапа отсутствуют.Если
stage_start_triggerне указан:первый этап начинается, когда атака активна,
последующие этапы начинаются после успешного завершения предыдущего.
Если
stage_stop_triggerне указан, успешныйexecute()немедленно переводит этап в состояниеsuccess.
Ошибка разрешения целей
Если срабатывает триггер начала атаки, но при разрешении целей не найдено сервисов, фреймворк сообщает о неуспешном выполнении атаки в текущем такте.