Inhoud leereenheid 2
Software vulnerabilities Introductie Leerkern 1 2
23 23
Taxonomie van software vulnerabilities Tot slot 25
Terugkoppeling
26
22
23
Leereenheid 2
Software vulnerabilities
INTRODUCTIE
Deze leereenheid vormt een introductie tot blok 2 en geeft een overzicht van veel voorkomende software vulnerabilities. We geven diverse lijsten en classificaties van software vulnerabilities, waarbij we de technische details van de vulnerabilities nog grotendeels achterwege laten. In de volgende leereenheden van blok 2 besteden we daar meer aandacht aan. LEERDOELEN
Na het bestuderen van deze leereenheid wordt verwacht dat u – een taxonomie van software security-problemen kunt geven op basis van de 7 pernicious kingdoms (input validation and representation, API abuse, security features, time and state, error handling, code quality en encapsulation) en phyla – bekend bent met enkele lijsten en taxonomieën van software vulnerabilities (CVE, 24 deadly sins, OWASP top 10, SANS top 20, CWE/SANS top 25, CWE). Studeeraanwijzing In deze leereenheid worden op enkele plaatsen voorbeelden getoond met C/C++ programmacode. In de introductie van de cursus hebben we u er al op gewezen dat we enige voorkennis van C/C++ veronderstellen. De studielast van deze leereenheid bedraagt circa 2 uur.
LEERKERN 1
Taxonomie van software vulnerabilities
Studeeraanwijzing
Bestudeer hoofdstuk 12 A Taxonomy of Coding Errors (pagina 277 tot en met 298) uit het tekstboek Software security: building security in van Gary McGraw. Zoals de naam van dit hoofdstuk aanduidt, komt een taxonomie aan de orde die betrekking heeft op software securityproblemen die aanwijsbaar zijn in programmacode. In de terminologie van implementation-level bugs versus design-level of architectural-level flaws, heeft deze taxonomie merendeels betrekking op bugs. Het is mogelijk om programmacode te analyseren met behulp van een tool en daarmee automatisch deze vulnerabilities in de software op te sporen. Zo’n tool wordt een static source code analyzer genoemd; in leereenheid 10 en 12 besteden we daar uitgebreid aandacht aan.
Pagina 277 Weblinks
Mitre is een Amerikaanse non-profit organisatie die diverse centra voor onderzoek en ontwikkeling heeft. Mitre onderhoudt onder andere de CVE (Common Vulnerabilities and Exposures), een lijst van software
23
Open Universiteit
Software security
security vulnerabilities. Elke vulnerability heeft daarin een unieke identifier bestaande uit een jaartal en een volgnummer. De vulnerabilities zijn derhalve chronologisch geordend. Een voorbeeld is CVE-2009-2989: Integer overflow in Adobe Acrobat 9.x before 9.2, 8.x before 8.1.7, and possibly 7.x through 7.1.4 might allow attackers to execute arbitrary code via unspecified vectors. De CVE bevat slechts een summiere beschrijving van elke vulnerability. Vulnerability databases zoals de NVD bevatten gedetailleerdere technische informatie en maken gebruik van de CVE om vulnerabilities aan te duiden. Pagina 282-289 Weblinks
Als leerdoel geldt dat u de kingdoms kunt benoemen en toelichten. Bij een kingdom moet u enkele phyla als voorbeeld kunnen noemen. Het is niet de bedoeling om alle phyla uit het hoofd te leren. De beschrijving van sommige phyla in de tekst is summier en onvoldoende om de details van deze phyla te kunnen doorgronden. Verderop in de cursus komt een aantal phyla uitgebreider aan de orde. In de online taxonomie (zie weblink op Studienet) is de volledige verzameling van phyla aanwezig en worden voorbeelden in verschillende programmeertalen gegeven.
OPGAVE 2.1
Het is de moeite waard om enkele voorbeelden in de online taxonomie te bekijken. Bekijk bijvoorbeeld het phylum Command Injection uit het kingdom Input Validation and Representation bij Java. Hoe kan een aanvaller controle uitoefenen op een uit te voeren commando? Pagina 292 Weblinks
Er bestaan diverse lijsten van software security vulnerabilities, zoals de 24 deadly sins, de OWASP top 10, de SANS top 20 en de CWE/SANS top 25. – In 2010 verscheen het boek 24 deadly sins of software security: programming flaws and how to fix them van Michael Howard, David LeBlanc en John Viega. Dit is een aangepaste en uitgebreide versie van de 19 deadly sins of software security uit 2005. De auteurs zijn gerenommeerde experts op gebied van software security. De 24 deadly sins representeren volgens de auteurs de meest relevante software securityproblemen. – OWASP (Open Web Application Security Project) is een non-profit organisatie die gericht is op het verbeteren van de security van webapplicaties. OWASP opereert als een open community en is georganiseerd in diverse projecten. OWASP ontwikkelt onder andere tools, standaards en documentatie die vrijelijk beschikbaar worden gesteld. Het OWASP Top Ten project stelt een lijst samen met de 10 meest kritische vulnerabilities in webapplicaties. De projectleden zijn security-experts uit de gehele wereld. – Het SANS (SysAdmin, Audit, Network, Security) instituut is een Amerikaanse organisatie die zich bezighoudt met onderzoek en opleiding op gebied van security. SANS onderhoudt onder andere een lijst van de top 20 internet/cyber security risks. – De CWE/SANS top 25 bevat de meest gevaarlijke software errors. In deze lijst zijn vulnerabilities onderverdeeld in 3 categorieën: insecure interaction between components, risky resource management en porous defenses. Deze lijsten worden regelmatig herzien en veelal verschijnen jaarlijks nieuwe edities. In deze cursus kijken we naar deze lijsten om een globale indruk te krijgen van wat veel voorkomende vulnerabilities zijn.
24
Leereenheid 2 Software vulnerabilities
Pagina 295 Weblinks
Het PLOVER project creëerde een taxonomie van software vulnerabilities. Vervolgens werden in het NIST SAMATE project aan deze vulnerabilities definities en beschrijven toegevoegd, wat uiteindelijk resulteerde in de CWE (Common Weakness Enumeration), een lijst van software weaknesses. Een weakness is een fout in de software, die in een willekeurige fase van de software development life cycle kan optreden, en kan leiden tot vulnerabilities in de software. Mitre onderhoudt de CWE. De weaknesses worden in de CWE beschreven en geclassificeerd aan de hand van diverse classificatieschema’s. Zo omvat de CWE onder andere de vulnerabilities uit de CVE en de classificaties volgens de seven pernicious kingdoms, OWASP en de deadly sins. Het doel van de CWE is te beschikken over een standaardlijst met definities en beschrijvingen van software weaknesses en de relaties met andere taxonomieën duidelijk te maken.
Pagina 297
De getoonde OWASP Top Ten dateert uit 2004. In 2007 en 2010 zijn vernieuwde versies verschenen.
OPGAVE 2.2
Bekijk de OWASP Top Ten uit 2004, 2007 en 2010. Wat zijn de verschillen tussen deze versies? OPGAVE 2.3
Bekijk de CWE/SANS Top 25 Most Dangerous Software Errors en classificeer deze volgens de 7 kingdoms. OPGAVE 2.4
In leereenheid 1 verwezen we reeds naar websites en mailinglijsten waar nieuws over vulnerabilities wordt gepubliceerd, zoals US-CERT Cyber Security Bulletin, Bugtraq, SecurityTracker en Waarschuwingsdienst.nl. Bekijk op deze websites eens de meest recente vulnerabilities (zie links op Studienet). 2
Tot slot
In de volgende leereenheden kijken we in meer detail naar een aantal vulnerabilities, die zowel in de OWASP Top Ten als de CWE/SANS Top 25 staan vermeld. – In leereenheid 3 komt een aantal beruchte vulnerabilities uit het kingdom Input validation and representation aan de orde. Deze vulnerabilities behoren tot de meest voorkomende en staan steevast bovenaan in de ranglijsten van vulnerabilities. We kijken daarbij zowel naar algemene software vulnerabilities als naar vulnerabilities die specifiek zijn voor webapplicaties. – Leereenheid 4 is volledig gewijd aan de buffer overflow, een klassieke vulnerability die ondanks de historie van ruim twintig jaar nog steeds actueel is. – In leereenheid 5 besteden we aandacht aan vulnerabilites uit de kingdoms Error handling, Security features en Time and state. In het bijzonder kijken we naar vulnerabilities rondom het afhandelen van foutmeldingen en excepties en het omgaan met privileges van programma’s. – In leereenheid 6 voert u een praktische opdracht uit waarin u vulnerabilities opspoort in een webapplicatie. Deze opdracht rondt blok 2 van de cursus af.
25
Open Universiteit
Software security
TERUGKOPPELING
2.1
Deze vulnerability treedt onder andere op in applicaties die bij het uitvoeren van een commando gebruik maken van gegevens die door de gebruiker worden ingevoerd. De ingevoerde gegevens worden door de applicatie behandeld als een string waarmee een commando wordt samengesteld. Door op bepaalde wijze een commando op te nemen in de invoer, kan een aanvaller dit commando laten uitvoeren. Een andere vorm van deze vulnerability treedt op wanneer de aanvaller in staat is om de omgeving aan te passen waarin commando’s worden uitgevoerd, bijvoorbeeld door het aanpassen van omgevingsvariabelen.
2.2
a Tabel 2.1 toont de OWASP Top Ten uit 2010, 2007 en 2004. TABEL 2.1
OWASP
Top Ten in 2010, 2007 en 2004
OWASP Top Ten 2010
OWASP Top Ten 2007
OWASP Top Ten 2004
A1 Injection
A1 Cross Site Scripting (XSS)
A1 Unvalidated Input
A2 Cross-Site Scripting (XSS)
A2 Injection Flaws
A2 Broken Access Control
A3 Broken Authentication and Session Management
A3 Malicious File Execution
A3 Broken Authentication and Session Management
A4 Insecure Direct Object References
A4 Insecure Direct Object Reference
A4 Cross Site Scripting
A5 Cross-Site Request Forgery (CSRF)
A5 Cross Site Request Forgery (CSRF)
A5 Buffer Overflow
A6 Security Misconfiguration
A6 Information Leakage and Improper Error Handling
A6 Injection Flaws
A7 Insecure Cryptographic Storage
A7 Broken Authentication and Session Management
A7 Improper Error Handling
A8 Failure to Restrict URL Access
A8 Insecure Cryptographic Storage
A8 Insecure Storage
A9 Insufficient Transport Layer Protection
A9 Insecure Communications
A9 Application Denial of Service
A10 Unvalidated Redirects and Forwards
A10 Failure to Restrict URL Access
A10 Insecure Configuration Management
26
Leereenheid 2 Software vulnerabilities
In de loop van de tijd zijn vulnerabilities toegevoegd, verwijderd en van positie veranderd. Dat is enerzijds te wijten aan het feit dat de hoeveelheid en diversiteit aan software in de wereld steeds verder toeneemt, waardoor er steeds nieuwe vulnerabilities bijkomen en het relatieve belang van sommige vulnerabilities meer of minder wordt. Anderzijds worden de criteria voor samenstelling van de OWASP Top Ten ook telkens bijgesteld. Zo bevat de 2004-editie niet alleen vulnerabilities maar onder andere ook aanvallen (A9). Vanaf 2007 is de focus echter volledig op vulnerabilities. In 2007 is de ordening gebaseerd op de frequenties waarmee vulnerabilities zich voordeden. In 2010 is de ordening echter niet alleen op frequenties gebaseerd maar ook op de risico’s die aan de vulnerabilities verbonden zijn. Het is dus niet goed mogelijk om de opeenvolgende edities met elkaar te vergelijken. Als we met deze nuanceringen in het achterhoofd toch de opeenvolgende edities met elkaar vergelijken, valt onder andere het volgende op: – Het belang van Injection (flaws) is in de afgelopen jaren steeds verder toegenomen en staat in 2010 op nummer een. – Cross-site scripting staat in alle edities in de top vier. – Traditionele vulnerabilities zoals unvalidated input en buffer overflows verdwenen na 2004 uit de top tien. Ook hier is enige nuancering op zijn plaats. Aspecten als injection en XSS zijn in feite vormen van unvalidated input. Buffer overflows blijven onverminderd een belangrijke vulnerability in applicaties die zijn geschreven in C/C++. De OWASP Top Ten is echter gericht op webapplicaties waarvoor meestal andere talen dan C/C++ gebruikt worden.
27
Open Universiteit
Software security
2.3
Tabel 2.2 toont de 2011 CWE/SANS Top 25 Most Dangerous Software Errors en classificeert deze volgens de 7 pernicious kingdoms. In principe zouden sommige aspecten in meerdere categorieën ingedeeld kunnen worden. TABEL 2.2
2.4
2011 CWE/SANS Top 25 volgens seven pernicious kingdoms
Kingdom
2011 CWE/SANS Top 25 Most Dangerous Software Errors
Input validation and representation
1 Improper neutralization of special elements used in an SQL command ('SQL Injection') 2 Improper neutralization of special elements used in an OS command ('OS Command Injection') 3 Buffer copy without checking size of input ('Classic Buffer Overflow') 4 Improper neutralization of input during web page generation ('Cross-site Scripting') 9 Unrestricted upload of file with dangerous type 10 Reliance on untrusted inputs in a security decision 12 Cross-Site Request Forgery (CSRF) 13 Improper limitation of a pathname to a restricted directory ('Path Traversal') 14 Download of code without integrity check 20 Incorrect calculation of buffer size 23 Uncontrolled format string 24 Integer overflow or wraparound
API abuse
18 Use of potentially dangerous function
Security features
5 Missing authentication for critical function 6 Missing authorization 7 Use of hard-coded credentials 8 Missing encryption of sensitive data 11 Execution with unnecessary privileges 15 Incorrect authorization 19 Use of a broken or risky cryptographic algorithm 21 Improper restriction of excessive authentication attempts 25 Use of a one-way hash without a salt
Time and state
22 URL redirection to untrusted site ('Open Redirect')
Error handling
–
Code quality
–
Encapsulation
16 Inclusion of functionality from untrusted control sphere 17 Incorrect permission assignment for critical resource
Geen terugkoppeling.
28