유형 | 입력데이터 검증 및 표현 |
설계항목 | 웹 기반 중요 기능 수행 요청 유효성 검증 |
설명 | 비밀번호 변경, 결제 등 사용자 권한 확인이 필요한 중요기능을 수행할 때 웹 서비스 요청에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다. |
보안대책 | ① 시스템으로 전송되는 모든 요청에 대해 정상적인 사용자의 유효한 요청인지, 아닌지 여부를 판별할 수 있도록 해야 한다. |
연관된 구현단계 기준 | 크로스사이트 요청 위조 |
취약점 개요
공격자는 세션탈취, XSS 등으로 자신이 의도한 행위(수정, 삭제, 등록 등)를 사이트가 신뢰하는 인증된 사용자의 권한으로 실행되게 할 수 있다.
설계 시 고려사항
① 시스템으로 전송되는 모든 요청에 대해 정상적인 사용자의 유효한 요청인지, 아닌지 여부를 판별할 수 있도록 해야 한다.
(ㄱ) CSRF (Cross-Site Request Forgery) 토큰 사용
정상적인 요청인지 확인하기 위해 세션별로 CSRF 토큰을 생성하여 세션에 저장하고, 사용자가 작업페이지를 요청할 때마다 hidden 값으로 클라이언트에게 토큰을 전달한 뒤, 해당 클라이언트의 데이터 처리 요청 시 전달되는 CSRF 토큰값과 세션에 저장된 토큰값을 비교하여 유효성을 검사하도록 설계한다.
CSRF 토큰값에 대한 검사 방법은 Spring이나 Struts와 같은 MVC 프레임워크의 경우 Interceptor 컴포넌트를 이용하여 파라미터로 전달될 CSRF 토큰값이 세션에 저장된 토큰값과 동일한지를 검사할 수 있도록 설계한다.
※ CSRF 방어를 위한 프레임워크 및 라이브러리
Spring Security, Apache Struts, OWASP CSRFGuard (Java)
Django (Python)
CSRF Protector (PHP)
(ㄴ) 사용자와 상호 처리 기능 적용
CSRF 토큰 방식도 XSS 취약점이 있는 사이트를 공격하게 되면 무력화될 수 있으므로 CAPTCHA와 같은 사용자와 상호 처리 가능한 기법을 적용하여 위조된 요청이 차단될 수 있도록 설계한다.
(ㄷ) 재인증 요구
중요기능의 경우 재인증으로 안전하게 실제 요청 여부를 확인하도록 설계한다.
진단 세부사항
요구사항 ① 시스템으로 전송되는 모든 요청에 대해 정상적인 사용자의 유효한 요청인지, 아닌지 여부를 판별할 수 있도록 해야 한다.
- 중요기능 요청에 대한 데이터 처리 요청에 대해 요청 유효성을 판단하여 처리할 수 있도록 설계되어 있는지 확인
. CSRF 토큰, CAPTCHA를 이용하여 요청 유효성 검증
- 요청에 대한 유효성 검증 기능을 점검하는 테스트 계획이 수립되어 있는지 확인
'Cert > 소프트웨어(SW) 보안약점 진단원' 카테고리의 다른 글
설계단계 보안설계 기준 - 허용된 범위 내 메모리 접근 (0) | 2024.08.23 |
---|---|
설계단계 보안설계 기준 - HTTP 프로토콜 유효성 검증 (0) | 2024.08.22 |
설계단계 보안설계 기준 - 웹 서비스 요청 및 결과 검증 (0) | 2024.08.22 |
설계단계 보안설계 기준 - 시스템 자원 접근 및 명령어 수행 입력값 검증 (0) | 2024.08.21 |
설계단계 보안설계 기준 - 디렉토리 서비스 조회 및 결과 검증 (0) | 2024.08.21 |