Ansichten:
Das Modul zur Eindringungsprävention enthält eine integrierte Regel, die SQL-Injection-Angriffe erkennt und die Verbindung je nach ihren Merkmalen trennt oder protokolliert. Die Regel heißt 1000608 - Generic SQL Injection Prevention und kann an die Bedürfnisse Ihrer Organisation angepasst werden. Zum Beispiel können Sie die Empfindlichkeit der Regel ändern, indem Sie den Schwellenwert für das Trennen anpassen.
ips-sql-injection-rule=f41d27c4-8c53-4f51-a512-8a67344c9738.png

Was ist ein SQL-Injection-Angriff?

Ein SQL-Injection-Angriff oder SQL-Phishing-Angriff ist eine Methode, um datengetriebene Anwendungen anzugreifen, bei der ein Angreifer Teile von SQL-Anweisungen in ein Eingabefeld einfügt. Der neu gebildete bösartige SQL-Befehl wird von der Website an Ihre Datenbank übergeben, wo er ausgeführt wird. Der Befehl kann dazu führen, dass der Angreifer in der Lage ist, Informationen in der Datenbank zu lesen, hinzuzufügen, zu löschen oder zu ändern.

Welche gängigen Zeichen und Zeichenfolgen werden bei SQL-Injection-Angriffen verwendet?

