Últimamente parece que en cualquier incidente que se precie utilizan Cobalt Strike, así que echemos un vistazo a diferentes artefactos que nos podemos encontrar. Ya hablé de las shellcodes incluídas en los mismos aquí y aquí, tratando de ver las diferencias con las generadas por Metasploit.
Así que para no repetirme, veremos algún detalle más de este tipo de binarios y así poder identificarlos rápidamente. Hay una serie de artefactos, así lo llama la propia herramienta (“artifact”), que llevan dentro una shellcode que descargaría el “beacon” y poder así “infectar” el equipo de quien lo ejecute. Podemos localizarlos de la siguiente manera .
He hablado alguna vez de imphash, que no es más que un hash que se obtiene de la suma de las funciones importadas (IAT) que utiliza el binario, en este caso imphash:"dc25ee78e2ef4d36faa0badf1e7461c9"
Con este simple script se puede obtener:
import pefile pe = pefile.PE(sys.argv[1])
print "Import Hash: %s" % pe.get_imphash()
Fuente: https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html
Si cogemos los 2 diferentes tipos de binarios que hemos visto en la página de Hybrid Analysis, vemos que ambos coinciden (“artifact” y “beacon”):
$ python imphash.py `c5870b786d4a01b27b079bbf2ce6d36......eae7c07378c0346e9cd0dde30c699b59c_artifact.exe
pe.imphash() == "dc25ee78e2ef4d36faa0badf1e7461c9" (14K)
$ python imphash.py decebaee0cb23bd96b42f0fa0edf7063......716307c592ccaef3f1864b4adf1c2a0a_beacon.exe
pe.imphash() == "dc25ee78e2ef4d36faa0badf1e7461c9" (278K)
Lo que indicaría que son generados de la misma forma. En cuanto a ese imphash, veamos que funciones son importadas:
[0x004014b0]> ii
[Imports]
nth vaddr bind type lib name
――――――――――――――――――――――――――――――――――――――――――
1 0x00406138 NONE FUNC KERNEL32.dll CloseHandle
2 0x0040613c NONE FUNC KERNEL32.dll ConnectNamedPipe
3 0x00406140 NONE FUNC KERNEL32.dll CreateFileA
4 0x00406144 NONE FUNC KERNEL32.dll CreateNamedPipeA
5 0x00406148 NONE FUNC KERNEL32.dll CreateThread
6 0x0040614c NONE FUNC KERNEL32.dll DeleteCriticalSection
7 0x00406150 NONE FUNC KERNEL32.dll EnterCriticalSection
8 0x00406154 NONE FUNC KERNEL32.dll FreeLibrary
9 0x00406158 NONE FUNC KERNEL32.dll GetCurrentProcess
10 0x0040615c NONE FUNC KERNEL32.dll GetCurrentProcessId
11 0x00406160 NONE FUNC KERNEL32.dll GetCurrentThreadId
12 0x00406164 NONE FUNC KERNEL32.dll GetLastError
13 0x00406168 NONE FUNC KERNEL32.dll GetModuleHandleA
14 0x0040616c NONE FUNC KERNEL32.dll GetProcAddress
15 0x00406170 NONE FUNC KERNEL32.dll GetStartupInfoA
16 0x00406174 NONE FUNC KERNEL32.dll GetSystemTimeAsFileTime
17 0x00406178 NONE FUNC KERNEL32.dll GetTickCount
18 0x0040617c NONE FUNC KERNEL32.dll InitializeCriticalSection
19 0x00406180 NONE FUNC KERNEL32.dll LeaveCriticalSection
20 0x00406184 NONE FUNC KERNEL32.dll LoadLibraryA
21 0x00406188 NONE FUNC KERNEL32.dll LoadLibraryW
22 0x0040618c NONE FUNC KERNEL32.dll QueryPerformanceCounter
23 0x00406190 NONE FUNC KERNEL32.dll ReadFile
24 0x00406194 NONE FUNC KERNEL32.dll SetUnhandledExceptionFilter
25 0x00406198 NONE FUNC KERNEL32.dll Sleep
26 0x0040619c NONE FUNC KERNEL32.dll TerminateProcess
27 0x004061a0 NONE FUNC KERNEL32.dll TlsGetValue
28 0x004061a4 NONE FUNC KERNEL32.dll UnhandledExceptionFilter
29 0x004061a8 NONE FUNC KERNEL32.dll VirtualAlloc
30 0x004061ac NONE FUNC KERNEL32.dll VirtualProtect
31 0x004061b0 NONE FUNC KERNEL32.dll VirtualQuery
32 0x004061b4 NONE FUNC KERNEL32.dll WriteFile
1 0x004061bc NONE FUNC msvcrt.dll __dllonexit
2 0x004061c0 NONE FUNC msvcrt.dll __getmainargs
3 0x004061c4 NONE FUNC msvcrt.dll __initenv
4 0x004061c8 NONE FUNC msvcrt.dll __lconv_init
5 0x004061cc NONE FUNC msvcrt.dll __set_app_type
6 0x004061d0 NONE FUNC msvcrt.dll __setusermatherr
7 0x004061d4 NONE FUNC msvcrt.dll _acmdln
8 0x004061d8 NONE FUNC msvcrt.dll _amsg_exit
9 0x004061dc NONE FUNC msvcrt.dll _cexit
10 0x004061e0 NONE FUNC msvcrt.dll _fmode
11 0x004061e4 NONE FUNC msvcrt.dll _initterm
12 0x004061e8 NONE FUNC msvcrt.dll _iob
13 0x004061ec NONE FUNC msvcrt.dll _lock
14 0x004061f0 NONE FUNC msvcrt.dll _onexit
15 0x004061f4 NONE FUNC msvcrt.dll _unlock
16 0x004061f8 NONE FUNC msvcrt.dll _winmajor
17 0x004061fc NONE FUNC msvcrt.dll abort
18 0x00406200 NONE FUNC msvcrt.dll calloc
19 0x00406204 NONE FUNC msvcrt.dll exit
20 0x00406208 NONE FUNC msvcrt.dll fprintf
21 0x0040620c NONE FUNC msvcrt.dll free
22 0x00406210 NONE FUNC msvcrt.dll fwrite
23 0x00406214 NONE FUNC msvcrt.dll malloc
24 0x00406218 NONE FUNC msvcrt.dll memcpy
25 0x0040621c NONE FUNC msvcrt.dll signal
26 0x00406220 NONE FUNC msvcrt.dll sprintf
27 0x00406224 NONE FUNC msvcrt.dll strlen
28 0x00406228 NONE FUNC msvcrt.dll strncmp
29 0x0040622c NONE FUNC msvcrt.dll vfprintf
Entre otras llama la atención estas 2: VirtualAlloc yVirtualProtect ( lo hemos visto en otros artículos )
Veamos que se esconde dentro del binario:
Ponemos el breakpoint correspondiente en VirtualProtect.
Vemos el tamaño de la shellcode en el registro ecx (31e en hexa, 798 en decimal) y donde podemos encontrarla en el registro ebx (0x20000).
Lo vemos más en detalle en la siguiente captura.
En este punto ya podemos guardarla.
Solamente nos queda comprobar si esto realmente hace lo que hemos visto, que seguro que sí.
Llegados a este punto, siempre pienso lo mismo, he tenido que ejecutar el binario para obtener la shellcode, pero sin ejecutarlo, ¿podría?
Si editamos el binario, vemos esta zona:
Vemos muchas A, pensé que podría ser donde se ubicaría la shellcode cifrada. Esas A podrían ser algo como un relleno.
Me llamó la atención que en muchos de estos binarios, se repetía estos opcodes
Vale, seleccionamos esta zona:
Y la guardamos en un fichero.
Vamos a localizar esta zona en el binario.
Primero busco las A. Si nos acordamos del tamaño de la shellcode, eran 798 bytes, por lo que para no pillarnos las manos, pongo algo más. Y ahí la tenemos. Podía haber buscado los primeros opcodes que veíamos, pero voy a lo conocido, las A.
Necesito saber exactamente cual es la dirección que va a usar el binario para acceder a esta zona, me posiciono en el sitio correcto.
Veo si hay referencia a esa dirección:
No las hay, avanzo 8, esto no lo hago porque sí, ya lo he analizado antes y sé lo que va a hacer. Aquí ya vemos una zona donde es usada esa dirección.
Y donde se descifra esa shellcode es justo después del VirtualAlloc.
Quedando de la siguiente manera nuestro script de descifrado:
Vemos como obtenemos los mismos resultados que con el debugging, esta vez sin ejecutar el binario. Seguiremos de cerca este tipo de binarios.
Una forma rápida de detectarlos, como he mencionado al principio del artículo es por el imphash. Así que esta regla yara puede ayudarnos.
import "pe"
rule artifact_cobaltstrike_x32 {
meta:
description = "Yara rule for detect Cobaltstrike artifact x32"
author = "by Rafa"
last_updated = "2019-07-14"
category = "informational"
strings:
$a1 = "%c%c%c%c%c%c%c%c%cMSSE-%d-server" wide ascii
$a2 = { 10 22 00 00 }
condition:
pe.imphash() == "dc25ee78e2ef4d36faa0badf1e7461c9" and filesize < 50KB and uint16(0) == 0x5A4D and all of them }
Vemos si funciona:
$ ls *.exe | wc -l
64
$ yara artifact.yar .| wc -l
64
Parece que sí, el resultado de las detecciones:
$ yara artifact.yar .
artifact_cobaltstrike_x32 ./9a42eca4df1bb5dfe0b7d2c2b28e10e88a0c35d881ad20f162174f9bb579c197_artifact.exe
artifact_cobaltstrike_x32 ./d04e0d4ef5f6dea2b68aad4f688090ec861fd2c158bc94c489e9f9486c9fb4c2_artifact.exe
artifact_cobaltstrike_x32 ./6c762972cf95bf6da96fe64c3a335756aedb871060af90eb6bd87fc683f6492c_artifact.exe
artifact_cobaltstrike_x32 ./9a0c4694d4ad3fd8917149bf2cf1baf4b2d37532b5b02cdca14356277c931039_artifact.exe
artifact_cobaltstrike_x32 ./809cad4ddd921f0bbdcaa267dd6fb5d2528730c5d55df773846dc7b63643ba6c_artifact.exe
artifact_cobaltstrike_x32 ./07f1888b3febc5971660147d4c6c3ad1c8fda262a797c8bff375ad6f0704413d_artifact.exe
artifact_cobaltstrike_x32 ./6eb1b9271c95edc0c095c50777bfabdc15f543a9295222760a8c9e124f096a41_artifact.exe
artifact_cobaltstrike_x32 ./00641d85e6cb840f92c630ae0cfecd00e70e2efb16ed8b8a1bd026bdeebb56c0_artifact.exe
artifact_cobaltstrike_x32 ./1df6465b13e110ff7501683c7481e625cf9201e1dacdc36288a17bfd4058181c_artifact.exe
artifact_cobaltstrike_x32 ./7a1602e83f42292c7630b3914cf391bfd49f7e3f641288d3446a4b015785d321_artifact.exe
artifact_cobaltstrike_x32 ./a94d39f150647a226e3f3952cdfc4906a9049f75379a467e908db6707a61907f_artifact.exe
artifact_cobaltstrike_x32 ./2d12f7359ea4dcaa0ab7c1090e84a2bd48cfa6bab4cee641adb504bfcd1f3b9b_artifact.exe
artifact_cobaltstrike_x32 ./eb1d75f02e09b08c65e1541bddcd6888c334977bb1fb603fa45dcd1a836bb406_artifact.exe
artifact_cobaltstrike_x32 ./7166c84bb35b94a497851bffefe7cce60788e9bccbbf550cd162ec8ddc0c9266_artifact.exe
artifact_cobaltstrike_x32 ./30d197817fb19ee3a39d9ff8246c731c3b8c543f8c6ef387eb2ff7e9c581adf6_artifact.exe
artifact_cobaltstrike_x32 ./9a8548f1797803a6a29f128a141dcf93d0333e1203774ecbdc295a6b072ee77b_artifact.exe
artifact_cobaltstrike_x32 ./4a045d9205935a73d7d9b3b6e961fc1e5b3516d380a5ea28d3f0a8f576d6439b_artifact.exe
artifact_cobaltstrike_x32 ./b894ae0ec3b677692b9f78ca1492b012f0a38be98e6e0eb6c67077c2b3e92cb4_artifact.exe
artifact_cobaltstrike_x32 ./dd12b3d1f17ec5638aa1f017cb75b649f9dad046406406d7ac00e9d81b2cff63_artifact.exe
artifact_cobaltstrike_x32 ./e3a3f134fbdad25ee4635c5df3d660317bbc71cade0e4dfab71f82cf8cb0dfe0_artifact.exe
artifact_cobaltstrike_x32 ./917632c0529845fb50248729b04accd55ab00dfc142b5750a73c145eb1aea3e8_artifact.exe
artifact_cobaltstrike_x32 ./9675f832a7dfda9e5cbbc6ae409b8d630392e56c29fe4e110d27134100e31d52_artifact.exe
artifact_cobaltstrike_x32 ./f4d59b65f2b22854a305736005bf68c042355f2b0b4b8609d5b0c9ecc827eacc_artifact.exe
artifact_cobaltstrike_x32 ./940256445907dff1f5151a7aca61841d7aa29ee9ff47f99b9b4bc57cbbebb50f_artifact.exe
artifact_cobaltstrike_x32 ./10cb3101476923121269b245367c7c71a98c736f649395dbd15693c8d0effe08_artifact.exe
artifact_cobaltstrike_x32 ./1cc92fca43c469507fb343d066e9cf81c8ae318276b41d5f3cf1e2f76e1daa5d_artifact.exe
artifact_cobaltstrike_x32 ./0e36be5524820cedba0ecd76131158d0317f760f51b8174ff381ef16365696c7_artifact.exe
artifact_cobaltstrike_x32 ./ab4c3289480dedf8cae5201845d6023053aaf10d22772104e0b240aaf2a022d3_artifact.exe
artifact_cobaltstrike_x32 ./f61d8c2577a766c572d7fed898e88e19656dae5baf0f120b71c6a39432f56adb_artifact.exe
artifact_cobaltstrike_x32 ./1f2ea18e34d8bcf435eb6f571b9ae2182675ae6357d282679ef669797aa6f38b_artifact.exe
artifact_cobaltstrike_x32 ./6b343662dbbb95d71bad796312884b1defbeb930cc8f61a2b76444a969328920_artifact.exe
artifact_cobaltstrike_x32 ./43df13e176eb083a6af986fc75bf37985ead4053c9b128fa27285a2e5f306c59_artifact.exe
artifact_cobaltstrike_x32 ./06f8004835c5851529403f73ad23168b1127315d02c68e0153e362a73f915c72_artifact.exe
artifact_cobaltstrike_x32 ./a0e76ae8143c4e8605cd95b80f4f13b9099889925b35b79a872d66f9bac0c8ff_artifact.exe
artifact_cobaltstrike_x32 ./32822d9af524b0d8280f5df0ba5ce8bcab26c2d94cd45b7c360529ae516cf2e3_artifact.exe
artifact_cobaltstrike_x32 ./c2d9bbd5163a8e733483bf5d0d4959f053a2307d275b81eb38e69d87f1f5df7e_artifact.exe
artifact_cobaltstrike_x32 ./56861f8382d10a3d50ea0571eb44d8b04da84931166a9a5707fdbc1cf60035b3_artifact.exe
artifact_cobaltstrike_x32 ./3bd5f6f088a2668f9d3a8161c961d52417a36b75af5adaf9f1288f7992ebf604_artifact.exe
artifact_cobaltstrike_x32 ./b97b606aef81420a441aba88b42c44aa8e102390434be5714d33bb07645912d2_artifact.exe
artifact_cobaltstrike_x32 ./72c179e143cb25e8f78e6bd3d116deca1db3b97db93db521a6a60503103857bf_artifact.exe
artifact_cobaltstrike_x32 ./d13a3c54759d69d02a0a4fdeb0bd1977149edc5087073f60cfcb9a0484a1bcd7_artifact.exe
artifact_cobaltstrike_x32 ./dbbcb955538dc2fb65f4336f5a5b397d735dc10b20428d9d164a4284856295f4_artifact.exe
artifact_cobaltstrike_x32 ./8880ae12848d889ac6e527e1bbd412248ea33d6da3545e4bc062ea8b29863516_artifact.exe
artifact_cobaltstrike_x32 ./fef6d4f9ed87c5f991660a768772cd8d723e07b4b9861ecc63e47ed69f6c62d1_artifact.exe
artifact_cobaltstrike_x32 ./7d6384399f121e1295243ea82f3422c6f46c619f5777bb4e5c34152e1a4b5bef_artifact.exe
artifact_cobaltstrike_x32 ./a0cfec815cb74a7671265fd5e0790a2a79c05fe0ef16d2d0c87584049d06658b_artifact.exe
artifact_cobaltstrike_x32 ./6043c45ca9038e45457bb13133109d647417776cd57b75468821f2b68d190a1c_artifact.exe
artifact_cobaltstrike_x32 ./c4979b7f2d10da7da13a3e6b4688448d919d0a7bb7bc571d58546e99263c3e9c_artifact.exe
artifact_cobaltstrike_x32 ./bca4d36e65fc970e7a9a44f41037aae025501c0aac578487d62fa719ebe2f295_artifact.exe
artifact_cobaltstrike_x32 ./61ffe0a4549a36746a342b3bb75f0b0d2964cc6e15a4597fa7c34e3ca6065d76_artifact.exe
artifact_cobaltstrike_x32 ./85a1659c7ba9ded0c1b84b34b505f48237d495d0179c28f6c1d5a95bd87064d8_artifact.exe
artifact_cobaltstrike_x32 ./9972402dcc080a826c0010948d8c32ab4fce83c13d30e3e2eb074d4c31a2b9af_artifact.exe
artifact_cobaltstrike_x32 ./4873a1f74b1245009c083b0fb90900d4ed01a5c651b3ed9c2e716e61ba5079be_artifact.exe
artifact_cobaltstrike_x32 ./6496905d4e7677f0a80dac27722ce8fddd18256830d44f4d13709d7978626f49_artifact.exe
artifact_cobaltstrike_x32 ./ed4bb84c5625b997bd5cb8bcda272277e1c0c89dc0a2d771931aff7dc6776453_artifact.exe
artifact_cobaltstrike_x32 ./4bd09b224117790ac61c8dbe039df1e3a0548626887b7b06d1abff0101e3d989_artifact.exe
artifact_cobaltstrike_x32 ./c5870b786d4a01b27b079bbf2ce6d36eae7c07378c0346e9cd0dde30c699b59c_artifact.exe
artifact_cobaltstrike_x32 ./f9727ea0ffb9a8581d821a25c01fdde9bffc7b22847573b0b601483fcdabbdbe_artifact.exe
artifact_cobaltstrike_x32 ./9a0aeaeae4483c51d51428ec32800e37d7c9de4b51d7f3e7f7f63cec59d77584_artifact.exe
Espero que os haya gustado, hasta otra!!