Ye0ngJae

[웹] SQL Inejction에 대하여 알아보자 본문

정보보안/웹

[웹] SQL Inejction에 대하여 알아보자

Ye0ngJae 2021. 11. 23. 11:32
728x90

개요

정상적인 웹 요청 SQL 쿼리문

SQL Injection 취약점은 웹 서버의 DB로 전송되는 SQL 쿼리 문을 임의로 조작하여, 공격자가 작성한 SQL 구문을 보내어 서버의 DB를 공격하는 기법입니다.  사용자가 입력한 데이터를 공격자는 SQL 쿼리문을 조작하여, 악의적인 SQL 구문을 보내어 데이터베이스에 저장되어 있는 다른 사용자의 개인정보 등 허가되지 않은 정보에 접근하거나 데이터를 변조할 수 있습니다.

 

종류

1. Error Based SQL Injection

 

Error Based SQL Injection은 가장 대중적이고 많이 쓰이는 공격 기법입니다. 

 

 

기본적인 SQL 쿼리문

Error Based SQL Injection은 가장 대중적이고 많이 쓰이는 공격 기법입니다. 위와 같은 SQL 쿼리문을 사용하는 로그인 페이지가 있다고 가정해봅시다. 클라이언트로부터 uid와 upw 값을 입력받아 로그인을 진행합니다. 

 

 

정상적으로 로그인을 진행하는 사용자는 위와 같이 로그인을 진행합니다. 하지만 악의적인 목적을 가지고 SQL Injection을 실행시키려는 공격자는 로그인 구문을 다음과 같이 작성할 수 있습니다. 

 

 

공격자는 uid 입력 칸에 '를 입력하여 upw=' '로 만들고 뒤에 OR '1' = '1'을 붙였습니다. WHERE 구문 뒤에 오는 부분을 보면  false AND false OR true로 정리할 수 있습니다.  WHERE 구문 뒤에 붙언 OR 로 인해 해당 구문의 연산 값은 true가 되어 올바른 값으로 판단하고 실행하게 됩니다. 따라서 로그인에 성공하게 됩니다.

 

취약점 발생 원인

사용자가 입력한 값을 제대로 필터링, 이스케이핑하지 못했을 경우 발생합니다. 

 

공격 발생 영향

- DB 내용 추출, 변조, 삭제

- 인증 우회

 

 

 

대응방안

- 입력 값 검증

SQL Injection은 사용자가 서버로 SQL 쿼리문을 임의로 조작하여 발생하기 때문에 서버 단에서 사용자의 입력 값을 검증한다면 SQL Injection은 발생하기 힘듭니다. 또, SQL Injection에 사용되는 구문은 매우 많기 때문에 블랙리스트 필터링 같이 SQL Injection을 일으킬 수 있는 구문들을 필터링하는 것보단 정해진 구문들만 사용할 수 있게 하는 화이트 리스트 필터링을 권장합니다.

 

- 최소 권한 지정

SQL Injection이 성공해 발생하는 피해를 최소한으로 줄이려면 모든 데이터베이스 계정에 할당된 권한을 최소화해야 합니다. 애플리케이션 계정에 DBA 또는 관리자 유형 액세스 권한을 할당하지 말아야합니다. 

728x90