๐ Introduction
SSRF๋ Server-Side Request Forgery์ ์ฝ์๋ก ๋ฐฑ์๋ ์๋ฒ๋จ์์ ์์ฒญ์ ๋ฐ์์์ผ ๋ด๋ถ์์คํ ์ ์ ๊ทผํ๊ฑฐ๋ ์ธ๋ถ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ๋๋ค.
Why?
์๋น์ค ๊ธฐ๋ฅ์ ๋ฐ๋ผ์ proxy ์๋ฒ์ ์ ์ฌํ๊ฒ ์๋ฒ๊ฐ ์น ์์ฒญ์ ๋์ ์ํํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํนํ ์ธ๋ถ Endpoint์ ์ ๊ทผํ ์ ์๋ URL์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ ๊ฒฝ์ฐ ์ธ๋ถ์์ ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ์กฐ์ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์๋ํ์ง ์์ ๋๋ฉ์ธ์ผ๋ก ์น ์์ฒญ์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
๐ก Offensive techniques
Detect
๋ณดํต ์ด๋ฏธ์ง๋ฅผ ์บก์ณํ๊ฑฐ๋ ์น ์ฌ์ดํธ์ ์ ๋ณด๋ฅผ ์ฝ์ด์ค๋ ๊ธฐ๋ฅ์์ ์์ฃผ ๋ฐ์ํ๋ฉฐ, ์ ๋ง ์๊ฐ์ง๋ ์๋ ๊ธฐ๋ฅ์ค์ ๋ค๋ฅธ ์๋น์ค๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ฝ๊ฒ ์ฐพ๊ธฐ ์ํด์๋ Callback ์ฑ ๋๊ตฌ(Burpsuite collaborator, ZAP OAST ๋ฑ)๋ฅผ ํ์ฉํด์ OOB(Out-of-Band) ์ ์ ์ฌํ๊ฒ Callback์ ๋ฐ์ ๋๋ฉ์ธ์ ํ๋ผ๋ฏธํฐ, ํค๋ ๋ฑ์ผ๋ก ์์ฒญํ์ฌ ์๋ฒ๊ฐ ์ ์กํ๋ ์์ฒญ์ ํ์งํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ณ ํ์คํฉ๋๋ค.
๊ฐํน ์ธํ๋ผ ๊ตฌ์กฐ์ ๋ฐ๋ผ์ ์ธ๋ถ๋ก ์์ฒญ์ด ๋ฐ์ํ์ง ๋ชปํ ์ ์๋๋ฐ, ์ด๋ฌํ ๊ฒฝ์ฐ localhost, ์ฌ์ค IP, ์ฌ์ค ๋๋ฉ์ธ(์๋ธ๋๋ฉ์ธ ์ค์บ ํ IP๋ฅผ ๋น๊ตํ๋ฉด ๋ฉ๋๋ค) ๋ฑ์ ํธ์ถํ๋ฉด์ ์ ๊ทผํ ์ ์๋์ง ์ฒดํฌํ๋ฉด ๋ฉ๋๋ค.
Exploitation
์ธ๋ถ/๋ด๋ถ๋ก ์ ์ ์ ํ์ธํ๋ค๋ฉด ์ค์ ๋ก ์ํฅ๋ ฅ์ ๋ง๋ค์ด์ผํฉ๋๋ค. ๋ณดํต ์ธํ๋ผ์์ ์ฌ์ฉ๋๋ ์ฃผ์ ์์คํ ๋ฑ์ ์ฌ์ค๋๋ฉ์ธ/IP ๋ก ์ ๊ทผํด์ response๋ฅผ ํตํด ๋ด๋ถ ์ ๋ณด๋ฅผ ์ ์ถํ๊ฑฐ๋, SSRF์ ํน์ฑ ์ DMZ๋ ๊ทธ ๋ค์์ ๋์ํ๋ค๋ ์ ์ ์ด์ฉํด์ ALC ๋ฑ ๋ณด์ ์ ์ฑ ์ ์ฐํํ ์ ์์ต๋๋ค. ๋๋ protocol์ ์ปจํธ๋กคํ ์ ์๋ ๊ฒฝ์ฐ ๋ด๋ถ ํ์ผ์ ๋ํ ์ ๊ทผ ํฌ์ธํธ๋ ์กด์ฌํฉ๋๋ค.
|
|
Exploitation - Public Cloud Service
AWS, GCP, Azure, Digital Ocean ๋ฑ Public Cloud ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Metadata API๋ก ์ ๊ทผํด์ Instance์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ฑฐ๋ ์ค์ํ ํค ๊ฐ์ ์ป์ด ์์คํ ์ ํ์ทจํ ์ ์๋ ๋ฆฌ์คํฌ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค.
Metadata URLs (AWS)
|
|
Metadata URLs (GCP)
|
|
Metadata URLS (Digital Ocean)
|
|
์ด์ธ์๋ ๊ต์ฅํ ๋ง์ Public Cloud Service์ ๋ํ Metadata API๊ฐ ์์ต๋๋ค. ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Bypass protection
์ฐํ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ต๋๋ค.
Localhost
|
|
Basic bypass
|
|
Bypass with @
๋ณดํต Era of SSRF๋ก ๋ง์ด ์๋ ค์ง ๋ฐฉ๋ฒ์ ๋๋ค. @๋ฅผ ์ด์ฉํ์ฌ ์ค์ Host์ ๊ฒ์ฆ์์ ํ์ธํ๋ Host๋ฅผ ๋ค๋ฅด๊ฒ ๋ถ๋ฆฌ์์ผ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ๋๋ฉ์ธ์ผ๋ก ์ ๊ทผํ๋๋ก ์ ๋ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. SSRF ์ด์ธ์๋ ๊ฐ์ข ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์์ ๋ง์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ ์์๋์๋๊ฒ ์ข์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
https://www.hahwul.com/2017/09/14/web-hacking-new-attack-vectors-in/
|
|
Bypass with Special chars
|
|
Bypass with CNAME and A Record
SSRF ๋์์ด ์ธ๋ถ ์์ฒญ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ URL์ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ๋๋ฉ์ธ์ผ๋ก ์์ฒญํ๋๋ฐ, ์ด ๋ ํด๋น ๋๋ฉ์ธ์ IP๋ฅผ ๋ด๋ถ๋ง์ผ๋ก ์ง์ ํ์ฌ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
https://www.hahwul.com/2019/02/19/bypass-ssrf-protection-using-domain-cname-arecord/
|
|
Bypass with AAAA Record (IPv6)
SSRF์ ๋ํ ๋์ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ํ์คํ๊ฒ Endpoint์ ์ค์ IP๋ฅผ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ค๋ง ์ด๋ฌํ ๊ฒฝ์ฐ ๋๋ถ๋ถ Denie list ๊ธฐ๋ฐ(์ด๋ ์ฌ์ค๋์ญ์ด ๋ช ํํ๊ฒ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ด์์)์ ๋ณดํธ ๋ก์ง์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ฌํ ๊ฒฝ์ฐ IPv6 ์ฃผ์๋ฅผ ์ด์ฉํ์ฌ ์ฐํํด๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฉ์ธ ์๋น์ค์์ IPv6 ์ฃผ์๋ AAAA Record๋ก ๋งคํํฉ๋๋ค.
- localhostv6.hahwul.com (
::1
)
Bypass with Redirect
SSRF ๋์์ด ์ธ๋ถ ์์ฒญ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ URL์ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ์ฌ์ดํธ๋ก ์์ฒญํ ํ ํด๋น ํ์ด์ง์์ 301,302,307,308 ๋ฑ์ ์ด์ฉํด HTTP Redirect๋ฅผ ํตํด ๋ด๋ถ๋ก๋ ์ ๊ทผ์ ์๋ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
https://www.hahwul.com/2019/02/22/bypass-ssrf-protection-using-http-redirect/
|
|
DNS Rebinding
DNS Rebinding์ ์ด์ฉํ๋ฉด 2๊ฐ์ IP๊ฐ ๊ณต์กดํ๋ ๋๋ฉ์ธ์ ์ด์ฉํด์ Host validation์ ์ฐํํ ์ ์์ต๋๋ค.
|
|
DNS Change
DNS Rebinding๊ณผ ์ ์ฌํ๊ฒ DNS์์ A Record์ IP๋ฅผ ๋ฐ๊พธ๋ ํํ๋ก ์ฐํํ ์ ์์ต๋๋ค. ๋ค๋ง ์ด๋ Host validation check์ ์ค์ ์์ฒญ์ ์ํํ๋ ๊ธฐ๋ฅ๊ฐ์ ์๊ฐ์ฐจ๊ฐ ์๊ฑฐ๋ ๋ฐ๋ผ๋ณด๋ DNS ์๋ฒ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ง ์ ํจํฉ๋๋ค.
|
|
Bypass with jar protocol (Only Java)
|
|
Bypass with HierarchicalUri (Only Android)
Android์ Host validation์ ์ฐจ์ด๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ผ๋ ํด๋น ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
https://www.hahwul.com/2019/09/23/bypass-host-validation-technique-in-android/
|
|
Bypass with URL: Prefix (Only Java’s URL)
|
|
Bypass with Location header
Response
|
|
Bypass with 20x + Content-Location
Response
|
|
Bypass with iframe (only headless)
|
|
Bypass with ffmpeg
- https://www.blackhat.com/docs/us-16/materials/us-16-Ermishkin-Viral-Video-Exploiting-Ssrf-In-Video-Converters.pdf
- https://github.com/neex/ffmpeg-avi-m3u-xbin
|
|
|
|
Bypass with TocToU
ToCToU๋ Time Of Check to Time Of Use์ ์๊ฐ์ฐจ๋ฅผ ์ด์ฉํ ๊ณต๊ฒฉ์ด๋ฉฐ ๋ณดํต Race condition attack์์ ๋ง์ด ๋์ค๋ ๊ฐ๋ ์ ๋๋ค. URL ๊ฒ์ฆ ๋ก์ง๊ณผ ์ค์ ์์ฒญ ๋ก์ง๊ฐ์ ์ฐจ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ์ด ๊ฐ๊ฒฉ ์ฌ์ด์ IP๋ฅผ ๋ณ๊ฒฝํ์ฌ SSRF๋ฅผ ๋ง๊ธฐ ์ํ IP ๊ฒ์ฆ ๋ฑ์ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. (ToCToU SSRF ๊ธ ์ฐธ๊ณ )
์ค์ ๋ก ์๋ ์ผ์ด์ค์์ ์ ์ฉํ๊ฒ ์๋ํฉ๋๋ค.
- URL ๋ฑ๋ก ํ ์ฃผ๊ธฐ์ ์ผ๋ก Batch๊ฐ ๋๋ ๊ฒฝ์ฐ
- URL ๋ฑ๋ก ํ ์ฌ์ฉ์์ ํน์ Interaction์ด ์๋ ๋ ๋์ํ๋ ๊ฒฝ์ฐ
- MSA ๊ตฌ์กฐ๋ก ์ธํด ๋๋ ์ด๊ฐ ๊ธด ๊ฒฝ์ฐ (๋ค๋ง ํ์ด๋ฐ ๋ง์ถ๊ธฐ๋ ๊ต์ฅํ ํ๋ญ๋๋ค)
DNS Pinning
Pinning Service
e.g
|
|
Blind SSRF Canaries & Chains
Blind SSRF๋ฅผ ๋ด๋ถ์ ๋ค๋ฅธ SSRF, Open Redirect ๋ฑ ๋ค๋ฅธ ์ด์์ ์ฐ๊ฒฐํ์ฌ ๋ฆฌ์คํฌ๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ธฐ์ ์ Blind SSRF Canaries ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๊ฒ๋ค์ Attack Chain์ฒ๋ผ ํ๋๋ก ๋ฌถ๊ฒ๋๋ฉด ๋จ์ํ ๋ด๋ถ๋ง์์ ์์ฒญ์ ํธ์ถํ๋ SSRF์์ ์ค์ ๋ก ์ข ๋ ์ํฅ์๋ ๋ฆฌ์คํฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฌํ SSRF Chain ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์๋ ค์ง ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ด ์๊ณ , ์์ธํ ๋ด์ฉ์ ์๋ AssetNode์์ ์์ฑํ ๊ธ์ ์ฐธ๊ณ ํ์๋๊ฒ ์ข์ต๋๋ค.
๐ก Defensive techniques
์ฌ์ฉ์๋ก๋ถํฐ URL, Path, Port ๋ฑ ์์ฒญ์ ์ํ ์ฌ๋ฃ๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ ์๋ํ์ง ์์ ํ์ด์ง๋ก ์ด๋ํ ์ ์๋๋ก ์ ํํ๊ฒ ๊ฒ์ฆํด์ผํฉ๋๋ค. ์ ๊ท์ ๋ฑ์ผ๋ก ๊ฑธ๋ฌ๋ผ ์ ์์ง๋ง, ๊ฐ๊ธ์ Application์์ ์ ๊ณตํ๋ Host validation ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ถ๊ฐ๋ก Application์ Host validation์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ์ด๋ฅผ ํ์ฉํ ์ํ์์ ์ทจ์ฝ์ ์ด ๋ฐ์ํ๋ค๋ฉด, ์ถ๊ฐ์ ์ธ ์ฝ๋๋ก 2์ค ๊ฒ์ฆ์ ์งํํ๋๊ฒ ์ข์ต๋๋ค.
๐น Tools
- SSRFmap - https://github.com/swisskyrepo/SSRFmap
- Gopherus - https://github.com/tarunkant/Gopherus
- See-SURF - https://github.com/In3tinct/See-SURF
- SSRF Sheriff - https://github.com/teknogeek/ssrf-sheriff