SQL Injection이란 웹 애플리케이션에서 입력받아 데이터베이스로 전달하는 SQL 쿼리를 바꾸거나, 다른 SQL 문장을 추가하여 불법 로그인, DB 데이터 추출, 시스템 명령 실행 등을 수행하는 공격 기법이다. Blind SQL 인젝션, 에러 기반 SQL 인젝션, Union SQL 인젝션 등 종류도 다양하다.

 

SQL Injection 특징

  - DB에 악성코드를 대량으로 삽입

  - 자동 삽입 스크립트를 사용하여 한번에 악성코드를 대량 삽입

  - POST나 HTTP Header를 이용한 경우는 공격 로그를 찾기 어려움

  - 악성코드 삽입 과정에서 데이터의 손실 또는 유실 발생

 

SQL Injection 공격 종류

  - 인증 우회 (AB : Auth Bypass)

보통 아이디와 비밀번호를 입력하는 로그인 페이지를 목표로 하는 공격이다. SQL 쿼리문의 true/false의 논리적 연산 오류를 이용하여 로그인 인증 쿼리문이 무조건 true의 결과 값이 나오게 하여 인증을 무력화 시키는 원리이다.

 

  - 데이터 노출 (DD : Data Disclosure)

목표 시스템의 주요 데이터 절취를 목적으로 하는 방식이다. Error based, Union, Blind, Time 방식이 있다. 시스템의 에러는 개발자에게 버그를 수정하는 면에서 많은 도움을 주지만 역으로 에러를 이용할 수 있다. 악의적인 구문을 삽입하여 에러를 유발시키는 것이다.

 

  - 원격명령 실행 (RCE : Remote Command Excute)

 

대응방안

  - 문자열 필터링 길이 제한

데이터베이스와 연동하는 스크립트의 모든 파라미터를 점검하여 사용자의 입력 값에 이용되는 특수문자(‘, “, \, ;, :, %, space, --, # ) SQL 관련 문자열(select, union, insert, delete, update )을 필터링한다. 또한, 문자열의 길이를 제한하고, 숫자는 숫자인지 점검하는 함수를 사용한다.

 

  - 확장 프로시저 제거

MS-SQL의 경우 확장 프로시저(mater, xp_cmdshell, xp_startmail, xp_sendmail 등)는 운영체제 명령 실행 및 SQL 인젝션에 이용되기 때문에 제거하는 것이 안전하다.

 

  - DB 사용자 권한 제한

웹 프로그램을 사용하는 DB 사용자의 권한을 제한한다.

 

  - 선처리 질의문(Prepared Statement) 이용

선처리 질의문을 이용하면 SQL 쿼리문을 선처리하여 이후 입력되는 변수 값을 항상 문자열 변수로 다루기 때문에 사용자가 악의적인 SQL 구문을 삽입하더라도 SQL 문에 영향을 미치지 않아 SQL 인젝션이 발생하지 않는다.

 

  - hash function 사용

사용자의 입력값을 DB 그대로 저장하고 사용하지 말아야 한다. 특히 비밀번호의 경우 그렇다. 무조건 SHA-256 이상의 보안성을 갖는 해시함수로 해싱한 뒤 저장해야 한다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

CSRF(Cross Site Request Forgery)란?  (0) 2017.09.08
XSS란?  (2) 2017.09.01
DCL(데이터 제어어)란?  (0) 2017.08.11
데이터 조작어(DML)이란?  (0) 2017.08.03
데이터 정의어(DDL)이란?  (0) 2017.07.27
블로그 이미지

꼴통보안인

,

데이터 제어어(Data Control Language)는 DB에 접근하고 객체들을 사용하도록 권한을 부여, 해제하는 명령어이다.

 

1. Grant문

- DB권한을 부여하는 명령어

     ex) Grant 권한_리스트 on 개체 to 사용자 [with grant option];

      * with grant option : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 부여

 

2. Revoke문

  - DB권한을 해제하는 명령어

     ex) Revoke [grant option for] 권한_리스트 on 개체 from 사용자 [cascade];

      * grant option for : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소

      * cascade : 권한 취소 시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소

 

3. Commit문

  - 데이터를 DB에 저장하고 트랜잭션을 성공적으로 종료하는 명령어

 

4. Rollback문

  - 데이터의 변경 사항을 취소하고 원상태로 복귀한 후 트랜잭션을 종료하는 명령어

 

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

XSS란?  (2) 2017.09.01
SQL Injection이란?  (0) 2017.08.24
데이터 조작어(DML)이란?  (0) 2017.08.03
데이터 정의어(DDL)이란?  (0) 2017.07.27
SQL이란?  (0) 2017.07.19
블로그 이미지

꼴통보안인

,

데이터 조작어(Data Manupulation Language)는 DB에 있는 데이터를 검색, 등록 삭제, 갱신하기 위한 언어이다.

 

1. Select문

- DB에 있는 데이터를 검색하는 명령어

     ex) select [all/distinct] from 테이블 where 조건;

      * all : default 옵션, 중복된 데이터가 있어도 표시

      * distinct : 중복된 데이터가 있는 경우 1건으로 처리하여 표시

 

2. Insert문

  - DB에 데이터를 삽입하는 명령어

     ex) Insert into 테이블명 (속성명, ...) values (속성값, ...);

 

3. Delete문

  - DB에 있는 데이터를 삭제하는 명령어

     ex) delete from 테이블명 where 조건;    

 

4. Update문

  - DB에 있는 데이터를 갱신하는 명령어

     ex) update 테이블명 set 수정할 컬럼명 = 변경할 값;

 

4. Murge문

  - DB에 있는 여러 테이블의 데이터를 병합하는 명령어

     ex) murge into 테이블명 on 병합조건절 when matched then

update set 업데이트 내용 delete where 조건

when not matched then insert values (컬럼명);

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

SQL Injection이란?  (0) 2017.08.24
DCL(데이터 제어어)란?  (0) 2017.08.11
데이터 정의어(DDL)이란?  (0) 2017.07.27
SQL이란?  (0) 2017.07.19
OWASP Top 10 2017  (0) 2017.07.10
블로그 이미지

꼴통보안인

,