IgnatiusHeo

설계단계 보안설계기준-HTTP 프로토콜 유효성 검증 본문

자격/SW보안약점진단원

설계단계 보안설계기준-HTTP 프로토콜 유효성 검증

Ignatius Heo 2023. 6. 23. 03:22

작성일: 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 프로토콜 관련 위협 유형(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

  →  공부 시작한 이래 처음으로 공격자가 희생자에 직접 접근하는 케이스인듯

 

나. 설계시 고려사항

 

① 외부 입력값을 쿠키 및 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 주소

 

 

끝.