Akamai dots background

SQL 삽입 자습서

이 SQL 삽입 자습서에서는 비즈니스 기업 및 공공 조직의 웹 보안에 대한 가장 일반적인 위협 중 하나를 간략히 소개합니다. SQL 삽입 자습서에서 다룰 4가지 주제:

  • SQL 삽입 공격의 맥락
  • SQL 삽입 공격의 목적
  • SQL 삽입 공격의 원리
  • SQL 삽입 공격을 방어하는 방법

SQL 삽입 자습서 주제 1: SQL 삽입 공격의 맥락

대부분의 현대적인 웹 애플리케이션은 웹 클라이언트(일반적으로 브라우저)가 웹 서버에 호스팅된 웹 애플리케이션과 통신하고, 웹 애플리케이션은 이에 답하여 하나 이상의 백엔드 데이터베이스와 통신하는 방식을 기본 구조와 논리 흐름으로 삼습니다. 데이터베이스에는 사용자 이름/암호 조합 및 사용자 계정 데이터 등 애플리케이션과 관련된 다양한 정보가 저장되어 있습니다. 최종 사용자는 웹 페이지 양식(예: 로그인 양식 또는 검색 양식)에 데이터를 입력함으로써 이러한 정보에 접근하고 정보를 수정할 수 있습니다. 웹 애플리케이션은 사용자가 입력한 데이터를 바탕으로 대부분의 현대식 관계형 데이터베이스가 사용하는 명령 언어인 SQL(Structured Query Language)을 사용하여 데이터베이스에 명령을 전송합니다. 데이터베이스가 이에 응답하면 웹 애플리케이션 역시 사용자에게 응답합니다.

SQL 삽입 자습서 주제 2: SQL 삽입 공격의 목적

SQL 구문에 정통한 해커는 SQL 삽입 공격을 통해 웹 애플리케이션이 의도한 것보다 백엔드 데이터베이스에 더 직접적으로 멀리 도달할 목적으로 웹 페이지 양식에 허위 정보를 입력합니다. 이러한 공격은 대부분 사용자 이름/암호 조합이나 민감한 금융 또는 기업 데이터 등의 귀중한 정보를 취득하려 합니다. 일부 사례에서 SQL 삽입 공격으로 데이터(계좌 잔고 등)를 변경하거나 악의적으로 데이터를 삭제하려는 시도도 있었습니다. SQL 삽입 공격은 이러한 방식으로 사이버 보안의 중대한 침해를 야기할 수 있습니다.

SQL 삽입 자습서 주제 3: SQL 삽입 공격의 원리

SQL 삽입 공격은 해커가 애플리케이션을 속여 애플리케이션이 평소에 보내는 것과 다른 명령을 데이터베이스에 보낼 목적으로 웹 양식의 입력 필드에 특수한 SQL 용어와 문자를 입력하는 행위입니다. OWASP(오픈 웹 애플리케이션 보안 프로젝트) 웹 사이트의 사례를 예로 들어, 애플리케이션 코드가 데이터베이스에서 다음 명령을 실행할 목적으로 쓰였다고 가정해 보겠습니다.

---------------

SELECT * FROM accounts

WHERE owner =

AND accountname = ;

---------------

이 명령은 "accounts" 테이블에서 계정 정보를 검색하려는 의도로 사용되었으나, 지정한 소유자 이름과 계정 이름이 테이블 내 같은 항목에 있는 경우로 대상을 제한하고 있습니다. 확인이 필요한 구체적인 소유자 이름과 계정 이름은 최종 사용자가 웹 페이지 양식을 통해 제공할 것입니다.

공격자는 웹 양식의 소유자 이름과 계정 이름에 "'name'" OR 'x'='x'"의 허위 정보를 입력할 수도 있습니다. 삽입에 대한 방어 수단이 부족한 애플리케이션에서 단일 인용 문자와 OR 용어를 사용할 경우, 수정된 SQL 명령을 생성하여 데이터베이스로 보내는 효과가 있습니다.

---------------

SELECT * FROM accounts

WHERE owner = 'smith'

AND accountname = 'name' OR 'x' = 'x';

---------------

'smith/name'이라는 소유자/계정 이름 조합이 검색되지 않을 경우 절의 OR 부분인 'x'='x'가 항상 참이 되므로, 일반적으로는 한정 절인 WHERE가 'accounts' 테이블의 모든 레코드를 만족하게 됩니다. 따라서 테이블에 있는 모든 레코드가 애플리케이션 및 최종 사용자에게 반환될 수 있습니다.

SQL 삽입 자습서 주제 4: SQL 삽입 공격을 방어하는 방법

이 SQL 삽입 자습서에서는 SQL 삽입 공격의 목적과 기초적인 방법을 간략히 소개했습니다. 웹 애플리케이션 소유자는 이러한 공격을 어떻게 퇴치해야 할지 궁금할 수 있습니다. 다음과 같은 2가지 접근 방법이 있습니다.

  • 세심한 애플리케이션 코딩. 다양한 모범 사례 프로그래밍을 통해 SQL 삽입에 대한 웹 애플리케이션의 취약점을 크게 줄일 수 있습니다. 이러한 프로그래밍에는 매개 변수화된 쿼리 또는 저장된 프로시저가 있으며, 블랙리스트 또는 화이트리스트 문자를 사용하여 웹 양식에서 사용자가 입력하는 내용을 필터링 및 부분 삭제할 수 있습니다. 그러나 훌륭한 프로그래밍만으로는 웹 서비스 보안데이터 보호를 보장하기에 충분하지 않을 가능성이 높습니다. 이는 대부분의 웹 애플리케이션이 수많은 다양한 프로그래머가 장기간에 걸쳐 작업한 결과이기도 하고, 취약점이 알려진 기존의 웹 애플리케이션을 보강하려면 감당할 수 없을 정도로 큰 비용이 들기 때문이기도 합니다.
  • 웹 애플리케이션의 전면에 WAF(Web Application Firewall)를 배치하여, 유입되는 HTTP 트래픽을 검사하고 필터링합니다. WAF는 SQL 삽입을 효과적으로 방어하지만 기존의 사내 WAF는 성능 병목 현상을 일으키기 쉽습니다.

Akamai의 클라우드 기반 웹 보안 솔루션은 WAF를 글로벌 Akamai 웹 콘텐츠 전송 네트워크에 통합하여, 광범위하게 분산 및 전방 배치된 방어 수단을 통해 웹 애플리케이션의 성능 저하 없이 SQL 삽입 공격을 차단합니다 이 솔루션은 또한 웹 자산을 대상으로 서비스 거부 공격을 실행하는 동시에 SQL 삽입을 통해 공격하는, 점점 더 인기를 얻고 있는 전술을 방어하는 효과도 있습니다.

고도로 확장 가능한 Akamai의 클라우드 기반 클라우드 보안 솔루션에 대해 자세히 알아보십시오.