가. 취약점 개요
사례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에서 읽어오는 데이터도 외부 입력값의 범위에 포함시켜, 응답페이지에 출력하기 전에 반드시 검증작업을 수행해야 한다.분석 ․ 설계단계 보안항목 진단 DB에서 읽어온 값에 대한 검증작업을 프레임워크의 컴포넌트로 일괄 필터링하는 것이 쉽지 않다. 이 경우 각 개발자들은 출력값에 대해 검증 작업을 수행하도록 시큐어코딩 규칙을 정의한다. HTML, URL 등의 문자를 인코딩 및 필터링하여 XSS 취약점을 최소화할 수 있도록 [표 3-8]과 같은 라이브러리의 사용을 고려할 수 있다.
[테스트 문제]
문제: 웹 컴포넌트인 Filter를 사용하여 사용자의 입력값에 대해 XSS 필터나 HTML인코딩을 적용하여 안전한 값으로 치환한 뒤 사용할 수 있도록 일부 애플리케이션에 적용한다.
정답: X
해설: 웹 컴포넌트인 Filter를 사용하여 사용자의 입력값에 대해 XSS 필터나 HTML인코딩을 적용하여 안전한 값으로 치환한 뒤 사용할 수 있도록 모든 애플리케이션에 일괄 적용한다.
문제: 보안대책을 서술하시오.
정답:
1. XSS 필터링, HTML 인코딩 필터링
2. MVC 프레임워크를 사용하는 경우 Interceptor 컴포넌트 이용하여 입력값 검증
3. Filter 컴포넌트, Validator 컴포넌트를 이용하여 입력값 검증
문제: 빈칸을 채우시오.
① 사용자로부터 입력받은 값을 동적으로 생성되는 응답페이지에 사용하는 경우 크로스사이트 스크립트(XSS) (ㄱ)을 수행한 뒤 사용해야 한다.
입력값에 대해 (ㄱ) 또는 (ㄴ) 정책을 적용하는 공통코드를 작성하여 웹 컨테이너, 또는 (ㄷ)에 적용한다.
1. 필터를 이용한 입력값 검증
웹 컴포넌트인 (ㄹ)를 사용하여 사용자의 입력값에 대해 (ㅁ)나 (ㅂ)을 적용하여 안전한 값으로 (ㅅ)한 뒤 사용할 수 있도록 모든 애플리케이션에 일괄 적용한다.
2. 인터셉트를 이용한 입력값 검증
(ㄷ)를 사용하는 경우 (ㅇ)를 사용하여 사용자의 입력값에 대해 XSS 공격 패턴의 문자열이 포함되었는지를 검사하여 요청을 차단 또는 허용하는 정책을 모든 애플리케이션에 일괄 적용한다.
3. 라이브러리 또는 (ㅈ)를 이용한 입력값 검증
공통코드로 입력값을 검증하는 (ㅈ)를 작성하여 XSS 공격패턴의 사용자 입력값을 필터링 할 수 있도록 설계한다.
② DB조회결과를 동적으로 생성되는 응답페이지에 사용하는 경우 HTML인코딩 또는 크로스사이트 스크립트(XSS) 필터링을 수행한 뒤 사용해야 한다.
각각의 컴포넌트에서 출력값에 대해 XSS필터 또는 HTML인코딩을 적용하여 안전한 값만 응답에 사용한다.
정답
ㄱ: 필터링
ㄴ: 인코딩
ㄷ: MVC 프레임워크
ㄹ: Filter
ㅁ: XSS필터
ㅂ: HTML 인코딩
ㅅ: 치환
ㅇ: Interceptor 컴포넌트
ㅈ: Validator 컴포넌트