안녕하세요! 👋 드디어 OWASP Top 10 2021 정복 시리즈의 마지막 시간입니다. 대망의 10위는 커뮤니티 설문을 통해 새롭게 순위에 진입한, 매우 강력하고 위험한 공격인 A10:2021-SSRF(Server-Side Request Forgery, 서버 측 요청 위조)입니다.
"신뢰받는 내부 직원을 조종해서 사장님 방의 비밀 문서를 훔쳐오게 한다면?" 🕵️♂️ SSRF는 바로 이처럼 공격자가 신뢰받는 서버를 꼭두각시처럼 조종하여, 서버가 대신 다른 곳에 악의적인 요청을 보내도록 만드는 공격입니다. 지금부터 우리 서버가 어떻게 해커의 스파이가 될 수 있는지, 그 무서운 시나리오를 함께 파헤쳐 보겠습니다!

🤔 SSRF? 그게 정확히 뭔가요?
SSRF(서버 측 요청 위조)는 공격자가 웹 애플리케이션의 취약점을 이용하여, 서버가 직접 공격자가 원하는 임의의 주소로 HTTP 요청을 보내도록 강제하는 공격 기법입니다.
CSRF(클라이언트 측 요청 위조)와 이름이 비슷해서 헷갈릴 수 있지만, 공격의 주체가 완전히 다릅니다.
- CSRF (Client-Side): 공격자가 사용자의 웹 브라우저를 속여서, 사용자가 원치 않는 요청을 보내게 합니다. (피해자: 사용자 👤)
- SSRF (Server-Side): 공격자가 웹 서버 자체를 속여서, 서버가 직접 다른 시스템에 요청을 보내게 합니다. (피해자: 서버 및 내부 네트워크 🏠)
서버는 보통 방화벽 내부에 위치하여 외부에서 직접 접근할 수 없는 내부 시스템들과 자유롭게 통신할 수 있습니다. SSRF 공격은 바로 이 '내부자'라는 서버의 신뢰를 악용하기 때문에 매우 위험합니다.
🕵️♂️ SSRF 공격은 왜 그렇게 위험한가요?
서버가 공격자의 명령을 대신 수행하게 되면, 상상 이상의 피해가 발생할 수 있습니다.
1. 내부 네트워크 스캔 및 정보 유출 🔥🧱
공격자는 서버를 프록시처럼 이용하여 방화벽 뒤에 숨겨진 내부 네트워크를 스캔할 수 있습니다.
- 공격 시나리오: 공격자는 192.168.1.1:8080, 10.0.0.5:3306 등 내부 IP 주소와 포트 번호로 요청을 보내도록 서버를 조종합니다. 서버의 응답 시간이나 오류 메시지를 통해 어떤 포트가 열려있는지, 어떤 서비스(데이터베이스, 관리자 페이지 등)가 실행 중인지 파악하여 내부 시스템의 지도를 그릴 수 있습니다.
2. 내부 서비스 공격 💣
외부에 노출되지 않아 안전하다고 믿었던 내부 서비스를 직접 공격할 수 있습니다.
- 공격 시나리오: 내부에서만 접근 가능한 관리자 페이지(http://localhost/admin)에 서버가 대신 접근하여 관리자 기능을 실행하거나, 내부 API를 호출하여 데이터를 유출하거나 시스템을 조작할 수 있습니다.
3. 클라우드 메타데이터 탈취 ☁️🔑 (가장 치명적!)
클라우드 환경에서 SSRF는 재앙을 불러올 수 있습니다.
- 공격 시나리오: AWS, GCP, Azure와 같은 클라우드 환경의 서버(인스턴스)는 http://169.254.169.254 와 같은 특수한 내부 IP 주소를 통해 자신의 메타데이터(역할, 임시 자격 증명 등)에 접근할 수 있습니다. 공격자가 서버를 조종하여 이 주소로 요청을 보내게 하면, 임시 액세스 키, 비밀 키 등 민감한 자격 증명 정보를 탈취할 수 있습니다. 이 키를 손에 넣은 공격자는 해당 클라우드 계정의 모든 자원을 마음대로 제어할 수 있게 됩니다.
4. 로컬 파일 읽기 📄
file:/// 프로토콜을 이용하여 서버의 로컬 파일을 읽을 수도 있습니다.
- 공격 시나리오: 공격자가 file:///etc/passwd 나 file:///c:/windows/win.ini 와 같은 경로를 입력하면, 서버가 해당 경로의 파일을 읽어 그 내용을 공격자에게 전달할 수 있습니다.
🧰 SSRF 취약점은 어디서 발생할까요?
SSRF는 주로 서버가 사용자로부터 입력받은 URL 주소로 직접 접속하여 어떤 작업을 수행하는 기능에서 발생합니다.
- URL 기반 이미지/콘텐츠 가져오기: 사용자가 입력한 URL의 이미지를 서버가 가져와서 보여주는 기능.
- 웹훅(Webhook): 특정 이벤트가 발생했을 때 사용자가 지정한 URL로 알림을 보내주는 기능.
- PDF/문서 변환기: 웹 페이지 URL을 입력받아 해당 페이지를 PDF로 변환해주는 기능.
- 링크 미리보기 생성: 메신저나 소셜미디어에서 링크를 붙여넣었을 때 서버가 해당 URL에 접속하여 제목, 설명, 썸네일을 가져오는 기능.
🛡️ 어떻게 막을 수 있을까요? (방어 방법)
SSRF를 방어하는 핵심은 "서버가 보내는 요청의 목적지를 엄격하게 통제하는 것"입니다.
- 화이트리스트(Allow List) 기반 접근 제어 ✅ (가장 중요!) 블랙리스트 방식(localhost, 127.0.0.1 차단 등)은 우회하기 쉽습니다. 반드시 서버가 접속할 수 있는 도메인, IP 주소, 포트, 프로토콜 목록(화이트리스트)을 만들고, 이 목록에 없는 요청은 모두 차단해야 합니다. "허용된 것 외에는 모두 금지"하는 것이 원칙입니다.
- 입력값 검증 및 파싱 🧐: 사용자로부터 입력받은 URL을 그대로 사용해서는 안 됩니다. URL을 파싱하여 호스트, 포트, 경로 등을 분리하고, 각 부분이 화이트리스트 정책에 부합하는지 철저히 검증해야 합니다. file:///, ftp:// 등 위험한 프로토콜은 당연히 금지해야 합니다.
- 리다이렉션(Redirection) 비활성화 ↪️➡️❌: 공격자는 안전한 URL을 입력한 뒤, 위험한 내부 주소로 리다이렉션되도록 유도할 수 있습니다. 따라서 서버의 HTTP 클라이언트는 리다이렉션을 따라가지 않도록 설정해야 합니다.
- 네트워크 격리 및 방화벽 설정 🧱: 외부 요청을 처리하는 서버는 별도의 격리된 네트워크에 위치시키고, 방화벽을 통해 해당 서버가 꼭 필요한 내부 시스템 외에는 접근할 수 없도록 네트워크 정책을 강화해야 합니다. (심층 방어)
✨ 마치며
SSRF는 그 발생 빈도는 상대적으로 낮을 수 있지만, 한번 터지면 방화벽을 무력화하고 내부 시스템 전체를 위험에 빠뜨리는 엄청난 파급력을 가진 공격입니다. "서버가 외부로 요청을 보낸다고? 그게 왜 위험하지?"라고 안일하게 생각해서는 절대 안 됩니다.
우리 서비스에 사용자가 입력한 주소를 서버가 직접 방문하는 기능이 있다면, 지금 바로 그 목적지를 우리가 완벽하게 통제하고 있는지 다시 한번 점검해봅시다. 신뢰받는 우리 서버가 해커의 스파이가 되는 것을 막아야 합니다!
태그: OWASP, A10, SSRF, Server-Side Request Forgery, 보안, 웹 취약점, 클라우드보안
'일반IT > IT보안' 카테고리의 다른 글
| 🐧/etc/passwd 파일의 비밀: x와 공백의 의미, 그리고 Alpine 이미지 대참사! (0) | 2025.10.03 |
|---|---|
| 윈도우 서버 보안, 전문가처럼 관리하기! 🛡️ 필수 진단 체크리스트 (0) | 2025.10.03 |
| CCTV 없는 금고, OWASP 9위 보안 로깅 및 모니터링 실패 (0) | 2025.10.02 |
| 📥 다운로드한 파일, 정말 안전할까? GPG로 무결성 검증 파헤치기 🧐 (0) | 2025.10.02 |
| CVE-2022-24348: Argo CD의 심각한 경로 탐색 취약점 깊이 파헤치기 🕵️♂️ (0) | 2025.10.02 |