RETNからディープパケットインスペクションを学習する

ニュース: RETNバックボーンプロバイダーは、バックボーンであるにもかかわらず、DPIを介してトラフィックをフィルタリングします。 オペレーターはバックボーンオペレーターであり、特に外部トラフィックの配信に従事しているため、あらゆる種類の「禁止リスト」をチェックアウトしたいが、アップリンクにRETNが含まれているプロバイダーを含む多くのプロバイダーの出力を検閲しています。



DPIは、機器が内部のトラフィックに「忍び寄る」技術の総称です。つまり、さまざまなレベルのパケットヘッダーだけでなく、コンテンツにも反応します。



干渉を避けるために、テストは複数の都市および複数のプロバイダーから実行され、ローカルプロバイダーフィルタリングの要素を排除しました(2番目の間接テストは、常にRETNエリアを指すTTLスキャンの使用に基づいています)。



RETNがDPIを実装し、著作権法に違反する自殺的なポルノ児童から薬物を保護するために法律を熱心に施行する方法を見てみましょう。



私たちは、有名な雑誌ステルヴォジンカをベースにしています(それはブロックされていること、ある種の不条理のためにブロックされていることで広く知られています、さらに、長い間ブロックされており、禁止から抜け出すことはありません)。



この投稿のアドレスは、ロシア連邦市民による閲覧禁止リストに含まれています。 この点に関して、ジャーナルのドメイン名を使用して不可逆的な操作を実行したため、結果のハッシュ関数を逆にするための信頼できる明確なアルゴリズムはありません。



問題の日常的な症状を見てみましょう。



wget -d --tries 1 stervozzinka.dreamwidth.og/15580.html







コンソールの横で、 tcpdump host stervozzinka.dreamwidth.og



実行しtcpdump host stervozzinka.dreamwidth.og







 17:17:14.376828 IP local.49510> dreamwidth.og.http:フラグ[P。]、seq 1:136、ack 1、win 115、オプション[nop、nop、TS val 11199749 ecr 1627034663]、長さ135
 17:17:17.924801 IP local.49510> dreamwidth.og.http:フラグ[P。]、seq 1:136、ack 1、win 115、オプション[nop、nop、TS val 11200636 ecr 1627034663]、長さ135
 17:17:18.068805 IP local.49509> dreamwidth.og.http:フラグ[P。]、seq 1:136、ack 2、win 115、オプション[nop、nop、TS val 11200672 ecr 1627029045]、長さ135




同じseqは、サブスクライブされたセグメントのサインです。 しかし、ブロックされている場所(応答の受信時または要求の送信時)を理解することはできません。 しかし、TCPセグメントが再送信されないため、ブロックされていることが確実にわかります。



送信する内容を正確に制御するために、見事なwgetから単純なものに切り替えます。



echo -e "GET /15580.html HTTP/1.1\nHost: stervozzinka.dreamwidth.og\n"|nc stervozzinka.dreamwidth.og 80





これは決して私たちを前進させるものではありませんが、見出しを試してみる自由を与えてくれます。 指定されたリクエストもブロックされます。



ただし、バリエーション(RFC違反ですが、dreamwidthの側からのニスは通常どおり処理されます)には、いくつかの機能があります。



  • GET /15580.html HTTP/1.1\nHost: stervozzinka.dreamwidth.og\n"



    (GETの後に2つのスペース)-開始
  • GET /15580.html HTTP/1.1\nHost: stervozzinka.dreamwidth.og\n



    (HTTP / 1.1の前に2つのスペース-許可しない
  • get /15580.html HTTP/1.1\nHost: stervozzinka.dreamwidth.og\n



    (小文字で取得)-開始
  • GET /15580.html HTTP/1.1\nIgnore:me\nHost: stervozzinka.dreamwidth.og\n



    (GETとHOST間の追加ヘッダー)-させない




予備的な結論は、退屈でプリミティブな完全一致です。 もしそうなら、パッケージの内容が何であり、何がそうでないかをどのように理解しますか?



だから...



echo -e "GET /15580.html\n\nHost: stervozzinka.dreamwidth.og\n"|nc stervozzinka.dreamwidth.og 80



開始しません。



理解できなかった人のために-GETの後に2つの改行を入れました。つまり、ホストはヘッダーではなく本文をすでに参照しています。 HTTP / 1.1も削除しました。つまり、Hostヘッダーを持たない単純なHTTP 1.0です。つまり、ホスト名を指定せずにサーバーから/15580.htmlを要求しました。



ホスト名なしのリクエストが機能することに注意してください: GET /15580.html \n\n







言い換えれば、DPIが完全に場違いなもの、つまりBODY内のHostの存在をチェックしていることがわかります。 その結果、ブロックされたサイトとは関係のない要求はドロップされます。



実験を複雑にしましょう:

echo -e "POST / \ n \ nそして、あなたは彼らがコンテンツを禁止していることを知っていますか? 例: GET /15580.html \n\nHost: stervozzinka.dreamwidth.og\n"|nc stervozzinka.dreamwidth.og 80







あ、あ、あ。 無実のコンテンツを含むPOSTの送信は禁止されました。 このPOSTはサーバーに到達しませんでした。 できませんか?



より文化的な方法で投稿をチェックして投稿しましょう:



curl -d "GET /15580.html \n\nHost: stervozzinka.dreamwidth.og\n" dreamwidth.og







私たちの仮定は、フィルターが1つのパッケージの両方の行を必要とし、その有効性をチェックしないことです:



curl --connect-timeout 10 -d "GET /15580.html\n`seq 1 10000`\nHost: stervozzinka.dreamwidth.og\n" 69.174.244.50







それは過ぎ去ります。 つまり、パケットには両方のヘッダーが必要です。 (はい、ヘッダーにHost:が含まれるサーバーにこのようなリクエストを書き込むと、別のパッケージに移動し、おそらく検閲を突破できます。



もう1つの確認:ポート番号を確認しますか?

echo -e "GET /\nHost: stervozzinka.dreamwidth.og\n"|nc dreamwidth.og 443





(空の答え)



echo -e "GET /15580.html\nHost: stervozzinka.dreamwidth.og\n"|nc dreamwidth.og 443





(タイムアウト)



いや 443番目のポートへのトラフィックは、同じ成功でフィルタリングされます(通常のトラフィックはスキップされ、「禁止された」トラフィックはドロップされます)。



もう1つのチェック:IPでフィルターされていますか? ポート80に応答する近隣の(同じセグメントからの)オープンIPを見つけます。 手放す



まとめ





パッケージドロップの条件:

  • 任意のTCPポート(UDPはチェックされませんでした)
  • フラグ付き
  • パッケージ内の実際の存在(任意の順序)による行
    • GET /15580.html
    • ホスト:stervozzinka.dreamwidth.og
  • リスト内の禁止とSrc_IPの一致




したがって、これは、通過するパケットに正規表現のない署名を検索するパケットフィルターに似ており、実際のDPIではありません。



All Articles