[취약점] 크로스사이트 리퀘스트 변조(CSRF)

2024. 3. 23. 22:40정보 보안/취약점

 

정의

 

  사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹 사이트에 요청하게 하는 취약점을 의미한다.

 

 

공격 시나리오

 

  사용자의 신뢰(인증) 정보 내에서 사용자의 요청을 변조하여 해당 사용자의 권한으로 악의적인 공격을 수행할 수 있다.

 

 

대응 방안

 

  • 사용자 입력 값에 대해 검증 로직 및 필터링 추가 적용

 

 

판단 기준

 

주요정보통신기반시설

  • 양호 : 사용자 입력 값에 대한 검증 및 필터링이 이루어지는 경우
  • 취약 : 사용자 입력 값에 대한 필터링이 이루어지지 않으며, HTML 코드(또는 스크립트)를 입력하여 실행되는 경우

 

 

점검 예시

 

주요정보통신기반시설

  • 웹 사이트 내에 XSS 취약점이 존재하는지 확인
  • 등록 및 변경 등의 데이터 수정 기능의 페이지가 있는지 조사(개인정보, 게시글  등)
  • 데이터 수정 페이지에서 전송되는 요청 정보를 분석하여 임의의 명령을 수행하는 스크립트 삽입 후 해당 게시글을 타 사용자가 열람하였을 경우 스크립트가 실행되는지 확인

 

전자금융기반시설

  • 타 이용자의 권한으로 실행하고자 하는 스크립트 구문을 업로드 후 해당 이용자 권한으로 구문이 실행되는지 가능 여부 점검

 

 

구체적 보안 설정 방법

 

1. 웹 사이트에 사용자 입력 값이 저장되는 페이지는 요청이 일회성이 될 수 있도록 설계한다.

 

2. 사용 중인 프레임워크에 기본적으로 제공되는 CSRF 보호 기능을 사용하도록 한다.

 

3. 사용자가 정상적인 프로세스를 통해 요청했는지 HTTP 헤더의 Referer 헤더 값 검증 로직을 구현한다.

 

4. 정상적인 요청과 비정상적인 요청을 구분할 수 있도록 Hidden Form을 사용하여 임의의 암호화된 토큰(세션 ID, Timestamp, CSRF Token 등)을 추가하고 해당 토큰을 검증하도록 설계한다.

 

5. HTML이나 Javascript에 해당되는 태그 사용을 사전에 제한하고, 서버 단에서 사용자 입력 값에 대한 필터링을 구현한다.(XSS 취약점 제거)

 

6. HTML Editor 사용으로 인해 위 사항들의 조치 불가 시, 서버 사이드/서블릿/DAO 영역에서 조치하도록 설계한다.