공시 한 판

정보보호론 개념서 · 응용 프로그램 취약점

SQL 삽입 공격의 원리와 대비책

설명 영상 SQL 삽입 공격의 원리와 대비책 · 2:35

핵심 정리

SQL 삽입은 응용 프로그램의 보안 허점을 의도적으로 이용해 악의적인 SQL문을 실행하는 공격이다. SQL 삽입은 코드 인젝션의 한 종류이다. 코드 인젝션은 유효하지 않은 데이터를 실행해 소프트웨어 버그를 부당하게 이용하는 방식이다. 공격자는 취약한 프로그램에 코드를 삽입해 실행 흐름을 바꾼다. SQL 삽입은 이 방식을 데이터베이스 질의에 적용한 것이다. 신뢰할 수 없는 입력이 SQL 질의문의 일부로 해석되어 데이터베이스를 조작하는 웹 취약점 공격이다.

공격은 사용자 입력값으로 SQL 질의가 완성되는 구조에서 시작된다. 사용자가 직접 입력한 값이 질의문에 연결되는 모든 지점이 점검 대상이다. 웹 애플리케이션이 입력값을 검증하지 않고 그대로 SQL 질의에 넣으면 악의적인 SQL문이 실행될 수 있다. 이것이 SQL 삽입 공격이다. 입력값을 필터링하지 않아 질의문의 조건을 조작하고 로그인 인증을 우회하는 공격은 SQL 삽입 공격이다.

SQL 삽입 공격이 성공하면 데이터베이스에 무단으로 접근해 자료를 유출하거나 변조할 수 있다. 이 공격은 웹 애플리케이션을 거쳐 데이터베이스에 질의가 전달되는 구조에서 주로 발생한다. 피해는 자료 유출과 변조에 그치지 않는다. 삽입 취약점은 데이터 손실이나 오염, 책임 추적의 어려움, 서비스 거부로 이어질 수 있으며, 경우에 따라 호스트 전체가 장악될 수도 있다. 로그인 인증이 우회되면 공격자는 정상 사용자처럼 행세할 수 있다.

인젝션 공격의 대비책은 입력값 검증과 매개변수화된 질의이다. 보안 프로토콜이나 암호 키의 사용 여부를 확인하는 것은 대비책이 아니다. 대비의 핵심은 외부 입력이 질의의 구조에 섞이지 않게 하는 데 있다. 삽입 취약점은 애플리케이션이 인터프리터에 신뢰할 수 없는 데이터를 보낼 때 발생하므로, 입력과 질의 구조의 경계를 어떻게 설정하는지가 중요하다.

입력값 검증과 매개변수화된 질의는 같은 원리를 따르지만 작동 지점이 다르다. 입력값 검증은 허용되지 않은 입력을 걸러 내고, 매개변수화된 질의는 입력을 처음부터 데이터로만 처리한다. 인터프리터가 해석하는 특수 문자를 무력화하는 처리와 최소 권한 계정도 보완 수단이다.

자세히

입력값 검증과 특수 문자 처리

SQL 쿼리문에 삽입되는 외부 입력값은 특수 문자를 필터링하는 입력값 검증을 거쳐야 한다. 입력값은 형식과 허용 문자를 기준으로 검증해야 하며, 검증은 질의문을 완성하기 전에 이루어져야 한다. 질의문을 완성한 뒤 입력을 검사하면 입력값이 이미 질의 구조를 바꾼 뒤이므로 공격을 막기 어렵다. 따라서 검증 시점은 검증 방식만큼 중요하다.

인터프리터가 해석하는 특수 문자를 필터링하거나 이스케이프하면 인젝션을 방지할 수 있다. 필터링은 특수 문자가 포함된 입력을 걸러 내는 방식이다. 이스케이프는 특수 문자가 문법적 의미를 갖지 못하도록 문자 그대로 처리하게 바꾸는 방식이다. 두 방법은 입력 자체를 인터프리터의 해석 대상에서 벗어나게 한다.

이어지는 내용

로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 절 읽기