[Tech Report]P2P 기술의 그림자, 불법 파일 공유를 막아라
Tech Report BitTorrent Analysis
P2P는 인터넷을 통한 파일 공유 기술로, 다수의 클라이언트 간에 파일을 공유할 때 매우 유용하게 사용되는 기술이다. 그러나 현재 P2P 기술의 장점인 뛰어난 성능과 빠른 속도가 파일의 불법 공유에 악용되면서 지적 재산권 침해 등 사회적 문제가 되고 있다. 기존에는 P2P 서버를 중지시킴으로써 파일의 불법 공유 확산을 차단할 수 있었으나 최근 서버를 필요로 하지 않는 새로운 방식의 P2P 기술이 등장하면서 P2P 서버를 중지시키는 것만으로는 파일의 불법 공유를 막기 어렵게 되었다. 파일의 불법 공유를 막기 위해 공유자들에 대한 직접적인 제재가 필요한 시기가 된 것이다.
‘월간 안’에서는 2회에 걸쳐 새로운 방식의 P2P 기술 중 가장 활발하게 이용되고 있는 비트토렌트(BitTorrent)에 대해 알아보고 불법 파일 공유에 참여한 이들의 정보를 확보할 수 있는 방안을 살펴보고자 한다.
<연재 목차>
1부_BitTorrent 기초 분석(이번 호)
2부_BitTorrent, 공유 과정 실전 분석(2014년 9월 호)
‘저작물’이란 어떤 아이디어를 독자적으로 표현한 창작물을 말한다. 지적 재산권은 저작자의 저작물 창조에 대한 의지 및 생산력 증진을 위해 저작자에게 주어지는 권리이다. 그러므로 저작물을 저작자의 동의 없이 업로드 할 경우, 이는 저작자의 권리 중 복제권과 전송권을 침해하는 행위이며 이를 다운로드하는 것은 저작자의 복제권을 침해하는 행위이다. 저작권법 제 136조에 의하면, 저작물을 무단으로 복제하여 영리 행위를 한 경우 5년 이하의 징역 또는 5천만원 이하의 벌금에 처하거나 이를 병과할 수 있다.
과거에 P2P를 통해 불법 공유가 발생한 경우, 법원은 P2P 서비스 제공자, 사이트 운영자들에게 기여책임 및 대위책임이 있다고 판결하였다. 이에 대한 처벌로 해당 사이트를 폐쇄하고 서비스 제공을 중지하도록 명령하였다. 그러나 최근 많이 사용되고 있는 비트토렌트(BitTorrent)는 기존의 P2P와 구조가 다르기 때문에 기존 판결이 적용되기 어려운 형태다. 그러다 보니 비트토렌트를 이용한 파일의 불법 공유는 지속적으로 늘어나는 추세이다.
P2P의 진화
최신 P2P 프로그램인 비트토렌트를 이해하기 위해서는 먼저 P2P가 어떻게 진화해왔는지 살펴볼 필요가 있다. P2P(Peer-to-Peer)는 개별 클라이언트들의 참여로 구성되는 통신망을 구현하는 기술이다. P2P 기술은 통신에 참여하는 각 클라이언트들이 데이터를 효율적으로 빠르게 주고받을 수 있는 방향으로 발전해왔다.
P2P의 유형은 크게 1세대 P2P ~ 4세대 P2P로 나뉜다. 1세대 P2P는 ‘중앙 서버-다수의 클라이언트’ 형태로 구성되어 있다. 중앙 서버에서는 각 클라이언트들에 대한 정보를 가지고 있으며, 이 정보를 클라이언트들에게 제공함으로써 클라이언트 간에 원활한 통신이 가능하게 한다. 냅스터(Napster), 소리바다(soribada) 등 mp3 파일 공유 프로그램이 대표적인 1세대 P2P라 할 수 있다. 1세대 P2P의 네트워크는 서버 상태에 의존적인 구조이기 때문에 서버에 문제가 생길 경우 클라이언트들은 원활하게 데이터를 공유할 수 없게 되는 단점이 있다.
[그림 1] 1세대 P2P 냅스터와 소리바다
이후 등장한 2세대 P2P는 중앙 서버의 역할을 축소하거나 제거하고, 클라이언트들간에 네트워크를 형성하여 데이터의 공유를 가능하게 하는 형태로 발전하였다. 프리넷(Freenet), 그누텔라(Gnutella) 등이 이에 속한다.
[그림 2] 2세대 P2P 프리넷과 그누텔라
3세대 P2P부터는 파일을 일정한 단위의 조각으로 나누고 클라이언트간에 서로 필요한 조각을 주고받는 형태로 공유가 이루어지게 되었다. 이러한 방식을 통해 데이터의 공유 속도가 향상되었으며 클라이언트간에 데이터가 더욱 효율적으로 오갈 수 있게 되었다. 당나귀(edonkey), 이뮬(eMule) 등이 3세대 P2P라 할 수 있다.
[그림 3] 3세대 P2P 당나귀(edonkey)와 이뮬
하이브리드 P2P, 비트토렌트
[그림 4] 비트토렌트 로고
4세대 P2P로 불리는 비트토렌트는 앞선 P2P들의 특징을 모두 포함하고 있다. 서버와 유사한 기능을 제공하는 트래커(Tracker)도 존재한다. 트래커는 다른 클라이언트에 대한 정보 및 공유되는 데이터에 대한 간단한 정보만을 보유하고 있으며 클라이언트들이 데이터 공유에 참여하는 과정에서 트래커에 필요한 정보를 HTTP GET 형태로 요청하면 그에 대한 응답으로 정보를 보내준다. 클라이언트는 트래커로부터 전달받은 타 클라이언트에 대한 정보를 토대로 데이터 공유 네트워크에 참여한다.
그러나 트래커가 비트토렌트를 통한 데이터 공유의 필수 요소는 아니다. 비트토렌트는 DHT라는 내부 알고리즘을 통해 데이터 공유에 참여하고 있는 피어(Peer, 즉 클라이언트)들로부터 직접 피어들에 대한 정보와 네트워크에 대한 정보를 제공받음으로써 공유 네트워크에 속하여 데이터를 공유하는 것이 가능하다.
[그림 5] 비트토렌트 네트워크 구조
비트토렌트는 공유 파일을 일정한 크기의 조각인 Piece로 분할하고 각 피어들간에 Piece를 주고받게 함으로써 빠르고 효율적으로 파일이 공유될 수 있게 하였다. 또한 각 피어가 보유하고 있는 Piece 목록 정보를 네트워크 상에서 공유하게 함으로써 각 피어들이 원하는 Piece 를 빠르게 찾아갈 수 있게 하였다.
토렌트 파일 분석
토렌트(Torrent) 파일은 공유 대상이 되는 파일의 이름, 파일 전체 크기, 파일의 해시값(hash value), 트래커, Piece 등에 대한 정보를 갖고 있으며 그 내용은 Bencoding 형태로 구성되어 있다. Bencoding은 바이너리 인코딩(Binary encoding)의 약자로, 비트토렌트 관련 파일에서 데이터를 저장하거나 공유 네트워크 상에서 정보를 주고 받을 때 사용하는 형식이다. Bencoding의 구조는 [표 1]과 같다.
[표 1] Bencoding 구조
토렌트 파일은 다음의 정보들을 Bencoding의 디렉터리(Directory) 형식에 맞춰 갖고 있다.
[표 2] 토렌트 파일의 정보
트렌트 파일을 헥사 뷰어로 열어보면 다음의 그림들과 같이 Bencoding 형태로 다양한 정보들이 들어있음을 확인할 수 있다.
[그림 6] 토렌트 파일 예시1 (announce, announce-list)
[그림 7] 토렌트 파일 예시2 (comment, created by, createdate, files, length, path)
[그림 8] 토렌트 파일 예시3 (piece length, pieces)
비트토렌트 파일 공유자 정보 확보 방법
비트토렌트 클라이언트 프로그램에서 토렌트 파일을 실행하면 공유가 시작된다. [그림 9]는 비트토렌트 클라이언트 프로그램 중 하나인 uTorrent에서 테스트용 토렌트 파일을 실행시켰을 때의 화면이다.
[그림 9] 파일 공유가 진행 중인 uTorrent 프로그램 화면
[그림 9]의 프로그램 화면 우측 하단에서 현재 실시간으로 파일의 Piece를 주고받는 피어들에 대한 정보를 확인할 수 있다. [그림 9]의 예로 든 화면에서는 피어의 수가 5개 정도로 보이지만 실제로 파일 공유 네트워크에는 훨씬 더 많은 피어들이 존재하고 있다. 이들 피어에 대한 정보는 두 가지 방법을 통해 확인할 수 있다.
1. 트래커로부터 전달 받은 HTTP Response 패킷 분석
트래커는 각 파일 별로 공유 네트워크에 참여하고 있는 피어들에 대한 목록을 가지고 있다. 따라서 새로운 피어가 해당 목록을 HTTP GET 형태로 요청하면 이에 대한 응답으로 현재 공유에 참여하고 있는 피어들에 대한 목록을 보내준다. 피어들에 대한 정보를 갖고 있는 트래커에 공유되고 있는 파일의 해시 정보에 대해 HTTP GET 요청을 보내고, 이에 대한 응답으로 받은 HTTP Response 패킷에서 해당 파일을 공유하고 있는 피어들에 대한 정보를 추출하는 것이다.
[그림 10] 피어 목록 정보가 담긴 패킷 (트래커로부터 전달받은 정보)
패킷의 데이터 부분에는 [그림 10]과 같은 형태로 피어들의 IP와 포트 정보가 6바이트(byte)씩 연달아 들어있다. 따라서 HTTP 패킷의 Bencoding 영역 내에 키 ‘peers’가 존재할 경우 해당 키에 대응되는 value 부분으로부터 공유 네트워크를 구성하는 피어 들에 대한 정보를 수집할 수 있다.
2. 피어로부터 전달받은 패킷 분석
피어들은 각 파일 공유 네트워크에 참여하고 있는 피어들에 대한 목록을 가지고 있으면서 서로 보유하고 있는 피어 목록을 주고받음으로써 주기적으로 정보를 갱신한다. 구체적으로는, 피어가 다른 피어에게 관심 파일의 해시값과 ‘get_peers’ 메시지가 담긴 UDP 패킷을 보내면서 피어 목록을 요청하는 것이다. 해당 UDP 패킷을 받은 피어는 자신이 보유하고 있는 피어들의 목록을 응답으로 보내준다.
[그림 11] ‘get_peers’ 메시지가 담긴 피어 목록 요청 패킷
[그림 12] 피어 목록 정보가 담긴 패킷 (네트워크 상의 다른 피어로부터 전달받은 정보)
패킷의 데이터 부분에는 [그림 12]와 같이 피어들의 IP와 포트 정보가 6바이트씩 연달아 들어있기 때문에 HTTP 패킷의 Bencoding 영역 내에 키 ‘values’가 존재할 경우, 해당 키에 대응되는 value 부분으로부터 공유 네트워크를 구성하는 피어들에 대한 정보를 수집할 수 있다.
지금까지 대표적인 P2P 프로그램인 비트토렌트의 동작 방식을 살펴보고 비트토렌트의 두 가지 패킷 유형을 분류해 Bencoding 영역에서 피어의 IP와 포트 정보를 추출함으로써 파일 공유에 참여한 사람들의 정보를 추출하는 방법을 알아보았다. 다음 호에서는 비트토렌트의 파일 공유 과정과 관련 패킷에 대해 상세히 분석하고 파일 공유 참여 시 사용자의 PC에 남는 흔적을 분석하는 방법을 살펴보도록 하겠다.@
- AhnLab클라우드분석팀 박수영 연구원