Zrzucam cały ruch na porty z wyjątkiem 80 dla mojego serwera WWW.
Mam kilka takich zasad na iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Ktoś, kto ma więcej, może udostępnić? Wiem, że źli hakerzy ciągle się aktualizują, ale niektórzy z nich zawsze zaczynają od tego samego kodu. Muszę porzucić połączenie na podstawie niektórych kryteriów. Oto niektóre dzienniki Apache (usuwam ips, ale każdy atak pochodzi z tego samego):
Atak 1: Nie wiem, co próbuję zrobić, ale 50 razy z tego samego adresu IP
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Atak 2: ta próba uzyskania informacji tylko o serwerze.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Atak 3: próbują uzyskać dostęp do podatności na stronie logowania
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Atak 4: ta próba uzyskania dostępu do cgi na pierwsze żądanie (zobacz moją pierwszą zasadę iptables, aby to upuścić)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Jestem bardzo nowy z serwerem, te 4 ataki pochodzą z ostatnich 12 godzin ... Mają tysiące tygodniowo.
Odpowiedzi:
Oto kilka omówionych na kilka sposobów, związanych z pełnym mechanizmem, w jaki sposób zwiększyć bezpieczeństwo Apache2 w systemie Ubuntu 16.04.
Spis treści:
Ponadto powiedzmy, że zawsze dobrze jest używać HTTPS:
Skrypt asystenta bezpieczeństwa WWW ► Iptables
Oto skrypt
www-security-assistant.bash
. Może ci pomóc w obsłudze złośliwych adresów IP. Skrypt ma dwa tryby.Tryb automatyczny
Gdy program zewnętrzny, taki jak Apache
mod_security
, podaje złośliwy$IP
adres. W takim przypadku składnia, która wywołuje skrypt, powinna wyglądać następująco:W tym trybie skrypt zapewnia dwa etapy akcji i dla każdej akcji wyśle wiadomość e-mail do administratora (administratorów).
Pierwszy etap: w przypadku pierwszych kilku „wykroczeń” źródło
$IP
zostanie zakazane na okres równy wartości$BAN_TIME
. W tym trybie używana jest komendaat
.Drugi etap: gdy liczba wykroczeń od niektórych stanie
$IP
się równa wartości$LIMIT
,$IP
adres ten zostanie trwale zablokowany przez Iptables i zostanie dodany do$BAN_LIST
.Tryb ręczny
Ten tryb akceptuje następujące opcje:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Tworzy wpis do pliku
/var/www-security-assistant/iptables-DROP.list
i generuje regułę jako:www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Tworzy wpis do pliku
/var/www-security-assistant/iptables-DROP-CLEAR.list
, usuwa pewną regułę Iptables, usuwa$IP
z historii oraz z$BAN_LIST
:www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Tworzy tylko wpis do pliku
/var/www-security-assistant/iptables-ACCEPT.list
.www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Tworzy wpis do pliku
/var/www-security-assistant/iptables-ACCEPT.list
i generuje regułę jako:Zależności
Używa skryptu
iptables-save.sh
iiptables
łańcuchaGUARDIAN
, wyjaśnione w następnej sekcji. Stworzy i utrzyma kilka plików w$WORK_DIR
:www-security-assistant.history
- zawiera dane dotyczące przekroczeń poprzednich adresów IP.www-security-assistant.mail
- treść ostatniego e-maila wysłanego przez skrypt.iptables-ACCEPT.list
;iptables-DROP.list
aiptables-DROP-CLEAR.list
.Skrypt wymaga minimalnej konfiguracji, aby wysyłać e-maile:
Jeśli istnieje jakakolwiek skonfigurowana usługa HTTPS, jej certyfikat TLS może być używany w ramach usługi Postfix.
Ponadto skrypt korzysta
at
:sudo apt install at
.Instalacja
Utwórz katalog roboczy, nazwijmy go
/var/www-security-assistant
. Pobierzwww-security-assistant.bash
i spraw, aby był wykonywalny:Udostępnij
www-security-assistant.bash
jako polecenie niestandardowe:Zezwól
www-data
na uruchamianiewww-security-assistant.bash
bez hasła przezsudo
. Użyj następującego polecenia, aby bezpiecznie utworzyć i edytować nowy plik z dodatkowąsudoers
regułą:Dodaj następujący wiersz do pliku - zapisz plik i zakończ:
Tweak
www-security-assistant.bash
. Zmień przynajmniej wartość zmiennej$EMAIL_TO
.Badanie kontrolne
Przedstaw się jako
$AGENT
i sprawdź, czy tryb automatyczny działa poprawnie:Następnie sprawdź swój e-mail, wpisz
iptables -L GUARDIAN -n
, przejrzyj plikiwww-security-assistant.history
iwww-security-assistant.mail
. Uruchom powyższe polecenie 5 razy i sprawdź plikiiptables-DROP.list
iiptables-CURRENT.conf
.Sprawdź, czy TRYB ręczny działa poprawnie - dodaj lokalnego hosta do Białej listy:
Następnie sprawdź plik
iptables-ACCEPT.list
.Iptables - Konfiguracja podstawowa - Zapisz i przywróć
Podstawowa konfiguracja
Przeczytaj tę instrukcję przed dodaniem następujących zasad.
Przed wykonaniem kolejnych czynności otwórz nowe połączenie SSH i spróbuj zalogować się do systemu, aby sprawdzić, czy wszystko działa poprawnie!
Zapisz i przywróć
Można to osiągnąć za pomocą niestandardowych skryptów, które będą zapisywać i przywracać
iptables
stożek podczas procesu zatrzymania (lub ponownego uruchomienia) systemu. (Jeśli używamy UFW do konfiguracji reguł Iptables, ten krok nie jest potrzebny).Utwórz nowy łańcuch
Utwórz nowy łańcuch o nazwie
GUARDIAN
i wstaw go jako numer 3 doINPUT
łańcucha:Badanie kontrolne
Uruchom ponownie system i sprawdź konfigurację. Użyj
sudo systemctl reboot
(nie używaj opcji wymuszeniareboot -f
). Kiedy system jest ponownie online, możemy sprawdzić, czy nowo utworzony łańcuch istnieje:ModEvasive dla Apache2
Instalacja
Zainstaluj i włącz moduł:
Utwórz katalog dziennika i udostępnij go dla
www-data
:Dostosuj podstawową konfigurację - odznacz i edytuj niektóre dyrektywy w pliku konfiguracyjnym:
Restart Apache:
sudo systemctl restart apache2.service
.Badanie kontrolne
F5
) - musisz otrzymać komunikat o błędzie 403 Forbidden . W katalogu dziennika zostanie wygenerowany nowy plik blokady. Ten plik należy usunąć w celu dalszego wykrycia przekroczeń z tego adresu IP.ModEvasive ► WSAS ► Iptables
Tutaj skonfigurujemy
mod_evasive
rozmowęiptables
przezwww-security-assistant.bash
, utworzoną w powyższej sekcji.Edytuj
/etc/apache2/mods-available/evasive.conf
w ten sposób:Utwórz plik dziennika i uruchom ponownie Apache:
Aby przetestować tę konfigurację możemy symulować atak DDoS za pomocą
F5
metody, o których mowa powyżej, lub możemy użyć polecenia jakoab
,hping3
itpUwaga: bądź ostrożny, ponieważ
iptables
reguła używana w WSAS usunie wszystkie nowe połączenia ze źródła$IP
, w tym połączenia SSH. Dobrze jest mieć zapasowy sposób na połączenie się z serwerem podczas testów. Możesz zmienić tę regułę, aby działała tylko z portami HTTP / HTTPS.ModSecurity 2.9 dla Apache2
Instalacja
Zainstaluj i włącz moduł:
Utwórz plik konfiguracyjny:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Przeczytaj i edytuj
/etc/modsecurity/modsecurity.conf
uważnie! Dodaj lub zmień przynajmniej następujące dyrektywy:Plik
/etc/apache2/mods-enabled/security2.conf
dotyczy/etc/modsecurity/modsecurity.conf
konfiguracji Apache. Na tym etapiesecurity2.conf
będzie wyglądać następująco:Utwórz katalog dziennika:
Ustaw rotację dziennika. Najpierw utwórz plik konfiguracyjny:
Następnie edytuj nowy plik w ten sposób:
Uruchom ponownie Apache.
Badanie kontrolne
Utwórz dodatkowy plik konfiguracyjny w
/etc/modsecurity
, wywołaj go na przykładz-customrules.conf
i dodaj następującą regułę jako jego zawartość:Zrestartować serwer:
sudo systemctl restart apache2.service
. Otwórz przeglądarkę i wpiszhttps://example.com/?abc=../
. Wynik będzie: 403 Zabronione . Sprawdź pliki dziennika,/var/log/apache2_mod_security
aby uzyskać więcej informacji.Aby było przyjemniej, umieść skrypt
issues.php
w odpowiednim miejscu w swoimDocumentRoot
(tutaj zakładam, że to miejsce/var/www/html
):Następnie zmodyfikuj powyższą regułę w następujący sposób:
Uruchom ponownie Apache, a następnie otwórz przeglądarkę i wpisz
https://example.com/?abc=../
;-) Pomysł zapożyczono ze skryptu SEBotLovin.cs
.Edytuj
/etc/modsecurity/z-customrules.conf
ponownie i komentuj (wyłącz) regułę - to był tylko przykładowy test i jest objęty OWASP CRS, opisanym w następnej sekcji.Oto kolejny przykład, w którym przekierujemy wszystkie
wp-admin
żądania strony, ale z wyjątkiem tych z niektórych adresów IP (zwróć uwagę nachain
):Tutaj mamy dwa zakłócające działania: (1)
deny, status:403
i (2)redirect:'/issues.php'
. W rzeczywistości nie potrzebujemydeny
akcji, ponieważ zostanie ona zastąpiona przezredirect
akcję.Zestaw podstawowych reguł ModSecurity OWASP 3.x
W Ubuntu 16.04 można zainstalować CSR 2.x:
apt install modsecurity-crs
. Tutaj zainstalujemy CSR 3.x , szczegółowe instrukcje znajdują się w instrukcji instalacji (git
jest wymagana).Instalacja
Klonuj CSR w folderze
/usr/share/modsecurity-crs.3
:Uaktualnij i automatycznie odnów bazę danych GeoIP. (GeoIP DB nie jest już dołączony do CRS. Zamiast tego zaleca się regularne pobieranie). Skrypt
util/upgrade.py
zapewnia tę funkcjonalność. Możesz użyć go w cron w następujący sposóbsudo crontab -e
:Utwórz pliki konfiguracyjne:
Przeczytaj i edytuj te pliki ostrożnie! Odkomentowanie przynajmniej
SecGeoLookupDB
dyrektywy:Zastosuj konfigurację Apache. Edytuj
/etc/apache2/mods-available/security2.conf
w ten sposób:Zapisz plik, a następnie uruchom ponownie Apache.
Listy reguł ModSecurity
Dodanie do białej listy reguł ModSecurity można wykonać za pomocą następujących dyrektyw ModSec, które mogą być używane w całym systemie lub w konfiguracji wirtualnego hosta, także globalnie, dla określonych katalogów lub dopasowań lokalizacji:
Wyłącz
mod_security2
dla PhpMyAdmin. Zmień/etc/phpmyadmin/apache.conf
w ten sposób:Wyłącz określone reguły dla niektórych katalogów:
Wyłącz reguły globalnie. W tym celu musimy dodać nasze dyrektywy gdzieś w plikach konfiguracyjnych Apache:
/etc/modsecurity/z-customrules.conf
to dobre miejsce.Wyłącz reguły w całej konfiguracji Apache:
Umieść adres IP na białej liście, aby mógł przechodzić przez ModSecurity:
Wyłącz reguły w obrębie katalogu:
Zaktualizuj działanie reguły według jej identyfikatora w dopasowaniu lokalizacji:
W powyższych przykładach zakładamy, że
973301
i950907
są identyfikatory zasada, że przeszkadzają normalną pracę naszych aplikacji internetowych. Możemy znaleźć takie reguły, analizującmodsec_audit.log
.ModSecurity Rules ► WSAS ► Iptables
Oto kilka innych przykładów, jak tworzyć niestandardowe SecRule, a także jak wywołać za ich pośrednictwem WWW Security Assistant Script (WSAS).
Początkowe ustawienia
Potrzebujemy dodatkowego skryptu startowego -
modsecurity-assistant.sh
. Powodem jest to, żeexec
działanie ModSecurity ma zbyt prostą i ograniczoną składnię.Jeśli zajrzysz do skryptu, zobaczysz kilka zmiennych eksportowanych przez ModSecurity. Są to:
$REQUEST_URI
,$ARGS
,$SERVER_NAME
,$REMOTE_ADDR
,$REMOTE_HOST
i$UNIQUE_ID
. Pozostałe zmienne są wyjaśnione w skrypcie.Utwórz niestandardową regułę i wywołaj za jej pośrednictwem nasze skrypty
Najpierw stwórzmy regułę, która zostanie wykonana
modsecurity-assistant.sh
(i zadzwoniwww-security-assistant.bash
), gdy identyfikator URI żądania zawiera słowo, które znajduje się na naszej czarnej liście. Otwórz/etc/modsecurity/z-customrules.conf
i dodaj następujące linie na dole:REQUEST_URI
- ta zmienna zawiera pełny identyfikator URI z bieżącego żądania. Zasada może być szersza:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
odczyta plikmodsecurity-uri-black.list
zawierający listę fraz, w którym każda konkretna fraza lub słowo zostanie umieszczone w nowym wierszu. Możesz zbierać ciekawe słowa i frazy z plików dziennika. Jeśli istnieje określone dopasowanie pomiędzyREQUEST_URI
naszą listą wzorców, reguła zostanie zastosowana. Plik może być pusty, ale musisz go utworzyć (touch
).log
Działania będą tworzyć wpisy dziennika w plikach dziennika dla tej reguły zid:150
.drop
,deny
(withstatus
) iredirect
akcje należą do destrukcyjnej grupy akcji, muszą znajdować się na początku regułychain
(jeśli istnieje łańcuch). Druga akcja zastąpi pierwszą, a trzecia zastąpi drugą, więc musisz wybrać, który chcesz wykonać, i możesz usunąć pozostałe.chain
akcja wywoła kolejną regułę łańcucha, zauważ, że druga reguła nie maid
.REMOTE_ADDR
zawiera adres IP żądania.@ipMatchFromFile
będzie plikmodsecurity-ip-white.list
zawierający białą listę adresów IP, oddzielonych w nowych wierszach. Wpisy CIDR są również dopuszczalne. Ponieważ działanie zakłócające zawsze znajduje się w regule wiodącej łańcucha, zostanie zastosowane, ale gdy określone IP znajduje się na białej liście,exec
działanie nie zostanie zastosowane. Plik może być pusty, ale musisz go utworzyć (touch
).exec
akcja wywoła nasz zewnętrzny skrypt. Ta akcja nie powoduje zakłóceń i zostanie wykonana, gdy bieżąca reguła zwróci wartość true. Po zastosowaniu tej akcji zdalne IP zostanie przetworzone za pomocą naszych skryptów.setenv
to działanie spowoduje wyeksportowanie niektórych zmiennych wewnętrznych=%{...}
jako envvars, wyeksportowane nazwy mogą różnić się od wewnętrznych. Niektóre zmienne muszą być eksportowane ręcznie, inne są eksportowane automatycznie - prawdopodobnie jest to mały błąd (w niektórych przypadkach ręczny eksport o tych samych nazwachsetenv:REQUEST_URI=%{REQUEST_URI}
spowoduje na przykład pustą wartość eksportowanej zmiennej).Badanie kontrolne
Załóżmy, że nie masz Joomla na serwerze, edytuj plik
modsecurity-uri-black.list
i dodaj wiersz z zawartością/joomla
. Następnie wpisz w przeglądarcehttps://exemple.com/joomla
. Powinieneś zostać przekierowany i zablokowany przez Iptables. Wyczyść zapisysudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, dodaj swój adres IPmodsecurity-ip-white.list
i ponownie wykonaj ćwiczenie. Teraz powinieneś zostać przekierowany, ale nie zablokowany.Połącz nasze skrypty z zestawem podstawowych reguł OWASP 3.x
W tym celu zaktualizujemy domyślne działanie Reguł trybu Anomalii (949110 i 959100). W tym celu edytuj plik
/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
i dodaj kolejne wiersze na dole:Badanie kontrolne
Nie zapomnij zrestartować (lub ponownie załadować) Apache, aby zastosować zmiany konfiguracji. Nie zapomnij okresowo czyścić zapisów podczas testów, w przeciwnym razie możesz zostać trwale zablokowany :-)
Symuluj atak katalogu:
Symuluj atak SQL Injection:
Pliki dziennika ModSecurity i Apache
ModSecurity ma potężny mechanizm rejestrowania. Dyrektywa
SecGuardianLog
zapewnia kanał dziennika specjalnie zaprojektowany do pracy ze skryptami zewnętrznymi.Pliki dziennika ModSecurity ► Fail2Ban ► Iptables
Możliwe jest skonfigurowanie Fail2Ban do analizowania danych plików dziennika Apache.
modsec_audit.log
jest prawdopodobnie najlepszym wyborem, ale zobacz także sekcje, o których mówimySecGuardianLog
.Uważaj, że
SecAuditLogRelevantStatus
w/etc/modsecurity/modsecurity.conf
to skomentował. W przeciwnym razie wszyscy, którzy otrzymają stronę błędu 404, zostaną zablokowani przez fail2ban.Obecnie Fail2Ban nie jest w żaden sposób zaimplementowany w tym projekcie.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Instalacja i konfiguracja w aktualnych okolicznościach
Pobierz
httpd-guardian
i spraw, aby był wykonywalny:Czytaj wiersze,
98-119
aby zobaczyć, jak skrypt jest połączony z naszym skryptem WSAS.Zastosuj następującą zmianę w konfiguracji Apache (
/etc/modsecurity/modsecurity.conf
), a następnie uruchom ją ponownie:Badanie kontrolne
Aby przetestować skrypt, wyłącz ModEvasive (
sudo a2dismod evasive
nie zapomnij włączyć go później) i uruchom ponownie Apache. Następnietail
dziennik wykonania:A z innej instancji wykonaj atak DoS, na przykład użyj
ab
w ten sposób:ModSecGuardianLog ► Analiza niestandardowa ► WSAS ► Iptables
Oto prosty skrypt o nazwie
httpd-custom-analyze.bash
, który nie jest czymś specjalnym, ale może być dobrym przykładem. Jego funkcje są opisane w treści skryptu.Instalacja i konfiguracja
Pobierz
httpd-custom-analyze.bash
i spraw, aby był wykonywalny:Zastosuj następującą zmianę w konfiguracji Apache (
/etc/modsecurity/modsecurity.conf
) i uruchom ją ponownie:Skrypt wywoła WSAS, gdy próg zostanie osiągnięty - przeczytaj linię
86
i35
.Aby oba
httpd-
skrypty działały jednocześnie, edytujmodsecurity.conf
i potokujSecGuardianLog
do obu.Aby wykonać test, postępuj zgodnie ze wskazówkami z powyższej sekcji.
źródło
Zdaję sobie sprawę, że pa4080 udzielił szczegółowej i prawdopodobnie bardzo pomocnej odpowiedzi za samodzielne załatwienie tego wszystkiego. Samodzielne rozwiązywanie problemów może być przyjemne, ale może to również zająć dużo czasu .
źródło