[번역] Tor로 Bittorrent를 쓰는 건 좋은 생각이 아닙니다

원문: 토르 공식 블로그 https://blog.torproject.org/blog/bittorrent-over-tor-isnt-good-idea

프랑스의 Inria에서 최근에 논문을 내고 나서, Bittorrent 및 사생활 공격(privacy attacks)에 관해 묻는 분들이 점점 많아지고 있습니다. 이 포스팅에선 그 공격에 관해 설명하고, 또 그게 뭘 뜻하는지까지 설명하려 합니다.

공격은 세 부분으로 나눌 수 있습니다 (아니면 서로 의존하는 공격이 세 개 있다고 생각하셔도 됩니다)

Bittorrent 애플리케이션에서 트래커로 가는 트래픽을 Tor를 통해 우회하도록 설정한 사람들이 첫째 공격을 받습니다. 이 사람들의 목적은, 다른 사람이 저 트래커에서 피어 목록을 들쑤셔도 자기 IP 주소를 알 수 없게 하려는 거죠. 문제는 여기에 있는데, 주로 많이 쓰이는 Bittorrent client들 중 많은 것들이 (저자는 μTorrent에 대해 말하고 있습니다만 Vuze도 마찬가지라 생각합니다) 이 때 socks 프록시 설정을 그냥 무시한다는 겁니다. 왜 프록시 설정을 무시하는지는 이해가 갑니다. 요즘 트래커는 통신할 때 UDP 프로토콜을 쓰는데, Tor같은 socks 프록시는 TCP 프로토콜만 지원하거든요. 그래서 이 애플리케이션 개발자들은 둘 중 하나를 골라야 했습니다. “지원 안 하는 프록시를 사용해도 작동을 하게 할 것인가” 아니면 “그냥 작동 안 해버려서 유저를 골탕먹일 것인가”.  결과적으로는 Bittorrent 애플리케이션들은 몇몇 유저들이 생각하는 것과는 보안상 다르게 작동하게 되었습니다. 이제 그게 유저들을 괴롭히는 거죠.

이 공격은 생각보다 더 심각합니다. 어떤 경우에선 μTorrent, BitSpirit, libTorrent는 그냥 트래커에 보내는 정보, 또는 다른 피어에게 보내는 정보 속에 IP 주소를 그대로 담아버립니다. 이때 Tor가 제대로 작동해서, IP 주소를 _익명으로_ 트래커나 피어들에게 보내게 되죠. 아무도 그 IP가 어디서 오는지는 모릅니다. 하지만 IP주소가 전송되는 건 분명 원하는 상황은 아니죠.

자, 이게 첫 공격이었습니다. 둘째 공격은 첫 공격 위에서, 이제 Bittorrent에서 나머지 트래픽을 Tor로 전송하려는 분들을 대상으로 합니다. 피어 행세를 하는 공격자가 당신이 누군지 알 수 있게 되는 거죠. Bittorrent protocol은, 최소한 여러분이 많이 쓰시는 Bittorrent 애플리케이션에서는, 어떤 포트를 사용할지 무작위로 선정합니다. 그런 다음에 트래커랑 피어들한테 자기가 무슨 포트를 골랐는지 알려주게 되죠. 첫 공격에서 이미 여러분의 IP 주소를 알았고, 이제 클라이언트가 무슨 포트를 골랐는지도 알았습니다. 자 이제 여러분이 쓰는 μTorrent가 50344 포트를 골랐다고 칩시다. 이제 그 포트 번호를 프록시를 통해 (여기서는 Tor) 익명으로 다른 피어한테 보내죠. 이 피어는 이제 다시 트래커로 가서, 이 포트를 지금 누가 쓰고 있는지 찾아봅니다. 포트는 무작위로 골랐으니, 이 포트를 쓰는 사람은 거의 나밖에 없겠죠. 우왕! 이제 이 피어는 여러분의 진짜 IP주소를 알았습니다. 보너스로, Bittorrent 피어 통신이 혹시나 암호화가 안 되어 있다면, Tor의 출구 중계소에서도 트래픽을 감시해서 공격을 할 수 있죠.

자 이게 둘째 공격이었습니다. 둘을 섞으면 이제 왜 Tor를 통해 Bittorrent 트래픽을 보내는 게 프라이버시 보호에 하나도 좋질 않은지 아시겠죠.

해결책이 무엇일까요? 답은 두 가지입니다. 첫째로, “Tor로 Bittorrent 돌리지 마세요”. Tor에서 Bittorrent 돌리지 말라고 몇 년동안 계속 말하고 있습니다. Tor 네트워크가 그 로드를 감당할 수가 없어요. 이제 이런 공격도 나왔으니 제 말을 이제는 들을 사람이 생기겠죠. 둘째 답은, 여러분이 정말 Bittorrent 클라이언트를 쓰면서 프록시를 통해 프라이버시도 지키고 싶다면, 애플리케이션이랑 프로토콜 개발자들한테 가서 이 애플리케이션이랑 프로토콜 고쳐 달라고 요구하세요. 애플리케이션 단에서 이미 정보를 뿌리고 다니는데 Tor를 쓴다고 안전해지진 않습니다.

