[Web] SQL 인젝션 (SI)

SQL 인젝션

취약점 개요

■ 위험도
- 상

■ 점검 목적
- 대화형 웹 사이트에 비정상적인 사용자 입력 값 허용을 차단하여 악의적인 데이터베이스 접근 및 조작을 방지하기 위함

■ 보안 위협
- 해당 취약점이 존재하는 경우 비정상적인 SQL 쿼리로 DBMS 및 데이터를 열람하거나 조작 가능하므로 사용자의 입력 값에 대한 필터링을 구현하여야 함

점검 및 조치 방법

■ 점검 및 판단 기준
- 양호 : 임의의 SQL Query 입력에 대한 검증이 이루어지는 경우
- 취약 : 임의의 SQL Query 입력에 대한 검증이 이루어지지 않는 경우

■ 조치 방법
- 소스 코드에 SQL Query 입력값을 받는 함수나 코드를 써야 할 경우, 임의의 SQL Query 입력에 대한 검증 로직을 구현하여 검증되지 않는 SQL Query가 인수 값으로 들어올 경우 에러 페이지가 아닌 정상 페이지가 반환되도록 필터링 처리하고 웹 방화벽을 운용할 경우 웹 방화벽에 SQL 인젝션 관련 룰셋을 적용하여 SQL 인젝션 공격 차단함



■ 점검 방법
Step 1) 애플리케이션 인수 값에 특수문자나 임의의 SQL 쿼리를 전달하여 DB 에러 페이지가 반환 되는지 확인

Step 2) 애플리케이션 인수 값에 임의의 SQL 참, 거짓 쿼리를 전달하여 참, 거짓 쿼리에 따라 반환되는 페이지가 다른지 확인

Step 3) 로그인 창에 참이 되는 SQL 쿼리를 전달하여 로그인 되는지 확인

■ 보안설정방법
Step 1) 문자열 유효성 검증 로직 구현
SQL Query에 사용되는 문자열에 대한 유효성 검사를 실시하는 프로세스 구현
아래와 같은 특수문자를 사용자 입력 값으로 지정 금지
(아래 문자들은 해당 데이터베이스에 따라 달라질 수 있음)

Step 2) Dynamic SQL 구문 사용 금지
Dynamic SQL 구문 사용을 지양하며 파라미터에 문자열 검사 필수 적용

Step 3) 오류에 대한 예외처리
에러 메시지는 공격자에게 많은 정보를 제공하므로 오류처리로 정보 노출을 최소화
시스템에서 제공하는 에러 메시지 및 DBMS에서 제공하는 에러 코드가 노출되지 않도록 예외처리

Step 4) 웹 방화벽에 인젝션 공격 관련 차단 룰셋 적용

Step 5) 필터링 등 입력 값 검증 프로세스는 Client side script가 아닌, Server 페이지로 구현

※ 애플리케이션 별 설정 방법

■ 용어 설명 / 팁
SQL 인젝션 : 사용자의 입력 값으로 웹 사이트 SQL 쿼리가 완성되는 약점을 이용하여, 입력 값을 변조하여 비정상적인 SQL 쿼리를 조합하거나 실행하는 공격. 개발자가 생각지 못한 SQL문을 실행하게 함으로써 데이터베이스를 비정상적으로 조작 가능함

댓글

Designed by JB FACTORY