오늘은 CrossSite Request Forgery(CSRF, 사이트간 요청 위조)에 대해 알아보도록 하겠습니다
Cross Site Request Forgery, 사이트간 요청 위조란?
특정 웹사이트에 사용자의 의도와는 무관하게 HTTP request를 요청, 위조하는 것을 말합니다.
Same Site request일 경우에는 문제가 되지 않지만 Cross Site Request일 경우 인증되지 않은, 사용자가 의도하지 않은 제3자에게 쿠키를 노출시킬 위험이 있어서 상당히 위험합니다.
즉, CSRF는 브라우저가 (어떠한 보안설정이 없는 경우) 자동으로 쿠키를 첨부한다는 점을 악용한 공격입니다.
간단한 예시로, 사용자가 요청하지 않았음에도 인증 정보가 도용되어 인터넷 뱅킹 출금이 된다거나
허락하지 않은 사용자의 SNS 친구요청이 추가되는 것 등이 있습니다.
왜 쿠키를 첨부하는 것이 위험한가요?
쿠키는 HTTP 쿠키를 일컫는 것으로, 사용자가 특정 웹사이트 방문시 사용자의 로컬환경의 자동적으로 생성되는 데이터 조각을 의미합니다.
이후 쿠키를 가진 사용자가 같은 사이트를 방문하게 되면 여러 정보가 쿠키에 담겨있기 때문에 신속하고 정확성이 높은 환경이 구성되게 됩니다.
서버는 사용자를 인증할때 **Session ID(세션아이디)**를 생성하게 됩니다. 이후 Set-Cookie 헤더에 담아서 브라우저에 리턴합니다.
서버는 이후 브라우저로부터 요청이 오면 해당 쿠키에서 세션아이디를 확인, 사용자를 인증하게 됩니다.
이런 인증 정보가 담긴 쿠키가 유출되면, 자신이 의도하지 않았어도 서버가 인증된 사용자라고 판단, 취약한 요청을 처리하게 되는 것입니다.
즉, 사용자와 서버간의 신뢰관계를 악용한 공격이 CSRF라고 볼 수 있겠습니다.
CSRF 원리
CSRF 공격을 시도하기 위해선 아래와 같은 몇 가지 조건이 필요합니다.
- 사용자가 보안이 취약한 서버로부터 이미 인증을 받은 상태여야 한다.
- 쿠키 기반으로 서버 세션 정보를 획득할 수 있어야 한다.
- 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 한다.
- 공격자는 획득한 정보로 인해 악성 스크립트를 생성합니다.
- 공격자는 사용자가 악성 스크립트를 실행시킬 수 있도록 유도합니다. 이때 악성 스크립트는 페이지일수도 있고, 게시글, 이미지 등 다양한 곳에 삽입되어 있을 수 있습니다.
- 사용자가 페이지나 객체등을 클릭하게 되면 자동으로 사용자의 쿠키가 첨부되어 서버로 악의적인 요청이 전달됩니다.
- 서버는 same site, cross site request를 구분하지 못하기 때문에 쿠키에 담긴 인증 정보를 통해 악의적인 요청을 수행하게 됩니다.
CSRF 예방법
<SameSite 속성 사용하기>
SameSite는 CSRF 공격을 방지하기 위한 HTTP 쿠키의 속성입니다.
해당 속성은 3가지 옵션을 설정할 수 있습니다
- None : Same Site, Cross Site에 관계 없이 쿠키가 첨부됩니다.
- Lax : Same Site Request에서만 쿠키를 첨부하도록 하는 것이 원칙이나 Cross Site GET Request의 경우에는 허용하는 방식입니다.
- Strict : Same Site Request에서만 쿠키를 첨부할 수 있도록 합니다
SameSite가 2020.2.4 80 버전으로 업데이트 후에 default value가 None 에서 Lax로 변경된 것을 보아 강력한 보안적 정책이 요구되고 있는 시점이라고 생각됩니다.
<Referer 헤더>
브라우저는 Cross-site 요청인지 Same-site요청인지 구분할 수 있습니다. (서버는 못함)
이에 브라우저가 서버로 요청을 보낼 때 관련 정보를 referer 헤더로 전달하는 것을 말합니다.
서버는 헤더 정보를 보고 요청을 파악합니다.
하지만 이 헤더 또한 조작, 변조가 가능하기 때문에 위험성 있는 방법이라고 할 수 있겠습니다.
<Secret Token 사용하기>
Secret Token 방식은 서버가 각 페이지에 비밀값을 삽입해놓는 방식입니다.
이후 요청 시 자신이 몰래 삽입해놓은 토큰을 검사하여 크로스 사이트 요청인지 판단합니다.
Secret Token은 사용자마다 다르며 추측하거나 찾기가 힘들다는 특징이 있습니다.
참고
https://ko.wikipedia.org/wiki/사이트_간_요청_위조
'보안이론' 카테고리의 다른 글
[Cryptography] 블럭 암호 운영 모드 ECB, CBC, CFB, OFB, CTR (0) | 2025.02.14 |
---|---|
[Cryptography] 블럭암호 AES 원리, 안전성 (0) | 2025.02.14 |
[Cryptography] - 블럭암호 DES 원리, 취약점 (0) | 2025.02.13 |
[Network] Packet Sniffing(스니핑), Spoofing(스푸핑)이란? (0) | 2025.02.12 |
[Crypto Hacking] 해시함수와 Hash Collision Attack (0) | 2025.02.10 |