ServerSideRequestForgery
1. SSRF(Server Side Request Forgery) 개요
- 서버 측 요청 위조(Server-Side Request Forgery) 공격은 공격자가 서버의 기능을 악용하여 내부 리소스에 무단 접근하는 보안 취약점입니다.
간단한 비유
회사 직원에게 "저 파일 좀 가져와줘"라고 부탁하는 것과 같습니다. 악의적인 요청자가 "내부 기밀 서류함에서 급여 명세서 가져와줘"라고 요청하면, 검증 없이 실행하는 직원(취약한 서버)이 내부 정보를 유출하게 됩니다.
2. 공격 동작 방식
- 대상 애플리케이션은 URL에서 데이터를 가져오거나, URL로 데이터를 발행하거나, 조작 가능한 URL에서 데이터를 읽는 기능이 있을 수 있습니다.
- 이 경우 공격자는 다음과 같은 방법으로 해당 기능을 악용합니다.
2.1 URL 조작
- 공격자가 서버에서 실행되는 코드가 읽어올 URL을 제공하거나 수정
- 완전히 다른 URL 제공하거나 URL 구조 조작 (경로 탐색 등)
2.2 내부 서비스 접근
- 조작된 요청을 통해 다음과 같은 내부 자원에 접근:
- 클라우드 메타데이터: AWS의
http://169.254.169.254/에서 설정 정보 및 인증 키 추출 - 데이터베이스 HTTP 인터페이스: MongoDB 같 은 NoSQL DB의 REST API 악용
- 내부 REST API: 외부에 노출되지 않은 내부 서비스 접근
- 로컬 파일:
file://URI를 통한 시스템 파일 읽기
3. 공격 예시
3.1 정상적인 사용
POST /api/fetch-image
Content-Type: application/json
{
"url": "https://example.com/public-image.jpg"
}
3.2 SSRF 공격
POST /api/fetch-image
Content-Type: application/json
{
"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
}
- 위 공격이 성공하면 AWS 인스턴스의 IAM 자격 증명을 탈취할 수 있어 클라우드 인프라 전체가 위험에 노출됩니다.
4. 주요 위험성
- 내부 네트워크 침투: 방화벽으로 보호된 내부 서비스 접근
- 클라우드 메타데이터 탈취: 인증 토큰 및 설정 정보 유출
- 데이터베이스 직접 접근: 인증 우회를 통한 민감 정보 탈취
- 입력 검증 우회: 신뢰할 수 없는 데이터를 신뢰하는 코드로 전달
5. 방어 방법
- SSRF 공격에 대한 방어는 애플리케이션 계층과 네트워크 계층에서 다층 방어 원칙을 적용해야 합니다.