2 Varför är XSS och SQL-injection så vanligt?



Relevanta dokument
Innehåll. MySQL Grundkurs

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

Nätsäkerhetsverktyg utöver kryptobaserade metoder

Essential Php Security Författare: Shiflett, Chris Antal sidor: 124 Förlag: O'Reilly

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Säkerhet. Säkerhet. Johan Leitet twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Avancerade Webbteknologier 2. AD11g Göteborg 2012 Säkerhet

OWASP Topp De 10 allvarligaste riskerna i webbapplikationer OWASP East Sweden: Uppstartsmöte

Webbservrar, severskript & webbproduktion

Skapa din egen MediaWiki

Föreläsning 2. Operativsystem och programmering

emopluppen Installationsmanual

SNABBGUIDE för Windows Media Encoder (media kodaren) - Sänd live med din webbkamera

EBITS Totalförsvarets Forskningsinstitut David Lindahl Erik Westring

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Säkerhet, eller nått. Tomas Forsman

Modul 6 Webbsäkerhet

Nya webbservern Dvwebb.mah.se

Inledning LAMP Perl Python.

JavaScript del 3 If, Operatorer och Confirm

Lektion 5 HTML, CSS, PHP och MySQL

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

Installera din WordPress med 9 enkla steg

INTRODUKTION TILL JDBC

Systemkrav och tekniska förutsättningar

Vad är en databas? Databasutveckling Med MySQL/MariaDB

Skicka och hämta filer med automatik

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

729G28. Webbprogrammering och databaser. Introduktion till webbutveckling med PHP. Jakob Pogulis Institutionen för Datavetenskap (IDA)

Hja lp till Mina sidor

Innehåll. Dokumentet gäller från och med version

Installationsanvisningar

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Installationsanvisningar

Installera SoS2000. Kapitel 2 Installation Innehåll

Säkerhetsbrister & intrång

Installation och konfiguration av klientprogramvara 2c8 Modeling Tool

Autentisering och Code-Based Access Control

Hå rd- och mjukvårukråv såmt rekommendåtioner fo r 3L Pro from version 2015.Q1

Kompletterande instruktioner för installation och konfiguration av HMS-server för koppling mot KONTAKT

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Datasäkerhet. Informationsteknologi sommarkurs 5p, Agenda. Slideset 10. Hot mot datorsystem. Datorsäkerhet viktigare och viktigare.

DATA CIRKEL VÅREN 2014

Handbok Simond. Peter H. Grasch

Datasäkerhet. Hur ska vi göra för att skydda våra datorer mot virus och andra hot?

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst

Manual för din hemsida

Säkrare hemsida med.se

Handbok Dela Skrivbord. Brad Hards Översättare: Stefan Asserhäll

Paket IIS BAS IIS Standard IIS Premium. Lagringsutrymme 10 GB* 50 GB* 100 GB* Epostutrymme 10 GB 25 GB 50 GB. Antal databaser 3 st 5 st 10 st

Programbeskrivning. Chaos på Web. Version

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Funktionsbeskrivning

Manuell import till Lime Pro

Systemkrav. Åtkomst till Pascal

Webbprogrammering - 725G54 PHP. Foreläsning II

Tentamen etjänster och webbprogrammering

Språket Python - Del 2 Grundkurs i programmering med Python

TEKNISK SPECIFIKATION. för TIDOMAT Portal version 1.7

Användarhandledning Version 1.2

Karlstads Universitet, Datavetenskap 1

Allmänt om programvaror och filer i Windows.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Introduktion MySQL och MariaDB

Introduk+on +ll programmering i JavaScript

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Avancerade Webbteknologier

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Säkerhet ur ett testperspektiv

Många företag och myndigheter sköter sina betalningar till Plusoch

Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Modul 8 Hantering av indata

Microsoft Internet Information Services 7 / 7.5

Introduktion till MySQL

Säkerhetsanalys. The Dribble Corporation - Krav. The Dribble Corporation - Mål. The Dribble Corporation Produkt: Dribbles. Vill börja sälja över nätet

