Próby włamania na mój komputer - analiza statystyczna

   Pomyślałem, że fajnie byłoby spojrzeć na logi z ataku od strony statystycznej: jakie konta były najczęściej atakowane i z jakich adresów przeprowadzano atak. Do tego celu wykorzystałem PowerShell. Powstały dwa skrypty, które realizują wspomniane zadania.

Get-WinEvent -filterhashtable @{logname='security';id=4625} |% {([regex]"Nazwa konta:\s*(.*)").matches($_.Message)[1].groups[1].value} | group-object | sort count -descending | select count,name |% {write-host $_.count $_.name}
      

Najpierw, za pomocą cmdletu Get-WinEvent, pobieramy zdarzenia z dziennika bezpieczeństwa o identyfikatorze 4625. Następnie parsowany jest komunikat, który znajduje się we właściwości Message danego zdarzenia. Z niego, za pomocą wyrażenia regularnego, wyciągana jest nazwa konta. Ponieważ w komunikacie jest jeszcze konto komputera, i jest ono pierwsze, wybieramy drugie dopasowanie, znajdujące się pod indeksem 1. Podobnie wybieramy drugi element z tablicy Groups, gdyż interesuje nas to, co wyrażenie regularne łapie w nawias. Pod indeksem 0 jest bowiem całe dopasowanie. W tym momencie dostajemy listę kont. Wiele z nich się oczywiście powtarza. W związku z tym za pomocą Group-Object są one grupowane. Potem lista ta jest sortowana malejąco, w ten sposób dostajemy listę od najczęściej atakowanych kont do najrzadziej atakowanych. Ponieważ w wyniku grupowania dostajemy jeszcze kolumnę Group, pozbywamy się jej za pomocą cmdletu select, który wybiera tylko kolumny Count i Name. Tutaj jednak pojawia się problem. Otóż Select-Object (tutaj stosowany jest alias select) wybierając obiekty, opakowuje je w nowy obiekt. Skutkuje to tym, że przy wyświetlaniu są dodawane kropki. Nie wygląda to zbyt dobrze, w związku z czym w ostatniej fazie wyciągamy te obiekty z powrotem i wyświetlamy za pomocą Write-Host. Atakowanych kont było sporo, najczęstsze z nich:

658 administrator
160 admin
112 user
56 kierownik
54 test
52 user1
28 user3
27 user2
27 test1
24 admin1
18 support
17 server
17 adm
16 root
15 a
15 backup
15 aSPNET
15 sql
15 123
15 user4
15 user5
15 1
15 sUPPORT_388945a0
15 sys
14 test3
14 admin2
14 test2
13 john
13 guest
13 david
12 actuser
12 owner
12 console

Drugi skrypt jest bardzo podobny, różni się praktycznie tylko użytym wyrażeniem regularnym:

get-winevent -filterhashtable @{logname='security';id=4625} |% {([regex]"Adres.*:\s(.*)").matches($_.message)[0].groups[1].value}| group-object | sort count -descending | select count,name |% {write-host $_.Count $_.Name}

Wyniki są następujące:

1274 95.110.197.241
630 78.186.57.132
545 87.106.253.42
415 180.126.130.120
48 188.130.251.42
10 188.27.148.23

Jak widać, host opisywany przed trzema dniami, był najaktywniejszy. Żeby jednak statystyki były bardziej miarodajne, trzeba by zbierać logi przez dłuższy okres czasu, np. miesiąca, żeby mieć dane od większej liczby atakujących. W każdym razie przedstawione skrypty są całkiem dobrymi narzędziami do analizy windowsowego dziennika zdarzeń. Przerabiając je można wyciągać też różne inne informacje, niekoniecznie związane z bezpieczeństwem. PowerShell ma bardzo duże możliwości i pozwala na wygodną analizę logów.