Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek

28
Ochrona webaplikacji za pomocą wirtualnych poprawek Bartosz Jerzman

Transcript of Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek

Ochrona webaplikacjiza pomocą wirtualnych

poprawek

Bartosz Jerzman

Niebieska strona mocy:monitoring i zabezpieczenia sieci członek zespołów reagowania na incydenty komputerowe SOC/CERT

Czerwona strona mocy:testy penetracyjne (web/mobile/LAN) - secman.plcertyfikaty infosec: CEH, OSCP

hello!

AGENDA

Web Application Firewall

- co to jest?

- zasady użycia

- pisanie podstawowych reguł

Wirtualne poprawki

- zalety i wady

- OWASP

- 6 faz procedury wirtualnych poprawek w ramach utrzymania oprogramowania

2 scenariusze ataków

- live hacking- wykorzystanie

podatnych aplikacji - ModSecurity jako WAF- Wordpress SEO plugin- Metasploitable 2

Web Application Firewall - reverse HTTP proxy

klient HTTP WAF HTTP

serwer

Web Application Firewall - ModSecurity

ModSecurity

Detekcja

wykrycie i logowanie ataków

faza dostosowywania reguł, usuwania false positives

Host based

moduł modsecurity zainstalowany na każdym serwerze HTTP

+ reguły zoptymalizowane per serwer/aplikacje

Prewencja

blokowanie ataków

np. odpowiedź 403 HTTP (Access Denied)

Network Reverse Proxy

ochrona zbioru serwerów HTTP

+ 1 konfiguracja+ 1 zbiór reguł+ ochrona wielu serwerów

aplikacyjnych

ModSecurity - 5 faz filtracji HTTP

✘ Faza 1 - Request Header✘ Faza 2 - Request Body✘ Faza 3 - Response Header✘ Faza 4 - Response Body (wyciek danych, webshells, itp.)✘ Faza 5 - Logging

reguła domyślna

Język reguł ModSecurity

SecDefaultAction “phase:2, deny, log, status:403, t:removeNulls”

Język reguł ModSecurity

bardzo podstawowa detekcja XSS + próby ominięcia WAF: <ScRiPt>, <SCRIPT >

SecRule ARGS "@contains <script>" t:lowercase,t:removeWhitespace

Posiadamy podatną webaplikacjęJak żyć?

Wirtualne poprawki - remedium na szybkie załatanie podatnych aplikacji i powstrzymanie ataku do czasu poprawienia kodu.

Wirtualne poprawkie NIE SĄ alternatywną dla poprawek bezpieczeństwa kodu.

PROFITY WIRTUALNYCH POPRAWEK

✘ szybki czas reakcji✘ brak konieczności modyfikacji kodu✘ prostota pisania reguł✘ skalowalność✘ zapewnienie ochrony starym, nierozwijanym aplikacjom

OWASP

Open Web Application Security Project - najlepsze praktyki budowy bezpiecznych aplikacji- wiele projektów, standardów, narzędzi- nie tylko dla penesterów ale must-know dla deweloperów

https://www.owasp.org/index.php/Virtual_Patching_Best_Practices

https://www.owasp.org/index.php/Virtual_Patching_Cheat_Sheet

1. Przygotowanie:

- budowa infrastruktury;

- uzyskanie zgody;

- monitorowanie list

podatności;

- dostęp do pełnych zapytań i

odpowiedzi HTTP.

2. Identyfikacja

- proaktywne - testy/

przegląd kodu;

- reaktywne - informacja

publiczna lub od producenta,

reakcja na atak.

3. Analiza

- wirtualna łata remedium na

podatność?;

- identyfikacja podatnoścci;

- poziom krytyczności;

- warunki konieczne do eksploitacji;

- lista payloadów (PoC exploit);

- uzupełnienie systemu Bugtracker.

PROCEDURA WIRTUALNYCH POPRAWEK

wg OWASP

PROCEDURA WIRTUALNYCH POPRAWEK

wg OWASP

4. Przygotowanie poprawki

- brak false positives

- brak false negatives

- whitelisting

- blacklisting

- automatyczne

generowanie

- import z zewnątrz org.

5. Wdrożenia i testy

- tryb detekcji;

- HTTP proxy (Burp);

- wget, curl;

- przeglądarka;

- audyt logu WAF

6. Nadzór

- aktualizacja Bugtracker;

- zgłoszenie potrzeby

poprawy kodu;

- zmiana trybu na detekcję

prób eksploatacji

2 scenariusze ataków

LIVE HACKING

SQL injection - Time based Injection in ORDER BY parameter- SEO by YEOST plugin for Wordpress (1.7.3.3) z 2015- Wordpress 4.7.1 (up-to-date)- podejście whitelisting do załatania podatnej aplikacji

Local File Inclusion (LFI)

- Mutillidae (Metasploitable 2)

- podejście whitelisting(odpowiednie rozszerzenie i katalog)

-

1.

SQL injection

SEO by YEOST 1.7.3.3 (2015)złe użycie funkcji do walidacji danych przekazywanych przez użytkownika

Podatny kod + poprawka

protected function parse_item_query( $subquery, $all_states, $post_type_clause ) {

$orderby = ! empty( $_GET['orderby'] ) ? esc_sql( sanitize_text_field( $_GET['orderby'] ) ) : 'post_title';

(...)

$query = "SELECT ID, post_title, post_type, post_status, post_modified, post_dateFROM {$subquery}WHERE post_status IN ({$all_states}) $post_type_clauseORDER BY {$orderby} {$order}LIMIT %d,%d

$orderby = $this->sanitize_orderby( $orderby );

$orderby = WPSEO_Utils::filter_input( INPUT_GET, 'orderby' );

ATAKUJĄCY KONTROLUJE ZAPYTANIE DO BAZY

SQLMAP - Automatyzacja ataku

Wirtualny patch #1

Parametr ORDERBY może przyjmować tylko 3 wartości - nazwy 3 kolumn do sortowania

2.

Local File Inclusion

złe użycie funkcji PHP include() dołączającej inne pliki

MutilLidae (podatna webaplikacja do nauki)

LFI - wczytanie plików systemowych

/etc/passwd

Wirtualny patch #2

parametr PAGE musi zaczynać się od nazw plików z katalogu /var/www/mutilidae i mieć rozszerzenie .PHP