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łówek* | Bez uwzględniania wielkości liter | Bez uwzględniania wielkości liter |
Ciasteczko* | 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ługiwany | Nieobsługiwany |
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 |
Uri: http://localhost:8080/?/etc/passwd=test |
/etc/passwd |
Ciąg zapytania | RequestArgKeys | EqualsAny | Nie dotyczy | Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 |
/etc/passwd i .htaccess |
Ciąg zapytania | RequestArgNames | Równa się | text |
Uri: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Ciąg zapytania | RequestArgNames | EqualsAny | Nie dotyczy | Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc |
/etc/passwd i .cshrc |
Ciąg zapytania | RequestArgValues | Równa się | text |
Uri: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Ciąg zapytania | RequestArgValues | EqualsAny | Nie dotyczy | 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łówek: {"X-Scanner": "test"} |
X-scanner |
Nagłówek | RequestHeaderKeys | EqualsAny | Nie dotyczy | Nagłówek: {"X-Scanner": "test", "x-ratproxy-loop": "value"} |
X-Scanner i x-ratproxy-loop |
Nagłówek | RequestHeaderNames | Równa się | head1 |
Nagłówek: {"head1": "X-Scanner"} |
X-scanner |
Nagłówek | RequestHeaderNames | EqualsAny | Nie dotyczy | Nagłówek: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 i (hydra) |
Nagłówek | RequestHeaderValues | Równa się | head1 |
Nagłówek: {"head1": "X-Scanner"} |
X-scanner |
Nagłówek | RequestHeaderValues | EqualsAny | Nie dotyczy | Nagłówek: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 i (hydra) |
Plik cookie | RequestCookieKeys | Contains | /etc/passwd |
Nagłówek: {"Cookie": "/etc/passwdtest=hello1"} |
/etc/passwdtest |
Plik cookie | RequestCookieKeys | EqualsAny | Nie dotyczy | Nagłówek: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} |
/etc/passwdtest i .htaccess |
Plik cookie | RequestCookieNames | Równa się | arg1 |
Nagłówek: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Plik cookie | RequestCookieNames | EqualsAny | Nie dotyczy | Nagłówek: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd i .cshrc |
Plik cookie | RequestCookieValues | Równa się | arg1 |
Nagłówek: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Plik cookie | RequestCookieValues | EqualsAny | Nie dotyczy | Nagłówek: {"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:
Przejdź do zasad zapory aplikacji internetowej i wybierz pozycję Reguły zarządzane.
Wybierz pozycję Dodaj wykluczenia.
W obszarze Dotyczy wybierz zestaw reguł CRS, aby zastosować wykluczenie, na przykład OWASP_3.2.
Wybierz pozycję Dodaj reguły i wybierz reguły, do których chcesz zastosować wykluczenia.
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:
Przejdź do zasad zapory aplikacji internetowej i wybierz pozycję Reguły zarządzane.
Wybierz pozycję Dodaj wykluczenia.
W obszarze Dotyczy wybierz pozycję Globalny
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
- Po skonfigurowaniu ustawień zapory aplikacji internetowej możesz dowiedzieć się, jak wyświetlać dzienniki zapory aplikacji internetowej. Aby uzyskać więcej informacji, zobacz Diagnostyka usługi Application Gateway.
- Dowiedz się więcej o zabezpieczeniach sieci platformy Azure