본문 바로가기

DevOps/AWS

[AHSS 3주차] AWS WAF 사용법

cloudNet@ 팀의 가시다 님이 진행하는 AWS 보안 스터디 3주차 정리입니다.
AWS WAF Configuration A to Z workshop을 참고 했습니다.

 

전 포스팅에서 웹 취약점에 대해 10가지 정도 자주 사용되는 해킹 공격 유형에 대해서 알아 보았습니다.

사실 WAF에 대한 기능을 보여드리기 위해 빌드업이였다고 생각하시면 될것 같습니다.

 

웹 취약점 10가지에 대해서 전 게시물을 반드시 확인하고 공부하고 이번 게시물을 읽어주시기 바랍니다.

 

 

[AHSS 3주차] 웹 취약점 및 보안

cloudNet@ 팀의 가시다 님이 진행하는 AWS 보안 스터디 3주차 정리입니다. AWS WAF Configuration A to Z workshop을 참고 했습니다. 먼저 AWS WAF에 대한 학습 및 실습을 진행하기 전에, 웹 취약점이란 무엇이며?

themapisto.tistory.com

 


1.  AWS WAF 소개 

 

1.1 WAF 란?

  • WAF란 Web Application Firewall의 약자로 웹 애플리케이션 보안에 특화된 전용 방화벽입니다.
  • SQL Injection 공격, Cross-Site Scripting(XSS) 공격 등과 같은 공격 패턴을 탐지하고 차단하는 용도
  • 웹 접근 트래픽에 대한 페이로드 분석 및 패턴 기반의 필터링을 통해 공격을 탐지하고 차단할 수 있습니다. 

 

1.2 WAF 특징?

  • AWS WAF를 CloudFront, ALB, API Gateway, AppSync에 배포할 수 있습니다
  • CloudFront는 Global 서비스, 나머지는 Regional 서비스

 

 

1.3 AWS WAF 주요 기능 ? 

  • 웹 트래픽 필터링 : 웹 취약점 공격을 차단하는 규칙을 손쉽게 생성하여 웹 트래픽을 필터링하도록 규칙을 생성할 수 있습니다.
  • 자동화 및 유지 관리 : AWS CloudFormation 템플릿을 사용하여 자동 배포 및 프로비저닝 할 수 있습니다.
  • 실시간 가시성 보장 : 뒤에 실습할때 보여드리겠지만 AWS WAF는 CloudWatch와 완전히 통합되어 실시간 지표를 제공합니다.     
  • AWS Firewall Manager와 통합 : AWS Firewall Manager를 사용하여 AWS WAF 배포를 중앙에서 구성 및 관리할 수 있습니다. 

 


2.  AWS WAF 구성 실습 

 

 

[ AWS WAF 콘솔 ] -> Seoul -> Create web ACL 

 [ AWS WAF 콘솔 ] - Step 1 , 4 입력값 넣고  Next 계속 눌러서 진행

 

  • Name : DemoACL
  • Resource type : Regional resources
  • Region : Aisa Pacific(Seoul)
  • → 아래 Add AWS resources 클릭 ⇒ ALB 선택 후 하단에 생성해둔 ALB 체크 후 Add 클릭

[ AWS WAF 콘솔 ] - 사용자 정의 웹 페이지 출력 설정

 

  • 생성된 Web ALC 클릭 → Custom Response Bodies 선택 ⇒ Create Custom Response Body :
  • 이름 custom_denied , Type(HTML)
<!DOCTYPE html>
<html>
  <head>
    <title>Access Denied</title>
    <style>
      .container {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        height: 100vh;
      }
      h1 {
        font-size: 40px;
        margin-bottom: 20px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h1>Access Denied</h1>
      <img src="https://s3.ap-northeast-2.amazonaws.com/do-not-delete-demo-website.ap-northeast-2/waf.png" alt="Access Denied Image">
      <p>[CloudNet@ Study] Your access is blocked due to abnormal activity. Please contact support for assistance.</p>
    </div>
  </body>
</html>

 [ AWS WAF 콘솔 ] -  [ Web ACLs ] - [DemoACL] - Enable logging

  • CloudWatch Logs 신규 생성((aws-waf-logs- 시작되는 이름) : aws-waf-logs-ahss , 보존(1일)
  • Web ACL → Enable logging 설정


 [ AWS CloudWatch 콘솔 ] -  Log insights 

# 최근 기준 20개 로그 확인
fields @timestamp, @message
| sort @timestamp desc
| limit 20

# TOP 100 address 
fields httpRequest.clientIp
| stats count(*) as requestCount by httpRequest.clientIp
| sort requestCount desc
| limit 100


# TOP 100 country 
fields httpRequest.country
| stats count(*) as requestCount by httpRequest.country
| sort requestCount desc
| limit 100

TOP 100 address
TOP 100 country

 

  [ AWS CloudFormation ] - 아래 링크 클릭 

https://console.aws.amazon.com/cloudformation/home#/stacks/create/review?stackName=WAF-Dashboard&templateURL=https://s3.amazonaws.com/ytkoka-resources/CloudWatch-Dashboard-for-AWS-WAF/cw-waf-dashboard-regional.yaml
  • CloudWatch Log Name : aws-waf-logs-ahss
  • WAF Region: ap-northeast-2
  • WebACLName: DemoACL

 

 

 

  [ AWS CloudWatch ] - 대시보드 - WAF Dashboard 클릭 

 

 


 SQL injection 방어 규칙 생성

 

SQL Injection 공격 방어 규칙 생성

1.1 WebACL 에 새로운 규칙을 추가하기 위해 WebACL 메뉴에 접속하도록 합니다. 사전 준비 단계에서 미리 생성해 둔 DemoACL 을 선택한 후 아래와 같이 Rules 탭을 선택한 후 Add my own rules and rule groups 를 클릭합니다.

1.2 규칙 생성 화면의 옵션 중 첫번째 옵션인 Rule Type 에서는 Rule Builder 가 선택된 상태를 유지하고, 규칙 이름에는 SQL_Injection 을 입력한 후 Type  Regular Rule 을 선택합니다.

1.3 If a request 의 Pull Down 메뉴에서는 matches the statement 를 선택하고, Inspect  Query String, Match Type  Contains SQL Injection Attacks 를 선택합니다. Text Transformation 에 대해서는 Compress White Space  URL decode Unicode 를 추가합니다. 마지막으로 Sensitivity Level  High 를 선택합니다.

 

 

1.4 규칙에 매칭되는 요청을 처리하는 액션은 Block 을 선택합니다. 하단의 Custom response 옵션의 체크 박스를 체크합니다. Response Code 에는 200 을 입력하고 2.2 Web ACL 생성단계에서 생성한 custom_denied 페이지를 선택합니다.

 

모든 설정이 완료되었다면 Add Rule 버튼을 클릭합니다.

1.5 Priority 설정하는 화면에서 Save 버튼을 클릭합니다.

 

1.6 아래 그림과 같이 SQL_Injection 규칙이 정상적으로 생성되었는지 확인합니다.

 

2. SQL Injection 공격 방어 확인

2.1 공격을 위한 실습 중 앞의 단계에서 수행한 것과 마찬가지로 DVWA 의 SQL Injection 메뉴의 User ID 입력칸에 아래와 같은 SQL Injection 코드 를 입력한 후 Submit 버튼을 클릭합니다.

 

2.2 아래 그림과 같이 사용자의 요청이 사용자 정의 차단 페이지 와 함께 차단되는 것을 확인합니다.