mercredi 4 avril 2018

Les Hashs Api du malware Duqu



I.    Introduction

Duqu est classifié comme malware, mais c'est  surtout un ensemble de composantes logicielles offrant une gamme de services pour des commanditaires leur permettant de créer une action d'espionnage industrielle.

Il faut assimilé Duqu comme un malware modulaire en kit.

Dans cette quelque ligne, nous allons revoir celui-ci, en  regardant uniquement la partie hash des Api pour comparaison a d'autre construction de hash déjà référencé chez d'autres malware.

II.          Algorithme de création des hashs


A partir d'information disparate existant sur le web, nous avions crée un tools permettant de disposer de l'algorithme de hash de Duqu en C++

Nous avions réalise ce programme à l'époque pour lister les hashs des Apis au sein du malware et disposer de l'algorithme lors d'inverse ingénierie sur des binaires non identifié

voici l'outil en question :



















 



Nous mettons l'algorithme de génération correspondant du malware Duqu

DWORD CalcCustomHashDuqu(const char* pApiName )
{                 
    DWORD dwHash = 0xF748B421;

            int i=0;
            do
            {
                        dwHash = dwHash * 0xD4C2087;
                        dwHash = dwHash ^ pApiName[i];
                        i++ ; // utilisation de INC ECX dans duqu
            }while(pApiName[i]!=0x00);

            return dwHash;
}

dans l'exemple nous avons pris l'api "FreeLibrary" qui à pour hash 0x19BD1298

Lors d'une analyse,disposer des hashs cela permet d'avoir un point d'accroche via les APIs sur les actions réalisé par le malware


I.    Référence des Hashs Api


Nous remettons la listes des hashs par API référencé dans les premiers version de Duqu
Cela donne une bonne images des interactions avec le system Windows

Module Kernel32.dll

Hash Value
Dll
Api Function
0x88444BE9
Kernel32.dll
CreateToolhelp32Snapshot
0x92D66FBA
Kernel32.dll
Process32FirstW
0xD1A588DB
Kernel32.dll
Process32NextW
0xFCAA0AB8
Kernel32.dll
OpenProcess
0xAE75A8DB
Kernel32.dll
CreateProcessW
0xCF5350C5
Kernel32.dll
GetNativeSystemInfo
0xDCAA4C9F
Kernel32.dll
IsWow64Process
0x4BBFABB8
Kernel32.dll
lstrcmpiW
0xA668559E
Kernel32.dll
VirtualQuery
0x4761BB27
Kernel32.dll
VirtualProtect
0xD3E360E9
Kernel32.dll
GetProcAddress
0x6B3749B3
Kernel32.dll
MapViewOfFile
0xD830E518
Kernel32.dll
UnmapViewOfFile
0x78C93963
Kernel32.dll
FlushInstructionCache
0xD83E926D
Kernel32.dll
LoadLibraryW
0x19BD1298
Kernel32.dll
FreeLibrary
0x6F8A172D
Kernel32.dll
CreateThread
0xBF464446
Kernel32.dll
WaitForSingleObject
0xAE16A0D4
Kernel32.dll
GetExitCodeThread
0x3242AC18
Kernel32.dll
GetSystemDirectoryW
0x479DE84E
Kernel32.dll
CreateFileW
0xB67F8157
Kernel32.dll
CreateRemoteThread

Module psapi.dll

Hash Value
Dll
Api Function
0xBCC7C0DA
psapi.dll
GetModuleFileNameExW
 
Module advapi32.dll

Hash Value
Dll
Api Function
0x6012A950
advapi32.dll
RegOpenKeyExW
0xC6151DC4
advapi32.dll
RegQueryValueExW
0xF03A2554
advapi32.dll
RegCloseKey
0x9C6E14F8
advapi32.dll
CreateProcessAsUserW
0x702B6244
advapi32.dll
DuplicateTokenEx
0x2EDB7947
advapi32.dll
OpenProcessToken
0x557DBBB6
advapi32.dll
LookupPrivilegeValueW
0xE763A4A3
advapi32.dll
AdjustTokenPrivileges
 
Module version.dll

Hash Value
Dll
Api Function
0xD4DE04DA
version.dll
GetFileVersionInfoW
0xCEF01246
version.dll
VerQueryValueW
 
Module userenv.dll

Hash Value
Dll
Api Function
0x3E692063
userenv.dll
CreateEnvironmentBlock
0xAFF5F91F
userenv.dll
DestroyEnvironmentBlock
 
Module ntdll.dll

Hash Value
Dll
Api Function
0x40C4EC59
ntdll.dll
NtQueryInformationProcess
0x40C4EC59
ntdll.dll
ZwQueryInformationProcess
0x5FC5AD65
ntdll.dll
NtCreateSection
0x5FC5AD65
ntdll.dll
ZwCreateSection
0x618FB794
ntdll.dll
NtMapViewOfSection
0x1D127D2F
ntdll.dll
ZwMapViewOfSection
0xCFB04FA1
ntdll.dll
NtUnmapViewOfSection
0x468B8A32
ntdll.dll
ZwUnmapViewOfSection
0xB446D59D
ntdll.dll
NtClose
0xDB8CE88C
ntdll.dll
ZwClose

II.          Conclusions


L'intérêt si on identifie la méthode de génération des hashs d'api, on peut lister les Apis utilisés par le programme malveillant et aussi faire des rapprochement entre des échantillons
différents. Souvent le générateur peut être aussi une signature de l'auteur. l'auteur de ce programme ou schellcode utilise des sous-routines ou bloc de shellcode qui on déjà fait leurs preuves dans d'autre projet et développement. Il sera tenté des les réutilisés dans une autre conception.

Il faut pas oublier que cela peu prendre du temps de crée ses tools comme tous développeurs
Il ne réécrit pas tous mais assembles des blocs comme des classes métier ou dédier à des opérations.

Aucun commentaire:

Enregistrer un commentaire