IT/영어 공부노트
[Web 보안] SQL 인젝션 본문
주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드 - 웹보안
5. SQL 인젝션
SQL 인젝션이란?
사용자의 입력 값으로 웹 사이트 SQL 쿼리가 완성되는 약점을 이용하며, 입력 값을 변조하여 비정상적인 SQL 쿼리를 조합하거나 실행하는 공격이다. 공격자가 승인되지 않은 작업을 수행하고, 중요한 데이터에 액세스하고, 데이터를 수정 또는 삭제하거나 잠재적으로 전체 데이터베이스 서버를 제어할 수 있다.
자세한 설명 -> https://hi-sojeong.tistory.com/45
SQL Injection 정리
DBMS DBMS는 데이터베이스에 새로운 정보를 기록하거나, 기록된 내용을 수정, 삭제하는 역할을한다. Relational (관계형) MySQL, MariaDB, PostgreSQL, SQLite Non-Relational (비관계형) MongoDB, CouchDB, Redis 두 종류의
hi-sojeong.tistory.com
취약점 분석
취약점 개요 | |
점검내용 | - 웹페이지 내 SQL 인젝션 취약점 존재 여부 점검 |
점검목적 | - 대화형 웹 사이트에 비정상적인 사용자 입력 값 허용을 차단하여 악의적인 데이터베이스 접근 및 조작을 방지하기 위함 |
보안위협 | - 해당 취약점이 존재하는 경우 비정상적인 SQL 쿼리로 DBMS 및 데이터를 열람하거나 조작 가능하므로 사용자의입력 값에 대한 필터링을 구현하여야 함 |
점검대상 및 판단기준 | |
대상 | - 웹 애플리케이션 소스코드, 웹 방화벽 |
판단기준 | - 양호: 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지는 경우 |
- 취약: 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지지 않는 경우 | |
조치방법 | - 소스코드에 SQL 쿼리를 입력 값으로 받는 함수나 코드를 사용할 경우, 임의의 SQL 쿼리 입력에 대한 검증 로직을 구현하여 서버에 검증되지 않는 SQL 쿼리 요청 시 에러 페이지가 아닌 정상 페이지가 반환되도록 필터링 처리하고 웹 방화벽에 SQL 인젝션 관련 룰셋을 적용하여 SQL 인젝션 공격을 차단함 |
점검방법
1. 사용자 입력 값에 특수문자나 임의의 SQL 쿼리를 삽입하여 DB 에러 페이지가 반환되는지 확인
2. 사용자 입력 값에 임의의 SQL 참, 거짓 쿼리를 삽입하여 참, 거짓 쿼리에 따라 반환되는 페이지가 다른지 확인
3. 로그인 페이지에 참이 되는 SQL 쿼리를 전달하여 로그인되는지 확인
보안설정방법
- SQL 쿼리에 사용되는 문자열의 유효성을 검증하는 로직 구현
- 특수문자를 사용자 입력 값으로 지정 금지
문자 | 설명 |
' | 문자 데이터 구분기호 |
; | 쿼리 구분 기호 |
--, # | 해당라인 주석 구분 기호 |
/* */ | 구문 주석 |
(예시)
- Dynamic SQL 구문 사용을 지양하며 파라미터에 문자열 검사 필수적용
- 시스템에서 제공하는 에러 메시지 및 DBMS에서 제공하는 에러 코드가 노출되지 않도록 예외처리
참조
주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드 p.653-p.658