Conficker et process Lsass
Si la consommation CPU du process lsass.exe est anormale sur les DCs de l’un de vos sites cela peut être lié à la présence du virus Conficker sur les postes de travail de ce site. Le lien mentionné vous indique comment limiter sa propagation et désinfecter les postes infectés. Mais comment identifier facilement les postes déjà infectés?
Ce problème a déjà été traité dans un post de l’équipe AskDS, nous allons le compléter avec des scripts et commentaires qui vous aideront à mieux venir à bout de ce virus.
La méthode qui s’est avérée la plus payante est l’utilisation de la stratégie permettant d’activer les échecs d’authentification dans le journal de sécurité des DCs. Pour cela créer une GPO avec filtrage de sécurité sur les DCs impactés qui permet d’appliquer les paramètres suivants :
Mettre à jour les stratégies de groupe sur les DCs concernés, vous devriez voir apparaître les événements suivants dans le journal de sécurité:
Laisser tourner cet audit pendant plusieurs minutes puis désactiver la GPO de façon à ne pas trop poluer votre journal de sécurité. Voyons maintenant plus précisément le contenu de l’événement d’ID 672:
Nous voyons que nous pouvons récupérer l’IP du poste infecté via “Client Adress”. Nous allons donc réaliser un script qui scanne le journal de sécurité du DC à la recherche de cet événement et nous compte le nombre d’occurences de chaque IP. Nous aurons alors les PCs les plus infectés et sollicitant le plus notre DC.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 'Enter Name of your DC strComputer = "XXXXXX" Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set fso = CreateObject("Scripting.FileSystemObject") sCurPath = fso.GetAbsolutePathName(".") Set FLog = FSO.CreateTextFile(sCurPath&"\ip.txt") Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 'Get time one hour ago dtmCurrentDate = DateAdd("h", -1, now) 'Format time dtmTargetDate = Year(dtmCurrentDate) dtmMonth = Month(dtmCurrentDate) If Len(dtmMonth) = 1 Then dtmMonth = "0" & dtmMonth End If dtmTargetDate = dtmTargetDate & dtmMonth dtmDay = Day(dtmCurrentDate) If Len(dtmDay) = 1 Then dtmDay = "0" & dtmDay End If dtmTargetDate = dtmTargetDate & dtmDay dtmHour = Hour(dtmCurrentDate) If Len(dtmHour) = 1 Then dtmHour = "0" & dtmHour End If dtmTargetDate = dtmTargetDate & dtmHour dtmTargetDate = dtmTargetDate & "0000.000000" dtmTargetDate = dtmTargetDate & chr(43) & Cstr(120) 'search all EventID 672 occuring one hour ago Set colLoggedEvents = objWMIService.ExecQuery _ ("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Security' AND EventCode = '672' AND TimeWritten >='"&dtmTargetDate&"'") For Each objEvent in colLoggedEvents 'parse the Message IP is between Client Adress and Certificate Issuer Name message = objEvent.Message message1 = split(message,"Client Address:") messagef = split(message1(1),"Certificate Issuer Name:") FLog.Writeline (messagef(0)) Next msgbox "View all IPs in ip.txt, now lets count occurences" FLog.close Set df1 = fso.OpenTextFile(sCurPath&"\ip.txt",ForReading,True) Set FLog2 = fso.CreateTextFile(sCurPath&"\result.csv") Dim IPCOUNT(80000,2) 'Initialize counting table for j=0 to 80000 IPCOUNT(j,0) = "0" IPCOUNT(j,1) = 0 Next 'read lines of ip.txt and save result in table, if a new IP is discovered a new column is filled in with IP otherwise counter is increased by one Do while Not df1.AtEndOfStream IPTST = df1.readline() marque = "non" if IPTST <> "" then i=0 Do While IPCOUNT(i,0) <> "0" if IPCOUNT(i,0) = IPTST then IPCOUNT(i,1) = IPCOUNT(i,1) + 1 marque = "oui" End if i = i + 1 Loop if marque = "non" then IPCOUNT(i,0) = IPTST IPCOUNT(i,1) = 1 End if End if Loop df1.close 'write table result in text file for k=0 to 80000 FLog2.writeline(IPCOUNT(k,0)&";"&IPCOUNT(k,1)) Next msgbox "Done, Check result.csv" |
Pour télécharger le script vbs c’est ici:
Les IPs dont le nombre d’occurrences est le plus fort correspondent aux postes à traiter le plus rapidemment par votre service informatique. Cet audit est à réaliser en plusieurs fois, car biensur les postes éteints et inféctés ne sont pas localisés par cet audit. De plus Conficker s’active via des tâches planifiées, donc il se peut que lors de votre audit la tâche soit inactive. Au bout de plusieurs audits nous sommes venus à bout de ce virus sur un site particulièrement infecté, en témoigne le graphique d’activité CPU du DC ci dessous:
Pour terminer il se peut que certains postes infectés ne soient pas atteignables facilement par votre service informatique et que vous ne pouvez pas attendre pour régler ce problème de charge CPU car cela pénalise les autres utilisateurs. Il existe pour cela une manière simple mais radicale: bannir cette IP afin qu’elle ne contacte plus votre DC à l’aide la commande suivante, à lancer sur votre DC:
cmd /c route -p add %CLIENT_IP_ADRESS% MASK 255.255.255.255 %UNUSED_IP_ADRESS%
La variable %UNUSED_IP_ADRESS% correspond à une adresse IP du même subnet que votre DC qui ne pointe sur rien, et %CLIENT_IP_ADRESS% l’adresse IP du poste infecté. Le commutateur /p permet de garder cette route même après reboot du DC. Cette commande est à lancer sur tous les DCs que le poste infecté est susceptible d’atteindre.
This post is also available in: Anglais