- 공격자가 웹 애플리케이션의 데이터베이스를 조작하거나, 권한이 없는 데이터를 조회 또는 수정하기 위해 악성 SQL 코드를 주입하는 공격 기법이다.
- 주로 사용자 입력을 제대로 검증하지 않는 경우 발생한다.
- 공격자가 입력 필드에 특수한 SQL 코드를 삽입하여, 애플리케이션이 의도하지 않은 SQL 쿼리를 실행하게 만드는 방법
공격 유형
- 블라인드 SQL 인젝션(Blind SQL Injection)
- 데이터베이스의 반응을 통해 직접적인 피드백을 받지 못하는 경우, 참/거짓을 기반으로 데이터를 추출하는 방식
- 에러 기반 SQL 인젝션(Error-Based SQL Injection)
- 쿼리의 결과로 발생하는 에러 메시지를 통해 데이터베이스의 구조나 정보를 알아내는 방식이다.
- 유니온 기반 SQL 인젝션(Union-Based SQL Injection)
- 여러 쿼리 결과를 하나의 결과로 합치는 UNION 명령어를 이용해, 추가적인 데이터를 추출하는 방식
공격 방어 방법
- 입력 데이터 검증
- 사용자 입력 데이터를 철저히 검증하고 필터링한다.
- 준비된 쿼리 및 매개변수화된 쿼리 사용
- 변수 바인딩을 사용하여, 입력된 데이터가 쿼리의 일부분이 되지 않도록 한다.
- ORM(Object-Relational Mapping) 사용
- SQL 쿼리를 직접 작성하지 않고 데이터베이스와 상호 작용할 수 있다.
- 최소 권한 원칙 적용
- 데이터베이스 사용자의 권한을 최소화하여, 애플리케이션이 필요한 최소한의 권한만 가지도록 설정한다.
- 에러 메시지 노출 방지
- 데이터베이스 에러 메시지를 사용자에게 직접 노출하지 않도록 하고, 에러 메시지를 로깅 시스템으로 보내어 개발자가 확인할 수 있도록 한다.
- 웹 애플리케이션 방화벽(WAF) 사용