Term
토르 서버, 트래픽 핑커 프린팅(Traffic Fingerprinting)
2016 12 28
  • Facebook
  • Twitter
  • Copy URL

토르와 같이 익명성과 보안이 높은 네트워크에서 이러한 네트워크에 있는 취약점을 통해 트래픽을 분석할 수 있다. 만약 토르 네트워크 사용자가 특정 웹 사이트에 방문할 때 누군가가 이 취약점을 통해 토르 사용자를 도청할 수 있다. 이러한 취약점을 통해 공격하는 것을 트래픽 핑커 프린팅(Traffic Fingerprinting)이라 한다. 즉, 트래픽 핑거 프린팅이란 트래픽의 암호화를 풀지 않아도 패킷의 흐름 패턴을 분석하여 특정 토르 네트워크의 사용자를 도청하는데 사용되는 기술이다. 결국, 이 공격을 통해 토르 네트워크의 특징인 익명성과 높은 보안이 완전하게 무의미해지는 순간이다.

이미지를 불러오는데 실패했습니다.

사람들은 종종 암호화가 되어 있다고 해서 완전하게 신뢰하지만 완벽한 보안은 없듯이 네트워크에 오고 가는 데이터의 내용은 숨기더라도 모든 것을 숨길 수 있는 것은 아니다. 만약 누군가가 암호화된 데이터를 도청하고 있다면 그 사용자가 누구인지 그리고 전송되는 데이터의 크기는 숨길 수 없을 것이다. 오늘 말하는 취약점을 통해 토르와 같이 보안성이 높은 네트워크에서도 사용자가 어느 특정 웹 사이트에 방문하였는지 알 수 있다. 더욱이 이 취약점은 소규모의 네트워크에서도 성공적으로 구현하였으며 아마도 국가 전체에서도 적용할 수 있을 것이다.

일반적으로 트래픽의 흐름과 상태를 모니터링하는 과정을 트래픽 분석이라 한다. 트래픽 분석은 암호화된 트래픽과 마찬가지로 암호화되어 있지 않은 트래픽에서도 할 수 있다. 이는 네트워크에서 흘러가는 데이터의 크기가 모호하지 않고 일정하기 때문이다. 이 때문에 트래픽 분석은 데이터의 수신자와 발신자 그리고 전송되는 데이터의 양도 함께 알 수 있다. 하지만 만약 이러한 정보를 공격자가 알게 된다면 이는 어느 정도 위험한 상황이다.

토르 네트워크는 암호화 웹 프록시로 인터넷상에서 사용자에게 익명성을 제공하여 사용자의 신원을 보호하는데 사용되는 가장 인기 있는 시스템 중 하나다. 이 토르 네트워크를 이용하는 사용자는 중간에서 도청하거나 연결하려는 제 3자, 사용자가 접근하고 있는 웹 서버로부터 자신을 감춰 사용자를 보호한다. 이는 사용자를 대신하여 외부로 노출되는 내용을 토르에서 다시 작성하여 요청함으로 가능하다. 또한, 토르는 사용자에게 익명성을 제공할 뿐만 아니라 사용자가 목적지까지 가면서 각각의 단계에서 사용자의 데이터를 암호화한다. 이러한 과정에서 지나쳐가는 다른 이의 컴퓨터는 토르가 설치된 컴퓨터 네트워크에 있으면 어떠한 컴퓨터든 경유지가 될 수 있다. 결국, 사용자의 주소는 처음 경유된 컴퓨터만 알고 목적지의 주소는 마지막에 거쳐 가는 컴퓨터, 가드만 알고 있다.

이미지를 불러오는데 실패했습니다.

하지만 악의적으로 작성된 자바 스크립트 파일을 사용하여 이런 유형의 보호를 우회할 수 있다. 사용자가 웹 페이지를 보고 있는 경우 SSL과 자바스크립트가 결합하고 웹 페이지에 있는 콘텐츠와 URL을 암호화한다. 이를 통해 공격자는 사용자의 최종 연결된 네트워크에서 사용자가 보고 있는 URL이나 내용을 볼 수 있다. 분명하게도 SSL은 데이터의 내용을 잘 암호화하고 있지만 트래픽 분석은 보호할 수가 없다.

