Listy wykluczeń zapory aplikacji internetowej

Zapora aplikacji internetowej bramy aplikacja systemu Azure Gateway (WAF) zapewnia ochronę aplikacji internetowych. W tym artykule opisano konfigurację list wykluczeń zapory aplikacji internetowej. Te ustawienia znajdują się w zasadach zapory aplikacji internetowej skojarzonych z usługą Application Gateway. Aby dowiedzieć się więcej na temat zasad zapory aplikacji internetowej platformy Azure, zobacz Usługa Azure Web Application Firewall w usłudze aplikacja systemu Azure Gateway i Tworzenie zasad zapory aplikacji internetowej dla usługi Application Gateway.

Czasami zapora aplikacji internetowej może blokować żądanie, które chcesz zezwolić na aplikację. Listy wykluczeń zapory aplikacji internetowej umożliwiają pominięcie niektórych atrybutów żądania z oceny zapory aplikacji internetowej. Pozostała część żądania jest oceniana normalnie.

Na przykład usługa Active Directory wstawia tokeny używane do uwierzytelniania. W przypadku użycia w nagłówku żądania te tokeny mogą zawierać znaki specjalne, które mogą wyzwalać wykrywanie fałszywie dodatnie z reguł zapory aplikacji internetowej. Dodając nagłówek do listy wykluczeń, można skonfigurować zaporę aplikacji internetowej tak, aby ignorowała nagłówek, ale zapora aplikacji internetowej nadal ocenia pozostałą część żądania.

Wykluczenia można skonfigurować do zastosowania, gdy są oceniane określone reguły zapory aplikacji internetowej, lub stosować globalnie do oceny wszystkich reguł zapory aplikacji internetowej. Reguły wykluczania mają zastosowanie do całej aplikacji internetowej.

Identyfikowanie atrybutów żądania do wykluczenia

Podczas konfigurowania wykluczenia zapory aplikacji internetowej należy określić atrybuty żądania, które powinno zostać wykluczone z oceny zapory aplikacji internetowej. Możesz skonfigurować wykluczenie zapory aplikacji internetowej dla następujących atrybutów żądania:

  • Nagłówki żądań
  • Żądanie plików cookie
  • Nazwę atrybutu żądania (args) można dodać jako element wykluczenia, taki jak:
    • Nazwa pola formularza
    • Jednostka JSON
    • Ciąg zapytania adresu URL — args

Możesz określić dokładny nagłówek żądania, treść, plik cookie lub dopasowanie atrybutu ciągu zapytania. Można też określić częściowe dopasowania. Użyj następujących operatorów, aby skonfigurować wykluczenie:

  • Równa się: ten operator jest używany do dokładnego dopasowania. Aby na przykład wybrać nagłówek o nazwie bearerToken, użyj operatora równości z selektorem ustawionym jako bearerToken.
  • Rozpoczyna się od: ten operator pasuje do wszystkich pól rozpoczynających się od określonej wartości selektora.
  • Kończy się na: ten operator pasuje do wszystkich pól żądań kończących się określoną wartością selektora.
  • Zawiera: Ten operator pasuje do wszystkich pól żądania, które zawierają określoną wartość selektora.
  • Równa się dowolny: ten operator pasuje do wszystkich pól żądania. * będzie wartością selektora. Można na przykład użyć tego operatora, jeśli nie znasz dokładnych wartości dla danej zmiennej dopasowania, ale chcesz upewnić się, że ruch żądań nadal jest wykluczony z oceny reguł.

Podczas przetwarzania wykluczeń aparat zapory aplikacji internetowej wykonuje dopasowanie uwzględniające wielkość liter/bez uwzględniania wielkości liter w oparciu o poniższą tabelę. Ponadto wyrażenia regularne nie są dozwolone, ponieważ selektory i treść żądań XML nie są obsługiwane.

Część treści żądania CRS 3.1 i starsze CRS 3.2 i nowsze
Nagłówka* Bez uwzględniania wielkości liter Bez uwzględniania wielkości liter
Cookie* Bez uwzględniania wielkości liter Uwzględniana wielkość liter
Ciąg zapytania* Bez uwzględniania wielkości liter Uwzględniana wielkość liter
Kodowana pod adresem URL treść Bez uwzględniania wielkości liter Uwzględniana wielkość liter
Treść JSON Bez uwzględniania wielkości liter Uwzględniana wielkość liter
Treść XML Nieobsługiwane Nieobsługiwane
Treść wieloczęściowa Bez uwzględniania wielkości liter Uwzględniana wielkość liter

*W zależności od aplikacji, nazw i wartości nagłówków, plików cookie i zapytań args może być rozróżniana wielkość liter lub bez uwzględniania wielkości liter.

Uwaga

Aby uzyskać więcej informacji i pomoc dotyczącą rozwiązywania problemów, zobacz Rozwiązywanie problemów z zaporą aplikacji internetowej.

Żądanie atrybutów według kluczy i wartości

