Unkontrollierte Verarbeitung von Eingabedaten

Werbung
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
Herunterladen