Правила парсинга
22 августа 2024
ID 175163
Правила парсинга задаются для пользовательских потоков данных об угрозах (потоков данных об угрозах, определенных с помощью элемента Path
). Эти параметры определяют, как должен выполняться парсинг каждого потока данных об угрозах в Feed Utility.
Правила парсинга определяются в элементе Parsing
правил пользовательского потока данных об угрозах.
Ниже приведен пример правил парсинга для пользовательского потока данных об угрозах. Эти правила указывают, что входной поток данных об угрозах имеет формат JSON. Правило парсинга MD5 определяется для поля files/md5
во входном потоке данных об угрозах. Значения в этом поле проходят парсинг как хеши MD5.
<Feed> ... <Parsing type="json"> <MD5 type="MD5">files/MD5</MD5> </Parsing> ... <Feed> |
Элемент «Parsing»
Родительский элемент Parsing
содержит все вложенные правила парсинга. Его атрибуты определяют формат входных данных.
У этого элемента есть следующие атрибуты:
type
Задает тип входного потока данных об угрозах.
Этот атрибут может иметь следующие значения:
json
,csv
,xml
,misp
,stix
,stix2
,pdf
,messageBody
,messageAttach
.Feed Utility поддерживает STIX версий 1.0, 1.1, 2.0 и 2.1. Конкретная версия STIX определяется автоматически.
Файл, добавленный в каталог потока данных об угрозах pdf, не обрабатывается, если этот файл создан раньше или одновременно с последним созданным файлом, который уже был обработан.
delimiter
Задает разделитель для входных потоков данных об угрозах CSV. По умолчанию используется точка с запятой («
;
»).rootElement
Задает путь к корневому элементу для входных потоков данных об угрозах XML и JSON.
- Входные потоки данных об угрозах в формате XML
Подстановочные знаки «
*
» и «?
» можно использовать вместо любого другого символа или группы символов. Подстановочный знак «*» используется для группы символов. Подстановочный знак «?
» используется для одиночного символа.Части пути
rootElement
нельзя указывать только с помощью подстановочных знаков. Например, запись«Feeds/*/Contents»
некорректна. - Входные потоки данных об угрозах в формате JSON
Значение корневого элемента можно указать с любым уровнем вложенности. Пределы уровня вложенности задаются с помощью символа «
/
».Параметр «Root element» может быть пустым. Если он не пустой, значение корневого элемента не должно содержать пустых уровней вложенности (подстрока «
//
»), а также не должно начинаться или заканчиваться символом «/
».В корневом элементе для потоков данных об угрозах JSON нельзя использовать подстановочные знаки.
- Входные потоки данных об угрозах в формате XML
В следующем примере демонстрируется использование элемента Parsing
для входного потока данных об угрозах в формате XML. В этом случае правила парсинга применяются к элементам, вложенным в элемент Feeds > Example > Contents
.
<Feed> ... <Parsing type="xml" rootElement="Feeds/Example/Contents"> ... </Parsing> ... <Feed> |
Индивидуальные правила парсинга
Правила парсинга для отдельных полей входного потока данных об угрозах должны быть вложены в элемент Parsing
. Когда Feed Utility обрабатывает входной поток данных об угрозах, поля выходного потока данных об угрозах создаются в соответствии с этими правилами.
Каждое правило имеет следующий формат:
<%OUTPUT_NAME% type="%VALUE_TYPE%">%INPUT_NAME%</%OUTPUT_NAME%>
Выше используются следующие элементы имени правила:
- %OUTPUT_NAME% определяет имя поля в выходном потоке данных об угрозах. Например, если %OUTPUT_NAME% — это «MD5», поле с этим значением в выходном потоке данных об угрозах также будет называться MD5.
%OUTPUT_NAME% сохраняет вложенные поля. Если поле, указанное в %INPUT_NAME%, является вложенным, поле в выходном потоке данных об угрозах также будет вложенным. Например, если %OUTPUT_NAME% — это «MD5_HASH», а %INPUT_NAME% — это «files/md5», то поле в выходном потоке данных об угрозах будет называться «files/MD5_HASH».
В случае входного потока данных об угрозах в формате JSON в %OUTPUT_NAME% всегда должно использоваться значение
Field
. Feed Utility использует имена полей из исходного потока данных об угрозах. - %VALUE_TYPE% — это тип значений, хранящихся в этом поле.
Feed Utility будет обрабатывать эти значения в соответствии с указанным типом. Например, если выходной поток данных об угрозах содержит доменные имена и URL, он будет скомпилирован в двоичный формат.
Возможны следующие типы значений:
url
– тип значения, используемый для URL.ip
– тип значения, используемый для IP-адресов.md5
– тип значения, используемый для хешей MD5.sha1
– тип значения, используемый для хешей SHA1.sha256
– тип значения, используемый для хешей SHA256.domain
– тип значения, используемый для доменных имен.context
– тип значения, используемый для контекстной информации.
- %INPUT_NAME% — имя поля во входном потоке данных об угрозах. Оно должно быть определено в соответствии с форматом входного потока данных об угрозах:
- Для входных потоков данных об угрозах в формате JSON значение %INPUT_NAME% должно содержать имя поля из входного потока данных об угрозах. Вложенные поля разделяются символом «
/
». - Для входных потоков данных об угрозах в формате CSV значение %INPUT_NAME% должно содержать номер столбца.
- Для входных потоков данных об угрозах в формате XML значение %INPUT_NAME% должно содержать путь к одному из вложенных элементов корневого элемента. Корневой элемент определяется в атрибуте
rootElement
элементаParsing
. Путь чувствителен к регистру. - Для входных потоков данных об угрозах STIX и MISP элемент
Parsing
не должен содержать правил парсинга.
- Для входных потоков данных об угрозах в формате JSON значение %INPUT_NAME% должно содержать имя поля из входного потока данных об угрозах. Вложенные поля разделяются символом «
В следующем примере демонстрируется синтаксис правила парсинга для входного формата JSON:
<Feed> ... <Parsing type="json"> <Field type="url">URL</Field> <Field type="ip">IP</Field> <Field type="context">GEO</Field> <Field type="md5">files/md5</Field> </Parsing> ... <Feed> |
В следующем примере демонстрируется синтаксис правила парсинга для входного формата CSV:
<Feed> ... <Parsing type="csv" delimiter=";"> <url type="url">1</url> <IP type="ip">2</IP> <GEO type="context">3</GEO> <MD5 type="md5">4</MD5> </Parsing> ... <Feed> |
В следующем примере демонстрируется синтаксис правила парсинга для входного формата XML:
<Feed> ... <Parsing type="xml" rootElement="Feeds/Example/Contents"> <URL type="url">url</URL> <IP type="ip">ip</IP> <GEO type="context">context</GEO> <MD5 type="md5">md5_hash</MD5> </Parsing> ... <Feed> |
Правила парсинга для потоков данных об угрозах типа «электронная почта»
Чтобы задать правила парсинга для стороннего потока данных об угрозах, укажите следующие значения для атрибута type
:
messageBody
– правила парсинга тела сообщения электронной почты.Это значение применимо, если в элементе
Path
включены протоколы POP3 или IMAP.messageAttach
– правила парсинга вложения электронной почты.Это значение применимо, если в элементе
Path
включены протоколы POP3 или IMAP.
Парсинг тела сообщения (для потоков данных об угрозах типа «электронная почта»)
Feed Utility анализирует тело сообщения электронной почты, загруженного с почтового сервера, если в атрибуте type
элемента Parsing
задано значение messageBody
.
Для парсинга тела сообщения используются регулярные выражения, указанные в элементе Parsing
.
Для парсинга тела сообщения можно задать одно или несколько правил с регулярными выражениями.
Каждое правило имеет следующий вид:
<%FIELD_NAME% type="%FIELD_TYPE%">%REG_EXP%</%FIELD_NAME%>,
где:
%FIELD_NAME% определяет имя поля в выходном потоке данных об угрозах. Например, если %FIELD_NAME% — это «MD5», поле с этим значением в выходном потоке данных об угрозах также будет называться MD5.
%FIELD_TYPE% — тип индикатора.
%REG_EXP% — регулярное выражение.
Каждое регулярное выражение применяется ко всему телу сообщения.
Поток данных об угрозах формируется в соответствии с содержанием загруженных сообщений электронной почты. Формирование потока данных об угрозах удовлетворяет следующим условиям:
- Значения всех загруженных сообщений электронной почты отражаются в одном итоговом потоке данных об угрозах.
Feed Utility сохраняет дату последнего обновления потока данных об угрозах. В случае обращения к почтовому серверу, парсинг применяется только к сообщениям электронной почты, полученным после предыдущего обновления потока данных об угрозах.
- Каждая запись итогового потока данных об угрозах содержит следующие поля:
message_from
– адрес электронной почты отправителя сообщения.message_subject
– тема сообщения электронной почты.message_date
– дата получения сообщения электронной почты почтовым сервером.
- Каждая запись итогового потока данных об угрозах содержит только один индикатор, полученный в соответствии с одним регулярным выражением со значением атрибута
type
, отличным от CONTEXT. - Каждое значение из сообщения электронной почты отражается в каждой записи итогового потока данных об угрозах, если это значение получено в соответствии с регулярным выражением, атрибут
type
которого имеет значение CONTEXT.Значения указываются в записях итогового потока данных об угрозах, которые содержат индикаторы (IP/HASH/URL) из того же сообщения электронной почты.
Если для одного регулярного выражения получено более одного значения (с атрибутом type, имеющим значение CONTEXT), эти значения указываются в одной записи итогового потока данных об угрозах. Значения разделяются последовательностью символов «
;
». - Поток данных об угрозах не будет содержать значения, соответствующие критериям правил, указанных в разделе
Excluded
(см. раздел «Исключенный элемент для потоков данных об угрозах типов „PDF“ и „электронная почта“» ниже).
Парсинг вложений сообщения (для потоков данных об угрозах типа «электронная почта»)
Feed Utility анализирует вложения сообщения электронной почты, загруженного с почтового сервера, если в атрибуте type элемента Parsing
задано значение messageAttach
.
Можно установить одно или несколько правил для типов вложенных файлов.
Каждое правило имеет следующий вид:
<Attach type="%ATTACH_TYPE%"></Attach>
,
где:
%ATTACH_TYPE% — тип вложения.
%ATTACH_TYPE% может иметь следующие значения:
csv
json
xml
stix
stix2
pdf
Элемент Attach
имеет хотя бы одно значение.
Можно задать одно или несколько правил с регулярными выражениями.
Каждое правило имеет следующий вид:
<%FIELD_NAME% type="%FIELD_TYPE%">%REG_EXP%</%FIELD_NAME%>
,
где:
%FIELD_NAME% определяет имя поля в выходном потоке данных об угрозах. Например, если %FIELD_NAME% — это «MD5», поле с этим значением в выходном потоке данных об угрозах также будет называться MD5.
%REG_EXP% — регулярное выражение.
%FIELD_TYPE% — тип индикатора. Для элемента %FIELD_TYPE% в атрибуте type
необходимо указать одно из следующих значений:
- ip
- md5
- sha256
- sha1
- url
- context
В следующем примере демонстрируется правило парсинга вложения сообщения:
<Attach type="pdf"> <hash1 type="md5">([\da-fA-F]{32})</hash1> <hash2 type="sha1">([\da-fA-F]{40})</hash2> </Attach> |
Утилита Feed выполняет парсинг файлов со следующими расширениями:
Значение атрибута | Расширения файлов |
csv | csv и txt |
json | json |
xml | xml |
stix1 | xml |
stix2 | json |
Если правила парсинга заданы одновременно для stix1 и xml (или stix2 и json), Feed Utility выполняет следующие действия:
- Пытается подвергнуть прикрепленный файл парсингу как stix (с расширением xml/json).
- Если при парсинге не возникло ошибок и файл является корректным потоком данных об угрозах stix, парсинг этого файла в соответствии с правилами парсинга xml/json-вложений, указанными в настройках потока данных об угрозах, не выполняется.
- Если во время парсинга произошла ошибка (файл не является корректным потоком данных об угрозах stix), этот файл подвергается парсингу в соответствии с правилами парсинга xml/json-вложений, указанными в настройках потока данных об угрозах.
Если в сообщении электронной почты содержится несколько вложений, информация из каждого вложения попадает в один итоговый поток данных об угрозах.
Поток данных об угрозах формируется в соответствии с содержанием загруженных сообщений электронной почты. Формирование потока данных об угрозах удовлетворяет следующим условиям:
- Значения всех загруженных вложений электронной почты отображаются в одном итоговом потоке данных об угрозах.
Feed Utility сохраняет дату последнего обновления потока данных об угрозах. В случае обращения к почтовому серверу, парсинг применяется только к сообщениям электронной почты, полученным после предыдущего обновления потока данных об угрозах.
- Каждая запись итогового потока данных об угрозах содержит следующие поля:
message_from
– адрес электронной почты отправителя сообщения.message_subject
– тема сообщения электронной почты.message_date
– дата получения сообщения электронной почты почтовым сервером.attach_name
– имя вложения.
- Каждая запись итогового потока данных об угрозах содержит только один индикатор, полученный в соответствии с одним регулярным выражением со значением атрибута
type
, отличным от CONTEXT. - Каждое значение из вложения в сообщение электронной почты отражается в каждой записи итогового потока данных об угрозах, если это значение получено в соответствии с регулярным выражением, атрибут
type
которого имеет значение CONTEXT.Значения указываются в записях итогового потока данных об угрозах, которые содержат индикаторы (IP/HASH/URL) из того же вложения электронной почты.
Если для одного регулярного выражения получено более одного значения (с атрибутом type, имеющим значение CONTEXT), эти значения указываются в одной записи итогового потока данных об угрозах. Значения разделяются последовательностью символов «
;
». - Поток данных об угрозах не будет содержать значения, соответствующие критериям правил, указанных в разделе
Excluded
(см. раздел «Исключенный элемент для потоков данных об угрозах типов „PDF“ и „электронная почта“» ниже).
Исключенный элемент для потоков данных об угрозах типов «PDF» и «электронная почта»
Если значение pdf, messageBody
или messageAttach
указано в атрибуте type
элемента Parsing
, элемент Feed
может содержать раздел Excluded
и один или несколько вложенных элементов <Item/> с правилами исключения индикаторов для итогового потока данных об угрозах.
Раздел Excluded
имеет следующий вид:
<Excluded> <Item>{RegExp}</Item> ... </Excluded> |
Где {RegExp}
— регулярное выражение.
Элементы Excluded
и Item
не являются обязательными.
В следующем примере демонстрируются правила исключения:
<Excluded> <Item>(\w{3}\s+\d+\s+[\d\:]+)\s</Item> <Item>(https:\/\/badurl\.com)</Item> </Excluded> |