Webalkalmazási tűzfal (WAF) hibaelhárítása Azure-alkalmazás Gatewayhez
Ha a webalkalmazási tűzfalon (WAF) keresztülmenő kérések le vannak tiltva, néhány dolgot tehet.
Először is olvassa el a WAF áttekintését és a WAF konfigurációs dokumentumait. Emellett győződjön meg arról, hogy engedélyezte a WAF monitorozását : Ezek a cikkek ismertetik a WAF működését, a WAF-szabálykészletek működését és a WAF-naplók elérését.
Az OWASP-szabálykészletek úgy vannak kialakítva, hogy a dobozon kívül szigorúak legyenek, és a WAF használatával igazodjanak az alkalmazás vagy szervezet egyedi igényeihez. Teljesen normális, és sok esetben elvárható, hogy kizárásokat, egyéni szabályokat hozzon létre, és akár letiltsa azokat a szabályokat, amelyek problémákat vagy hamis pozitívumokat okozhatnak. A helyekre és az URI-ra vonatkozó szabályzatok lehetővé teszik, hogy ezek a módosítások csak bizonyos helyeket/URI-kat érinthessenek. Ezért a módosításoknak nem kell más webhelyeket érintenie, amelyek nem feltétlenül ugyanazokba a problémákba ütköznek.
A WAF-naplók ismertetése
A WAF-naplók célja, hogy minden olyan kérést megjelenítsen, amelyet a WAF egyezik vagy blokkol. Ez az összes kiértékelt kérelem naplója, amely megfeleltetve vagy letiltva van. Ha azt tapasztalja, hogy a WAF blokkolja a kérést, hogy ne legyen (hamis pozitív), akkor tehet néhány dolgot. Először szűkítse le, és keresse meg az adott kérést. Tekintse át a naplókat a kérelem adott URI-, időbélyeg- vagy tranzakcióazonosítójának megkereséséhez. Amikor megtalálta a társított naplóbejegyzéseket, megkezdheti a hamis pozitív értékekre való reagálást.
Tegyük fel például, hogy rendelkezik a WAF-on áthaladni kívánt sztringet 1=1
tartalmazó jogszerű forgalommal. Ha megpróbálja a kérést, a WAF letiltja a sztringet 1=1
tartalmazó forgalmat bármely paraméterben vagy mezőben. Ez egy gyakran SQL-injektálási támadáshoz társított sztring. Áttekintheti a naplókat, és megtekintheti a kérés időbélyegét, valamint a letiltott/egyeztetett szabályokat.
Az alábbi példában láthatja, hogy négy szabály aktiválódik ugyanazon kérés során (a TransactionId mező használatával). Az első azt mondja, hogy megfelelt, mert a felhasználó numerikus/IP-URL-címet használt a kéréshez, ami hárommal növeli az anomália pontszámát, mivel figyelmeztetés. A következő egyező szabály a 942130, amelyet keres. 1=1
A mező láthatódetails.data
. Ez tovább növeli az anomália pontszámát ismét hárommal, mivel ez is figyelmeztetés. Általában minden szabály, amelynek a művelete megfeleltetve van, növeli az anomália pontszámát, és ezen a ponton az anomália pontszáma hat lesz. További információ: Anomália pontozási mód.
Az utolsó két naplóbejegyzés azt mutatja, hogy a kérés le lett tiltva, mert az anomália pontszáma elég magas volt. Ezek a bejegyzések más műveletet hajtanak végre, mint a másik kettő. Azt mutatják, hogy ténylegesen blokkolták a kérést. Ezek a szabályok kötelezőek, és nem tilthatók le. Ezeket nem szabályoknak, hanem inkább a WAF belső infrastruktúrájának kell tekinteni.
{
"resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "167.220.2.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "920350",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
"data": "40.90.218.160",
"file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
"line": "791"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "167.220.2.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "OWASP_CRS",
"ruleSetVersion": "3.0.0",
"ruleId": "942130",
"message": "SQL Injection Attack: SQL Tautology Detected.",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
"data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
"file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
"line": "554"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "167.220.2.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
"data": "",
"file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
"line": "57"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
{
"resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
"operationName": "ApplicationGatewayFirewall",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "appgw_3",
"clientIp": "167.220.2.139",
"clientPort": "",
"requestUri": "\/",
"ruleSetType": "",
"ruleSetVersion": "",
"ruleId": "0",
"message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
"action": "Blocked",
"site": "Global",
"details": {
"message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
"data": "",
"file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
"line": "73"
},
"hostname": "vm000003",
"transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
}
}
Hamis pozitív értékek javítása
Ezzel az információval és a 942130 szabály a sztringgel egyező 1=1
szabály, néhány dolgot meg is tehet, hogy megakadályozza a forgalom blokkolását:
Kizárási lista használata
További információ a kizárási listákról: WAF-konfiguráció.
Tiltsa le a szabályt.
Kizárási lista használata
Ahhoz, hogy megalapozott döntést hozzon a hamis pozitív kezelésről, fontos megismerkednie az alkalmazás által használt technológiákkal. Tegyük fel például, hogy nincs SQL Server a technológiai veremben, és hamis pozitívumokat kap ezekhez a szabályokhoz. A szabályok letiltása nem feltétlenül gyengíti a biztonságot.
A kizárási lista használatának egyik előnye, hogy a kérelemnek csak egy adott része van letiltva. Ez azonban azt jelenti, hogy a WAF-on áthaladó összes forgalomra egy adott kizárás vonatkozik, mivel ez egy globális beállítás. Ez például problémát okozhat, ha az 1=1 érvényes kérés egy adott alkalmazás törzsében, mások számára azonban nem. Egy másik előnye, hogy választhat a törzs, fejlécek és cookie-k között, amelyeket ki kell zárni, ha egy adott feltétel teljesül, szemben a teljes kérés kizárásával.
Időnként előfordul, hogy bizonyos paraméterek nem intuitív módon kerülnek át a WAF-ba. Van például egy jogkivonat, amely a Microsoft Entra ID használatával történő hitelesítéskor lesz átadva. Ezt a jogkivonatot, __RequestVerificationToken általában kérési cookie-ként adjuk át. Bizonyos esetekben azonban, amikor a cookie-k le vannak tiltva, ez a jogkivonat kérési attribútumként vagy arg
. Ha ez történik, meg kell győződnie arról, hogy __RequestVerificationToken is hozzá lesz adva a kizárási listához kérelemattribútum-névként.
Ebben a példában ki szeretné zárni a Kérelem attribútum nevét, amely megegyezik a szöveg1 értékével. Ez azért nyilvánvaló, mert az attribútum neve látható a tűzfalnaplókban: adatok: Egyező adatok: 1=1 található az ARGS:text1: 1=1 fájlban. Az attribútum szöveg1. Ezt az attribútumnevet más módokon is megkeresheti, lásd: Kérelemattribútumnevek keresése.
A WAF-hez különböző hatókörszinteken hozhat létre kivételeket az Application Gatewayben. További információ: Webalkalmazási tűzfal kizárási listák.
Szabályok letiltása
Egy másik módja annak, hogy megkerülje a hamis pozitív, hogy tiltsa le a szabályt, amely megfelelt a bemeneten a WAF úgy gondolta, hogy rosszindulatú. Mivel elemezte a WAF-naplókat, és a szabályt 942130-ra szűkítette, letilthatja az Azure Portalon. Lásd: A webalkalmazás tűzfalszabályainak testreszabása az Azure Portalon.
A szabály letiltásának egyik előnye, hogy ha tudja, hogy egy adott feltételt tartalmazó összes forgalom érvényes forgalom, letilthatja a szabályt a teljes WAF-ben. Ha azonban csak egy adott használati esetben érvényes forgalomról van szó, a teljes WAF-szabály letiltásával biztonsági rést nyithat meg, mivel globális beállításról van szó.
Ha az Azure PowerShellt szeretné használni, olvassa el a webalkalmazási tűzfalszabályok testreszabása a PowerShell-lel című témakört. Ha az Azure CLI-t szeretné használni, olvassa el a webalkalmazási tűzfalszabályok testreszabása az Azure CLI-vel című témakört.
Kérelemattribútumnevek keresése
A Fiddler segítségével megvizsgálhatja az egyes kéréseket, és meghatározhatja, hogy milyen konkrét mezőket hívunk meg egy weblapnak. Ez segíthet kizárni bizonyos mezőket a vizsgálatból kizárási listák használatával.
Ebben a példában láthatja, hogy az a mező, amelyben az 1=1 sztring be lett írva, szöveg1.
Ezt a mezőt kizárhatja. A kizárási listákról további információt a webalkalmazás tűzfalkizárási listáiban talál. Ebben az esetben az alábbi kizárás konfigurálásával zárhatja ki a kiértékelést:
A tűzfalnaplókat is megvizsgálva lekérheti az információkat, hogy lássa, mit kell hozzáadnia a kizárási listához. A naplózás engedélyezéséhez tekintse meg az Application Gateway háttérállapotát, erőforrásnaplóit és metrikáit.
Vizsgálja meg a tűzfalnaplót, és tekintse meg a PT1H.json fájlt arra az órára vonatkozóan, amikor a vizsgálandó kérés megtörtént.
Ebben a példában láthatja, hogy négy szabálya van ugyanazzal a TransactionID azonosítóval, és hogy mindegyik pontosan ugyanabban az időben történt:
- {
- "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
- "operationName": "ApplicationGatewayFirewall",
- "category": "ApplicationGatewayFirewallLog",
- "properties": {
- "instanceId": "appgw_3",
- "clientIp": "167.220.2.139",
- "clientPort": "",
- "requestUri": "\/",
- "ruleSetType": "OWASP_CRS",
- "ruleSetVersion": "3.0.0",
- "ruleId": "920350",
- "message": "Host header is a numeric IP address",
- "action": "Matched",
- "site": "Global",
- "details": {
- "message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
- "data": "40.90.218.160",
- "file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
- "line": "791"
- },
- "hostname": "vm000003",
- "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
- }
- }
- {
- "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
- "operationName": "ApplicationGatewayFirewall",
- "category": "ApplicationGatewayFirewallLog",
- "properties": {
- "instanceId": "appgw_3",
- "clientIp": "167.220.2.139",
- "clientPort": "",
- "requestUri": "\/",
- "ruleSetType": "OWASP_CRS",
- "ruleSetVersion": "3.0.0",
- "ruleId": "942130",
- "message": "SQL Injection Attack: SQL Tautology Detected.",
- "action": "Matched",
- "site": "Global",
- "details": {
- "message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
- "data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
- "file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
- "line": "554"
- },
- "hostname": "vm000003",
- "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
- }
- }
- {
- "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
- "operationName": "ApplicationGatewayFirewall",
- "category": "ApplicationGatewayFirewallLog",
- "properties": {
- "instanceId": "appgw_3",
- "clientIp": "167.220.2.139",
- "clientPort": "",
- "requestUri": "\/",
- "ruleSetType": "",
- "ruleSetVersion": "",
- "ruleId": "0",
- "message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
- "action": "Blocked",
- "site": "Global",
- "details": {
- "message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
- "data": "",
- "file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
- "line": "57"
- },
- "hostname": "vm000003",
- "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
- }
- }
- {
- "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
- "operationName": "ApplicationGatewayFirewall",
- "category": "ApplicationGatewayFirewallLog",
- "properties": {
- "instanceId": "appgw_3",
- "clientIp": "167.220.2.139",
- "clientPort": "",
- "requestUri": "\/",
- "ruleSetType": "",
- "ruleSetVersion": "",
- "ruleId": "0",
- "message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
- "action": "Blocked",
- "site": "Global",
- "details": {
- "message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
- "data": "",
- "file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
- "line": "73"
- },
- "hostname": "vm000003",
- "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
- }
- }
Ha ismeri a CRS-szabálykészletek működését, és hogy a CRS 3.0-s szabálykészlete egy anomáliadetikus pontozó rendszerrel működik (lásd a webalkalmazási tűzfalat Azure-alkalmazás átjáróhoz), akkor tudja, hogy a művelettel rendelkező alsó két szabály: A blokkolt tulajdonság a teljes anomáliadetektált pontszám alapján blokkolva van. A legfontosabb szabályok a legfontosabbak.
Az első bejegyzés naplózása azért történik, mert a felhasználó numerikus IP-címmel navigál az Application Gatewayre, amely ebben az esetben figyelmen kívül hagyható.
A második (942130 szabály) az érdekes. A részletekben láthatja, hogy megfelelt egy mintának (1=1)
, és a mező neve szöveg1. Kövesse ugyanazokat az előző lépéseket, hogy kizárja a kérelemattribútum nevét , amely egyenlő 1=1
.
Kérelemfejlécek nevének megkeresése
A Fiddler ismét hasznos eszköz a kérelemfejlécek nevének megkereséséhez. Az alábbi képernyőképen láthatja a GET-kérelem fejléceit, amelyek tartalmazzák a tartalomtípust, a user-agentet és így tovább.
A kérés- és válaszfejlécek megtekintésének másik módja a Chrome fejlesztői eszközeinek megtekintése. Nyomja le az F12 billentyűt, vagy kattintson a jobb gombbal a -Vizsgálat –>>Fejlesztői eszközök elemre, és válassza a Hálózat lapot. Töltsön be egy weblapot, és válassza ki a vizsgálandó kérést.
Kérés cookie-nevének megkeresése
Ha a kérelem cookie-kat tartalmaz, a Cookie-k lap kiválasztható a Fiddlerben való megtekintéshez.
A globális paraméterek korlátozása a hamis pozitív értékek kiküszöbölésére
Kérelemtörzs vizsgálatának letiltása
Ha kikapcsolja a Kérelemtörzs vizsgálata beállítást, a forgalom kérési szerveit a WAF nem értékeli ki. Ez akkor lehet hasznos, ha tudja, hogy a kérelemtörzsek nem rosszindulatúak az alkalmazás számára.
Ha letiltja ezt a beállítást, csak a kérelem törzse halad át az ellenőrzésen. A fejléceket és a cookie-kat a rendszer továbbra is megvizsgálja, kivéve, ha az egyeseket kizárja a kizárási lista funkció.
Kérelem törzskorlátjának letiltása
A kérelemtörzs maximális korlátjának letiltásával a WAF anélkül dolgozhatja fel a nagyméretű kérelemtörzseket, hogy az túl nagy lenne. Ez akkor lehet hasznos, ha rendszeresen nagy kérésekkel rendelkezik.
Ha letiltja ezt a beállítást, a kérelem törzse csak a kérelemtörzs maximális ellenőrzési korlátjának megfelelően lesz megvizsgálva. Ha a kérelemben rosszindulatú tartalom található a kérelem törzsének maximális ellenőrzési korlátja felett, a WAF nem észleli azt.
Maximális fájlméretkorlátok letiltása
A WAF fájlméretkorlátainak letiltásával nagy méretű fájlok tölthetők fel anélkül, hogy a WAF elutasítja ezeket a fájlfeltöltéseket. A nagyméretű fájlok feltöltésének engedélyezésével nő annak a kockázata, hogy a háttérrendszer túlterhelt. Ha tudja, hogy a fájlfeltöltés maximális mérete mekkora lehet, beállíthatja a fájlfeltöltések méretkorlátját valamivel a várt maximális méret felett. Ha a fájlméretet az alkalmazás normál használati esetére korlátozza, az egy másik módszer a támadások megelőzésére. Ha azonban a fájlfeltöltések rendszeresen túllépik a maximális végrehajtható fájlfeltöltési méretkorlátot, előfordulhat, hogy teljesen le kell tiltania a fájlfeltöltési méretkorlátokat a téves pozitív értékek elkerülése érdekében.
Feljegyzés
Ha tudja, hogy az alkalmazásnak soha nem lesz szüksége fájlfeltöltésre egy adott méret felett, ezt korlátozhatja egy korlát beállításával.
Tűzfalmetrikák (csak WAF_v1)
Az 1-es verziójú webalkalmazási tűzfalak esetében a következő metrikák érhetők el a portálon:
- Webalkalmazás tűzfala letiltott kérelmek száma A letiltott kérelmek száma
- Webalkalmazás tűzfala letiltott szabályszám Minden szabály megfelelt , és a kérés le lett tiltva
- Webalkalmazási tűzfal teljes szabályeloszlását minden szabály, amely megfelelt a kiértékelés során
A metrikák engedélyezéséhez válassza a Metrikák lapot a portálon, és válasszon egyet a három metrika közül.
Következő lépések
Lásd: Webalkalmazási tűzfal konfigurálása az Application Gatewayen.