블라인드 SQL 인젝션 (Blind SQL Injection)

정보보안학
한 줄 정의: 데이터베이스 오류 메시지나 결과값이 화면에 직접 표시되지 않는 상황에서, 참/거짓 응답이나 응답 시간 같은 간접적인 신호를 이용해 데이터를 알아내는 SQL 인젝션 공격 기법입니다.

쉽게 풀면

블라인드 SQL 인젝션은 마치 눈을 가린 채 스무고개를 하듯, 직접적인 답은 볼 수 없지만 "예/아니오" 같은 간접적인 반응만으로 정답을 하나씩 유추해 나가는 공격입니다. 일반 SQL 인젝션은 오류 메시지에 데이터베이스 정보가 그대로 노출되지만, 블라인드 방식에서는 화면에 아무 정보도 나타나지 않기 때문에 공격자는 질문을 조금씩 바꿔가며 참일 때와 거짓일 때의 반응 차이를 관찰해 정보를 조금씩 캐냅니다. 시간이 오래 걸리지만 자동화 도구를 쓰면 실질적으로 데이터를 통째로 빼낼 수 있습니다.

왜 중요한가

블라인드 SQL 인젝션은 겉으로 드러나는 단서가 거의 없어 탐지와 방어가 까다롭기 때문에 웹 애플리케이션 보안 연구에서 취약점 진단 자동화와 방어 기법의 핵심 사례로 다뤄집니다. 오류 메시지를 숨기는 것만으로는 근본적인 방어가 되지 않는다는 점을 보여주는 대표적인 공격이기도 합니다.

논문에서는 이렇게 쓰입니다

"진단 도구는 참/거짓 조건에 따른 응답 내용의 차이를 이용하여 블라인드 SQL 인젝션 취약점을 자동으로 탐지하였다."

불리언 기반 블라인드 SQL 인젝션 탐지 방식을 설명하는 문장입니다.

"공격자는 쿼리 실행 시간의 지연 여부를 관찰하는 시간 기반 블라인드 SQL 인젝션을 통해 데이터베이스 구조를 추론할 수 있었다."

시간 지연을 이용한 블라인드 SQL 인젝션 공격 방식을 설명하는 문장입니다.

조금 더 깊게 보면

블라인드 SQL 인젝션은 크게 참/거짓 조건에 따라 응답 페이지 내용이 달라지는지를 관찰하는 불리언 기반 방식과, 조건이 참일 때 데이터베이스 함수를 이용해 응답을 의도적으로 지연시키는 시간 기반 방식으로 나뉩니다. 두 방식 모두 한 번에 한 글자씩 또는 한 비트씩 조건을 바꿔가며 반복 질의를 수행하기 때문에, 자동화 스크립트를 이용해 데이터를 순차적으로 복원하는 경우가 일반적입니다.

주의할 점

오류 메시지를 사용자에게 노출하지 않도록 처리했다고 해서 SQL 인젝션 자체가 방어되는 것은 아니며, 근본적인 대응은 매개변수화된 쿼리(prepared statement) 사용과 입력값 검증에 있습니다.

관련 용어