보안/SW보안약점 진단원

[설계보안] DBMS 조회 및 결과 검증

re-bugger 2022. 6. 22. 15:44

분류: 입력데이터 검증 및 표현 

가. 항목명

DBMS 조회 및 결과 검증

나. 취약점 설명

SQL 질의문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안 취약점

다. 보안대책

① DB연결을 수행할 때 최소권한의 계정을 사용

② SQL 질의문을 동적으로 생성해서 실행하지 않도록 방지

③ (동적 SQL질의문 생성이 필요한 경우) 입력값에 대한 검증을 수행한 후 사용

라. 설계시 고려사항

① 애플리케이션에 DB연결 시 최소권한의 계정을 사용한다.

  • 취약한 애플리케이션으로 인해 침해사고 발생하더라도 나머지 부분에 대해 공격자가 액세스 권한을 가지지 못하도록 설계

② 외부 입력값 삽입 되는 SQL 질의문을 동적으로 생성하지 않도록 방지

  • ORM 프레임워크를 사용하여 안전한 정적쿼리 구조로 SQL문을 수행하도록 설계하거나 ORM 제공함수를 활용하여 외부입력 값에 의해 SQL 질의문의 구조가 변경되지 않도록 한다.

③ (동적 SQL질의문 생성이 필요한 경우) 입력값에 대한 검증을 수행한 후 사용

  • 필터를 이용한 입력값 검증
    • SQL 삽입이 가능한 문자열들을 필터링하여 안전한 값으로 치환
  • 인터셉트를 이용한 입력값 검증
    • 인터셉트 컴포넌트를 사용하여 입력값에 대한 검증 작업을 수행 및 일괄 적용         
  • 라이브러리 또는 Validator 컴포넌트를 이용한 검증
    • Validator 컴포넌트를 공통코드로 생성하고 모든 개발자가 SQL질의문 삽입되는 입력값에 대한 검증을 해당 컴포넌트에서 수행하도록 규칙 정의

마. 진단기준 및 세부사항

① 최소권한의 계정을 사용

  • 애플리케이션별 DB연결 계정할당과 해당 계정에 대한 최소 권한 할당여부 확인
  • DB연결 계정의 권한 외 요청이 차단되는지를 점검할 수 있는 테스트 계획 수립 여부 확인

② 외부 입력값 삽입 되는 SQL 질의문을 동적으로 생성하지 않도록 방지

  • 안전한 쿼리 실행환경 제공할 수 있는 ORM 프레임워크와 같은 프레임 워크 사용여부 확인
  • 안전한 정적 쿼리 코딩 방법을 정의하는지 확인
    • ibatis, mybatis  사용시  #{변수} 사용정의
    • PreparedStatement와 같은 정적 쿼리를 수행하는 API 사용 정의
  • 테스트 입력 값에 대한 입력값이 DB쿼리의 구조를 변경시키는지 점검하기 위한 테스트 계획 수립 여부 확인
    • 특수문자(', "", =, &, |, !, (, ), {, }, $, %, @ ㄷ등)
    • 예약어(UNION, SELECT, THEN, IF, INSTANCE, END, COLUMN 등)
    • 함수명(DATABASE(), CONCAT(), COUNT(), LOWER() 등)

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

  • SQL 필터링 기능이 설계되어 있거나 외부 라이브러리를 사용하는지 확인                         
  • SQL 필터링 적용방법이 공통 적용으로 되어있는지 확인
  • 테스트 입력 값에 대한 입력값이 DB쿼리의 구조를 변경시키는지 점검하기 위한 테스트 계획 수립 여부 확인
    • 특수문자(', "", =, &, |, !, (, ), {, }, $, %, @ ㄷ등)
    • 예약어(UNION, SELECT, THEN, IF, INSTANCE, END, COLUMN 등)
    • 함수명(DATABASE(), CONCAT(), COUNT(), LOWER() 등)

바. 안전한 보안설계의 예

No 요구사항명 해결방안 검수기준 비고
1 DB사용자 계정에 최소권한 부여 애플리케이션에서 사용하는 DB 사용자 계정은 애플리케이션에서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용권한을 부여한다 애플리케이션에서 사용하는 DB사용자 계정은 테이블, 뷰, 프로시저에 대한 권한만 적용된다. 지속적인 DB사용자 계정 관리가 필요