Modsecurity czy Twój WAF to potrafi? Leszek Miś Linux Polska Sp. z o.o.
CEL: Modsecurity jest cool!
Agenda Modsecurity Wprowadzenie Architektura Funkcjonalność Filtrowanie komunikacji JSON Aktywacja mechanizmu HMAC Aktywacja i wykorzystanie reguł OWASP CRS
Wprowadzenie Aplikacje webowe jako cel czyli zagrożenia kryją się wszędzie: Aplikacja Protokół Serwer HTTP/Proxy/Apps Framework Język programowania
Wprowadzenie Rzeczywistość weryfikuje: Zimbra: priv_esc poprzez LFI: /res/i18nmsg,ajxmsg,zmsg,zmmsg,ajxkeys,zmkeys,zdmsg,ajx%20templatemsg.js.zgz? v=091214175450&skin=../../../../../../../../../opt/zimbra/conf/localconfig.xml OSSIM: SQL Injection Apache Struts: RCE F5 BigIQ priv_esc Jira: directory traversal Katello: users/update_roles I wiele innych...
Wprowadzenie Problem z patchowaniem podatności: Zbyt wysoki koszt Kod źródłowy firmy zewnętrznej Ograniczony kontrakt/umowa Brak zasobów Brak skillsów SDLC dla poprawki-> tst->acc->prod Niedostępność aplikacji
Zagrożenia Cross Site Scripting ClickJacking SQL Injection MitB LDAP Injection Open Redirect XPATH Injection DOS/DDOS XML Injection Cross Site Request Forgery (CSRF) Blind SQLi Information/Path Dislosure Time based SQLi Double Encoding Remote Command Execution Server Side Includes Injection Local File Inlusion Bruteforce Remote File Inclusion Buffer overflow Session Hijacking Misconfiguration HTTP Response Spliiting RE-DOS Sniffing/Spoofing Forced browsing Drive by Download
Uchybienia
Wprowadzenie WAF pozwala na Pełne logowanie audytowe ruchu HTTP: requests responses Monitorowanie HTTP w czasie rzeczywistym Wykrywanie i blokowanie ataków: Negative Positive Znane podatności (regexpy) Web Honeypoty
Wprowadzenie Negative security model: Monitoruje pod kątem anomalii, nietypowego zachowania, pod kątem znanych appek. Wzrastający anomaly scoring per sesja, IP, user Reguła musi się zamatchować Positive security model: Tylko żądania uznawane za poprawne są obsługiwane Wymagana doskonała znajomość aplikacji i zachowań użytkowników, danych wejściowych Najlepsze dla rzadko aktualizowanych appek
Wprowadzenie Negative security model: SecRule REQUEST_FILENAME @contains /owa/scriptname.asx chain, phase:1,block,log,msg:'xss na mojej appce' SecRule ARGS:parameter @pm < > ( ) -- Positive security model: SecRule REQUEST_FILENAME @contains /owa/scriptname.asx chain, phase:1,block,log,msg:'xss na mojej appce' SecRule ARGS:parameter!@rx ^\w+$
Wprowadzenie Modsecurity for: Apache: Najpopularniejszy Ficzer riczi ricz Aktualnie 2.4 Nginx: Reverse proxy Performance IIS Modsecurity Core Rule Set
Architektura Reverse Proxy: mod_proxy: <Location /appka/> ProxyPass http://192.168.122.217/appka/ ProxyPassreverse http://192.168.122.217/appka/ SecRuleEngine On </Location> Lokalnie wbudowany Chain of proxies
Architektura Reverse proxy+modsecurity
Funkcjonalność Modsecurity: Parsuje: Chce zrozumieć ruch HTTP Bufferuje: Kompletne żądanie przez przekazaniem do aplikacji Kompletną odpowiedź przez przekazaniem do klienta Loguje: Pełny zapis ruchu Analizuje: Checkuje pod kątem reguł
Funkcjonalność Apache z modsecurity pozwala na: Deszyfrowanie SSL Wydobywanie z transmisji żądań HTTP Parsowanie żądań Aktywację WAF Przekazywanie żądań do serwerów typu backend Modyfikacja danych wychodzących w locie - dynamiczne wstrzykiwanie Wirtualne patchowanie LUA
Funkcjonalność Fazy filtrowania: Każda transakcja przechodzi przez 5 faz filtrowania: 1: Request headers 2: Request body 3: Response headers 4: Response body 5: Logging
Funkcjonalność Wirtualny patch w uproszczonym przypadku: Ograniczenie Request_Body_Size Wykrywanie powtarzających się payloadów Ograniczenie ilości ARGS Weryfikacja ARGS Analiza i filtrowanie RESPONSE_BODY
Funkcjonalność Przykładowe reguły: SecRule REQUEST_URI "@detectsqli" "id:152,log,deny" SecRule REQUEST_BODY "@detectxss" "id:12345,log,deny" SecRule REQUEST_HEADERS:User-Agent "@pm WebZIP WebCopier Webster WebStripper... SiteSnagger CheeseBot" "id:166" SecRule ARGS:foo "!@streq bar" "id:176"
LAB1 uruchomienie Apache jako Reverse Proxy
Czym jest JSON? Prosty, tekstowy format wymiany danych Podzbiór języka JS Dwie struktury: Zbiór par nazwa/wartość Lista/tabela/sekwencja wartości MIME type: application/json Wykorzystywany w implementacjach API, np. Rest
Czym jest JSON? Openweathermap.org: {"coord":{"lon":-0.13,"lat":51.51},"sys": {"message":0.0139,"country":"gb","sunrise":1399436419,"sun set":1399491223},"weather": [{"id":521,"main":"rain","description":"proximity shower rain","icon":"09d"}],"base":"cmc stations","main": {"temp":286.16,"pressure":1008,"humidity":66,"temp_min":284. 26,"temp_max":288.15},"wind":{"speed":6.7,"deg":250},"rain": {"3h":0},"clouds": {"all":75},"dt":1399448174,"id":2643743,"name":"london","cod" :200}
Filtrowanie komunikacji JSON Modsecurity 2.8.0: SecRule REQUEST_HEADERS:Content-Type "application/json" "id:'2200001',phase:2,t:none,t:lowercase,pass,log,c tl:requestbodyprocessor=json" Libyajl
LAB2 - Filtrowanie komunikacji JSON
Mechanizm HMAC HMAC Token Protection: Forceful Browsing Reflected XSS Ochrona CSRF Manipulacja QUERY_STRINGS Ochrona przed automatami/botami
HMAC Manipulacja kontentem: W jaki sposób sprawdzić czy odbyła się modyfikacja dokumentu? Parsowanie wyjścia (RESPONSE_BODY) Wyliczanie hasha dla wynikowego HTML Wstrzykiwanie unikalnych tokenów dla wszystkich linków dokumentu HTML Token = request parameter validation token
HMAC Executing operator "validatehash" with param "\\.(aspx? php)" against REQUEST_URI. Target value: "/showimage.php?file=./database_connect.php" Request URI without hash parameter [/showimage.php? file=./database_connect.php] Warning. Request URI matched "\\.(aspx? php)" at REQUEST_URI. No Hash parameter [file "/etc/httpd/modsecurity.d/base_rules/hmac.conf"] [line "10"] [id "1000"] [msg "Hash Validation Violation."] [tag "testphp.vulnweb.com"]
HMAC HMAC zablokuje: Skanery Automaty Botnety które nie podążają za linkami dostępnymi w kontekście aplikacji XSS/SQL-Injection
HMAC
HMAC Dyrektywy: SecDisableBackendCompression On SecRuleEngine On SecContentInjection On SecStreamOutBodyInspection On SecHashEngine On SecHashKey rand keyonly SecHashParam "hmac" SecHashMethodrx "HashHref" "\.(aspx? php)" SecHashMethodrx "HashFormAction" "\.(aspx? php)" SecRule REQUEST_URI "@validatehash \.(aspx? php)" "phase:2,id:1000,t:none,block,msg:'hash Validation Violation.',ctl:hashEnforcement=On,setvar:tx.anomaly_score=+% {tx.critical_anomaly_score},setvar:'tx.msg=%{rule.msg}',setvar:tx.% {rule.id}-owasp_crs/web_attack/param_manipulation-% {matched_var_name}=%{matched_var}"
LAB3 - HMAC
OWASP Top 10 Zbiór 10 najistotniejszych, kluczowych błędów w zabezpieczeniach aplikacji internetowych: A1 Injection A2 Broken Auth and Session MGMT A3 XSS A4 Insecure Direct Object References A5 Security Misconfiguration A6 Sensitive Data Exposure A7 Missing Function Level Access Control A8 CSRF A9 Known vulns A10 Unvalidated Redirects and Forwards
OWASP Docs & tools ASVS ESAPI Testing Guide Cheat Sheets
OWASP CRS Modsecurity to tylko silnik Musimy go naładować : Tworzenie dedykowanych reguł od podstaw per aplikacja Wykorzystanie gotowych reguł OWASP CRS Hybryda czyli połączenie reguł CRS z własnymi regułami typu Whitelist
OWASP CRS HTTP Protection - detecting violations of the HTTP protocol and a locally defined usage policy. Real-time Blacklist Lookups - utilizes 3rd Party IP Reputation HTTP Denial of Service Protections - defense against HTTP Flooding and Slow HTTP DoS Attacks. Common Web Attacks Protection - detecting common web application security attack. Automation Detection - Detecting bots, crawlers, scanners and other surface malicious activity. Integration with AV Scanning for File Uploads - detects malicious files uploaded through the web application. Tracking Sensitive Data - Tracks Credit Card usage and blocks leakages. Trojan Protection - Detecting access to Trojans horses. Identification of Application Defects - alerts on application misconfigurations. Error Detection and Hiding - Disguising error messages sent by the server.
OWASP CRS Reguły OWASP CRS podzielone są na: base_rules experimental_rules optional_rules slr_rules /etc/httpd/modsecurity.d/
LAB4 Atak.
OWASP CRS Dostosowanie reguł per aplikacja: SecRuleRemoveById SecRuleRemoveByMsg SecRuleRemoveByTag
LAB5 instalacja i aktywacja reguł CRS
Różne Integracja z BEEF DDOS LUA Splunk for Modsecurity Learning mode i generowanie reguł na podstawie raportów ze skanerów Wykrywanie zmiany User-Agent podczas sesji
Podsumowanie To tylko zajawka na dobry początek W Modsecurity drzemią ogromne możliwości i potencjał Idealny komponent rozbudowanego stacku typu Web Gateway/Secure Proxy Automatyzacja Skalowalność Customizacja Auditing
Dziękuję za uwagę:) lm@linuxpolska.pl