사용자가 웹 페이지에 방문하면 사용자의 컴퓨터는 웹 페이지에 포함된 HTML 파일, 이미지, CSS 파일 등을 같이 여러 파일을 다운로드 한다. 예를 들어, 만약 사용자가 www.naver.com에 들어가게 되면 엄청나게 많은 개별 파일들을 내려받을 것이다. 이 수많은 개별 파일은 각각 특정 파일 크기가 있는데 대부분은 상수다. 이처럼 토르를 사용하여 같은 페이지에 방문하였을 때도 모든 파일을 다운로드한다. 각각의 파일은 별도의 TCP 연결을 통해 전송되고 각 파일은 별도의 포트를 통해 사용자의 컴퓨터에 반환된다.

공격자는 이러한 동작에서 반환되는 각 파일의 크기를 결정하여 토르에게 보낸다. 공격자가 이때 해야 할 일은 사용자의 컴퓨터 포트로 전송되는 바이트의 수를 센다. 즉, 공격자는 사용자의 네트워크를 모니터링 하면서 사용자가 수신하는 파일의 수와 대략적인 크기를 결정할 수 있다. 좀 더 예시를 들자면 공격자는 사용자가 각각 100byte, 200byte, 500byte, 10byte를 수신하면 4개의 연결을 생성했다는 것을 알 수 있다. 이 전송 크기는 각각 사용자가 수신한 특정 파일의 크기와 일치하다. 결국, 사용자가 받는 데이터의 크기들은 방문하는 웹 페이지의 지문으로 구성되어 있다는 것이다.

www.naver.com 웹 페이지와 같이 많은 그래픽과 이미지가 들어가 있다면 정말 여러 크기로 구성된 지문을 가지고 있을 것이다. 이러한 지문이 많을수록 한 특정 사이트를 가리킬 확률이 더 커질 거이고 이를 대략 계산하면 어느 정도 추산은 가능하다는 것이다. 좀 더 예시를 들어서 그래픽이나 이미지 요소가 많이 포함된 웹 페이지는 이 웹 페이지에 20개의 다른 파일이 있다고 가정해본다. 이 파일들은 각각 500byte 5000byte 사이의 임의의 크기를 가지고 있고 서로 다른 20개의 파일을 저장할 수 있는 크기는 약 4,500가지다. 이는 4,500개의 서로 다른 크기는 20개의 서로 다른 파일이 될 수 있다. 4,500개의 크기를 20개로 끌어 올리면 73가지의 여러 지문 중 10가지가 존재할 것이다. 이 숫자는 현재 월드 와이드 웹에 있는 웹 페이지의 모든 개수보다 훨씬 크다. 그러나 10~73번째 번호는 약 20개의 파일이 있는 웹 사이트에서만 적용된다. 순수하게 HTML이고 그래픽도 그렇고 다른 파일을 참조하지 않는 웹 사이트는 아마도 고유한 지문을 갖고 있지 않을 확률이 높다. 이전 견적을 사용하면 하나의 파일로만 구성된 웹 사이트에 대해서 약 4,500개의 지문이 남기 때문이다. 참고로 텍스트 전용 웹 페이지가 있다면 모든 지문이 고유하지 않을 것이다.

이미지를 불러오는데 실패했습니다.

세계 여러 정부에서는 인터넷에서 특정 콘텐츠 보는 것을 불법이라고 생각한다. 예를 들어 중국에서는 반체제적인 정치 생각을 보면 그것을 불법으로 간주한다. 중국 정부는 모든 인터넷 연결을 국내외로 제어하고 있기 때문에 중국 컴퓨터와 연결된 인터넷 통신도 모니터링이 가능하고 외부 사이트도 차단할 수 있다. 특히 중국 정부는 CNN, BBC, New York Times와 같은 웹 사이트도 차단했다. 토르는 이런 막아놓은 사이트에도 접근이 가능할 수 있도록 접근을 우회시켜 준다. 결국, 토르를 사용하면 방문한 사이트의 내용과 URL을 숨기므로 중국 정부는 사용자가 무엇을 보고 있는지 알 길이 없다.

이러한 트래픽 핑거 프린팅 기법을 이용하여 불법 사이트의 지문을 생성하여 획득해놓을 수는 있다. 그러면 막아놓은 사이트에 접근하는 사용자의 트래픽 패턴이 일치하면 차단한 웹 페이지에 접근한 것으로 볼 수 있을 것이다. 하지만 많은 사이트의 지문을 수집하고 있더라도 사이트가 계속 업데이트가 되는 사이트라면 지문도 주기적으로 수집해줘야 할 것이다.

