Si no eres de este planeta y todavía no conoces Ngrok decirte que es un programita que permite acceder desde fuera a los equipos internos que están detrás de NAT o un firewall. Básicamente establece un túnel TCP cifrado que proporciona una dirección pública accesible desde Internet y luego conecta el otro extremo del túnel al servicio local que queramos. ¿Por qué se usa tanto? Pues sobretodo porque permite exponer cualquier servicio local con el mínimo esfuerzo:
No voy a entrar en si es un servicio algo oscuro o si es seguro o confiable, pero lo que si es una realidad es que más de un «avispado» puede utilizarlo en una red corporativa sin despeinarse, por lo que para un hunter de la vida nunca está de mes tener estas a mano (gracias a Vignesh Bhaaskaran):
Splunk:
Para eventos en endpoints:
(source=":*" AND ((CommandLine="* tcp 139*" OR CommandLine="* tcp 445*" OR CommandLine="* tcp 3389*" OR CommandLine="* tcp 5985*" OR CommandLine="* tcp 5986*") OR (CommandLine="* start *" AND CommandLine="*--all*" AND CommandLine="*--config*" AND CommandLine="*.yml*") OR ((Image="*ngrok.exe") AND (CommandLine="* tcp *" OR CommandLine="* http *" OR CommandLine="* authtoken *"))))
Para logs DNS:
index= ("tunnel.us.ngrok.com" OR "tunnel.eu.ngrok.com" OR "tunnel.ap.ngrok.com" OR "tunnel.au.ngrok.com" OR "tunnel.sa.ngrok.com" OR "tunnel.jp.ngrok.com" OR "tunnel.in.ngrok.com" OR "*.ngrok.io")
Para tráfico del firewall:
index= ("3.20.27.198" OR "3.16.250.205" OR "3.12.62.205" OR "3.134.73.173" OR "3.133.228.214" OR "3.136.132.147" OR "3.123.83.158" OR "3.125.234.140" OR "52.28.187.147" OR "3.122.29.226" OR "13.228.59.63" OR "18.141.102.200" OR "13.251.162.108" OR "52.220.69.60" OR "52.220.126.110" OR "54.153.228.243" OR "13.239.180.227" OR "13.54.73.251" OR "3.105.185.27" OR "3.104.168.138" OR "18.229.114.140" OR "18.229.94.125" OR "54.233.161.49" OR "18.229.186.234" OR "18.228.107.150" OR "52.196.202.158" OR "54.178.247.185" OR "18.177.129.29" OR "13.112.247.114" OR "18.177.245.43" OR "13.126.63.42" OR "13.232.212.61" OR "13.232.27.141" OR "3.6.96.240" OR "13.233.205.122")
Las direcciones IP anteriores se obtienen del enlace https://s3.amazonaws.com/dns.ngrok.com/tunnel.json y los servicios de Ngrok están alojados en Amazon como información pública https://www.abuseipdb.com/whois/ngrok.com
Defender para endpoints:
Para ejecución de procesos en el Endpoint
DeviceProcessEvents | where ((ProcessCommandLine contains " tcp 139" or ProcessCommandLine contains " tcp 445" or ProcessCommandLine contains " tcp 3389" or ProcessCommandLine contains " tcp 5985" or ProcessCommandLine contains " tcp 5986") or (ProcessCommandLine contains " start " and ProcessCommandLine contains "--all" and ProcessCommandLine contains "--config" and ProcessCommandLine contains ".yml") or ((FolderPath endswith "ngrok.exe") and (ProcessCommandLine contains " tcp " or ProcessCommandLine contains " http " or ProcessCommandLine contains " authtoken ")))
Identificar el número de dispositivos agrupados por comandos, el nombre de archivo principal, la IP remota, etc.
union DeviceEvents,DeviceProcessEvents,DeviceFileEvents,DeviceNetworkEvents
| where FileName has "ngrok" or InitiatingProcessCommandLine has "ngrok" or ProcessCommandLine has "ngrok" or InitiatingProcessParentFileName has "ngrok" | summarize Folderpath=make_set(FolderPath), ProcessCommandLine=make_set(ProcessCommandLine), InitiatingProcessCommandLine=make_set(InitiatingProcessCommandLine), InitiatingProcessParentFileName=make_set(InitiatingProcessParentFileName), Filename=make_set(FileName), PreviousFileName=make_set(PreviousFileName), PreviousFolderPath=make_set(PreviousFolderPath), ProcessVersionInfoInternalFileName=make_set(ProcessVersionInfoInternalFileName), ProcessVersionInfoOriginalFileName=make_set(ProcessVersionInfoOriginalFileName), ActionType=make_set(ActionType), RemoteIP = make_set(RemoteIP ), RemoteUrl=make_set(RemoteUrl), FileOriginUrl=make_set(FileOriginUrl), FileOriginReferrerUrl = make_set(FileOriginReferrerUrl), FileOriginIP = make_set(FileOriginIP) by DeviceName
Crowdstrike:
Ejecución de procesos:
((CommandLine="* tcp 139*" OR CommandLine="* tcp 445*" OR CommandLine="* tcp 3389*" OR CommandLine="* tcp 5985*" OR CommandLine="* tcp 5986*") AND (CommandLine="* start *" AND CommandLine="*--all*" AND CommandLine="*--config*" AND CommandLine="*.yml*") AND ((ImageFileName="*ngrok.exe") AND (CommandLine="* tcp *" OR CommandLine="* http *" OR CommandLine="* authtoken *")))
Fuentes:
- https://www.socinvestigation.com/ngrok-threat-hunting-detect-hackers-at-the-end-of-the-tunnel/
- https://www.huntress.com/blog/abusing-ngrok-hackers-at-the-end-of-the-tunnel
- https://blog.cyble.com/2021/02/15/ngrok-platform-abused-by-hackers-to-deliver-a-new-wave-of-phishing-attacks/
- https://c99.sh/hunting-ngrok-activity/
Fuente obtenida de: https://www.hackplayers.com/2022/06/quien-esta-usando-ngrok-en-mi-red.html