
위협 헌팅 세션을 위한 키워드 및 아티팩트 모음
🎯 ThreatHunting 세션을 위한 키워드 목록


Threat hunting은 조직의 네트워크 또는 시스템 내에서 자동화된 보안 조치를 우회했을 수 있는 악성 활동을 탐지하기 위한 사전 예방적이고 반복적인 접근 방식입니다. 보안 알림에 의해 트리거되는 수동적 조사와 달리, threat hunting은 위협 인텔리전스(TI) 기반 점검과 체계적 및 기회주의적 분석에서 도출된 가설에 의해 추진됩니다. 이러한 가설 💡은 헌터가 알려지지 않은 위협, 잠재적 위협, 또는 보안 탐지를 회피했을 수 있는 알려진 위협뿐만 아니라 자동화된 시스템이 놓치거나 제외할 수 있는 취약점 또는 침해 지표(IoC)를 발견하는 데 도움을 줍니다. 이 프로세스는 또한 알림/대시보드의 선행 지표(precursor) 식별과 SOC/트리아지 워크플로 개선에 중점을 두면서 섀도우 자산 인벤토리 관리에 기여하고 추가 조사가 필요한 중/저신뢰도 이벤트를 에스컬레이션합니다. 주요 목표는 위협 행위자가 사용하는 전술, 기법, 절차(TTP)를 식별하여 조직이 잠재적 공격을 선제적으로 탐지하고 완화하는 능력을 향상시키는 것입니다.

SOC 내에서 고품질 탐지 규칙을 유지하기 위해 부분적으로 자동화된 threat hunting 세션을 구성하는 프로세스 제안입니다.

SOC 팀은 탐지 성숙도 피라미드의 모든 수준에 걸쳐 최소한의 오탐으로 알려진 위협을 대상으로 하는 고신뢰도 탐지를 배포하는 데 중점을 둡니다. Threat hunting은 높은 오탐률이 발생하기 쉬운 알려지지 않은 위협, 고급 TTP 및 이상 징후를 처리하여 이러한 접근을 보완하고, 표준 SOC 역량을 넘어 탐지 범위의 공백을 메우고 확장합니다.


