티스토리 뷰

반응형

 

 

 

가. 취약점 개요

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

   → SQL삽입

 

 

나. 요구사항

1. 최소권한의 계정사용

2. 동적 SQL문을 생성 및 사용하지 않음

3. 동적 SQL 사용 시 입력값 검증

 

 

다. 요구사항 별 고려사항

1. 최소 권한의 계정사용

  - 침해사고가 발생하더라도 다른 애플리케이션에 대해 공격자가 액세스 권한을 가지지 않도록 방지

 

2. 동적 SQL문을 생성 및 사용하지 않음

  - ORM프레임워크를 사용하여 안전한 정적쿼리구조의 SQL문을 수행

  - 외부입력값에 의해 쿼리문의 구조가 변경되지 않도록 입력값을 바인딩 처리

 

3. 동적 SQL 사용 시 입력값 검증

  - 서블릿 필터를 이용한 입력값 검증

  - 인터셉트를 이용한 입력값 검증

  - 라이브러리 또는 Validator 컴포넌트를 이용한 입력값 검증

 

 

라. 요구사항 별 진단기준 및 방법

0. 공통내용

  - 요구사항 정의서에 보안요구항목에 대한 대책이 수립

  - 아키텍쳐 설계서에 보안요구항목 적용계획이 수립

  - 요구사항 추적표를 통해 요구사항 추적가능 여부

 

1. 최소권한의 계정사용

  - 애플리케이션 별 DB연결 계정 할당과 해당 계정에 대한 최소 권한 할당 여부 확인

 

2. 동적 SQL문을 생성 및 사용하지 않음

  - 안전한 쿼리 실행환경을 제공할 수 있는 ORM 프레임워크와 같은 프레임워크 사용여부 확인

  - iBatis/MyBatis 사용 시 #{변수} 사용 정의 확인

  - PreparedStatement와 같은 정적 쿼리를 수행하는 API 사용 정의 확인

  - 특수문자( ', ", =, &, |, !, [, ], {, }, $, %, @ 등) 입력값 테스트

  - 예약어( union, select, then, if, instance, end, column 등) 입력값 테스트

  - 함수명( database, concat, count, lower 등) 입력값 테스트

 

3. 동적 SQL 사용 시 입력값 검증

  - SQL 필터링 기능 설계

  - DB접근을 수행하는 모든 기능에 적용되도록 설계 

  - 특수문자( ', ", =, &, |, !, [, ], {, }, $, %, @ 등) 입력값 테스트

  - 예약어( union, select, then, if, instance, end, column 등) 입력값 테스트

  - 함수명( database, concat, count, lower 등) 입력값 테스트

 

 

마. 진단기준

1. 최소권한의 사용계정

  - 애플리케이션 별 최소권한의 DB접속 계정이 할당되었는지 여부

  - 설정된 사용자 권한 이외의 요청에 대해 차단되었는지의 테스트 계획 확인

 

2. 동적 SQL문을 생성 및 사용하지 않음

  - DB 데이터 처리기능 구현 시, 외부 입력값이 쿼리의 구조에 영향을 미치지 않도록 보안설계 되었는지 확인

  - 입력값이 DB쿼리의 구조를 변경시키는지의 테스트 계획 확인

 

3. 동적 SQL 사용 시 입력값 검증

  - 외부 입력값을 이용한 동적 쿼리 구현 시, 입력값을 필터링하는지 확인

  - 입력값이 DB쿼리의 구조를 변경시키는지의 테스트 계획 확인

 

 

바. 안전한 보안설계 예

No 요구사항 명 해결방안 검수기준 비고
1 DB 사용자 계정에 최소권한 부여 애플리케이션에서 사용하는 DB 사용자 계정은 애플리케이션에 서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용권한을 부여 애플리케이션에서 사용하는 DB 사용자 계정은 해당 애플리케이션에서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용 권한이 적용 지속적인 DB 사용자 계정관리가 필요
2 정적 SQL 사용 모든 쿼리는 정적으로 실행되도록 한다. 외부 입력값을 QueryMap에 바인딩할 경우에는 #을 이용하도록 개발가이드에 명시하고, 교육을 통해 개발자에게 전파시킨다. 정적분석을 통해 지속적인 검사 필요
3 동적 SQL 사용 시 입력값 검증 아키텍쳐 정의에 따라 모든 쿼리는 MyBatis 프레임워크의 쿼리맵을 통해서 정의, 실행한다. 이때 변수 바인딩은 2번에 따라 #을 사용 해당없음 2번과 통합

 

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday