반응형
정의
Client Side Request Forgery
피해자가 자신의 의도와는 다르게, 자신도 모르게 서버로 임의의 요청을 하게 만드는 공격
Server Side: 서버에서 실행되는 코드
Client Side: 클라이언트(웹 브라우져) 측에서 실행되는 코드
취약점 발생 지점 리스트
- 변경을 요청하는 모든 페이지
- 관리자 계정 등록
- 비밀번호, 이메일주소, 아이디 변경 등
- 이메일 주소 변경
- 웹 애플리케이션에서 세션을 사용하여 인증된 사용자를 식별하는 경우
- 웹 애플리케이션이 출처 확인 메커니즘을 제대로 구현하지 않은 경우
취약점 검증 방법
- 피라미터를 가진 get방식의 요청이 가능한지 확인, 이를 이용해서 비밀번호 변경이 가능한지 확인
- post방식을 get방식으로 변경해도 되는지 확인.
공격 순서
- 웹싸이트에서 비밀번호변경과 같은 회원정보 수정처리를 어떤 방식으로 하는지 확인합니다.
- 회원정보 수정을 http GET방식으로 가능한지 확인합니다.
- burp suite의 리피터를 사용할 경우, 세션이 만료되서 확인이 안될수도 있습니다. 이럴떄는, 인터셉터 기능을 사용하거나, 링크로 만들어서 가능한지 테스트해볼수 있습니다.
- GET방식으로 회원정보 요청이 허가된다는 뜻은 세션(CSRF 토큰)을 웹사이트에서 체크하지 않는다는 뜻입니다.
- get방식으로 수정이 가능하다면, 사용자가 링크 혹은 게시글을 여는 순간 실행되어, 사용자가 모르는 사이에 비밀번호 변경이 가능하도록 유도가 가능합니다.
- Stored CSRF: 게시글에 악성코드를 심어넣어서 사용자가 게시글을 클릭하도록 유도합니다.
- Reflected CSRF: 이메일 같은곳에 악성 코드가 들어있는 링크를 보내서 클릭하도록 유도합니다.
- DOM based CSRF: 서버의 프래그먼트에 악성코드를 심어놓아서 사용자가 로그인하자마자 실행되도록 유도합니다.
- GET방식이 불가능하다면 POST방식을 사용해야 합니다.즉, XSS와 연계하여, 사용자의 인증정보(=세션)을 탈취하고, 이를 이용해서 사용자의 비밀번호 변경이 가능합니다.
발생 과정
- 사용자가 웹 애플리케이션에 인증 요청을 보냅니다.
- 웹 애플리케이션은 인증 요청을 받고, 사용자에게 인증 응답을 보냅니다.
- 사용자는 악성 요청을 웹 애플리케이션에 보내지만, 사용자는 악성 요청이 발생한 사실을 인지하지 못합니다.
- 웹 애플리케이션은 악성 요청을 처리하고, 사용자에게 악성 요청 처리 결과를 반환합니다.
공격 예제
대응방법
CSRF(Cross-Site Request Forgery)에 대한 궁극적인 대응 방안은 CSRF 토큰을 사용하는 것입니다. CSRF 토큰은 웹 애플리케이션에서 사용자의 세션과 연결된 임의의 값을 포함하는 보안 토큰입니다. 이 토큰은 모든 중요한 요청에 추가되어 서버가 요청의 유효성을 검증할 수 있도록 합니다.
일반적으로 CSRF 토큰은 다음과 같은 방식으로 구현됩니다.
- 서버는 사용자가 로그인할 때마다 고유한 CSRF 토큰을 생성합니다.
- 서버는 이 CSRF 토큰을 쿠키 또는 세션에 저장하거나, 웹 페이지의 숨겨진 필드(hidden field)에 포함시킵니다.
- 사용자의 브라우저는 서버로부터 받은 CSRF 토큰을 자동으로 요청에 포함시킵니다.
- 서버는 모든 중요한 요청을 처리하기 전에, 요청에 포함된 CSRF 토큰과 세션에 저장된 토큰을 비교하여 유효성을 검증합니다
반응형
'old > Cyber Security' 카테고리의 다른 글
SQL Injection 공격기법 리스트 (0) | 2023.07.19 |
---|---|
CSRF 공격기법 리스트 (0) | 2023.06.20 |
사이버 보안: XSS이란 (0) | 2023.05.23 |
웹해킹: SQL injection (0) | 2023.05.11 |
아스키 코드 표 (0) | 2023.04.30 |