본문 바로가기
공부/KISA

DBMS 조회 및 결과 검증 - KISA 소프트웨어 개발 보안 가이드

by Skogkatt의 개인 블로그 2020. 7. 8.
반응형

https://www.kisa.or.kr/public/laws/laws3.jsp

 

기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원

기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥

www.kisa.or.kr

분석∙설계단계 SW 보안강화 - 설계보안항목 정의 및 설계 시 고려 사항 - DBMS 조회 및 결과 검증 

설명

  • DBMS 조회를 위한 질의문(SQL) 생성시 사용되는 입력값과 조회 결과에 대한 검증방법(필터링 등)을 설계하고 유효하지 않은 값에 대한 처리방법을 설계해야 한다. - SQL Injection

설계항목내용

  • 애플리케이션에서 DB 연결을 수행할 때 최소 권한의 계정을 사용해야 한다.
  • 외부 입력값이 삽입되는 SQL 쿼리문을 동적으로 생성해서 실행하지 않도록 해야 한다.
  • 외부 입력값을 이용해 동적으로 SQL 쿼리문을 생성해야 하는 경우, 입력값에 대한 검증을 수행한 뒤 사용해야 한다.

가. 취약점 개요

  • 데이터베이스(DB)와 연동된 웹 응용프로그램에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우, 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안 취약점
  • 공격자가 SQL Injection과 같이 쿼리를 조작할 수 있는 문자열을 입력하여 조작된 요청을 보냈을 때, 서버가 입력값을 검증하지 않고 DB 쿼리 실행에 사용하는 경우 인가되지 않은 사용자가 DB 데이터를 무단으로 조회 또는 삭제할 수 있다.

 

나. 설계 시 고려사항

1. 애플리케이션에서 DB 연결을 통해 데이터를 처리하는 경우 최소 권한이 설정된 계정을 사용해야 한다.

  • 취약한 애플리케이션으로 인해 침해사고가 발생하더라도 나머지 부분에 대해 공격자가 액세스 권한을 가지지 않도록 애플리케이션에서 DB 연결을 위해 사용되는 계정은 해당 애플리케이션이 사용하는 데이터에 대한 읽기, 쓰기, 삭제, 업데이트 권한만 설정한다.

2. 외부 입력값이 삽입되는 SQL 쿼리문을 동적으로 생성해서 실행하지 않도록 해야 한다.

  • 쿼리문의 구조가 외부 입력값에 의해 변경되지 않는 API를 사용하도록 시큐어코딩 규칙을 지정한다.
  • ORM(Object Relation Mapping)[각주:1] 프레임워크를 사용하여 안전한 정적 쿼리 구조로 SQL문을 수행할 수 있도록 개발환경을 설정하고, 시큐어코딩 규칙을 통해 정적쿼리문(외부입력값에 의해 쿼리문의 구조가 변경되지 않는)을 사용하도록 한다.

3. 외부 입력값을 이용해 동적으로 SQL 쿼리문을 생성해야 하는 경우, 입력값에 대한 검증을 수행한 뒤 사용해야 한다.

  • 클라이언트와 서버 양측에서 입력값에 대해 안전한 값만 사용될 수 있도록 검증작업을 수행한다.
(ㄱ) 필터를 이용한 입력값 검증
  • 외부 입력값에서 SQL 삽입이 가능한 문자열들을 필터링하여 안전한 값으로 치환하도록 하는 Filter 컴포넌트를 생성하고, DB에서 관리하는 데이터를 처리하는 모든 애플리케이션에 일괄 적용한다.
(ㄴ) 인터셉트를 이용한 입력값 검증
  • MVC프레임워크를 사용하는 경우 Interceptor 컴포넌트를 사용하여 입력값에 대한 검증 작업을 수행한 뒤 요청을 차단하거나 허용하는 정책을 애플리케이션에 일괄 적용한다.
(ㄷ) 라이브러리 또는 Validator컴포넌트를 이용한 입력값 검증
  • 입력값을 검증하는 Validator 컴포넌트를 공통 코드로 생성하고, 모든 개발자가 SQL문에 삽입되는 입력값에 대해 검증작업을 해당 컴포넌트에서 수행하도록 시큐어코딩 규칙을 정의한다.
  • SQL 삽입 취약점을 최소화하고 SQL문을 안전하게 처리할 수 있도록 다음과 같은 프레임워크나 라이브러리의 사용을 고려할 수 있다.

 


참고자료

  1. 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법으로 체 지향 언어에서 사용할 수 있는 가상 객체 데이터베이스를 구축하는 방법 코딩의 반복적인 부분을 줄일 수 있고 SQL에 의존적인 코딩에서 벗어나 생산적인 코딩이 가능하며 개발 코드와 DB를 독립하므로 유지보수가 편리하여 객체지향의 의도에 부합하게 된다.[출처] [FRAMEWORK] ORM(Object Relation Mapping) 의 개념과 대표적인 ORM 프레임워크 [본문으로]
반응형

댓글