소프트웨어 보안약점 진단가이드
2021.11 개정안 기준으로 작성
- 이후 내용이 수정될 수 있습니다.
[항목]
- XML 조회 및 결과 검증
[유형]
- 입력데이터 검증 및 표현
[기준]
- XML 조회시 질의문(XPath, XQuery 등) 내 입력값과 그 조회결과에 대한
유효성 검증방법(필터링 등)과 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
[보안 대책]
- XML문서를 조회하는 기능을 구현해야 하는 경우
XML질의문에 사용되는 파라미터는 반드시
XML쿼리를 조작할 수 없도록 필터링해서 사용하거나,
미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다.
[구현단계 관련 보안약점]
- 입력 데이터 검증 및 표현 > XML 삽입
- 입력 데이터 검증 및 표현 > 부적절한 XML 외부개체 참조
취약점 개요: XML 삽입
XML 문서를 조회할 경우 입력값 조작으로
XQuery나 XPath와 같은 XML 질의문의 구조를 임의로 변경하여
허가되지 않은 데이터를 조회하거나 인증절차를 우회할 수 있다.
설계 시 고려사항(보안 대책)
보안 대책의 세부 내용 입니다.
1. XML문서를 조회하는 기능을 구현해야 하는 경우
XML질의문에 사용되는 파라미터는 반드시
XML쿼리를 조작할 수 없도록 필터링해서 사용하거나,
미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다.
[고려사항]
1. 공통 검증 컴포넌트를 이용한 입력값 필터링
- 외부입력값에서 XML삽입 공격이 가능한 문자열들을 필터링하는
Validator 컴포넌트를 개발하여 XML조회를 수행하는 애플리케이션 작성시
입력값에 대한 검증 작업이 일괄 적용되도록 설계한다.
2. 필터 컴포넌트를 이용한 입력값 필터링
- Filter컴포넌트에서
XML 삽입 공격에 활용될 수 있는 입력값(“, [, ], /, =, @)을
필터링하도록 작성하여
전체 요청 또는 XML필터링이 요구되는 요청에 대해
프레임워크에서 일괄 적용하도록 설계한다.
3. 개별 코드에서 입력값 필터링하도록 시큐어코딩 규칙 정의
- 각각의 컴포넌트에서
입력값에 대해 XML삽입을 발생시킬 수 있는 문자열(“, [, ], /, =, @ 등)을
제거 또는 안전하게 치환하여 사용할 수 있도록
시큐어코딩 규칙을 정의한다.
4. 안전한 API를 사용하도록 시큐어코딩 규칙 정의
- XML 조회를 수행하는 질의문 작성 시
외부입력값이 질의문의 구조를 바꿀 수 없는 API(예. Java API‐ XQuery)를
사용하도록 시큐어코딩 규칙을 정의한다.
진단 기준 및 방법
요구사항 1
XML문서를 조회하는 기능을 구현해야 하는 경우
XML질의문에 사용되는 파라미터는
반드시 XML질의문을 조작할 수 없도록 필터링해서 사용하거나,
미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다.
- XML 조회를 위한 질의문(XPath, XQuery 등) 생성 시
사용되는 입력값과 조회결과에 대한 검증방법(필터링 등)을 설계하고
유효하지 않은 값에 대한 처리방법이 명시되어 있는지 확인한다.
[ 진단 방법 ]
1. 외부 입력값이 XML 데이터 조회에 사용되는 경우,
입력값이 조회 구문을 변경하지 않도록 보안 설계가 적용되어 있는가?
1-1 요구사항정의서에 설계항목에 대한 대책이 수립되어 있으며,
아키텍처 설계서에 설계항목 적용계획이 수립되어 있고,
요구사항추적표로 요구 사항 추적 가능 여부 확인
- 산출물 검토 예시: 요구사항정의서, 요구사항추적표, 아키텍처설계서 검토
1-2 XML조회에 사용되는 외부 입력값을
안전하게 필터링하는 기능이 설계 되어 있거나
안전한 외부라이브러리를 사용하도록 설계되어 있는지 확인
- 산출물 검토 예시: 프로그램명세서, 컴포넌트설계서, 유즈케이스설계서, 클래스설계서 등에서 필터링 기능 검토
1-3 XML데이터를 조회하는 기능 구현시,
XML필터링을 적용하기 위한 코딩규칙이나
안전하게 사용할 수 있는 API에 대한 설명이
개발가이드에 정의되어 있는지 확인
- 산출물 검토 예시: 개발가이드에서 코딩규칙 검토
2. XML삽입 취약점을 점검할 수 있는
테스트 계획이 수립되어 있는가?
2-1 XML조회 구문을 변경할 수 있는 입력값을 사용하여
XML조회 구문이 변경 되는지를 점검하는
테스트계획이 수립되어 있는지 확인
[테스트 입력값]
- 쿼리예약어, “, [, ], /, =, @ 등
- 산출물 검토 예시: 단위테스트케이스 검토
관련 산출물
- 요구사항정의서, 요구사항추적표, 아키텍처설계서, 프로그램명세서, 컴포넌트설계서, 유즈케이스 설계서, 클래스설계서, 단위테스트계획서 등