Design av sikre web-applikasjoner Vidar Kongsli, Bekk Consulting AS Tekna - Risiko og sikkerhet i IKT-systemer – 12. mars 2008
Vidar Kongsli Manager i BEKK Før 1.1.2008: Fagleder for sikkerhet Etter 1.1.2008: Fagleder for kvalitet og testing http://www.kongsli.net/blog.cgi Risiko og sikkerhet i IKT-systemer 2008
Design av sikre web-applikasjoner Hva er en ’sikker’ web-applikasjon? Fins det en ’sikker’ web-applikasjon? ”Design av tilstrekkelig sikre web-applikasjoner” Risiko og sikkerhet i IKT-systemer 2008
OWASP – 10 mest kritiske sikkerhetsfeil Cross Site Scripting (XSS) Injection Flaws Malicious Code Execution Insecure Direct Object Reference Cross Site Request Forgery Information Leakage and Improper Error Handling Broken Authentication and Session Management Insecure Cryptographic Storage Insecure Communications Failure to Restrict URL Access Cross Site Scripting (XSS) Injection Flaws Malicious Code Execution Insecure Direct Object Reference Cross Site Request Forgery Information Leakage and Improper Error Handling Broken Authentication and Session Management Insecure Cryptographic Storage Insecure Communications Failure to Restrict URL Access Risiko og sikkerhet i IKT-systemer 2008
Tre kritiske spørsmål Hva er gyldige data? Hvor befinner dataene seg? Hva er data og hva er eksekverbar kode? Risiko og sikkerhet i IKT-systemer 2008
En typisk web-arkitektur Sluttbruker Web-server Back end/Database Sluttbruker Web-server Sluttbruker Risiko og sikkerhet i IKT-systemer 2008
Sikkerhetsbarrieren Data som sendes til klient Åpent for lesing Åpent for endring Kan komme på avveie Gjelder for eksempel cookies eller skjulte HTML felter Unngå å måtte stole på data som kommer fra klienten Viewstate har vanligvis en mac Viewstate kan være kryptert Risiko og sikkerhet i IKT-systemer 2008
Hva er gyldige data? Input validating Valider data som kommer fra utsiden av sikkerhetsbarriæren White-listing istedenfor black-listing Web-applikasjon Input validating Risiko og sikkerhet i IKT-systemer 2008
Data på avveie - Feilhåndtering Risiko og sikkerhet i IKT-systemer 2008
Data på avveie – feilhåndtering – hvor i arkitekturen? Vis en generisk feilside Logg feil/stacktrace etc. Web-applikasjon Output filter Risiko og sikkerhet i IKT-systemer 2008
Data på avveie - handlevognen Brukeren kan manipulere data: Salgssummen i handlekurven sendes til nettleseren i en cookie eller som et skjult HTML-felt Brukeren setter salgssummen til 1 kr og gjennomfører kjøpet Ikke stol på data fra klienten Salgssummen lagres på serveren (i brukerens sesjon) Lag en saltet hash av salgssummen for å validere dataenes integritet Risiko og sikkerhet i IKT-systemer 2008
Data på avveie – interne referanser Referanser til interne ressurser blir sendt til nettleseren Filnavn, primærnøkler i databasen, brukernavn, kontonummer Eksempel: http://www.foo.bar/readfile?file=store/log-2008-03-07-1.txt Eksempel: http://www.foo.bar/transaction?toAccount=4444.11.55555 Risiko og sikkerhet i IKT-systemer 2008
Interne referanser – mottrekk – hvor i arkitekturen? Web-applikasjon Original Ref. Ref Original Ref. Original 982373… file/log.txt 324243… file/leg.txt Risiko og sikkerhet i IKT-systemer 2008
Hva er eksekverbar kode? – Command/SQL injection Applikasjon klarer ikke å skille hva som er data og hva som er kode Ondsinnet bruker injiserer eksekverbar kode der applikasjonen forventer data Eksempler: SELECT * FROM User WHERE Username=”test” AND Password=”123” SELECT * FROM User WHERE Username=”Test” --” AND Password=”” Mottrekk: ”Metacharacter escaping” – data sendt til subsystem Principle of least privilege – begrense rettigheter i subsystem [xkcd.com] Test” -- Risiko og sikkerhet i IKT-systemer 2008
SQL Injection – mottrekk – hvor i arkitekturen? SQL tolker ’ og % som kontrolltegn Output escaping Prepared statements, stored procedures Web-applikasjon Output escaping Risiko og sikkerhet i IKT-systemer 2008
Hva er eksekverbar kode? – Cross site scripting Applikasjonen klarer ikke å skille hva som er data og hva som er kode Ondsinnet bruker injiserer eksekverbar kode der applikasjonen forventer data Også kjent som XSS og HTML-injection Utnytter metategn i HTML og/eller javascript Risiko og sikkerhet i IKT-systemer 2008
Hva er eksekverbar kode? – Cross site scripting (2) Sluttbruker Web-server Ekstern server Ondsinnet bruker Risiko og sikkerhet i IKT-systemer 2008
Cross site scripting - Eksempel Søkefelt Bruker søker på: test HTML: ...<input type="text" value="test">... Bruker søker på: test” HTML: ...<input type="text" value="test"">... Bruker søker på: test”><script>alert(”XSS”);</script><” HTML: ...<input type="text" value="test"><script>alert("XSS");</script><"">... Test Test” ”XSS”);</script><” Risiko og sikkerhet i IKT-systemer 2008
Cross site scripting – mottrekk – hvor i arkitekturen? HTML-escaping av data før den sendes til nettleseren Benytt rammeverk Web-applikasjon Output escaping Risiko og sikkerhet i IKT-systemer 2008
Hva er eksekverbar kode? - Cross site request forgery Sluttbruker Web-server Back end/Database Web-server Sluttbruker Risiko og sikkerhet i IKT-systemer 2008
Crosss site request forgery - mottrekk Legg et unikt tall (nonce) i siden som sendes til klient Sjekk at verdien er den samme når siden postes tilbake ”De-luxe” versjonen: spør om sikkerhetskode for hver transaksjon Nettbanker Risiko og sikkerhet i IKT-systemer 2008
Tre kritiske spørsmål – om igjen Hva er gyldige data? Input validation Hvor befinner dataene seg? Indirekte objektreferanser Ikke send unødvendig data til nettleseren Ikke send unødvendig feilinformasjon til nettleseren/brukeren Hva er data og hva er eksekverbar kode? JavaScript-eksekvering er kilde til XSS og XSRF Metacharacter escaping Håndter kontrolltegn for ulike subsystemer – databaser, nettlesere Risiko og sikkerhet i IKT-systemer 2008