웹 애플리케이션 보안에서 자주 언급되는 취약점 중 SSRF(Server-Side Request Forgery)와 CSRF(Cross-Site Request Forgery)는 이름이 비슷해 혼동되는 경우가 많습니다. 두 취약점 모두 ‘요청(Request)’을 악용한다는 공통점이 있지만, 요청이 발생하는 위치와 악용되는 권한, 피해 범위, 대응 방식은 서로 다릅니다. 이번 글에서는 SSRF와 CSRF의 개념과 공격 방식, 주요 차이점을 살펴보고 각각의 대응 방법을 비교해보겠습니다.
■ SSRF(Server-Side Request Forgery, 서버사이드 요청 위조) 취약점이란?
SSRF는 서버가 외부 리소스나 URL에 요청을 보내는 기능을 악용해, 서버가 공격자가 지정한 대상에 요청을 보내도록 만드는 취약점입니다. 이 과정에서 서버가 가진 네트워크 및 내부 자원 접근 권한이 악용될 수 있습니다.
예를 들어 웹 애플리케이션이 사용자 입력을 받아 특정 URL의 데이터를 가져오는 기능을 제공할 경우, 공격자는 입력값을 조작해 서버가 외부에서 직접 접근할 수 없는 내부 네트워크나 제한된 시스템에 요청을 보내도록 만들 수 있습니다.
이 취약점이 악용되면 내부 관리자 페이지 접근, 내부 서비스 탐색, 클라우드 메타데이터 조회를 통한 민감 정보 노출 등 심각한 보안 문제로 이어질 수 있습니다.
■ CSRF(Cross-Site Request Forgery, 크로스사이트 요청 위조) 취약점이란?
CSRF는 공격자가 로그인된 사용자의 브라우저를 이용해 웹 애플리케이션에 사용자가 의도하지 않은 요청을 전송하도록 만드는 취약점입니다.
이 공격은 사용자가 로그인된 상태에서 브라우저가 세션 쿠키 등 인증정보를 자동으로 포함해 요청을 전송하는 특성을 이용합니다. 공격자가 만든 웹 페이지를 사용자가 방문하면 브라우저는 인증 정보가 포함된 요청을 전송할 수 있으며, 서버가 요청의 유효성 검증을 하지 않는 경우 이를 정상적인 사용자 요청으로 처리할 수 있습니다.
이로 인해 공격자는 사용자의 권한을 이용해 계정 정보 변경, 이메일 수정, 결제 요청 등 상태를 변경하는 작업을 수행할 수 있습니다.
■ SSRF와 CSRF의 주요 차이는?
SSRF는 서버 측 요청 기능을 악용하는 공격이고, CSRF는 로그인 된 사용자의 인증 세션을 악용해 요청을 위조하는 공격이라는 점에서 근본적인 차이가 있습니다.
| 구분 | SSRF | CSRF |
| 공격 대상 | 서버가 수행하는 요청 | 로그인된 사용자의 브라우저가 수행하는 요청 |
| 공격 방식 | 서버가 공격자가 지정한 대상에 요청을 전송 | 로그인된 사용자의 브라우저가 인증정보가 포함된 요청을 의도와 무관하게 전송 |
| 주요 목적 | 내부 자원 접근, 서비스 탐색, 민감 정보 획득 | 사용자 권한을 이용한 상태 변경 요청 수행 |
| 공격 조건 | 서버가 사용자 입력 등을 바탕으로 외부 또는 내부 대상에 요청을 보낼 수 있는 기능을 제공 | 사용자가 로그인된 상태이며, 서버가 요청의 유효성을 검증하지 않음 |
| 대표 영향 | 내부 시스템 접근, 서비스 탐색, 메타데이터 기반 민감 정보 유출 | 계정 정보 변경, 관리자 기능 오남용 |
■ SSRF와 CSRF 대응 방법 비교
두 취약점은 요청이 발생하는 위치와 악용되는 권한이 다르므로, 대응 방법 역시 서로 다르게 설계해야 합니다.
| SSRF 대응 방법 | CSRF 대응 방법 |
| ✔️ 사용자 입력으로 전달되는 URL에 대해 허용된 대상에 한해서 요청할 수 있도록 제한 ✔️ 요청 가능한 스키마, 호스트, 포트 범위를 제한 ✔️ 내부망, 루프백, 메타데이터 서비스 등 내부자원으로 연결되는 주소에 대한 접근 차단 ✔️ 리다이렉션이 발생하는 경우 최종 목적자를 검증 |
✔️ CSRF 토큰(CSRF Token) 사용 ✔️ SameSite 쿠키 설정을 통한 자동 전송 범위 제한 ✔️ 중요 작업 수행 시 사용자 재인증 ✔️ Referer / Origin 헤더 검증 |
| 💡SSRF 취약점 및 대응 방안 자세히 보기 (링크) | 💡CSRF 취약점 및 대응 방안 자세히 보기 (링크) |
실제 서비스 환경에서는 다양한 요청 처리 로직과 인증 흐름이 복잡하게 얽혀 있어, SSRF와 CSRF 취약점을 수동으로 식별하고 관리하는 데 한계가 있을 수 있습니다. 따라서 개발 단계부터 취약한 구현 패턴을 점검하고 운영 환경에서도 지속적으로 보안 상태를 확인할 수 있는 체계를 갖추는 것이 중요합니다.
스패로우의 소스코드 보안약점 분석 도구인 Sparrow SAST는 외부 요청 처리와 관련된 취약한 코드 패턴을 식별해 SSRF로 악용될 수 있는 취약 코드 구조를 개발 단계에서 점검하는 데 도움을 줄 수 있습니다. 또한, 상태 변경 기능의 요청 처리 방식과 같이 CSRF에 취약할 수 있는 구현 패턴을 개발 단계에서 점검하는 데에도 활용할 수 있습니다. 뿐만 아니라, 웹 애플리케이션 취약점 동적 분석 도구인 Sparrow DAST는 실행 중인 웹 애플리케이션을 대상으로 SSRF로 악용될 수 있는 요청 흐름을 확인하는 데 활용될 수 있습니다.
스패로우와 함께 웹 애플리케이션의 보안 위험을 보다 체계적으로 점검하고 관리해보세요.
▶️ Sparow SAST 바로가기 : https://sparrow.im/kr/product/sast/
▶️ Sparrow DAST 바로가기 : https://sparrow.im/kr/product/dast/
