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.

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%22char;ascii%3B%2B--%2D%2D/*%2F%2A*/%2A%2Fsubstringdrop tabledrop+tableinsert intoinsert+intoversion(valuesgroup bygroup+bycreate tablecreate+tabledeleteupdatebulk insertbulk+insertload_fileshutdownunionhavingselectdeclareexecandorlike@@hostname@@tmpdiris nullis+nullis not nullis+not+null%3DCONCAT%40%40basedirversion%28,user(user%28,system_user((,%28,)%29@%40cast
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:
- Pakete von Ihrer Anwendung kommen beim Agenten zur Analyse an.
- 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.
- 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.
- 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.
HinweisTrend 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.
|
HinweisDie 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: 4Und diese Angriffszeichenfolge wird erkannt:
productID=BB10735166+UNION/**/+SELECT+FROM+userDann 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: 4Und diese Angriffszeichenfolge wird erkannt:
productID=BB10735166+UNION/**/+SELECT+FROM+userDann 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.

Um die Regel zu konfigurieren:
-
Melden Sie sich bei der Server- und Workload Protection-Konsole an.
-
Oben klicken Sie auf Richtlinien.
-
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.
-
Doppelklicken Sie auf die Regel.
-
Klicken Sie auf die Registerkarte Konfiguration. Sie sehen das SQL-Injektionsmuster im Textfeld oben.
-
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.
-
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
0zurückzusetzen. Der Standardwert ist35.

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
4ist, aber Sie für eine Fragebogenseite einen Abbruchwert von8wünschen, geben Sie/example/questionnaire.html:8an. Mit dieser Konfiguration muss/example/questionnaire.htmleinen Wert höher als8haben, damit die Verbindung abgebrochen wird, während alle anderen Ressourcen nur einen Wert höher als4benö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
4ist, Sie aber einen höheren Abbruchwert von10für ein Benutzername-Feld wünschen, geben Sie/example/login.html:username=10an, wobei/example/login.htmldurch den Pfad und Namen der Seite ersetzt wird, auf der das Benutzername-Feld erscheint, undusernamedurch das Benutzername-Feld, das von Ihrer Anwendung verwendet wird. Mit dieser Konfiguration muss das Benutzername-Feld einen Wert höher als10haben, damit die Verbindung abgebrochen wird, während die Seite selbst nur einen Wert höher als4benötigt. Geben Sie jedes Formularfeld in einer separaten Zeile an.

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=10setzen und das Benutzernamefeld11erreicht, wird die Verbindung abgelehnt, aber es gibt kein Protokoll dieses Ereignisses. -
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)
|
