Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Pen-‐tes'ng av webservices
Asbjørn Reglund Thorsen Gruppe-‐ og utviklingsleder UIO/FSAT
TwiDer: @fuzzerman
Om meg
• Gruppe-‐ og utviklingsleder på FSAT – Felles studieadministra'vt tjenestesenter
• Sikkerhetsekspert på webapplikasjoner • Utviklerbakgrunn • Pen-‐tester siden 2008 • Cand.Scient fra UiO/IFI/Simulasenteret
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Innhold
• HTTP på ~ 2 minuDer • Web service (WS) på ~ 2 min • Pen-‐tes'ng av WS • HTTP vs HTTPS • Demoer • Omfang/Scope (mange foiler, liten 'd) – Blir derfor liD av hvert
U1VIUzIwMTQ=
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Advarsel • Det som blir vist i deDe foredraget må ikke brukes noen steder uten lov
• Kan resultere i reDslig eDerfølgelse og dom • Foredragene er ment 'l å KUN være 'l pedagogiske formål
8be3c943b1609ffffc51aad666d0a04adf83c9d
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
ALDRI PEN-‐TEST UTEN LOV!
SPØR OM LOV HOS RETT PERSON
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
HTTP på rekord-‐'d
• Protokollen som benyDes på www for informasjonsutveksling
• GET og POST vanligst
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Kommunikasjon over neDverk
INTERNETTKlient Server
1. REQUEST
2. RESPONSE
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Webservice på rekord-‐'d
• Maskin 'l maskin kommunikasjon over neDverk
• Representa'onal state transfer (REST)
• Simple Object Access Protocol (SOAP)
21232f297a57a5a743894a0e4a801fc3 07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐
REST
• I stedet for – GET /get_fil?id=1337 – POST /delete_fil id=1337
• Så... – GET /fil/1337/ – DELETE /fil/1337/
• Bruker GET, POST, PUT, DELETE, UPDATE
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
SOAP SOAPMessage
(et XML dokument)
SOAPEnvelope
SOAPHeader (optional)
Header
Header
SOAPBody
XML Cont or SOAPFault
FHUF fgåe sbe Flfgrzre v HU-‐Frxgbera
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
SOAP Request POST /InStock HTTP/1.1 Host: www.example.org Content-‐Type: applica'on/soap+xml; charset=ur-‐8 Content-‐Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="hDp://www.w3.org/2001/12/soap-‐envelope" soap:encodingStyle="hDp://www.w3.org/2001/12/soap-‐encoding"> <soap:Body xmlns:m="hDp://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
hDp://www.w3schools.com/webservices/ws_soap_example.asp
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
SOAP Respons HTTP/1.1 200 OK Content-‐Type: applica'on/soap+xml; charset=ur-‐8 Content-‐Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="hDp://www.w3.org/2001/12/soap-‐envelope" soap:encodingStyle="hDp://www.w3.org/2001/12/soap-‐encoding"> <soap:Body xmlns:m="hDp://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>
hDp://www.w3schools.com/webservices/ws_soap_example.asp
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Noen verktøy for sikkerhetstes'ng
• OWASP ZAP • soapUI (gjennom proxy) • Burp Suite
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Proxy
Klient Proxy
1. REQUEST
2. RESPONSE
vg.no
GET vg.no GET vg.no
200 OK + Data200 OK + Data
Ofte samme maskin
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
WS over hDp
<soapenv:Envelope xmlns:soapenv=«hDp://schema…….»> <soapenv:Header> <tem:AuthHeader> <tem:Username>agent007</tem:Username> <tem:Password>t0p53cr3t</tem:Password> </tem:AuthHeader> </soapenv:Header> <soapenv:Body> <tem:EDEllerAnnet>
…. </tem:EDEllerAnnet> </soapenv:Body> </soapenv:Envelope>
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
SQL-‐injec'on
§ En sql spørring som blir ”limt sammen”/ konkatenert av flere biter
§ Bruker skriver inn brukernavn og passord § SELECT * from User WHERE Username=”agent007” AND Password=”t0p53cr3t”
§ Hva hvis vi gjør følgende? § SELECT * from User WHERE Username=”agent007” -‐-‐” AND Password=”t0p53cr3t”
Test”-‐-‐
******
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
SQL-‐injec'on forts
• Alterna'v – SELECT * from USER WHERE Username=”” OR ”1” = ”1” AND Password=”” OR ”1” = ”1”
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Pen-‐tes'ng webservices
• Mange av de samme urordringene som webapplikasjoner – Cross Site Request Forgery (CSRF) – Cross Site Scrip'ng (XSS) – JSON/XML injec'on – SQL injec'on
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Pen-‐tes'ng web services
• Slurves mer med sikkerhet enn webapps • Mange pen-‐testere er ikke gode nok / slurver med å sikkerhetssjekke webservicer skikkelig
• Antar at maskin 'l maskin kommunikasjon ikke kan manipuleres
• SOAP har o�e WSDL-‐filer som beskriver WS • Kan google dork'e det.. • REST testes som en vanlig webapplikasjon
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Angrepsvektorer
• XML-‐strømmer blir på et 'dspunkt parset i applikasjonslogikken
• Mulig å brekke webservicen i parsingen • DOM eller SAX parsere er vanligst å bruke • DOM-‐baserte parsere laster hele XML strømmen inn i minnet – Store XML-‐filer/rekursjon => DoS angrep
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
DoS -‐ "Slem" XML (DOM basert)
<transaksjon> <total>10000.00<total> <krediDkortnr>123456789</krediDkortnr> <krediDkortnr>123456789</krediDkortnr> <krediDkortnr>123456789</krediDkortnr> <krediDkortnr>123456789</krediDkortnr> ... ... ... <utloepsdato>01012015</utloepsdato> </transaksjon>
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
DoS -‐ "Slemmere" XML (DOM basert)
<transaksjon> <total>10000.00<total> <krediDkortnr> <krediDkortnr> <krediDkortnr> <krediDkortnr> ... ... ... <utloepsdato>01012015</utloepsdato> </transaksjon>
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
SAX
• Ikke så sårbare for DoS – Hendelsesdrevet – behandler XML strøm med to elementer i minnet 'l enhver 'd
• Ny angrepsvektor => XML-‐injec'on
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
XML injec'on
<transaksjon> <total>10000.00<total> <krediDkortnr>123456789</krediDkortnr> <total>42</total><krediDkortnr>123456789</krediDkortnr> <utloepsdato>01012015</utloepsdato> </transaksjon>
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Tenk sikkerhet • Ikke lag egne parsere – Brukt 'lgjenglige, de har bliD testet og sikret over 'd
• Bruk SAX parsere når mulig – Forhindrer DoS i større grad enn DOM
• Dersom du bruker DOM – Valider XML strømmen i forhold 'l Max størrelse
• XML-‐injec'on kan elimineres om du validerer skikkelig! • XML-‐schema
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
XPATH injec'on
• XPATH: verktøy for å hente ut elementer fra XML
• //brukere/kundeid[123] • //brukere/kundeid[./alder >1]
• XPATH injec'on mulig pga dårlig inputvalidering. Valider!!
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Gamle kjenninger
• Å lage et REST API er ikke helt som å lage en vanlig webapplikasjon
• Likevel må vi passe oss for mange av de samme typene sikkerhetsproblemer
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
OWASP tes'ng guide
• hDps://www.owasp.org/images/5/56/OWASP_Tes'ng_Guide_v3.pdf
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
HTTP vs HTTPS
• HTTPS (TLS 1.0, 1.1 & 1.2) – The good! • HTTPS (SSLv3) – The bad! (Poodle) • HTTP – The ugly! (In the clear)
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]
Spørsmål?
Følg meg på twiDer: @fuzzerman
Eastereggs i foilene. Premie 'l den som
klarer alle
07.11.14 Asbjørn R. Thorsen -‐ @fuzzerman -‐ [email protected]