
Ferramenta de análise estática e dinâmica baseada em regras que identifica capacidades em arquivos PE, ELF, .NET e shellcode, mapeando-as para técnicas MITRE ATT&CK para triagem de malware.
capa detecta capacidades em arquivos executáveis. Você o executa contra um PE, ELF, módulo .NET, arquivo de shellcode ou um relatório de sandbox e ele informa o que acha que o programa pode fazer. Por exemplo, pode sugerir que o arquivo é um backdoor, é capaz de instalar serviços ou depende de HTTP para se comunicar.
Para inspecionar interativamente os resultados do capa no seu navegador, use o capa Explorer Web.
Se você quiser inspecionar ou escrever regras capa, vá para o repositório capa-rules. Caso contrário, continue lendo.
Abaixo você encontra uma lista de nossos posts no blog sobre capa com mais detalhes.
$ 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 | +-------------------------------------------+-------------------------------------------------+
# download e uso
Faça o download das versões estáveis dos binários autônomos do capa [aqui](https://github.com/mandiant/capa/releases). Você pode executar os binários autônomos sem instalação. capa é uma ferramenta de linha de comando que deve ser executada no terminal.
Para usar o capa como biblioteca ou integrá-lo com outra ferramenta, consulte [doc/installation.md](https://github.com/mandiant/capa/blob/master/doc/installation.md) para obter mais instruções de configuração.
**Documentação:** [Uso e dicas](https://github.com/mandiant/capa/blob/HEAD/doc/usage.md) · [Instalação](https://github.com/mandiant/capa/blob/HEAD/doc/installation.md) · [Limitações](https://github.com/mandiant/capa/blob/HEAD/doc/limitations.md) · [FAQ](https://github.com/mandiant/capa/blob/HEAD/doc/faq.md)
# capa Explorer Web
O [capa Explorer Web](https://mandiant.github.io/capa/explorer/) permite explorar interativamente os resultados do capa no seu navegador. Além da versão online, você pode baixar um arquivo HTML autônomo para uso local offline.

Mais detalhes sobre a interface web estão disponíveis no [README do capa Explorer Web](https://github.com/mandiant/capa/blob/master/web/explorer/README.md).
# exemplo
Na saída de exemplo acima, executamos capa contra um binário desconhecido (`suspicious.exe`), e a ferramenta relata que o programa pode enviar requisições HTTP, decodificar dados via XOR e Base64, instalar serviços e criar novos processos. Em conjunto, isso nos faz pensar que `suspicious.exe` pode ser um backdoor persistente. Portanto, nosso próximo passo de análise poderia ser executar `suspicious.exe` em uma sandbox e tentar recuperar o servidor de comando e controle.
## resultados detalhados
Ao passar a flag `-vv` (para muito verboso), capa reporta exatamente onde encontrou evidências dessas capacidades. Isso é útil por pelo menos dois motivos:
- ajuda a explicar por que devemos confiar nos resultados, e permite verificar as conclusões, e
- mostra onde, dentro do binário, um analista experiente poderia estudar com o 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 também suporta deteção de capacidades dinâmicas para múltiplas sandboxes, incluindo:
.json, .json_, .json.gz).log, .log.gz).zip)Para usar este recurso, submeta o seu ficheiro para uma sandbox suportada e, em seguida, descarregue e execute o capa sobre o ficheiro de relatório gerado. Este recurso permite que o capa corresponda capacidades com base em características dinâmicas e estáticas que a sandbox capturou durante a execução.
Aqui está um exemplo de execução do capa contra um ficheiro empacotado e, em seguida, execução do capa contra o relatório CAPE gerado para o mesmo ficheiro empacotado:```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 rules
capa usa uma coleção de regras para identificar capacidades dentro de um programa.
Essas regras são fáceis de escrever, mesmo para quem é novo em engenharia reversa.
Ao criar regras, você pode estender as capacidades que o capa reconhece.
Em alguns aspectos, as regras do capa são uma mistura dos formatos OpenIOC, Yara e YAML.
Aqui está um exemplo de regra usada pelo 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
O repositório github.com/mandiant/capa-rules contém centenas de regras padrão distribuídas com o capa. Por favor, aprenda a escrever regras e contribua com novas entradas à medida que encontrar técnicas interessantes em malware.
Se você utiliza IDA Pro, pode usar o plugin capa explorer. O capa explorer ajuda a identificar áreas interessantes de um programa e criar novas regras capa usando características extraídas diretamente do seu banco de dados IDA Pro. Ele também utiliza suas alterações locais no .idb para extrair melhores características, como quando você renomeia uma variável global que contém um endereço de API resolvido dinamicamente.

O capa suporta o uso do Ghidra (via PyGhidra) como um backend de extração de características. Isso permite executar o capa em binários usando o mecanismo de análise do Ghidra.
Você pode executar e visualizar os resultados do capa na interface do Ghidra usando o capa explorer para Ghidra.
Você também pode executar o capa a partir da linha de comando usando o backend Ghidra.
O repositório capa-testfiles contém os dados que usamos para testar o código e as regras do capa.
Inscreva-se na lista de discussão FLARE para anúncios da comunidade! Envie um e-mail com "subscribe" para [email protected].