트래픽 핑거 프린팅 공격을 좀 더 효과적으로 할 수도 있다. 작은 네트워크라면 기본적인 지문을 획득하는 것만으로도 충분하지만, 만약 큰 네트워크라면 이야기가 달라진다. 첫째로, 내려받는 파일의 순서를 분석하는 것이다. 사용자가 웹 페이지에 방문하면 보통 처음으로 내려받는 파일은 html 파일이다. 그런 다음 html 파일을 분석하여 참조된 파일, 이미지, CSS 파일 등을 분석한다. 각 특정 브라우저는 일반적으로 특정 웹 페이지에 대해 참조된 파일을 같은 순서로 요청한다. 공격자는 이를 고려하여 전송 크기뿐만 아니라 발생 순서도 분석할 수 있다. 이를 최대 효과적으로 분석하려면 공격자는 각 웹 사이트에 대해 각각의 웹 브라우징마다 여러 개의 지문을 생성해놓고 수집하는 것이 좋다.

둘째로, 지문 생성을 개선하는 것이다. 초기 지문 생성의 정확성을 높이기 위해 몇 가지 작업할 수 있다. 본질에서 생성된 각 지문은 약간의 노이즈를 포함하고 있기 때문에 정확한 지문을 생성하기 위해 여러 세트의 데이터를 사용하는 것이 유익하다. 이를 수행할 수 있는 한 가지 방법은 다른 컴퓨터에서 본 것과 같은 웹 사이트의 지문을 여러 개 가져와서 모든 지문을 함께 추가하는 것이다. 최소 횟수로 발생하는 파일 크기는 정확한 파일 크기로 간주하여 공격에 실제로 사용되는 지문에 포함할 수 있다.

셋째로 지문을 모든 웹 사이트의 지문으로 확대하는 것이다. 공격의 정확성과 완성도를 높이기 위해서 하나의 웹 페이지에서 전체 웹 사이트로 지문 개념을 확장하는 것이다. 사용자는 보통 웹 사이트에 방문하면 같은 사이트에 여러 페이지를 방문한다. 공격자는 특정 웹사이트에서 지문으로 사용할 수 있는 가능한 모든 파일에 대해 크기를 포함한 지문을 만들어 공격에 고려할 수 있다. 예를 들어 www.naver.com 웹 사이트의 지문은 주 페이지와 관련된 파일뿐만 아니라 메인 페이지에서 링크된 모든 페이지와 연관된 모든 파일을 표시한다. 여기서 한 가지 눈여겨 봐야 할 것은 대부분에 웹 사이트는 일반적으로 여러 페이지에서 이미지나 CSS 파일을 공유한다는 것이다. 사용자가 같은 웹 사이트에서 여러 페이지를 방문하면 사용자는 이미 다운로드 한 이미지를 캐시에 저장하므로 각각의 페이지와 연관된 모든 이미지를 다시 내려받을 필요성이 없다.

마지막으로 지문 매칭 기능을 좀 더 개선하는 것이다. 일치하는 두 개의 파일 지문이 일치하려면 파일 크기가 정확하게 일치해야 한다. 예를 들어, 두 파일의 크기가 서로 5바이트 이내면 파일 크기가 충분히 유사하고 아마도 같은 파일이라고 가정할 수 있다. 이때 얼추 비슷한 파일의 크기가 아닌 정확하게 일치하는 파일을 찾는 것이 중요하다. 일치하는 것이 보이지 않을 때는 1바이트씩 격차를 벌려 그나마 가장 일치하는 크기의 파일을 찾는다. 지정된 범위에 도달할 때까지 이 같은 과정을 계속 수행한다.

이미지를 불러오는데 실패했습니다.

토르 네트워크에서 이러한 트래픽 핑거 프린팅을 방지하려는 방법도 있다. 먼저 첫째로 사용자에게 반환되는 데이터에 노이즈를 추가하는 것이다. 이때 특정 값은 토르 서버에서 데이터를 사용자에게 반환하기 전에 수정해줘야 한다. 이 때문에 성능 저하는 올 수 있지만, 웹 페이지의 내용과 URL을 다시 포맷하여 이미 반환된 HTML을 수정한 후 사용자에게 반환하는 것만으로도 지문을 얻는 이들에게 혼란을 줄 수 있다. 노이즈를 주는 방법에도 여러 개가 있는데 먼저 임의의 크기를 데이터 파일에 추가하여 사용자에게 반환시키는 방법도 있다. 이때 추가되는 데이터는 사용자가 보는 웹 페이지 모양에 변경이 가지 않는 선에서 데이터를 추가한다. 예를 들어 문서의 시작 부분에 있는 html 태그 바로 뒤에 임의 크기의 주석을 추가할 수 있다. 페이지마다 특정 값이 많이 들어갈수록 실제 크기는 더 잘 보이지 않게 될 것이다. 하지만 커진 데이터의 크기만큼 전송하는 데이터의 양도 커지긴 할 것이다. 노이즈를 주는 방법 중에는 연결 크기를 추가하는 방법도 있다. 지문과 일치하는 연결의 비율을 낮추기 위해 임의 크기의 연결을 추가할 수 있다. 무작위로 크기가 1x1 투명 그래픽을 HTML에 삽입하여 이 작업을 수행할 수 있다. 이러한 추가 작업은 파일 전체에 추가할 경우 가장 효과적으로 나타난다. 그러면 지문을 모으는 이들은 아주 큰 덩어리 같은 지문이 다른 큰 실제 덩어리와 일치해 보일 수 있어 보여 혼란을 줄 수 있을 것이다. 하지만 이렇게 노이즈를 추가하는 방법에는 몇 가지 단점이 있다. 무엇보다 작은 그래픽을 일부 웹 페이지에 추가하면 페이지의 의도된 레이아웃에 손상될 수 있다는 것이다. 또한, 데이터의 크기가 늘어난 만큼 추가한 크기의 대역폭이 더 필요하다는 것이다.

