본문 바로가기
정보보호/정보보호학 개론 (2013, 백석대 이근호 교수님)

5-5. 인터넷 보안 : SQL 삽입(Injection) 공격

by 규글 2024. 8. 9.

목표

1. SQL 쿼리문에 대해서 이해

2. SQL 삽입 공격에 대해서 이해함

3. SQL 삽입 공격의 대응 방법을 이해함

 

요즘은 지능화되고 있음. 이를 막기 위한 데이터베이스에 대한 암호화 솔루션이 많음.

 

SQL

MS-SQL 2000의 쿼리 분석기

- 왼쪽에는 서버의 데이터베이스 목록. 마지막에 웹 서버와 연동되는 web 데이터베이스가 위치함.

- 게시판 테이블 board, 사용자 테이블 member, 우편 번호 정보가 들어있는 zipcode

 

- 데이터베이스는 기본적으로 테이블로 구성. 테이블은 필드와 행으로 구분. (날짜, 제목, 작성자, 내용 등)

 

테이블 정보 확인

select user_id from member

- member 테이블로부터 user_id 필드의 정보를 불러오는 쿼리문

 

select user_id from member where user_id='입력한 아이디' and user_pw='입력한 비밀번호'

select user_id from member where user_id='wishfree' and user_pw='dideodlf'

- 웹에서의 로그인 아이디와 비밀번호의 정보를 불러오는 쿼리문

- 잘못된 비밀번호 입력 시, 테이블에서 매핑되는 정보가 없으므로 아무런 정보를 가져오지 않음

 

실제 웹 로그인 소스

Query = "select user_id from member where user_id = '"&strUser id&"' 
and password = '"&strPAssword&"'"
strAuthCheck = GetQueryResult(Query)
if strAuthCheck = "" then
boolAuthenticated = False
else
boolAuthenticated = True
endif

- SQL 삽입 공격은 어떤 수단을 쓰든 SQL 의 결과값이 NULL이 나오지 않고 사용자 ID의 값이 되도록 하여 로그인하는 것.

- 조건값에 or ''=''을 입력하면 where로 입력되는 조건문을 항상 참으로 만들 수 있음 (아무것도 없는 것으로 항상 True)

 

- 현재는 이런 것들이 모두 필터링되고 있음 (특수문자 필터링)

 

- XSS 공격이 지능화되어 에러 메시지를 도출하여 그를 통해 공격을 분석하는 공격

- 에러가 발생하면 오류 메시지가 출력됨.

 

SQL 삽입 공격 (SQL Injection Attack)

- SQL문이 결과적으로 참이 될 수 있다면 SQL 삽입 공격에 사용되는 SQL문은 무엇이라도 상관 없음

- 공격은 로그인 뿐만  아니라 사용자의 입력값을 받아 데이터베이스에 SQL 문으로 데이터를 요청하는 모든 곳에 가능함.

- 공격을 막는 방법은 사용자가 입력창을 통해서 SQL문을 완성하여 데이터베이스에 전송할 때, 이 입력값 중에 특수문자가 존재하는지 여부를 필터링하는 것

 

- 보안 위험 요소를 방어하기 위해서는 시스템적인 부분도 중요하지만, 소프트웨어적으로 이런 기본적인 필터링만 하더라도 안전성을 많이 높일 수 있음.

댓글