
Lista incrível de palavras-chave e artefatos para sessões de Threat Hunting
🎯 Lista de palavras-chave para sessões de ThreatHunting


Threat hunting é uma abordagem proativa e iterativa para detectar atividades maliciosas na rede ou nos sistemas de uma organização que possam ter contornado as medidas de segurança automatizadas. Diferentemente de investigações reativas disparadas por alertas de segurança, o threat hunting é impulsionado por verificações orientadas por threat intelligence (TI) e por hipóteses derivadas de análise sistemática e oportunística. Essas hipóteses 💡 ajudam os caçadores a descobrir ameaças desconhecidas, ameaças potenciais ou ameaças conhecidas que podem ter escapado das detecções de segurança, bem como vulnerabilidades ou indicadores de comprometimento (IoCs) que sistemas automatizados podem deixar passar ou excluir. O processo também se concentra em identificar precursores de alertas/dashboards, melhorar os fluxos de trabalho de SOC/triagem, contribuir para o gerenciamento do inventário de ativos ocultos e escalar eventos de baixa/média fidelidade que exigem investigação adicional. O objetivo principal é identificar as táticas, técnicas e procedimentos (TTPs) usados por atores de ameaças, aumentando a capacidade da organização de detectar e mitigar preventivamente ataques potenciais.

Minha sugestão de processo para organizar sessões de threat hunting parcialmente automatizadas e manter regras de detecção de alta qualidade em um SOC

As equipes de SOC se concentram em implementar detecções de alta fidelidade em todos os níveis da Pirâmide de Maturidade de Detecção, visando ameaças conhecidas com o mínimo de falsos positivos. O threat hunting complementa isso ao lidar com ameaças desconhecidas, TTPs avançados e anomalias propensas a altas taxas de falsos positivos, preenchendo lacunas e ampliando a cobertura de detecção além das capacidades padrão do SOC.


