CS/Database

[데이터베이스] SQL Injection

테리는당근을좋아해 2020. 6. 24. 14:44

SQL Injection

- 대표적인 웹 해킹 기법

- 웹 애플리케이션에서 데이터베이스에 질의하는 과정에 악의적인 SQL 문을 삽입해 인증을 우회하거나, 악의적인 쿼리문을 수행하는 공격법

 

1) 공격 유형

(1) 인증우회(AB, Auth Bypass)

- 일반적으로 로그인 페이지를 타겟

- SQL 문의 True / False 논리적인 연산의 오류를 이용

- ex. 패스워드에 "or 1 = 1"을 삽입해 인증을 우회

 

(2) 데이터 노출

- 해당 웹 애플리케이션의 데이터 절취를 목적

- 악의적인 쿼리문으로 에러를 유발시켜 데이터나 데이터베이스의 정보를 노출시킴

 

2) 방어 방법

(1) 특수문자 검사

- 로그인 페이지처럼 사용자의 입력을 통해 쿼리문을 수행할 때, 특수문자 여부를 검사하는 로직을 수행

- 자바스크립트 폼을 통해 입력값을 받아 특수 문자 검증 가능(하지만, 공격자가 자바스크립트를 꺼버리면 그만)

 

(2) 에러 메시지 노출 방지

- 데이터베이스의 원본 테이블에 대한 접근 권한을 높이고, 일반 사용자는 view를 통해서만 접근할 수 있도록 통제

 

(3) Prepare Statement

- statement 대신 prepared statement를 통해 SQL 문을 수행하면 자동으로 특수문자를 escaping할 수 있음

 

(4) Hash Function

- 해시 함수를 통해 데이터베이스에 저장되는 데이터 중 복호화가 필요없는(ex. 패스워드) 데이터를 암호화해서 저장