TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 24 READS

PS5 방송 스트림 가로채기: DNS 스푸핑으로 만든 무료 화면 공유

PS5 방송 스트림 가로채기: DNS 스푸핑으로 만든 무료 화면 공유
SOURCE IMAGE · HACKER NEWS

소니는 PS5의 하드웨어 활용 범위를 세대를 거치며 꾸준히 좁혀 왔다. 방송 기능이 대표적이다. 콘솔에는 편리한 '방송하기' 버튼이 달려 있지만, 소니가 공식 지원하는 몇 개 서비스를 벗어나는 순간 활용이 급격히 까다로워진다. 무선 주변기기도 마찬가지여서, 소니가 무선 스택을 자사 기기로 제한해 두는 탓에 타사 헤드폰이나 컨트롤러는 아예 페어링되지 않는다. 이런 폐쇄성은 사용자에게는 불편이지만, 한편으로 플랫폼 사업자가 어떻게 기기를 통제하는지 보여주는 실물 사례이기도 하다.

이 글의 저자가 풀고자 한 문제는 소박하다. 친구들과 디스코드로 게임 플레이를 공유하고 싶은데, PS5는 디스코드로의 화면 공유를 지원하지 않는다. 가장 흔한 해법은 캡처 카드다. HDMI 출력을 캡처 카드에 물리고 맥의 OBS로 받아 다시 송출하는 방식인데, 쓸 만한 제품은 100달러를 넘기기 일쑤다. 리모트 플레이도 대안이 되긴 했다. PS5를 맥북에 연결하고 맥 화면을 디스코드에 공유하는 식이다. 다만 컨트롤러와 이어폰 등 모든 입출력 장치를 리모트 플레이 기기 쪽에 다시 연결해야 하고, 간헐적인 입력 지연이 있었으며, 스트림 품질을 PS5가 전적으로 통제해 사용자가 조정할 여지가 거의 없었다. 방송할 때마다 물리적 배선을 바꾸는 것도 번거로웠다.

RTMP와 DNS라는 빈틈

돌파구는 PS5가 유튜브·트위치로 방송할 때 쓰는 프로토콜, 즉 RTMP(Real-Time Messaging Protocol)에 있었다. RTMP는 실시간 오디오·비디오 송출에 널리 쓰인다. 핵심 아이디어는 단순하다. PS5는 트위치의 IP를 하드코딩하지 않고 방송을 시작할 때마다 DNS로 조회한다. 그렇다면 DNS 응답을 통제해 내 기기가 트위치인 척 스트림을 받으면 된다는 것이다.

첫 시도는 순탄치 않았다. ingest.twitch.tv를 곧장 맥으로 가리켜 봤지만, 이 호스트는 실제 RTMP 서버가 아니라 어느 지역 인제스트 서버를 쓸지 알려주는 디스커버리 엔드포인트였다. PS5는 여기에 HTTPS로 물어보고 ap-southeast-1 같은 지역 서버 주소를 받아 그쪽으로 스트림을 보낸다. 그렇다고 그 지역 호스트를 스푸핑하면 또 다른 벽에 부딪힌다. 실제 트위치 인제스트는 443 포트에서 TLS를 얹은 RTMPS를 쓰고, PS5가 신뢰된 CA로 인증서를 검증한다. 자체 서명 인증서는 통하지 않고, PS5에는 커스텀 CA를 설치할 방법도 없다.

우회로로 유튜브를 시도한 대목이 흥미롭다. 유튜브의 RTMP 인제스트는 1935 포트의 평문 RTMP라 TLS 인증서 문제가 없었고, PS5는 순순히 맥으로 스트림을 보냈다. 기본 접근 방식이 유효하다는 것은 확인된 셈이다. 문제는 PS5가 유튜브 API를 주기적으로 확인해 방송이 실제로 살아 있는지 검사한다는 점이었다. 유튜브가 스트림을 받은 적이 없으니 검사는 실패했고 약 60초 뒤 방송이 끊겼다. 결국 필요한 것은 '평문 RTMP를 쓰는 트위치 엔드포인트'였다. 방송 중 DNS 로그를 관찰한 끝에 답이 나왔다. PS5가 ingest.global-contribute.live-video.net을 조회하고 이것이 aps30.contribute.live-video.net으로 이어졌는데, 이곳이 실제 RTMP 서버였다. contribute.live-video.net을 스푸핑하면 하위 도메인 전체를 덮어 인증서 문제 없이 스트림을 맥으로 돌릴 수 있었다.

구현과 실무적 함의

최종 구성은 두 축으로 이뤄진다. dnsmasq가 트위치 인제스트 도메인을 맥의 LAN 주소(예시에서는 192.168.8.175)로 응답하고, nginx-rtmp가 그 스트림을 받는다. 저자는 이 둘을 묶어 관리하는 작은 macOS 메뉴 막대 앱을 만들었다. PS5가 DNS를 물으면 dnsmasq가 맥 IP를 돌려주므로, PS5는 맥을 트위치로 착각하고 연결한다. PS5를 이 DNS 서버로 향하게 하는 마지막 단추는 라우터에서 처리했다. OpenWRT가 도는 GL.iNet 라우터에서 PS5의 DHCP 임대에만 맥 IP를 DNS 서버(DHCP 옵션 6)로 내려주도록 설정했다. PS5의 고정 임대에 이미 태그가 걸려 있어, 콘솔에서 별도 DNS 설정 없이 다음 DHCP 갱신 때 자동으로 반영된다. nginx의 on_publish 콜백은 방송 시작을 감지하는 장치다. 스트림이 열리면 nginx가 localhost:9988로 POST를 쏘고, 앱이 복사해 쓸 수 있는 완전한 RTMP URL을 띄워준다.

이 시점에서 PS5는 1080p60, H.264 영상에 AAC 스테레오 음성을 트위치가 아닌 맥으로 직접 밀어 넣는다. 이후는 자유롭다. OBS로 재송출하거나 로컬에 녹화하거나 그대로 재생해도 된다. 저자는 OBS를 거치지 않고 mpv로 스트림을 받아 그 창을 디스코드에 공유했고, 저지연 프로파일 덕에 지연은 1초 미만으로 유지됐다. 몇 주간 써 보며 별다른 문제가 없었다고 한다.

기술적으로 이 사례가 주는 교훈은 분명하다. 폐쇄된 기기라도 네트워크 경계에서의 이름 해석은 기기 밖에 있고, 그래서 통제 가능하다는 점이다. 인증서 검증이라는 방어선이 RTMPS 구간에서는 작동했지만 평문 RTMP 구간에는 없었다는 사실은, 같은 서비스 안에서도 보안 수준이 균일하지 않음을 드러낸다. 다만 한계도 분명하다. 이 방식은 라우터의 DHCP·태그 설정, dnsmasq와 nginx-rtmp 운용 같은 네트워크 지식을 전제로 하며, 트위치 측 도메인 구조나 라이브 여부 검사 방식이 바뀌면 언제든 깨질 수 있는 임시방편이다. 집 안 LAN에서 자신의 기기를 대상으로 한 개인 실험이라는 맥락도 잊지 말아야 한다. 그럼에도 캡처 카드 없이 순수하게 네트워크 계층만 손봐 목적을 달성했다는 점에서, 프로토콜과 DNS의 동작 원리를 이해하는 것이 어떤 실전적 가치를 갖는지 잘 보여주는 사례다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://yashgarg.dev/posts/hijacking-ps5-rtmp-stream/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...