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