OE PowerTool 4.5.5
Twój adres IP to: 3.239.87.20
Przeglądarka: CCBot/2.0 (https://commoncrawl.org/faq/)
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 consoleDrugi 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.23Jak 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.