Explotando datos de APT for fun and (no) profit (I): adquisición y procesamiento

Entradas de la serie «Explotando datos de APT for fun and (no) profit»:
=> I: adquisición y procesamiento
=> II: análisis simple
=> III: análisis no tan simple
=> IV: conclusiones

Cuando asistimos a charlas relacionadas con APT -o las damos-, a veces oímos frases como “la mayor parte de los actores se focalizan en robo de información” o “Rusia es uno de los actores más activos en el panorama”. Pero, ¿de dónde vienen estas frases? Hemos pasado una noche entera explotando datos relativos a APT por diversión (y for (no) profit) para proporcionar curiosidades, hechos, datos… que puedes usar desde ya mismo en tus charlas! :)

Desde 2019 el equipo de ThaiCERT publica en PDF “Threat Group Cards: A Threat Actor Encyclopedia” y proporcionan un portal de acceso libre (https://apt.thaicert.or.th/cgi-bin/aptgroups.cgi) con toda la información relativa a estos grupos, obtenida de fuentes abiertas. En este portal, además de navegar por los diferentes grupos y sus herramientas, se presentan estadísticas acerca de sus actividades (países origen, objetivos, herramientas más usadas…), y la mayor parte de estos grupos son considerados APT (en estos momentos, 250 de 329, con la versión de base de datos actualizada a fecha 20 de octubre de 2020). Pero, ¿y si necesitamos estadísticas o correlaciones específicas que no están en la página web?

Podemos descargar un fichero en formato JSON para explotarlo nosotros mismos:

$ curl -o out.json https://apt.thaicert.or.th/cgi-bin/getmisp.cgi?o=g 

Pero estas cosas modernas como JSON son difíciles de procesar con awk, una de las herramientas de los dioses Por eso descargamos JSON.sh para convertir el archivo JSON a un formato cristiano:

$ curl -o JSON.sh https://raw.githubusercontent.com/dominictarr/JSON.sh/master/JSON.sh
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed
100 4809 100 4809 0 0 15512 0 --:--:-- --:--:-- --:--:-- 15512
$ chmod +x JSON.sh
$

Ahora parseamos el fichero JSON con el script JSON.sh:

$ cat out.json |./JSON.sh -l > work.txt

Et voilà, tenemos un fichero de texto con el que ya estamos cómodos. Pero para estar más cómodos aún lo troceamos en múltiples archivos, uno por cada actor identificado por ThaiCERT (en el fichero principal, identificado por la clave “values”):

$ n=`awk -F, 'index($1,"values")>0 {print $2}' work.txt |grep -v value| sort -n|uniq|tail -1` export n
$ for i in $(seq 1 $n);do grep "values\",$i," work.txt >$i.txt;done
$

No empecemos con la eficiencia del one-liner: se va a ejecutar una vez, así que mientras estás leyendo esta línea, ya tenemos un fichero de texto plano independiente para cada actor:

$ ls [0-9]*.txt |wc -l
327
$

Cada uno de estos 327 ficheros está compuesto por entradas de la forma “[clave]  valor”; por ejemplo:

$ cat 98.txt
["values",98,"value"] "DustSquad, Golden Falcon"
["values",98,"description"] "(Kaspersky) For the last two years we have been monitoring a Russian-language cyberespionage
actor that focuses on Central Asian users and diplomatic entities. We named the actor DustSquad and have provided private
intelligence reports to our customers on four of their campaigns involving custom Android and Windows malware. In this
blogpost we cover a malicious program for Windows called Octopus that mostly targets diplomatic entities.\n\nThe name
was originally coined by ESET in 2017 after the 0ct0pus3.php script used by the actor on their old C2 servers. We also
started monitoring the malware and, using Kaspersky Attribution Engine based on similarity algorithms, discovered that
Octopus is related to DustSquad, something we reported in April 2018. In our telemetry we tracked this campaign back to
2014 in the former Soviet republics of Central Asia (still mostly Russian-speaking), plus Afghanistan."
["values",98,"meta","synonyms",0] "DustSquad"
["values",98,"meta","synonyms",1] "Golden Falcon"
["values",98,"meta","synonyms",2] "APT-C-34"
["values",98,"meta","synonyms",3] "Nomadic Octopus"
["values",98,"meta","attribution-confidence"] "50"
["values",98,"meta","country"] "RU"
["values",98,"meta","motivation",0] "Information theft and espionage"
["values",98,"meta","date"] "2014"
["values",98,"meta","cfr-target-category",0] "Defense"
["values",98,"meta","cfr-target-category",1] "Government"
["values",98,"meta","cfr-target-category",2] "Media"
["values",98,"meta","cfr-suspected-victims",0] "Afghanistan"
["values",98,"meta","cfr-suspected-victims",1] "Kazakhstan"
["values",98,"meta","refs",0] "https://apt.thaicert.or.th/cgi-bin/showcard.cgi?u=982ea477-0c28-490e-87d6-3f43da257cae"
["values",98,"meta","refs",1] "https://securelist.com/octopus-infested-seas-of-central-asia/88200/"
["values",98,"meta","refs",2] "https://www.zdnet.com/article/extensive-hacking-operation-discovered-in-kazakhstan/"
["values",98,"related",0,"dest-uuid"] "e74394ee-e4ab-4642-aca4-fa84d0dcabbf"
["values",98,"related",0,"tags",0] "estimative-language:likelihood-probability=\"almost-certain\""
["values",98,"related",0,"type"] "uses"
["values",98,"related",1,"dest-uuid"] "3d3bf55f-402e-4122-a52b-196aed8e6507"
["values",98,"related",1,"tags",0] "estimative-language:likelihood-probability=\"almost-certain\""
["values",98,"related",1,"type"] "uses"
["values",98,"related",2,"dest-uuid"] "7ff6da6a-d13a-42db-91ac-ac6c3915f3d0"
["values",98,"related",2,"tags",0] "estimative-language:likelihood-probability=\"almost-certain\""
["values",98,"related",2,"type"] "uses"
["values",98,"uuid"] “982ea477-0c28-490e-87d6-3f43da257cae”
$

Ya tenemos todo listo para empezar a analizar los archivos y obtener resultados. Vamos allá.

Ver también en: