554,8554 - Pentesting RTSP

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

์ถœ์ฒ˜: wikipedia:

Real Time Streaming Protocol (RTSP)๋Š” ์—”ํ„ฐํ…Œ์ธ๋จผํŠธ ๋ฐ ํ†ต์‹  ์‹œ์Šคํ…œ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฏธ๋””์–ด ์„œ๋ฒ„๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋„คํŠธ์›Œํฌ ์ œ์–ด ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ด ํ”„๋กœํ† ์ฝœ์€ ์ข…๋‹จ ๊ฐ„ ๋ฏธ๋””์–ด ์„ธ์…˜์„ ์„ค์ •ํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฏธ๋””์–ด ์„œ๋ฒ„์˜ ํด๋ผ์ด์–ธํŠธ๋Š” VHS ์Šคํƒ€์ผ ๋ช…๋ น(์˜ˆ: ์žฌ์ƒ, ๋…นํ™”, ์ผ์‹œ์ •์ง€)์„ ๋ฐœํ–‰ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ์˜ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ(Video On Demand) ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ์˜ ์ŠคํŠธ๋ฆฌ๋ฐ(Voice Recording)์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ์ž์ฒด์˜ ์ „์†ก์€ RTSP์˜ ์—ญํ• ์ด ์•„๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ RTSP ์„œ๋ฒ„๋Š” ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ ์ „๋‹ฌ์„ ์œ„ํ•ด Real-time Transport Protocol (RTP)๊ณผ Real-time Control Protocol (RTCP)์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๋ฒค๋”๋Š” ๋…์  ์ „์†ก ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด RealNetworks์˜ RTSP ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๋Š” RealNetworks์˜ ๋…์  ํ”„๋กœํ† ์ฝœ์ธ Real Data Transport (RDT)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.

๊ธฐ๋ณธ ํฌํŠธ: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

์ฃผ์š” ์‚ฌํ•ญ

RTSP๋Š” HTTP์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ ์ „์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•œ ์‚ฌ์–‘์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

RTSP โ€“ RFC2326

์žฅ์น˜์— ๋”ฐ๋ผ unauthenticated ๋˜๋Š” authenticated ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•˜๋ ค๋ฉด โ€œDESCRIBEโ€ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค:

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2

์ •ํ™•ํ•œ ํฌ๋งท์€ ์ผ๊ด€๋œ ์‘๋‹ต์„ ์œ„ํ•ด ์ด์ค‘ โ€œ\r\nโ€œ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ€œ200 OKโ€ ์‘๋‹ต์€ unauthenticated access๋ฅผ ์˜๋ฏธํ•˜๊ณ , โ€œ401 Unauthorizedโ€œ๋Š” ์ธ์ฆ์ด ํ•„์š”ํ•จ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ Basic ๋˜๋Š” Digest authentication ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์ด ์š”๊ตฌ๋˜๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

Basic authentication์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋ช…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ base64๋กœ ์ธ์ฝ”๋”ฉํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==

์ด ์˜ˆ์—์„œ๋Š” ์ž๊ฒฉ์ฆ๋ช…์œผ๋กœ โ€œadminโ€œ๊ณผ โ€œ1234โ€œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ•ด๋‹น ์š”์ฒญ์„ ์ „์†กํ•˜๋Š” Python script์ž…๋‹ˆ๋‹ค:

import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.1", 554))
s.sendall(req)
data = s.recv(1024)
print(data)

Basic authentication์ด ๋” ๊ฐ„๋‹จํ•˜๋ฉฐ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค. Digest authentication์€ โ€œ401 Unauthorizedโ€ ์‘๋‹ต์— ์ œ๊ณต๋œ ์ธ์ฆ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐœ์š”๋Š” RTSP ์ŠคํŠธ๋ฆผ์— ์ ‘๊ทผํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์ดˆ๊ธฐ ์‹œ๋„์—์„œ ๊ทธ ๋‹จ์ˆœ์„ฑ๊ณผ ์‹ค์šฉ์„ฑ ๋•Œ๋ฌธ์— Basic authentication์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

Enumeration

์œ ํšจํ•œ methods์™€ ์ง€์›๋˜๋Š” URLs์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฝ˜ํ…์ธ  ์ ‘๊ทผ์„ ์œ„ํ•ด brute-force๋ฅผ ์‹œ๋„ํ•ด ๋ด…์‹œ๋‹ค.

nmap -sV --script "rtsp-*" -p <PORT> <IP>

ffplay๋กœ RTSP ์ŠคํŠธ๋ฆผ ๋ณด๊ธฐ

์œ ํšจํ•œ RTSP ๊ฒฝ๋กœ(์˜ˆ: /mpeg4, /live.sdp)๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ ‘๊ทผ(์ธ์ฆ ์—†์Œ ๋˜๋Š” ์ž๊ฒฉ ์ฆ๋ช… ์‚ฌ์šฉ)์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด, ffplay๋ฅผ ์‚ฌ์šฉํ•ด ์ŠคํŠธ๋ฆผ์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
  • -rtsp_transport tcp: ๋” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•ด UDP ๋Œ€์‹  TCP ์‚ฌ์šฉ
  • -x, -y: ๋น„๋””์˜ค ํ•ด์ƒ๋„๋ฅผ ์ œ์–ดํ•˜๋Š” ์„ ํƒ์  ํ”Œ๋ž˜๊ทธ
  • ํ•„์š”์— ๋”ฐ๋ผ <IP> ๋ฐ ๊ฒฝ๋กœ๋ฅผ ๊ต์ฒดํ•˜์„ธ์š”

Brute Force

๊ธฐํƒ€ ์œ ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ

To bruteforce: https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

  • ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ์—์„œ ์—ด๋ฆฐ RTSP ํ˜ธ์ŠคํŠธ๋ฅผ ํƒ์ง€
  • ๊ณต๊ฐœ ์ •๋ณด(hostname, port, camera model ๋“ฑ) ํš๋“
  • ์ŠคํŠธ๋ฆผ ๊ฒฝ๋กœ(์˜ˆ: /live.sdp)๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ž๋™ ์‚ฌ์ „(dictionary) ๊ณต๊ฒฉ ์‹คํ–‰
  • ์นด๋ฉ”๋ผ์˜ username ๋ฐ password๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ์ž๋™ ์‚ฌ์ „ ๊ณต๊ฒฉ ์‹คํ–‰
  • ์ŠคํŠธ๋ฆผ์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋‚ด์šฉ์„ ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธ๋„ค์ผ ์ƒ์„ฑ
  • ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ธ์ฝ”๋”ฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Gstreamer ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ์‹œ๋„
  • Cameradar๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ •๋ณด์˜ ์š”์•ฝ ์ถœ๋ ฅ

See also

32100 Udp - Pentesting Pppp Cs2 P2p Cameras

์ฐธ๊ณ  ์ž๋ฃŒ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