Transcription

ting,Dut Christopher Kunz . Stefan EsserMe unzsinerlEinsvonDriesPHP-Sicherheitnba,Ent PHP tikelPHP/MySQL-Webanwendungensicher programmieren3., Oberarbeitete Auflagedpunkt.verlag

InhaItsverzeichnis1Einleitung1.1Dber dieses Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2Was ist Sicherheit?41.3Wichtige Begriffe51.4Sicherheitskonzepte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.5ISO 177991.6Wie verkaufe ich Sicherheit? . . . . . . . . . . . . . . . . . . . . . . 101.7Wichtige Informationsquellen . . . . . . . . . . . . . . . . . . . . . 121.7.11.7.21.7.31.7.4Mailinglisten. . . . . . . . . . . . . . . . . . . . . . . . . .Full HP-Sicherheit.de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Informationsgewinnung2.1Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2Webserver erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.32.2.1Server-Banner erfragen . . . . . . . . . . . . . . . . . . . 192.2.2Webserver-Verhalten interpretieren212.2.3Tools fur Webserver-Fingerprinting22Betriebssystem erkennen222.4PHP-Installation erkennen232.5Datenbanksystem erkennen2617

32.6.42.6.52.7Ternporare DateienInclude- und Backup-DateienDateien von EntwicklungswerkzeugenVergessene oder »versteckte« PHP-DateienTernporare 7.4mod speling. . . . . . . . . . . . . . . . . . . . . . . . . . . 32robots.txt33Standardpfade34Pfade verkiirzen37Varia blen isterglo3.6Fazit .4Cross-Site Sc2.8Kommentare aus HTML-Dateien374.1Grenzenlosi2.9Applikationen erkennen384.2Was ist rum XS 4.4Erhohte Ge:4.5Formularve:4.6XSS in LA1\4.7XSS - einige4.8Ein klassiscl4.9AngriffspunDas Aussehen/LayoutTypische Dateien bekannter ApplikationenHeader-FelderBestimmte PfadeKornmentare im QuellcodeHTML-Metatags2.10Default-User412.11Coogle Dork422.12Fazit424.10Angriffe ver3Parametermanipulation454.11Einfache Ge3.1Grundlagen454.12XSS verbien3.2Werkzeuge zur on mit dem Browser3.2.2Einen Proxy benutzenAngriffsszenarien und .3.83.3.9FehlererzeugungHTTP Response SplittingRemote Command ExecutionAngriffe auf DateisysternfunktionenAngriffe auf Shell-EbeneCookie PoisoningManipulation von FormulardatenVordefinierte PHP-Variablen manipulierenSpam iiber Mailformulare53555961626364" 65654.12.14.12.24.12.34.134.14XSS-Angrif4.15XSS in H4.15.14.15.2Se4.16Attack API4.17Second Ord

Inhaltsverzeichnis273.4Varia blen richtig Auf Datentyp prufen68Datenlange priifen69Inhalte priifen70Whitelist-Priifungen. . . . . . . . . . . . . . . . . . . . . 72Blacklist-Priifung. . . . . . . . . . . . . . . . . . . . . . . 74Clientseitige Validierung753.5registetglobals3.6Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794Cross-Site Scripting81374.1Grenzenlose Angriffe81384.2Was ist Cross-Site Scripting?82393939394041414.3Warum XSS gefahrlich ist834.4Erhohte Gefahr dank Browserkomfort . . . . . . . . . . . . . . 844.5Forrnularvervollstandigung verhindern . . . . . . . . . . . . . . 854.6XSS in LANs und WANs4.7XSS - einige Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.8Ein klassisches XSS884.9Angriffspunkte fiir XSS904.10Angriffe verschleiern - XSS Cheat Sheet. . . . . . . . . . . . . 914S4.11Einfache Cegenrnafsnahmen . . . . . . . . . . . . . . . . . . . . . . 94454.12XSS verbieten, HTML erlauben - wie? . . . . . . . . . . . . . . 636465657586BBCode97HTML-Filter mit XSS-Blacklist98Whitelist- Filtern mit» HTML Purifier" . . . . . 1014.13Die Zwischenablage per XSS auslesen1034.14XSS-Angriffe iiber DOM1044.15XSS in HTTP-Headern . . . . . . . . . . . . . . . . . . . . . . . . . 1074.15.14.15.2Angriffe der ersten Ordnung mit HeadernSecond Order XSS per Header1071074.16Attack API1104.17Second Order XSS per RSS . . . . . . . . . . . . . . . . . . . . . . 111