Idealmente, cada sessão de threat hunting deve ter objetivos claros. Este fluxograma fornece uma abordagem estruturada para orientar seu processo, desde a preparação e investigação até recomendações acionáveis.
🎯 Lista de palavras-chave para sessões de ThreatHunting
As listas ThreatHunting-Keywords podem ser valiosas para Threat Hunters, equipes de SOC e CERT para análise estática no SIEM, pois auxiliam na identificação de atores de ameaças (ou redteamers 😆) que utilizam configurações padrão de ferramentas de exploração conhecidas nos logs. Ela difere dos feeds de IoC por sua relevância duradoura: as palavras-chave aqui não têm 'datas de validade' e podem detectar ameaças anos após sua inclusão; são flexíveis, aceitando correspondências curinga e sem diferenciação de maiúsculas/minúsculas, e focadas apenas em palavras-chave padrão.
Projetada principalmente para Threat Hunting, esta lista pode ser útil em cenários complexos. Se você tem acesso a um SIEM que não gerencia, com dados não parseados, ou se faz parte de uma equipe de SOC com um SIEM bem gerenciado, os exemplos fornecidos aqui podem acelerar o processo de detecção de atividades maliciosas sem a necessidade de parsear nada. Se seus logs já são parseados, esta lista pode ser usada para corresponder campos em seus dados, potencialmente se transformando em uma regra de detecção com base na categoria de tipo de palavra-chave que você selecionar, desde que a taxa de falsos positivos seja suficientemente baixa.
⚠️ Nem tudo pode ser adicionado a esta lista; não fazemos detecções complexas de comportamento aqui, apenas detecções simples de palavras-chave em campos ou logs brutos, com o objetivo de detectar configurações padrão
⚠️ Muitas ferramentas na lista possuem regras de detecção dedicadas, correlacionando eventos com limites e relações de processos exclusivas... não cobriremos todas as detecções possíveis de uma ferramenta aqui, apenas detecções por palavras-chave
Se você faz parte de um Security Operations Center (SOC) e gerencia centenas de regras de detecção que dependem exclusivamente de detecções simples por palavras-chave, sem qualquer correlação de campos ou eventos, considere repensar sua abordagem. Na minha opinião, elas não deveriam constituir regras de detecção individuais. Em vez disso, elas podem ser mais adequadas a uma lista consolidada como esta, embora a implementação possa ser mais desafiadora se você não estiver usando uma plataforma como o Splunk.
Essa abordagem incentiva a criação de regras de alta qualidade e com propósito, mantendo suas detecções simples por palavras-chave em campos organizadas e gerenciáveis em um só lugar. O resultado final? Uma regra de detecção abrangente que cobre todas elas. Isso simplifica seu processo e otimiza suas capacidades de detecção.
Para respondedores a incidentes, você pode usar esta lista durante sua investigação em logs brutos ou arquivos para identificar rapidamente ferramentas de exploração conhecidas com as regras YARA Regras YARA, um script powershell ou ingerindo rapidamente seus logs no Splunk com Splunk4DFIR
Para evitar a detecção por simples correspondência de palavras-chave, é fundamental recompilar e renomear todas as strings personalizadas, nomes de classes ou funções, nomes de variáveis, nomes de argumentos, nomes de executáveis, user-agents padrão, certificados ou quaisquer outras strings que possam potencialmente ser associadas às ferramentas que você está usando durante sua operação. Empregue os nomes mais comuns para tudo, a fim de se misturar ao tráfego normal. Os scripts localizados aqui podem ajudá-lo a identificar alguns deles.
No entanto, se você estiver desenvolvendo 'ferramentas de red team' públicas, considere ajudar a equipe azul usando nomes distintos. Utilize uma configuração padrão com uma porta exótica, certificados personalizados, user-agents exclusivos, nomes e argumentos de funções específicos que não sejam comuns. Isso ajuda a criar uma assinatura clara que pode ser usada para detecções simples por palavras-chave, para que a equipe azul possa, pelo menos, detectar facilmente os script kiddies.
Cabeçalho: keyword,metadata_keyword_type,metadata_tool,metadata_description,metadata_tool_techniques,metadata_tool_tactics,metadata_malwares_name,metadata_groups_name,metadata_category,metadata_link,metadata_enable_endpoint_detection,metadata_enable_proxy_detection,metadata_tags,metadata_comment,metadata_severity_score,metadata_popularity_score,metadata_github_stars,metadata_github_forks,metadata_github_created_at,metadata_github_updated_at
keyword: As entradas nesta coluna representam palavras-chave que não diferenciam maiúsculas de minúsculas, usadas para Threat Hunting. Essas palavras-chave são flexíveis, permitindo o uso de curingas para ampliar ou restringir seus parâmetros de busca conforme necessário.
metadata_keyword_regex: As entradas nesta coluna representam o padrão de detecção regex para a palavra-chave; esses padrões são refinados para oferecer capacidades de detecção precisas, adequadas para uso com YARA, ripgrep ou ferramentas de detecção similares.
metadata_keyword_type: Tipo das palavras-chave. Atualmente, há três tipos:
faça o upload da lista threathunting-keywords.csv no Splunk
crie uma definição de lookup chamada threathunting-keywords para o lookup threathunting-keywords.csv
WILDCARD(keyword) e certifique-se de que Case sensitive match não esteja marcado
transforms.conf``` [threathunting-keywords] batch_index_query = 0 case_sensitive_match = 0 filename = threathunting-keywords.csv match_type = WILDCARD(keyword)
- agora podemos usar nossa definição de lookup para caçar 🏹
> :warning: se as buscas da seção a seguir não parecerem funcionar, isso pode ser devido às configurações de limitação de recursos do Splunk, especialmente se você estiver executando o Splunk com a configuração padrão. Para começar, você pode ter que considerar aumentar o valor de `max_memtable_bytes` na seção `[lookup]`.
## Exemplos de casos de uso com `threathunting-keywords`:

### Caçar todas as palavras-chave nos logs brutos 😱```
`myendpointslogs`
| lookup threathunting-keywords keyword as _raw OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_endpoint_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
Envie o job para segundo plano e mantenha o ID do job.

