
Cálculo tipo imphash en binarios Golang
gimphash es un método propuesto para calcular un equivalente de imphash para binarios de Go. Su nombre proviene de Go-import-hash.
Los binarios de Golang contienen sus dependencias como parte del ejecutable. Estas dependencias incluyen tanto paquetes de la biblioteca estándar como dependencias de terceros, y pueden utilizarse, de forma análoga a un imphash clásico, para identificar un proyecto Golang.
Las dependencias se pueden enumerar mediante la pclntab que forma parte de cada binario Golang (consulte también esta entrada de blog de Mandiant). La pclntab contiene varios elementos interesantes para la ingeniería inversa; para el gimphash usaremos los nombres de función que contiene.
go. o type. (artefactos de compilación, elementos internos del runtime)vendor/, descartar esa subcadena y todo lo anterior
(p. ej., transformar vendor/golang.org/x/text en golang.org/x/text)internal/runtimesyncsyscalltypetimeunicodereflectstrconv/ en el nombre de función. Si no se encuentra ninguna /, usar el inicio en su lugar. A partir de esa posición, encontrar el siguiente .... Si no se encontró ningún ., usar todo lo que haya después del índice de / calculado en el paso anterior.. dentro del nombre base de la función, ignorar la función si el primer carácter alfanumérico después de ese . es una letra minúscula.Este repositorio contiene código de prueba de concepto en los siguientes lenguajes:
La sección de lanzamientos contiene binarios precompilados para Windows y Linux.
Ejecutar la calculadora Gimphash en un solo archivo
./c_gimphash_linux /mnt/malware-repo/Godoh/godoh-windows64.exe
8200e76e42c4e9cf2bb308d76c017cbdcde5cbbf95e99e02b14d05e7b21505f3 /mnt/mal/Godoh/godoh-windows64.exe
Ejecutar la calculadora Gimphash en un repositorio de malware
find /mnt/malware-repo/ -type f -exec ./go_gimphash_linux {} \; 2>/dev/null
...