두 번째로는 전송되는 파일 수를 줄이는 것이다. 브라우저에 옵션을 설정하는 방법으로 아마 가장 빠르고 쉬운 해결책일 수도 있다. 토르 사용자가 웹 페이지에 방문했을 때 이미지를 보지 못하도록 하는 것이다. 이러한 옵션은 대부분 브라우저에서 이미 사용할 수 있다. ‘그래픽 보지 않기’을 선택하여 사용자는 대부분의 웹 페이지에서 수신되는 파일 수를 크게 줄일 수 있다. 예를 들어 사용자가 www.naver.com을 방문하였을 때 그래픽이 켜진 상태와 비교하여 그래픽이 꺼진 상태에서 다운로드 한 파일 수가 25% 미만이다. CSS와 ActiveX 컨트롤을 사용하지 않도록 설정하여 전송되는 파일 수를 더 줄일 수 있다. 이러한 설정을 하면 각 지문의 파일 크기가 매우 작아져 파일의 크기가 고유하지 않을 가능성이 높다. 하지만 방문하는 웹 페이지의 그래픽을 볼 수 없으므로 사용하면서 불편함이 있다.

마지막으로 모든 연결을 하나의 연결로 전송하는 것이다. 웹 페이지에 있는 모든 파일을 함께 정리하여 공격자가 전송하는 파일 크기 결정하는 것을 더 어렵게 만드는 것이다. 이 같은 방법을 하기 위해서는 클라이언트가 같은 웹 서버에 대한 다중 연결을 열지 않는 것이다. 주어진 웹 서버에 최대 동시 연결 수를 설정하는 것은 윈도우 레지스트리 설정에 있다. 하지만 토르를 사용하여 웹 사이트를 방문하면 이러한 설정은 사실 크게 효과 없다. 이 기술을 사용하면 공격자가 전송되는 각 파일의 크기를 쉽게 찾을 수 없지만 전송된 패킷의 타이밍을 보고 각 파일의 크기를 찾을 수 있기 때문이다. 또 다른 방법으로 일부 서버는 웹 페이지와 모든 관련 파일을 단일 tarball로 사용자에게 반환하는 기능을 제공하는 것이다. 이 방법을 사용하면 공격자가 개별 파일의 크기를 결정할 수 없다. 하지만 이 역시 모든 브라우저 또는 웹 서버에서 이 기능을 사용할 수 없고 특정 브라우저에서만 사용할 수 있다.

이 외에도 방어하거나 공격을 할 방법이 존재할 수 있지만 여기 나와 있는 것만으로도 잘 활용할 수 있을 것이다. 추가로 데이터의 크기가 일반적인 암호화 때문에 난독화되지 않는 문제는 토르가 아닌 다른 영역에서 염두에 두어야 할 부분이다. 예를 들어 SSH의 일부 버전에서는 암호의 크기가 모호하지 않아 연결을 도청하는 침입자가 사용자의 사용 중인 암호의 크기를 결정할 수 있는 취약점이 있었다.

이처럼 난공불락 같은 토르 서버에서 사용자를 추적할 수 있다는 것은 사실 토르와 같이 프록시 서버의 특징이 허물어졌다. 토르가 처음 나왔을 때는 무척이나 느린 속도지만 익명성과 나를 보호할 수 있다는 점에서 최고의 보안 매개체로 칭송받았다. 하지만 역시 완벽한 보안은 없다는 것이 입증되는 순간이다.

유성경 yuopboy@grayhash.com