© Anders Ingeborn Säkerhetsbrister & intrång KTH DSV Kista maj 2001
© Anders Ingeborn Vem är Anders Ingeborn? • Civ.ing. KTH Datateknik 2000 • Teknisk säkerhetskonsult iXsecurity – Penetrationstester, sårbarhetsanalyser – Banker, kärnkraftverk, mediebolag mm. • Frilansskribent – Nätverk&Kommunikation – Säkerhet&Sekretess
© Anders Ingeborn Dagens föreläsning! • Säkerhetsbrister och intrång • Buffer overflow-brister, röd tråd: – Vad är det? – Varför intressant? – Hur fungerar det? – Exempel från verkligheten
© Anders Ingeborn Vad är det? • Vad är ett program (Turing?) – Maskinkodsinstruktioner i minnet • Brister som leder till att en angripare kan ändra dessa instruktioner – Full kontroll över programmet – Samma rättigheter som programmet
© Anders Ingeborn Varför är detta intressant? • Otroligt effektiva och fräcka attacker – Ofta total kontroll över en server • 25-30% av rapporterade brister – Morris Worm 1988 (fingerd & sendmail) – MS Internet Information Server 2001 • Kommer att finnas så länge program- merare sköter minneshantering (C)
© Anders Ingeborn Vad är det exakt? • En angripare lyckas lura ett program att skriva utanför reserverat minne – ”Buffer overflow” – Styr om datorns instruktionspekare • Programmeringsfel – Ingen kontroll av buffertstorlekar vid kopiering av minnesblock
© Anders Ingeborn När kopieras minnesblock? • En serverappl. tolkar ett kommando – Läser inmatad info från angripare – Använder strcpy() • Angriparen styr mängden data som kopieras – Bättre: strncpy() • Programmeraren styr den maximala mängden data som kopieras
© Anders Ingeborn Hur fungerar det? • Ett funktionsanrop • Returadress sparas på stacken • Lokala variabler reserveras på stacken • Stackminnet är sekvensiellt
© Anders Ingeborn Exempel •A•A •B•B •C•C •D•D • code • IP • DI • SI • FLAG • SP • BP • stack • IP
© Anders Ingeborn ”Buffer Overflow” FF FF FF FF 0C FF FF 14
© Anders Ingeborn Vi skriver över returadressen! • När anropade funktionen är klar – Deallokera de lokala variablerna • Lägg tillbaka gamla ESP • POP ESP – Gör RET till den anropande funktionen • Lägg tillbaka gamla EIP • RET, POP EIP • Vårt värde skrivs till EIP!
© Anders Ingeborn Vart hoppar vi? FF FF FF FF 0C FF FF 14
© Anders Ingeborn Alternativ för mer data FF FF FF FF 0C FF FF FF FF 1C FF 20 PUSH ESP RET 77 F8 E3 A8 ESP EIP aa bb cc dd fkn1 fkn2 Applikation Kernel32.dll Lokal variabel Strcpy 77 F8..
© Anders Ingeborn Vilken kod skickar vi? • ”Statiska instruktioner” – Förstöra information – Lägga till användare – Virus • Mer dynamiskt – Ladda ner ett program och starta det – InternetOpenURL, InternetReadFile
© Anders Ingeborn Helt dynamiskt • Kommandoskal över nätverket! – Öppna en socket – Loop • Lyssna på inmatning från angripare • Lägg på egen stackarea • Anropa systemfunktion, typ WinExec() – Bind cmd.exe till socket
© Anders Ingeborn Kom ihåg • Samma rättigheter som det attackerade programmet! – Kanske en del av operativsystemet? • Erfarenhet: – Många serverapplikationer körs med administratörsrättigheter – Gäller även ”viktiga företag”
© Anders Ingeborn Exempel från verkligheten • Microsoft • ”ASP-buggen”, dec 2000 • ”Printerbuggen”, apr 2001 GET null.printer HTTP/1.1 Host: ############################
© Anders Ingeborn Mer exempel • DNS – BIND-TSIG, feb 2001 – BIND-NXT, jan 2000(?) • FTP-GLOB, mar 2001 • NTP, apr 2001 • Oracle AS, apr 2001 – HTTP-anrop via iPlanet webbserver
© Anders Ingeborn Attack mot ett vanligt företag • Buffer overflow-brist i externt tillgänglig internet-tjänst – DNS, FTP, HTTP etc. • Kommandoskal över internet – Plattform för vidare attack in mot applikationsservrar, databasservrar etc.
© Anders Ingeborn Men brandväggar då? • Använd samma portar som tillåtna applikationer • Brandväggen kanske tillåter anslutningar inifrån och ut? – Låt servern ansluta till dig istället!
© Anders Ingeborn Var får man information? • BugTraq – • CERT – • Företag – Eeye, NAI Covert Labs – iXsecurity :-)
© Anders Ingeborn Lästips • Hack proofing your network, av Greg Höglund m.fl. • Smashing the stack for fun and profit av ”Aleph One” • Win32 Buffer Overflows av ”Barnaby Jack” • (Cuckoo’s Egg av Clifford Stoll)
© Anders Ingeborn Frågor
© Anders Ingeborn Bonusbild vid tid över • Styrning – Direkthopp – Registerhopp – NOP-sled • Kod – XOR-”kryptering” skydd mot \00 – LoadLibrary & GetProcAddress