티스토리 뷰

보안

[웹 보안]SQL Injection

kmj24 2021. 1. 30. 00:58

SQL Injection이란 공격자가 임의의 SQL을 주입하여 DB의 동작을 제어하고 Data를 탈취하는 공격이다.

 

웹 사이트의 보안상 허접을 이용하여 특정 SQL Query를 전송하여 Data를 탈취한다.

Parameter를 이용하여 Query를 재구성 하여 악의적인 의도를 갖는 구문을 삽입하여, 공격자가 원하는 동작을 하도록 한다.

대부분 Client가 입력한 데이터를 제대로 필터링 하지 못할 경우에 발생한다.

공격 난이도가 쉬운편이고 피해가 클수 있다.

DB를 사용하는 모든 Programming Language에서 일어날 수 있다.

 

 

예를들어 로그인 과정에서 SQL 인젝션 공격을 한다고 가정해보자.

일반적인 유저라면 ID, PW를 각각 입력하여 로그인을 할 것이다.

이때 동작하는 Query문은 [ Select * from user where id='$user_id' and pw='$user_pw' ]라고 가정할때

(id와 pw가 모두 일치하면 *의 값을 조회할 수 있도록 하는 Query) 

1. 공격자는 ID에 admin --, PW에 pw 입력한다.

2. 그러면 작동 되는 Query는 [ Select * from user where id=admin --and pw=pw ]이 된다.

3. 여기서 PW에 입력한 pw라는 문자열은 전혀 의미없는 data이다.

4. "--" 는 SQL에서 주석으로 처리되는 것이고 Query문은 PW를 읽지 않고 공격자는 ID만으로 로그인을 할 수 있게 된다.

 

Web Site를 개발할때 이러한 SQL Injection에 대한 공격을 염두해 두고 설계를 해야된다.

이 공격을 방지하기 위해

 - 모든 SQL 입력을 신뢰할 수 없는것으로 간주하고 취급해야 한다.

 - 작동되는 SQL 입력값을 항상 검증하여 잘못된 쿼리를 실행하지 못하도록 막는 기능을 구현해야 된다. 

 - DB 사용자의 최소 권한 원칙을 적용하여 Web Application에서 실행에 필요한 최소의 권한만 부여하도록 해야 한다.

 

 SQL을 검증하는 방법은 아래의 내용 등이 있다.

 - 입력값을 검증하는 방법 : 개발자가 의도한 값 이외의 다른값이 오는지에 대한 검증

 - 저장 프로시저 사용 : Query에 미리 형식을 지정, 지정된 형식의 데이터가 아닐 경우 Query를 실행하지 않도록 함.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함