
Canary Hunter는 canarytokens.org에서 무료로 생성된 다양한 형식의 일반적인 Canary를 확인하기 위한 빠른 PowerShell 스크립트를 목표로 합니다.
지난 몇 년간 여러 레드 팀(Red Team) 모의 훈련을 수행하면서 SOC에 행동을 알릴 수 있는 Canary Token을 여러 번 마주쳤습니다. 그래서 환경 내 파일에서 이러한 카나리를 탐지할 방법이 있는지 알아보는 데 시간을 보냈습니다. Canary Hunter는 canarytokens.org에서 무료로 생성된 다양한 형식의 일반적인 카나리를 빠르게 확인하기 위해 만들어졌습니다.
Canary token은 공격자가 스스로를 드러내게 하여 방어자가 침해 사실을 발견하도록 돕는 무료이고 빠르며 간편한 방법입니다. Canary token이 무엇인지, 무료로 생성하는 방법에 대한 자세한 내용은 다음을 참조하세요. https://blog.thinkst.com/p/canarytokensorg-quick-free-detection.html
현재 이 스크립트는 다음 형식의 카나리를 탐지할 수 있습니다:
PS C:\> Import-Module .\CanaryHunter.psd1
docx를 zip으로 복사한 후 Canary Token 도메인을 포함하는 Regex를 사용해 xml 콘텐츠를 파싱합니다.
PS C:\> Invoke-DocxCheck -DocxPath gwfrr71nre84bk5gobf3h96ms.docx
Url Found:
http://canarytokens.com/feedback/traffic/gwfrr71nre84bk5gobf3h96ms/index.html
xlsx를 zip으로 복사한 후 Canary Token 도메인을 포함하는 Regex를 사용해 xml.rels 콘텐츠를 파싱합니다.
PS C:\> Invoke-XlsxCheck -XlsxPath .\gwfrr71nre84bk5gobf3h96ms.xlsx
Url Found:
http://canarytokens.com/images/tags/articles/gwfrr71nre84bk5gobf3h96ms/contact.php
지정된 .pdf에 대해 PDFStreamDumper를 실행한 후 .unk 스트림 파일에서 'Canary' 키워드를 파싱합니다.
PS C:\> Invoke-PDFCheck -StreamDumperPath C:\PDFStreamDumper\PDFStreamDumper.exe -PDFPath .\gwfrr71nre84bk5gobf3h96ms.pdf
Url Found:
http://gwfrr71nre84bk5gobf3h96ms.canarytokens.net/RNGPLTCJSTEKJHOMLLYCQINNXOVOWCUVME
기본적으로 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit" 레지스트리에서 무음 종료(silent exit) 모니터링을 사용하는 프로세스를 확인한 후 Monitor Process 속성에 대해 정규식을 실행합니다.
PS C:\> Invoke-RegistryCheck
Sensitive Command Canary Found For:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\net.exe
Monitor Process Canary Value Found:
cmd.exe /c start /min powershell.exe -windowstyle hidden -command "$($u=$(\"u$env:username\"
-replace('[^\x00-\x7f]|\s', ''))[0..63] -join '';$c=$(\"c$env:computername\" -replace('[^\x00-\x7f]|\s', ''));
Resolve-DnsName -Name \"$c.UN.$u.CMD.gwfrr71nre84bk5gobf3h96ms.canarytokens.com\")"
Bobby Lin의 블로그를 기반으로 무료 Canary token 서비스에서 제공되는 AWS 계정에 속할 수 있는 AWS 액세스 키를 검사합니다.
PS C:\> Invoke-AWSCheck -AWSPath .\AWS.config
Possible Canary Config Found:
AWS.config:2:aws_access_key_id = AKIAYVP4CIPPJUYTRES
알려진 Canary Token IP 주소를 찾기 위해 WireGuard 구성 파일을 검사합니다.
PS C:\> Invoke-WireguardCheck -WireGuardPath .\WireguardConfig
Possible Canary Config Found:
Endpoint = 52.18.63.80
알려진 Canary Token IP 주소를 찾기 위해 Kube 구성 파일을 검사합니다.
PS C:\> Invoke-KubeCheck -KubeConfigPath .\KubeConfig
Possible Canary Config Found:
server: https://52.18.63.80:6443
MYSQL 덤프에서 SET @b=를 검색한 후 정규식을 실행하여 MASTER HOST에 알려진 Canary Token IP 주소가 포함되어 있는지 확인합니다.
PS C:\> Invoke-MySqlDumpCheck -MySQLDumpPath .\gwfrr71nre84bk5gobf3h96ms_mysql_dump.sql
Url Found:
MASTER_HOST='gwfrr71nre84bk5gobf3h96ms.canarytokens.com'
알려진 Canary IP를 차단합니다.
PS C:\> Invoke-BlockCanaries
DisplayName : Block All Known Canary IP Addresses
Enabled : True
Profile : Any
Direction : Outbound
Action : Block
Firewall Rule to Block Canary IP Addresses Succesffully Created