AWS WAF가 차단한 파일을 업로드하려면 어떻게 해야 하나요?

6분 분량
0

AWS WAF가 차단한 확장자를 사용하는 파일을 업로드(POST)해야 합니다.

간략한 설명

AWS WAF가 POST 요청을 차단하는 이유를 이해하려면 다음을 참고하세요.

  • AWS WAF BODY 필터는 POST 요청의 페이로드 중 첫 8,192바이트만 조사하여 악성 스크립트가 있는지 확인합니다.
  • SQL 명령어 삽입 및 크로스 사이트 스크립팅(XSS) 규칙은 메타데이터에 임의의 문자를 포함한 파일에 민감합니다. 이와 같은 임의의 문자는 AWS WAF에 실제 존재하는 XSS나 SQL 명령어 삽입 서명과 비슷하기 때문에 웹 ACL 규칙을 호출할 수 있습니다.

AWS WAF는 특정 파일 유형에 대한 필터링을 지원하지 않습니다. 파일 또는 이미지 업로드로 인한 오탐을 없애려면 다른 방법을 사용해야 합니다.

우선, 파일 업로드를 차단할 수 있는 일반 규칙을 검토합니다. 일반 규칙이 업로드를 차단하고 있지 않다면, 차단된 파일을 허용하기 위한 기타 옵션을 고려합니다.

다음 규칙은 일반적으로 파일 업로드를 차단합니다.

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

해결 방법

SQLi_BODY 및 CrossSiteScripting_BODY 규칙으로 차단된 파일 업로드

규칙에 관한 정보는 AWS WAF 종합 로그terminatingRuleMatchDetails 필드에서 확인하세요.

참고: terminatingRuleMatchDetails 필드는 SQLi_BODYCrossSiteScripting_BODY 공격에 대해서만 채워집니다.

다음은 CrossSiteScripting_BODYmatchedData 예시입니다.

