IgnatiusHeo
설계단계 보안설계기준-웹 서비스 요청 및 결과 검증 본문
작성일: 230623
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(64~70p)
유형 | 입력데이터 검증 및 표현 |
설계항목 | 웹 서비스 요청 및 결과 검증 |
설명 | 웹 서비스(게시판 등) 요청(스크립트 게시 등)과 응답결과(스크립트를 포함한 웹 페이지)에 대한 유효성 검증 방법 설계 및 유효하지 않은 값에 대한 처리 방법을 설계해야 한다. |
보안대책 | ① 사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 크로스 사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다. ② DB조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML인코딩 또는 크로스 사이트 스크립트 필터링을 수행한 뒤 사용해야 한다. |
연관된 구현단계 |
- 크로스사이트 스크립트 https://cryptocurrencyclub.tistory.com/113 |
가. 취약점 개요
ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 이미 보안대책에 XSS가 써져있음..........
나. 설계시 고려사항
① 사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 XSS 필터링 수행 후 사용해야한다.
→ 입력값에 대해 필터링 또는 인코딩 정책을 적용하는 공통코드를 작성하여 웹 컨테이너, 또는 MVC 프레임워크에 적용한다.
- 필터를 이용한 입력값 검증: 웹 컴포넌트인 Filter를 사용해 사용자 입력값에 XML필터, HTML인코딩을 적용하여 안전한 값으로 치환한 뒤 사용할 수 있도록 모든 애플리케이션에 일괄 적용한다.
- 인터셉트를 이용한 입력값 검증: MVC 프레임워크를 사용하는 경우 Interceptor 컴포넌트를 사용하여 입력값에 대한 XSS 공격 패턴의 문자열 포함 여부를 검사하여 요청을 차단/허용하는 정책을 모든 애플리케이션에 일괄 적용한다.
- 라이브러리 또는 Validator 컴포넌트를 이용한 입력값 검증: 공통코드로 입력값을 검증하는 Validator 컴포넌트를 작성하여 XSS 공격패턴의 사용자 입력값을 필터링 할 수 있도록 설계한다.
→ 스크립트 유형으로 입력 데이터가 원천적으로 실행되지 않게 입력 데이터에 디폴트로 특정 형식이 추가되도록 설계하던가, 필터링을 쓰던가 하면 될듯함
② DB조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML인코딩 또는 크로스 사이트 스크립트 필터링을 수행한 뒤 사용해야 한다.
- View 컴포넌트에서 출력값에 대해 HTML 인코딩 적용: View 컴포넌트에서 사용자 입력값을 동적으로 생성되는 응답페이지에 사용하는 경우 XSS 필터 또는 HTML 인코딩을 적용하여 코드를 작성하도록 시큐어코딩 규칙을 정의한다.
- DB조회 결과값에 대한 XSS 필터 적용: DB조회 결과값으로 응답페이지를 생성하는 경우 XSS 필터를 적용하여 사용해야 한다. DB에서 읽어오는 데이터도 외부 입력값의 범위에 포함시켜, 응답페이지에 출력하기 전에 반드시 검증작업을 수행해야 한다. (프레임워크 컴포넌트로 일괄 필터링하는게 쉽지 않으므로 시큐어코딩 규칙을 정의한다)
→ 응답값도 외부 입력값에 포함한다는건 생각도 못했는데 맞말이네.
다. 진단 세부사항
① 사용자 입력값을 동적 생성 응답페이지에 사용하는 경우 XSS 필터링을 수행 후 사용해야 하며 사용자 입력값에 스크립트의 포함 여부를 검증하도록 설계하고 있는지 확인한다.
ㅇ XSS 필터 컴포넌트 설계 확인
→ 외부라이브러리를 사용하는 경우 안전한 필터링 가능 여부 확인
→ XSS필터 생성 시 필터링 규칙이 안전한 화이트리스트 정책이 적용되도록 설계되었는지 확인
ㅇ 외부입력값에 대한 XSS 필터링 방법이 정의되어 있는지 아키텍처설계서 등에서 확인
→ Filter 사용: 필터링 적용 대상이 웹서버 설정파일에 정확히 정의되어 있는지 확인
→ 개별 프로그램에서 입력값 필터링 수행: 필터링 코딩 규칙이 개발 가이드에 정의되어 있는지 확인
→ 개별 프로그램에서 출력값에 대해 필터링 수행: 필터링 코딩 규칙이 개발 가이드에 정의되어 있는지 확인
ㅇ XSS 발생 가능한 입력값에 대한 필터링 적용 여부 확인
→ <IMG SRC=”javascript:alert(‘XSS’);”> , <IMG “””><SCRIPT>alert(“XSS”)</SCRIPT>”> , <IMG SRC=”jav
ascript:alert(‘XSS’);”> 등
② DB조회결과를 동적 생성 응답페이지에 사용하는 경우 HTML인코딩 또는 XSS 필터링 수행 후 사용해야 하며 외부 입력값이 사용되는 경우 사용자 입력값에 스크립트 포함 여부를 검증하도록 설계하고 있는지 확인한다.
ㅇ XSS 필터 컴포넌트 설계 확인
→ 외부라이브러리를 사용하는 경우 안전한 필터링 가능 여부 확인
→ XSS필터 생성 시 필터링 규칙이 안전한 화이트리스트 정책이 적용되도록 설계되었는지 확인
ㅇ DB조회결과를 응답페이지 생성에 사용 시, XSS필터 또는 HTML 인코딩을 적용하여 응답페이지를 생성하도록 코딩 규칙이 개발가이드에 정의되어 있는지 확인
ㅇ DB조회의 결과값에 대해 XSS필터링이 적용되어 안전한 값만 응답에 사용되는지 점검하기 위한 테스트 계획이 수립되어 있는지 확인
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
설계단계 보안설계기준-HTTP 프로토콜 유효성 검증 (0) | 2023.06.23 |
---|---|
설계단계 보안설계기준-웹 기반 중요 기능 수행 요청 유효성 검증 (0) | 2023.06.23 |
설계단계 보안설계기준-시스템 자원 접근 및 명령어 수행 입력값 검증 (0) | 2023.06.23 |
설계단계 보안설계기준-디렉토리 서비스 조회 및 결과 검증 (0) | 2023.06.22 |
설계단계 보안설계기준-XML 조회 및 결과 검증 (0) | 2023.06.22 |