728x90
반응형
SQL Injectiond이란?
- 웹 어플리케이션에서 입력 받아 데이터베이스로 전달하는 정상적인 SQL 쿼리를 변조 삽입하여 불법 로그인, DB 데이터 열람, 시스템 명령 실행 등을 수행하여 비정상적인 데이터베이스 접근을 시도하는 공격 기법
- 조작한 입력으로 데이터베이스를 인증 절차 없이 접근 및 자료를 무단으로 유출하거나 변조 가능
- DB에 악성 스크립트를 삽입하여 접근하는 사용자를 피싱 사이트 또는 악성코드 유포 사이트로 유도
- Stored Procedure(저장된 프로시저)를통한 OS 명령어 실행
- DB에 있는 개인정보 취득
**SQL Injection 취약점 스캐너
- Nikto : GUI 기반 오픈소스로 웹서버 및 SQL Injection에 대한 취약점 점검(리눅스 기반)
- SQLMap : 블라인드 SQL Injection을 자동으로 수행하는 도구로 Python에서 개발
- Absinthe : GUI 기반의 도구로 블라인드 SQL Injection 취약점에 이용, 데이터 베이스의 스키마와 목록을 자동화 과정으로 다운로드
Form SQL Injection
- HTML Form 기반 인증을 담당하는 어플리케이션의 취약점이 있는 경우 사용자 인증을 위한 쿼리문의 조건을 임의로 조작하여 인증을 우회하는 기법
- 쿼리문의 조건절(where절)이 항상 참이 되도록 쿼리문 조작
- 공격이 성공하는 경우, 반환되는 레코드 셋의 첫 번째 레코드에 해당하는 사용자 권한을 획득
Union SQL Injectioin
- union select 쿼리를 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 결합하여 공격하는 기법
- union문은 2개 이상의 select문을 결합하고자 할 때 사용하며, 각각의 select문의 필드 개수가 같아야 하며 필드 타입이 호환 가능해야 함
- union all : 단순히 2개 이상의 select문 쿼리 결과를 합해서(중복 포함) 보여 줌
- union : 2개 이상의 select문 쿼리 결과에 중복을 제거하고 보여 줌
Union SQL Injection을 성공하기 위해서는 선행 select문과 후행 select문의 컬럼 개수가 일치해야 합니다. 따라서 컬럼 개수를 파악하는 것이 우선입니다. 컬럼 개수 파악에는 2가지 방법이 있습니다.
- order by절에 컬럼 인덱스를 지정할 수 있는데 지정한 인덱스의 컬럼이 없으면 오류가 발생
- union select문을 이용하면서 컬럼 개수가 맞지 않으면 오류가 발생하는 특성
위 2가지를 이용해 확인할 수 있습니다.
Error-Based SQL Injection
- DB 쿼리에 대한 에러값을 기반으로 한 단계씩 점진적으로 DB 정보를 획득하는 방법
- DB쿼리에 대한 에러가 외부로 노출되는 취약점을 이용한 공격
Blind SQL Injection
- 쿼리 결과의 참과 거짓을 통해 의도하지 않은 SQL문을 실행해 데이터베이스를 공격하는 기법
- 단순하게 오류 메세지를 자세하게 반환하지 않게 설정하면 Error-Based SQL Injection은 피할 수 있지만 Blind SQL Injection에는 취약
- 쿼리 결과의 참/거짓에 대한 반응 형태에 대한 파악이 우선 시 되며, 자동화 도구를 사용하는 것이 일반적
SQL Injection 대응 방안
- 데이터베이스와 연동하는 스크립트의 모든 파라미터를 점검하여 사용자의 입력값에 SQL 쿼리문에 이용되는 특수문자(', ", \, ;, %, space, --, # 등) 및 select, update, insert, delete 등의 SQL 관련 문자를 필터링
- 입력되는 문자열의 길이를 제한하고 숫자일 경우 숫자인지 체크하는 함수 사용
- MS-SQL의 경우 master..xp_cmdshell, xp_startmail, xp_sendmail과 같은 확장 프로시저는 운영체제 명령 실행, SQL Injection 등에 이용되기에 제거
- 웹 어플리케이션이 사용하는 데이터베이스 사용자 권한 제거
- 선처리 질의문을 이용하면 SQL 쿼리문을 선처리하여 이후 입력되는 변수 값을 항상 문자열 변수로 다루기 때문에 사용자가 어떤 악의적인 SQL 구물을 변수 값에 삽입하더라도 SQL문에 영향을 미치지 않아 SQL Injection이 발생하지 않음
728x90
반응형
'자격증 > 정보보안기사' 카테고리의 다른 글
크로스 사이트 스크립트(XSS:Cross Site Script) 취약점 (0) | 2023.03.07 |
---|---|
ARP 프로토콜(취약점/대응방법) (0) | 2022.04.20 |
시스템 보안(기본) - UNIX/Linux (0) | 2021.04.28 |
시스템 보안(기본) - 윈도우 (0) | 2021.04.27 |