Solo gli utenti registrati possono leggere l'articolo sul forum. Registrati o effettua il login!
Solo gli utenti registrati possono leggere l'articolo sul forum. Registrati o effettua il login!
"Scusate, ma se quest'anno in Texas ci avete spedito questo deficiente, vuol dire che c'è speranza per tutti?"
tra russi ed americani in realtà non sò chi sia il peggiore.. di certo c'è che trovano sempre una scusa buona per farsi i c@zzi degli altri!
hanno mezzi, capacità e competenze necessarie per scatenare un pandemonio digitale ma credo e spero che abbiano loro stessi troppo da perderci quindi desistano
Al di là dell'etica, questi malware sono veramente interessanti da studiare. Il livello di complessità le rende delle piccole opere d'arte.
Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.
effettivamente tutta la struttura, a partire dall'ideazione indica chiaramente che a metterci
le mani è un gruppo all'altezza e ben organizzato.
Partendo da alcune certezze che G.Data ha riscontrato nelle attività di questo malware e, più
precisamente nella creazione di una sub-chiave nel registro dal nome "Ultra3" all'interno del HiveKey
LocalMachine, ho buttato giù qualche riga di codice in VBScript (da inserire in uno script) che
attivate ne possano verificare l'esistenza.
Volendo, qualora non venisse rilevato, è anche possibile far rimanere lo script residente in memoria
(nella sessione corrente) in attesa che quella chiave venga (speriamo di no) creata.
Per il momento espleta le funzioni di una semplice sentinella; le attività da compiere al momento
della verifica dell'esistenza di quella particolare chiave di registro, attribuibile a UroBuros, vedrò di
aggiungerle successivamente (tempo permettendo).
codice:Option Explicit Public intTotChiavi, arChiavi() '/----- Dim boolEsisteChiave, boolRisultato, boolErrore Dim objRegistro, objDizionario, objChiave Dim strComputer, strHive, strPath, strChiave Dim strPathChiave, strValore, strMessaggio, y '/-- boolEsisteChiave = False strComputer = "." strHive = "HKLM" strPath = "System\CurrentControlSet\Services" strChiave = "Ultra3" strPathChiave = strPath & "\" & strChiave strValore = "" '/-- Set objRegistro = New clsRegistro '/-- boolRisultato = objRegistro.Connetti(strComputer) '/-- If boolRisultato Then '/----- enumera le sub-chiavi della chiave madre di quella da '/-- ricercare boolRisultato = objRegistro.EnumeraChiavi(strHive, strPath) '/-- If boolRisultato Then '/----- imposta l'oggetto della classe necessario all'enumerazione Set objDizionario = objRegistro.get_EnumDizionario '/-- strMessaggio = Empty ReDim arChiavi(intTotChiavi) y = 0 '/-- For Each objChiave In objDizionario arChiavi(y) = objChiave y = y + 1 '/-- If obJChiave = strChiave Then boolEsisteChiave = True Next Else WScript.Echo "Non esistono sub-chiavi all'interno della chiave." End If '/----- If boolEsisteChiave Then WScript.Echo "La Chiave che " & Chr(232) & " stata ricercata: " & vbCrLf & vbCrLf & _ strPathChiave & vbCrLf & vbCrLf & Chr(232) & " gi" & Chr(224) & " esistente!" Else If MsgBox("La Chiave che " & Chr(232) & " stata interessata alla ricerca: " & vbCrLf & vbCrLf & _ strPathChiave & vbCrLf & vbCrLf & "non esiste attualmente all'interno del Registro di Sistema." & VbCrLf & _ "Rispondendo 'SI' a questa finestra di dialogo, le attivit" & Chr(224) & " dello script permarranno in background, " & _ "residenti in memoria, sino allo shutdown del sistema." & _ vbCrLf & vbCrLf & "Si desidera continuare ?", vbYesNo) = vbNo Then Wscript.Quit End If End If If Not boolEsisteChiave Then With objRegistro '/----- '/----- crea ed imposta l'oggetto WMI che permetterà la '/-- '/-- creazione della eventuale chiave di recupero '/-- boolRisultato = .CreaChiave(strHive, strPathChiave) '/-- '/-- '/-- If boolRisultato Then '/-- WScript.Echo "Chiave correttamente creata." '/-- Else '/-- WScript.Echo "Impossibile creare la chiave." '/-- End If '/----- Do '/----- crea ed imposta l'oggetto WMI che permetterà di controllare '/-- l'esistenza della chiave boolRisultato = .EsisteChiave(strHive, strPath, strChiave) '/-- '/----- verifica l'eventuale creazione della chiave ricercata If boolRisultato Then '/-- WScript.Echo "ATTENZIONE !!!" & vbCrLf & vbCrLf & "La Chiave interessata alla ricerca: " & vbCrLf & vbCrLf & _ strPathChiave & vbCrLf & vbCrLf & Chr(232) & " stata appena creata." '/-- boolEsisteChiave = True '/-- Exit Do End If '/----- Wscript.Sleep 5000 Loop '/----- '/----- crea ed imposta l'oggetto WMI che permetterà la '/-- '/-- cancellazione della chiave ricercata '/-- boolRisultato = .CancellaChiave(strHive, strPathChiave, True) '/-- '/-- '/-- If boolRisultato Then '/-- WScript.Echo "Chiave correttamente cancellata." '/-- Else '/-- WScript.Echo "Impossibile cancellare la chiave." '/-- End If '/----- '/-- End With End If '/-- End If WScript.Quit Sub StatusScript ( strMessaggio ) '/----- se lo script è stato avviato tramite CSCRIPT, questa procedura '/-- avvia la linea di comando in una shell DOS. Se lo script viene '/-- invece normalmente avviato con WSCRIPT, non utilizzerà alcuna Shell '/-- If Lcase(Right(Wscript.FullName, 12)) = "\cscript.exe" Then Wscript.Echo strMessaggio End Sub Class clsRegistro Dim REG_SZ Dim REG_EXPAND_SZ Dim REG_BINARY Dim REG_DWORD Dim REG_QWORD Dim REG_MULTI_SZ Dim REG_RESOURCE_LIST Dim REG_FULL_RESOURCE_DESCRIPTOR Dim REG_RESOURCE_REQUIREMENTS_LIST '/-- Dim g_TipoRegistro Dim g_EnumDizionario Dim g_ProviderRegistro '/-- Private Sub Class_Initialize() REG_SZ = 1 REG_EXPAND_SZ = 2 REG_BINARY = 3 REG_DWORD = 4 REG_MULTI_SZ = 7 REG_RESOURCE_LIST = 8 REG_FULL_RESOURCE_DESCRIPTOR = 9 REG_RESOURCE_REQUIREMENTS_LIST = 10 REG_QWORD = 11 '/-- Set g_TipoRegistro = CreateObject("Scripting.Dictionary") Set g_EnumDizionario = CreateObject("Scripting.Dictionary") '/-- g_TipoRegistro.CompareMode = vbTextCompare g_EnumDizionario.CompareMode = vbTextCompare '/-- With g_TipoRegistro .Add "HKCR", &H80000000 .Add "HKEY_CLASSES_ROOT", &H80000000 .Add "HKCU", &H80000001 .Add "HKEY_CURRENT_USER", &H80000001 .Add "HKLM", &H80000002 .Add "HKEY_LOCAL_MACHINE", &H80000002 .Add "HKEY_USERS", &H80000003 .Add "HKEY_CURRENT_CONFIG", &H80000005 .Add "REG_SZ", REG_SZ .Add REG_SZ, "REG_SZ" .Add "REG_EXPAND_SZ", REG_EXPAND_SZ .Add REG_EXPAND_SZ, "REG_EXPAND_SZ" .Add "REG_BINARY", REG_BINARY .Add REG_BINARY, "REG_BINARY" .Add "REG_DWORD", REG_DWORD .Add REG_DWORD, "REG_DWORD" .Add "REG_MULTI_SZ", REG_MULTI_SZ .Add REG_MULTI_SZ, "REG_MULTI_SZ" .Add "REG_QWORD", REG_QWORD .Add REG_QWORD, "REG_QWORD" .Add "REG_RESOURCE_LIST", REG_RESOURCE_LIST .Add REG_RESOURCE_LIST, "REG_RESOURCE_LIST" .Add "REG_FULL_RESOURCE_DESCRIPTOR", REG_FULL_RESOURCE_DESCRIPTOR .Add REG_FULL_RESOURCE_DESCRIPTOR, "REG_FULL_RESOURCE_DESCRIPTOR" .Add "REG_RESOURCE_REQUIREMENTS_LIST", REG_RESOURCE_REQUIREMENTS_LIST .Add REG_RESOURCE_REQUIREMENTS_LIST, "REG_RESOURCE_REQUIREMENTS_LIST" End With End Sub '/----- get_EnumDizionario() Function get_EnumDizionario ( ) Set get_EnumDizionario = g_EnumDizionario End Function '/----- Connetti() Function Connetti ( ByVal NomeComputer ) Dim Risultato '/-- Connetti = False '/-- NomeComputer = UCase(Trim(NomeComputer)) If Left(NomeComputer, 2) = "\\" Then NomeComputer = Mid(NomeComputer, 3) '/-- On Error Resume Next '/-- Set g_ProviderRegistro = GetObject("winmgmts:{impersonationlevel=impersonate}!//" & _ NomeComputer & "/root/default:StdRegProv") '/-- Risultato = Err.Number On Error GoTo 0 '/-- If Err.Number <> 0 Then Exit Function '/-- Connetti = True End Function '/----- Iif() Function Iif ( ByVal Condizione, ByVal ValoreVero, ByVal ValoreFalso ) If Condizione Then Iif = ValoreVero Else Iif = ValoreFalso End Function '/----- CancellaChiave() Function CancellaChiave ( ByVal NomeHive, ByVal NomeSubChiave, ByVal CancellaSubChiavi ) Dim Risultato, strSubChiaveRegistro Dim strChiaveRegistro, NomiChiavi, x '/-- CancellaChiave = False '/-- x = InStrRev(NomeSubChiave, "\") If x = 0 Then Exit Function '/-- strSubChiaveRegistro = Left(NomeSubChiave, x - 1) strChiaveRegistro = Right(NomeSubChiave, Len(NomeSubChiave) - x) '/-- If Not EsisteChiave(NomeHive, strSubChiaveRegistro, strChiaveRegistro) Then CancellaChiave = True '/-- Exit Function End If '/-- If CancellaSubChiavi Then Risultato = g_ProviderRegistro.EnumKey(g_TipoRegistro(NomeHive), NomeSubChiave, NomiChiavi) If (Risultato = 0) And (Not IsNull(NomiChiavi)) Then For x = 0 To UBound(NomiChiavi) CancellaChiave = CancellaChiave(NomeHive, _ NomeSubChiave & "\" & NomiChiavi(x), CancellaSubChiavi) If CancellaChiave <> 0 Then Exit Function Next End If End If '/-- Risultato = g_ProviderRegistro.CancellaChiave(g_TipoRegistro(NomeHive), NomeSubChiave) '/-- If Risultato <> 0 Then Exit Function '/-- CancellaChiave = True End Function '/----- EsisteChiave() Function EsisteChiave ( ByVal NomeHive, ByVal NomeSubChiave, ByVal NomeChiave ) Dim Esiste, Risultato Dim NomiChiavi, x '/-- Esiste = False '/-- Risultato = g_ProviderRegistro.EnumKey(g_TipoRegistro(NomeHive), NomeSubChiave, NomiChiavi) '/-- If (Risultato = 0) And (Not IsNull(NomiChiavi)) Then For x = 0 To UBound(NomiChiavi) Esiste = UCase(NomeChiave) = UCase(NomiChiavi(x)) If Esiste Then Exit For Next End If '/-- EsisteChiave = Esiste End Function '/----- EnumeraChiavi() Function EnumeraChiavi ( ByVal NomeHive, ByVal NomeSubChiave ) Dim Risultato, NomiChiavi, x '/-- EnumeraChiavi = False '/-- Risultato = g_ProviderRegistro.EnumKey(g_TipoRegistro(NomeHive), NomeSubChiave, NomiChiavi) '/-- g_EnumDizionario.RemoveAll '/-- If (Risultato = 0) And (Not IsNull(NomiChiavi)) Then For x = 0 To UBound(NomiChiavi) g_EnumDizionario.Add NomiChiavi(x), "" Next End If '/-- If (Risultato = 0) And (Not IsNull(NomiChiavi)) Then EnumeraChiavi = True '/-- intTotChiavi = UBound(NomiChiavi) End Function End Class
Per attivare il codice (dovrebbe funzionare con tutte le versioni di Windows a partire dalla 98) bisogna
inserirlo in un file (il nome può essere qualunque, ovviamente valido) dandogli l'estensione .VBS e
semplicemente avviarlo.
A mio modesto avviso temo che spesso anche chi li crea ne perda il controllo, ad esempio attraverso versioni scartate che poi passano di mano in mano in modo incontrollato
rispetto a qualche anno fà ora come ora c'è anche molta più gente che è in grado di farlo, vuoi per hobby vuoi molto più probabilmente perchè hanno studiato, il numero di persone con le competenze necessarie a gestirli è cresciuto e nei prossimi anni lo farà ancora.
non solo, anche la "popolazione" potenzialmente esposta agli attacchi cresce di pari passo, sempre più gente ha internet in casa e ancora di più ha modo di collegarsi quasi h24 tramite i dispositivi mobili come smartphone o tablet.
Come dice l'articolo, non siamo di fronte ad uno strumento nato per spiare un "John Doe" qualunque... Questa è roba che serve per operazioni di intelligence, mi viene davvero difficile credere che possa "scappare di mano" per sbaglio.
Il fatto stesso che il sistema non colpisca sistemi già infettati da un malware "imparentato" ma già noto e scoperto è segno della grande attenzione volta a mantenerlo stealth... Probabilmente il malware stesso è già stato "abbandonato" da chi lo controlla in favore di un più recente derivato.
Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.
Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)