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

최종 업데이트 날짜: 2022년 7월 27일

AWS WAF가 차단한 확장자를 사용하는 파일을 업로드(POST)해야 합니다. AWS WAF가 차단한 파일을 업로드하려면 어떻게 해야 하나요?

간략한 설명

AWS WAF가 POST 요청을 차단하는 이유는 다음과 같습니다.

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

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

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

파일 업로드를 차단하는 공통 규칙은 다음과 같습니다.

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

해결 방법

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

규칙에 관한 정보는 AWS WAF 종합 로그의 terminatingRuleMatchDetails 필드에서 확인하세요. AWS WAF 로깅을 활성화하려면 AWS WAF 로깅을 활성화하고 CloudWatch, Amazon S3 또는 Kinesis Data Firehorse로 로그를 전송하려면 어떻게 해야 합니까?를 참조하세요.
참고: terminatingRuleMatchDetails 필드는 SQLi_BODYCrossSiteScripting_BODY 공격에 대해서만 채워집니다.

다음은 CrossSiteScripting_BODYmatchedData 예시입니다.

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

다음은 SQLi_BODYmatchedData 예시입니다.

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

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

옵션 1

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

옵션 2

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

일치하는 데이터를 기반으로 안전한 목록을 만들려면 다음과 같이 하면 됩니다.

요청을 차단하는 특정 AWS 관리형 규칙에 범위 축소 설명을 추가합니다.

  1. AWS WAF 콘솔을 엽니다.
  2. 탐색 창의 AWS WAF에서 웹 ACL을 선택합니다.
  3. 리전에서 웹 ACL을 생성한 AWS 리전을 선택합니다.
    참고:  웹 ACL이 Amazon CloudFront에 대해 설정된 경우 전역을 선택합니다.
  4. 웹 ACL을 선택합니다.
  5. 웹 ACL 규칙 탭에서 규칙을 선택합니다.
  6. 규칙 추가를 선택한 다음, 자체 규칙 및 규칙 그룹 추가를 선택합니다.
  7. 이름규칙 이름을 입력한 다음 일반 규칙을 선택합니다.
  8. 요청 조건으로는 문과 일치함을 선택합니다.
  9. 문장 1에서:
    검사본문을 선택합니다.
    콘텐츠 유형으로는 일반 텍스트JSON을 선택합니다.
    일치 유형으로 문자열 포함을 선택합니다.
    일치시킬 문자열에, 규칙에 일치시키고자 하는 값을 입력합니다.
  10. (선택 사항) 텍스트 변환에는 텍스트 변환이나 없음을 선택합니다.
  11. 작업에서 허용을 선택합니다.
  12. 규칙 추가를 선택합니다.
  13. 규칙 우선 순위 설정의 경우 요청을 차단하고 있던 AWS 관리형 규칙 아래로 규칙을 이동합니다.
  14. 저장(Save)을 선택합니다.

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

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

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

WindowsShellCommands_BODY, GenericLFI_BODY, 또는 SizeRestrictions_BODY에 대하여 오탐을 허용하려면 우선 해당하는 규칙을 카운트 모드로 설정합니다. 이에 대한 지침은 규칙 그룹에서 규칙 동작을 카운트로 설정을 참조하세요.

그런 다음 요청을 차단하는 특정 AWS 관리형 규칙에 범위 축소 설명을 추가합니다.

  1. AWS WAF 콘솔을 엽니다.
  2. 탐색 창의 AWS WAF에서 웹 ACL을 선택합니다.
  3. 리전에서 웹 ACL을 생성한 AWS 리전을 선택합니다.
    참고:  웹 ACL이 Amazon CloudFront에 대해 설정된 경우 전역을 선택합니다.
  4. 웹 ACL을 선택합니다.
  5. 웹 ACL 규칙 탭에서 규칙을 선택합니다.
  6. 규칙 추가를 선택한 다음, 자체 규칙 및 규칙 그룹 추가를 선택합니다.
  7. 이름규칙 이름을 입력한 다음 일반 규칙을 선택합니다.
  8. 요청 조건으로는 모든 문과 일치함(AND)을 선택합니다.
  9. 문장 1에서:
    검사에서 레이블 있음을 선택합니다.
    일치 범위에는 레이블을 선택합니다.
    일치 키에 오탐을 생성하는 규칙에 해당하는 레이블을 입력합니다. 예를 들어 WindowsShellCommands_BODY 규칙이 오탐을 생성하는 경우, awswaf:managed:aws:windows-os:WindowsShellCommands_Body를 입력합니다.
  10. 문장 2에서:
    명령문 결과 무효화를 선택합니다.
    검사URI 경로를 선택합니다.
    일치 유형에는 문자열과 정확히 일치를 선택합니다.
    일치시킬 문자열에 요청을 수행하는 URI 경로를 입력합니다.
  11. (선택 사항) 텍스트 변환에는 텍스트 변환이나 없음을 선택합니다.
  12. 작업에서 차단을 선택합니다.
  13. 규칙 추가를 선택합니다.
  14. 규칙 우선 순위 설정의 경우 요청을 차단하고 있던 AWS 관리형 규칙 아래로 규칙을 이동합니다.
  15. 저장(Save)을 선택합니다.

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

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

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

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

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?