Jak zatrzymać ataki siłowe na serwer terminali (Win2008R2)?

23

Jestem bardziej zaznajomiony z narzędziami Linuksa, aby powstrzymać ataki siłowe, więc mam problem ze znalezieniem odpowiednich narzędzi dla systemu Windows. Korzystam z systemu Windows Server 2008 R2 z serwerem terminali i chciałbym zablokować adres IP po wielokrotnych próbach logowania przez RDP. Jakieś wskazówki?

onik
źródło
3
Czy naprawdę musisz sobie z tym poradzić na serwerze Windows? Czy rozważałeś możliwość ograniczenia prędkości na swoim urządzeniu brzegowym (firewall / router)?
Zoredache,
2
Windows to VPS prowadzony przez firmę hostingową, więc nie mam dostępu do urządzeń sieciowych.
onik
Można skonfigurować zdarzenie harmonogramu zadań przy nieudanych logowaniach, aby uruchomić skrypt PS; PS Svript musiałby policzyć, ile razy próbowała IP, a następnie zablokować ją za pomocą reguły zapory. Nie mam takiego skryptu, ale można by go stworzyć.
Chris S
@Chris S: To mniej więcej to, co robi mój skrypt ts_block, z wyjątkiem tego, że działa jako „zapadnięcie” dziennika zdarzeń i odbiera wywołanie zwrotne za każdym razem, gdy rejestrowane są nowe zdarzenia. Jako taki działa mniej więcej w czasie rzeczywistym.
Evan Anderson
Użyj VPN - zainstaluj np. OpenVPN na routerze. Nigdy nie umieszczaj okna systemu Windows bezpośrednio w Internecie - jest to niebezpieczne.
integratorIT

Odpowiedzi:

5

aby zatrzymać próby logowania rdp, jak już powiedziano, potrzebujesz kontroli zapory ogniowej w celu odizolowania konkretnego adresu IP. Możesz dokonać pewnych ustawień w Narzędziach administracyjnych -> Menedżer usług terminalowych, ale nie możesz nic zrobić, aby zatrzymać jeden adres IP w ten sposób. Być może musisz rozważyć skrypt wsadowy do nasłuchiwania portu rdp i kontrolowania błędów logowania, więc jeśli byłyby próby totu (wybierasz liczbę ...) przez ten sam adres IP, to żadna inna próba w znanym okresie czasu nie mogłaby być. Nie jestem pewien, czy to możliwe, ale może to być sposób ...

Nicola Boccardi
źródło
1
Ok, więc to tak, jak myślałem. Muszę przestudiować Podgląd zdarzeń, aby sprawdzić, czy mogę wyeksportować adresy IP do pliku w celu przetwarzania wsadowego. Na razie trzeba je
grepować
5
Zmień port, na który RDP odpowiada.
JohnThePro
Zabawne jest to, że chcę ograniczyć adresy IP, ale awaria logowania nie zgłasza adresu IP
Csaba Toth
Zmiana portu tylko zaciemnia. Znajdą nowy port z inteligentnym oprogramowaniem do skanowania portów.
TheLegendaryCopyCoder
@CsabaToth Dziennik zdarzeń domyślnie nie rejestruje użytecznych informacji. Możesz włączyć pełne rejestrowanie w usłudze Netlogon z kontrolera domeny lub komputera odbierającego żądania RDP o dodatkowe informacje. Możesz włączyć rejestrowanie zapory systemu Windows, aby określić adres IP.
Michael Steele,
25

Naprawdę powinieneś zablokować te próby na skrajnej zaporze ogniowej, choćby z ograniczeniem szybkości. Jeśli nie możesz tego zrobić, czytaj dalej.

Jeśli nie możesz zablokować zapory brzegowej i potrzebujesz protokołu RDP otwartego tylko dla części Internetu, użyj wbudowanych funkcji Zapory systemu Windows, aby zablokować połączenia przychodzące.

