Подходы к обмену данными об угрозах находятся в активной фазе формирования и стандартизации. Сегодня есть пара значимых стандартов — MISP и STIX — и целая плеяда менее значимых, которые реже используются или считаются legacy/deprecated: MAEC, IODEF, OpenIOC (Cybox), CAPEC, VERIS и множество иных. При этом порядочное количество community-фидов до сих пор распространяется в виде txt или csv, а также в виде человекочитаемых аналитических сводок, бюллетеней и отчетов.
В статье я разберу более-менее общепринятые практики обмена данными о киберугрозах: специализированные стандарты и форматы общего назначения, предназначенные не только для обмена TI. Какие-то сугубо проприетарные, редкие и «собственные велосипеды» форматов рассматривать не буду. Также пока за бортом оставлю тематические блоги, новостные порталы, сообщества в мессенджерах и иные источники TI в человекочитаемых форматах. Сегодня фокус на машиночитаемых форматах.
Формат STIX
Начну со стандарта STIX, лично у меня к нему душа больше лежит. Стандарт довольно зрелый, так как прошел путь в девять лет от версии 1 до 2.1. Он имеет хорошие описательные характеристики: с его помощью можно очень детально описать угрозу, все ее взаимосвязи, технические артефакты, при этом результат будет пригоден как для анализа человеком, так и машиной. В стандарт заложены хорошие руководящие принципы, которые соблюдаются на протяжении всего развития STIX:
Выразительность
Гибкость
Расширяемость
Автоматизируемость
Читаемость
Над STIX идет активная работа, регулярно выпускаются новые редакции. Стандарт поддерживает организация OASIS, её комитет по cyber threat intelligence объединяет более 50 компаний, собаку съевших на работе с TI. Поэтому развитие стандарта — это путь обобщения лучших практик, ошибок и выводов, которые были сделаны опытными специалистами в этой области.
STIX является языком описания для обмена данными TI и вводит набор сущностей, а также определяет возможные типы взаимосвязей между ними. Стандарт довольно объемный, поэтому в этой статье я не буду погружаться во все его детали.
Согласно спецификации, STIX заявлен как serialize-agnostic, однако на практике чаще всего используется формат JSON, схемы находятся в публичном репозитории на GitHub. Транспорт для STIX тоже может быть любым, но OASIS позаботился и об этом: параллельно со STIX развивается стандарт для транспорта TAXII, который использует HTTPS как фундамент.
STIX описывает данные об угрозах как связный граф, где узлами являются SDO (STIX Domain Objects), а ребрами — SRO (STIX Relationship objects).
В качестве SDO STIX определяет следующие сущности:
Схема атаки (Attack pattern) — описывает подход (TTP), который использовал злоумышленник для взлома своей цели. Эта сущность используется для классификации атак, обобщения конкретных атак в соответствии со схемами, которым они следуют, и предоставления подробной информации о том, как атаки выполняются.
Вредоносная кампания (Campaign) — описывает последовательность вредоносных поведенческих признаков, которые возникают на протяжении определенных промежутков времени.
План действий (Course of action) — описывает меры, которые нужно принять, чтобы избежать или противостоять атаке.
Личность (Identity) — описывает персоны, организации либо их группы.
Индикатор (Indicator) — описывает технические вредоносные артефакты, которые могут быть использованы для обнаружения вредоносной активности (например, IP-адреса, домены, хеши, ключи реестра).
Intrusion set — описывает набор поведенческих признаков и ресурсов с общими свойствами, которые, вероятней всего, подконтрольны одной организации. Ключевое отличие от Campaign в том, что последняя обычно представляет собой вредоносную активность, направленную на конкретную цель и длится в течение ограниченного промежутка времени, тогда как Intrusion set длится продолжительное время, может участвовать в нескольких Campaigns и иметь несколько целей.
Вредоносное ПО (Malware) — описывает экземпляры вредоносного ПО.
Объект наблюдения (Observed data) — описывает не вредоносные технические артефакты.
Отчет (Report) — описывает в понятном виде какую-либо угрозу, вредоносную группировку, их TTP, жертв. Своего рода аналитическая сводка, позволяющая понять суть угрозы, ее опасность, вредоносное ПО, используемые техники, тактики и процедуры, применяемые атакующей стороной.
Злоумышленник (Threat actor) — описывает персон, группы или организации, которые действуют со злым умыслом. Если коротко, злоумышленники и хакеры. Именно злой умысел в мотивации этой сущности отличает ее от Identity.
Инструмент (Tool) — описывает легитимное ПО, которое может быть использовано для осуществления атак. Отличие этой сущности от Malware именно в том, что это легитимный софт, например, nmap или RDP, VNC.
Уязвимость (Vulnerability) — описывает недостатки/дырки в требованиях, логике, дизайне, реализации ПО или железа, которые могут быть проэксплуатированы и негативно повлиять на конфиденциальность, целостность или доступность системы.
Приведенные выше наборы сущностей и взаимосвязей позволяют описывать в понятном виде данные, которые могут использоваться машиной. Давайте посмотрим на паре примеров.
Пример №1
Здесь описывается индикатор компрометации http://x4z9arb.cn/4712/ типа URL и его связь (атрибуция) с вредоносным ПО x4z9arb backdoor. При этом явно видно, что индикатор — это сайт, на котором располагается вредоносный загрузчик (downloader), в данном случае вредонос x4z9arb backdoor.
Что это значит для аналитика? Все довольно просто: если мы обнаружим следы присутствия (индикатор компрометации http://x4z9arb.cn/4712/) в инфраструктуре компании, то можем сделать вывод, что имеем дело с вредоносным ПО x4z9arb backdoor. Дальнейшие шаги обычно зависят от вредоносности ПО, попавшего внутрь инфраструктуры. Для его анализа существует множество баз, например, Malpedia.
Пример STIX 2.1
{
"type": "bundle",
"id": "bundle--56be2a3b-1534-4bef-8fe9-602926274089",
"objects": [
{
"type": "indicator",
"spec_version": "2.1",
"id": "indicator--d81f86b9-975b-4c0b-875e-810c5ad45a4f",
"created": "2014-06-29T13:49:37.079Z",
"modified": "2014-06-29T13:49:37.079Z",
"name": "Malicious site hosting downloader",
"description": "This organized threat actor group operates to create profit from all types of crime.",
"indicator_types": [
"malicious-activity"
],
"pattern": "[url:value = 'http://x4z9arb.cn/4712/']",
"pattern_type": "stix",
"valid_from": "2014-06-29T13:49:37.079Z"
},
{
"type": "malware",
"spec_version": "2.1",
"id": "malware--162d917e-766f-4611-b5d6-652791454fca",
"created": "2014-06-30T09:15:17.182Z",
"modified": "2014-06-30T09:15:17.182Z",
"name": "x4z9arb backdoor",
"description": "This malware attempts to download remote files after establishing a foothold as a backdoor.",
"malware_types": [
"backdoor",
"remote-access-trojan"
],
"is_family": false,
"kill_chain_phases": [
{
"kill_chain_name": "mandiant-attack-lifecycle-model",
"phase_name": "establish-foothold"
}
]
},
{
"type": "relationship",
"spec_version": "2.1",
"id": "relationship--864af2ea-46f9-4d23-b3a2-1c2adf81c265",
"created": "2020-02-29T18:03:58.029Z",
"modified": "2020-02-29T18:03:58.029Z",
"relationship_type": "indicates",
"source_ref": "indicator--d81f86b9-975b-4c0b-875e-810c5ad45a4f",
"target_ref": "malware--162d917e-766f-4611-b5d6-652791454fca"
}
]
}
Пример №2
Тут явно описаны связи между злоумышленником Adversary Bravo, используемой им техникой атаки — фишингом — и вредоносным ПО Poison Ivy Variant d1c6.
В этом случае при обнаружении в инфраструктуре вредоносного ПО PoisonIvy вариант d1с6 такая структура фида с взаимосвязями поможет понять, что подобным вредоносным ПО пользуется злоумышленник.
Пример STIX 2.1
{
"type": "bundle",
"id": "bundle--0ecd8123-90d5-46e0-9cd4-65d4999b3a2e",
"objects": [
{
"type": "threat-actor",
"spec_version": "2.1",
"id": "threat-actor--9a8a0d25-7636-429b-a99e-b2a73cd0f11f",
"created": "2015-05-07T14:22:14.760Z",
"modified": "2015-05-07T14:22:14.760Z",
"name": "Adversary Bravo",
"description": "Adversary Bravo is known to use phishing attacks to deliver remote access malware to the targets.",
"threat_actor_types": [
"spy",
"criminal"
]
},
{
"type": "malware",
"spec_version": "2.1",
"id": "malware--d1c612bc-146f-4b65-b7b0-9a54a14150a4",
"created": "2015-04-23T11:12:34.760Z",
"modified": "2015-04-23T11:12:34.760Z",
"name": "Poison Ivy Variant d1c6",
"malware_types": [
"remote-access-trojan"
],
"is_family": false,
"kill_chain_phases": [
{
"kill_chain_name": "mandiant-attack-lifecycle-model",
"phase_name": "initial-compromise"
}
]
},
{
"type": "attack-pattern",
"spec_version": "2.1",
"id": "attack-pattern--8ac90ff3-ecf8-4835-95b8-6aea6a623df5",
"created": "2015-05-07T14:22:14.760Z",
"modified": "2015-05-07T14:22:14.760Z",
"name": "Phishing",
"description": "Spear phishing used as a delivery mechanism for malware.",
"kill_chain_phases": [
{
"kill_chain_name": "mandiant-attack-lifecycle-model",
"phase_name": "initial-compromise"
}
],
"external_references": [
{
"source_name": "capec",
"description": "phishing",
"url": "https://capec.mitre.org/data/definitions/98.html",
"external_id": "CAPEC-98"
}
]
},
{
"type": "identity",
"spec_version": "2.1",
"id": "identity--1621d4d4-b67d-41e3-9670-f01faf20d111",
"created": "2015-05-10T16:27:17.760Z",
"modified": "2015-05-10T16:27:17.760Z",
"name": "Adversary Bravo",
"description": "Adversary Bravo is a threat actor that utilizes phishing attacks.",
"identity_class": "unknown"
},
{
"type": "relationship",
"spec_version": "2.1",
"id": "relationship--d44019b6-b8f7-4cb3-837e-7fd3c5724b87",
"created": "2020-02-29T18:18:08.661Z",
"modified": "2020-02-29T18:18:08.661Z",
"relationship_type": "uses",
"source_ref": "threat-actor--9a8a0d25-7636-429b-a99e-b2a73cd0f11f",
"target_ref": "malware--d1c612bc-146f-4b65-b7b0-9a54a14150a4"
},
{
"type": "relationship",
"spec_version": "2.1",
"id": "relationship--3cd2d6f9-0ded-486b-8dca-606283a8997f",
"created": "2020-02-29T18:18:08.661Z",
"modified": "2020-02-29T18:18:08.661Z",
"relationship_type": "uses",
"source_ref": "threat-actor--9a8a0d25-7636-429b-a99e-b2a73cd0f11f",
"target_ref": "attack-pattern--8ac90ff3-ecf8-4835-95b8-6aea6a623df5"
},
{
"type": "relationship",
"spec_version": "2.1",
"id": "relationship--56e5f1c8-08f3-4e24-9e8e-f87d844672ec",
"created": "2020-02-29T18:18:08.661Z",
"modified": "2020-02-29T18:18:08.661Z",
"relationship_type": "attributed-to",
"source_ref": "threat-actor--9a8a0d25-7636-429b-a99e-b2a73cd0f11f",
"target_ref": "identity--1621d4d4-b67d-41e3-9670-f01faf20d111"
}
]
}
Приведенные примеры довольно тривиальны, но просты для понимания. Разбор сложных примеров может стать темой отдельной статьи. Однако для наглядности покажу, как можно упаковать в STIX результаты объемного исследования — отчета о деятельности вредоносной группировки APT1 (ссылка на json):
Если подытожить, STIX — достаточно мощный и гибкий формат для описания самых различных угроз и обмена ими между различными потребителями. Плюсов у него много: выразительность, то есть хорошая описательная способность, гибкость, автоматизируемость. Из ощутимых минусов можно отметить разве что следствие перечисленных плюсов — сравнительно высокий порог входа, из-за этого STIX пока не получил статуса «стандарта отрасли».
Формат MISP
MISP — популярная open-source платформа Threat Intelligence, она обросла довольно большим и активным сообществом за годы существования. Формат обмена данными с 2016 внесен в IETF в статусе internet draft, то есть метит в RFC, но пока им не стал.
Концепция платформы MISP сосредоточена в первую очередь на создании и p2p-обмене данными threat intelligence, то есть основная цель — это создание и распространение знаний между различными участниками сообществ. Глубину и ширину такого распространения можно довольно гибко регулировать настройками.
Формат обмена данными MISP пошел несколько иным путем, нежели STIX. В отличие от последнего, MISP свою модель данных не делит на большое количество детерминированных объектов разных типов, тут их сравнительно немного:
Событие (Event) — какое-либо событие, инцидент, аналитический отчет, который повествует о чем-либо. По сути, Event — это контейнер.
Атрибуты события (Event attributes) — чаще всего это индикаторы компрометации, разные технические артефакты. То есть Events, как в контейнерах, собирают внутри себя разные индикаторы компрометации, которые рассказывают о какой-либо одной угрозе или вредоносной кампании (либо нескольких, но семантически близких).
Объект (Object) — нужен для обобщения атрибутов по какому-либо признаку общности. Например, чтобы связать несколько хешей (md5, sha1. sha256) с именем файла, с которого они были сняты. Объекты можно связывать друг с другом с помощью прокси-объекта Object References.
Тег (Tag) — метки для классификации, могут быть как представлены в виде пользовательских строк, так и взяты из справочника MISP Taxonomies.
Обнаружения (Sighting) — факты о том, где, когда, при каких условиях и кем встречался конкретный атрибут.
Галактика (Galaxy) — связь объектов или атрибутов с контекстом, который дает более детальное описание объектов/атрибутов. По сути, это расширение функциональности тегов. Galaxies декомпозируются на Clusters (Кластеры) и Elements (Элементы). На примере это может выглядеть так: атрибут привязывается к Threat Actor (Galaxy), MuddyWater (Element) — из этой связи наглядно понятна атрибуция.
Пример
Из этого примера видно, что фид рассказывает нам о двух индикаторах компрометации adfs.senate.group и adfs-senate.email, которые связаны с вредоносной кампанией Pawn Storm, есть ссылка на первоисточник исследования — пост в блоге Trend Micro.
MISP Event
"Event": {
"info": "Update on Pawn Storm: New Targets and Politically Motivated Campaigns",
"publish_timestamp": "1515851051",
"timestamp": "1515850537",
"analysis": "2",
"Attribute": [
{
"comment": "",
"category": "Network activity",
"uuid": "5a5a0b04-198c-4190-9f1a-8d1cc0a8ab16",
"timestamp": "1515850500",
"to_ids": true,
"value": "adfs.senate.group",
"object_relation": null,
"type": "hostname"
},
{
"comment": "",
"category": "Network activity",
"uuid": "5a5a0b04-4d44-463f-81a9-8d1cc0a8ab16",
"timestamp": "1515850500",
"to_ids": true,
"value": "adfs-senate.email",
"object_relation": null,
"type": "domain"
},
{
"comment": "",
"category": "External analysis",
"uuid": "5a5a0b22-86a4-4d66-90e4-9282c0a8ab16",
"timestamp": "1515850530",
"to_ids": false,
"value": "http://blog.trendmicro.com/trendlabs-security-intelligence/update-pawn-storm-new-targets-politically-motivated-campaigns/",
"object_relation": null,
"type": "link"
}
],
"Tag": [
{
"colour": "#00d622",
"exportable": true,
"name": "tlp:white"
}
],
"published": true,
"date": "2018-01-12",
"Orgc": {
"uuid": "56c42374-fdb8-4544-a218-41ffc0a8ab16",
"name": "CUDESO"
},
"threat_level_id": "3",
"uuid": "5a5a0acb-a374-415e-b88f-8d1ec0a8ab16"
}
}
MISP — довольно обширный формат, позволяющий описать угрозы достаточно детально. В нем есть для этого все инструменты: обилие атрибутов, таксономии для категоризации, галактики для кластеризации угроз. Однако, как во многих community-driven вещах, на мой взгляд, в нем нет той стройности, детерминированности, типизированных взаимосвязей и правил их использования, которые есть в STIX. Это не значит, что STIX выглядит однозначно более выигрышным — таково мое личное мнение. Время и здоровая конкуренция покажут, чей подход будет более эффективным.
Иные форматы
Помимо STIX и MISP, больших китов в мире стандартизации обмена данными threat intelligence, есть немало иных форматов. И надо сказать, что наибольшее количество опенсорных фидов — в форматах txt и csv. Редко, когда можно найти их в STIX или MISP, которые я бы назвал, скорее, уделом коммерческих, отмодерированных, обогащенных, хорошо структурированных фидов. Иные форматы (MAEC, IODEF, CAPEC, IODEF, VERIS) — редкость.
Почему же стали настолько популярны txt и csv? Ответ один — из-за простоты. Большинство опенсорсных фидов — это либо фиды с минимальным контекстом (временные метки, именования вредоносного ПО, теги), либо просто голые индикаторы компрометации без какого-либо контекста (только значения индикаторов). Наиболее простой способ упаковки таких индикаторов — plain text или csv, так как любые иные форматы имеют более высокий порог входа.
Минус фидов в plain-text — отсутствие контекста, то есть обычно такие фиды — это листы IP-адресов, хешей, доменов, URL, реже — чего-то иного. Проблема в том, что таким фидам без контекста, «голым» по-сути, сложно доверять и интерпретировать, так как не понятно, что за угрозы представляют содержащиеся в них индикаторы компрометации, и насколько эти угрозы актуальны и вредоносны.
Фиды в csv часто содержат несколько колонок, описывающих значения, тип индикатора, временные метки. Иногда встречаются описания вредоносного ПО или эксплуатируемых уязвимостей, которые связаны с этим индикатором. В общем случае фиды в csv, где есть хоть какой-то контекст, могут быть полезнее. Однако это зависит от различных ситуаций, ведь может случиться так, что plain-text фид с индикаторами по очень актуальной угрозе для конкретной отрасли или компании может оказаться полезнее любого другого фида с контекстом.
Основные проблемы при работе с фидами в таких свободных форматах, как txt и csv, — это сбор и приведение к единой нормальной форме, а также связывание данных. Txt может содержать комментарии, в одном файле могут находиться разные фиды и использоваться различные способы разделения индикаторов компрометации — такие фиды достаточно сложно парсить. В csv-фидах порядочную сложность также порой представляет извлечение данных: разделители в одном файле могут не быть консистентными. Это актуально для фидов, где правки делаются вручную, да и вообще наша практика показала, что нежданчик может случиться в любой момент. Отдельная тема — это неявность связи атрибутов в csv. Иногда довольно сложно понять, какие атрибуты к чему относятся.
Примеры
В этом примере явно видно, что есть одна колонка с индикатором компрометации, одна колонка с семейством вредоносного ПО, которая связана с хешем, есть колонка со страной (хотя не вполне понятно, страна — это источник атаки или цель), есть колонка со ссылкой на исследование/отчет по угрозе. Такой csv-фид более-менее понятен.
Вот другой пример фида с однозначным и хорошим описанием — понятно, какие есть атрибуты и какие между ними имеются взаимосвязи:
А вот в этом примере не понятно, к чему относится дата: к третьей колонке (URL) или к пятой (хеш)?
Еще один пример: есть две колонки с индикатором компрометации (url, ip), есть колонка с датой — и непонятно, к какому из индикаторов компрометации эта дата относится, а также, что она означает. Время первого обнаружения индикатора? Время последнего обнаружения индикатора? Что-то иное?
Как видно из примеров, форматы общего назначения вполне подходят для публикации фидов TI, но проблема обычно кроется в последующей интерпретации этих форматов. Это может вносить существенную путаницу при использовании данных в процессе применения TI, например, при реагировании на инциденты. В этом отношении специализированные STIX/MISP решают проблему интерпретации гораздо лучше из-за детерминированности схем данных.
За бортом обсуждения также остаются немногочисленные практики публикации фидов в устаревших форматах, например, STIX 1.*, OpenIOC и иных — они действительно либо безнадежно устарели и более не используются, либо слились с другими стандартами, либо эволюционировали в более новые версии, отвечающие нынешним запросам.
Выводы
В мире threat intelligence не все так однозначно, как видится на первый взгляд. С одной стороны, сформировалось достаточно активное сообщество, которое развивает открытые стандарты, решающие вполне понятные проблемы и задачи большинства пользователей (потребителей и производителей) TI. В то же время различные производители средств защиты информации зачастую разрабатывают и используют собственные форматы, наиболее выгодные в их конкретных сценариях использования. Помимо этого, есть практика использования форматов общего назначения вроде txt, csv, rss, pdf.
Все это явно свидетельствует, что в этой области еще не сформирован единый стандарт индустрии. Тем, кому этих доводов мало, также можно почитать несколько исследований из первоисточников:
Само по себе отсутствие стандарта отрасли — это не хорошо и не плохо, просто факт. Порой он приносит определенные неудобства производителям продуктов, поставщикам и потребителям TI. Я вижу это лишь следствием того, что threat intelligence — все еще сравнительно молодая область, которая представляет собой большой плавильный котел. Здесь множество требований с различных сторон еще на нашли 100% устраивающих всех реализаций, поэтому преобладает некий хаос, постепенно кристаллизующийся в лучшие практики. Полагаю, стандартизация — это вопрос времени.
С точки зрения платформы TI, такая гетерогенность форматов — настоящий челлендж, так как нужно собрать из многообразия источников все данные, переложить их в собственную модель, не потерять смысл и по возможности потерять минимум данных — тех, что семантически не получается разместить в полях модели данных платформы. Как раз в следующей статье вместе с Колей Арефьевым из RST Cloud мы рассмотрим более подробно конкретные фиды, расскажем, какие сложности поджидают на пути их сбора, обработки и интерпретации. Stay tuned!