본문 바로가기

[+] Forensic

[생각] 토렌트 최초 유포자를 어떻게 검거 할까?

 요즘 개인적으로 많은 일들을 하고 있지만, 가장 흥미롭게 하는 일은 역추적에 관한 연구를 하는 일이다. 특히 "Tor 네트워크 내에서 어떻게 역추적을 할까?" 라는 생각으로 많은 시간을 보내곤 한다. 아직까지는 뾰족한 묘수를 내지 못하고 있지만, 조만간 생각 해 낼거라는 생각이 든다.

 무튼 이번 글에서는 이런 역추적 생각을 하던 중 알아낸 재밌는 이야기를 풀어보고자 한다. 요즘 수사기관에서 아동 포르노와 성인물, 불법 다운로드 및 공유에 관해서 굉장히 촉각을 세우고 여러 사람들을 검거하고 있다. 수사기관들은 어떻게 최초 유포자를 찾아낼까? 필자는 여러가지 가정을 생각 해 보았다.(실제로는 어떻게 추적하여 검거하는지 필자는 알지 못하므로 하나의 필자가 제시하는 가정일 뿐이다.)


0x01. 생각해본 수사방법

1. 특정 공유 사이트 모니터링

 - 수사기관은 특정 공유사이트들을 선정하여 시드파일을 업로드 한 여러 게시글들의 타임라인을 분석하여 최초 시드 파일 업로드한 자를 검거하는 방법이다. 아래는 해당 가정을 뒷받침 해 주는 것으로 인터넷에 떠돌아 다니는 수사기관에서 모니터링한다는 웹하드와 토렌트 사이트 목록이다.


[그림 1 - 국내 토렌트 적발 사이트 목록]


2. 위법한 시드파일을 수집하여 해당 파일의 클라이언트로 위장하여 다운로더 아이피 수집.

 - 이 방법은 수사기관이 가장 쉽게 다운로더들의 아이피를 수집 할 수있는 방법이지만, 최초 유포자를 찾기에는 조금 무리가 있는 방법으로 생각된다.


0x02. Bit Torrent 프로토콜 동작 원리

 위 방법들이 현재 수사기관이 실제로 쓰는 방법인지는 모르겠지만, 각 방법들마다 약간의 한계점이 존재하는 것은 사실이다. 그래서 필자는 트래픽 분석을 통한 최초 유포자를 찾는 방법을 한번 사용해 보면 어떨까 한다.

 일단 Bit Torrent 프로토콜의 동작원리를 알아야하지만, 글 특성상 이 부분에 대해서는 넘어가도록 한다. 이미 정리가 잘되어 있는 문서들이 많기 때문에 해당 문서를 소개하는 정도로 하고 해당 내용은 건너띄도록 하겠다.


 - BitTorrent 프로토콜의 동작원리(http://www.netmanias.com/bbs/view.php?id=techdocs&no=62)


0x03. 트래픽 분석

 위 문서를 잘 읽어보았다면 트래커가 무엇인지 알 수 있을 것이다. Bit Torrent 프로토콜을 보면 클라이언트(피어)와 트래커는 통신을 수행한다. 근데 이때 트래커와 클라이언트는 공유하는 파일에 대해 여러가지 정보를 교환한다. 이때 교환하는 정보로 트래픽 분석자는 많은 클라이언트들 중에서 최초 공유하는 사람을 구별 해 낼 수 있다. 트래커와 클라이언트가 교환하는 패킷은 다음과 같다.


[그림 2 - Tracker Request/Response 패킷]


많은 파라메터 변수들과 값이 존재하는 것을 볼 수 있지만, 포렌식 관점에서 도움이 되는 변수들과 값은 다음과 같다.


[Tracker Request]

info_hash : 토렌트 시드파일에 포함되어 있는 공유파일의 해시 값이며, 어떤 파일을 받는지 구분할 수 있는 파라메터이다. 

uploaded : 현재 사용자가 업로드한 파일의 개수를 의미한다. 해당 값이 0이라면 해당 사용자는 공유한 파일이 없다고 볼 수 있다.

downloaded : 현재 사용자가 다운로드 한 파일의 크기이며, 단위는 byte이다.

left : 현재 사용자가 다운로드 하는 파일의 총 크기에서 다운로드 해야 할 크기이며 단위는 byte이다.

key : 트래커 서버에서 클라이언트를 구분하기 위한 값으로 아이피가 변경되어도 클라이언트를 구분하기 위해 사용하므로 중요한 값이다.


[Tracker Response]

downloaded : 현재 공유 파일을 다운로드 한 횟수이다.

complete : 현재 파일을 공유하고 있는 시더들의 수를 나타낸다. 


 각 변수들의 설명을 읽어보면 어느정도 감이 오리라 생각된다. 적어도 트래픽에서 어떤 사용자가 트래커에서 uploaded 변수의 값이 0보다 큰 값을 설정하고, downloaded 변수의 값이 0으로 설정하고, left 변수의 값을 0으로 설정 해 패킷을 보낸다면 이는 해당 파일의 최초 공유자일 경우가 굉장히 높다. 이처럼 변수들을 설정하여 트래커에게 패킷을 보낸다는 것은 해당 사용자는 업로드한 파일이 1개 이상이며, 해당 파일을 다운로드 하지 않는다는 의미이다. 그러므로 해당 파일을 공유한다고 볼 수 있다.


 또 트래커가 어떤 사용자에게 응답으로 downloaded 변수의 값을 0또는 1로 설정하고, complete 변수의 값을 0 또는 1로 설정 해 패킷을 전송한다면 해당 패킷을 받는 사용자는 최초 공유자일 확률이 굉장히 높다.


0x04. 결론

 무책임하고 두서없이 써내려갔지만, 제시한 것들만 잘 살펴보면 충분히 이해 할 수 있을거라 생각이 든다. 물론 해당 방법을 사용하기 위해서는 ISP의 적극적인 협조가 필요하며, 패킷감청이라는 법적인 문제도 해결해야 한다. 하지만 이 방법을 잘 다듬어 자동화한다면 좀 더 신속하고 빠른 수사진행을 할 수 있을거라는 생각이든다.