본문 바로가기

CS/데이터베이스

Injection

Injection이란, 악성 사용자가 보안상의 추약점을 이용하여 임의의 sql문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위이다. '여기어때' 홈페이지도 2017년 3월에 해당 공격을 당했다고 한다.

1. 공격 종류

① 논리적 에러

or 뒤에 있는 구문 1=1 은 항상 true인 값이다. 따라서 항상 결과를 보여주게 된다.

 

② Union 명령어

원하는 컬럼값까지 한꺼번에 보일 수 있다. 현재 id, passwd까지 같이 보이도록 인젝션했다.

 

③ Boolean based Injection

참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 db내용을 노출할 수 있다.

 

④ Time based Injection

값 뒤에 sleep() 함수를 넣어 만약 참이면 sleep 함수가 실행되고 거짓일 경우 sleep 함수가 실행되지 않도록 한다. 이를 통해 데이터베이스의 내용을 알 수 있다.

2. 대응방안

① 입력 값에 대한 검증

② prepared statement 구문 사용

사용자의 입력값이 데이터베이스의 파라미터로 들어가기 전, DBMS가 미리 컴파일하여 실행하지 않고 대기한다. 그 후 사용자의 입력값을 문자열로 인식하게 하여 공격쿼리가 들어가도 사용자의 입력은 이미 의미 없는 단순 문자열이기 때문에 쿼리문이 공격자의 의도대로 동작하지 않는다.

③ 에러 메시지 노출 금지

④ 웹 방화벽 사용

'CS > 데이터베이스' 카테고리의 다른 글

SQL vs NoSQL  (0) 2021.09.29
트랜잭션의 격리수준  (0) 2021.09.28
수직적 확장과 수평적 분할  (0) 2021.09.28
인덱스란?  (0) 2021.07.20
트랜잭션의 정의와 특징  (0) 2021.06.30