-
(3) SQL InjectionCS 지식/○ Database 2021. 7. 2. 00:29
1. SQL Injection이란?
1-1) 정의
해커에 의해 쿼리문이 서버영역까지 그대로 전달되어 비정상적인 명령을 실행시키는 공격 기법
1-2) 공격 방법
(a) 인증 우회
참조
6-1)에 Authentication 이후 Authorized되어야 하는데, Unauthorized임에도 Authorized 하게 하는 방식
: https://korshika.tistory.com/158?category=974498
※ EX) 서버가 사용중인 인증정보 조회 쿼리문
SQL = "Select * From Users" + " Where UserID = '"+ UserID +"' And Password = '" + Password + "'"
> 일반적인 인증 방법
정상적으로 id와 pswd를 입력 후 db에서 query로 조회하는 경우SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";
> 비정상적 SQL Injection
비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력
-- 1) 1234; DELETE * FROM USER WHERE ID = "1"; // 모든 db 내용 삭제 -- 2) -- 입력값 UserID: admin'-- Password: 아무거나 -- 실행쿼리문 Select * From Users Where UserID = 'admin'-- And Password = '아무거나' // admin이라는 계정이 있을 시 pswd를 몰라도 통과 --3) -- 입력값 UserID: test Password: 1234' or '1'='1 -- 실행쿼리문 Select * From Users Where UserID = 'test' And Password='1234' or '1'='1' // test 계정이 없어도 true처리되어 통과
(b) 데이터 노출
시스템에서 발생하는 에러 메세지를 고의로 노출시켜 서버의 구조를 유추하여 추후 해킹에 활용하는 방식
> 보통 이런 에러 메세지 / 출력은 개발자 버그 수정 때 사용하는 것, 개발 이후 배포시 안나타나도록 해야 함
2. 방어 방법
2-1) input 검사
input 값을 받을 때 특수문자 여부 검사하여
로그인전 검증로직을 통해 미리 설정한 특수문자들이 들어왔을 때 요청을 막음
2-2) 에러 메세지 감추기
SQL 서버 오류메세지를 감추기 위해
view를 활용하여 원본 테이블에 접근하는 권한을 세팅하고, 일반 사용자는 view의 권한으로만 접근하여
에러 메세지를 볼 수 없도록 함2-3) Pre-parse-statement 활용하기
Preparsestatement를 활용하면, 특수문자를 자동으로 escaping 해줌
// 특수문자를 그대로 문자로 받는 형식
이를 활용해 서버 측에서 필터링을 통해 공격을 방어한다
참조
https://gyoogle.dev/blog/computer-science/data-base/SQL%20Injection.html
반응형'CS 지식 > ○ Database' 카테고리의 다른 글
(6) Index (0) 2021.07.03 (5) SQL Anomaly (0) 2021.07.03 (4) SQL vs NO-SQL (0) 2021.07.02 (2) Join (0) 2021.06.30 (1) Key (0) 2021.06.30