Coders Conquer Security: Share & Learn Series - Code Injection
Code-Injection-Angriffe gehören zu den häufigsten und auch gefährlichsten Angriffen, denen viele Websites und Anwendungen ausgesetzt sind. Sie variieren sowohl in Bezug auf die Raffinesse als auch auf die Gefahr, die von ihnen ausgeht, aber fast jede Website oder Anwendung, die Benutzereingaben akzeptiert, kann anfällig sein. In der Tat ist diese Art von Angriff eine, mit der sich fast jeder Cybersecurity-Verteidiger irgendwann in seiner Karriere auseinandersetzen muss, und das wahrscheinlich mehrmals.
Ein Code-Injection-Angriff kann immer dann erfolgen, wenn eine Anwendung oder Website Eingaben von Benutzern akzeptiert. Dies kann so einfach sein wie die Bereitstellung einer Suchfunktion oder die Aufforderung an einen Benutzer, seine Identifikationsdaten einzugeben. Der Angriff erfolgt, wenn ein böswilliger Benutzer anstelle einer normalen Texteingabe Code in das offene Feld eingibt. Ihr Ziel ist es, den Server dazu zu bringen, die Eingabe für gültigen Code zu halten und dann beliebige Funktionen auszuführen, die der Angreifer wünscht.
Während Code-Injection-Attacken extrem häufig vorkommen, sind auch die verfügbaren Verteidigungsmaßnahmen, mit denen sie gestoppt werden können, entsprechend. In dieser Folge lernen wir:
- Wie sie funktionieren
- Warum sie so gefährlich sind
- Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.
Wie verwenden Angreifer Code Injection?
Obwohl sich die spezifischen Details über Code-Injection-Angriffe je nach verwendeter Programmiersprache ändern, kann jede App oder Website anfällig sein, solange sie einem Benutzer die Eingabe von Daten ermöglicht. Code-Injection-Angriffe wurden bereits für SQL, HTML, XML, CSS und jede andere gängige Programmiersprache ausgelöst.
Zunächst muss ein Angreifer verwundbaren Code innerhalb einer Anwendung finden, normalerweise an einer Stelle, an der Benutzer ihre eigenen Eingaben machen können. Dieser Code nimmt zum Beispiel die PHP-Funktion eval() und gibt sie an einen Benutzer weiter, um sie zu ändern, ohne irgendeine Art von Validierung der Rückgabezeichenfolge.
$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");
Ein geschickter Angreifer könnte leicht eine eigene Zeichenkette an die eval-Funktion anhängen und sogar Systembefehle ausführen, wenn er möchte.
/index.php?arg=1; system(id)
Es ist wichtig zu beachten, dass Code-Injection-Angriffe zwar das Senden von Systembefehlen beinhalten können, aber nicht nur darauf beschränkt sind. Tatsächlich sind Hacker bei Code-Injection-Angriffen nur durch die Funktionalität der Sprache selbst begrenzt. In unserem Beispiel könnte ein Angreifer das Zielsystem so programmieren, dass es fast alles tut, was das PHP-Framework erlaubt.
Warum sind Code-Injection-Angriffe so gefährlich?
Code-Injection-Angriffe sind je nach Geschick des Angreifers potenziell extrem gefährlich. Sie können alles tun, was die Programmiersprache zulässt, was sie auf die gleiche Stufe wie die Programmierer der App stellt. Ein Angreifer könnte praktisch seine eigene App schreiben und sie innerhalb der Zielumgebung ausführen lassen.
Auch weniger erfahrene Angreifer können gefährlich sein. Anstatt ihre eigene Anwendung oder Code-Strings zu schreiben, können sie dem Zielsystem einfach befehlen, vorprogrammierte Malware zu akzeptieren und zu installieren. Dies könnte zu einer Verunstaltung der Website, zu Ransomware-Angriffen oder sogar zur Grundlage für eine Phishing-Kampagne werden, die sich gegen die Benutzer der Website richtet.
Meistens werden Code-Injection-Angriffe verwendet, um Dinge wie Benutzerlisten und Passwörter zu stehlen oder um wertvolle Informationen über ein System zu erhalten, das für weitere Kompromittierungen vorgesehen ist. Aber seien Sie gewarnt: Ein geschickter Programmierer kann mit einem Code-Injection-Angriff fast alles erreichen. Deshalb ist es so wichtig, dass jede potenzielle Instanz davon entdeckt und aus Ihrer Umgebung entfernt wird.
Vertrauen Sie niemandem! (Oder zumindest, nicht Benutzer)
Bei der Beseitigung von Schwachstellen, die durch Code-Injection-Angriffe entstehen, sollte man als erstes überall dort nachsehen, wo Benutzereingaben verlangt oder zugelassen werden. Alles, was von einem Benutzer eingegeben wird, ist unter keinen Umständen vertrauenswürdig. Wenn Sie Benutzereingaben ohne Filterung oder Prüfung zulassen, laden Sie Angreifer im Grunde dazu ein, Ihr System oder sogar Ihr Netzwerk mit einem Freischuss zu kompromittieren.
Obwohl es nicht immer möglich ist, ist der beste Weg, Code-Injection-Angriffe zu vereiteln, zu verhindern, dass Funktionen ausgeführt oder Benutzereingaben direkt interpretiert werden. Vielleicht kann man den Benutzern eine Auswahl an statischen Optionen geben, anstatt ihnen freie Hand bei der Eingabe ihrer eigenen Abfragen zu lassen, wobei die Anwendung so programmiert ist, dass sie nur diese begrenzten Auswahlmöglichkeiten als gültig akzeptiert. Das ist vielleicht nicht immer sinnvoll, aber wo es möglich ist, kann es Code-Injektionen verhindern, bevor sie beginnen.
Für Bereiche, in denen Benutzer ihre eigenen Eingaben machen müssen, müssen diese Daten streng kontrolliert werden. Die Annahme, dass alles ein potenzieller Angriff ist, ist ein guter Ansatzpunkt. Die Durchsetzung von Richtlinien mit geringsten Privilegien, wie z. B. Benutzerzugriff nur zum Lesen, sowohl auf der Client- als auch auf der Serverseite, kann die Ausführung des meisten Codes verhindern.
Die andere gute Verteidigung besteht darin, anwendungsweite Filter und Sanitization für alle Benutzereingaben zu implementieren. Entwickler sind sich der Code-Injection-Angriffe schon seit Jahren bewusst, und es gibt Bibliotheken mit bewährten Filtern für jedes Framework und jede Sprache. Wenn Sie diese Filter anwenden, stellen Sie sicher, dass Sie dies nicht nur auf die offensichtlichen Benutzereingabebereiche oder gegen allgemeine Parameter wie Get- und Post-Befehle tun, sondern auch gegen Cookies und HTTP-Header.
Anwenden einer Korrektur für Code Injection
Wenn Sie unnötige Benutzereingabebereiche aus Ihrer Umgebung entfernen, die Prinzipien der geringsten Privilegien durchsetzen und die neuesten Filter- und Bereinigungs-Tools verwenden, um potenzielle Angriffe zu untersuchen und zu erkennen, können Sie diese gefährliche Schwachstelle ausschalten. Die Einstellung, Benutzereingaben niemals zu vertrauen, wird Ihnen auch in Zukunft gute Dienste leisten. Wenn Sie all das tun, können Sie dieser gefährlichen Art von Angriffen einen Schritt voraus sein.
Als weitere Lektüre können Sie einen Blick auf den OWASP-Artikel über Code-Injektion werfen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Plattform Secure Code Warrior testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Um mehr über die Beseitigung dieser Schwachstelle und eine Schurkengalerie anderer Bedrohungen zu erfahren, besuchen Sie den BlogSecure Code Warrior .
Stellen Sie sich der Code-Injektion, genau jetzt. Nehmen Sie die Herausforderung auf unserer gamifizierten Trainingsplattform an: [Hier starten]
Code-Injection-Angriffe gehören zu den häufigsten und auch gefährlichsten Angriffen, denen viele Websites und Anwendungen ausgesetzt sind. Sie variieren sowohl in Bezug auf die Raffinesse als auch auf die Gefahr, die von ihnen ausgeht, aber fast jede Website oder Anwendung, die Benutzereingaben akzeptiert, kann anfällig sein.
Jaap Karan Singh ist ein Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.
Secure Code Warrior ist für Ihr Unternehmen da, um Sie dabei zu unterstützen, Ihren Code über den gesamten Lebenszyklus der Softwareentwicklung hinweg zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder ein anderer Sicherheitsverantwortlicher sind, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Demo buchenJaap Karan Singh ist ein Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.
Code-Injection-Angriffe gehören zu den häufigsten und auch gefährlichsten Angriffen, denen viele Websites und Anwendungen ausgesetzt sind. Sie variieren sowohl in Bezug auf die Raffinesse als auch auf die Gefahr, die von ihnen ausgeht, aber fast jede Website oder Anwendung, die Benutzereingaben akzeptiert, kann anfällig sein. In der Tat ist diese Art von Angriff eine, mit der sich fast jeder Cybersecurity-Verteidiger irgendwann in seiner Karriere auseinandersetzen muss, und das wahrscheinlich mehrmals.
Ein Code-Injection-Angriff kann immer dann erfolgen, wenn eine Anwendung oder Website Eingaben von Benutzern akzeptiert. Dies kann so einfach sein wie die Bereitstellung einer Suchfunktion oder die Aufforderung an einen Benutzer, seine Identifikationsdaten einzugeben. Der Angriff erfolgt, wenn ein böswilliger Benutzer anstelle einer normalen Texteingabe Code in das offene Feld eingibt. Ihr Ziel ist es, den Server dazu zu bringen, die Eingabe für gültigen Code zu halten und dann beliebige Funktionen auszuführen, die der Angreifer wünscht.
Während Code-Injection-Attacken extrem häufig vorkommen, sind auch die verfügbaren Verteidigungsmaßnahmen, mit denen sie gestoppt werden können, entsprechend. In dieser Folge lernen wir:
- Wie sie funktionieren
- Warum sie so gefährlich sind
- Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.
Wie verwenden Angreifer Code Injection?
Obwohl sich die spezifischen Details über Code-Injection-Angriffe je nach verwendeter Programmiersprache ändern, kann jede App oder Website anfällig sein, solange sie einem Benutzer die Eingabe von Daten ermöglicht. Code-Injection-Angriffe wurden bereits für SQL, HTML, XML, CSS und jede andere gängige Programmiersprache ausgelöst.
Zunächst muss ein Angreifer verwundbaren Code innerhalb einer Anwendung finden, normalerweise an einer Stelle, an der Benutzer ihre eigenen Eingaben machen können. Dieser Code nimmt zum Beispiel die PHP-Funktion eval() und gibt sie an einen Benutzer weiter, um sie zu ändern, ohne irgendeine Art von Validierung der Rückgabezeichenfolge.
$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");
Ein geschickter Angreifer könnte leicht eine eigene Zeichenkette an die eval-Funktion anhängen und sogar Systembefehle ausführen, wenn er möchte.
/index.php?arg=1; system(id)
Es ist wichtig zu beachten, dass Code-Injection-Angriffe zwar das Senden von Systembefehlen beinhalten können, aber nicht nur darauf beschränkt sind. Tatsächlich sind Hacker bei Code-Injection-Angriffen nur durch die Funktionalität der Sprache selbst begrenzt. In unserem Beispiel könnte ein Angreifer das Zielsystem so programmieren, dass es fast alles tut, was das PHP-Framework erlaubt.
Warum sind Code-Injection-Angriffe so gefährlich?
Code-Injection-Angriffe sind je nach Geschick des Angreifers potenziell extrem gefährlich. Sie können alles tun, was die Programmiersprache zulässt, was sie auf die gleiche Stufe wie die Programmierer der App stellt. Ein Angreifer könnte praktisch seine eigene App schreiben und sie innerhalb der Zielumgebung ausführen lassen.
Auch weniger erfahrene Angreifer können gefährlich sein. Anstatt ihre eigene Anwendung oder Code-Strings zu schreiben, können sie dem Zielsystem einfach befehlen, vorprogrammierte Malware zu akzeptieren und zu installieren. Dies könnte zu einer Verunstaltung der Website, zu Ransomware-Angriffen oder sogar zur Grundlage für eine Phishing-Kampagne werden, die sich gegen die Benutzer der Website richtet.
Meistens werden Code-Injection-Angriffe verwendet, um Dinge wie Benutzerlisten und Passwörter zu stehlen oder um wertvolle Informationen über ein System zu erhalten, das für weitere Kompromittierungen vorgesehen ist. Aber seien Sie gewarnt: Ein geschickter Programmierer kann mit einem Code-Injection-Angriff fast alles erreichen. Deshalb ist es so wichtig, dass jede potenzielle Instanz davon entdeckt und aus Ihrer Umgebung entfernt wird.
Vertrauen Sie niemandem! (Oder zumindest, nicht Benutzer)
Bei der Beseitigung von Schwachstellen, die durch Code-Injection-Angriffe entstehen, sollte man als erstes überall dort nachsehen, wo Benutzereingaben verlangt oder zugelassen werden. Alles, was von einem Benutzer eingegeben wird, ist unter keinen Umständen vertrauenswürdig. Wenn Sie Benutzereingaben ohne Filterung oder Prüfung zulassen, laden Sie Angreifer im Grunde dazu ein, Ihr System oder sogar Ihr Netzwerk mit einem Freischuss zu kompromittieren.
Obwohl es nicht immer möglich ist, ist der beste Weg, Code-Injection-Angriffe zu vereiteln, zu verhindern, dass Funktionen ausgeführt oder Benutzereingaben direkt interpretiert werden. Vielleicht kann man den Benutzern eine Auswahl an statischen Optionen geben, anstatt ihnen freie Hand bei der Eingabe ihrer eigenen Abfragen zu lassen, wobei die Anwendung so programmiert ist, dass sie nur diese begrenzten Auswahlmöglichkeiten als gültig akzeptiert. Das ist vielleicht nicht immer sinnvoll, aber wo es möglich ist, kann es Code-Injektionen verhindern, bevor sie beginnen.
Für Bereiche, in denen Benutzer ihre eigenen Eingaben machen müssen, müssen diese Daten streng kontrolliert werden. Die Annahme, dass alles ein potenzieller Angriff ist, ist ein guter Ansatzpunkt. Die Durchsetzung von Richtlinien mit geringsten Privilegien, wie z. B. Benutzerzugriff nur zum Lesen, sowohl auf der Client- als auch auf der Serverseite, kann die Ausführung des meisten Codes verhindern.
Die andere gute Verteidigung besteht darin, anwendungsweite Filter und Sanitization für alle Benutzereingaben zu implementieren. Entwickler sind sich der Code-Injection-Angriffe schon seit Jahren bewusst, und es gibt Bibliotheken mit bewährten Filtern für jedes Framework und jede Sprache. Wenn Sie diese Filter anwenden, stellen Sie sicher, dass Sie dies nicht nur auf die offensichtlichen Benutzereingabebereiche oder gegen allgemeine Parameter wie Get- und Post-Befehle tun, sondern auch gegen Cookies und HTTP-Header.
Anwenden einer Korrektur für Code Injection
Wenn Sie unnötige Benutzereingabebereiche aus Ihrer Umgebung entfernen, die Prinzipien der geringsten Privilegien durchsetzen und die neuesten Filter- und Bereinigungs-Tools verwenden, um potenzielle Angriffe zu untersuchen und zu erkennen, können Sie diese gefährliche Schwachstelle ausschalten. Die Einstellung, Benutzereingaben niemals zu vertrauen, wird Ihnen auch in Zukunft gute Dienste leisten. Wenn Sie all das tun, können Sie dieser gefährlichen Art von Angriffen einen Schritt voraus sein.
Als weitere Lektüre können Sie einen Blick auf den OWASP-Artikel über Code-Injektion werfen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Plattform Secure Code Warrior testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Um mehr über die Beseitigung dieser Schwachstelle und eine Schurkengalerie anderer Bedrohungen zu erfahren, besuchen Sie den BlogSecure Code Warrior .
Stellen Sie sich der Code-Injektion, genau jetzt. Nehmen Sie die Herausforderung auf unserer gamifizierten Trainingsplattform an: [Hier starten]
Code-Injection-Angriffe gehören zu den häufigsten und auch gefährlichsten Angriffen, denen viele Websites und Anwendungen ausgesetzt sind. Sie variieren sowohl in Bezug auf die Raffinesse als auch auf die Gefahr, die von ihnen ausgeht, aber fast jede Website oder Anwendung, die Benutzereingaben akzeptiert, kann anfällig sein. In der Tat ist diese Art von Angriff eine, mit der sich fast jeder Cybersecurity-Verteidiger irgendwann in seiner Karriere auseinandersetzen muss, und das wahrscheinlich mehrmals.
Ein Code-Injection-Angriff kann immer dann erfolgen, wenn eine Anwendung oder Website Eingaben von Benutzern akzeptiert. Dies kann so einfach sein wie die Bereitstellung einer Suchfunktion oder die Aufforderung an einen Benutzer, seine Identifikationsdaten einzugeben. Der Angriff erfolgt, wenn ein böswilliger Benutzer anstelle einer normalen Texteingabe Code in das offene Feld eingibt. Ihr Ziel ist es, den Server dazu zu bringen, die Eingabe für gültigen Code zu halten und dann beliebige Funktionen auszuführen, die der Angreifer wünscht.
Während Code-Injection-Attacken extrem häufig vorkommen, sind auch die verfügbaren Verteidigungsmaßnahmen, mit denen sie gestoppt werden können, entsprechend. In dieser Folge lernen wir:
- Wie sie funktionieren
- Warum sie so gefährlich sind
- Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.
Wie verwenden Angreifer Code Injection?
Obwohl sich die spezifischen Details über Code-Injection-Angriffe je nach verwendeter Programmiersprache ändern, kann jede App oder Website anfällig sein, solange sie einem Benutzer die Eingabe von Daten ermöglicht. Code-Injection-Angriffe wurden bereits für SQL, HTML, XML, CSS und jede andere gängige Programmiersprache ausgelöst.
Zunächst muss ein Angreifer verwundbaren Code innerhalb einer Anwendung finden, normalerweise an einer Stelle, an der Benutzer ihre eigenen Eingaben machen können. Dieser Code nimmt zum Beispiel die PHP-Funktion eval() und gibt sie an einen Benutzer weiter, um sie zu ändern, ohne irgendeine Art von Validierung der Rückgabezeichenfolge.
$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");
Ein geschickter Angreifer könnte leicht eine eigene Zeichenkette an die eval-Funktion anhängen und sogar Systembefehle ausführen, wenn er möchte.
/index.php?arg=1; system(id)
Es ist wichtig zu beachten, dass Code-Injection-Angriffe zwar das Senden von Systembefehlen beinhalten können, aber nicht nur darauf beschränkt sind. Tatsächlich sind Hacker bei Code-Injection-Angriffen nur durch die Funktionalität der Sprache selbst begrenzt. In unserem Beispiel könnte ein Angreifer das Zielsystem so programmieren, dass es fast alles tut, was das PHP-Framework erlaubt.
Warum sind Code-Injection-Angriffe so gefährlich?
Code-Injection-Angriffe sind je nach Geschick des Angreifers potenziell extrem gefährlich. Sie können alles tun, was die Programmiersprache zulässt, was sie auf die gleiche Stufe wie die Programmierer der App stellt. Ein Angreifer könnte praktisch seine eigene App schreiben und sie innerhalb der Zielumgebung ausführen lassen.
Auch weniger erfahrene Angreifer können gefährlich sein. Anstatt ihre eigene Anwendung oder Code-Strings zu schreiben, können sie dem Zielsystem einfach befehlen, vorprogrammierte Malware zu akzeptieren und zu installieren. Dies könnte zu einer Verunstaltung der Website, zu Ransomware-Angriffen oder sogar zur Grundlage für eine Phishing-Kampagne werden, die sich gegen die Benutzer der Website richtet.
Meistens werden Code-Injection-Angriffe verwendet, um Dinge wie Benutzerlisten und Passwörter zu stehlen oder um wertvolle Informationen über ein System zu erhalten, das für weitere Kompromittierungen vorgesehen ist. Aber seien Sie gewarnt: Ein geschickter Programmierer kann mit einem Code-Injection-Angriff fast alles erreichen. Deshalb ist es so wichtig, dass jede potenzielle Instanz davon entdeckt und aus Ihrer Umgebung entfernt wird.
Vertrauen Sie niemandem! (Oder zumindest, nicht Benutzer)
Bei der Beseitigung von Schwachstellen, die durch Code-Injection-Angriffe entstehen, sollte man als erstes überall dort nachsehen, wo Benutzereingaben verlangt oder zugelassen werden. Alles, was von einem Benutzer eingegeben wird, ist unter keinen Umständen vertrauenswürdig. Wenn Sie Benutzereingaben ohne Filterung oder Prüfung zulassen, laden Sie Angreifer im Grunde dazu ein, Ihr System oder sogar Ihr Netzwerk mit einem Freischuss zu kompromittieren.
Obwohl es nicht immer möglich ist, ist der beste Weg, Code-Injection-Angriffe zu vereiteln, zu verhindern, dass Funktionen ausgeführt oder Benutzereingaben direkt interpretiert werden. Vielleicht kann man den Benutzern eine Auswahl an statischen Optionen geben, anstatt ihnen freie Hand bei der Eingabe ihrer eigenen Abfragen zu lassen, wobei die Anwendung so programmiert ist, dass sie nur diese begrenzten Auswahlmöglichkeiten als gültig akzeptiert. Das ist vielleicht nicht immer sinnvoll, aber wo es möglich ist, kann es Code-Injektionen verhindern, bevor sie beginnen.
Für Bereiche, in denen Benutzer ihre eigenen Eingaben machen müssen, müssen diese Daten streng kontrolliert werden. Die Annahme, dass alles ein potenzieller Angriff ist, ist ein guter Ansatzpunkt. Die Durchsetzung von Richtlinien mit geringsten Privilegien, wie z. B. Benutzerzugriff nur zum Lesen, sowohl auf der Client- als auch auf der Serverseite, kann die Ausführung des meisten Codes verhindern.
Die andere gute Verteidigung besteht darin, anwendungsweite Filter und Sanitization für alle Benutzereingaben zu implementieren. Entwickler sind sich der Code-Injection-Angriffe schon seit Jahren bewusst, und es gibt Bibliotheken mit bewährten Filtern für jedes Framework und jede Sprache. Wenn Sie diese Filter anwenden, stellen Sie sicher, dass Sie dies nicht nur auf die offensichtlichen Benutzereingabebereiche oder gegen allgemeine Parameter wie Get- und Post-Befehle tun, sondern auch gegen Cookies und HTTP-Header.
Anwenden einer Korrektur für Code Injection
Wenn Sie unnötige Benutzereingabebereiche aus Ihrer Umgebung entfernen, die Prinzipien der geringsten Privilegien durchsetzen und die neuesten Filter- und Bereinigungs-Tools verwenden, um potenzielle Angriffe zu untersuchen und zu erkennen, können Sie diese gefährliche Schwachstelle ausschalten. Die Einstellung, Benutzereingaben niemals zu vertrauen, wird Ihnen auch in Zukunft gute Dienste leisten. Wenn Sie all das tun, können Sie dieser gefährlichen Art von Angriffen einen Schritt voraus sein.
Als weitere Lektüre können Sie einen Blick auf den OWASP-Artikel über Code-Injektion werfen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Plattform Secure Code Warrior testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Um mehr über die Beseitigung dieser Schwachstelle und eine Schurkengalerie anderer Bedrohungen zu erfahren, besuchen Sie den BlogSecure Code Warrior .
Stellen Sie sich der Code-Injektion, genau jetzt. Nehmen Sie die Herausforderung auf unserer gamifizierten Trainingsplattform an: [Hier starten]
Klicken Sie auf den unten stehenden Link und laden Sie die PDF-Datei dieser Ressource herunter.
Secure Code Warrior ist für Ihr Unternehmen da, um Sie dabei zu unterstützen, Ihren Code über den gesamten Lebenszyklus der Softwareentwicklung hinweg zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder ein anderer Sicherheitsverantwortlicher sind, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Bericht ansehenDemo buchenJaap Karan Singh ist ein Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.
Code-Injection-Angriffe gehören zu den häufigsten und auch gefährlichsten Angriffen, denen viele Websites und Anwendungen ausgesetzt sind. Sie variieren sowohl in Bezug auf die Raffinesse als auch auf die Gefahr, die von ihnen ausgeht, aber fast jede Website oder Anwendung, die Benutzereingaben akzeptiert, kann anfällig sein. In der Tat ist diese Art von Angriff eine, mit der sich fast jeder Cybersecurity-Verteidiger irgendwann in seiner Karriere auseinandersetzen muss, und das wahrscheinlich mehrmals.
Ein Code-Injection-Angriff kann immer dann erfolgen, wenn eine Anwendung oder Website Eingaben von Benutzern akzeptiert. Dies kann so einfach sein wie die Bereitstellung einer Suchfunktion oder die Aufforderung an einen Benutzer, seine Identifikationsdaten einzugeben. Der Angriff erfolgt, wenn ein böswilliger Benutzer anstelle einer normalen Texteingabe Code in das offene Feld eingibt. Ihr Ziel ist es, den Server dazu zu bringen, die Eingabe für gültigen Code zu halten und dann beliebige Funktionen auszuführen, die der Angreifer wünscht.
Während Code-Injection-Attacken extrem häufig vorkommen, sind auch die verfügbaren Verteidigungsmaßnahmen, mit denen sie gestoppt werden können, entsprechend. In dieser Folge lernen wir:
- Wie sie funktionieren
- Warum sie so gefährlich sind
- Wie Sie Abwehrmaßnahmen ergreifen können, um sie zu stoppen.
Wie verwenden Angreifer Code Injection?
Obwohl sich die spezifischen Details über Code-Injection-Angriffe je nach verwendeter Programmiersprache ändern, kann jede App oder Website anfällig sein, solange sie einem Benutzer die Eingabe von Daten ermöglicht. Code-Injection-Angriffe wurden bereits für SQL, HTML, XML, CSS und jede andere gängige Programmiersprache ausgelöst.
Zunächst muss ein Angreifer verwundbaren Code innerhalb einer Anwendung finden, normalerweise an einer Stelle, an der Benutzer ihre eigenen Eingaben machen können. Dieser Code nimmt zum Beispiel die PHP-Funktion eval() und gibt sie an einen Benutzer weiter, um sie zu ändern, ohne irgendeine Art von Validierung der Rückgabezeichenfolge.
$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");
Ein geschickter Angreifer könnte leicht eine eigene Zeichenkette an die eval-Funktion anhängen und sogar Systembefehle ausführen, wenn er möchte.
/index.php?arg=1; system(id)
Es ist wichtig zu beachten, dass Code-Injection-Angriffe zwar das Senden von Systembefehlen beinhalten können, aber nicht nur darauf beschränkt sind. Tatsächlich sind Hacker bei Code-Injection-Angriffen nur durch die Funktionalität der Sprache selbst begrenzt. In unserem Beispiel könnte ein Angreifer das Zielsystem so programmieren, dass es fast alles tut, was das PHP-Framework erlaubt.
Warum sind Code-Injection-Angriffe so gefährlich?
Code-Injection-Angriffe sind je nach Geschick des Angreifers potenziell extrem gefährlich. Sie können alles tun, was die Programmiersprache zulässt, was sie auf die gleiche Stufe wie die Programmierer der App stellt. Ein Angreifer könnte praktisch seine eigene App schreiben und sie innerhalb der Zielumgebung ausführen lassen.
Auch weniger erfahrene Angreifer können gefährlich sein. Anstatt ihre eigene Anwendung oder Code-Strings zu schreiben, können sie dem Zielsystem einfach befehlen, vorprogrammierte Malware zu akzeptieren und zu installieren. Dies könnte zu einer Verunstaltung der Website, zu Ransomware-Angriffen oder sogar zur Grundlage für eine Phishing-Kampagne werden, die sich gegen die Benutzer der Website richtet.
Meistens werden Code-Injection-Angriffe verwendet, um Dinge wie Benutzerlisten und Passwörter zu stehlen oder um wertvolle Informationen über ein System zu erhalten, das für weitere Kompromittierungen vorgesehen ist. Aber seien Sie gewarnt: Ein geschickter Programmierer kann mit einem Code-Injection-Angriff fast alles erreichen. Deshalb ist es so wichtig, dass jede potenzielle Instanz davon entdeckt und aus Ihrer Umgebung entfernt wird.
Vertrauen Sie niemandem! (Oder zumindest, nicht Benutzer)
Bei der Beseitigung von Schwachstellen, die durch Code-Injection-Angriffe entstehen, sollte man als erstes überall dort nachsehen, wo Benutzereingaben verlangt oder zugelassen werden. Alles, was von einem Benutzer eingegeben wird, ist unter keinen Umständen vertrauenswürdig. Wenn Sie Benutzereingaben ohne Filterung oder Prüfung zulassen, laden Sie Angreifer im Grunde dazu ein, Ihr System oder sogar Ihr Netzwerk mit einem Freischuss zu kompromittieren.
Obwohl es nicht immer möglich ist, ist der beste Weg, Code-Injection-Angriffe zu vereiteln, zu verhindern, dass Funktionen ausgeführt oder Benutzereingaben direkt interpretiert werden. Vielleicht kann man den Benutzern eine Auswahl an statischen Optionen geben, anstatt ihnen freie Hand bei der Eingabe ihrer eigenen Abfragen zu lassen, wobei die Anwendung so programmiert ist, dass sie nur diese begrenzten Auswahlmöglichkeiten als gültig akzeptiert. Das ist vielleicht nicht immer sinnvoll, aber wo es möglich ist, kann es Code-Injektionen verhindern, bevor sie beginnen.
Für Bereiche, in denen Benutzer ihre eigenen Eingaben machen müssen, müssen diese Daten streng kontrolliert werden. Die Annahme, dass alles ein potenzieller Angriff ist, ist ein guter Ansatzpunkt. Die Durchsetzung von Richtlinien mit geringsten Privilegien, wie z. B. Benutzerzugriff nur zum Lesen, sowohl auf der Client- als auch auf der Serverseite, kann die Ausführung des meisten Codes verhindern.
Die andere gute Verteidigung besteht darin, anwendungsweite Filter und Sanitization für alle Benutzereingaben zu implementieren. Entwickler sind sich der Code-Injection-Angriffe schon seit Jahren bewusst, und es gibt Bibliotheken mit bewährten Filtern für jedes Framework und jede Sprache. Wenn Sie diese Filter anwenden, stellen Sie sicher, dass Sie dies nicht nur auf die offensichtlichen Benutzereingabebereiche oder gegen allgemeine Parameter wie Get- und Post-Befehle tun, sondern auch gegen Cookies und HTTP-Header.
Anwenden einer Korrektur für Code Injection
Wenn Sie unnötige Benutzereingabebereiche aus Ihrer Umgebung entfernen, die Prinzipien der geringsten Privilegien durchsetzen und die neuesten Filter- und Bereinigungs-Tools verwenden, um potenzielle Angriffe zu untersuchen und zu erkennen, können Sie diese gefährliche Schwachstelle ausschalten. Die Einstellung, Benutzereingaben niemals zu vertrauen, wird Ihnen auch in Zukunft gute Dienste leisten. Wenn Sie all das tun, können Sie dieser gefährlichen Art von Angriffen einen Schritt voraus sein.
Als weitere Lektüre können Sie einen Blick auf den OWASP-Artikel über Code-Injektion werfen. Sie können Ihr neu erworbenes Verteidigungswissen auch mit der kostenlosen Demo der Plattform Secure Code Warrior testen, die Cybersecurity-Teams zu den ultimativen Cyber-Kriegern ausbildet. Um mehr über die Beseitigung dieser Schwachstelle und eine Schurkengalerie anderer Bedrohungen zu erfahren, besuchen Sie den BlogSecure Code Warrior .
Stellen Sie sich der Code-Injektion, genau jetzt. Nehmen Sie die Herausforderung auf unserer gamifizierten Trainingsplattform an: [Hier starten]
Inhaltsübersicht
Jaap Karan Singh ist ein Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.
Secure Code Warrior ist für Ihr Unternehmen da, um Sie dabei zu unterstützen, Ihren Code über den gesamten Lebenszyklus der Softwareentwicklung hinweg zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder ein anderer Sicherheitsverantwortlicher sind, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Demo buchenHerunterladenRessourcen für den Einstieg
Benchmarking von Sicherheitskompetenzen: Optimierung von Secure-by-Design im Unternehmen
Die Secure-by-Design-Bewegung ist die Zukunft der sicheren Softwareentwicklung. Erfahren Sie mehr über die wichtigsten Elemente, die Unternehmen berücksichtigen müssen, wenn sie über eine Secure-by-Design-Initiative nachdenken.
DigitalOcean verringert Sicherheitsverschuldung mit Secure Code Warrior
DigitalOceans Einsatz von Secure Code Warrior hat die Sicherheitsverschuldung deutlich reduziert, so dass sich die Teams stärker auf Innovation und Produktivität konzentrieren können. Die verbesserte Sicherheit hat die Produktqualität und den Wettbewerbsvorteil des Unternehmens gestärkt. Mit Blick auf die Zukunft wird der SCW Trust Score dem Unternehmen helfen, seine Sicherheitspraktiken weiter zu verbessern und Innovationen voranzutreiben.
Ressourcen für den Einstieg
Reaktive versus präventive Sicherheit: Prävention ist das bessere Heilmittel
Der Gedanke, Legacy-Code und -Systeme zur gleichen Zeit wie neuere Anwendungen mit präventiver Sicherheit auszustatten, kann entmutigend erscheinen, aber ein Secure-by-Design-Ansatz, der durch die Weiterbildung von Entwicklern durchgesetzt wird, kann die besten Sicherheitsverfahren auf diese Systeme anwenden. Dies ist für viele Unternehmen die beste Chance, ihre Sicherheitslage zu verbessern.
Die Vorteile eines Benchmarking der Sicherheitskompetenzen von Entwicklern
Der zunehmende Fokus auf sicheren Code und Secure-by-Design-Prinzipien erfordert, dass Entwickler von Beginn des SDLC an in Cybersicherheit geschult werden, wobei Tools wie Secure Code Warrior's Trust Score dabei helfen, ihre Fortschritte zu messen und zu verbessern.
Wesentlicher Erfolg für Enterprise Secure-by-Design-Initiativen
Unser jüngstes Forschungspapier „Benchmarking Security Skills: Streamlining Secure-by-Design in the Enterprise“ ist das Ergebnis einer umfassenden Analyse echter Secure-by-Design-Initiativen auf Unternehmensebene und der Ableitung von Best-Practice-Ansätzen auf Grundlage datengesteuerter Erkenntnisse.
Vertiefung: Navigieren durch die kritische CUPS-Schwachstelle in GNU-Linux-Systemen
Entdecken Sie die neuesten Sicherheitsprobleme, mit denen Linux-Benutzer konfrontiert sind, indem wir die jüngsten hochgradigen Sicherheitslücken im Common UNIX Printing System (CUPS) untersuchen. Erfahren Sie, wie diese Probleme zu einer möglichen Remote Code Execution (RCE) führen können und was Sie tun können, um Ihre Systeme zu schützen.