Compose Connect. Hosted Exchange

Dokumentation för VLDIT AB. Online classroom

E11 "Protection" Föreläsning 11, HT2014 Säkerhet, tillgänglighet. Johan Leitet. Kurs: 1dv403 Webbteknik I

10 TIPS FÖR ATT SÄKRA DIN HEMSIDA. Hur du gör för skydda dig mot att din hemsida ska hackas.

Dataintrång hos Dataföreningen. Annica Bergman Dataföreningen i Sverige Internetdagarna 21 oktober 2008

McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0

TDP003 Projekt: Egna datormiljön

Bordermail instruktionsmanual

Byggsektorns Miljöberäkningsverktyg Användarmanual

Version Namn Datum Beskrivning 1.0 Förutsättningar Vitec Ekonomi 1.1 Marie Justering för krav på Windows Server

En syn på säkerhet. Per Lejontand

Hå rd- och mjukvårukråv såmt rekommendåtioner fo r 3L Pro from version 2013.Q3

FileCentral Desktop. Användarhandledning Version

Filleveranser till VINN och KRITA

SÄKERHET KUNSKAPER OM SÄKERHET OCH FÖRMÅGA ATT IDENTIFIERA OCH MOTARBETA ATTACKER

Att koppla FB till AD-inloggning

TEKNISK SPECIFIKATION. för TIDOMAT Portal version 1.3.1

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

MegTax CardCenterPro

Utkast/Version (8) Användarhandledning - inrapportering maskin-till-maskin

Policy för användande av IT

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

del 12 SKYDDA DIN DATOR

Dovado Tiny - installationsguide

Erfarenheter från labben

Transkript:

Datum: 2006-10-02 2006-10-02 Skribent: Jonas Feldt Föreläsare: Gunnar Kreitz 2D1395, Datasäkerhet Nya tekniker Den här föreläsningen behandlar säkerhetshål i SQL- och PHP-kod, möjliga exploits av teckenkodningssystemet UTF-8 och så kallad Google-hacking. Även formella metoder (matematiska bevis) för säkerhet tas upp, samt IDS - Intrusion Detection Systems. 1 Mitre Förra föreläsningen togs Mitre upp, en organisation som bland annat administrerar en databas med Common Vulnerabilities and Exposures (CVE). CVE är till för att namnge säkerhetshål, så att världen har ett gemensamt namn för ett visst hål. 1.1 Kritik mot Mitre Mitre har fått en del kritik för sin databas. Det som nämns är bland annat: Det är inte Mitres sak att hålla reda på säkerhetshål. Databasen listar säkerhetshål, inte exploits. Man jämför så att säga äpplen och päron när man likställer ett inte så allvarligt säkerhetshål som Cross-site Scripting (XSS) med det allvarligare buffer overflow. En stor del av säkerhetshålen som samlats in gäller små applikationer, som mycket få personer använder. 2 Varför är XSS och SQL-injection så vanligt? PHP är ett scriptspråk som används för att skapa dynamiskt webb-innehåll. I och med att det är väldigt lätt att skriva PHP-kod lockar det till sig nybörjare som inte alltid vet hur säker kod ska skrivas. PHP har också en ganska dålig säkerhetsdesign. 2.1 Dålig säkerhet i PHP En variabel i PHP är register-globals, som satt till false ger en farlig funktionalitet i applikationen. Ett vanligt PHP-anrop, t.ex. f oo.php?f oo = 2 gör att variabeln foo i programmet får värdet 2. Detta anrop kan utökas till foo.php?foo = 2&admin = true, vilket förstås gör att en eventuell boolesk variabel admin får värdet true. Om denna variabel satt till sann ger användaren administrator-rättigheter kan mycket tråkigt hända. I tidigare versioner 1

