<SQL 인젝션 공격 종류>
1. SQL Injection(normally)
SQL Injection은 홈페이지 DB에 특수문자('[싱글쿼터])나 Union, Select 등의 문자를 필터링하지 않아, 조작된 SQL Query가 서버로 전송되어 DB의 정보를 획득, 수정, 삭제 등의 명령 실행이 가능한 공격 기법이다. 또한, xp_cmdshell과 같은 System Stored Procedures를 통해 시스템의 권한 획득이 가능하다.
예>
GET/bbs/list.php?board_seq=2&sSearchString=&sSearchMethod=title_n' and 'x'='y HTTP/1.1
Host: test-domain.com
Accept: */*
2. TRUE OR FALSE Blind SQL Injection
공격자의 입력값에 따라 웹 어플리케이션의 반응을 통해 DB에서의 처리에 대해 참과 거짓을 구분할 수 있을 때 공격자는 조건문과 함께 아스키 코드 값 삽입하고, 코드 값을 하나씩 변경시켜가며 참과 거짓의 반응을 통해 문자를 추측한다. 이 과정을 거쳐서 피해 데이터베이스의 DB명, 테이블명 등을 추출하는 공격이다.
예>
GET /bbs/view.php?seq=1477719&board_seq=1 AND 1=1HTTP/1.1
Host:test-domain.com
Accept:*/*
3. Time Base Blind SQL Injection
참과 거짓을 반환되는 화면에 의해 확인할 수 없을 때 시간을 지연시킬 수 있는 함수(Sleep, Wait For delay, Benchmark 등)을 사용하여 고의적으로 시간을 지연시킨 후 처리 응답속도를 확인하여 참과 거짓을 구분하는 공격이다.
예>
GET/bbs/list.php?nPage=27&board_seq=2[[#0]]'||SLeeP(3)&&'1 HTTP/1.0
Accept-Language: en-us,en
Accept-Charset: utf-8,*
Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png
User-Agent: Opera/9.27
Host: test-domain.com
Connection: close
<대응방안>
1) 입력란에 특수문자를 입력하지 못하도록 Prepared Statement 객체 등을 이용하여 DB에 컴파일된 쿼리문(상수)을 전달하는 방법을 사용한다.
2) Parameterized Statement를 사용하는 경우에는 DB쿼리에 사용되는 외부 입력 값에 대하여 특수문자 및 쿼리 예약어를 필터링하고, Struts, Spring 등과 같은 프레임워크를 사용하는 경우에는 외부 입력 값 검증 모듈 및 보안 모듈을 상황에 따라 적절하게 사용한다.
3) Prepared Statement 클래스를 사용할 수 없는 환경이라면, 입력 값을 필터링 처리한 후 사용한다. 필터링 기준은 데이터베이스와 연동하는 스크립트의 모든 파라미터에서 사용자의 입력 값이 특수문자(`, ", /, ;, :, Space, -, +)를 포함하는지 검사하여 허용되지 않은 문자열이나 문자를 필터링 한다.
<추가 조치 방안>
① 허용되지 않은 문자열이 포함된 경우에는 에러로 처리한다.
② 데이터베이스의 에러메시지를 사용자에게 보여주지 않도록 설정한다.
③ 웹 어플리케이션이 사용하는 데이터베이스 사용자의 권한을 제한한다.
'로그 저장소 :) > 보안.Security' 카테고리의 다른 글
IT아웃소싱과 보안 (0) | 2013.11.15 |
---|---|
[2013.10.24] 전사적 산업정보 보안관리 3일차 (0) | 2013.10.25 |
[2013.10.24] 전사적 산업정보 보안관리 2일차 (0) | 2013.10.24 |
[2013.10.23] 전사적 산업정보 보안관리 1일차 (0) | 2013.10.23 |
보안 인식 교육 실패의 일곱 가지 이유 (0) | 2013.07.15 |