myendpointslogs é uma macro que pesquisará todos os seus logs de endpoints, podendo ser logs do Windows, telemetria de EDR, sysmon, auditd, sessões de bastion, logs de execução do PowerShell ou qualquer outro log que monitore atividade de processos ou atividade de arquivos. (se você não usar macro, pode substituir a macro pelo seu index, tag ou datamodel)
TERM() para buscas específicas antes do |lookup, se necessário| lookup isto é muito importante, para lookups grandes como este, use sempre |lookup em vez de |inputlookup. O |lookup usará o lookup enviado para os indexers quando o bundle for replicado, mas o |inputlookup enviará aos indexers a busca com todo o conteúdo do lookup a cada vez. Usando |lookup, ganhamos uma performance massiva aqui (esta busca será executada por horas em ambientes grandes, então é melhor otimizar nossa busca)... keyword as _raw OUTPUT keyword as keyword_detection esta é a parte onde iremos corresponder o campo chamado com o campo em nosso lookup. No Splunk, é o log bruto sem qualquer parsing (nosso caso de uso). Quando uma keyword corresponde, o campo mostrará a keyword do lookup que correspondeu ao campo () aquiFiltrar o resultado``` | loadjob 1684146257.1495958 | search NOT (keyword_detection IN ("fixme","fixme","fixme")) NOT (metadata_keyword_type IN ("fixme","fixme")) NOT (raw IN ("fixme","fixme","fixme"))
Exclua as palavras-chave obrigatórias, texto bruto ou tipos de palavras-chave.
se se decidir excluir o tipo `greyware tool keyword` (palavras-chave de ferramentas legítimas que são abusadas por atacantes) porque este ambiente tem demasiados resultados para este tipo de ferramentas, temos duas opções:
- Filtrar no início da nossa pesquisa inicial```
`myendpointslogs`
| lookup threathunting-keywords keyword as _raw OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" metadata_keyword_type="offensive tool keyword" metadata_enable_endpoint_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
Eu adicionei um metadata_keyword_type="offensive tool keyword" para focar apenas em ferramentas ofensivas que tenho certeza que são usadas por atores maliciosos
Então esse era o nosso caso de uso para pesquisar em logs brutos nos logs de endpoint; se quisermos pesquisar as palavras-chave para logs de rede (qualquer coisa que possa registrar uma consulta ou uma URL), simplesmente mudamos para:```
`mynetworklogs`
| lookup threathunting-keywords keyword as _raw OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_proxy_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
Agora é o mesmo que a primeira busca, mas eu mudei a fonte de dados para mynetworklogs e adicionei metadata_enable_proxy_detection=1 para corresponder às palavras-chave relevantes para registros de rede (é melhor ter logs de proxy e DNS para isso)
mynetworklogs url=*
| lookup threathunting-keywords keyword as url OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_proxy_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(url) as url by src_ip metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
#### Corresponder apenas no campo de consulta:```
`mynetworklogs` query=*
| lookup threathunting-keywords keyword as query OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_proxy_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(query) as query by src_ip metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
myendpointslogs
| eval myfields=mvappend(service, process, process_command, parent_process, parent_process_command, grand_parent_process, grand_parent_process_command, file_path, file_name)
| lookup threathunting-keywords keyword as myfields OUTPUT keyword as keyword_detection metadata_keyword_type metadata_tool metadata_description metadata_tool_techniques metadata_tool_tactics metadata_malwares_name metadata_groups_name metadata_category metadata_link metadata_enable_endpoint_detection metadata_enable_proxy_detection metadata_comment
| search metadata_description!="" AND metadata_enable_endpoint_detection=1
| stats count earliest(_time) as firsttime latest(_time) as lasttime values(process) values(service) values(process_command) values(file_name) values(file_path) values(parent_process) values(parent_process_command) values(grand_parent_process) values(grand_parent_process_command) by metadata_keyword_type keyword_detection index sourcetype
| convert ctime(*time)
#### Velocidade:
Se a velocidade for uma preocupação ou se você estiver planejando implementar isso como uma regra de detecção agendada, talvez queira considerar dividir a pesquisa em pesquisas diferentes escolhendo a coluna metadata_keyword_type ou metadata_tool que deseja usar.
Observe que filtrar usando o comando search após `|lookup` não agiliza o processo de busca. Se você quiser se concentrar em uma parte específica da pesquisa sem dividi-la, use o comando `|inputlookup` junto com a cláusula where. Embora esse método possa consumir mais recursos de CPU, geralmente resulta em uma execução mais rápida. Para mais detalhes, consulte a documentação do Splunk sobre inputlookup: https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Inputlookup
#### Com ELK:
Se você estiver trabalhando com o Elastic Stack, há muitas restrições para listas (você não pode usar caracteres especiais, espaços ...), você tem 3 opções:
- Use outra lista disponível aqui no mesmo repositório https://github.com/mthcht/ThreatHunting-Keywords/tree/main/elk (não é uma extração direta de threathunting-keywords.csv, é modificada para ELK e não atualizada)
- Use regras Sigma de "caça", extraídas diretamente deste projeto https://github.com/mthcht/ThreatHunting-Keywords-sigma-rules com pysigma para a conversão
- Use algumas das minhas listas como uma lista de IOCs com consultas wildcard https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl-wildcard-query.html#wildcard-top-level-params
### Exemplo de Dashboard

