A. 서버 & 서버리스 진단

1. AWS 침투 테스트 정책

침투 테스트 허용 서비스 

  • EC2, NAT Gateway 및 Elastic Load Balancer
  • RDS
  • CloudFront
  • Aurora
  • API Gateway
  • Lambda 및 Lambda Edge 기능
  • Lightsail 리소스
  • Elastic Beanstalk 환경

 

침투 테스트 금지 서비스

  • Route 53 Hosted Zones를 통한 DNS zone walking
  • 서비스 거부(Dos), 분산 서비스 거부(DDoS)
  • 포트 플러딩
  • 프로토콜 플러딩
  • 요청 플러딩(로그인 요청, API 요청)

 

2. AWS 침투 테스트 도구 정책

침투 테스트 도구

  • AWS는 다양한 침투 테스트 도구의 존재 및 사용 가능성을 인정
  • 보안 평가를 위한 도구 또는 서비스선택에 제약은 없음
  • 알려진 취약점 버전을 찾기 위한 배너그래빙 및 쿼리 주입은 허용
    • 그러나, 서비스 거부(DoS) 공격 또는 플러딩 공격은 제한

 

의무

  • 침투 테스트를 위한 도구가 DoS 등 제한을 두는 공격을 수행하지 않는지 명확하게 확인
  • 진단자 또는 사용하는 도구가 정책 위반 시 AWS 또는 고객에게 책임을 져야함

B. SSRF

1. EC2 SSRF 개요 및 사례

1-1. SSRF(Server-Side Request Forgery) 개요

Server Side에서 이루어지는 요청을 변조해 공격자가 의도한 대로 서버로 요청을 가게 하는 것

 

1-2. SSRF 공격 사례

  • 2019년, 미국 은행 Capital One(캐피탈 원)에서 1억 600만 명의 고객 개인정보가 해킹
  • AWS EC2 SSRF 공격 사례 - 이름, 주소, 사회보장번호, 생년월일, 연간 소득 등 유출
  • EC2의 metadata에 SSRF 취약점을 이용하여 S3의 권한 획득 및 데이터 유출

1-3. 대응

  • AWS는 설계된 대로 기능을 했으며, 해킹은 클라우드 서비스 자체 취약점이 아니라  WAF 설정을 잘못했기 때문에 발생한 것으로 결론
  • 추후 AWS는 토큰을 포함하여 metadata를 요청할 수 있도록 옵션 추가

 

2. EC2 SSRF 시나리오

