분류: 입력데이터 검증 및 표현
가. 항목명
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사용자 계정 관리가 필요 |
'보안 > SW보안약점 진단원' 카테고리의 다른 글
[설계보안] 시스템 자원 접근 및 명령어 수행 입력값 검증 (0) | 2022.06.22 |
---|---|
[설계보안] 디렉토리 서비스 조회 및 결과 검증 (0) | 2022.06.22 |
[설계보안] XML 조회 및 결과 검증 (0) | 2022.06.22 |
준비 ③ (0) | 2022.06.22 |
준비 ① (0) | 2022.06.21 |