Podczas konfigurowania wykluczenia należy określić, czy chcesz wykluczyć klucz, czy wartość z oceny zapory aplikacji internetowej.

Załóżmy na przykład, że twoje żądania zawierają następujący nagłówek:

My-Header: 1=1

Wartość nagłówka (1=1) może zostać wykryta jako atak przez zaporę aplikacji internetowej. Jeśli jednak wiesz, że jest to wiarygodna wartość dla danego scenariusza, możesz skonfigurować wykluczenie dla wartości nagłówka. W tym celu należy użyć zmiennej Match RequestHeaderValues , operator zawiera i selektor (My-Header). Ta konfiguracja zatrzymuje ocenę wszystkich wartości nagłówka My-Header.

Uwaga

Atrybuty żądania według klucza i wartości są dostępne tylko w systemach CRS 3.2 lub nowszych i Bot Manager 1.0 lub nowszych.

Atrybuty żądania według nazw działają tak samo jak atrybuty żądania według wartości i są uwzględniane w celu zapewnienia zgodności z poprzednimi wersjami systemu CRS 3.1 i wcześniejszych. Zalecamy używanie atrybutów żądania według wartości zamiast atrybutów według nazw. Na przykład użyj wartości RequestHeaderValues zamiast RequestHeaderNames.

Natomiast jeśli zapora aplikacji internetowej wykryje nazwę nagłówka () jakoMy-Header atak, możesz skonfigurować wykluczenie klucza nagłówka przy użyciu atrybutu żądania RequestHeaderKeys. Atrybut RequestHeaderKeys jest dostępny tylko w systemach CRS 3.2 lub nowszych oraz Bot Manager 1.0 lub nowszych.

Przykłady atrybutów żądania

W poniższej tabeli przedstawiono kilka przykładów sposobu tworzenia struktury wykluczenia dla danej zmiennej dopasowania.

Atrybut wykluczania matchVariable selectorMatchOperator Przykładowy selektor Przykładowe żądanie Co zostanie wykluczone
Ciąg zapytania RequestArgKeys Równa się /etc/passwd Identyfikator uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Ciąg zapytania RequestArgKeys EqualsAny Nie dotyczy Identyfikator uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd i .htaccess
Ciąg zapytania RequestArgNames Równa się text Identyfikator uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Ciąg zapytania RequestArgNames EqualsAny Nie dotyczy Identyfikator uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd i .cshrc
Ciąg zapytania RequestArgValues Równa się text Identyfikator uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Ciąg zapytania RequestArgValues EqualsAny Nie dotyczy Identyfikator uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd i .cshrc
Treść żądania RequestArgKeys Contains sleep Treść żądania: {"sleep(5)": "test"} sleep(5)
Treść żądania RequestArgKeys EqualsAny Nie dotyczy Treść żądania: {".zshrc": "value", "sleep(5)":"value2"} .zshrc i sleep(5)
Treść żądania RequestArgNames Równa się test Treść żądania: {"test": ".zshrc"} .zshrc
Treść żądania RequestArgNames EqualsAny Nie dotyczy Treść żądania: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc i sleep(5)
Treść żądania RequestArgValues Równa się test Treść żądania: {"test": ".zshrc"} .zshrc
Treść żądania RequestArgValues EqualsAny Nie dotyczy Treść żądania: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc i sleep(5)
Nagłówek RequestHeaderKeys Równa się X-Scanner Nagłówka: {"X-Scanner": "test"} X-scanner
Nagłówek RequestHeaderKeys EqualsAny Nie dotyczy Nagłówka: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner i x-ratproxy-loop
Nagłówek RequestHeaderNames Równa się head1 Nagłówka: {"head1": "X-Scanner"} X-scanner
Nagłówek RequestHeaderNames EqualsAny Nie dotyczy Nagłówka: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 i (hydra)
Nagłówek RequestHeaderValues Równa się head1 Nagłówka: {"head1": "X-Scanner"} X-scanner
Nagłówek RequestHeaderValues EqualsAny Nie dotyczy Nagłówka: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 i (hydra)
Plik cookie RequestCookieKeys Contains /etc/passwd Nagłówka: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Plik cookie RequestCookieKeys EqualsAny Nie dotyczy Nagłówka: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest i .htaccess
Plik cookie RequestCookieNames Równa się arg1 Nagłówka: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Plik cookie RequestCookieNames EqualsAny Nie dotyczy Nagłówka: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd i .cshrc
Plik cookie RequestCookieValues Równa się arg1 Nagłówka: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Plik cookie RequestCookieValues EqualsAny Nie dotyczy Nagłówka: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd i .cshrc

Uwaga

Jeśli tworzysz wykluczenie przy użyciu selektoraMatchOperator EqualsAny, wszystko, co zostało umieszczone w polu selektora, zostanie przekonwertowane na "*" przez zaplecze podczas tworzenia wykluczenia.

Zakresy wykluczeń

Wykluczenia można skonfigurować tak, aby dotyczyły określonego zestawu reguł zapory aplikacji internetowej, zestawów reguł lub globalnie we wszystkich regułach.

Napiwek

Dobrym rozwiązaniem jest uczynienie wykluczeń tak wąskimi i specyficznymi, jak to możliwe, aby uniknąć przypadkowego opuszczenia miejsca dla osób atakujących w celu wykorzystania systemu. Jeśli musisz dodać regułę wykluczania, użyj wykluczeń dla poszczególnych reguł wszędzie tam, gdzie to możliwe.

Wykluczenia poszczególnych reguł

Możesz skonfigurować wykluczenie dla określonej reguły, grupy reguł lub zestawu reguł. Należy określić regułę lub reguły, do których ma zastosowanie wykluczenie. Należy również określić atrybut żądania, który powinien zostać wykluczony z oceny zapory aplikacji internetowej. Aby wykluczyć pełną grupę reguł, podaj ruleGroupName tylko parametr , parametr jest przydatny tylko wtedy, rules gdy chcesz ograniczyć wykluczenie do określonych reguł grupy.

Wykluczenia poszczególnych reguł są dostępne w przypadku korzystania z zestawu reguł OWASP (CRS) w wersji 3.2 lub nowszej lub zestawu reguł usługi Bot Manager w wersji 1.0 lub nowszej.

Przykład

Załóżmy, że zapora aplikacji internetowej ma ignorować wartość nagłówka User-Agent żądania. Nagłówek User-Agent zawiera ciąg charakterystyczny, który umożliwia elementom równorzędnym protokołu sieciowego identyfikowanie typu aplikacji, systemu operacyjnego, dostawcy oprogramowania lub wersji oprogramowania żądanego agenta użytkownika oprogramowania. Aby uzyskać więcej informacji, zobacz User-Agent.

Może istnieć dowolna liczba przyczyn wyłączenia oceny tego nagłówka. Może istnieć ciąg, który zapora aplikacji internetowej wykrywa i zakłada, że jest złośliwy. Na przykład User-Agent nagłówek może zawierać klasyczny atak x=x polegający na wstrzyknięciu kodu SQL w ciągu. W niektórych przypadkach może to być legalny ruch. Dlatego może być konieczne wykluczenie tego nagłówka z oceny zapory aplikacji internetowej.

Można użyć następujących metod wykluczania nagłówka User-Agent z oceny przez wszystkie reguły iniekcji SQL:

Aby skonfigurować wykluczenie poszczególnych reguł przy użyciu witryny Azure Portal, wykonaj następujące kroki:

  1. Przejdź do zasad zapory aplikacji internetowej i wybierz pozycję Reguły zarządzane.

  2. Wybierz pozycję Dodaj wykluczenia.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. W obszarze Dotyczy wybierz zestaw reguł CRS, aby zastosować wykluczenie, na przykład OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Wybierz pozycję Dodaj reguły i wybierz reguły, do których chcesz zastosować wykluczenia.

  5. Skonfiguruj zmienną dopasowania, operator i selektor. Następnie wybierz opcję Zapisz.

Można skonfigurować wiele wykluczeń.

Możesz również wykluczyć User-Agent nagłówek z oceny tylko przez regułę 942270:

Wykonaj kroki opisane w poprzednim przykładzie i wybierz regułę 942270 w kroku 4.

Wykluczenia globalne

Możesz skonfigurować wykluczenie, aby było stosowane we wszystkich regułach zapory aplikacji internetowej.

Przykład

Załóżmy, że chcesz wykluczyć wartość w parametrze użytkownika przekazanym w żądaniu za pośrednictwem adresu URL. Załóżmy na przykład, że argument ciągu zapytania jest typowy dla argumentu user ciągu zapytania, który zawiera ciąg, który zapora aplikacji internetowej wyświetla jako złośliwą zawartość, więc blokuje go. Można wykluczyć wszystkie argumenty ciągu zapytania, w których nazwa zaczyna się od słowa user, aby zapora aplikacji internetowej nie oceniała wartości pola.

W poniższym przykładzie pokazano, jak można wykluczyć user argument ciągu zapytania z oceny:

Aby skonfigurować globalne wykluczenie przy użyciu witryny Azure Portal, wykonaj następujące kroki:

  1. Przejdź do zasad zapory aplikacji internetowej i wybierz pozycję Reguły zarządzane.

  2. Wybierz pozycję Dodaj wykluczenia.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. W obszarze Dotyczy wybierz pozycję Globalny

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. Skonfiguruj zmienną dopasowania, operator i selektor. Następnie wybierz opcję Zapisz.

Można skonfigurować wiele wykluczeń.

Dlatego jeśli adres URL http://www.contoso.com/?user%3c%3e=joe jest skanowany przez zaporę aplikacji internetowej, nie oceni ciągu joe, ale nadal ocenia nazwę parametru user%3c%3e.

Następne kroki