Cursus Software security Harald Vranken
Rondleiding •
Onderwerp van cursus
•
Cursusmateriaal
•
Cursusstructuur
•
Cursusinhoud per leereenheid (highlights)
2
Waarover gaat de cursus? •
Software security engineering software so that it continues to function correctly under malicious attack
•
Kernprincipe: building security in beveiliging niet achteraf repareren, maar meenemen in alle fasen van softwareontwikkeling
•
Onderwerpen die aan de orde komen – Veelvoorkomende beveiligingsproblemen, onderliggende oorzaken en oplossingen (technieken, richtlijnen, principes, tools) – Technische, organisatorische en ethische aspecten
3
Cursusmateriaal •
•
•
Engelstalig tekstboeken –
Software security: building security in G. McGraw (Addison-Wesley, 2006)
–
Secure programming with static analysis B. Chess en J. West (Addison-Wesley, 2007)
OU-producties –
reader
–
werkboek
–
cursus-dvd
Studienet
4
Cursusstructuur 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
5
1 Introductie tot software security 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities
• Omvang van software security-problemen 3 Validatie van invoer en uitvoer 4 Buffer overflow • Oorzaken van software security-problemen (connectivity, extensibility, complexity) 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie • Implementation-level bug vs. design-level flaw 3 Ontwikkelen van beveiligde software
• 3 pillars of software security
7 Software security knowledge 8 Risicomanagement en risicoanalyse
− risk management
9 Opdracht B: architectural risk analysis
− touchpoints (best practices)
10 Statische codeanalyse 11 Security testing
− kennis over software security
12 Opdracht C: statische codeanalyse
4 Language-based security • Software security vs. security software 13 Safety 14 Language-based access control
• Mix van white hat- en black hat-benadering
15 Informatieflowanalyse 16 Opdracht D: access control 5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
6
2 Software vulnerabilities 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer
• Taxonomieën van software security-problemen 4 Buffer overflow
• Ranglijsten van veelvoorkomende vulnerabilities 5 Excepties en privileges − 24 deadly sins of software security6 Opdracht A: vulnerabilities in een webapplicatie 3 Ontwikkelen van beveiligde software
7 Software security knowledge
− OWASP top 10
8 Risicomanagement en risicoanalyse
− SANS top 20
9 Opdracht B: architectural risk analysis
− CWE/SANS top 25
10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
7
3 Validatie van invoer en uitvoer 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow
• Kernidee: voor gebruik dient alle invoer,5 van alle mogelijke bronnen, Excepties en privileges eerst gevalideerd te worden 6 Opdracht A: vulnerabilities in een webapplicatie • Hoe wel? 3 Ontwikkelen van beveiligde software 7 Software security knowledge Indirect selection, whitelisting, reguliere8expressies, geparameteriseerde Risicomanagement en risicoanalyse invoer, controle van invoerlengte, minimumen maximumwaarde van getallen) 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse • Hoe niet? Blacklisting, security ondermijnen door 11 gebruiksvriendelijkheid, repareren van Security testing ingevoerde gegevens, gedetailleerde foutmeldingen 12 Opdracht C: statische codeanalyse 4 Language-based 13 Safety command injection, log • Vulnerabilities: SQLsecurity injection, path manipulation, 14 Language-based control forging, cross-site scripting, HTTP response splitting, openaccess redirects, cross-site request forgery 15 Informatieflowanalyse 16 Opdracht D: access control 5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
8
4 Buffer overflow 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges
• verschijningsvormen van buffer overflows in C/C++A:code 6 Opdracht vulnerabilities in een webapplicatie 3 Ontwikkelen van beveiligde software
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse
11 Security testingbuf char buf[20]; http://0 12 Opdracht C:prefix statische codeanalyse char prefix[] = “http://”; strcpy(buf, prefix);13 Safety buf http://0 4 Language-based security strncat(buf, path, sizeof(buf)); buf http://0 14 Language-based access control
• Voorbeeld:
• memory safety en type safety
15 Informatieflowanalyse
16bescherming Opdracht D: access control • statische en dynamische maatregelen ter 5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
9
5 Excepties en privileges 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
• Afhandelen van foutcondities via terugkeerwaarden 3 Ontwikkelen van beveiligde software
• Afhandelen van excepties in Java
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
10
Opdracht A: vulnerabilities in webapplicatie 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
11
7 Software security knowledge 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge
8 Risicomanagement en risicoanalyse • Kennis over software security classificeren 9 Opdracht B: architectural risk analysis
• prescriptive, diagnostic en historical knowledge
10 Statische codeanalyse
• principles, guidelines, rules, attack 11 patterns, Securityexploits, testing vulnerabilities en historical risks 12 Opdracht C: statische codeanalyse Language-based security security: • 124principes voor software • securing the weakest link • defense in depth • failing securely • least privilege 5• Ethiek van software security separation of privilege • economy of mechanism
13 Safety
Language-based access control least14 common mechanism • reluctance to trust 15 Informatieflowanalyse • never assume your secrets are safe 16 Opdracht D: access control • complete mediation 17 Ethiek van software security • psychological acceptability • promoting privacyE: ethiek 18 Opdracht •
12
Blok 3: touchpoints 9 Opdracht B: architectural risk analysis 8 Risicomanagement en risicoanalyse
10 Statische codeanalyse
11 Security testing
12 Opdracht C: statische codeanalyse 13
Opdracht B: architectural risk analysis 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
14
Opdracht B: architectural risk analysis Client tear
Web tear
Client computer browser
Application tear Registreren als lid
Leden beheer Registratie
gast Zoeken in aanbod Client computer browser
Autorisatie
Veiling beheer Controller
beheer
Veiling database
Login/logout
lid
Client computer browser
Data tear
Aanbieden artikel
Artikel beheer
Bieden op artikel
Bod beheer
Ondersteuning
… 15
Opdracht C: statische codeanalyse 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
16
Risk Management Framework
17
13 Safety • Abstracties van besturingssysteem voor security en access control 1 Introductie
• Safe/unsafe programmeertaal 2 Vulnerabilities
1 Introductie tot software security
2 Software vulnerabilities
3 Validatie van invoer en uitvoer − precise semantics (no undefined behavior)
− modular behavior
4 Buffer overflow 5 Excepties en privileges
• Memory safety, type safety
6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkeleninvan beveiligde software • Vulnerabilities Java
7 Software security knowledge 8 Risicomanagement en risicoanalyse
− visibility (public/protected/private/package)
9 Opdracht B: architectural risk analysis
− sealing
10 Statische codeanalyse
− …
11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
18
14 Language-based access control 1 Introductie
1 Introductie tot software security
2 Vulnerabilities Softwareen vulnerabilities • Java sandbox (Bytecode Verifier, Class2Loader Security Manager)
• Type safety in Java
3 Validatie van invoer en uitvoer 4 Buffer overflow
• Code signing in Java
5 Excepties en privileges
• Stack inspection
6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
• Security policies
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis 10 Statische codeanalyse 11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
19
14 Language-based access control •
Code signing in Java
•
Stack inspection
•
Security policies
20
15 Informatieflowanalyse 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities
• Traditionele access control: lezen of modificatie van gegevens en bronnen − besturingssysteem: user, process 3 Validatie van invoer en uitvoer 4 Buffer overflow − programmeerplatform (JVM): modules binnen code 5 Excepties en privileges
• Verfijnde access control via informatieflowanalyse
6 Opdracht A: vulnerabilities in een webapplicatie
Wat kan ervan gedaan kan worden gegevens nadatknowledge ze gelezen? 3−Ontwikkelen beveiligde software met 7 Software security Risicomanagement en risicoanalyse − Wat is de herkomst van gegevens 8waarmee andere gegevens gemodificeerd kunnen worden? 9 Opdracht B: architectural risk analysis Statische codeanalyse • Informatieflowanalyse via typesysteem 10 of via statische/dynamische analyse 11 Security testing van propagatie van tainted data
• Non-interference
4 Language-based security
12 Opdracht C: statische codeanalyse 13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
21
16 Opdracht D: access control 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge
• Javacode voor webapplicatie beveiligen met JAAS 8 Risicomanagement en risicoanalyse (Java Authentication and Authorization Service) 9 Opdracht B: architectural risk analysis
− Code signing
10 Statische codeanalyse
− Policies
11 Security testing 12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety 14 Language-based access control 15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
22
17 Ethiek van software security 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
3 Ontwikkelen van beveiligde software
7 Software security knowledge 8 Risicomanagement en risicoanalyse 9 Opdracht B: architectural risk analysis
• Onderscheid tussen ethiek en wetgeving
10 Statische codeanalyse
• Ethische aspecten omtrent
11 Security testing
− ethical hacking
12 Opdracht C: statische codeanalyse
4 Language-based security
13 Safety
− vulnerability disclosure
14 Language-based access control
− onderzoek en onderwijs over vulnerabilities 15 Informatieflowanalyse 16 Opdracht D: access control 5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
23
18 Opdracht E: ethiek 1 Introductie
1 Introductie tot software security
2 Vulnerabilities
2 Software vulnerabilities 3 Validatie van invoer en uitvoer 4 Buffer overflow 5 Excepties en privileges 6 Opdracht A: vulnerabilities in een webapplicatie
Ontwikkelen van beveiligde software • 3Casestudie: OV-chipkaart
7 Software security knowledge 8 Risicomanagement en risicoanalyse
• Ethische overwegingen voor betrokken partijen
9 Opdracht B: architectural risk analysis
− overheid
10 Statische codeanalyse
− leveranciers
11 Security testing
− onderzoekers
4 Language-based security
12 Opdracht C: statische codeanalyse 13 Safety
− journalisten
14 Language-based access control
−…
15 Informatieflowanalyse 16 Opdracht D: access control
5 Ethiek van software security
17 Ethiek van software security 18 Opdracht E: ethiek
24