네트워크 진단 도구인 traceroute는 목적지까지 패킷이 거치는 경유지(홉)를 순서대로 보여준다. 각 홉은 해당 구간의 라우터가 돌려보내는 ICMP 응답을 근거로 표시되는데, 뒤집어 말하면 응답을 인위적으로 조작하면 traceroute가 보여주는 경로도 얼마든지 꾸며낼 수 있다는 뜻이다. 한 개발자가 이 원리를 이용해 traceroute 출력에 가짜 홉을 주입하는 방법을 앞선 글에서 소개했고, 이번에는 그 연장선에서 흑백 애니메이션 '배드 애플(Bad Apple)' 영상을 traceroute 화면 위에 재생하는 실험을 공개했다. 진지한 활용이라기보다 기술적 장난에 가깝지만, 리눅스 방화벽 프레임워크의 동작 방식과 진단 도구가 신뢰하는 정보의 취약함을 동시에 드러낸다는 점에서 실무자에게도 곱씹어볼 지점이 있다.
매 패킷마다 다른 홉을 만드는 numgen
핵심 장치는 nftables의 numgen 기능이다. numgen은 규칙이 평가될 때마다 난수 또는 단조 증가하는 카운터 값을 만들어내는데, 여기서는 카운터가 쓰였다. ICMPv6 응답 패킷이 생성될 때마다 카운터가 하나씩 올라가고, 그 값에 따라 서로 다른 IPv6 주소를 응답 소스로 되돌려준다. traceroute 입장에서는 매번 다른 라우터를 지나는 것처럼 보이므로, 홉으로 표시되는 주소 목록을 프레임 데이터로 활용할 수 있게 된다. 정적인 경로 조작을 넘어 시간에 따라 변하는 '움직이는' 출력을 만들어낸 것이 이 실험의 골자다.
다만 곧바로 두 가지 걸림돌이 나타났다. 첫째, 리눅스 커널은 기본적으로 ICMPv6 송신에 초당 1개라는 속도 제한을 걸어 둔다. 이 상태로는 프레임이 초당 한 장꼴로만 나가 영상이 성립하지 않는다. 그래서 sysctl로 net.ipv6.icmp.ratelimit=0을 설정해 제한을 풀어야 했다. 둘째, 경로 진단 도구 mtr은 한 홉에서 여러 주소가 관측되면 이를 모두 나열한다. 원래는 다중 경로가 쓰이고 있음을 알려주는 유용한 동작이지만, 이 장난에서는 화면을 어지럽히는 방해 요소가 된다.
한 줄 패치와 프레임의 나열
저자는 mtr에 한 줄짜리 패치를 적용해 홉마다 하나의 주소만 표시되도록 손봤다. mtr에는 원래 홉당 표시 주소 수를 제한하는 -E 플래그가 있지만, 이 옵션은 항상 첫 번째로 관측된 주소만 보여주는 탓에 영상 첫 프레임에서 화면이 멈춰버리는 문제가 있었다. 저자는 mtr을 고치는 대신 셸에서 traceroute를 반복 호출하는 방법도 가능하다고 덧붙였는데, 패치가 필요 없는 대신 '눈속임'이라는 성격은 크게 다르지 않다고 스스로 인정했다.
영상 데이터를 규칙으로 변환하는 과정은 다음과 같다. ffmpeg로 원본 영상을 초당 8프레임, 즉 프레임 간격 125밀리초로 리샘플링하고 각 프레임을 30×11 픽셀 크기의 PNG로 축소해 내보냈다. 이어 파이썬 스크립트가 이 이미지들을 읽어 픽셀의 명암을 대응하는 ICMPv6 응답을 생성하는 nftables 규칙 집합으로 바꿨다. 그 결과물은 1메가바이트를 조금 넘는 방대한 규칙 파일이 됐다. 흑백 실루엣 스타일 덕분에 픽셀당 1비트, 곧 켜짐과 꺼짐만으로도 영상을 알아볼 수 있다는 점이 이런 극단적 저해상도 재현을 가능하게 한 배경이다.
'배드 애플'이라는 관문 의식
'배드 애플'의 그림자 영상은 개조된 디스플레이의 사실상 표준 시연 소재로 자리 잡았다. 저자는 이를 1993년작 게임 '둠(Doom)'이 새로운 하드웨어 플랫폼에서 코드 실행을 확보했음을 증명하는 관문으로 통하는 것에 빗댔다. 켜짐과 꺼짐의 1비트만으로 렌더링할 수 있는 실루엣 화풍이라, 픽셀 표현력이 극단적으로 빈약한 장치에서도 통한다는 점이 널리 채택된 이유로 지목된다. 저자는 이 영상이 구동된 온갖 기묘한 '디스플레이'를 모아 자랑하는 전용 서브레딧을 언급하며, HD44780 호환 문자 LCD를 악용한 사례를 개인적 최애로 꼽기도 했다.
실무적으로 이 실험이 던지는 함의는 분명하다. traceroute나 mtr이 보여주는 경로가 목적지 측이나 경로상 장비가 마음먹기에 따라 얼마든지 위조될 수 있음을 구체적으로 입증하기 때문이다. 응답 소스 주소, 홉 순서, 응답 지연은 모두 원격 장비가 통제하는 값이며, 진단 도구는 그것을 그대로 믿고 그린다. 네트워크 문제를 추적하거나 경로를 근거로 판단을 내릴 때, traceroute 출력이 곧 물리적 진실은 아니라는 사실을 염두에 둘 필요가 있다. 물론 이 재현은 커널 속도 제한 해제와 도구 패치라는 특수 조건을 전제로 한 통제된 장난이므로, 그 자체가 실전 위협이라기보다 진단 데이터의 신뢰 경계를 되짚게 하는 사고 실험에 가깝다. 그럼에도 방화벽 규칙 하나로 진단 화면을 캔버스로 바꿔버린 발상은, 도구가 '보여주는 것'과 '실제로 일어난 것' 사이의 간극을 유쾌하게 상기시킨다.