SQL Injection 공격

SQL Injection

SQL Injection은 OWASP Injection 공격 중 한 형태로, RDBMS(관계형 데이터베이스)에서 나올 수 있는 공격입니다. 

=> OWASP는 The Open Web Application Security Project의 약자로, 오픈소스 웹 애플리케이션 보안 프로젝트입니다.

=> 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며 10대 웹 애플리케이션의 취약점을 발표합니다.

=> Oracle/Mysql/MSSQL/ProstgreSQL...

[SQL Injection 종류]

▷ Boolean Based SQL Injection: 쿼리 요청 시 응답 값의 참/거짓 반응을 통해 DB 결과 조회

Error Based SQL Injection: 쿼리 실행 시 오류나 예기치 않은 예외 상황이 발생될 때 클라이언트 측에서 DB 정보가 노출되는 공격

Time Based SQL Injection: DB 시간 관련 함수를 활용해 참과 거짓 반응을 통해 DB 결과 조회

 

No SQL Injection은 관계형 데이터베이스가 아닌 데이터베이스에서 나올 수 있는 공격입니다.

=> MongoDB/Redis/...
그외에도 OS(command) Injection, LDAP Injection, Server Side Include , XPath Injection이 있습니다.

 

취약점 설명

특정 페이지나 기능 사용 시 입력 값에 대한 DB 쿼리 유효성 검증을 하지 않아 DB 쿼리가 조작되어 공격자가 의도한 대로 행도하도록 하는 취약점

=> DB 내 주요 정보 유출(개인정보 등)

=> DB 내 데이터 수정/삭제

=> 인증 우회

 

공격포인트

게시판 view/write/edit 시 DB의 쿼리에 포함되는 파라미터 값

첨부파일 다운로드 시 DB 쿼리에 포함되는 파라미터 값

 

해킹시나리오

 

공격자는 SQL Injection을 유발시키는 명령어를 입력합니다. 항상 참이 되는 값 삽입으로 DB서버의 SQL쿼리는 오류 없이 실행됩니다. 공격자는 DB의 불법적인 접근으로 원하는 값을 추출할 수 있습니다.

 

보안대책

  • 외부 입력이나 외부 변수로부터 받은 값이 직접 SQL 함수의 인자로 전달되거나, 문자열 복사를 통하여 전달되는 것은 위험하므로 인자화된 질의문을 사용
  • 자바의 경우 prepared Statement 클래수와 하위메소드 executeQuery(), execute(), executeUpdate()를 사용