2 2D1395 Datasäkerhet HT 2006 av PHP fanns inte register-globals. En automatisk översättning av variabler i anropet till variabler i programmet utgjorde då ett stort säkerhetshål. PHP är inte heller så bra på att isolera kunder från varandra som använder samma webbhotell. 2.2 Exempel på dålig säkerhet i färdigt system Systemgruppen på KTH laddade ned ett gratis Open Source-bokningssystem för att föreläsare enkelt skulle kunna boka t.ex. salar och projektorer. En snabb granskning av källkoden hittade man 3 SQL-injections 10 XSS Detta visar att det är farligt att lita på scripts man installerat på sin webb-server. 3 Don t Try This At Home! Folk är snälla och rapporterar hål, men kan trots det råka ut för problem. Det är dumt att leta efter säkerhetshål på t.ex. hemsidor frilans". Utan uttryckligt tillstånd kan man råka illa ut. Det räcker inte att säga att man letade hål bara för att vara snäll". Blir man inhyrd för att göra ett säkerhetstest på ett system ska man se till att ha ett bra och skriftligt kontrakt innan man börjar. 3.1 Du kan råka illa ut Engelsmannen Daniel James Cuthbert skulle donera pengar till tsunami-offer, men fick ingen bekräftelse att det fungerat. Han misstänkte att han blivit offer för phising och ville kolla om siten var legitim. Detta gjorde han av någon anledning genom att stoppa in../../../ i URL:en. Han erkände sig senare skyldig till dataintrång och dömdes för detta. I USA skulle McCarthy ansöka till University of Southern California. Han hittade en SQL-injection i ansökningsapplikationen, laddade hem 17 rader ur antagningsdatabasen och rapporterade detta. Han dömdes till 3 års villkorlig dom, varav 6 månader i husarrest, samt 36000 dollar i böter. 4 SQL-injection Databaser är idag mycket populära och används till det mesta. För att kommunicera med dem används SQL. En SQL-fråga kan se ut så här: SELECT * from author WHERE author_id = $aid; Genom att sätta $aid = 0; droptable * kan man få SQL att tolka frågan som SELECT * from author WHERE author_id = $aid = 0;

Nya tekniker 3 DROP TABLE * Denna extra DROP TABLE läggs alltså in som en helt ny sats i SQL-queeryn och gör att alla tabeller i databasen raderas. Om PHP-scriptet som denna SQL-fråga körs från inte har rättigheter att t.ex. radera tabeller har man inte detta problem. 4.1 Hur hindrar vi SQL-injection? Filtrera indata. Använd bättre API/konfiguration. Försök göra indata säkert. Tecken som ska undvikas är enkla citationstecken, t.ex. foo, dubbla citationstecken och backslash. Gör istället om till \, till \ och \ till \\ för att slippa problem. Det här kan gå fel! Oftast missar programmeraren att filtrera någon parameter. En bättre ide är att använda ett bättre API, t.ex: JDBC: SELECT * FROM author WHERE author_id =?" Python: Här kan man skriva SELECT * FROM author WHERE author_id = %(aid)d för att säkerställa att aid alltid ska vara en signed integer. Det farliga är att en enkel felskrivning kan öppna upp för SQL-injection. Korrekt syntax är för en SQL-fråga är execute(query, params), men råkar man skriva fel, execute(query%params), är SQL-injection möjlig. 5 Teckenkodning och icke-kanonisk form UTF-8 är ett sätt att koda tecken, en så kallad multi byte-kodning. Den går ut på att man först bortser från eventuella nollor, sedan tittar på första bitarna för att se hur många bytes som följer. Antal bit: 7 bitar ger kodning med 1 byte, på formen 0xxx xxxx. 8-11 bitar ger kodning med 2 bytes, på formen 110x xxxx 10xx xxxx. 12-16 bitar ger kodning med 3 bytes, på formen 1110 xxxx 10xx xxxx 10xx xxxx 5.1 Risker med UTF-8 På en webbserver vill man inte tillåta anrop som ger obehöriga tillgång till skyddade filer. Ett anrop som innehåller t.ex.../../../etc/passwd skulle eventuellt kunna exponera en lösenordsfil och ska förbjudas. Genom att känna igen och förbjuda teckenkombinationen../ undviker man den säkerhetsrisken. Problemet när UTF-8 används är att / kan se ut på olika sätt:

