
Вычисление imphash-подобных значений для бинарных файлов Golang
gimphash — это предлагаемый метод вычисления аналога imphash для Go бинарных файлов. Его название расшифровывается как Go-import-hash.
Бинарные файлы Golang содержат свои зависимости как часть исполняемого файла. Эти зависимости включают как пакеты стандартной библиотеки, так и сторонние зависимости, и могут использоваться, по аналогии с классическим imphash, для идентификации проекта на Golang.
Зависимости можно перечислить с помощью pclntab, который является частью каждого бинарного файла Golang (см. также этот пост в блоге от Mandiant). pclntab содержит ряд интересных элементов для реверс-инжиниринга; для gimphash мы будем использовать имена функций, которые там содержатся.
go. или type. (артефакты компиляции, внутренности рантайма)vendor/, отбросьте эту подстроку и всё, что до неё
(например, преобразуйте vendor/golang.org/x/text в golang.org/x/text)internal/runtimesyncsyscalltypetimeunicodereflectstrconv/ в имени функции. Если / не найден, используйте начало вместо этого. Начиная с этой позиции, найдите следующий .... Если . не найден, используйте всё, что после индекса /, вычисленного на предыдущем шаге.., игнорируйте функцию, если первый алфавитно-цифровой символ после этой . является строчной буквой.Этот репозиторий содержит код proof-of-concept на следующих языках:
В разделе release содержатся готовые бинарные файлы для Windows и Linux.
Запустите калькулятор Gimphash для одного файла
./c_gimphash_linux /mnt/malware-repo/Godoh/godoh-windows64.exe
8200e76e42c4e9cf2bb308d76c017cbdcde5cbbf95e99e02b14d05e7b21505f3 /mnt/mal/Godoh/godoh-windows64.exe
Запустите калькулятор Gimphash для каталога с вредоносным ПО
find /mnt/malware-repo/ -type f -exec ./go_gimphash_linux {} \; 2>/dev/null
...