### Splunk4DFIR
Outro exemplo de uso dos arquivos csv do projeto com splunk para caçar em artefatos e logs de DFIR: https://github.com/mf1d3l/Splunk4DFIR

### Outras listas incríveis para detecção
Eu mantenho alguns artefatos relevantes em listas separadas; essas listas são mais precisas e podem ser usadas em regras de detecção. Elas estão disponíveis neste [repositório do github](https://github.com/mthcht/awesome-lists/tree/main/Lists)
você encontrará:
Minha planilha de coleta de inteligência para planejar sessões de Threat Hunting

- 📋 Listas: https://github.com/mthcht/awesome-lists/tree/main/Lists
- 🕵️♂️ Guias de ThreatHunting: https://mthcht.medium.com/list/threat-hunting-708624e9266f
- 🚰 Named pipes suspeitos: [suspicious_named_pipe_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_named_pipe_list.csv)
- 🌐 TLDs suspeitos (atualizados automaticamente): [[suspicious_TLDs]](https://github.com/mthcht/awesome-lists/tree/main/Lists/TLDs)
- 🌐 ASNs suspeitos (atualizados automaticamente): [[suspicious ASNs]](https://github.com/mthcht/awesome-lists/tree/main/Lists/ASNs)
- 🔧 Serviços do Windows suspeitos: [suspicious_windows_services_names_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_services_names_list.csv)
- ⏲️ Tarefas do Windows suspeitas: [suspicious_windows_tasks_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_tasks_list.csv)
- 🚪 Porta de destino suspeita: [suspicious_ports_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_ports_list.csv)
- 🛡️ Regras de Firewall suspeitas: [suspicious_windows_firewall_rules_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_firewall_rules_list.csv)
- 🆔 User-agent suspeito: [suspicious_http_user_agents_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_http_user_agents_list.csv)
- 📇 IDs USB suspeitos: [suspicious_usb_ids_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_usb_ids_list.csv)
- 🔢 Endereço MAC suspeito: [suspicious_mac_address_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_mac_address_list.csv)
- 📛 Hostname suspeito: [suspicious_hostnames_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_hostnames_list.csv)
- 🧮 Metadados de Executáveis: [executables_metadata_informations_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Windows%20Metadata/executables_metadata_informations_list.csv)
- 🕸️ Lista de servidores DNS over HTTPS: [dns_over_https_servers_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/dns_over_https_servers_list.csv)
- 📚 Hijacklibs (atualizados automaticamente): [hijacklibs_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Hijacklibs/hijacklibs_list.csv)
- 🌐 Listas de Nós TOR (atualizadas automaticamente): https://github.com/mthcht/awesome-lists/tree/main/Lists/TOR
- 🛠️ Lista LOLDriver (atualizada automaticamente): [loldrivers_only_hashes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Drivers/loldrivers_only_hashes_list.csv)
- 🛠️ Lista de Bootloaders Maliciosos (atualizada automaticamente): [malicious_bootloaders_only_hashes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Drivers/malicious_bootloaders_only_hashes_list.csv)
- 📜 Lista de Certificados SSL Maliciosos (atualizada automaticamente): [ssl_certificates_malicious_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/SSL%20CERTS/ssl_certificates_malicious_list.csv)
- 🖥️ Detecção de RMM: https://github.com/mthcht/awesome-lists/tree/main/Lists/RMM
- 👤🔑 Funções e grupos importantes para AD/EntraID/AWS: [[permissions]](https://github.com/mthcht/awesome-lists/tree/main/Lists/permissions)
- 💻🔒 Extensões de arquivo conhecidas de ransomware: [ransomware_extensions_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/ransomware_extensions_list.csv)
- 💻🔒 Nomes de arquivo conhecidos de notas de resgate de ransomware: [ransomware_notes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/ransomware_notes_list.csv)
- 📝 Regras ASR do Windows: [windows_asr_rules.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/windows_asr_rules.csv)
- 🌐 Listas DNSTWIST (atualizadas automaticamente): [Domínios Padrão DNSTWIST + script](https://github.com/mthcht/awesome-lists/tree/main/Lists/DNSTWIST)
- 🌍 Listas de endereços IP de VPN (atualizadas automaticamente):
- 🛡️ NordVPN: [nordvpn_ips_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/VPN/NordVPN/nordvpn_ips_list.csv)
- 🛡️ ProtonVPN: [protonvpn_ip_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/VPN/ProtonVPN/protonvpn_ip_list.csv)
- 🏢 Listas de Faixas de IP de Empresas (atualizadas automaticamente): [Listas Padrão + script](https://github.com/mthcht/awesome-lists/tree/main/Lists/Ranges_IP_Address_Company_List/bgp.he.net)
- 🔗 Outras listas de correlação: https://github.com/mthcht/awesome-lists/tree/main/Lists/Others
- 📋 Listas que preciso terminar: https://github.com/mthcht/awesome-lists/tree/main/todo
Confira estes [Guias](https://github.com/mthcht/awesome-lists/tree/main/Lists#how-to-use-the-lists) para usar algumas das listas:
- [Pesquisas de Serviços do Windows](https://detect.fyi/threat-hunting-suspicious-windows-service-names-2f0dceea204c)
- [Pesquisas de User-Agents](https://mthcht.medium.com/threat-hunting-suspicious-user-agents-3dd764470bd0)
- [Pesquisas de DNS Over HTTPS](https://mthcht.medium.com/detecting-dns-over-https-30fddb55ac78)
- [Pesquisas de TLDs Suspeitos](https://mthcht.medium.com/threat-hunting-suspicious-tlds-a742c2adbf58)
- [Pesquisas de HijackLibs](https://mthcht.medium.com/detect-dll-hijacking-techniques-from-hijacklibs-with-splunk-c760d2e0656f)
- [Pesquisas de Phishing e DNSTWIST](https://detect.fyi/detecting-phishing-attempts-with-dnstwist-37c426b3bbb8)
- [Pesquisas de extensões de navegadores](https://mthcht.medium.com/detecting-browser-extensions-installations-e0ac2b45c46b)
- [C2 se escondendo à vista](https://mthcht.medium.com/c2-hiding-in-plain-sight-7a83963b9344)
- [Artefatos de HTML Smuggling](https://mthcht.medium.com/detecting-html-smuggling-phishing-attempts-15af824e60e4)
- [Pesquisas de PSEXEC e ferramentas semelhantes](https://mthcht.medium.com/detecting-psexec-and-similar-tools-c812bf3dca6c)
- [Detecção de Time Slipping](https://mthcht.medium.com/event-log-manipulations-1-time-slipping-55bf95631c40)
- [Named pipes suspeitos](https://medium.com/detect-fyi/threat-hunting-suspicious-named-pipes-a4206e8a4bc8)
... mais [aqui](https://github.com/mthcht/awesome-lists/tree/main/Lists#how-to-use-the-lists)
## Busca DFIR por palavras-chave em arquivos (Sem SIEM)
Após conduzir uma revisão minuciosa de várias ferramentas, descobri que o [ripgrep](https://github.com/BurntSushi/ripgrep) supera significativamente seus concorrentes quando se trata de corresponder rapidamente uma extensa lista de padrões regex em cada linha de um arquivo de log grande ou até mesmo em vários arquivos simultaneamente. Ele se mostrou a solução mais eficiente para lidar com grandes volumes de dados, proporcionando velocidade e flexibilidade incomparáveis.
### Procure por malwares em arquivos de log com **Ripgrep** e a lista 'only_keywords_regex.txt'
#### `rg.exe -f .\only_keywords_regex.txt .\EvtxECmd_Output.csv --multiline --ignore-case`
- .\only_keywords_regex.txt serve como arquivo de origem das palavras-chave de threat hunting, transformadas em padrões regex para correspondência precisa. Esses padrões são originados do arquivo threathunting-keywords.csv, que passou por um processo de conversão para otimizar a compatibilidade com operações regex.
- .\EvtxECmd_Output.csv representa o arquivo de destino no qual a pesquisa será conduzida. Nesse contexto, é um formato .csv de um log de eventos do Windows, produzido pela exportação de logs evtx. No entanto, a flexibilidade do ripgrep permite substituí-lo por qualquer arquivo de sua escolha para operações detalhadas de busca de padrões.
- A opção --multiline permite que o ripgrep lide e corresponda efetivamente a padrões que se estendem por várias linhas, ampliando significativamente o escopo da pesquisa.
Você obterá as linhas correspondentes assim, com o número da linha (mas sem a palavra-chave correspondente)


#### Opção melhor para arquivos muito grandes (no Windows):
[DFIR_hunt_in_file.ps1](https://github.com/mthcht/ThreatHunting-Keywords/blob/main/DFIR_hunt_in_file.ps1)
`powershell -ep Bypass -File .\DFIR_hunt_in_file.ps1 -patternFile "only_keywords_regex.txt" -targetFile "C:\Users\mthcht\collection\20230406154410_EvtxECmd_Output.csv" -rgPath "C:\Users\mthcht\Downloads\ripgrep-13.0.0-x86_64-pc-windows-msvc\ripgrep-13.0.0-x86_64-pc-windows-msvc\rg.exe"`
- `-targetFile`: especifica o arquivo a ser pesquisado (no exemplo, um log extraído do DFIR-ORC)
- `-patternFile`: o arquivo contendo os padrões regex `only_keywords_regex.txt`
- `-rgPath`: o caminho do executável ripgrep
conteúdo do script powershell (incluído no repositório):```powershell
param (
[Parameter(Mandatory=$true)]
[string]$patternFile,
[Parameter(Mandatory=$true)]
[string]$targetFile,
[Parameter(Mandatory=$true)]
[string]$rgPath
)
Start-Transcript -Path "$PSScriptRoot\result_search.log" -Append -Force -Verbose
$totalLines = (Get-Content $patternFile | Measure-Object -Line).Lines
$currentLine = 0
Get-Content $patternFile | ForEach-Object {
$currentLine++
Write-Host "Searching for pattern $currentLine of $totalLines : $_"
& $rgPath --multiline --ignore-case $_ $targetFile | Write-Output
}
Stop-Transcript -Verbose
O resultado da pesquisa estará em result_search.log no mesmo diretório do script.

todo
No powershell é muito mais lento, mas se você ainda quiser fazer dessa forma, pode usar o script abaixo; ele informará o número da linha em que houve correspondência e a palavra-chave correspondente:
powershell.exe -ep Bypass -File .\hunt_keywords_windows.ps1 -k .\only_keywords.txt -f .\EvtxECmd_Output.csv
[Parameter(Mandatory=$true)]
[string]$kw
)
$Keywords = Get-Content $kw $result = @()
foreach ($Keyword in $Keywords) { $SearchTerm = $Keyword.Replace("", ".") $SearchTerm = [Regex]::Escape($SearchTerm).Replace(".*", ".*")
$reader = New-Object System.IO.StreamReader($file)
$lineNumber = 0
while (($line = $reader.ReadLine()) -ne $null) {
$lineNumber++
if ($line -match $SearchTerm) {
$result += New-Object PSObject -Property @{
'Keyword' = $Keyword
'LineNumber' = $lineNumber
'Line' = $line
}
}
}
$reader.Close()
}
$result | Out-GridView Read-Host -Prompt "Press Enter to exit"
</details>
### Regras YARA

Todos os padrões de detecção deste projeto são automaticamente exportados para regras yara em [ThreatHunting-Keywords-yara-rules](https://github.com/mthcht/ThreatHunting-Keywords-yara-rules)
Alguns exemplos de caça com as regras yara:




## Tabela de dados rápida para pesquisa de palavras-chave
https://mthcht.github.io/ThreatHunting-Keywords/

## Falsos positivos
Contribua e adicione seus falsos positivos à [lista](https://github.com/mthcht/ThreatHunting-Keywords/blob/main/_false_positives/false_positives_offensive_keywords.md) de falsos positivos esperados
## Regras SIGMA
Confira a lookup traduzida em [regras SIGMA](https://github.com/mthcht/ThreatHunting-Keywords-sigma-rules) normalmente atualizo ao mesmo tempo :)

## Mapeamento de técnicas MITRE ATT&CK
com o add-on do Splunk https://splunkbase.splunk.com/app/5742

Cobertura para 2242 ferramentas (atualizado em 2024/08/30):

busca do Splunk:
<details>```
| inputlookup threathunting-keywords.csv
| stats count by metadata_tool metadata_tool_techniques
| makemv delim=" - " metadata_tool_techniques
| mvexpand metadata_tool_techniques
| stats count by metadata_tool_techniques
Dashboards do Splunk (este é apenas um exemplo; uma grande variedade de filtros pode ser aplicada usando os campos disponíveis no arquivo):
exemplo de dashboard xml do splunk:



Contribuições, problemas e pedidos de recursos são bem-vindos!
``
Forneça o nome da ferramenta.
``
Forneça um link para o site oficial da ferramenta ou repositório de código-fonte (GitHub, GitLab, etc.). Se houver documentação disponível, inclua-a.
``
Descreva o propósito, a funcionalidade e os recursos notáveis da ferramenta. Se não tiver certeza, deixe em branco e eu revisarei a ferramenta em mais detalhes.
``
Se você tiver informações sobre uso indevido conhecido ou potencial desta ferramenta por atores maliciosos, compartilhe-as aqui.
Escolha a categoria mais apropriada para a ferramenta:
Decidirei se vale a pena adicionar uma ferramenta à lista. Ferramentas amplamente usadas e reconhecidas pela comunidade têm mais chances de serem incluídas do que ferramentas obscuras ou novas.
offensive tool keyword: Essas palavras-chave estão relacionadas a ferramentas ofensivas ou apresentam alta confiança de intenção maliciosa. É crucial que esses termos tenham relevância e confiabilidade na detecção de ameaças potenciais (baixa taxa de falsos positivos)greyware tool keyword: Palavras-chave nesta categoria correspondem a ferramentas 'legítimas' que são abusadas por atores maliciosos. Como essas ferramentas também têm usos legítimos, o potencial de falsos positivos é inerentemente maior. É importante interpretar esses resultados com o entendimento de que nem todas as detecções podem significar atividade maliciosasignature keyword: Essas palavras-chave podem não estar diretamente associadas a ferramentas, mas podem incluir nomes de assinaturas de produtos de segurança, strings específicas ou palavras significativas na detecção de ameaças.metadata_tool: Nome da ferramenta que queremos detectar
metadata_description: descrição da ferramenta que queremos detectar
metadata_tool_techniques: Técnicas MITRE relacionadas à ferramenta que queremos detectar
metadata_tool_tactics: Táticas MITRE relacionadas à ferramenta que queremos detectar
metadata_malwares_name: Nomes de variantes de malware que utilizam a ferramenta em questão
metadata_groups_name: Nomes de grupos de atores de ameaças associados à ferramenta
metadata_category: Nome da categoria global da ferramenta. Isso pode mudar posteriormente e sugestões são bem-vindas.
metadata_link: link para a ferramenta (código-fonte, artigos, amostras, blog ...)
metadata_enable_endpoint_detection: Campo que indica se a palavra-chave pode ser empregada efetivamente em buscas nos logs de endpoint. Isso inclui, mas não se limita a, logs de eventos do Windows, EDR, logs do PowerShell, auditd, sessões de bastion, Sysmon ou qualquer fonte de dados que contenha campos de atividade de processos e arquivos.
metadata_enable_proxy_detection: Campo que indica a aplicabilidade da palavra-chave para buscas em logs de rede (Proxy, logs de DNS ou qualquer dado com consultas e URLs originadas da rede interna)
metadata_popularity_score: pontuação de 1 a 10 (popularidade baixa a alta)
metadata_severity_score: pontuação de 1 a 10 (gravidade baixa a alta)
metadata_tags: tags para identificar artefatos específicos; múltiplas tags podem ser associadas a uma palavra-chave. Quando alguns dos artefatos específicos não podem ser adicionados às listas sem mais contexto de detecção, eles são adicionados nas minhas outras listas incríveis para detecção
metadata_comment: Este campo pode conter um comentário útil adicionado para a palavra-chave.
metadata_github_stars: Número de estrelas no projeto do GitHub (se a ferramenta estiver no GitHub; caso contrário, o valor é N/A). Isso é usado para calcular a pontuação de popularidade
metadata_github_forks: Número de forks no projeto do GitHub (se a ferramenta estiver no GitHub; caso contrário, o valor é N/A). Pode ser usado para estatísticas de dashboard das ferramentas mais utilizadas
metadata_github_created_at: Data de criação do projeto no GitHub (se a ferramenta estiver no GitHub; caso contrário, o valor é N/A). Pode ser usada para estatísticas de dashboard
metadata_github_updated_at: Data da última atualização do projeto no GitHub (se a ferramenta estiver no GitHub; caso contrário, o valor é N/A). Pode ser usada para acompanhar atualizações importantes de ferramentas ofensivas e ajustar as detecções por palavras-chave
_rawkeyword_rawkeyword_detection_raw| search metadata_description!="" AND metadata_enable_endpoint_detection=1 aqui focamos apenas em logs de endpoints, então adicionamos metadata_enable_endpoint_detection=1 para corresponder apenas às keywords relevantes para logs de endpoints e metadata_description!="" para ter apenas as keywords correspondidas| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype aqui fiz um filtro rápido sem todos os campos do lookup para o exemplo (mas você também pode adicioná-los se quiser ter mais possibilidades de exclusão), isso nos permite ter facilmente uma ideia de qual keyword está correspondendo muito, para que possamos excluir facilmente a categoria ou a ferramenta se tivermos muitos falsos positivos para ela!|loadjob myjobid, podemos agora manipular a saída com os logs relevantes sem pesquisar novamente em todos os logs.e use esta visualização do Splunk: https://splunkbase.splunk.com/app/5742