4 2D1395 Datasäkerhet HT 2006 Kodat med 1 byte ser / ut så här: 0010 1111 (2F hexadecimalt). Kodat med 2 byte ser / ut så här: 1100 0000 1010 1111 (C0 AF hexadecimalt). 2-bytekodningen är ogiltig, men om den kodas av naivt ger den ändå ett / som resultat. I Microsofts Internet Information Services (IIS) accepterades förut ogiltiga 1-bitsrepresentationer av tecken, vilka senare ej kollades vid valideringen av indata. En URL som innehöll..%c0%af.. gav nu ett icke önskvärt resultat, eftersom C0AF ju är 2-bytesrepresentationen av /. Den fruktade teckenkombinationen../ tilläts därför. Hålet är nu lagat och IIS filtrerar ut ogiltiga teckenrepresentationer. 5.2 Problem med fler namn på samma sak Webbservern Apache gör ingen skillnad på stora och små tecken i filnamn (likaså Windows). Om rättigheter sätts för filen index.html får även filen med namn IndeX.HtMl dessa rättigheter när den öppnas. I Windows rättades problemet till för länge sedan, men nyligen kom svenska databasleverantören MySQL på att de hade samma typ av säkerhetshål. Om man satte rättigheter för db.secret fick även db.secret dessa. 6 PKCS 1.5 - paddning för RSA-signaturer Firefox och Operas implementationer av PKCS (Public Key Cryptography Standards) 1.5 är lite trasiga. Publik exponent e = 3 används ibland i RSA-nycklar av effektivitetsskäl, även av vissa Certification Authorities. Paddning anses ge bättre säkerhet, men att använda 3 som exponent ger upphov till en del problem. PKCS 1.5 ser ut så här: 0.1.FF.FF.1 <hashfunktion> <hashvärde> Skapar man paddningen med en trasig implementation av PKCS 1.5 på detta sätt kan man lätt ordna så att t.ex. 0.1.FF.FF.1 [SHA-1] [160 bit hashvärde] [skräp] får en giltig signatur, trots att man själv lagt in [skräp] med elakheter i slutet. Lägger man in rätt sorts [skräp] i slutet så att PKCS-datan blir en jämn kub, kommer en trasig RSA validera meddelandet trots att det inte är orginalet. 7 Google-hacking Sökmotorn Google exponerar en hel del säkerhetshål i diverse system. Inför valet kunde man söka på mysql_connect ssu.se rootför att få reda på lösenordet till SSUs databas. PHP-koden som då hittades avslöjade allt: $db = mysql_connect( [IP-nummer], root, [Lösenordet] ); Anledningen till att koden syntes var ett byte av PHP-version. Den gamla versionen gjorde om.php4-filer till HTML, men när den nya installerades behandlades bara.php-filer. Koden i.php4-filer syntes därför i klartext.

