Schutz von JSON-Anwendungen mithilfe von Signaturen
JavaScript Object Notation (JSON) ist ein textbasierter offener Standard, der von der Skriptsprache JavaScript abgeleitet ist. JSON wird für die menschenlesbare Darstellung einfacher Datenstrukturen und assoziativer Arrays, sogenannter Objekte, bevorzugt. Es dient als Alternative zu XML und wird hauptsächlich zur Übertragung serialisierter Datenstrukturen für die Kommunikation mit Webanwendungen verwendet. Die JSON-Dateien werden normalerweise mit der Erweiterung.json gespeichert.
Die JSON-Payload wird normalerweise mit dem als application/jsonangegebenen MIME-Typ gesendet. Die anderen „Standard“ -Inhaltstypen für JSON sind:
- Anwendung/X-Javascript
- Text/Javascript
- text/x-javascript
- text/x-json
Verwendung der NetScaler Web App Firewall-Signaturen zum Schutz von JSON-Anwendungen
Um JSON-Anfragen zuzulassen, ist die Appliance mit dem JSON-Inhaltstyp vorkonfiguriert, wie in der folgenden show-Command-Ausgabe dargestellt:
> sh appfw jsonContentType
1) JSONContenttypevalue: "^application/json$" IsRegex: REGEX
Done
<!--NeedCopy-->
Die NetScaler Web App Firewall verarbeitet den Beitragstext nur für die folgenden Inhaltstypen:
- application/x-www-form-urlencoded
- multipart/form-data
- text/x-gwt-rpc
Die Anfragen, die mit anderen Content-Type-Headern, einschließlich application/json (oder einem anderen zulässigen Inhaltstyp), eingehen, werden nach der Header-Prüfung an das Backend weitergeleitet. Der Posttext solcher Anfragen wird nicht auf Verstöße gegen die Sicherheitsüberprüfung überprüft, selbst wenn die Sicherheitsprüfungen des Profils wie SQL oder Cross-Site Scripting aktiviert sind.
Um JSON-Anwendungen zu schützen und Verstöße zu erkennen, können Web App Firewall-Signaturen verwendet werden. Alle Anfragen, die den erlaubten Content-Type-Header enthalten, werden von der Web App Firewall auf Signaturabgleich verarbeitet. Sie können Ihre eigenen benutzerdefinierten Signaturregeln zur Verarbeitung von JSON-Payloads hinzufügen, um verschiedene Sicherheitsprüfungen durchzuführen (z. B. Cross-Site Scripting, SQL und Field Consistency), um Verstöße in den Headern sowie im Beitragstext zu erkennen und bestimmte Maßnahmen zu ergreifen.
Tipp
Im Gegensatz zu den anderen integrierten Standardeinstellungen kann der vorkonfigurierte JSON-Inhaltstyp mithilfe der CLI oder der GUI (GUI) bearbeitet oder entfernt werden. Wenn legitime Anforderungen für JSON-Anwendungen blockiert werden und Inhaltstypverletzungen auslösen, überprüfen Sie, ob der Inhaltstypwert genau konfiguriert ist. Weitere Informationen darüber, wie Web App Firewall Content-Typ-Header verarbeitet, finden Sie unter Schutz von Inhaltstypen
So fügen Sie JSON-Inhaltstyp mit der Befehlszeilenschnittstelle hinzu oder entfernen Sie sie
Geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein:
add appfw jsonContentType ^application/json$ IsRegEx REGEX
rm appfw JSONContentType "^application/json$"
So verwalten Sie JSON-Inhaltstypen mithilfe der GUI
Navigieren Sie zu Sicherheit > Web App Firewall und wählen Sie im Abschnitt Einstellungen die Option JSON-Inhaltstypen verwaltenaus.
Fügen Sie im Fenster JSONWeb App Firewall Inhaltstyp konfigurieren JSON-Inhaltstypen hinzu, bearbeiten oder löschen Sie JSON-Inhaltstypen entsprechend den Anforderungen Ihrer Anwendungen.
Konfiguration des Signaturschutzes zur Erkennung von Angriffen in JSON-Payload
Zusätzlich zu einem gültigen JSON-Inhaltstyp müssen Sie Signaturen konfigurieren, um die Muster anzugeben, die, wenn sie in einer JSON-Anfrage erkannt werden, auf eine Sicherheitsverletzung hinweisen. Die angegebenen Aktionen, wie Blockieren und Protokollieren, werden ausgeführt, wenn eine eingehende Anforderung eine Übereinstimmung mit allen Zielmustern in der Signaturregel auslöst.
Um eine benutzerdefinierte Signaturregel hinzuzufügen, empfiehlt Citrix, die GUI zu verwenden. Navigieren Sie zu System > Sicherheit > Web App Firewall > Signaturen. Doppelklicken Sie auf das Zielsignaturobjekt, um auf das Bedienfeld Web App Firewall-Signaturen bearbeiten zuzugreifen. Klicken Sie auf die Schaltfläche Hinzufügen, um die Aktionen, die Kategorie, die Protokollzeichenfolge, die Regelmuster usw. zu konfigurieren. Die Web App Firewall überprüft zwar alle zulässigen Nutzdaten vom Inhaltstyp auf Signaturübereinstimmungen, Sie können die Verarbeitung jedoch optimieren, indem Sie den JSON-Ausdruck in der Regel angeben. Wenn Sie ein neues Regelmuster hinzufügen, wählen Sie in den Drop-down-Optionen für Match die Option Ausdruck aus und geben Sie den Ziel-Match-Ausdruck aus Ihrer JSON-Payload an, um die spezifischen Anfragen zu identifizieren, die überprüft werden müssen. Ein Ausdruck muss mit einem TEXT beginnen. Präfix. Sie können weitere Regelmuster hinzufügen, um zusätzliche Übereinstimmungsmuster zur Identifizierung des Angriffs festzulegen.
Das folgende Beispiel zeigt eine Signaturregel. Wenn im POST-Text der JSON-Payload ein seitenübergreifendes Skript-Tag erkannt wird, das dem angegebenen XPATH_JSON-Ausdruck entspricht, wird eine Signaturübereinstimmung ausgelöst.
Beispiel für eine Signatur zur Erkennung von Cross-Site Scripting in JSON-Payload
<SignatureRule actions="log,stats" category="JSON" enabled="ON" id="1000001" severity="" source="" type="" version="1">
<PatternList>
<RequestPatterns>
<Pattern>
<Location area="HTTP_POST_BODY"/>
<Match type="Expression">TEXT.XPATH_JSON(xp%/glossary/title%).CONTAINS("example glossary")</Match>
</Pattern>
<Pattern>
<Location area="HTTP_METHOD"/>
<Match type="LITERAL">POST</Match>
</Pattern>
<Pattern>
<Location area="HTTP_POST_BODY"/>
<Match type="CrossSiteScripting"/>
</Pattern>
</RequestPatterns>
</PatternList>
<LogString>Cross-site scripting violation detected in json payload</LogString>
<Comment/>
</SignatureRule>
<!--NeedCopy-->
Beispiel für die Payload
Die folgende Payload löst den Signatur-Match aus, da sie das Cross-Site-Scripting-Tag <Gotcha!!>.
{"glossary": {"title": "example glossary","GlossDiv": {"title": "S","GlossList": {"GlossEntry": {"ID": "SGML","SortAs": "SGML","GlossTerm": "Standard Generalized Markup Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {"para": "A meta-markup language, used to create markup languages \*\*<Gotcha!!>\*\* such as DocBook.","GlossSeeAlso": ["GML", "XML"]},"GlossSee": "markup"}}}}}
<!--NeedCopy-->
Beispiel für die Lognachricht
Aug 21 12:21:42 <local0.info> 10.217.31.239 08/21/2015:23:21:42 GMT ns 0-PPE-1 : APPFW APPFW_SIGNATURE_MATCH 1471 0 : 10.217.253.62 990-PPE0 NtJnVMNnvPeQJnaUzXYW/GTvAQsA010 prof1 http://10.217.31.212/FFC/login_post.php Signature violation rule ID 1000001: cross-site scripting violation detected in json payload <not blocked>
<!--NeedCopy-->
Hinweis
Wenn du dieselbe Payload sendest, nachdem du das Cross-Site-Script-Tag entfernt hast (<Gotcha!!>), der Signaturregelabgleich wird nicht ausgelöst.
Highlights
- Verwenden Sie Web App Firewall-Signaturen, um Cross-Site Scripting, SQL und andere Verstöße zu erkennen, um JSON-Payload zu schützen.
- Stellen Sie sicher, dass der JSON-Inhaltstyp auf der Appliance als zulässiger Inhaltstyp konfiguriert ist.
- Stellen Sie sicher, dass der Inhaltstyp in der Payload dem konfigurierten JSON-Inhaltstyp entspricht.
- Stellen Sie sicher, dass alle in der Signaturregel konfigurierten Muster übereinstimmen, damit die ausgelöste Signaturverletzung ausgelöst wird.
- Wenn Sie eine Signaturregel hinzufügen, MUSS sie mindestens ein Regelmuster haben, das dem Ausdruck in der JSON-Payload entspricht. Alle PI-Ausdrücke in Signaturregeln müssen mit dem Präfix TEXT. beginnen und vom Typ Boolean sein.
Schützen Sie Anwendungs- oder JSON-Inhaltstypen mit SQL- und Cross-Site-Scripting-kodierten Payloads mithilfe von Richtlinien und Signaturen
NetScaler Web App Firewall kann Anwendungs- oder JSON-Inhaltstypen mithilfe von Richtlinien und Signaturen schützen.
Überprüfen Sie den Anwendungs- oder JSON-Inhaltstyp auf SQL-Injection mithilfe von Richtlinien
Sie müssen die folgenden Richtlinien hinzufügen und sie global an den virtuellen Server binden, um SQL-Injection zu unterstützen.
add appfw policy sqli_1 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#(((\\A)|(?<=[^a-zA-Z0-9_])))(select|insert|delete|update|drop|create|alter|grant|revoke|commit|rollback|shutdown|union|intersect|minus|case|decode|where|group|begin|join|exists|distinct|add|modify|constraint|null|like|exec|execute|char|or|and|sp_sdidebug)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
add appfw policy sqli_2 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\\A)|(?<=[^a-zA-Z0-9_]))(xp_availablemedia|xp_cmdshell|xp_deletemail|xp_dirtree|xp_dropwebtask|xp_dsninfo|xp_enumdsn|xp_enumerrorlogs|xp_enumgroups|xp_enumqueuedtasks|xp_eventlog|xp_findnextmsg|xp_fixeddrives|xp_getfiledetails|xp_getnetname|xp_grantlogin|xp_logevent|xp_loginconfig|xp_logininfo|xp_makewebtask|xp_msver|xp_regread|xp_perfend|xp_perfmonitor|xp_perfsample|xp_perfstart|xp_readerrorlog|xp_readmail|xp_revokelogin|xp_runwebtask|xp_schedulersignal|xp_sendmail|xp_servicecontrol|xp_snmp_getstate|xp_snmp_raisetrap|xp_sprintf|xp_sqlinventory|xp_sqlregister|xp_sqltrace|xp_sscanf|xp_startmail|xp_stopmail|xp_subdirs|xp_unc_to_drive)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
add appfw policy sqli_3 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\\A)|(?<=[^a-zA-Z0-9_]))(sysobjects|syscolumns|MSysACEs|MSysObjects|MSysQueries|MSysRelationships)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
add appfw policy sqli_4 HTTP.REQ.BODY(10000).SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\\A)|(?<=[^a-zA-Z0-9_]))(SYS\.USER_OBJECTS|SYS\.TAB|SYS\.USER_TABLES|SYS\.USER_VIEWS|SYS\.ALL_TABLES|SYS\.USER_TAB_COLUMNS|SYS\.USER_CONSTRAINTS|SYS\.USER_TRIGGERS|SYS\.USER_CATALOG|SYS\.ALL_CATALOG|SYS\.ALL_CONSTRAINTS|SYS\.ALL_OBJECTS|SYS\.ALL_TAB_COLUMNS|SYS\.ALL_TAB_PRIVS|SYS\.ALL_TRIGGERS|SYS\.ALL_USERS|SYS\.ALL_VIEWS|SYS\.USER_ROLE_PRIVS|SYS\.USER_SYS_PRIVS|SYS\.USER_TAB_PRIVS)((Z)|(?=[^a-zA-Z0-9_]))#) APPFW_BLOCK
Überprüfen des Anwendungs- oder JSON-Inhaltstyps mit Signaturen
Sie können dem Signaturobjekt im Anwendungsfirewallprofil die folgenden Signaturregeln hinzufügen, um die SQL-Injektion für den JSON-Inhaltstyp zu unterstützen.
Hinweis:
Post Body-Signaturen sind CPU-intensiv.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2013-2018 Citrix Systems, Inc. All rights reserved. -->
<SignaturesFile schema_version="6" version="0" minor_schema_version="0">
<Signatures>
<SignatureRule id="4000000" enabled="ON" actions="log,block" category="sql" source="" severity="" type="" version="1" sourceid="" harmscore="">
<PatternList>
<RequestPatterns>
<Pattern>
<Location area="HTTP_POST_BODY"/>
<Match type="Expression">TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#(((\A)|(?<=[^a-zA-Z0-9_])))(select|insert|delete|update|drop|create|alter|grant|revoke|commit|rollback|shutdown|union|intersect|minus|case|decode|where|group|begin|join|exists|distinct|add|modify|constraint|null|like|exec|execute|char|or|and|sp_sdidebug)((
Z)|(?=[^a-zA-Z0-9_]))#)</Match>
</Pattern>
<Pattern type="fastmatch">
<Location area="HTTP_METHOD"/>
<Match type="LITERAL">T</Match>
</Pattern>
</RequestPatterns>
</PatternList>
<LogString>sql Injection</LogString>
<Comment/>
</SignatureRule>
<SignatureRule id="4000001" enabled="ON" actions="log,block" category="sql" source="" severity="" type="" version="1" sourceid="" harmscore="">
<PatternList>
<RequestPatterns>
<Pattern>
<Location area="HTTP_POST_BODY"/>
<Match type="Expression">TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\A)|(?<=[^a-zA-Z0-9_]))(xp_availablemedia|xp_cmdshell|xp_deletemail|xp_dirtree|xp_dropwebtask|xp_dsninfo|xp_enumdsn|xp_enumerrorlogs|xp_enumgroups|xp_enumqueuedtasks|xp_eventlog|xp_findnextmsg|xp_fixeddrives|xp_getfiledetails|xp_getnetname|xp_grantlogin|xp_logevent|xp_loginconfig|xp_logininfo|xp_makewebtask|xp_msver|xp_regread|xp_perfend|xp_perfmonitor|xp_perfsample|xp_perfstart|xp_readerrorlog|xp_readmail|xp_revokelogin|xp_runwebtask|xp_schedulersignal|xp_sendmail|xp_servicecontrol|xp_snmp_getstate|xp_snmp_raisetrap|xp_sprintf|xp_sqlinventory|xp_sqlregister|xp_sqltrace|xp_sscanf|xp_startmail|xp_stopmail|xp_subdirs|xp_unc_to_drive)((
Z)|(?=[^a-zA-Z0-9_]))#)</Match>
</Pattern>
<Pattern type="fastmatch">
<Location area="HTTP_METHOD"/>
<Match type="LITERAL">T</Match>
</Pattern>
</RequestPatterns>
</PatternList>
<LogString>sql Injection</LogString>
<Comment/>
</SignatureRule>
<SignatureRule id="4000002" enabled="ON" actions="log,block" category="sql" source="" severity="" type="" version="1" sourceid="" harmscore="">
<PatternList>
<RequestPatterns>
<Pattern>
<Location area="HTTP_POST_BODY"/>
<Match type="Expression">TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\A)|(?<=[^a-zA-Z0-9_]))(sysobjects|syscolumns|MSysACEs|MSysObjects|MSysQueries|MSysRelationships)((
Z)|(?=[^a-zA-Z0-9_]))#)</Match>
</Pattern>
<Pattern type="fastmatch">
<Location area="HTTP_METHOD"/>
<Match type="LITERAL">T</Match>
</Pattern>
</RequestPatterns>
</PatternList>
<LogString>sql Injection</LogString>
<Comment/>
</SignatureRule>
<SignatureRule id="4000003" enabled="ON" actions="log,block" category="sql" source="" severity="" type="" version="1" sourceid="" harmscore="">
<PatternList>
<RequestPatterns>
<Pattern>
<Location area="HTTP_POST_BODY"/>
<Match type="Expression">TEXT.SET_TEXT_MODE(IGNORECASE).SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE.REGEX_MATCH(re#((\A)|(?<=[^a-zA-Z0-9_]))(SYS.USER_OBJECTS|SYS.TAB|SYS.USER_TABLES|SYS.USER_VIEWS|SYS.ALL_TABLES|SYS.USER_TAB_COLUMNS|SYS.USER_CONSTRAINTS|SYS.USER_TRIGGERS|SYS.USER_CATALOG|SYS.ALL_CATALOG|SYS.ALL_CONSTRAINTS|SYS.ALL_OBJECTS|SYS.ALL_TAB_COLUMNS|SYS.ALL_TAB_PRIVS|SYS.ALL_TRIGGERS|SYS.ALL_USERS|SYS.ALL_VIEWS|SYS.USER_ROLE_PRIVS|SYS.USER_SYS_PRIVS|SYS.USER_TAB_PRIVS)((
Z)|(?=[^a-zA-Z0-9_]))#)</Match>
</Pattern>
<Pattern type="fastmatch">
<Location area="HTTP_METHOD"/>
<Match type="LITERAL">T</Match>
</Pattern>
</RequestPatterns>
</PatternList>
<LogString>sql Injection</LogString>
<Comment/>
</SignatureRule>
</Signatures>
</SignaturesFile>
<!--NeedCopy-->
In diesem Artikel
- Verwendung der NetScaler Web App Firewall-Signaturen zum Schutz von JSON-Anwendungen
- So fügen Sie JSON-Inhaltstyp mit der Befehlszeilenschnittstelle hinzu oder entfernen Sie sie
- So verwalten Sie JSON-Inhaltstypen mithilfe der GUI
- Konfiguration des Signaturschutzes zur Erkennung von Angriffen in JSON-Payload
- Beispiel für eine Signatur zur Erkennung von Cross-Site Scripting in JSON-Payload
- Beispiel für die Payload
- Beispiel für die Lognachricht
- Highlights
- Schützen Sie Anwendungs- oder JSON-Inhaltstypen mit SQL- und Cross-Site-Scripting-kodierten Payloads mithilfe von Richtlinien und Signaturen