3. SQL Injection
01. 개요
SQL Injection
- 임의의 SQL 구문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 유도
- OWASP TOP10 중 첫 번째 공격, 위험도가 높음
SQL Injection 공격 목적 및 영향
- 인증 우회
- DB 데이터 조작 및 유출
- 시스템 명령 실행
SQL Injecion 종류
- Error Based SQL Injection
- Blind SQL Injection
- Union SQL Injection
02. AWS 데이터베이스 서비스
AWS에서 제공하는 데이터베이스 서비스 종류
RDS(Relational Database Service)
- 관계형 데이터베이스를 설정, 운영 확장
- 6개의 데이터베이스 엔진 중에서 선택 가능
- 기존 데이터베이스를 RDS로 마이그레이션, 복제 가능
NoSQL(DynamoDB)
- 특정 데이터 모델에 대해 목적에 맞추어 구축되는 데이터베이스
- AWS는 키(key), 값(value) 형태로 구성된 DynamoDB 제공
03. 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'
04. RDS SQL Injecton 실습
Blind SQL Injection
- 쿼리 구문을 토해 참과 거짓 구분이 가능함을 확인
- substring()등 문자열 함수 이용 데이터 추출
- 실습사이트는 현재 보안 패치 적용되어 있음
RDS SQL Injection
- 기존 SQL 엔진을 사용/호환성 지원
- 취약성 또한 동일하게 발생함을 확인
- 웹 취약점 진단 방법으로 진단 가능
실습과 실제 진단 시 유의사항
- 조건절 검사 시 OR 구문 사용 유의
- 주석 구문 사용 유의
- 시스템 가용성 저해 우려
- 요청 당 요금이 청구되는 람다함수 특성 이해 필요
05. 보안 대책
SQL Injection 보안 대책
1) RDS 인스턴스 보안
-> 데이터 암호화 설정
2) 애플리케이션 레벨 예방
- Prepared Statement 사용
- 입력 값에 대한 검증
- Error Message 노출 금지
- AWS WAF
[AWS] Network - 퍼블릭 서브넷 VPC 생성