Hola a tod@s!!
Para los que no lo conozcais, hay una página que se dedica a recopilar LOLBAS o lo que es lo mismo Living Off The Land Binaries and Scripts (and also Libraries)
La idea es ejecutar comandos del sistema operativo o software confiable para otros fines no tan buenos. Imaginaros que necesito descargar algo y ejecutarlo y que no salte ninguna alarma en ningún sitio (al antivirus me refiero). Con estos comandos del sistema operativo que se ven en esta página tan completa, se puede hacer de todo.
Si nos fijamos en la columna de las funciones, vemos como hay comandos para ejecutar, descargar, copiar, compilar, etc.
En muchas ocasiones, para evitar que sean detectadas ciertas acciones, los atacantes utilizan estos comandos y así ahorran esfuerzo a la hora de programar y evitan que esa parte sea analizada por los antivirus.
Veamos un ejemplo, necesito descargar un programa:
certutil.exe -urlcache -split -f http://7-zip.org/a/7z1604-x64.exe 7zip.exe
“Cerutil.exe” es un programa confiable, a no ser que se pongan unas ciertas limitaciones, se podrá descargar el fichero.
Os mostraré una de las muchas formas que hay para encontrar alguno más, con tiempo todo es posible.
Cojo uno al azar, por ejemplo: “url.dll”.
Ahora mismo hay variaciones de estos 2:
- Vamos a ver porqué ocurre esto y veremos si podemos sacar alguno más.
Vemos que la función de la API que ejecuta el binario es “ShellExecuteA”. ¿Habrá más lugares donde se llame?
Tenemos esta que no la estaba contemplada: sym.URL.dll_TelnetProtocolHandler
Nos vamos a esa función.
Y buscamos la zona donde se encuentra la función que hará que se ejecute el comando que queramos, o más bien en este caso, el que quiera la dll, ahora veréis porqué digo esto.
Al final, vemos lo siguiente (fijaros que ejecuta “telnet.exe”):
Si ejecutamos rundll32 url.dll, TelnetProtocolHandler, sin parámetros si quiera, ejecutara “telnet.exe” ¿verdad?
Si le ponemos como parámetro una dirección IP, tratará de conectarse con ella. O sea, que podemos ejecutar telnet con parámetros, pero, ¿os habeis fijado que ejecuta “telnet.exe” a secas? No trata de ejecutar “c:\windows\system32\telnet.exe”, lo cual indica que si tenemos un “telnet.exe” colocado en donde queramos, podríamos ejecutarlo con o sin parámetros, ¿verdad?
Pues sí, así es, se ejecuta nuestro “telnet.exe”. De esta forma, sería posible ejecutar cualquier cosa y en las alertas que pudieran saltar por ejecución de binarios, saldría “rundll32 url.dll,TelnetProtocolHandler”, recordad, con o sin parámetros.
Aquí tenemos una ejecución normal del comando con parámetros, para que veais como ejecutaría el “telnet.exe” original.
El parámetro que se le pasa es la ip de localhost: 127.0.0.1. Y podéis ver como ejecutaría telnet tratándose de conectar allí.
Ahora veremos lo mismo, pero desde nuestro directorio donde hemos ubicado nuestro telnet.
Veis la diferencia, ¿verdad? Pues ya tenemos otro lolbin, de ejecución en este caso, en el que se puede camuflar con la aplicación “telnet.exe”.
Se podría detectar, claro que sí, mirad la ruta de ese telnet, no es la que debería así que se podría.
Bueno, espero que os haya gustado.
Nos vemos en el próximo post!