2-1. SSRF를 이용한 AWS EC2 메타테이터 탈취

  1. 원격 사용자 대신 서버가 명령어를 실행하도록 하여 자신의 요청에 대한 프록시로 취급하도록 함
  2. 내부망에 위치한 비공개 엔드포인트에 접근 가능
  3. AWS EC2 VM 만의 메타데이터 서비스(http://169.254.169.254)에 액세스 가능
  4. 메타데이터 URL은 VM IP주소, AWS 네트워크 내 배치, 호스트명을 HTTP API로 제공하여 클라우드 개발자에게 유용

 

3. EC2 SSRF 진단방법

3-1. SSRF를 이용한 AWS 자격증명 접근

SSRF와 EC2 metadata 엔드포인트의 액세스 권한을 결합하여 서버가 다음 URL을 요청

  • http://169.254.169.254/iam/security-credentials

  • http://169.254.169.254/latest/meta-data/iam/security-credentials/ISRM-WAF-Role

 

  • 인증 정보와 토큰이 응답에 포함
  • AWS CLI에 인증정보 등록  후 계정권한 획득
  • 선언된 IAM 정책만큼 AWS 권한 사용 가능

 

4. Lambda SSRF 개요 및 시나리오

4-1. Lambda Runtime SSRF

 

  • Lambda 함수가 동작할 때 런타임으로 가상환경에서 컨테이너 구성 후 동작
  • 환경 변수로 IAM 자격 증명과 설정 값이 적용됨

 

5. Lambda SSRF 진단방법

file:// 스키마를 통해 접근 시 파일 내용 유출 여부 확인

구분 내용
설명 Lambda에 자원 요청을 보내 메타데이터를 읽을 수 있는 취약점
판단기준 [취약] 내부 자원 접근 시도 시 파일의 내용이 출력
[양호] 내부 자원 접근 시도 시 에러가 반환
영향 취약점을 통해 획득한 인증 정보의 권한으로 접근이 불가능한 클라우드 서비스의 악용 가능

 

6. 보안대책

6-1. EC2 인스턴스 메타데이터 보안 설정

  • 비공개 VPC에서 동작 중인 EC2 인스턴스에 대해 공개 IP를 설정하지 않도록 함
  • 인스턴스 메타데이터에 접근하는 옵션 비활성화
    •  "aws ec2 modify-instance-metadata-options -instance-id [id] -http-endpoint disabled"
  • 인스턴스 메타데이터 서비스 액세스 제한 설정
    • Iptabels를 이용한 제한(169.254.169.254 ip에 대한 접근 제어 설정)
    • PF 또는 IPFW를 사용하여 액세스 제한 Black List 검증

 

6-2. 사용자 입력 값 검증

  • Whitelist 방식의 Filtering
    • 입력한 데이터에 대해 허용할 List(URL, Scheme)에 속하는 경우에만 처리
    • 지정된 목록에 속하지 않는 경우 에러페이지 응답    
  • Blacklist 방식의 Filtering
    • 지정된 목록에 속하는 입력값 요청 시 에러페이지 응답
    • ex) Private IP, Lookback 주소, 불필요한 schema(sftp://, file://), 불필요 특수문자(%0a

 

C. SQL Injection

1. 개요

1-1. SQL Injection 이란?

  • 임의의 SQL 구문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 유도
  • OWASP TOP10 중 첫 번째 공격, 위험도가 높음

1-2. SQL Injection 공격 목적 및 영향

  • 인증 우회
  • DB 데이터 조작 및 유출
  • 시스템 명령 실행

1-3. SQL Injecion 종류

  • Error Based SQL Injection
  • Blind SQL Injection
  • Union SQL Injection

 

2. AWS 데이터베이스 서비스

2-1. RDS(Relational Database Service)

 

  • 관계형 데이터베이스를 설정, 운영 확장
  • 6개의 데이터베이스 엔진 중에서 선택 가능
  • 기존 데이터베이스를 RDS로 마이그레이션, 복제 가능

 

2-2. NoSQL(DynamoDB)

 

  • 특정 데이터 모델에 대해 목적에 맞추어 구축되는 데이터베이스
  • AWS는 키(key), 값(value) 형태로 구성된 DynamoDB 제공

 

3. RDS SQL Injection 개요

RDS SQL Injection

  • 상용 SQL 엔진 - 기존의 SQL 취약성을 그대로 가져옴
  • 인스턴스, 서버리스 선택 가능

공격 예시) 쿼리 조건(where) 암호 검사 무력화

정상 로그인 ID : myuser1   password : mypassword1

 

SELECT * FROM users WHERE username = 'myuser1' AND password = 'mypassword1'

SQL Injection ID : myuser1'--   password : 1234

 

SELECT * FROM users WHERE username = 'myuser1'-- ' AND password = '1234

 

4. RDS SQL Injecton 실습

4-1. Blind SQL Injection

  • 쿼리 구문을 토해 참과 거짓 구분이 가능함을 확인
  • substring()등 문자열 함수 이용 데이터 추출
  • 실습사이트는 현재 보안 패치 적용되어 있음

 

4-2. RDS SQL Injection

  • 기존 SQL 엔진을 사용/호환성 지원
  • 취약성 또한 동일하게 발생함을 확인
  • 웹 취약점 진단 방법으로 진단 가능

 

4-3. 실습과 실제 진단 시 유의사항

  • 조건절 검사 시 OR 구문 사용 유의
  • 주석 구문 사용 유의
  • 시스템 가용성 저해 우려
  • 요청 당 요금이 청구되는 람다함수 특성 이해 필요

 

5. 보안 대책

5-1. RDS 인스턴스 보안 


데이터 암호화 설정

 

5-2. 애플리케이션 레벨 예방

  • Prepared Statement 사용
  • 입력 값에 대한 검증
  • Error Message 노출 금지
  • AWS WAF