Bittorrent DHTネットワークでは、 マグネットリンクハッシュからハッシュソースを見つけることができます。 ネットワークは、Bittorentクライアントまたはネットワークの通常の動作を妨げる悪意のあるプログラムのいずれかである可能性のあるノードで構成されます。 クライアントがトレントソースを受信するのを防ぎ、リクエストを攻撃されたノードにリダイレクトし、ノードのリストを無駄なアドレスで埋めます。
このネットワークでピアアンドシードカウンター( DHT Scrape )を作成しているときに、これらのタイプの攻撃に遭遇しました。
ポート番号1
一部のノードは、最初のポートがポートとして指定されたノードのリストを提供しました。 インターネットでは、0〜1024ポートに接続しないことを推奨していました。 これらには、インターネットの運用に不可欠なサービスが含まれています。 このセグメントのポートでアドレスを送信したホストは無視されます。
鏡
単に送り返されたパケットを返すノードがあります。 私たちは自分自身に尋ね、自分自身に答えることがわかりました。 ノードが正しく応答したため、一部のクライアントによってアクティブとしてマークされ、そのアドレスは他のノードに転送されます。 そのようなノードをネットワークから除外するには、このオプションをチェックする必要があります。
フラッドポート
一部のノードは、多数の異なるポートで同じIPを発行します。 これは、ホストの発信ポートを変更するNATの背後のホストで発生する可能性があります。 この場合、そのようなIPとIDを持つノードが既に確認されている(つまり、接続があった)場合、新しい情報は破棄されます。 そうでない場合、最後のレコードまたはランダムレコードが検証に使用されます。
トークン
各パケットにはトークンがあり、これによりリクエストが受信者に届いたことを確認し、返信するとアドレスのなりすましによる攻撃が排除されます。 ただし、トークン(他の行と同様)がパッケージからクロールされないことを確認する必要があります。 これにより、パケットに続くメモリからデータを読み取ることができます。
タイマー
トークンは、偽のアドレスを持つ受信リクエストに対する万能薬ではありません。 この場合、1つのIPからの1秒あたり2つの連続した要求のみが許可されます。 それ以上の場合、それらは単に無視されます。
ローカルアドレス
一部のサイトは、インターネットから利用できないローカルアドレスを返します。 これは、ルーターの内部アドレスにすることもできます。 もちろん、これらのアドレスは、同じローカルネットワーク上のホストから受信されない限り、無視する必要があります。
信頼できるサイトのみを公開します
ノードのデータベースからノードのリストを尋ねられたとき、リクエスト(アクティブ)に対して正しい応答を受け取ったノードのみが選択されます。 残り(不確実)は徐々に質問され、答えがない(死んでいる)場合はデータベースから削除されます。
G2ネットワークは、最近、多数のデッドノードアドレスが実行されているという事実に非常に苦しんでいます。 これにより、ネットワークのエントリと検索が遅くなります。
ノードのベースを保存します
ノードデータベースでのクライアントの作業が長時間中断されると、すべてのレコードの有効期限が切れます。 ただし、クライアントは、十分な数のアクティブノードを受信する前に、これらを使用してネットワークに入る必要があります。 すべてのノードが停止している場合、クライアントは入力ノードにアクセスします。 私の経験では、ノードの数が非常に多い非常に古いベースでも、ネットワークに入ることができます。
フィルタービット
ネットワーク内のごちそうと配布シードの数を取得するには、 ブルームフィルターを使用します。 偽のノードはそれを単位で埋めることができ、それによって数値を歪めます。 したがって、少なくとも3つのノードからのデータが比較されます。
返信する前にpingを送信する
原始的なDDoS攻撃に参加しないために、大きなパケットを送信する前に、pingをホストに送信します。 pingに対する正しい答えで、大きなパケットを送信します。
おわりに
この記事が、P2Pネットワーク用のより効率的で安全なクライアントの作成に役立つことを願っています。