
Инструмент статического и динамического анализа на основе правил, который выявляет возможности в файлах PE, ELF, .NET и shellcode, сопоставляя их с техниками MITRE ATT&CK для триажа вредоносного ПО.
capa определяет возможности исполняемых файлов. Запустите его против PE, ELF, .NET-модуля, файла shellcode или отчёта песочницы, и он расскажет, что, по его мнению, может делать программа. Например, он может предположить, что файл является бэкдором, способен устанавливать службы или использует HTTP для связи.
Чтобы интерактивно просматривать результаты capa в браузере, используйте capa Explorer Web.
Если вы хотите просматривать или писать правила capa, переходите в репозиторий capa-rules. В противном случае читайте дальше.
Ниже вы найдёте список наших записей в блоге capa с дополнительными подробностями.
$ capa.exe suspicious.exe
+--------------------+------------------------------------------------------------------------+ | ATT&CK Tactic | ATT&CK Technique | |--------------------+------------------------------------------------------------------------| | DEFENSE EVASION | Obfuscated Files or Information [T1027] | | DISCOVERY | Query Registry [T1012] | | | System Information Discovery [T1082] | | EXECUTION | Command and Scripting Interpreter::Windows Command Shell [T1059.003] | | | Shared Modules [T1129] | | EXFILTRATION | Exfiltration Over C2 Channel [T1041] | | PERSISTENCE | Create or Modify System Process::Windows Service [T1543.003] | +--------------------+------------------------------------------------------------------------+
+-------------------------------------------+-------------------------------------------------+ | CAPABILITY | NAMESPACE | |-------------------------------------------+-------------------------------------------------| | read and send data from client to server | c2/file-transfer | | execute shell command and capture output | c2/shell | | receive data (2 matches) | communication | | send data (6 matches) | communication | | connect to HTTP server (3 matches) | communication/http/client | | send HTTP request (3 matches) | communication/http/client | | create pipe | communication/named-pipe/create | | get socket status (2 matches) | communication/socket | | receive data on socket (2 matches) | communication/socket/receive | | send data on socket (3 matches) | communication/socket/send | | connect TCP socket | communication/socket/tcp | | encode data using Base64 | data-manipulation/encoding/base64 | | encode data using XOR (6 matches) | data-manipulation/encoding/xor | | run as a service | executable/pe | | get common file path (3 matches) | host-interaction/file-system | | read file | host-interaction/file-system/read | | write file (2 matches) | host-interaction/file-system/write | | print debug messages (2 matches) | host-interaction/log/debug/write-event | | resolve DNS | host-interaction/network/dns/resolve | | get hostname | host-interaction/os/hostname | | create process | host-interaction/process/create | | create registry key | host-interaction/registry/create | | create service | host-interaction/service/create | | create thread | host-interaction/thread/create | | persist via Windows service | persistence/service | +-------------------------------------------+-------------------------------------------------+
# загрузка и использование
Загружайте стабильные версии автономных бинарных файлов capa [здесь](https://github.com/mandiant/capa/releases). Вы можете запускать автономные бинарные файлы без установки. capa — это инструмент командной строки, который следует запускать из терминала.
Чтобы использовать capa как библиотеку или интегрировать с другим инструментом, смотрите [doc/installation.md](https://github.com/mandiant/capa/blob/master/doc/installation.md) для дальнейших инструкций по установке.
**Документация:** [Использование и советы](https://github.com/mandiant/capa/blob/HEAD/doc/usage.md) · [Установка](https://github.com/mandiant/capa/blob/HEAD/doc/installation.md) · [Ограничения](https://github.com/mandiant/capa/blob/HEAD/doc/limitations.md) · [ЧаВО](https://github.com/mandiant/capa/blob/HEAD/doc/faq.md)
# capa Explorer Web
[capa Explorer Web](https://mandiant.github.io/capa/explorer/) позволяет вам интерактивно изучать результаты capa в вашем веб-браузере. Помимо онлайн-версии, вы можете загрузить автономный HTML-файл для локального использования без подключения к интернету.

Более подробная информация о веб-интерфейсе доступна в [README capa Explorer Web](https://github.com/mandiant/capa/blob/master/web/explorer/README.md).
# пример
В приведённом выше примере вывода мы запускаем capa против неизвестного бинарного файла (`suspicious.exe`), и инструмент сообщает, что программа может отправлять HTTP-запросы, декодировать данные с помощью XOR и Base64, устанавливать службы и порождать новые процессы. В совокупности это наводит на мысль, что `suspicious.exe` может быть постоянным бэкдором. Поэтому следующим шагом анализа может быть запуск `suspicious.exe` в изолированной среде и попытка восстановить сервер управления и контроля.
## подробные результаты
При передаче флага `-vv` (для очень подробного вывода) capa сообщает точное место, где были найдены доказательства этих возможностей. Это полезно как минимум по двум причинам:
- это помогает объяснить, почему мы должны доверять результатам, и позволяет нам проверить выводы, и
- это показывает, где в бинарном файле опытный аналитик может изучать с помощью IDA Pro```
$ capa.exe suspicious.exe -vv
...
execute shell command and capture output
namespace c2/shell
author [email protected]
scope function
att&ck Execution::Command and Scripting Interpreter::Windows Command Shell [T1059.003]
references https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa
function @ 0x4011C0
and:
match: create a process with modified I/O handles and window @ 0x4011C0
and:
number: 257 = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW @ 0x4012B8
or:
number: 68 = StartupInfo.cb (size) @ 0x401282
or: = API functions that accept a pointer to a STARTUPINFO structure
api: kernel32.CreateProcess @ 0x401343
match: create pipe @ 0x4011C0
or:
api: kernel32.CreatePipe @ 0x40126F, 0x401280
optional:
match: create thread @ 0x40136A, 0x4013BA
or:
and:
os: windows
or:
api: kernel32.CreateThread @ 0x4013D7
or:
and:
os: windows
or:
api: kernel32.CreateThread @ 0x401395
or:
string: "cmd.exe" @ 0x4012FD
...
capa также поддерживает обнаружение динамических возможностей для нескольких песочниц, включая:
.json, .json_, .json.gz).log, .log.gz).zip)Чтобы воспользоваться этой функцией, отправьте ваш файл в одну из поддерживаемых песочниц, затем загрузите и запустите capa для сгенерированного файла отчета. Эта функция позволяет capa сопоставлять возможности с динамическими и статическими признаками, которые песочница зафиксировала во время выполнения.
Вот пример запуска capa для упакованного файла, а затем запуска capa для отчета CAPE, сгенерированного для того же упакованного файла:```yaml $ capa 05be49819139a3fdcdbddbdefd298398779521f3d68daa25275cc77508e42310.exe WARNING:capa.capabilities.common:-------------------------------------------------------------------------------- WARNING:capa.capabilities.common: This sample appears to be packed. WARNING:capa.capabilities.common: WARNING:capa.capabilities.common: Packed samples have often been obfuscated to hide their logic. WARNING:capa.capabilities.common: capa cannot handle obfuscation well using static analysis. This means the results may be misleading or incomplete. WARNING:capa.capabilities.common: If possible, you should try to unpack this input file before analyzing it with capa. WARNING:capa.capabilities.common: Alternatively, run the sample in a supported sandbox and invoke capa against the report to obtain dynamic analysis results. WARNING:capa.capabilities.common: WARNING:capa.capabilities.common: Identified via rule: (internal) packer file limitation WARNING:capa.capabilities.common: WARNING:capa.capabilities.common: Use -v or -vv if you really want to see the capabilities identified by capa. WARNING:capa.capabilities.common:--------------------------------------------------------------------------------
$ capa 05be49819139a3fdcdbddbdefd298398779521f3d68daa25275cc77508e42310.json
┍━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┑ │ ATT&CK Tactic │ ATT&CK Technique │ ┝━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┥ │ CREDENTIAL ACCESS │ Credentials from Password Stores T1555 │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┤ │ DEFENSE EVASION │ File and Directory Permissions Modification T1222 │ │ │ Modify Registry T1112 │ │ │ Obfuscated Files or Information T1027 │ │ │ Virtualization/Sandbox Evasion::User Activity Based Checks T1497.002 │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┤ │ DISCOVERY │ Account Discovery T1087 │ │ │ Application Window Discovery T1010 │ │ │ File and Directory Discovery T1083 │ │ │ Query Registry T1012 │ │ │ System Information Discovery T1082 │ │ │ System Location Discovery::System Language Discovery T1614.001 │ │ │ System Owner/User Discovery T1033 │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┤ │ EXECUTION │ System Services::Service Execution T1569.002 │ ├────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┤ │ PERSISTENCE │ Boot or Logon Autostart Execution::Registry Run Keys / Startup Folder T1547.001 │ │ │ Boot or Logon Autostart Execution::Winlogon Helper DLL T1547.004 │ │ │ Create or Modify System Process::Windows Service T1543.003 │ ┕━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┙
┍━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┑ │ Capability │ Namespace │ ┝━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┥ │ check for unmoving mouse cursor (3 matches) │ anti-analysis/anti-vm/vm-detection │ │ gather bitkinex information │ collection/file-managers │ │ gather classicftp information │ collection/file-managers │ │ gather filezilla information │ collection/file-managers │ │ gather total-commander information │ collection/file-managers │ │ gather ultrafxp information │ collection/file-managers │ │ resolve DNS (23 matches) │ communication/dns │ │ initialize Winsock library (7 matches) │ communication/socket │ │ act as TCP client (3 matches) │ communication/tcp/client │ │ create new key via CryptAcquireContext │ data-manipulation/encryption │ │ encrypt or decrypt via WinCrypt │ data-manipulation/encryption │ │ hash data via WinCrypt │ data-manipulation/hashing │ │ initialize hashing via WinCrypt │ data-manipulation/hashing │ │ hash data with MD5 │ data-manipulation/hashing/md5 │ │ generate random numbers via WinAPI │ data-manipulation/prng │ │ extract resource via kernel32 functions (2 matches) │ executable/resource │ │ interact with driver via control codes (2 matches) │ host-interaction/driver │ │ get Program Files directory (18 matches) │ host-interaction/file-system │ │ get common file path (575 matches) │ host-interaction/file-system │ │ create directory (2 matches) │ host-interaction/file-system/create │ │ delete file │ host-interaction/file-system/delete │ │ get file attributes (122 matches) │ host-interaction/file-system/meta │ │ set file attributes (8 matches) │ host-interaction/file-system/meta │ │ move file │ host-interaction/file-system/move │ │ find taskbar (3 matches) │ host-interaction/gui/taskbar/find │ │ get keyboard layout (12 matches) │ host-interaction/hardware/keyboard │ │ get disk size │ host-interaction/hardware/storage │ │ get hostname (4 matches) │ host-interaction/os/hostname │ │ allocate or change RWX memory (3 matches) │ host-interaction/process/inject │ │ query or enumerate registry key (3 matches) │ host-interaction/registry │ │ query or enumerate registry value (8 matches) │ host-interaction/registry │ │ delete registry key │ host-interaction/registry/delete │ │ start service │ host-interaction/service/start │ │ get session user name │ host-interaction/session │ │ persist via Run registry key │ persistence/registry/run │ │ persist via Winlogon Helper DLL registry key │ persistence/registry/winlogon-helper │ │ persist via Windows service (2 matches) │ persistence/service │ ┕━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┙
# правила capa
capa использует набор правил для выявления возможностей в программе.
Эти правила легко писать, даже для новичков в реверс-инжиниринге.
Создавая правила, вы можете расширить возможности, которые распознает capa.
В некотором смысле правила capa представляют собой смесь форматов OpenIOC, Yara и YAML.
Вот пример правила, используемого capa:```yaml
rule:
meta:
name: create TCP socket
namespace: communication/socket/tcp
authors:
- [email protected]
- [email protected]
- [email protected]
scopes:
static: basic block
dynamic: call
mbc:
- Communication::Socket Communication::Create TCP Socket [C0001.011]
examples:
- Practical Malware Analysis Lab 01-01.dll_:0x10001010
features:
- or:
- and:
- number: 6 = IPPROTO_TCP
- number: 1 = SOCK_STREAM
- number: 2 = AF_INET
- or:
- api: ws2_32.socket
- api: ws2_32.WSASocket
- api: socket
- property/read: System.Net.Sockets.TcpClient::Client
Репозиторий github.com/mandiant/capa-rules содержит сотни стандартных правил, которые поставляются с capa. Изучите, как писать правила, и добавляйте новые записи, когда найдёте интересные техники в вредоносном ПО.
Если вы используете IDA Pro, то можете воспользоваться плагином capa explorer. capa explorer помогает выявлять интересные участки программы и создавать новые правила capa, используя характеристики, извлечённые непосредственно из вашей базы данных IDA Pro. Он также использует ваши локальные изменения в .idb для извлечения более точных характеристик, например, когда вы переименовываете глобальную переменную, содержащую динамически разрешённый адрес API.

capa поддерживает использование Ghidra (через PyGhidra) в качестве бэкенда для извлечения характеристик. Это позволяет запускать capa для бинарных файлов, используя аналитический движок Ghidra.
Вы можете запускать и просматривать результаты capa в интерфейсе Ghidra с помощью capa explorer для Ghidra.
Вы также можете запускать capa из командной строки, используя бэкенд Ghidra.
Репозиторий capa-testfiles содержит данные, которые мы используем для тестирования кода и правил capa.
Подпишитесь на список рассылки FLARE, чтобы получать объявления сообщества! Отправьте письмо с темой «subscribe» на адрес [email protected].