앞에서 말했던 논문에 나온 셋째 공격이 재밌습니다. 효율성 측면에서 Tor는 각 순환로에서 애플리케이션 스트림 여러 개를 동시에 전송합니다. 이러면 효율성이 높아지는 이유가, aol.com 홈페이지에 들어가서 조그만 그림조각들 받는데 일일이 새 순환로 구성해 가면서 오버헤드를 만들 시간이 없거든요. Tor 네트워크에서 매번 새 경로를 만들 때마다, 그 경로 중 하나가 공격자에게 노출될 가능성도 높아지기 때문에, 이런 방법을 쓰면서 익명성도 향상시킬 수 있습니다. 그렇지만 단점도 있는 것이, 출구 중계소에서 한 순환로에서 나오는 스트림들을 다 기록하면서 유저 프로파일을 만들어 스냅샷을 짧게 찍을 수가 있게 되거든요. 이 스트림 중에 유저가 누구인지 알 수 있는 것이 나온다면 같이 나오는 다른 스트림들 주인도 알 수 있게 되는거죠.

그럼 결과가 뭘까요? Tor로 Bittorrent를 쓰고, Tor로 웹도 같이 쓰고 계신다면, 출구 중계소에서 이 공격을 이용해 지금 나오는 웹 트래픽이 누구 건지를 알 수 있게 되는 거죠. (역자 주: Bittorrent 스트림 주인이 누군지 아는 방법은 위에서 말했고, 같이 나오는 스트림 주인도 알게 되니까, 결과적으로 웹 트래픽 주인이 드러나게 되죠)

그럼 어떻게 해야 될까요? 답은 아까랑 같습니다. Tor로 Bittorrent 돌리지 마세요. 그리고 Bittorrent 개발자한테 가서 애플리케이션 고치라고 하세요.

그치만, 여기선 다른 해결책도 나올 수가 있습니다. 보안성 떨어지는 애플리케이션을 Tor로 돌릴 때 Tor에서 데미지를 좀 줄일 수 있는 방법은 없을까요? Tor로 Bittorrent를 쓰면 분명 피해는 있을 거고 그건 해결할 순 없습니다. 다만 비유하자면 그거 때문에 전신을 다 다치는 것보다는 일부만 다칠 수 있다면 그나마 좋겠죠.

Tor 설계상 이를 해결할 수 있는 방법 중 하나는 유저 애플리케이션 하나당 분리된 순환로 하나를 사용하는 겁니다. Linux와 Unix에서는 그렇게 좀 뒤적뒤적 고쳐볼 수가 있는데, 여기선 Tor 소켓에 연결하기 전에 애플리케이션의 pid (process ID)를 알 수 있는 방법이 좀 있거든요. Windows에서는 좀더 힘들 거라고 생각해요 (역자 주: 되는데요. .). 그런데 이게 좀 힘든 게 Tor 애플리케이션들이 Polipo나 Privoxy같은 중개 http proxy를 쓰는 경우가 많거든요. 이러면 이 프록시들에게 또 애플리케이션들을 어떻게 구별할지 알려준 다음에 그 정보를 Tor한테 전달하게 해야죠.

다른 방법이라면 목표 포트에 따라 스트림을 나누는 방법이 있겠죠. 그럼 포트 80으로 가는 스트림들은 한 순환로로 전송하고, 다른 포트로 가는 스트림은 다른 순환로로 전송하고요. 지금까지 이 아이디어는 계속 갖고 있었습니다만 구현을 못한 건 다 Bittorrent 때문입니다. Bittorrent 클라이언트가 50개 목표 포트에 50개 스트림을 다 전송하려 들면 그렇다고 Tor 클라이언트에서 순환로를 50개나 구성해야 하는데 이건 결코 좋은 게 아니거든요. 네트워크에 너무 로드를 많이 주게 돼요. 포트 80인 거랑 80이 아닌 거랑 둘로 나눌 수도 있겠습니다만, 첫째로 이러면 IM, SSH같은 다른 포트들을 다 따로 처리를 해 줘야 할 거고, 둘째로 요즘 방화벽들이 인터넷을 80포트로 사용하도록 압력을 점점 세게 넣고 있단 말이죠.

애플리케이션에서 좀 민감한 정보를 넘기더라도 유저를 보호할 수 있는 방법이 나올 때까지 브레인스토밍을 계속할 겁니다. 그치만 그동안은 저 연구원들이 결과를 배포해서 다른 사람들이 이 공격을 평가할 수 있게 해 주었으면 좋겠습니다. (Tor 공격이나 방어에 대해 연구하시는 분이라면 여기 연구 자원 페이지를 확인해 보세요.) 이 논문에 나온 공격은 여러분이 Bittorrent를 쓰신다면 심각한 공격이고, 좀더 프라이버시를 제대로 지키고 싶어하실 겁니다.

[번역] Tor로 Bittorrent를 쓰는 건 좋은 생각이 아닙니다”에 대한 2개의 생각

  1. 여기서 경고한 부분은 사실 이 글이 2010년자기 때문에, 해결되었을 수 있습니다. 지금 뮤토렌트에 보면 프록시 옵션에서 관련 항목들이 있거든요. 다만 그 항목들을 왜 다 체크해야 하는지에 대한 이유가 될 수 있을 겁니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중