Study/클라우드

[AWS WAF] SQL Injection

minii_ 2024. 10. 29. 20:50
반응형

SQL Injection이란

  • 일반적으로 공격자가 웹서버의 중요 정보를 탈취하기 위하여 가장 자주 사용하는 공격 방법 중의 하나
  • 사용자의 입력을 데이터 베이스의 쿼리에 반영되도록 구성된 시스템의 취약점을 이용한 공격
    • 주로 입력값이 제대로 필터링되지 않은 상태에서 SQL 쿼리에 그대로 포함될 때 발생됨

 

 

SQL Injection 공격

공격 대상 페이지의 User ID에 먼저 알파벳을 넣었을 때 아무 반응이 없었고

 

1, 2, 3, 4..... 숫자를 ID로 입력했을 때 위와 같이 ID와 First name, Surname이 확인이 가능하다.

따라서 정상적인 경우 User ID와 일치하는 경우 해당 정보가 출력되는 것을 알게 되었다.

 

 

User ID 기반 사용자를 조회할 수 있었던 페이지를 대상으로 SQL Injection 공격 수행

' OR 1=1 #

User ID 입력칸에 숫자 대신 아래와 같은 SQL Injection 코드를 입력한다.

정상적으로 공격에 성공하면 모든 사용자에 대한 정보가 공격자가 입력한 코드에 의해 출력되는 것을 확인할 수 있다.

 

동작원리

SELECT * FROM Users WHERE UserID = '1';

User ID에 1을 입력하면 위와 같이 쿼리를 작성할 수 있다.

SELECT * FROM Users WHERE UserID = '' OR 1=1 #';

하지만 공격 코드는 원래 존재하는 '~' 안에 넣는다.

작은 따옴표로 먼저 입력 부분을 닫고, 1=1 조건과 or을 사용하여 항상 참인 쿼리로 만들어 주었다.

그리고 필요없어진 마지막 작은따옴표는 #을 사용하여 주석처리를 한다.

 

 

 

AWS WAF 사용자 정의 규칙

사용자 정의 규칙 생성

AWS WAF에서 규칙을 추가하여 특정 유형의 웹 트래픽을 검사하고 조치를 취할 수 있음

 

규칙 유형

  • IP set: 특정 IP 주소 목록을 식별하는 데 사용
  • Rule group: 여러 규칙을 논리적 집합으로 결합
    • 여러 규칙을 그룹화하여 한 번에 적용하고 관리
  • Rule builder: 사용자 정의 규칙을 생성하여 쿼리 문자열, 헤더, 국가, 속도 제한 등에 대한 패턴을 검사

 

Type

  • Regular rule: 일반 규칙으로 설정할 때 사용
    • 특정 조건에 따라 트래픽을 허용하거나 차단하는 데 사용
  • Rate-based rule: 요청 비율 기반 규칙으로, 일정 시간 동안 특정 조건을 충족하는 요청의 비율이 설정한 임계값을 초과할 때 작동
    • 일반적으로 과도한 요청을 통한 DDoS 공격이나 브루트 포스 로그인 시도 등을 방지하는 데 사용

 

조건 설정 !

Statement 설정

  • Inspect: 여기서는 "Query string"을 선택하여 웹 요청의 쿼리 문자열 부분을 검사
    • SQL 인젝션 공격은 종종 쿼리 문자열을 통해 수행되기 때문에 이 영역을 중점적으로 검토
  • Match type: "Contains SQL injection attacks"를 선택하여 쿼리 문자열 내에 SQL 인젝션 공격이 포함되어 있는지 검사

 

Text Transformation 설정

  • "Compress whitespace"를 사용하여 요청의 모든 공백을 압축하고, 공격자가 공백을 이용한 공격을 방지함
    • SQL 인젝션 공격에서 공백을 사용하여 코드의 일부를 숨기거나 SQL 구문을 조작할 수 있기 때문에 공백을 압축함으로써, 이러한 공격 벡터를 줄이고 WAF가 공격 패턴을 더 명확하게 식별할 수 있도록 함
  • "URL decode Unicode"는 URL 인코딩된 유니코드 문자를 정상적인 문자로 디코드하여 숨겨진 공격 코드를 드러냄
    • 인코딩된 문자를 원래의 유니코드 문자로 변환하여, WAF가 실제 실행될 수 있는 코드를 명확하게 보고 평가할 수 있게 함
    • SQL 인젝션, XSS 및 기타 웹 기반 공격에서 사용되는 인코딩된 명령어나 스크립트를 드러내는 데 중요

Sensitivity Level 설정

  • 공격 감지의 민감도를 설정

 

 

Action 설정

  • Block: 일치하는 요청을 차단
    • SQL 인젝션 공격이 감지되었을 때 요청을 거부하고 웹 애플리케이션을 보호함

Custom response 설정

  • 차단된 요청에 대한 사용자 지정 응답을 설정
    • HTML 형식의 "Access Denied" 메시지를 설정하여 차단된 사용자에게 표시하도록 함

 

룰이 성공적으로 저장되었는지 확인

 

다시 공격 진행

AWS WAF가 이 입력을 SQL 인젝션 공격으로 감지하고 설정에 따라 요청을 차단함

 

=> 주로 쿼리 문자열을 검사하여 알려진 SQL 인젝션 패턴을 식별하고 차단

 

관리형 규칙

관리형 규칙 생성하기 전 방금 만들어 둔 사용자 정의 규칙 count로 수정

 

AWS 관리형 규칙 생성

 

 

AWS WAF에서 제공하는 관리형 규칙 그룹(Managed Rule Groups)

  • 관리형 규칙 그룹을 사용하면 복잡한 보안 요구사항을 손쉽게 충족시킬 수 있으며, 사용자가 직접 규칙을 세부적으로 설정할 필요 없이 고품질의 보안 솔루션을 적용할 수 있음

AWS 관리형 규칙 중 무료 규칙에 속하는 SQL database 규칙 그룹을 선택

https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-use-case.html#aws-managed-rule-groups-use-case-sql-db

 

Use-case specific rule groups - AWS WAF, AWS Firewall Manager, and AWS Shield Advanced

This rule only inspects the request body up to the body size limit for the web ACL and resource type. For Application Load Balancer and AWS AppSync, the limit is fixed at 8 KB. For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, t

docs.aws.amazon.com

SQL 데이터베이스 규칙 그룹에는 SQL 주입 공격과 같은 SQL 데이터베이스 악용과 관련된 요청 패턴을 차단하는 규칙이 포함되어 있으며, 허가되지 않은 쿼리의 원격 주입을 방지하는 데 도움이 될 수 있다.

  • 입력 데이터 중에 데이터베이스 쿼리를 조작할 수 있는 특정 패턴이나 문자열이 포함되어 있을 경우 이를 감지하고 해당 요청을 차단
  • AWS WAF의 표준 서비스 요금에 포함되어 추가 비용 없이 사용할 수 있는 "Free rule groups"에 속함

 

규칙 생성 완료

 

다시 sql injection 진행

 

AWS 관리형 규칙 에 의해 차단되어 403 Forbidden 페이지가 출력되는 것을 확인

 

참고자료
https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/03-attack/01-sql-injection
https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/01-custom/01-m-sql-injection#1.-sql-injection
https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/04-mitigation-basic/02-managed/01-manged-sqlinjection
반응형