Czy można zablokować adres IP po X nieudanych próbach logowania do systemu Windows Server? Nie do konkretnego konta, które wiem, jak to zrobić, ale do całej maszyny.
Uderzają nas dość brutalne ataki próbujące odgadnąć nazwy użytkowników, więc naprawdę pomogłoby to odciążyć serwer.
windows
brute-force-attacks
HeavyWave
źródło
źródło
Odpowiedzi:
Możesz to zrobić za pomocą programu PowerShell i menedżera zadań. Prawdopodobnie nie jest to idealne rozwiązanie, ale działa całkiem dobrze i mam około 100 zablokowanych adresów IP w ciągu dwóch miesięcy. Napisałem skrypt, który wybiera z określonych zdarzeń EventLog („niepowodzenie audytu”). Jeśli istnieje wiele nieudanych prób logowania z dowolnego adresu IP, jest on dodawany do reguły zapory (utworzonej ręcznie) o nazwie „BlockAttackers”, która blokuje wszelki ruch do określonych adresów IP.
Skrypt PS1:
Utwórz zadanie w harmonogramie i ustaw wyzwalacz na zdarzenie 4625 (logowanie do systemu Windows, w tym usługi terminalowe). Możesz jednak ustawić wyzwalacz, aby działał np. Dwa razy na godzinę, aby uniknąć niepotrzebnego ładowania serwera.
a po uruchomieniu uruchom skrypt PowerShell. Musisz również ustawić wyższe uprawnienia, aby uruchomić ten skrypt, w przeciwnym razie zakończy się niepowodzeniem z wyjątkiem wyjątku bezpieczeństwa.
Możesz także powiązać ten skrypt z innymi zdarzeniami bezpieczeństwa.
źródło
Wiem, że to pytanie jest stare, ale tak naprawdę był to pierwszy post na forum, na który natknąłem się, kiedy kilka tygodni temu zacząłem robić dokładnie to samo. Udało mi się znaleźć działający skrypt, który analizuje dzienniki zdarzeń 24 godziny wstecz tylko w przypadku złych wpisów w dzienniku zdarzeń logowania, chwytam te, które mają więcej niż 10 złych danych logowania, a następnie umieszczam je na liście filtrów ipsec przy użyciu polecenie netsh. Następnie napisałem plik wsadowy z tym wierszem
powershell .\*scriptname.ps1*
i utworzyłem zaplanowane zadanie, aby uruchamiać plik wsadowy co 24 godziny (z jakiegoś powodu nie można go wykonać bezpośrednio).Wiem, że ten skrypt jest prawdopodobnie nieefektywny, ale kiedy zacząłem nad tym pracować, nie miałem absolutnie żadnego doświadczenia w PowerShell, więc moja zdolność do optymalizacji skryptów pozostawia wiele do życzenia. Jednak pomimo tego faktu pomyślałem, że podzielę się tym z każdym, kto mógłby z niego skorzystać.
Dziękuję Remundi za pomysł, że ten plakat sprawił, że wpadłem na pomysł użycia PowerShell do przeszukiwania dzienników zdarzeń.
źródło
Ten skrypt bazuje na odpowiedzi remunda i idzie nieco dalej https://serverfault.com/a/397637/155102 Uwzględnia regułę „BlockAttackers”, która nie ma jeszcze żadnych adresów IP (co zwraca ciąg „*”). Zapisuje również komentarz do pliku dziennika, aby poinformować Cię, kiedy adres IP został dodany do reguły.
Dobrą wskazówką jest utworzenie reguły „BlockAttackers”, która blokuje adresy IP, ALE najpierw musi być wyłączona. Następnie uruchom ten skrypt raz ręcznie, aby wypełnić pole „Adresy zdalne” rzeczywistymi adresami IP, które powinny zostać zablokowane. Spójrz na te adresy IP, aby upewnić się, że nie dodano nic krytycznego, a następnie włącz regułę zapory. Dodaj tę regułę do zapory sieciowej zgodnie z opisem remunda.
Git dla tego skryptu
źródło
Nie mogę docenić tej odpowiedzi, ale https://serverfault.com/users/7200/evan-anderson wspomniał o swoim projekcie http://opensource.wellbury.com/projects/windows_sshd_block/newest-release/
źródło
Zasadniczo nie jest dobrym pomysłem, aby pozwolić komuś innemu na kontrolowanie reguł zapory. Właśnie o to tutaj prosisz.
źródło
To jest stary wątek. Korzystałem ze skryptu dostarczonego przez kevinmicke w latach 2014-2015. Potem przestało działać. Musiałem więc go trochę edytować, aby zastosować uwierzytelnianie Windows Network Security, które nie pozostawia adresów IP w dzienniku bezpieczeństwa. Ponadto, ponieważ nie mam zwykłego FTP, usunąłem tę część, ponieważ powodowała błędy, ponieważ nie było folderu dziennika. Główna zmiana dotyczy źródła zdarzeń RDP.
Powyższy skrypt będzie działał w systemie Windows 2012. Jeśli nadal używasz Pulpitu zdalnego z uwierzytelnianiem na poziomie dostępu do sieci w systemie Windows 2008, może być konieczne wykonanie następującej sztuczki. System Windows 2008 nie ma adresów IP w dzienniku zabezpieczeń i wydaje się, że nie ma ich również w dzienniku Microsoft-Windows-RemoteDesktopServices-RdpCoreTS. Musiałem więc użyć 2 dzienników - dopasować zdarzenia z dziennika bezpieczeństwa do udanych prób dostępu do portu 3389 w dzienniku zapory. To zgadywanka, ale wydaje się, że wykrywa ataki hasłem. Oto część, która gromadzi naruszające adresy IP:
UWAGA: Nie zapomnij włączyć dzienników zapory. UWAGA 2: Nie jestem ekspertem od PowerShell, więc byłoby miło, gdyby niektórzy guru mogli poprawić / poprawić mój kod.
źródło
Używam ts_block freeby.
Zasadniczo jest to „program VBScript, który działa jako ujście zdarzeń WMI, odbierając zdarzenia zarejestrowane przez system Windows w odpowiedzi na nieprawidłowe logowanie do usług terminalowych”.
Wygląda na to, że działa idealnie, a skrypt jest prosty, jeśli trzeba go zmodyfikować. Możesz albo pozwolić mu rejestrować próby, a następnie banować na podstawie liczby dozwolonych prób i / lub możesz na stałe wpisać nazwy logowania, do których nie chcesz dać dostępu.
Zostałem złapany przez przypadkowe dodanie tej samej nazwy dwa razy, a usługa przechodzi w niekończącą się pętlę restartującą się co 1500 ms, ale bardzo łatwo ją naprawić / zmodyfikować, jeśli nie masz nic przeciwko VBS.
Moje obecne ustawienia to tylko jedna ponowna próba i jesteś zbanowany na 2 dni, a loginy takie jak „admin”, „administrator”, „administrator”, „gość” itp. Są automatycznie blokowane. Czy zmiana adresu IP powinna być prosta?
Trochę uzależniające, aby wejść i zobaczyć, które stworzenia zostały zakazane na noc ...
źródło
Masz na myśli logowanie do serwera / domeny lub logowanie do strony internetowej działającej na serwerze? Jeśli masz na myśli logowanie do serwera / domeny, odpowiedź brzmi: nie. System Windows nie ma pojęcia blokowania adresów IP na podstawie nieudanych prób logowania, ponieważ adresy IP nie są jednostkami bezpieczeństwa. Mogą istnieć narzędzia innych firm, które mogą to zrobić, ale nie jestem świadomy żadnego z nich, ponieważ nigdy tego nie szukałem.
źródło
Jeśli atakowany jest serwer WWW, możesz zainstalować rozszerzenie dynamicznych ograniczeń IP . Jeśli dotyczy to standardowego uwierzytelniania na serwerze, powinieneś być w stanie wdrożyć izolację domeny i serwera, co ograniczy zakres ataków do komputerów przyłączonych do domeny i może być ustawione tak, aby zezwalało tylko na próby z systemów, do których musisz mieć dostęp. serwer. W systemie Windows zapobieganie atakom siłowym polega na ustawieniu zasady blokowania konta na wartość 10 minut, a zasady złego hasła na 3 próby - oznacza to, że atakowane konto zostanie zablokowane na 10 minut po 3 próbach. Połączenia IP domyślnie nie są blokowane w systemie Windows. (Nawiasem mówiąc, jestem również ciekawy, ile prób logowania na sekundę ma wpływ na system)
źródło
http://nerderies.blogspot.co.at/2012/12/automatically-banning-ips-with-windows.html
źródło
Używając świetnego skryptu remunda jako punktu wyjścia, dodałem jedną ważną rzecz, której brakowało: blokowanie adresów IP przed nieudanymi logowaniami FTP . System Windows Server nie rejestruje adresu IP w dzienniku zabezpieczeń, gdy ktoś nie zaloguje się za pośrednictwem FTP, ale zamiast tego ustawia „Źródłowy adres sieciowy” na myślnik. FTP jest bardzo częstym wektorem ataku w przypadku ataków typu brute force, dlatego do jego skryptu dodałem możliwość skanowania dzienników FTP bieżącego dnia w poszukiwaniu wielu błędów logowania oraz blokowania również tych adresów IP.
Aktualizacja 2014/02/07: Kiedy wprowadziłem kilka drobnych poprawek do tego, aby przetwarzać wszystkie moje stare dzienniki FTP, zdałem sobie sprawę, że kiedy mieli ogromną liczbę prób (50 000+), utworzone tablice byłyby ogromne i sprawiłyby, że przetwarzanie było niesamowicie wolne. Od tamtej pory przepisałem go, aby uczynić go bardziej wydajnym podczas przetwarzania dzienników FTP.
Dowiedziałem się również, że istnieje arbitralny twardy limit 1000 adresów IP w jednej regule Zapory systemu Windows. Z powodu tego limitu potrzebowałem go, aby automatycznie utworzyć nową regułę, gdy najnowsza zapełni się. Teraz to robi, a także tworzy początkową regułę zapory (jeśli nie tworzysz własnej), więc jedyną możliwą konfiguracją jest dodanie jej do harmonogramu, aby działała, gdy wystąpi zdarzenie 4625.
Oto kod, który został przetestowany zarówno w systemie Windows Server 2008 R2, jak i Windows 7:
źródło
Set-ExecutionPolicy RemoteSigned
, abyś mógł uruchamiać skrypty lokalne. W przeciwnym razie pojawi się błąd: „Nie można załadować pliku blockattackers.ps1, ponieważ wykonywanie skryptów jest wyłączone w tym systemie”.Skrypt remuda , edytowany przez kevinmicke (7 lutego o 21:59), nie sprawdził kanału kontrolnego FTP, który ma własny folder w moim systemie (Windows Server 2008 R2). Ponadto
530 11001
nie rozpoznano zdarzeń, które wydają się pojawiać, gdy haker próbuje jedynie uzyskać dostęp do kanału kontrolnego. Dołączyłem więc kilka wierszy w skrypcie, aby sprawdzić drugi folder dziennika FTP:Nazwa folderu dziennika FTP w
FTPSVC*
linii 54 musi zostać wypełniona z przyczyny. W wierszach 115 i 116 należy wprowadzić adres IP twojego serwera (IPv4 i IPv6), w przeciwnym razie adres IP własnego serwera może zostać dodany do reguły zapory sto razy. Zmienną$int_block_limit
ustawiam na 1 na moim serwerze, więc skrypt blokuje atak hakerów powodujący zdarzenie 4625 w ciągu dwóch sekund. Nadal zastanawiam się nad uruchomieniem skryptu oprócz wystąpienia 4625 zdarzeń w ciągu kilku minut. Oczywiście możliwe byłoby również oddzielenie skryptów i pozwolenie, by jeden skrypt sprawdzał zdarzenia 4625 wywołane przez zdarzenie 4625, a drugi sprawdzał foldery dziennika FTP co 5 lub 10 minut, nawet przy oddzielnej regule zapory i plik dziennika.źródło
Dodałem mój do SQL
Następnie musisz dodać tablicę do ips_all
źródło