SQL 인젝션
보안의 기본, CH. 04 데이터베이스에 부정 액세스한다.
SQL 인젝션이란?
SQL 인젝션이란 웹 애플리케이션에 대한 입력을 악용하여,
애플리케이션의 뒤에서 작동하는 데이터베이스에 부정하는 액세스하는 공격입니다.
SQL 인젝션이 성공하면 공격자는 거의 자유롭게 데이터베이스를 조작할 수 있게 되므로 부정 액세스나 정보의 절취 및 변조, 파괴 등이 가능해집니다.
중요한 데이터를 데이베이스에 저장하고 있는 경우는 막대한 피해를 입게 됩니다.
SQL 인젝션의 구조
웹 애플리케이션의 뒤에는 애플리케이션의 참조나
갱신을 하기 위한 데이터를 제공하는 데이터베이스가 마련되어 있는 경우가 많습니다.
사용자의 조회나 조작에 따라 데이터의 참조 및 갱신 처리를 하기 위해 데이터베이스에 SQL 이라는 언어로 조회를 합니다.
조회에는 SQL 중 사용자가 입력하는 부분이 비어 있는 형태로,
입력 값을 채워 넣는 방식(인젝션의 예 그림 참조)으로 일어나기 때문에 사용자의 데이터 베이스 조작에는 제한이 걸려있습니다.
하지만 애플리케이션에 입력하는 값을 부정으로 조작함으로써 SQL의조회 내용을 자유롭게 바꿀 수 있는 경우가 있습니다.
SQL 인젝션을 허용하는 취약성과 대책
SQL 인젝션이 일어나는 원인은 사용자의 입력에 데이터베이스에 대한
조회 내용이 단순한 빈칸채우기의 범위를 넘어 자유롭게 바꿀 수 있게 되어 있는 취약성에 있습니다.
바꿀수 없게 만드는 대책으로는 입력 값을 사용하여 SQL 문을 구성할 때 파라미터 바인드라는 기구를 사용하는 것 등이 있습니다.
SQL 인젝션의 예
공격자는 입력 값을 부정으로 조작하여 조회문(SQL)을 자유롭게 바꿔 버립니다.
그 결과 정보의 절취나 변조가 가능해집니다. 아래는 그 방법의 예입니다.
조회문 > 다음 조건과 일치하는 사용자 데이터를 가져오시오.