"terminatingRuleMatchDetails": [{
        "conditionType": "XSS",
        "location": "BODY",
        "matchedData": [
            "<?",
            "`"
        ]

다음은 SQLi_BODYmatchedData 예시입니다.

"terminatingRuleMatchDetails": [{
        "conditionType": "SQL_INJECTION",
        "location": "BODY",
        "matchedData": [
            ")",
            "*",
            "(",
            "0"
        ]

SQLi_BODYCrossSiteScripting_BODY로 차단된 업로드를 해결하려면 다음 옵션 중 하나를 선택합니다.

옵션 1

애플리케이션에 액세스하는 IP 주소 범위를 아는 경우, IP 일치 조건을 포함한 안전한 목록 규칙에 잘 알려진 IP 주소를 추가합니다. 지침은 Working with IP match conditions(IP 일치 조건 작업)을 참조하세요.

옵션 2

요청을 허용하려면 문자열 또는 정규식 일치 조건을 포함한 안전한 목록을 사용합니다. URI, HTTP 헤더를 기반으로 하는 안전한 목록을 만들거나, AWS WAF 파일의 BODY와 연결된 문구를 만들 수 있습니다.

안전한 목록을 만들려면 일치하는 데이터를 기반으로 하는 예외 조건을 사용하여 XSS 또는 SQLi 벡터를 차단하는 새 사용자 지정 규칙을 생성합니다. 오탐을 유발하는 특정 규칙에 대한 작업을 재정의해야 합니다.

이 사용자 지정 규칙을 만들려면 다음 단계를 완료하세요.

1.    AWS WAF 콘솔을 엽니다.

2.    탐색 창의 AWS WAF에서 웹 ACL을 선택합니다.

3.    리전에서 웹 ACL을 생성한 AWS 리전을 선택합니다.
참고: 웹 ACL이 Amazon CloudFront에 대해 설정된 경우 전역을 선택합니다.

4.    웹 ACL을 선택합니다.

5.    웹 ACL의 Rules(규칙) 탭에서 Rules(규칙)를 선택합니다.

6.    Add Rules(규칙 추가)를 선택한 다음, Add my own rules and rule groups(자체 규칙 및 규칙 그룹 추가)를 선택합니다.

7.    Name(이름)에 규칙 이름을 입력한 다음 Regular Rule(일반 규칙)을 선택합니다.

8.    If a request(요청 조건)에 matches all the statements (AND)(모든 문과 일치함(AND))을 선택합니다.

9.    다음 필드를 포함한 Statement 1(문 1)을 작성합니다.
Inspect(검사)에서 Has a label(레이블 있음)을 선택합니다.
Match scope(일치 범위)에서 Label(레이블)을 선택합니다.
Match key(일치 키)에 오탐을 생성하는 규칙에 해당하는 레이블을 입력합니다. 예를 들어, CrossSiteScripting_BODY 규칙이 오탐을 생성하는 경우, awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body를 입력합니다.

10.    다음 필드를 포함한 Statement 2(문 2)를 작성합니다.
Negate statement results(명령문 결과 무효화) 확인란을 선택합니다.
Inspect(검사)에서 Body(본문)를 선택합니다.
Match type(일치 유형)에서 Contains string(문자열 포함)을 선택합니다.
String to match(일치시킬 문자열)에 규칙에 일치시키고자 하는 값을 입력합니다.

11.    (선택 사항) Text transformation(텍스트 변환)에는 Text transformation(텍스트 변환)이나 None(없음)을 선택합니다.

12.    Action(작업)에서 Block(차단)을 선택합니다.

13.    Add rule(규칙 추가)을 선택합니다.

14.    Set rule priority(규칙 우선 순위 설정)에서 요청을 차단하고 있던 관리형 규칙 아래로 규칙을 이동합니다.

15.    Save(저장)를 선택합니다.

중요: 작업개수로 설정한 비프로덕션 환경에서 규칙을 테스트하는 것이 좋습니다. 규칙을 평가하려면 AWS WAF 샘플링된 요청이나 AWS WAF 로그와 결합한 Amazon CloudWatch 지표를 사용하세요. 규칙이 원하는 대로 작동하면 Action(작업)을 Block(차단)으로 변경합니다.

WindowsShellCommands_BODY, GenericLFI_BODY, 또는 SizeRestrictions_BODY 규칙으로 차단된 파일 업로드

파일이 업로드되는 동안 HTTP Archive(HAR) 파일을 가져와 WindowsShellCommands_BODY, GenericLFI_BODY, 또는 SizeRestrictions_BODY 규칙에 대하여 검토합니다. 지침은 브라우저에서 AWS Support 사례에 대한 HAR 파일을 생성하려면 어떻게 해야 하나요?를 참조하세요.

WindowsShellCommands_BODY, GenericLFI_BODY, 또는 SizeRestrictions_BODY에 대하여 오탐을 허용하려면 우선 해당하는 규칙을 Count 모드로 설정합니다. 지침은 Overriding a rule group's evaluation result to Count(규칙 그룹의 평가 결과를 Count로 재정의)를 참조하세요.

그리고 다음과 같이 레이블을 사용하여 예외 조건을 포함한 오탐을 유발하는 특정 관리 규칙에 대한 사용자 지정 규칙을 생성합니다.

1.    AWS WAF 콘솔을 엽니다.

2.    탐색 창의 AWS WAF에서 웹 ACL을 선택합니다.

3.    리전에서 웹 ACL을 생성한 AWS 리전을 선택합니다.
참고: 웹 ACL이 Amazon CloudFront에 대해 설정된 경우 전역을 선택합니다.

4.    웹 ACL을 선택합니다.

5.    웹 ACL의 Rules(규칙) 탭에서 Rules(규칙)를 선택합니다.

6.    Add Rules(규칙 추가)를 선택한 다음, Add my own rules and rule groups(자체 규칙 및 규칙 그룹 추가)를 선택합니다.

7.    Name(이름)에 규칙 이름을 입력한 다음 Regular Rule(일반 규칙)을 선택합니다.

8.    If a request(요청 조건)에 matches all the statements (AND)(모든 문과 일치함(AND))을 선택합니다.

9.    다음 필드를 포함한 Statement 1(문 1)을 작성합니다.
Inspect(검사)에서 Has a label(레이블 있음)을 선택합니다.
Match scope(일치 범위)에서 Label(레이블)을 선택합니다.
Match key(일치 키)에 오탐을 생성하는 규칙에 해당하는 레이블을 입력합니다. 예를 들어 WindowsShellCommands_BODY 규칙이 오탐을 생성하는 경우, awswaf:managed:aws:windows-os:WindowsShellCommands_Body를 입력합니다.

10.    다음 필드를 포함한 Statement 2(문 2)를 작성합니다.
Negate statement results(명령문 결과 무효화) 확인란을 선택합니다.
Inspect(검사)에서 URI path(URI 경로)를 선택합니다.
Match type(일치 유형)에서 Exactly matches string(문자열과 정확히 일치)을 선택합니다.
String to match(일치시킬 문자열)에 요청을 수행하는 URI 경로를 입력합니다.

11.    (선택 사항) Text transformation(텍스트 변환)에는 Text transformation(텍스트 변환)이나 None(없음)을 선택합니다.

12.    Action(작업)에서 Block(차단)을 선택합니다.

13.    Add rule(규칙 추가)을 선택합니다.

14.    Set rule priority(규칙 우선 순위 설정)에서 요청을 차단하고 있던 관리형 규칙 아래로 규칙을 이동합니다.

15.    Save(저장)를 선택합니다.

중요: 작업개수로 설정한 비프로덕션 환경에서 규칙을 테스트하는 것이 좋습니다. 규칙을 평가하려면 AWS WAF 샘플링된 요청이나 AWS WAF 로그와 결합한 CloudWatch 지표를 사용하세요. 규칙이 원하는 대로 작동하면 Action(작업)을 Block(차단)으로 변경합니다.

차단된 파일 허용을 위한 기타 옵션

참고: 규칙은 웹 ACL에 나열된 순서대로 처리됩니다. 다음 권장 사항의 경우, 필요에 따라 규칙 우선순위 순서를 다시 정해야 합니다.

각자의 사용 사례에 가장 적합한 방법을 선택하세요.

  • 문자열 일치 규칙 문(string match rule statement)(AWS WAF) 또는 문자열 일치 조건(string match condition)(AWS WAF Classic)을 사용하여 선택적 제외를 적용합니다. 파일의 BODY와 연결된 특정 문구를 안전한 목록에 추가합니다. 특정 URI 경로에서 오탐이 발생하는 경우 해당 경로를 안전한 목록에 추가합니다.
  • 파일을 업로드할 때 별도의 도메인을 사용합니다. 이것이 사용 사례에 대한 비용 효율적인 옵션인지 고려해야 합니다.
  • 포함된 코드와 데이터에 대해 파일 및 이미지를 스캔(스크럽)합니다. 이 작업은 파일을 업로드하기 전에 클라이언트 측에서 수행할 수 있습니다. 또는, 제외 규칙을 생성해야 하는 경우라면 이 작업을 파일 업로드 후에 백엔드에서 수행할 수 있습니다.
  • 파일을 압축한 후에 업로드하세요.
    주의: 악성 파일을 압축하지 않도록 반드시 확인해야 합니다.
  • 업로드를 알려진 IP 주소 범위 내에서 실행하는 경우, 그러한 IP 주소를 안전한 목록에 추가합니다.
  • base64 인코딩을 사용하여 AWS WAF가 이미지에서 XSS 또는 SQLi를 호출하지 않도록 모든 이미지 데이터를 인코딩합니다.
    주의: 악성 이미지를 인코딩하지 않게 조심하세요.
  • 청크 제거 또는 비트 임의 지정과 같은 이미지 최적화 기법을 구현하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전