Na koniec, jeśli naprawdę musisz mieć RDP otwarty dla całego Intenetu, możesz rzucić okiem na zmodyfikowaną wersję mojego programu SSH do blokowania brutalnej siły dla Windows, który mam w repozytorium github . Ten skrypt, ts_block, blokuje brute force próby logowania usług terminalowych w systemach Windows Server 2003, 2008 i 2008 R2. Niestety ze względu na zmiany zdarzeń rejestrowanych przez system Windows podczas korzystania z warstwy zabezpieczeń TLS / SSL dla protokołu RDP skrypt ten staje się coraz bardziej nieskuteczny . (Dlaczego Microsoft postanowił pominąć adres IP hosta, który próbuje się uwierzytelnić, jest poza mną. Wydaje się, że rejestrowanie tego byłoby bardzo ważne, prawda?)

Evan Anderson
źródło
1
Używam tutaj strony ts_block i jest niesamowita! Mój serwer Windows (2008 R2) zwalniał pod wpływem licznych ataków siłowych, ale już nie! TS_BLOCK Jest napisany w vbscript - i może / powinien zostać zainstalowany jako usługa systemu Windows - ale nie używaj wersji MSI, po prostu edytuj kod .vbs i zainstaluj się za pomocą programu nssm. Nie potrzebujesz wpisów do rejestru, ponieważ kod .vbs ma domyślne ustawienia. <p> Edytowałem kod i blokuje KAŻDY błąd logowania natychmiastowy - ponieważ jako mój własny serwer internetowy nie powinno być żadnych nieudanych prób logowania. Tak więc skrypt
To całkiem słodkie, Evan. Mam pół umysłu, aby ponownie wdrożyć go w języku C #, abyś mógł uruchomić go jako natywną usługę systemu Windows zamiast hakować przy użyciu srvany i tym podobnych. Jeśli kiedykolwiek to zrobię, wyrzucę to na Githuba lub coś w tym stylu.
Ryan Bolger
1
@RyanBolger: Mam słabość do VBScript i ogólnie tłumaczonych języków. Uważam, że użycie „Non-Sucking Service Manager” sprawia, że ​​uruchamianie programów VBScript jako usług jest dość bezbolesne.
Evan Anderson
ts_block jest niesamowity, właśnie tego szukałem „Dziękuję Evan Anderson” Kiedy umieściłem swój pierwszy wirtualny serwer Terminal na żywo bezpośrednio w Internecie w ciągu jednego dnia miałem ponad 10 000 nieudanych logowań. Kiedy mam czas, mogę go zmodyfikować i dodać stałe blokowanie na podstawie liczby poprzednich bloków. np .: IP jest blokowane 4 razy w ciągu jednego dnia. (O ile już go nie utworzono)
Na podstawie ts_blockskryptu tutaj znajduje się rozwiązanie, które wykorzystuje fail2banbramę do blokowania atakujących: wqweto.wordpress.com/2013/12/10/…
wqw
3

Mam program w języku C #, który robi dokładnie to. Miałem problem z serwerem 2008 R2, w którym dziennik zdarzeń nie zawsze zawierał adresy IP użytkownika (jeśli łączył się z nowszymi klientami pulpitu zdalnego). Niektóre usługi wdrażają własnego dostawcę weryfikacji danych, który nie zapewnia wszystkich potrzebnych informacji.

http://cyberarms.net/security-insights/security-lab/remote-desktop-logging-of-ip-address-%28security-event-log-4625%29.aspx

W przypadku Pulpitu zdalnego odkryłem jednak, że przejście do „Konfiguracji hosta sesji pulpitu zdalnego” i zmiana połączenia RDP-TCP na warstwę zabezpieczeń „Warstwa zabezpieczeń RDP” zamiast „Negocjuj” lub „SSL (TLS 1.0)” przywróciły Adresy IP.

To, czy naprawdę chcesz to zrobić, to kolejne pytanie: „Jeśli wybierzesz warstwę zabezpieczeń RDP, nie będziesz mógł używać uwierzytelniania na poziomie sieci”.