Inhaltsverzeichnis4.18Cross-Site Request Forgery (CSRF). 1124.18.14.18.24.18.34.18.44.18.54.18.6.CSRF als Firewall-BrecherCSRF in BBCodeEin erster Schutz gegen CSRF .,CSRF-SchutzmechanismenFormular-Token gegen CSRFUnheilige Allianz: CSRF und XSS114SQL-Injection5.1Grundlagen. 1215.2Auffinden von SQL-Injection-Moglichkeiten. 1235.2.15.2.25.2.35.2.4.5.3Syntax einer SQL-Injection. 1305.3.15.3.25.3.35.3.4.Sonderzeichen in SQLSchliisselworter in SQLEinfache SQL-InjectionUNION-Injections5.4Advanced SQL-Injection.5.55.4.1LOAD FILE5.4.2Denial of Service mit SQL-Injection5.4.3ORDER BY InjectionSchutz vor SQL-Injection.5.5.15.5.2.5.5.35.5.4Sonderzeichen maskieren1st Schliisselwort-Filterung einwirksamer Schutz?Parameter BindinglPrepared StatementsStored 4Spamvei6.5Fazit si:Session-SSchwachSession-lBrutefonSession fSession FZusatzlic7.9.17.9.27.9.3. 140. 140. 1425.6Fazit1437.10Fazit .6Authentisierung und Authentifizierung1458Upload-Fe6.1Wichtige Begriffe. 1458.16.1.16.1.2. 145. 146. 1468.28.4GrundlagAufbau entisierungAuthentifizierungAutorisierung8.3

gssicherheit. . . . . . . . . . . . . . . . . . . . . . 1476.36.2.1SSL6.2.2Behandlung von Passwortern . . . . . . . . . . . . .6.2.3Benutzernamen und Kennungen6.2.4Sichere Passworter . . . . . . . . . . . . . . . . . . . .6.2.5Passwort-Sicherheit bestimmen6.2.6Vergessene Passworter . . . . . . . . . . . . . . . . . .Authentifizierungssicherheit. . . . . . . . . . . . . . . . . . . . 5165118119121121Falsche Request-MethodeFalsche SQL-Abfrage . . . . . . . . . . . . . . . . . . .SQL-Injection . . . . . . . . . . . . . . . . . . . . . . . . .XSS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1231241251261276.4Spamvermeidung mit CAPTCHAs6.5Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1701307Sessions1301311311337.1Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1717.2Permissive oder strikte Session-Systerne7.3Session-Speicherung. . . . . . . . . . . . . . . . . . . . . . . . . . . 1741367.4Schwache Algorithmen zur Session-ID-Generierung . . . 1771361371387.5Session-Timeout7.6Bruteforcing von Sessions. . . . . . . . . . . . . . . . . . . . . . . 1797.7Session Hijacking7.8Session Fixation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827.9Zusatzliche n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1871451461468.2Aufbau eines Upload-Forrnulars . . . . . . . . . . . . . . . . . . 1878.3PHP-interne Verarbeitung8.4Speicherung der hochgeladenen Dateien . . . . . . . . . . . . 1898.5Bildiiberpriifung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908.6PHP-Code in ein Bild einfiigen . . . . . . . . . . . . . . . . . . . 191139139166171Page-Ticket-SystemSession-Dateien mittels Cronjob loschenSession-ID aus dem Referrer loschen173"178180187188

Inhaltsverzeichnis10.7Sa8.7Andere Dateitypen uberprufen1928.8Gefahrliche r mit ie Filter-API1969.4Verfiigbare Filter1979.5Validierende Filter9.4.19.4.2Reinigende FilterZahlen prufen und filtern1981992009.6Boolesche Werte2019.7URLs validieren2019.8IP-Adressen prufen20310.99.9Syntaxcheck fur E-Mail-Adressen20410.10 Ex9.10Reinigende Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2059.11Prufung externer 0,10,10.11 Ro10PHPintern20910.1Fehler in PHP20910.210.1.1 Month of PHP Bugs10.1.2 File-Upload-Bug10.1.3 Unsichere (De-)Serialisierung10.1.4 Verwirrter Speichermanager '"10.1.5 Speicherproblem dank htmlentities10.1.6 BewertungBestandteile eines sicheren Servers. . . . . . . . . . . . . . . . .20921021021021121121110.3Unix oder Windows?21310.4BIeiben Sie ec214216217Installation als 0.10.10.12 Fa211PHI11.1Wa11.11.11.11.11.11.11.11.

