본문 바로가기
소프트웨어(SW) 보안약점 진단원/설계단계 보안설계 기준

설계단계 보안설계 기준 - 웹 서비스 요청 및 결과 검증

by 브루노W 2024. 8. 22.
유형 입력데이터 검증 및 표현
설계항목 웹 서비스 요청 및 결과 검증
설명 웹 서비스(게시판 등) 요청(스크립트 게시 등)과 응답결과(스크립트를 포함한 웹 페이지)에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
보안대책 ① 사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.
② DB 조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML 인코딩 또는 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.
연관된 구현단계 기준 크로스사이트 스크립트 

 

취약점 개요

 

사례1 : 외부 입력값을 검증 없이 응답페이지 생성에 사용하는 경우

웹 페이지에 악의적인 스크립트가 포함될 수 있으며, 해당 웹페이지를 열람하는 접속자의 권한으로 부적절한 스크립트가 실행되어 정보 유출 등의 공격을 유발할 수 있다.

 

 

사례2 : DB에 저장된 값을 검증 없이 응답페이지 생성에 사용하는 경우

공격자가 미리 취약한 서버에 악의적인 스크립트가 포함된 정보를 저장해서 일반 사용자들이 해당 정보를 조회하는 경우 접속자의 권한으로 부적절한 스크립트가 수행되어 정보 유출 등의 공격을 유발할 수 있다.

 

 

 

설계 시 고려사항

 

사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.

입력값에 대해 필터링 또는 인코딩 정책을 적용하는 공통코드를 작성하여 웹 컨테이너 또는 MVC 프레임워크에 적용한다.

 

(ㄱ) 필터를 이용한 입력값 검증

웹 컴포넌트인 Filter를 사용하여 사용자의 입력값에 대해 XSS 필터나 HTML 인코딩을 적용하여 안전한 값으로 치환한 뒤 모든 애플리케이션에 일괄 적용한다.

 

(ㄴ) 인터셉트를 이용한 입력값 검증

MVC 프레임워크를 사용하는 경우 Interceptor 컴포넌트를 사용하여 사용자의 입력값에 대해 XSS 공격 패턴의 문자열이 포함되었는지를 검사하여 요청을 차단 또는 허용하는 정책을 모든 애플리케이션에 일괄 적용한다.

 

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

공통코드로 입력값을 검증하는 Validator 컴포넌트를 작성하여 XSS 공격패턴의 사용자 입력값을 필터링할 수 있도록 설계한다.

 

 

DB 조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML 인코딩 또는 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.

각각의 컴포넌트에서 출력값에 대해 XSS 필터 또는 HTML 인코딩을 적용하여 인전한 값만 응답에 사용한다.


(ㄱ) View 컴포넌트에서 출력값에 대해 HTML 인코딩 적용

View 컴포넌트에서 사용자 입력값을 동적으로 생성되는 응답페이지에 사용하는 경우 XSS 필터 또는 HTML 인코딩을 적용하여 코드를 작성하도록 시큐어코딩 규칙을 정의한다.

 

(ㄴ) DB 조회 결과값에 대한 XSS 필터 적용

DB 조회 결과값으로 응답페이지를 생성하는 경우 XSS 필터를 적용하여 사용해야 한다.

DB에서 읽어오는 데이터도 외부 입력값의 범위에 포함시켜 응답페이지에 출력하기 전에 반드시 검증작업을 수행해야 한다.

 

※ XSS 방어를 위한 라이브러리 및 클래스

MS Anti-XSS 라이브러리, MS AntiXSSEncoder 클래스, HTML Sanitizer 라이브러리 (ASP.NET)

LUCY XSS Filter, OWASP ESAPI XSS 필터 (Java)

HTML Purifier 라이브러리 (PHP)

 

 

진단 세부사항

 

요구사항 ① 사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.

- 외부 입력값에 포함된 XSS 공격코드를 안전하게 필터링할 수 있도록 보안설계가 적용되어 있는지 확인

- 입력값에 대한 XSS 필터링이 안전하게 수행되는지 점검하는 테스트 계획이 수립되어 있는지 확인

 . 테스트입력 값 : 필터를 우회할수 있는 입력값 사용

<IMG SRC="javascript:alert('XSS');">
<IMG """><SCRIPT>alert("XSS")</SCRIPT>"\>
<a href="jav   ascript:alert('XSS');">Click Me</a>

※ https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html 문서참조

 

요구사항 ② DB 조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML 인코딩 또는 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.

- DB 조회 결과에 포함된 XSS 공격코드를 안전하게 필터링할 수 있도록 보안설계가 적용되어 있는지 확인

- DB 조회 결과에 대한 XSS 필터링이 안전하게 수행되는지 점검하는 테스트 계획이 수립되어 있는지 확인