Nya tekniker 5 På webbsidan johnny.ihackstuff.com finns en lista över just Google-hacks. Med hjälp av den listan och Google kan man finna: Servrar med kända säkerhetshål Lösenord (ofta från sidor som visar PHP-kod istället för att köra den) Hemlig information. Ett exempel på detta är att det nyligen hittades servicemanualer som två bankomattillverkare lagt ut där default-lösenord syntes i klartext. Eftersom default-lösenord ofta inte byts var det möjligt att komma in i vissa bankomater och ändra inställningarna. En man i USA utnyttjade detta och ändrade så att en bankomat istället för att ge 5-dollarsedlar gav 20-dollarsedlar vid uttag. 8 Formella metoder Tänk om vi kunde bevisa att ett program är korrekt! Först måste vi definiera vad "korrekt"innebär för just det programmet, sedan bevisa att programmet uppfyller villkoren för korrekthet. För små program kan man bevisa detta, men för mer komplex programvara har man inte kommit på hur man ska gå tillväga. Korrekthetsbevis är ett aktivt forskningsområde. 8.1 Proof-Carrying-Code Om vi kan bevisa något, varför inte skicka med det med programmet? Idén är att den som kör programmet verifierar beviset som kom med. Den stora bördan läggs därför på tillverkaren, men det finns problem med att definiera vad man vill bevisa. Skulle man få den här metoden att fungera reducerar man i viss mån behovet av signaturer. Om koden behöver ändras skulle beviset fortfarande gälla, om nu inte elak kod lagts till. 9 IDS - Intrusion Detection System IDS innebär IntrångsDetektionsSystem, som upptäcker attacker. Hindras även attackerna kallas systemet för IPS - Intrusion Protection System. Två typer av IDS är NIDS och HIDS. 9.1 NIDS - Network IDS Ett NIDS känner igen, snarare än spärrar, nätverksattacker. Ett exempel på ett NIDS är Snort, som är en komersiell open source-programvara. Snort har en signaturdatabas med kända attacker och kostar pengar för att få snabb tillgång till denna. Vanligaste formen för ett NIDS är just att känna igen farliga mönster, som../, cmd.exe och /bin/sh, samt kända maskar. 9.2 HIDS - Host IDS Vanliga operationer för ett HIDS är att kontrollera loggar, filintegritet, aktiviteter, rootkit, virus och program på en enskild maskin. Det finns ett antal HIDSprodukter, men ingen jättestrikt definition på vad ett HIDS är. Grundkomponenter

6 2D1395 Datasäkerhet HT 2006 är nog loggar och integritetsskydd (t.ex. för att kolla att operativsystemets kärna är intakt). 9.2.1 Problem med IDS Traditionella IDS har en del problem, bland annat att de mest känner igen gamla attacker. En cracker kan därför starta en egen IDS för att på det sättet lära sig undvika det skydd som det tänka offret har. Det vore istället bättre om ett IDS kunde känna igen suspekt aktivitet, även om det inte sett attacken förut. Kanske kan detta lösas med att ett IDS har en modell över vad som är normalt och rapporterar avvikelser utifrån detta. Att utveckla ett sådant IDS är ett aktivt forskningsområde. 9.2.2 Problem med NIDS NIDS går ofta att lura, t.ex. genom att det finns oklarheter i protokoll. IP har t.ex. fragmentering, vilket kan ge problem för ett NIDS om operativsystemet och NIDS:et tolkar fragmenteringen olika. Att olika operativsystem kan tolka fragmenteringen på olika sätt innebär förstås ytterligare problem. Ett paket kan skickas uppdelat, se bilden nedan. När paketet kommer fram ser det inte ut som orginalet, och tolkningsproblemet uppstår. Vilken version av byte 3 gäller? Kodning, UTF-8, kan ge problem. 9.3 Att samköra loggar Intressant information om vad som hänt i ett system kan fås fram genom att samköra loggar från IDS och brandvägg. Det är bra att få reda på vad mer den som gjort IDS-attacken kommunicerat med. Att få ut något användbart ur loggar är svårt. En idé är att beskriva händelser med grafer, men den är inte fullt utvecklad ännu. 9.4 Honeypot En honeypot är ett system som är uppsatt enbart för att brytas in i. En cracker som upptäcker en honeypot lägger ner tid på att anfalla detta system, istället för att försöka bryta sig in i det riktiga systemet. Med en honeypot får man varningar om intrångsförsök och tillåter en att analysera anfallare riskfritt. Erfarenheter visar att ju bättre honeypot som finns uppsatt, destå mer anfallsaktivitet. En bra honeypot tar det ju längre tid att bryta sig in i och avslöja som falsk.

Nya tekniker 7 10 Källor Python operators: http://rgruet.free.fr/pqr2.3.html PKCS 1.5: http://www.linuxsecurity.com/content/blogcategory/93/106/7/14/ PKCS 1.5 säkerhetshål: http://66.249.93.104/search?q=cache:c7w9kvvd274j:https://www.identityblog.com/+pkcs+1.5+exponent+3+root+cube&hl=en&gl=se&ct=clnk&cd=7 Bankomathacking: http://www.eweek.com/article2/0,1895,2018674,00.asp