유형 | 입력데이터 검증 및 표현 |
설계항목 | HTTP 프로토콜 유효성 검증 |
설명 | 비정상적인 HTTP 헤더, 자동연결 URL 링크 등 사용자가 원하지 않은 결과를 생성하는 HTTP 헤더, 응답결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다. |
보안대책 | ① 외부 입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다. ② 외부 입력값이 페이지 이동(리다이렉트 또는 포워드)을 위한 URL으로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL 목록의 선택자로 사용되도록 해야 한다. |
연관된 구현단계 기준 | 신뢰되지 않는 URL 주소로 자동접속 연결 HTTP 응답분할 |
취약점 개요
사례1 : HTTP 응답분할
공격자가 HTTP 요청에 삽입한 인자 값이 HTTP 응답헤더에 포함되어 사용자에게 다시 전달될 때 개항문자를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드가 주입되어 XSS 공격 등이 가능해진다.
사례2 : 신뢰되지 않은 URL로 자동 접속연결
사용자의 입력값을 외부 사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램에서는 공격자가 사용자를 피싱(Phishing) 사이트 등 위험한 URL으로 접속하도록 유도할 수 있게 된다.
설계 시 고려사항
① 외부 입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다.
HTTP 응답헤더에 삽입되는 외부 입력값(Cookie 설정, 응답헤더 설정, 페이지 리다이렉트를 위한 Location 정보 삽입 등)은 반드시 \r\n 문자를 제거하여 사용할 수 있도록 시큐어코딩 규칙을 정의한다.
* \r\n 문자는 HTTP 응답에서 헤더와 바디를 구분하는 구분자로 사용
② 외부 입력값이 페이지 이동(리다이렉트 또는 포워드)을 위한 URL으로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL 목록의 선택자로 사용되도록 해야 한다.
페이지 이동을 허용하는 URL 목록을 소스코드에 하드코딩하거나, 설정파일(XML, properties)에 저장하여 허용된 URL로만 이동할 수 있도록 설계한다.
진단 세부사항
요구사항 ① 외부 입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다.
- HTTP 응답분할이 발생하지 않도록 입력값에 대한 검증을 수행되도록 설계되어 있는지 확인
. 응답헤더에 값을 쓰는 함수 예 : setHeader, addCookie, sen-dRedirect, .. 등
. 개행문자: CR(\r) LF(\n)
- HTTP 응답분할 취약점을 점검할 수 있는 테스트 계획이 수립되어 있는지 확인
. 테스트 입력값 예 : CR(\r) LF(\n) 이 포함된 입력값 사용
요구사항 ② 외부 입력값이 페이지 이동(리다이렉트 또는 포워드)을 위한 URL으로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL 목록의 선택자로 사용되도록 해야 한다.
- 입력값을 페이지 이동을 위한 URL로 직접 사용하는 프로그램 설계 시, 오픈 리다이렉트 취약점이 발생하지 않도록 설계되어 있는지 확인
- 오픈 리다이렉트 취약점을 점검하는 테스트 계획이 수립되어 있는지 확인
. 테스트 입력값 예 : 임의의 URL 주소
'소프트웨어(SW) 보안약점 진단원 > 설계단계 보안설계 기준' 카테고리의 다른 글
설계단계 보안설계 기준 - 보안기능 입력값 검증 (0) | 2024.08.23 |
---|---|
설계단계 보안설계 기준 - 허용된 범위 내 메모리 접근 (0) | 2024.08.23 |
설계단계 보안설계 기준 - 웹 기반 중요 기능 수행 요청 유효성 검증 (0) | 2024.08.22 |
설계단계 보안설계 기준 - 웹 서비스 요청 및 결과 검증 (0) | 2024.08.22 |
설계단계 보안설계 기준 - 시스템 자원 접근 및 명령어 수행 입력값 검증 (0) | 2024.08.21 |