',,Inhaltsverzeichnis10.7Safe Mode. 122122222222410.9.22422522622622622620310.8.1 open basedir10.8.2 disable functions10.8.3 disable classes10.8.4 max execution time10.8.5 maxjnputjirne10.8.6 memory limit10.8.7 Upload-Einstellungen10.8.8 allow urLfopen10.8.9 allowjirljnclude10.8.1 0 registerglo balsCode-Sandboxing mit runkit20410.10 Externe 0.10.1 suPHP10.10.2 FastCGI10.10.3 Das Apache-Modul mod suid20520620710.11209211213213. 214.214216Roo ai 0211211Einrichtung des Safe Modesafe mode exec dirsafe mode include dirUmgebungsvariablen im Safe ModeSafe Mode considered harmful?PHP-EinstellungenBSD-RootjailsUser Mode Linuxmod securitymod chroot10.12 Fazit227228229229229. 231.231235237241.241242242242. 24311PHP-Hardening24511.1Warum PHP .7. 21711.1.8Buffer Overflows. 246Schutz vor Pufferuberlaufen imSuhosin-Patch. 247Schutz vor Format-String-Schwachstellen. 248Simulationsmodus. 249Include-Schutz gegen Remote-Includesund N ullbytes. 250Funktions- und Evaluationsbeschrankungen . 251Schutz gegen Response Splitting undMailheader Injection. 252Variablenschutz. 252

Inhaltsverzeichnis11.211.1.9 SQL Intrusion Detection11.1.10 Logging11.1.11 Transparente Cookie- undSession-Verschlusselung11.1.12 Hartung des Speicherlimits11.1.13 Transparenter phpinfot) Schutz11.1.14 Kryptografische FunktionenPrinzipien hinter Suhosin. 253. teBWlchtlgeCB.lvariables B.2registerg. 255B.3register Ic. 255. 258. 259B.4register aB.5postmax11.411.3.1 Installation des Patch11.3.2 Installation der ExtensionZusammenarbeit mit anderen Zend-ExtensionsB.6magic qu11.5Konfiguration. 260B.7magic qu.B.8always p B.9allow uriB.I0allow uri-C11.611.5.1 Generelle Optionen11.5.2 Log-Dateien11.5.3 Alarmskript11.5.4 Transparente Verschlusselung11.5.5 Variablenfilter11.5.6 Upload-KonfigurationBeispielkonfigurationListe aller !Gefahrenp11.7Fazit und Ausblick. 274C1Cross-Site12Webserver-Filter fur ApacheC2InforrnaricC3Full Path I12.1Einsatzgebiet von Filtermodulen. 275C.4SQL-InjeCi12.2Blacklist oder Whitelist?. 276C5HTTPRes12.3mod security. e 0CSMail-Heac0QuellenEGlossar12.412.3.1 So funktioniert's12.3.2 Gefahren durch mod security12.3.3 Installation12.3.4 Konfiguration12.3.5 Regelwerk von mod security12.3.6 Alarmskript fur mod security12.3.7 Rootjail-Umgebungen mit mod security12.3.8 mod security 2mod 4.412.4.5FazitSo ML-Whitelist manuell erstellenAutomatische ichr

259260260263266267268271ACheckliste fUr sichere Webapplikationen311BWichtige Optionen in php.ini315B.1variables orderB.2register globalsB.3register long arraysB.4register argc argvBo5post max sizeB.6magicquotesgpcBo7magic quotes runtime .Bo8always populatcraw poscdata .B.9allow urLfopens.ioallow uri include .CListe aller Schwachstellen mit275275276277278278279280283293293. 3150o'000 0 0 0 00 0 0 0000 0 00 00 0 0 00: 0 0 0 00 0000 0 00 00 000 0 0 0 00000 0 00 000000 -Header ar323Cross-Site Scripting0Information Disclosure.Full Path Disclosure .SQL-Injection0 0 00 000 000 HTIP Response Splitting .00Cross-Site Request ForgeryRemote Command Execution .0000 0 0 00 0 00 0 0 00 0 0 0000 0 00 000 0296299299300301303308309Stichwortverzeichnis331

ting, Christopher Kunz .StefanEsser . Dut Me unz . siner . lEins . PHP-Sicherheit . von Dries . nba, Ent PHP PHP/MySQL-Webanwendungen. tikel . sicher .