Hier sind einige häufig verwendete Zeichen und Zeichenfolgen. Die Liste ist nicht vollständig.
  • ('
  • %27
  • \x22
  • %22
  • char
  • ;
  • ascii
  • %3B
  • %2B
  • --
  • %2D%2D
  • /*
  • %2F%2A
  • */
  • %2A%2F
  • substring
  • drop table
  • drop+table
  • insert into
  • insert+into
  • version(
  • values
  • group by
  • group+by
  • create table
  • create+table
  • delete
  • update
  • bulk insert
  • bulk+insert
  • load_file
  • shutdown
  • union
  • having
  • select
  • declare
  • exec
  • and
  • or
  • like
  • @@hostname
  • @@tmpdir
  • is null
  • is+null
  • is not null
  • is+not+null
  • %3D
  • CONCAT
  • %40%40basedir
  • version%28,user(
  • user%28,system_user(
  • (,%28,)
  • %29
  • @
  • %40
  • cast

Wie funktioniert die Regel zur Verhinderung von generischen SQL-Injektionen?

Um SQL-Injection-Angriffe zu erkennen, verwendet die generische SQL-Injection-Präventionsregel ein Punktesystem. Es funktioniert folgendermaßen:
  1. Pakete von Ihrer Anwendung kommen beim Agenten zur Analyse an.
  2. Die generische SQL-Injektionspräventionsregel überprüft die Pakete und bestimmt, ob einer der im Folgenden aufgeführten Zeichenfolgen vorhanden ist. Beachten Sie, dass die Zeichenfolgen durch Kommas getrennt und in zehn Gruppen unterteilt sind.
  3. Wenn Zeichenfolgen gefunden werden, wird eine Punktzahl wie folgt berechnet:
    • Wenn eine einzelne Zeichenfolge gefunden wird, dann stellt die mit ihrer Gruppe verbundene Punktzahl die Gesamtpunktzahl dar.
    • Wenn mehrere Zeichenfolgen in verschiedenen Gruppen gefunden werden, werden die Punktzahlen dieser Gruppen zusammengezählt.
    • Wenn mehrere Zeichenfolgen in der gleichen Gruppe gefunden werden, wird die Punktzahl dieser Gruppe nur einmal gezählt. Siehe Beispiele für die Regel und das Punktesystem in Aktion zur Klärung.
  4. Anhand der Gesamtpunktzahl bestimmt Server- und Workload Protection, ob die Verbindung abgebrochen oder protokolliert wird. Wenn die Gesamtpunktzahl den Drop Threshold-Wert überschreitet, wird die Verbindung abgebrochen, und wenn sie den Log Threshold-Wert überschreitet, wird sie protokolliert.
Hinweis
Hinweis
Trend Micro aktualisiert seine Regeln häufig, daher stimmen die Zeichenfolgen in der Tabelle unten möglicherweise nicht genau mit denen in Server- und Workload Protection überein.
Hinweis
Hinweis
Die Verwendung von '\W' in den folgenden Zeilen bedeutet 'gefolgt von einem nicht-alphanumerischen Zeichen'.
Gruppe
Bewertung
drop table,drop+table,insert into,insert+into,values\W,create table,create+table,delete\W,update\W,bulk insert,bulk+insert,shutdown\W,from\W
2
declare\W,select\W
2
cast\W,exec\W,load_file
2
union\W,group by,group+by,order by,order+by,having\W
2
und\W,oder\W,wie\W,ist null,ist+null,ist nicht null,ist+nicht+null,wo\W
1
--,%2D%2D,/\*,%2F%2A,\*/,%2A%2F
1
',%27,\x22,%22,char\W
1
;,%3B
1
%2B,CONCAT\W
1
%3D
1
(,%28,),%29,@,%40
1
ascii,Teilzeichenkette
1
version(,version%28,user(,user%28,system_user(,system_user%28,database(,database%28,@@hostname,%40%40hostname,@@basedir,%40%40basedir,@@tmpdir,%40%40tmpdir,@@datadir,%40%40datadir
2

Beispiele für die Regel und das Bewertungssystem in Aktion

Nachfolgend finden Sie einige Beispiele dafür, wie die Punktzahlen berechnet werden und welche Maßnahmen in jedem Szenario ergriffen werden.

Beispiel 1: Protokollierter und verworfener Datenverkehr

Angenommen, Sie verwenden diese Regelkonfiguration (wobei die Punktzahl für die Gruppe nach dem Doppelpunkt (":") folgt):
drop table,drop+table,insert into,insert+into,values\W,create table,create+table,delete\W,update\W,bulk insert,bulk+insert,shutdown\W,from\W:2declare\W,select\W:2cast\W,exec\W,load_file:2union\W,group by,group+by,order by,order+by,having\W:2and\W,or\W,like\W,is null,is+null,is not null,is+not+null,where\W:1--,%2D%2D,/*,%2F%2A,*/,%2A%2F:1',%27,\x22,%22,char\W:1;,%3B:1%2B,CONCAT\W:1%3D:1(,%28,),%29,@,%40:1ascii,substring:1version(,version%28,user(,user%28,system_user(,system_user%28,databas(,database%28,@@hostname,%40%40hostname,@@basedir,%40%40basedir,@@tmpdir,%40%40tmpdir,@@datadir,%40%40datadir:2Log Threshold: 3Drop Threshold: 4
Und diese Angriffszeichenfolge wird erkannt:
productID=BB10735166+UNION/**/+SELECT+FROM+user
Dann beträgt die Gesamtpunktzahl 5 (2+1+0+2), weil:
  • Die Zeichenfolge UNION/ entspricht der vierten Gruppe für eine Punktzahl von 2.
  • Die Zeichenfolge /* entspricht der sechsten Gruppe für eine Punktzahl von 1.
  • Die Zeichenfolge */ entspricht der sechsten Gruppe für eine Punktzahl von 0 (da die Punktzahl der sechsten Gruppe bereits gezählt wurde).
  • Die Zeichenfolge SELECT+ entspricht der zweiten Gruppe für eine Punktzahl von 2.
Mit einer Gesamtpunktzahl von 5 wird ein Protokoll erstellt und der Datenverkehr wird abgelehnt.

Beispiel 2: Kein protokollierter oder verworfener Datenverkehr

Angenommen, Sie verwenden diese Regelkonfiguration (wobei die Zeichenfolge select\W in die gleiche Zeile wie union\W verschoben wurde):
drop table,drop+table,insert into,insert+into,values\W,create table,create+table,delete\W,update\W,bulk insert,bulk+insert,shutdown\W,from\W:2declare\W:2cast\W,exec\W,load_file:2union\W,select\W,group by,group+by,order by,order+by,having\W:2and\W,or\W,like\W,is null,is+null,is not null,is+not+null,where\W:1--,%2D%2D,/*,%2F%2A,*/,%2A%2F:1',%27,\x22,%22,char\W:1;,%3B:1%2B,CONCAT\W:1%3D:1(,%28,),%29,@,%40:1ascii,substring:1version(,version%28,user(,user%28,system_user(,system_user%28,databas(,database%28,@@hostname,%40%40hostname,@@basedir,%40%40basedir,@@tmpdir,%40%40tmpdir,@@datadir,%40%40datadir:2Log Threshold: 3Drop Threshold: 4
Und diese Angriffszeichenfolge wird erkannt:
productID=BB10735166+UNION/**/+SELECT+FROM+user
Dann beträgt die Gesamtpunktzahl 3 (2+1+0+0), weil:
  • Die Zeichenfolge UNION/ entspricht der vierten Gruppe für eine Punktzahl von 2.
  • Die Zeichenfolge /* entspricht der sechsten Gruppe für eine Punktzahl von 1.
  • Die Zeichenfolge */ entspricht der sechsten Gruppe für eine Punktzahl von 0 (da die Punktzahl der sechsten Gruppe bereits gezählt wurde).
  • Die Zeichenfolge SELECT+ entspricht der vierten Gruppe für eine Punktzahl von 0 (da die Punktzahl der vierten Gruppe bereits gezählt wurde).
Mit einer Gesamtpunktzahl von 3 wird kein Protokoll erstellt und kein Datenverkehr blockiert. Die Punktzahl muss die Schwellenwerte überschreiten, damit sie wirksam werden.

Konfigurieren Sie die generische SQL-Injection-Präventionsregel

Sie können die Regel zur Verhinderung von generischen SQL-Injektionen an die Bedürfnisse Ihrer Organisation anpassen. Die konfigurierbaren Optionen sind im Bild unten dargestellt.
ips-sql-injection-rule-details=cbe4edae-4116-401c-81e8-7f76c6be96fa.png
Um die Regel zu konfigurieren:
  1. Melden Sie sich bei der Server- und Workload Protection-Konsole an.
  2. Oben klicken Sie auf Richtlinien.
  3. Geben Sie im Suchfeld auf der rechten Seite 1000608 ein, die numerische Kennung der Regel zur generischen SQL-Injektionsprävention. Drücken Sie die Eingabetaste. Die Regel erscheint im Hauptfenster.
  4. Doppelklicken Sie auf die Regel.
  5. Klicken Sie auf die Registerkarte Konfiguration. Sie sehen das SQL-Injektionsmuster im Textfeld oben.
  6. Aktualisieren Sie das SQL-Injektionsmuster auf die neueste Version, wenn Sie es noch nicht angepasst haben. Um auf das neueste Muster zu aktualisieren, gehen Sie zur Registerkarte Details, kopieren Sie den Text unter der Überschrift Default SQL Pattern und fügen Sie ihn in das Textfeld SQL Injection Patterns auf der Registerkarte Konfiguration ein. Sie arbeiten nun mit dem aktuellsten Muster von Trend Micro.
  7. Bearbeiten Sie die Felder wie folgt:
    • SQL Injection Patterns: Hier geben Sie die Liste der Zeichen und Zeichenfolgen an, die bei SQL-Injection-Angriffen verwendet werden. Zeichen und Zeichenfolgen werden gruppiert und mit einem Punktwert versehen. Wenn Sie Zeichenfolgen hinzufügen oder ändern möchten, stellen Sie sicher, dass Sie die richtige Kodierung verwenden. Siehe Zeichenkodierungsregeln unten für Details.
    • Drop Threshold: Hier legen Sie den Abbruchwert fest. Die Verbindung wird abgebrochen, wenn der Wert diesen Schwellenwert überschreitet. (Wenn der Wert dem Abbruchschwellenwert entspricht, wird die Verbindung aufrechterhalten.) Der Standardwert ist 4.
    • Log Threshold: Hier geben Sie den Protokollierungswert an. Die Verbindung wird protokolliert, wenn der Wert diesen Schwellenwert überschreitet. (Wenn der Wert dem Protokollierungsschwellenwert entspricht, wird nichts protokolliert.) Der Standardwert ist 4.
    • Max distance between matches: Hier geben Sie die Anzahl der Byte an, die ohne Übereinstimmung übergehen können, um die Punktzahl auf 0 zurückzusetzen. Der Standardwert ist 35.
    Hinweis
    Hinweis
    Erwägen Sie, die folgenden zwei Optionen zu verwenden, um Überschreibungen für Seiten und Felder zu erstellen, die dazu führen könnten, dass die normalen Schwellenwerte überschritten werden.
    • Pages (resource) with a non-default score to drop on: Hier können Sie die Drop Threshold für bestimmte Ressourcen überschreiben. Zum Beispiel, wenn Ihre Drop Threshold 4 ist, aber Sie für eine Fragebogenseite einen Abbruchwert von 8 wünschen, geben Sie /example/questionnaire.html:8 an. Mit dieser Konfiguration muss /example/questionnaire.html einen Wert höher als 8 haben, damit die Verbindung abgebrochen wird, während alle anderen Ressourcen nur einen Wert höher als 4 benötigen. Geben Sie jede Ressource in einer separaten Zeile an.
    • Form parameters with a non-default score to drop on: Hier können Sie die in Drop Threshold oder den Pages (resources)with a non-default score to drop on-Feldern definierten Schwellenwerte für bestimmte Formularfelder überschreiben. Zum Beispiel, wenn Ihr Drop Threshold-Wert 4 ist, Sie aber einen höheren Abbruchwert von 10 für ein Benutzername-Feld wünschen, geben Sie /example/login.html:username=10 an, wobei /example/login.html durch den Pfad und Namen der Seite ersetzt wird, auf der das Benutzername-Feld erscheint, und username durch das Benutzername-Feld, das von Ihrer Anwendung verwendet wird. Mit dieser Konfiguration muss das Benutzername-Feld einen Wert höher als 10 haben, damit die Verbindung abgebrochen wird, während die Seite selbst nur einen Wert höher als 4 benötigt. Geben Sie jedes Formularfeld in einer separaten Zeile an.
    Hinweis
    Hinweis
    Der Log Threshold tritt nicht in Kraft, wenn Verbindungen aufgrund eines Treffers in den Feldern Pages (resources) with a non-default score to drop on oder Form parameters with a non-default score to drop on abgelehnt werden. Wenn Sie beispielsweise das Formularparameterfeld auf /example/login.html:username=10 setzen und das Benutzernamefeld 11 erreicht, wird die Verbindung abgelehnt, aber es gibt kein Protokoll dieses Ereignisses.
  8. Klicken Sie auf OK.
Sie haben nun die Regel zur Verhinderung von generischen SQL-Injektionen konfiguriert.

Richtlinien zur Zeichenkodierung

Wenn Sie Zeichenfolgen zur Regel zur Verhinderung von generischen SQL-Injektionen ändern oder hinzufügen möchten, müssen Sie diese ordnungsgemäß kodieren. Wenn Sie beispielsweise das Anführungszeichen ' in Ihrem Muster verwenden möchten, müssen Sie \x22 eingeben.
Die nachstehende Tabelle zeigt Zeichen und ihre kodierten Entsprechungen sowie Zeichenklassen, die Sie zur Kennzeichnung erweiterter Muster verwenden können.
Enter this string...
To denote...
\a
\A
Zeichen des Alphabets, a-z A-Z
nicht-alphabetische Zeichen
Beispiel: delete\a bedeutet "das Wort 'löschen' gefolgt von alphabetischen Zeichen"
\w
\W
alphanumerische Zeichen, a-z A-Z 0-9
nicht-alphanumerische Zeichen
Beispiel: delete\W bedeutet "das Wort 'löschen' gefolgt von nicht-alphanumerischen Zeichen"
\d
\D
Ziffern 0-9
Nicht-Ziffern-Zeichen
Beispiel: delete\d bedeutet "das Wort 'löschen' gefolgt von Ziffern zwischen null und neun"
\s
\S
whitespace
nicht Leerzeichen [\r,\n,\t,0x32]
Beispiel: delete\S bedeutet "das Wort 'löschen' gefolgt von einem Nicht-Leerzeichen"
\p
\P
Interpunktionszeichen, druckbares ASCII-Zeichen außer den oben genannten
Nicht-Interpunktionszeichen
Beispiel: delete\p bedeutet "das Wort 'löschen' gefolgt von einem Satzzeichen oder druckbarem ASCII"
\c
\C
Steuerzeichen, unter 32 oder größer oder gleich 127, ohne Leerzeichen
Nicht-Steuerzeichen
Details zu Steuerzeichen finden Sie hier.
\.
alle
\xDD
hex byte 0xDD
\x2c
Komma-Zeichen (,)
\x22
Anführungszeichen (")
\\
Escape-Backslash (\)
\|
entkommener Pipe (|)
|xx xx xx...|
Hex-Pipe (Byte-Sequenz)