UnkontrollierteVerarbeitungvonEingabedaten AllgemeineSoftwareschwachstellenundzugehörige Angriffstechniken Dr.DominikHerrmann Folien:https://dhgo.to/unkontrolliert DieunkontrollierteVerarbeitungvonEingabedatenistdieUrsachezahlreicher Softwareschwachstellen. Ausfall von>900.000DSL-Routern inDE(Nov.2016) 2 Gliederung 1. Einordnung 2. SQL-Injections 3. Typosquatting Lernziele: – DiezweiBeispieleerläuternkönnen – Schutzmechanismenerklärenkönnen GrundlegendeKenntnisvonPHPundSQLwirdunterstellt. 3 WarummüssenEingabedatenvorderVerarbeitungkontrolliertwerden? Eingabedatenkönnenvon Angreifernmanipuliertwerden. Earn or give,butnever assume,trust Centerfor SecureDesign(IEEE,2014) Häufigmissachtet;Folge:CodeInjection – Maschinencode Establish and maintain control of allyour inputs CWE/SANSMonsterMitigations (2011) Spezifikation desSystems – Shellcode – JavaScript,PHP,… – SQL CWE:CommonWeaknessEnumeration http://cwe.mitre.org/top25/#Mitigations,http://cwe.mitre.org/top25/#Mitigations Software-Design Implementierung 4 Gliederung 1. UnkontrollierteVerarbeitungvonEingabedaten 2. SQL-Injections 3. Typosquatting Spezifikation desSystems Software-Design Implementierung 5 SQL-Injections veränderndieStrukturderursprünglichenSQL-Anfrage. Browser Webserver u:admin,p:123 SQL-Datenbank OK SELECT id FROM users WHERE user = 'admin' AND password = '123' OK SELECT id FROM users WHERE user = '' or 1=1 -- ' AND password = '' u: 'or1=1- - auskommentiert u:';DROPTABLEusers-OK SELECT id FROM users WHERE user = ''; DROP TABLE users -- ' AND password = '' $db = new mysqli('localhost','dbuser','dbpasswd','dbname'); $sql = "SELECT id FROM users WHERE " . "user = '$u' AND password = '$p' "; $result = $db->query($sql); if ($result->num_rows == 0) { /* invalid credentials */ } else { /* login sucessful */ } 6 SchutzvorSQL-Injections mussbeimSoftware-Design berücksichtigtwerden. EmpfehlenswerterAnsatz Parametrisierung allerAnfragen mitPrepared Statements $sql = "SELECT id FROM users WHERE ". " user = ? AND password = ? "; $stmt = $db->prepare($sql); $stmt->bind_param('ss', $u, $p); $stmt->execute(); ProblematischeAnsätze Validierung:ZurückweisenvonEingabedaten,dieSonderzeichenenthalten, oderSonderzeichenherausfiltern ' " ` ; Blacklist a-z, A-Z O'Brien Konfliktmöglich Whitelist Escapen vonSonderzeichendurch VoranstellendesZeichens„\“ $u = mysqli_real_escape_string($user); $p = mysqli_real_escape_string($pwd); SELECT id FROM users WHERE user = '\' or 1=1 -- ' AND password = '' $sql = "SELECT id FROM users WHERE ". "user = '$u' AND password = '$p' "; 7 Schutzmechanismenkönnenfalschimplementiertwerden. $u = mysqli_real_escape_string($user_id); Bestellhistorie Pizza Emiliana Sizilia $m = mysqli_real_escape_string($month); Größe Menge M L 1 2 Datum 10.03.16 15.03.16 $sql = "SELECT pizza, size, qty, date " . "FROM orders " . "WHERE usrid = $u AND " . " month = $m " ; „dabraucheichkeineAnführungszeichen – sindjaInteger-Werte“ Angriff über Parametermonth: Bestellhistorie Pizza 0 and 1=0 UNION SELECT Name, Nmbr, ExpMon, ExpYr FROM CC_Transactions Beispiel nach D.Boneh PeterMüller SilviaHuber Größe Menge 1234000000881234 9876566660000015 7 11 Datum 2019 2020 8 WeitereVariantenundSchutzmechanismen inderÜbung undimHacker-Praktikum ErmittlungvonSpalten undTabellen-Bezeichnern Blind undSecond-OrderInjections Experimentierumgebung 9 Gliederung 1. UnkontrollierteVerarbeitungvonEingabedaten 2. SQL-Injections 3. Typosquatting Spezifikation d.Systems Software-Design Implementierung 10 InoffenenSystemenisteineKontrollevonEingabedatennichtvorgesehen. DomainNameSystem: verteiltrealisierter hierarchischerNamensdienst Typosquatting: Domainsmit(Tipp-)Fehlern bespiel.de beispeil.de bwspiel.de beispiell.de wwwbeispiel.de … HoheVerbreitung Studiemit500populärenDomains(2015); >61.000Typo-Domains; 61%davonwaren erreichbar DENIC com de at Registrare paypal.de paypai.de Homograph i/Ivs.l/L Eindämmungschwierig Registrare könntenRegistrierungen kontrollieren,aberkeineAnreize (Externalitätseffekte) P.Agten,W.Joosen,F.Piessens,andN.Nikiforakis.SevenMonths’WorthofMistakes:ALongitudinalStudyofTyposquatting Abuse.InNDSS,2015. 11 Typosquatting istnichtaufDNSbeschränkt;betrifftauchSoftware-Entwickler. Software-Repositorys fürEntwickler PyPi (Python),NPM(JS),RubyGems JederdarfPaketemitbeliebigenNamen hochladen;diesesindsofortverfügbar. ÜblicherInstallationswegbeiPython: sudo pip install requests Studiemit214Paketnamen(2015/16) InstallationsmeldungperHTTP-Request; WarnhinweisfürEntwickleraufKonsole 1. AusnutzenvonTippfehlern reqeusts request req7ests … 2. AusnutzenvonIrrtümern urllib json bs4 UnterschätztesProblem >19.700Installationen,96%Irrtümer >17.200Hosts(44%alsroot,25mil/gov) instdlib enthalten! import bs4 from BeautifulSoup pip install beautifulsoup4 StrategienzurEindämmung – Not-Found-Fehlerauswerten – EntwicklerbeineuenPaketenoder Tippfehlernwarnen N.Tschacher:Typosquatting inProgrammingLanguagePackageManagers. Bachelorarbeit,Universität Hamburg,2016. 12 Zusammenfassung UnkontrollierteVerarbeitungvonEingabedaten – Code-Injection-Angriffe – SQL-Injections – Schutz:Software-Designund und korrekteImplementierung – Typosquatting-Angriffe – DomainNameSystem und Software-Repositorys fürEntwickler – FehlendeAnreize zurEindämmung Dr.DominikHerrmann WeiterführendeLiteratur A.Andonov (2007):TheUnexpectedSQLInjection (WhenEscapingIsNotEnough),availableat http://tinyurl.com/unexpected-sqlinj J.Spauldingetal.(2016):TheLandscapeof DomainNameTyposquatting:Techniquesand Countermeasures.arxiv.org/pdf/1603.02767.pdf https://dhgo.to/unkontrolliert