이상적으로 각 threat hunting 세션은 명확한 목표를 가져야 합니다. 이 순서도는 준비와 조사부터 실행 가능한 권장 사항까지 프로세스를 안내하는 체계적인 접근 방식을 제공합니다.
🎯 ThreatHunting 세션을 위한 키워드 목록
ThreatHunting-Keywords 목록은 위협 행위자(또는 레드팀러 😆)가 로그에서 유명한 악용 도구의 기본 구성을 사용하는 것을 식별하는 데 도움이 되므로 SIEM에서 정적 분석을 수행하는 Threat Hunter, SOC 및 CERT 팀에게 유용할 수 있습니다. 이 목록은 지속적인 관련성 측면에서 IOC 피드와 다릅니다. 여기의 키워드에는 '만료 날짜'가 없으며 포함된 후 몇 년이 지나도 위협을 탐지할 수 있습니다. 또한 와일드카드와 대소문자를 구분하지 않는 매칭을 허용하는 유연성을 가지며 기본 키워드에만 집중합니다.
주로 Threat Hunting용으로 설계된 이 목록은 복잡한 시나리오에서 유용할 수 있습니다. 관리하지 않고 파싱되지 않은 데이터가 있는 SIEM에 접근할 수 있거나, 잘 관리되는 SIEM을 갖춘 SOC 팀의 일원인 경우, 여기에 제공된 예시는 아무것도 파싱할 필요 없이 악성 활동 탐지 프로세스를 신속하게 진행하는 데 도움이 될 수 있습니다. 로그가 이미 파싱된 경우 이 목록을 사용하여 데이터 내 필드를 매칭할 수 있으며, 선택한 키워드 유형 범주에 따라 오탐률이 충분히 낮다면 탐지 규칙으로 전환될 수 있습니다.
⚠️ 이 목록에는 모든 것이 추가될 수는 없습니다. 여기서는 복잡한 행동 탐지를 수행하지 않으며, 기본 구성을 탐지하는 것을 목표로 하는 필드 또는 원시 로그의 단순 키워드 탐지만 수행합니다.
⚠️ 목록의 많은 도구에는 전용 탐지 규칙, 임계값이 있는 이벤트 상관 관계 및 고유한 프로세스 관계가 있습니다... 여기서는 도구에 대한 모든 가능한 탐지를 다루지 않고 키워드 탐지만 다룹니다.
SOC(보안 운영 센터)의 일원으로서 필드 또는 이벤트 상관 관계 없이 단순 키워드 탐지에만 의존하는 수백 개의 탐지 규칙을 관리하고 있다면 접근 방식을 재고해 보십시오. 제 생각에는 이러한 규칙이 개별 탐지 규칙이 되어서는 안 됩니다. 대신 Splunk와 같은 플랫폼을 사용하지 않는 경우 구현이 더 어려울 수 있지만 이와 같은 통합 목록에 더 적합할 수 있습니다.
이 접근 방식은 단순 필드 키워드 탐지를 한곳에서 체계적으로 관리하면서 고품질의 목적 있는 규칙 생성을 장려합니다. 그 결과는 무엇일까요? 모든 것을 포괄하는 하나의 종합 탐지 규칙입니다. 이를 통해 프로세스를 간소화하고 탐지 역량을 최적화합니다.
Incident Responder의 경우 조사 중에 이 목록을 원시 로그나 파일에 사용하여 Yara 규칙, powershell 스크립트 또는 Splunk4DFIR로 로그를 신속하게 수집하여 알려진 악용 도구를 빠르게 식별할 수 있습니다.
단순 키워드 탐지에 의한 탐지를 회피하려면 작전 중 사용하는 도구와 연관될 수 있는 모든 사용자 정의 문자열, 클래스 또는 함수 이름, 변수 이름, 인수 이름, 실행 파일 이름, 기본 사용자 에이전트, 인증서 또는 기타 문자열을 다시 컴파일하고 이름을 바꾸는 것이 중요합니다. 정상 트래픽에 섞이도록 모든 것에 가장 일반적인 이름을 사용하십시오. 여기에 있는 스크립트는 이러한 항목 중 일부를 식별하는 데 도움이 될 수 있습니다.
그러나 공개 "레드팀 도구"를 개발하는 경우 고유한 이름을 사용하여 블루팀을 돕는 것을 고려하십시오. 이국적인 포트, 사용자 정의 인증서, 고유한 사용자 에이전트, 흔하지 않은 특정 함수 이름과 인수가 있는 기본 구성을 사용하십시오. 이는 단순 키워드 탐지에 사용할 수 있는 명확한 시그니처를 만드는 데 도움이 되므로 블루팀이 적어도 스크립트 키디를 쉽게 탐지할 수 있습니다.
헤더: 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: 이 열의 항목은 Threat Hunting에 사용되는 대소문자를 구분하지 않는 키워드를 나타냅니다. 이러한 키워드는 유연하며 필요에 따라 검색 매개변수를 넓히거나 좁히기 위해 와일드카드 사용을 허용합니다.
metadata_keyword_regex: 이 열의 항목은 키워드에 대한 정규식 패턴 탐지를 나타냅니다. 이러한 패턴은 정밀한 탐지 기능을 제공하도록 정제되었으며 YARA, ripgrep 또는 유사한 탐지 도구와 함께 사용하기에 적합합니다.
metadata_keyword_type: 키워드의 유형입니다. 현재 세 가지 유형이 있습니다:
offensive tool keyword: 이 키워드는 공격 도구와 관련되거나 악의적인 의도의 높은 신뢰도를 나타냅니다. 이러한 용어는 잠재적 위협 탐지에서 관련성과 신뢰성을 유지하는 것이 중요합니다(낮은 오탐률).Splunk에 threathunting-keywords.csv 목록을 업로드합니다.
lookup threathunting-keywords.csv에 대해 threathunting-keywords라는 이름의 lookup 정의를 생성합니다.
WILDCARD(keyword)를 추가하고 Case sensitive match가 선택되지 않았는지 확인합니다.
transforms.conf``` [threathunting-keywords] batch_index_query = 0 case_sensitive_match = 0 filename = threathunting-keywords.csv match_type = WILDCARD(keyword)
- 이제 우리는 lookup 정의를 사용하여 사냥할 수 있습니다 🏹
- :warning: 다음 섹션 검색이 작동하지 않는 것 같으면 splunk 리소스 제한 설정 때문일 수 있습니다. 특히 기본 구성으로 splunk를 실행 중인 경우에 그렇습니다. 처음에는 `[lookup]` 스탠자의 `max_memtable_bytes` 값을 늘리는 것을 고려해야 할 수도 있습니다.
## `threathunting-keywords` 사용 예시:

### 원시 로그에서 모든 키워드 사냥하기 😱```
`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)
작업을 백그라운드로 보내고 작업 ID를 유지하세요.

myendpointslogs는 모든 엔드포인트 로그를 검색하는 매크로입니다. Windows 로그, EDR 텔레메트리, sysmon, auditd, 배스천 세션, PowerShell 실행 로그 또는 프로세스 활동이나 파일 활동을 모니터링하는 기타 모든 로그가 될 수 있습니다. (매크로를 사용하지 않으면 매크로를 인덱스, 태그 또는 데이터 모델로 대체할 수 있습니다)
|lookup 전에 TERM() 명령으로 특정 검색을 필터링하세요.| lookup 이것은 매우 중요합니다. 이와 같은 대규모 lookup의 경우 항상 |inputlookup 대신 |lookup을 사용하세요. |lookup은 번들이 복제될 때 인덱서에 푸시된 lookup을 사용하지만, |inputlookup은 매번 모든 lookup 내용이 포함된 검색을 인덱서로 보냅니다. |lookup을 사용하면 여기서 엄청난 성능 향상을 얻을 수 있습니다(이 검색은 대규모 환경에서 몇 시간 동안 실행되므로 검색을 최적화하는 것이 좋습니다.... keyword as _raw OUTPUT keyword as keyword_detection 이것은 lookup에서 _raw라는 필드와 keyword 필드를 매칭하는 부분입니다. Splunk에서 는 파싱되지 않은 원시 로그입니다(우리의 사용 사례). 키워드가 일치하면 필드는 여기() 필드와 일치한 lookup의 키워드를 표시합니다.결과 필터링``` | loadjob 1684146257.1495958 | search NOT (keyword_detection IN ("fixme","fixme","fixme")) NOT (metadata_keyword_type IN ("fixme","fixme")) NOT (raw IN ("fixme","fixme","fixme"))
필수 키워드, 원시 텍스트 또는 키워드 유형을 제외합니다.
만약 `greyware tool keyword` 유형(공격자에 의해 악용되는 합법적인 도구 키워드)을 제외하기로 결정한다면, 이 환경에는 이러한 종류의 도구에 대한 결과가 너무 많기 때문에 두 가지 옵션이 있습니다:
- 초기 검색 시작 시 필터링합니다.```
`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)
I added a metadata_keyword_type="offensive tool keyword" to only focus on offensive tools that i am sure are used by malicious actors
그래서 그것이 엔드포인트 로그에서 원시 로그를 검색하는 우리의 사용 사례였습니다. 네트워크 로그(쿼리나 url을 기록할 수 있는 모든 것)에서 키워드를 검색하려면 다음과 같이 변경하기만 하면 됩니다:```
`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)
이제 첫 번째 검색과 동일하지만 데이터소스를 mynetworklogs로 변경했고, networklogs의 관련 키워드와 매칭하기 위해 metadata_enable_proxy_detection=1을 추가했습니다 (이 경우 프록시 및 DNS 로그가 있으면 더 좋습니다)
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)
#### 쿼리 필드에서만 일치:```
`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)
#### 속도:
속도가 우려되거나 이를 예약된 탐지 규칙으로 구현하려는 경우, 사용하려는 `metadata_keyword_type` 또는 `metadata_tool` 열을 선택하여 lookup을 서로 다른 여러 개의 lookup으로 분할하는 것을 고려할 수 있습니다.
`|lookup` 이후 search 명령을 사용한 필터링은 검색 프로세스를 빠르게 만들지 않습니다. lookup을 나누지 않고 특정 부분에 집중하려면 `|inputlookup` 명령과 where 절을 함께 사용해야 합니다. 이 방법은 더 많은 CPU 리소스를 소비할 수 있지만 일반적으로 더 빠르게 실행됩니다. 자세한 내용은 inputlookup에 대한 Splunk 문서를 참조하세요: https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Inputlookup
#### ELK 사용 시:
Elastic Stack을 사용하는 경우 리스트에 많은 제한이 있습니다(특수 문자, 공백 등을 사용할 수 없습니다). 선택할 수 있는 옵션은 3가지입니다:
- 같은 리포지토리에서 제공되는 다른 리스트를 사용합니다: https://github.com/mthcht/ThreatHunting-Keywords/tree/main/elk (threathunting-keywords.csv의 직접 추출본이 아니라 ELK용으로 수정되었으며 업데이트되지 않습니다)
- 이 프로젝트에서 직접 추출한 Sigma "hunting" 규칙을 사용합니다(변환에는 pysigma 사용): https://github.com/mthcht/ThreatHunting-Keywords-sigma-rules
- 와일드카드 쿼리와 함께 제 리스트 중 일부를 IOC 리스트로 사용합니다: https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl-wildcard-query.html#wildcard-top-level-params
### 대시보드 예시

### Splunk4DFIR
프로젝트 csv 파일을 Splunk와 함께 사용하여 DFIR 아티팩트 및 로그를 헌팅하는 또 다른 예: https://github.com/mf1d3l/Splunk4DFIR

### 탐지를 위한 기타 유용한 리스트
관련 아티팩트 일부를 별도의 리스트로 유지하고 있습니다. 이 리스트들은 더 정밀하며 탐지 규칙에 사용할 수 있습니다. 이 [github repo](https://github.com/mthcht/awesome-lists/tree/main/Lists)에서 확인할 수 있습니다.
다음을 찾을 수 있습니다:
Threat Hunting 세션 계획을 위한 정보 수집 시트

- 📋 리스트: https://github.com/mthcht/awesome-lists/tree/main/Lists
- 🕵️♂️ Threat Hunting 가이드: https://mthcht.medium.com/list/threat-hunting-708624e9266f
- 🚰 의심스러운 명명된 파이프: [suspicious_named_pipe_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_named_pipe_list.csv)
- 🌐 의심스러운 TLD(자동 업데이트): [[suspicious_TLDs]](https://github.com/mthcht/awesome-lists/tree/main/Lists/TLDs)
- 🌐 의심스러운 ASN(자동 업데이트): [[suspicious ASNs]](https://github.com/mthcht/awesome-lists/tree/main/Lists/ASNs)
- 🔧 의심스러운 Windows 서비스: [suspicious_windows_services_names_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_services_names_list.csv)
- ⏲️ 의심스러운 Windows 작업: [suspicious_windows_tasks_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_tasks_list.csv)
- 🚪 의심스러운 대상 포트: [suspicious_ports_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_ports_list.csv)
- 🛡️ 의심스러운 방화벽 규칙: [suspicious_windows_firewall_rules_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_windows_firewall_rules_list.csv)
- 🆔 의심스러운 사용자 에이전트: [suspicious_http_user_agents_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_http_user_agents_list.csv)
- 📇 의심스러운 USB ID: [suspicious_usb_ids_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_usb_ids_list.csv)
- 🔢 의심스러운 MAC 주소: [suspicious_mac_address_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_mac_address_list.csv)
- 📛 의심스러운 호스트 이름: [suspicious_hostnames_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/suspicious_hostnames_list.csv)
- 🧮 메타데이터 실행 파일: [executables_metadata_informations_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Windows%20Metadata/executables_metadata_informations_list.csv)
- 🕸️ 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(자동 업데이트): [hijacklibs_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Hijacklibs/hijacklibs_list.csv)
- 🌐 TOR 노드 리스트(자동 업데이트): https://github.com/mthcht/awesome-lists/tree/main/Lists/TOR
- 🛠️ LOLDriver 리스트(자동 업데이트): [loldrivers_only_hashes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Drivers/loldrivers_only_hashes_list.csv)
- 🛠️ 악성 부트로더 리스트(자동 업데이트): [malicious_bootloaders_only_hashes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/Drivers/malicious_bootloaders_only_hashes_list.csv)
- 📜 악성 SSL 인증서 리스트(자동 업데이트): [ssl_certificates_malicious_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/SSL%20CERTS/ssl_certificates_malicious_list.csv)
- 🖥️ RMM 탐지: https://github.com/mthcht/awesome-lists/tree/main/Lists/RMM
- 👤🔑 AD/EntraID/AWS에 중요한 역할 및 그룹: [[permissions]](https://github.com/mthcht/awesome-lists/tree/main/Lists/permissions)
- 💻🔒 랜섬웨어 알려진 파일 확장자: [ransomware_extensions_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/ransomware_extensions_list.csv)
- 💻🔒 랜섬웨어 알려진 파일명 랜섬 노트: [ransomware_notes_list.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/ransomware_notes_list.csv)
- 📝 Windows ASR 규칙: [windows_asr_rules.csv](https://github.com/mthcht/awesome-lists/blob/main/Lists/windows_asr_rules.csv)
- 🌐 DNSTWIST 리스트(자동 업데이트): [DNSTWIST Default Domains + script](https://github.com/mthcht/awesome-lists/tree/main/Lists/DNSTWIST)
- 🌍 VPN IP 주소 리스트(자동 업데이트):
- 🛡️ 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)
- 🏢 회사 IP 범위 리스트(자동 업데이트): [Default Lists + script](https://github.com/mthcht/awesome-lists/tree/main/Lists/Ranges_IP_Address_Company_List/bgp.he.net)
- 🔗 기타 상관관계 리스트: https://github.com/mthcht/awesome-lists/tree/main/Lists/Others
- 📋 완성해야 할 리스트: https://github.com/mthcht/awesome-lists/tree/main/todo
리스트 중 일부를 사용하려면 다음 [가이드](https://github.com/mthcht/awesome-lists/tree/main/Lists#how-to-use-the-lists)를 확인하세요:
- [Windows 서비스 검색](https://detect.fyi/threat-hunting-suspicious-windows-service-names-2f0dceea204c)
- [사용자 에이전트 검색](https://mthcht.medium.com/threat-hunting-suspicious-user-agents-3dd764470bd0)
- [DNS Over HTTPS 검색](https://mthcht.medium.com/detecting-dns-over-https-30fddb55ac78)
- [의심스러운 TLD 검색](https://mthcht.medium.com/threat-hunting-suspicious-tlds-a742c2adbf58)
- [HijackLibs 검색](https://mthcht.medium.com/detect-dll-hijacking-techniques-from-hijacklibs-with-splunk-c760d2e0656f)
- [피싱 및 DNSTWIST 검색](https://detect.fyi/detecting-phishing-attempts-with-dnstwist-37c426b3bbb8)
- [브라우저 확장 프로그램 검색](https://mthcht.medium.com/detecting-browser-extensions-installations-e0ac2b45c46b)
- [눈에 띄는 곳에 숨어 있는 C2](https://mthcht.medium.com/c2-hiding-in-plain-sight-7a83963b9344)
- [HTML 스머글링 아티팩트](https://mthcht.medium.com/detecting-html-smuggling-phishing-attempts-15af824e60e4)
- [PSEXEC 및 유사 도구 검색](https://mthcht.medium.com/detecting-psexec-and-similar-tools-c812bf3dca6c)
- [Time Slipping 탐지](https://mthcht.medium.com/event-log-manipulations-1-time-slipping-55bf95631c40)
- [의심스러운 명명된 파이프](https://medium.com/detect-fyi/threat-hunting-suspicious-named-pipes-a4206e8a4bc8)
... 더 많은 내용은 [여기](https://github.com/mthcht/awesome-lists/tree/main/Lists#how-to-use-the-lists)
## DFIR 파일 내 키워드 헌팅 (SIEM 없음)
여러 도구를 철저히 검토한 결과, [ripgrep](https://github.com/BurntSushi/ripgrep)이 대용량 로그 파일이나 여러 파일의 각 줄에 대해 방대한 정규식 패턴 목록을 신속하게 매칭하는 데 있어 경쟁 도구들을 크게 능가한다는 것을 발견했습니다. 이는 막대한 양의 데이터를 처리하는 데 가장 효율적인 솔루션으로 입증되었으며, 비교할 수 없는 속도와 유연성을 제공합니다.
### **Ripgrep** 및 'only_keywords_regex.txt' 리스트로 로그 파일에서 악성 흔적 헌팅
#### `rg.exe -f .\only_keywords_regex.txt .\EvtxECmd_Output.csv --multiline --ignore-case`
- .\only_keywords_regex.txt은 위협 헌팅 키워드의 원본 파일 역할을 하며, 정확한 매칭을 위해 정규식 패턴으로 변환됩니다. 이러한 패턴은 threahunting-keywords.csv 파일에서 비롯되었으며, 정규식 연산과의 최적 호환성을 위해 변환 과정을 거쳤습니다.
- .\EvtxECmd_Output.csv은 검색이 수행될 대상 파일을 나타냅니다. 여기서는 evtx 로그를 내보내 생성된 Windows 이벤트 로그의 .csv 형식입니다. 그러나 ripgrep의 유연성 덕분에 상세 패턴 검색 작업을 위해 원하는 파일로 자유롭게 교체할 수 있습니다.
- --multiline 옵션을 사용하면 ripgrep이 여러 줄에 걸쳐 있는 패턴을 효과적으로 처리하고 매칭할 수 있어 검색 범위가 크게 확장됩니다.
그러면 줄 번호와 함께 일치하는 줄이 다음과 같이 표시됩니다(일치하는 키워드는 표시되지 않음).


#### 매우 큰 파일에 더 나은 옵션(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`: 검색할 파일을 지정합니다(예시에서는 DFIR-ORC 추출 로그).
- `-patternFile`: 정규식 패턴이 포함된 파일 `only_keywords_regex.txt`
- `-rgPath`: ripgrep 실행 파일의 경로
powershell 스크립트 내용(리포지토리에 포함됨):```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
검색 결과는 스크립트와 동일한 디렉터리의 result_search.log에 저장됩니다.

todo
powershell에서는 훨씬 느리지만, 그래도 이 방법을 사용하려면 아래 스크립트를 사용할 수 있습니다. 일치하는 줄 번호와 해당 키워드를 알려줍니다:
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>
### YARA 규칙

이 프로젝트의 모든 탐지 패턴은 [ThreatHunting-Keywords-yara-rules](https://github.com/mthcht/ThreatHunting-Keywords-yara-rules)의 yara 규칙으로 자동 내보내집니다.
yara 규칙을 사용한 헌팅 예시:




## 키워드 검색을 위한 빠른 데이터 테이블
https://mthcht.github.io/ThreatHunting-Keywords/

## 오탐
예상 오탐 [목록](https://github.com/mthcht/ThreatHunting-Keywords/blob/main/_false_positives/false_positives_offensive_keywords.md)에 여러분의 오탐을 기여하고 추가하세요.
## SIGMA 규칙
[SIGMA 규칙](https://github.com/mthcht/ThreatHunting-Keywords-sigma-rules)으로 변환된 룩업을 확인하세요. 보통 동시에 업데이트합니다 :)

## MITRE ATT&CK 기법 매핑
splunk 애드온 사용 시 https://splunkbase.splunk.com/app/5742

2242개 도구에 대한 적용 범위(2024/08/30 업데이트 기준):

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
Splunk 대시보드 (이것은 단지 하나의 예시일 뿐이며, 파일에서 사용 가능한 필드를 사용하여 다양한 필터를 적용할 수 있습니다):
splunk xml 대시보드 예시:



기여, 이슈, 기능 요청은 언제나 환영합니다!
``
도구의 이름을 제공해 주세요.
``
도구의 공식 웹사이트 또는 소스 코드 저장소(GitHub, GitLab 등) 링크를 제공해 주세요. 문서가 있다면 함께 포함해 주세요.
``
도구의 목적, 기능, 주목할 만한 특징을 설명해 주세요. 확실하지 않다면 비워 두세요. 제가 도구를 더 자세히 검토하겠습니다.
``
악성 행위자가 이 도구를 알려진 방식으로 또는 잠재적으로 악용한 정보가 있다면 여기에 공유해 주세요.
도구에 가장 적합한 분류를 선택해 주세요:
도구를 목록에 추가할 가치가 있는지 제가 결정하겠습니다. 커뮤니티에서 널리 사용되고 인정받는 도구는 잘 알려지지 않았거나 새로운 도구보다 포함될 가능성이 더 높습니다.
greyware tool keyword: 이 범주의 키워드는 악성 행위자에 의해 악용되는 '합법적인' 도구에 해당합니다. 이러한 도구는 합법적인 용도도 있으므로 오탐 가능성이 본질적으로 더 높습니다. 모든 탐지가 악성 활동을 의미하는 것은 아니라는 점을 이해하고 이러한 결과를 해석하는 것이 중요합니다.signature keyword: 이 키워드는 도구와 직접적으로 연관되지 않을 수 있지만 보안 제품 시그니처 이름, 특정 문자열 또는 위협 탐지에 중요한 단어를 포함할 수 있습니다.metadata_tool: 탐지하려는 도구의 이름
metadata_description: 탐지하려는 도구의 설명
metadata_tool_techniques: 탐지하려는 도구와 관련된 MITRE 기법
metadata_tool_tactics: 탐지하려는 도구와 관련된 MITRE 전술
metadata_malwares_name: 해당 도구를 사용하는 악성코드 변종의 이름
metadata_groups_name: 해당 도구와 연관된 위협 행위자 그룹의 이름
metadata_category: 도구의 전반적인 범주 이름입니다. 이는 나중에 변경될 수 있으며 제안을 환영합니다.
metadata_link: 도구에 대한 링크(소스 코드, 기사, 샘플, 블로그 등)
metadata_enable_endpoint_detection: 엔드포인트 로그 검색에 키워드를 효과적으로 사용할 수 있는지 여부를 나타내는 필드입니다. 여기에는 Windows 이벤트 로그, EDR, PowerShell 로그, auditd, 배스천 세션, Sysmon 또는 프로세스 및 파일 활동 필드를 포함한 모든 데이터 소스가 포함되지만 이에 국한되지 않습니다.
metadata_enable_proxy_detection: 네트워크 로그(프록시, DNS 로그 또는 내부 네트워크에서 시작된 쿼리와 URL이 포함된 모든 데이터) 내 검색에 키워드의 적용 가능성을 나타내는 필드입니다.
metadata_popularity_score: 1에서 10까지의 점수(낮음에서 높음 인기도)
metadata_severity_score: 1에서 10까지의 점수(낮음에서 높음 심각도)
metadata_tags: 특정 아티팩트를 식별하기 위한 태그입니다. 키워드에 여러 태그를 연결할 수 있으며, 특정 아티팩트 중 일부가 더 많은 탐지 컨텍스트 없이 목록에 추가될 수 없는 경우 탐지를 위한 다른 멋진 목록들에 추가됩니다.
metadata_comment: 이 필드에는 키워드에 대해 추가된 유용한 주석이 포함될 수 있습니다.
metadata_github_stars: GitHub 프로젝트의 스타 수입니다(도구가 GitHub에 있는 경우, 다른 곳에 있으면 값은 N/A). 이는 인기도 점수를 계산하는 데 사용됩니다.
metadata_github_forks: GitHub 프로젝트의 포크 수입니다(도구가 GitHub에 있는 경우, 다른 곳에 있으면 값은 N/A). 가장 많이 사용되는 도구의 대시보드 통계에 사용할 수 있습니다.
metadata_github_created_at: GitHub 프로젝트의 생성 날짜입니다(도구가 GitHub에 있는 경우, 다른 곳에 있으면 값은 N/A). 대시보드 통계에 사용할 수 있습니다.
metadata_github_updated_at: GitHub 프로젝트의 마지막 업데이트 날짜입니다(도구가 GitHub에 있는 경우, 다른 곳에 있으면 값은 N/A). 중요한 공격 도구 업데이트를 추적하고 키워드 탐지를 조정하는 데 사용할 수 있습니다.
_rawkeyword_detection_raw| search metadata_description!="" AND metadata_enable_endpoint_detection=1 여기서는 엔드포인트 로그에만 집중하므로 metadata_enable_endpoint_detection=1을 추가하여 엔드포인트 로그와 관련된 키워드만 일치시키고 metadata_description!=""를 사용하여 일치한 키워드만 남깁니다.| stats count earliest(_time) as firsttime latest(_time) as lasttime values(_raw) as raw by metadata_keyword_type keyword_detection index sourcetype 여기서는 예제를 위해 lookup의 모든 필드 없이 빠른 필터를 만들었습니다(더 많은 제외 가능성을 원하면 필드를 추가할 수도 있습니다). 이를 통해 어떤 키워드가 많이 일치하는지 쉽게 파악할 수 있으므로 특정 키워드에 대해 오탐이 너무 많으면 해당 범주나 도구를 쉽게 제외할 수 있습니다!|loadjob myjobid를 사용하면 모든 로그를 다시 검색하지 않고도 관련 로그로 출력을 조작할 수 있습니다.그리고 이 splunk 시각화를 사용하세요: https://splunkbase.splunk.com/app/5742
