Trotinet Proxy라이브러리가 warning.or.kr 차단 필터를 우회 할 수 있는 이유?

vani2의 이미지

얼마 전에 영 좋지않은 법안이 개정되어(개정판 전기통신사업법) 기념으로(?) 이쪽 분야에 관심이 생겨 몇가지 찾아보게 되었습니다.

여튼 본론으로 들어가자면
인터넷 검열 우회에 관련하여 검색하다 닷지크롬과 닷지웹이라는 흥미로운 프로그램을 발견했습니다. 이 두 프로그램들은 외부 프록시나 VPN을 사용하지 않고 warning.or.kr등의 차단필터(덧글을 보면 해외의 검열방화벽도 우회했나봅니다)를 우회하는 신기한 프로그램입니다.
두개의 프로그램 모두 초기버전에선 헤더를 조작하여 요청을 보내는 방식으로 차단 필터를 우회했으나 얼마전 ISP의 서버 보안패치 이후 막혔다고 합니다.
하지만 기다렸다는 듯이 새 버전을 내놓았으며 wireshark같은 툴로 패킷을 분석해 보았으나 이번엔 헤더에 어떠한 조작도 가하지 않았다는 것을 알 수 있었습니다.

그래서 이에 관련하여 어떻게 우회가 가능했을까? 하고 나름대로 닷지웹을 뜯어보다 내부적으로 HTTP 프록시 라이브러리인 Trotinet을 사용하는 것을 알 수 있었고 심지어 프록시의 구현은 따로 변형하지 않고 공식 홈페이지의 example소스를 그대로 사용 하는 것을 볼 수 있었습니다(JetBrains DotPeek사용) +닷지크롬은 뜯어보지 못하여 원리가 무엇인지 모릅니다(..)

그래서 닷지웹을 타겟으로 두고 찾아보니 http://trotinet.sourceforge.net/ 요로코롬한 라이브러리를 사용하던데..
일반 타 HTTP 프록시 라이브러리와 다를게 없어보여서 제가 제일 좋아하는 node.js(io.js)와 http-proxy모듈을 이용해서 대충 비슷하게 구현해보려고 했으나 예상은 했지만.. 참혹하게 막혀버리네요..

var http = require("http");
var httpProxy = require("http-proxy");
 
var proxy = httpProxy.createProxy({});
 
var server = http.createServer(function(request, response)
{
	proxy.web(request, response, {
		target: "http://127.0.0.1:80",
		hostRewrite: true,
		secure: true
	});
});
 
server.listen(8888);
 
var proxy = httpProxy.createProxyServer({});
 
var server = http.createServer(function(request, response)
{
	proxy.web(request, response, {
		target: request.url,
		hostRewrite: true,
		secure: true
	});
});
 
server.listen(80);
 
// 저는 윈7을 사용하므로 프록시 설정에서 localhost를 쓰고 실험했습니다.
// 단. 하단의 target: request.url, 부분을 직접 우회하고 싶은 주소를 쓰면 우회가 됩니다만 cloudflare같은 서비스를 사용하는 사이트는 우회가 불가능했습니다.(DNS Resolution error)

제가 구현을 잘못한 것인지 아니면 http-proxy모듈의 한계인지는 모르겠지만.. 안되는군요.
그래서 낸 결과가 Trotinet C#라이브러리가 뭔가 특별한 것은 아닌가 하고 생각이 드는데(자매품으로 C++용 WinDivert도 있다고 합니다)

Trotinet라이브러리가 warning.or.kr의 차단 필터를 우회 할 수 있었던 원리가 무엇일까요? (혹은 방법)

일단 저는 KT회선을 사용합니다.

[ref]
닷지크롬 : http://dodgechrome.blogspot.kr/
닷지웹 : http://mcloud.so/

gilgil의 이미지

다음 사이트를 참조해 보세요.
http://su.gilgil.net

vani2의 이미지

보시다싶이:

댓글 첨부 파일: 
첨부파일 크기
Image icon image 001.png302.87 KB
peecky의 이미지

그냥 프록시 라이브러리를 사용하는 것 만으로는 안 될거고, 아마 프록시 라이브러리의 request 처리 부분에서 무언가 해주고 있을 겁니다.

vani2의 이미지

저 역시 그렇게 생각했지만 직접 해당 라이브러리의 소스를 받아다가 Example프로젝트를 컴파일 후 실행해 보았더니 말 그대로 아무런 수정도 없이 우회가 되네요(!)
https://github.com/krys-g/TrotiNet 여기 repo입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.