Imphash

Origem: Wikipédia, a enciclopédia livre.

Em segurança da informação, mais especificamente na análise de malware, imphash (do Inglês "Imports Hash") é o resultado da uma soma de verificação de um texto criado a partir das funções importadas por um executável PE (Portable Executable), utilizando o algoritmo MD5, ideia criada por pesquisadores da Mandiant em 2004.[1] com o objetivo de fornecer um recurso para encontrar outros exemplares de malware de uma mesma família, já que normalmente criadores de malware não mudam as funções de biblioteca que estes utilizam ao gerarem novos examples, ou seja, quando compilam o mesmo malware novamente, gerando novos executáveis. Neste caso, embora o hash do arquivo mude, o imphash se mantém.

Cálculo do imphash[editar | editar código-fonte]

O texto da qual a soma de verificação MD5 é calculada é formado da seguinte maneira:[2]

  1. Varre-se a Import Table (IT) ou Table de Importações de funções do executável PE, que contém um registro das funções importadas por este executável e suas respectivas bibliotecas.
  2. Para cada função encontrada, prefixa-se seu nome com o nome da biblioteca (DLL) onde ela está sem sua extensão, mas mantendo o ponto. Por exemplo, se o executável importa a função DeleteCriticalSection() da biblioteca KERNEL32.DLL, esse import reescrito ficaria KERNEL32.EnterCriticalSection.
  3. Caso não a função não seja importada por nome, tenta-se resolvê-la com um banco de dados local e, caso não seja possível, utiliza-se seu número ordinal.
  4. Converte-se o texto para minúsculo, ficando agora kernel32.entercriticalsection.
  5. Repete-se todo o algoritmo para as outras funções importadas pelo binário, concatenando o resultado com o anterior, separando-se por vírgulas.
  6. Calcula-se o hash MD5 do texto final.

Exemplo[editar | editar código-fonte]

Tomemos como exemplo um executável PE que importe as seguintes funções, nesta ordem:

  • EnterCriticalSection(), da KERNEL32.DLL
  • MessageBoxA(), da USER32.DLL
  • CreateWindowExA(), da USER32.DLL

Quem quiser calcular o imphash deste executável, deverá calcular o hash MD5 da seguinte string (sem considerar caracteres de nova linha):

kernel32.entercriticalsection,user32.messageboxa,user32.createwindowexa

O resultado é do exemplo é 2e4b75f13408b52416d9c846d1189ae6. Assim é possível fazer o mesmo cálculo para diferentes arquivos, a fim de encontrar outros exemplares da mesma família. Ou seja, é um método de busca por arquivos similares.

Referências

  1. «Tracking Malware with Import Hashing « Tracking Malware with Import Hashing». Mandiant. 23 de janeiro de 2014. Consultado em 24 de janeiro de 2023 
  2. Mercês, Fernando (6 de maio de 2016). «Entendendo o imphash». Mente Binária. Consultado em 24 de janeiro de 2023