[Tech Report] 비트토렌트, 반드시 흔적은 남는다
BitTorrent Analysis
최근 불법 파일 공유와 지적재산권 침해가 사회적 이슈가 되면서 ‘P2P’라는 용어가 자주 등장하고 있다. P2P(Peer-to-Peer)는 인터넷을 통한 파일 공유 기술이나 뛰어난 성능과 빠른 속도의 장점이 파일의 불법 공유에 악용되는 사례가 증가하고 있다. 이에 월간 안에서는 2회에 걸쳐 P2P 기술 중 가장 활발하게 이용되고 있는 비트토렌트(BitTorrent)에 대해 알아보고 있다.
이번 호에서는 비트토렌트의 핵심 구성 요소인 트래커(Tracker) 또는 피어(Peer)로부터 전달받은 피어에 대한 정보를 기반으로 어떤 과정을 통해 실제 파일의 Piece 데이터 송수신이 이루어지는지 살펴본다. 또한 비트토렌트를 이용한 파일 공유에 참여한 PC에 어떤 흔적이 남아있는지 알아본다.
<연재 목차>
1부_BitTorrent 기초 분석(2014년 8월 호)
2부_BitTorrent 공유 과정 실전 분석(이번 호)
파일의 공유에 참여하고자 하는 이들은 파일에 대한 토렌트(Torrent) 파일이나 마그넷 링크 주소를 이용하여 공유를 시도한다. 그리고 파일 공유가 본격적으로 시작되기에 앞서 현재 해당 파일을 공유하고 있는 피어(Peer)들의 IP와 포트 번호(Port Number) 정보를 트래커(Tracker) 또는 일부 피어들로부터 전달받는다. 이렇게 전달받은 각 피어에 대한 정보를 이용해 어떻게 파일의 공유가 이루어지는지 상세한 과정을 살펴보자.
비트토렌트 파일 공유 과정 분석
각 피어에 대한 정보를 이용해 실제 파일 공유가 이루어지기까지의 과정은 [그림 1]과 같이 크게 4단계로 구분할 수 있다.
[그림 1] 비트토렌트를 이용한 파일 공유 과정
1. BitTorrent Handshake
파일 공유에 참여하고자 하는 이들은 트래커 혹은 피어들로부터 전달받은 다수의 피어 IP에 대해 기본적인 통신을 수행하기 위해 TCP 3-way Handshaking을 진행한다. 그리고 TCP 3-way Handshaking 과정을 통해 성공적으로 세션이 맺어진 피어들을 대상으로 BitTorrent Handshake 메시지를 보낸다. BitTorrent Handshake 메시지는 비트토렌트 프로토콜에서 제공하고 있는 메시지 타입 중 하나로, 메시지를 받는 상대방이 나와 파일을 공유할 의사가 있는지를 묻는 의미를 담고 있다. BitTorrent Handshake 메시지 안에는 메시지를 보내는 이의 피어 ID와 공유하고자 하는 파일 관련 정보에 대한 SHA1 값이 들어있다.
만일 BitTorrent Handshake 메시지를 받은 상대방이 공유에 참여할 의사가 있다면 파일 정보의 SHA1 값과 상대방의 피어 ID가 BitTorrent Handshake 메시지에 포함되어 나에게 전송된다. [그림 2]와 [그림 3]은 2명의 피어가 서로 BitTorrent Handshake 메시지를 주고받는 과정에서 발생한 패킷이다. 동일한 파일 정보의 SHA1에 대해 각자의 피어 ID가 포함된 BitTorrent Handshake 메시지를 주고 받는 것을 확인할 수 있다.
[그림 2] BitTorrent Handshake 메시지 패킷
[그림 3] BitTorrent Handshake 응답 메시지 패킷
실제 공유 과정에서 발생하는 패킷을 분석하면 다수의 피어들이 BitTorrent Handshake 메시지가 담긴 패킷을 주고 받는 것을 확인할 수 있다. 상대방이 마찬가지로 BitTorrent Handshake 메시지로 응답하면 현재 공유에 참여하고 있는 중이라는 것을 유추할 수 있다. 만일 상대방이 BitTorrent Handshake 메시지에 응답하지 않는다면 일시적으로 공유에 참여할 수 없는 상태이거나 또는 과거에 공유 과정에 참여했지만 현재는 공유에 참여하고 있지 않을 가능성이 높다.
BitTorrent Handshake 과정이 성공적으로 이루어지면 바로 다음 단계로 이어진다.
2. 비트토렌트 메시지 1 - “Have, Piece”
BitTorrent Handshake 과정이 성공적으로 이루어져 서로 파일을 공유할 의사가 있음이 확인되면 각 피어는 상대방에게 “Have, Piece” 메시지를 통해 자신들이 보유하고 있는 Piece 에 대한 정보를 전송한다. 원활한 파일 전송을 위해 일정한 크기로 쪼개진 조각인 Piece는 고유한 시퀀스 넘버를 갖는데, 비트토렌트 프로토콜 상에서는 이를 idx라 부른다. 각 피어들은 각자가 보유하고 있는 Piece들의 idx 값을 Have, Piece 메시지 속에 포함시켜 상대방에게 보냄으로써 현재 자신이 어떤 Piece들을 보유하고 있는지 알린다.
[그림 4] Have, Piece 메시지가 포함된 비트토렌트 패킷
피어들이 서로 Have, Piece 메시지를 주고 받는 이유는 현재 서로 필요로 하는 Piece들을 상대방이 보유하고 있는지 확인하기 위함이다. 만일 현재 세션이 맺어진 2명의 공유자들이 각각 파일의 배포자가 아닌 피어(Peer)로, 파일의 일부분들만 보유하고 있는 상태라고 가정해보자. 그렇다면 2명의 공유자는 서로 보유하고 있는 파일의 Piece가 온전하지 못하기 때문에 Have, Piece 메시지를 주고받음으로써 자신이 원하는 Piece를 상대방이 보유하고 있는지 확인한다. 만일 2명의 공유자 중 한 쪽이 시더(Seeder, 파일 게시자/배포자)일 경우, 시더는 자신이 시더임을 알리는 메시지를 보냄으로써 모든 Piece를 보유하고 있다는 것을 알린다. 이때 Have, Piece 메시지는 보내지 않는다.
이 단계에서 분석가들은 각 IP가 시더인지 피어인지 판단할 수 있으며, 피어의 경우 어떤 Piece들을 보유하고 있는지 식별할 수 있다. 또한 이를 통해 각각의 피어가 공유 파일의 전체 데이터 중 몇 %를 보유하고 있는지 판단할 수 있다. 해외에서는 불법 공유 파일의 데이터 중 몇 % 이상이 PC에서 발견되었는지에 따라 범죄 여부가 갈리기도 한다.
3. 비트토렌트 메시지 2 - “Request, Piece”
Have, Piece 메시지를 주고 받는 과정을 통해 내가 필요로 하는 Piece를 상대방이 보유하고 있음이 확인되면 “Request, Piece” 메시지를 보내 해당 Piece를 요청한다. 마찬가지로 Request, Piece 메시지에 필요로 하는 Piece의 idx와 요청 데이터의 크기 정보를 포함시켜 전송한다.
[그림 5] Request, Piece 메시지가 담긴 비트토렌트 패킷
4. Piece 데이터 송수신
Request, Piece 메시지를 받은 피어는 특별한 이유가 없는 한 요청 받은 Piece 데이터를 TCP 스트림(Stream) 형태로 전송한다.
[그림 6] TCP 프로토콜을 통한 Piece 데이터 전송
PC에 남는 흔적 분석
지금까지 토렌트 파일이나 마그넷 링크를 실행해 공유가 진행되는 과정에서 발생하는 패킷을 통해 각 피어의 정보 및 공유에 참여한 정도를 파악했다. 그러나 이것은 공유에 참여한 각 피어에 대한 정보를 수집하기 위한 과정일 뿐이다. 실제로 각 피어가 공유에 참여했다는 것을 입증하기 위해서는 IP를 기반으로 공유에 사용된 PC를 파악하고 해당 PC에서 공유된 파일 및 공유 관련 흔적을 발견할 수 있어야 한다.
이제 PC에서 사용자가 비트토렌트를 통해 특정 파일을 공유한 흔적을 찾는 방법을 알아볼 차례다. 이 글에서는 비트토렌트 클라이언트 프로그램 중 유토렌트(uTorrent)를 이용해 파일 공유에 참여했을 때 PC에 어떤 흔적이 남을 수 있는지 알아본다.
1. 토렌트(Torrent) 파일
사용자가 유토렌트 프로그램을 이용해 토렌트 파일을 실행하면 [표 1]과 같은 경로에 해당 토렌트 파일들이 저장된다.
[표 1] 유토렌트 프로그램의 토렌트 파일 저장 경로
사용자가 유토렌트 프로그램을 이용해 토렌트 파일을 실행하면 [표 1[의 경로에 토렌트 파일의 복사본이 생성된다. 따라서 위의 경로에 남아있는 토렌트 파일을 분석함으로써 PC 소유자가 현재까지 어떤 토렌트 파일을 실행하여 파일 공유에 참여했는지 확인할 수 있다. 설사 PC 소유자가 토렌트 파일을 실행한 뒤 원본 토렌트 파일을 삭제한다 하더라도 위의 경로에는 여전히 토렌트 파일이 남아있을 가능성이 높다. 물론 PC 사용자가 위의 경로에 존재하는 토렌트 파일들까지 삭제했을 경우에는 흔적을 찾는 것이 조금 더 어려워진다.
이 밖에도 [표 1]의 경로에 존재하는 각 토렌트 파일의 생성 시각을 토대로 토렌트 파일이 언제 실행되었는지 유추가 가능하다. 해당 경로에 토렌트 파일이 생성되는 시점이 바로 원본 토렌트 파일이 최초로 유토렌트 프로그램에서 실행되면서 토렌트 파일의 복사본이 해당 경로에 저장되는 시점이기 때문이다.
[그림 7] %Userprofile%\AppData\Roaming\uTorrent에 존재하는 파일들
[그림 7]은 윈도(Windows) 8 환경에서 %Userprofile%\AppData\Roaming\uTorrent 경로에 접근한 경우이다. 유토렌트 프로그램과 관련된 다양한 설정 파일을 확인할 수 있으며 현재까지 실행된 토렌트 파일들의 복사본을 확인할 수 있다. 각 토렌트 파일의 생성 시각(만든 날짜)은 필자가 각각의 토렌트 파일을 최초로 실행했던 시각이다.
2. 레지스트리
사용자가 토렌트 파일을 실행하면 가장 최근에 실행한 토렌트 파일 10개에 대한 이름 정보가 바이너리 형태로 아래의 레지스트리 경로에 남는다.
|
HKEY_USERS\
|
[그림 8] ~ [그림 10]은 윈도 8 환경에서 위의 경로로 접근한 경우다. 최근에 실행된 토렌트 파일 10개에 대한 정보가 남아있음을 확인할 수 있다.
[그림 8] 토렌트 파일 정보가 저장된 경로
[그림 9] 토렌트 파일 정보의 바이너리 값 1
[그림 10] 토렌트 파일 정보의 바이너리 값 2
이때 각 데이터에 존재하는 값 이름(0~9)이 토렌트 파일이 실행된 순서를 의미하는 것은 아니다. 새로운 토렌트 파일이 실행될 때마다 10개의 토렌트 파일 목록 중 가장 오래 전에 실행한 토렌트 파일 데이터를 새로 실행하는 토렌트 파일 데이터로 수정하는 방식으로 키의 갱신이 발생하기 때문이다. 즉, 값 이름이 0인 데이터가 10개의 토렌트 파일 목록 중 가장 먼저 실행된 것이 아닐 수도 있다는 의미다. 비록 위의 레지스트리 경로에서 확인되는 정보로 각 토렌트 파일의 실행 순서를 파악하는 것은 어렵지만 특정 토렌트 파일이 실행되었음을 확인하는 용도로는 활용할 수 있다.
3. 유토렌트 프로그램 자체 로그
유토렌트 프로그램은 ‘통계 정보’라는 기능을 통해 그 동안의 유토렌트 프로그램 사용 기록에 대한 정보를 보여준다. 이 정보는 유토렌트 프로그램의 [메뉴-도움말-통계표시] 부분에서 확인할 수 있다.
[그림 11] 유토렌트 프로그램의 ‘통계 정보’ 기능
[그림 12]는 유토렌트의 통계 정보(통계 표시)에서 제공되는 정보이다. 지난 31일 간의 전송량, 총 업로드량, 총 다운로드량, 총 실행시간, 추가된 토렌트 파일의 수, 유토렌트 프로그램 실행 횟수, 유토렌트 프로그램 마지막 실행 시각 등의 정보가 나타난다.
[그림 12] 유토렌트의 통계 정보(통계 표시)에서 제공되는 정보
지금까지 2회에 걸쳐 대표적인 P2P 프로그램인 비트토렌트의 파일 공유 과정과 패킷을 통해 파일 공유에 참여한 사용자들의 정보를 확인하는 방법을 알아보았다. 뛰어난 성능과 빠른 속도의 장점을 가진 P2P 기술이 지적재산권을 침해하는 불법 파일 공유에 악용되는 사례가 증가하면서 직접적인 제재 방안에 대한 관심이 늘고 있다. 최근 주로 사용되고 있는 P2P 프로그램인 비트토렌트 분석을 통해 다양한 P2P 기술의 부작용을 방지할 수 있는 방법에 대해 생각해 볼 수 있을 것이다.@
- AhnLab클라우드분석팀 박수영 연구원