티스토리 뷰
가. 취약점 개요
- 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번과 통합 |
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[설계보안] 입력데이터 검증 및 표현 06 - 웹 기반 중요기능 수행요청 유효성 검증 (0) | 2019.09.22 |
---|---|
[설계보안] 입력데이터 검증 및 표현 05 - 웹 서비스 요청 및 결과 검증 (0) | 2019.09.22 |
[설계보안] 입력데이터 검증 및 표현 04 - 시스템 자원 접근 및 명령어 수행 입력값 검증 (0) | 2019.09.19 |
[설계보안] 입력데이터 검증 및 표현 03 - 디렉터리 서비스 조회 및 결과 검증 (0) | 2019.09.18 |
[설계보안] 입력데이터 검증 및 표현 02 - XML 조회 및 결과 검증 (0) | 2019.09.18 |
- Total
- Today
- Yesterday