IgnatiusHeo
설계단계 보안설계기준-HTTP 프로토콜 유효성 검증 본문
작성일: 230623
※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.
정리 내용: 소프트웨어 보안약점 진단 가이드(76~80p)
유형 | 입력데이터 검증 및 표현 |
설계항목 | HTTP 프로토콜 유효성 검증 |
설명 | 비정상적인 HTTP헤더, 자동연결 URL 링크 등 사용자가 원하지 않은 결과를 생성하는 HTTP 헤더,응답결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다. |
보안대책 | ① 외부입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다. ② 외부입력값이 페이지 이동(리다이렉트, 포워드)을 위한 URL로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL 목록의 선택자로 사용되도록 해야 한다. |
연관된 구현단계 |
- HTTP 응답분할 https://cryptocurrencyclub.tistory.com/122 - 신뢰되지 않은 URL주소로 자동접속 연결 https://cryptocurrencyclub.tistory.com/116 |
가. 취약점 개요
ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: ①에 이미 HTTP 응답분할 적혀있고.. ②를 생각하면 미인가 페이지로 리디렉션하여 정보 탈취???
- HTTP 응답분할: 공격자가 HTTP 요청에 삽입한 인자 값이 HTTP 응답헤더에 포함되어 사용자에게 다시 전달될 때
개행문자를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드가 주입되어 XSS공격 등이 가능해진다.
- 신뢰되지 않은 URL로 자동 접속연결: 사용자의 입력값을 외부 사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램에서는 공격자가 사용자를 피싱(Phishing)사이트 등 위험한 URL으로 접속하도록 유도할 수 있게 된다.
→ 공부 시작한 이래 처음으로 공격자가 희생자에 직접 접근하는 케이스인듯
나. 설계시 고려사항
① 외부 입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다.
→ \r \n 문자는 HTTP응답에서 헤더/바디의 구분자로 사용되기 때문에 HTTP응답 헤더에 삽입되는 외부입력값은 반드시 \r \n 문자를 제거하여 사용할 수 있도록 시큐어코딩 규칙을 정의한다. 프로그램에서 Cookie 설정, 응답 헤더 설정, 페이지 리다이렉트를 위한 Location정보 삽입 등 응답헤더에 외부 입력값이 삽입되는 경우 HTTP 응답 분할을 일으킬 수 있는 문자를 필터링하도록 검증절차를 적용한다.
② 외부입력값이 페이지 이동(리다이렉트 또는 포워드)을 위한 URL로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL목록의 선택자로 사용되도록 해야 한다.
→ 페이지 이동을 허용하는 URL목록을 소스코드에 하드코딩 하거나, 설정파일에 저장하여 허용된 URL로만 이동할 수 있도록 설계한다.
다. 진단 세부사항
① 외부입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다. 외부 입력값이 쿠키 또는 HTTP 헤더에 포함되는 경우, 사용자 입력값을 필터링하도록 설계하고 있는지 확인한다.
ㅇ 응답헤더에 값을 쓰는 기능이 식별되고, 입력값에 포함된 개행문자를 필터링 하는 기능이 설계되어 있는지 확인
→ 함수 예: setHeader, addCookie, sendRedirect 등
→ 개행문자: CR(\r) LF(\n)
ㅇ 개행문자에 대한 필터링 적용방법에 따라 안전하게 적용되었는지 확인
→ 필터컴포넌트를 이용하여 공통적용하는 경우: 입력값이 헤더에 포함되는 모든 기능에 안전하게 적용되었는지 확인
→ 각 기능에서 필터기능을 사용하는 경우: 코딩규칙을 개발 가이드에 적용하고 있는지 확인
ㅇ 응답분할이 발생 가능한 입력값을 사용하여 응답분할이 발생되는지 점검할 수 있는 테스트 계획 수립 여부 확인
→ 입력값 예: CR(\r) LF(\n)
② 외부입력값이 페이지 이동(리다이렉트, 포워드)을 위한 URL로 사용되어야 하는 경우, 해당값은 시스템에서 허용된 URL 목록의 선택자로 사용되도록 해야 하며, 페이지가 이동할 URL을 사전에 정의하는지 확인한다.
ㅇ 시스템에서 이동이 허용된 도메인이나 주소 목록의 정의 여부 확인
ㅇ 페이지 이동 기능 설계에, 미리 정의한 허용 목록을 이용한 입력값을 검증하는 방법과 모듈의 설계 여부 확인
ㅇ 외부 입력값을 조작하여 의도된 페이지로 리다이렉트 되는지 점검할 수 있는 테스트 계획의 수립 여부 확인
→ 테스트 값 예: 임의 URL 주소
끝.
'자격 > SW보안약점진단원' 카테고리의 다른 글
설계단계 보안설계기준-보안기능 입력값 검증 (0) | 2023.06.27 |
---|---|
설계단계 보안설계기준-허용된 범위내 메모리 접근 (0) | 2023.06.27 |
설계단계 보안설계기준-웹 기반 중요 기능 수행 요청 유효성 검증 (0) | 2023.06.23 |
설계단계 보안설계기준-웹 서비스 요청 및 결과 검증 (0) | 2023.06.23 |
설계단계 보안설계기준-시스템 자원 접근 및 명령어 수행 입력값 검증 (0) | 2023.06.23 |