🔹 CSRF란?
1. CSRF(Cross-Site Request Forgery)의 정의
크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery)는 공격자가 피해자의 인증된 세션을 이용해 의도하지 않은 요청을 서버에 전송하는 웹 보안 공격 기법입니다. 사용자가 로그인된 상태에서 공격자가 조작한 악성 요청을 수행하면 피해자는 의도치 않은 금융 거래, 비밀번호 변경, 계정 탈취 등의 피해를 입을 수 있습니다.
✅ CSRF의 주요 특징:
- 사용자의 인증된 세션을 악용하여 악의적인 요청을 실행
- 사용자의 개입 없이 자동으로 요청이 전송될 수 있음
- GET, POST 요청을 포함한 다양한 HTTP 요청을 악용 가능
- 피해자가 신뢰하는 웹사이트의 권한을 이용하는 공격 방식
📌 CSRF 공격은 피해자가 로그인된 상태에서 발생할 가능성이 높으며, 강력한 보안 조치가 필요합니다.
🔹 CSRF 공격 시나리오 및 기법
1. 악성 링크 클릭 유도
✅ 사용자가 악성 링크를 클릭하면 공격자가 원하는 요청이 자동으로 실행됨
✔️ 공격 시나리오:
- 피해자가 로그인된 상태에서 공격자가 제공한 악성 링크를 클릭함
- 링크에는 공격자가 미리 설정한 조작된 요청이 포함됨
- 요청이 피해자의 인증된 세션에서 실행되어 공격이 성공함
✔️ 악성 링크 예제:
<a href="http://example.com/transfer?to=attacker&amount=1000">Click Here</a>
📌 사용자가 링크를 클릭하는 순간, 계좌에서 공격자에게 돈이 이체될 수 있습니다.
2. 자동 실행되는 악성 스크립트 삽입
✅ 공격자가 악성 HTML 또는 JavaScript를 피해자의 브라우저에서 실행하도록 유도
✔️ 공격 시나리오:
- 악성 웹사이트를 방문하면 브라우저가 자동으로 조작된 요청을 서버에 전송
- 사용자의 인증 세션을 이용하여 관리자 권한 변경, 데이터 삭제 등의 작업 수행
✔️ 자동 실행 스크립트 예제:
<img src="http://example.com/delete_account" width="0" height="0">
📌 사용자가 인식하지 못한 상태에서 중요한 요청이 실행될 수 있습니다.
3. CSRF를 활용한 계정 탈취
✅ CSRF 공격을 통해 사용자의 비밀번호를 변경하거나 이메일을 수정하여 계정을 탈취
✔️ 공격 시나리오:
- 피해자가 로그인된 상태에서 공격자의 악성 요청이 실행됨
- 계정 정보 변경 요청이 공격자의 이메일로 전송됨
- 공격자가 이메일 인증을 통해 비밀번호를 변경하고 계정 탈취
📌 CSRF 방어 기법이 적용되지 않으면 공격자가 계정 탈취를 시도할 수 있습니다.
🔹 CSRF 공격을 방어하는 방법
1. CSRF 토큰(CSRF Token) 사용
✅ 각 요청마다 고유한 토큰을 포함하여 요청의 유효성을 검증
✔️ CSRF 토큰 적용 방법:
- 서버가 CSRF 토큰을 생성하여 사용자의 폼에 포함
- 사용자가 요청을 보낼 때 해당 토큰을 함께 전송
- 서버에서 토큰을 검증하여 유효하지 않은 요청 차단
✔️ CSRF 토큰 예제 (HTML + PHP):
<form action="/transfer" method="POST">
<input type="hidden" name="csrf_token" value="random_token_value">
<input type="text" name="amount">
<button type="submit">송금</button>
</form>
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF 공격이 감지되었습니다.");
}
📌 CSRF 토큰을 활용하면 공격자가 임의로 요청을 생성하기 어렵습니다.
2. SameSite 쿠키 속성 활용
✅ SameSite 속성을 설정하면 CSRF 공격을 방지할 수 있습니다.
✔️ SameSite 설정 방법:
Strict
: 외부 사이트에서 요청을 보낼 수 없음Lax
: 사용자가 링크를 클릭한 경우에만 요청 허용None
: 제3자 사이트에서도 요청 가능 (보안 위험 증가)
✔️ SameSite 쿠키 예제 (PHP):
setcookie("session", "value", ["samesite" => "Strict", "secure" => true, "httponly" => true]);
📌 쿠키의 SameSite
속성을 Strict
로 설정하면 CSRF 공격을 효과적으로 방어할 수 있습니다.
3. CORS 정책 제한 (Cross-Origin Resource Sharing)
✅ 서버가 신뢰할 수 없는 출처에서의 요청을 차단하도록 설정
✔️ CORS 설정 예제 (Express.js):
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "https://trusted-site.com");
res.setHeader("Access-Control-Allow-Methods", "POST, GET");
next();
});
📌 CORS 정책을 통해 외부 사이트에서의 비정상적인 요청을 제한할 수 있습니다.
4. HTTP Referer 및 Origin 검증
✅ 서버에서 요청의 출처를 확인하여 신뢰할 수 없는 요청 차단
✔️ Referer 검증 예제 (PHP):
if (strpos($_SERVER['HTTP_REFERER'], "trusted-site.com") === false) {
die("CSRF 공격 감지!");
}
📌 출처 검증을 수행하면 외부에서의 비정상적인 요청을 차단할 수 있습니다.
📌 결론
✅ CSRF(Cross-Site Request Forgery)는 사용자의 세션을 악용하여 의도하지 않은 요청을 실행하는 보안 공격 기법입니다.
✅ CSRF 토큰 적용, SameSite 쿠키 설정, CORS 정책 제한 등의 다양한 방어 기법을 활용해야 합니다.
✅ HTTP Referer 및 Origin 검증을 통해 신뢰할 수 없는 요청을 차단할 수 있습니다.
✅ 웹 애플리케이션 개발자는 CSRF 방어 기법을 필수적으로 적용하여 보안성을 강화해야 합니다.
🚀 지금 바로 보안 점검을 수행하고, CSRF 공격으로부터 웹 애플리케이션을 보호하세요!
'IT이야기 > 보안' 카테고리의 다른 글
보안 인시던트(Security Incident): 사이버 위협과 대응 전략 (0) | 2025.03.01 |
---|---|
SQL 인젝션(SQL Injection): 웹 애플리케이션 보안 위협과 대응 전략 (0) | 2025.03.01 |
피싱(Phishing): 사이버 공격의 유형과 대응 전략 (0) | 2025.03.01 |
랜섬웨어(Ransomware): 기업과 개인을 위협하는 악성코드와 대응 전략 (0) | 2025.03.01 |
크로스 사이트 스크립팅(XSS): 웹 보안 위협과 대응 전략 (0) | 2025.03.01 |