Azure 웹 애플리케이션 방화벽이란?
여기서는 Azure Web Application Firewall의 기본 사항을 알아봅니다. 이 개요는 Azure Web Application Firewall이 Contoso의 전반적인 네트워크 보안 전략에 추가할 만한 유용한 도구인지 여부를 평가하는 데 도움이 됩니다.
Azure Web Application Firewall 개요
악의적인 사용자가 여러분의 웹앱에는 문제를 일으키지 않을 것이라고 생각할 수도 있습니다. 그러나 테스트에 따르면 봇 또는 악의적인 행위자가 배포하고 몇 분 내에 새로운 웹앱의 약점을 알아냅니다. 웹에 앱을 배치하는 경우 위협 행위자는 앱의 취약성을 거의 즉시 테스트한다고 가정하세요. 앱의 수명 동안 이러한 조사를 계속할 것으로 간주할 수도 있습니다.
웹앱의 악의적인 테스트 대부분은 하나 이상의 일반적인 취약성이 있는지 확인합니다. 취약성이 확인되면 위협 행위자는 이러한 취약성을 이용하여 다음과 같은 공격을 실행할 수 있습니다.
- SQL 인젝션
- 사이트 간 스크립팅
- 로컬 및 원격 파일 포함
- HTTP/HTTPS floods
- 악성 봇 공격
웹앱 개발 주기의 일반적인 작업에는 가장 일반적인 보안 허점을 해결하기 위한 코드를 작성하는 과정이 포함됩니다. 보안 코드를 작성하려면 시간, 전문 지식, 테스트 과정이 필요합니다.
Azure Web Application Firewall은 Azure에서 호스트되는 웹앱의 중앙 집중식 보호를 제공하는 Azure 서비스입니다. Azure Web Application Firewall은 SQL 삽입 및 사이트 간 스크립팅 같은 일반적인 위협으로부터 웹앱을 보호합니다.
Azure Web Application Firewall은 몇 분 안에 배포할 수 있습니다. 웹앱은 한 줄의 보안 코드도 작성할 필요없이 알려진 위협으로부터 강력한 보호 기능을 제공합니다.
Azure Web Application Firewall의 주요 기능
Azure Web Application Firewall을 평가하는 데 도움이 되는 몇 가지 중요 기능은 다음과 같습니다.
관리 규칙: Azure Web Application Firewall에서 일반적인 악용을 감지하고 방지하는 데 사용하는 규칙은 Microsoft의 보안 팀에서 생성, 유지 관리 및 업데이트합니다. 규칙이 변경되거나 규칙 모음(다음 설명 참조)이 수정되면 Microsoft는 Azure Web Application Firewall을 자동으로 원활하게 업데이트합니다.
참고
Azure Web Application Firewall에서 제공하는 관리형 규칙은 수정하거나 삭제할 수 없습니다. 그러나 특정 규칙이 사용자 환경에 문제를 유발하는 경우(예: 웹앱에 대한 합법적인 트래픽 차단) 예외를 만들거나 해당 규칙 또는 규칙 세트를 사용하지 않도록 설정할 수 있습니다. 기본 동작을 덮어쓰는 사용자 지정 규칙을 만들 수도 있습니다.
봇 규칙: 봇 규칙은 좋은 봇을 식별하고 나쁜 봇으로부터 보호합니다. Microsoft 위협 인텔리전스를 기반으로 나쁜 봇이 검색됩니다.
사용자 지정 규칙: Azure Web Application Firewall에서 제공하는 관리형 규칙이 웹 애플리케이션에 대한 특정 위협을 포함하지 않는 경우 사용자 지정 규칙을 만들 수 있습니다.
모드: Azure Web Application Firewall은 두 가지 모드 중 하나로 작동할 수 있습니다. 하나는 규칙을 위반하는 요청만 기록하는 검색 모드이고, 다른 하나는 규칙을 위반하는 요청을 기록하고 차단하는 방지 모드입니다.
제외 목록: 요청을 확인할 때 특정 특성을 무시하도록 Azure Web Application Firewall을 구성할 수 있습니다.
정책: 관리형 규칙, 사용자 지정 규칙, 제외 및 기타 Azure Web Application Firewall 설정 모음을 Azure Web Application Firewall 정책이라는 단일 요소로 결합할 수 있습니다. 그런 다음, 쉬운 관리 및 유지 관리를 위해 이 정책을 여러 웹앱에 적용할 수 있습니다.
요청 크기 제한: 너무 작거나 너무 큰 요청에 플래그를 지정하도록 Azure Web Application Firewall을 구성할 수 있습니다.
알림: Azure Web Application Firewall은 Azure Monitor와 통합됩니다. 이러한 통합을 통해 WAF가 위협을 감지하면 근 실시간으로 경고를 제공할 수 있습니다.
Azure Web Application Firewall에 의해 방지되는 일반적인 공격
다음 표에서는 Azure Web Application Firewall이 보호하는 가장 일반적인 유형의 악의적인 위협에 대해 설명합니다.
위협 | 설명 |
---|---|
사이트 간 스크립팅 | 위협 행위자는 웹 애플리케이션을 사용하여 다른 사용자의 웹 브라우저에 악성 코드를 보냅니다. 브라우저는 해당 코드를 실행하여 스크립트에 사용자의 세션 데이터, 쿠키 및 기타 중요한 정보에 대한 액세스를 제공합니다. |
로컬 파일 포함 | 공격자는 PHP 스크립트에서 가장 자주 발생하는 서버의 include 문 처리 취약성을 악용합니다. 공격자는 특수하게 구성된 텍스트를 스크립트의 include 문에 전달하여 로컬 파일을 서버에 포함할 수 있습니다. 그런 후에 공격자는 중요한 정보에 액세스하고 서버 명령을 실행할 수 있습니다. |
PHP 삽입 | 공격자는 서버를 속이도록 특수하게 구성된 텍스트를 실행 중인 PHP 명령에 삽입합니다. 이러한 명령을 통해 공격자는 로컬 또는 원격 PHP 코드를 실행할 수 있습니다. 그런 후에 공격자는 중요한 데이터에 액세스하고 서버에서 명령을 실행할 수 있습니다. |
프로토콜 공격 | 공격자는 특수하게 구성된 텍스트를 HTTP/HTTPS 요청 헤더에 삽입합니다. 공격자는 헤더에 삽입된 특정 텍스트에 따라 중요한 데이터 또는 실행 중인 코드를 표시하도록 서버를 유도할 수 있습니다. |
원격 명령 실행 | 공격자는 서버가 운영 체제와 연결된 명령을 실행하도록 유도합니다. 예를 들어, UNIX 시스템에서 공격자는 서버가 ls 를 실행하여 디렉터리 목록을 표시하도록 할 수 있습니다. |
원격 파일 포함 | 공격자가 원격 파일(공격자가 제어하는 원격 서버의 파일)을 스크립트의 include 문으로 전달하는 특수하게 구성된 텍스트를 서버로 보내는 경우를 제외하고, 로컬 파일 포함과 동일합니다. |
세션 고정 | 공격자는 공격자가 유효한 세션 ID를 얻을 수 있도록 하는 웹앱 취약성을 악용합니다. 공격자는 해당 ID를 사용하여 새 세션을 인증하도록 사용자를 유도합니다. 그런 다음, 공격자는 이 사용자가 유효성을 검사한 세션을 하이재킹합니다. |
SQL 인젝션 | 웹 폼 필드에서 공격자는 서버를 속이도록 특수하게 구성된 텍스트를 실행 중인 SQL 명령에 삽입(또는 "주입")합니다. 이러한 명령을 사용하여 공격자는 중요한 데이터에 액세스하거나, 데이터를 삽입, 업데이트 또는 삭제하거나, SQL 작업을 실행할 수 있습니다. |
이전 표에 나열된 모든 악용은 서버가 수신하는 입력을 신뢰하는 경우에만 가능합니다. 이러한 악용을 확인하고 삭제하는 코드를 작성하는 일은 어렵고 시간이 많이 소요될 수 있습니다. 앞에 나온 표에는 웹앱에서 발생할 수 있는 악용 중 극히 일부만 나와 있습니다. Azure Web Application Firewall은 이러한 공격과 더 많은 공격을 방지하도록 고안되었습니다.
입력 삭제
최신 웹앱에서 직면하는 위협은 다양하고 정교합니다. 그러나 대부분의 경우에는 웹앱이 수신하는 입력을 암시적으로 신뢰하기 때문에 악용될 수 있습니다.
예를 들어, 인증된 웹앱 사용자가 사용자 계정에 로그인할 수 있도록 하는 웹 양식이 있다고 가정합니다. 이 양식은 다음과 같은 3가지 요소로 구성됩니다.
- 사용자 이름 입력란
- 암호 입력란
- 로그인 단추
권한 있는 사용자가 양식을 채우고 로그인을 선택하면 웹앱 스크립트는 사용자 이름 및 암호를 변수에 저장합니다. 이러한 변수의 이름이 각각 userName
및 userPassword
라고 가정합니다. 그런 다음, 스크립트는 다음 문을 실행합니다.
sql = "SELECT * FROM users WHERE username='" + userName + "' AND password='" + userPassword + "'"
예를 들어, 사용자 이름이 support
이고 암호가 1234ABCD
이면 sql
변수에는 다음 값이 지정됩니다.
SELECT * FROM users WHERE username='support' AND password='1234ABCD'
웹앱에서는 이 SQL 문을 실행합니다. 쿼리에서 레코드가 반환되면 웹앱은 사용자를 로그인되게 합니다.
이제 공격자가 사용자 이름 필드에 admin'--
을 입력하고 암호 필드를 비워 둔다고 가정합니다. 이 경우 결과 SQL 문은 다음과 같습니다.
SELECT * FROM users WHERE username='admin'--' AND password=''
많은 SQL 시스템에서 이중 대시(--
)는 주석의 시작을 표시합니다. --
이후의 모든 항목은 무시되므로 이전 문은 다음 코드와 동일합니다.
SELECT * FROM users WHERE username='admin'
admin
이라는 사용자가 있다고 가정하면 이 명령은 공격자를 관리자 사용자 권한으로 로그인하므로 심각한 위반을 야기할 수 있습니다.
이전 예제는 SQL 삽입이라는 악용의 경우입니다. 공격자는 모든 입력을 신뢰하는 웹앱의 SQL 삽입 및 기타 악용을 활용할 수 있습니다.
Azure Web Application Firewall은 웹앱과 해당 사용자 입력 간에 비신뢰 장벽을 만듭니다. Azure Web Application Firewall은 모든 입력을 잠재적으로 악의적이라고 가정하므로 해당 입력을 ‘삭제’합니다.
입력 삭제는 상황에 따라 다른 작업을 의미합니다. 예를 들어, 입력 삭제는 SQL 주석 표시와 같은 명확히 위험한 텍스트 요소를 제거하는 것을 의미할 수 있습니다. 그러나 삭제가 발생하며 결과적으로 웹앱 또는 백 엔드 데이터에 위험을 가져오지 않는 입력만 남습니다.