Uważam, że http://www.windowsecurity.com/articles/logon-types.html jest pomocny. Użyłem EventLogWatcher i związałem się z „* [System / EventID = 4625 lub System / EventID = 4624]”, więc mogłem zresetować złe liczenie na sukces, jeśli użytkownik naprawdę pomylił swoje hasło. Również dodałem do białej listy: 1, 0.0.0.0, 127.0.0.1 i „-”. Możesz lub nie chcesz umieszczać na białej liście LAN / adresy IP zarządzania.

Korzystam z Forefront TMG, więc użyłem API, aby w ten sposób dodać złe adresy IP do grupy adresów IP i poprosiłem Cisco o dodanie dostępu API do jednego z ich routerów SMB (co zapewniło mnie, że może to zrobić!)

Jeśli chcesz użyć natywnej Zapory systemu Windows do ich zablokowania, zapoznaj się z interfejsem API („netsh advfirewall”).

Dopuszczam x liczby prób przed zbanowaniem, a sukces zresetuje liczenie.

Matthew1471
źródło
2

Czy próbujesz zapobiec włamaniom lub zaśmieconym dziennikom? Jeśli próbujesz zapobiec włamaniom, system Windows ma wbudowany sposób blokowania prób zalogowania się. W programie Konfiguracja komputera -> Zasady -> Ustawienia systemu Windows -> Ustawienia zabezpieczeń -> ustawiono Zasady grupy dotyczące progu blokady konta. Zasady konta -> Zasady blokady konta.

Atakujący będą używać popularnych nazw użytkowników, takich jak Administrator, i na pewno je zablokują. Będziesz potrzebował osobnego konta do faktycznej administracji, co prawdopodobnie jest i tak wskazane.

Automatyczne blokowanie na poziomie zapory będzie wymagało odczytu skryptów z automatyczną aktualizacją reguł zapory. W ten sposób powinieneś być w stanie dodać reguły oparte na adresie IP. Jest to w zasadzie to, co robi iptables w systemie Linux.

Może to być nieco oczywiste, ale czy rozważałeś także uruchomienie usług pulpitu zdalnego na niestandardowym porcie ? To było dla mnie bardzo skuteczne w pokonywaniu włamań.

Joel E. Salas
źródło
Blokowanie powtarzających się prób połączenia z zaporą jest dobrą praktyką, ale założenie, że ataki siłowe nie będą miały miejsca „za zaporą”, nie jest zbyt dobrym założeniem. Moim zdaniem, brutalny blok oparty na hoście jest dość dobrym pomysłem. Korzystanie z blokady konta jest zdecydowanie dobrym pomysłem, ale podoba mi się również pomysł zmiażdżenia brutalnej siły, aby utrzymać dzienniki w czystości.
Evan Anderson
1
Jestem już uruchomiony na porcie nonstd, a moim większym zmartwieniem jest faktyczne przełączenie mojego serwera w tryb offline z powodu dużej liczby prób logowania.
boomhauer
Jedną z opcji jest całkowite wyłączenie dostępu do Pulpitu zdalnego za pośrednictwem Zapory, ale na serwerze działa usługa, która ponownie konfiguruje zaporę, aby przepuszczać ruch RDP, usługa ta jest chroniona hasłem i może umożliwia dostęp tylko z „zaufanego” źródła IP ( takich jak zasięg IP telefonu komórkowego lub biuro). Wprowadza problemy, ale działa.
Dai,
1

Istnieje kilka innych rozwiązań, także jeśli chcesz zamiast tego korzystać z GUI i naprawdę stworzyć różne zestawy reguł dla różnych zdarzeń. Najłatwiejszy byłby RDPGuard (hxxp: //www.rdpguard.com), ale w środowisku korporacyjnym prawdopodobnie potrzebujesz więcej raportów, takich jak skąd przyszedł atak (kraj, pochodzenie) i jaka nazwa użytkownika została użyta, abyś mógł szybko zdecyduj, czy to jeden z twoich użytkowników przypadkowo się zablokował lub próbował zalogować się z miejsca, w którym wiesz, że nie.

Osobiście lubię Syspeace (hxxp: //www.syspeace.com), który robi to wszystko dla nas, ale pomyślałem, że i tak wspomnę o nich obu

Juha Jurvanen
źródło