悪質ネットワーク:レンジのスコアリングと階層分け
悪質ネットワークとは、スパム、マルウェア、ボットネット、攻撃用インフラをホストしているとして独立した複数の脅威インテリジェンスソースが指摘する IP アドレス空間のブロックで、通常は CIDR レンジで表されます。ipto は、それらのソースがどれだけ一致しているかに基づいてランク付けします。単純なブロックリストではなく、各レンジに1~10のスコアとリスク階層が付くため、どの程度厳しく対処するかを自分で判断できます。
悪質ネットワークとは何か
不正な動きをする単一のアドレスは「インシデント」です。一方、脅威フィードに繰り返し現れるレンジ全体は「パターン」であり、攻撃者はフィードが掲載するよりも速くアドレスを入れ替えるため、防御側にとっては個々のアドレスよりもパターンのほうが有用なことが多くあります。悪質ネットワークのページがホストではなくレンジを追跡しているのはこのためです。/24 のようなエントリは、そのサブネット内の256個のアドレスすべてが対象であることを意味します。つまり、そのブロックは敵対的なインフラに割り当てられている、または実際に使われているのであり、本来は問題のない割り当ての中の1台のホストが指摘されているだけではありません。
データは公開ソースから6時間ごとに再構築されます。これは他の脅威フィードと同じ周期です。現在、レンジは IPsum 集約脅威リスト、Spamhaus DROP、Spamhaus EDROP の3つの入力から取得しています。これらはそれぞれ他のシグナルを組み合わせたものであるため、ipto ではそれらの間の一致度こそスコアリングに値するものとして扱っています。ページはサブネットで検索でき、階層やソースフィードで絞り込めて、200件ずつページ送りされます。同じデータは /v1/abuse から JSON として取得でき、クエリパラメータは tier、source、q、page です。
スコアと階層の決まり方
スコアリングは意図的に監査しやすい単純なものにしています。IPsum は各アドレスについて、そのアドレスを掲載している独立したブロックリストの数を公開しています。ipto は3つ以上のリストに掲載されているアドレスだけを残し、スコアはその数(上限10)とします。Spamhaus DROP のエントリは、乗っ取られた、あるいは犯罪運営者が運用している空間を対象とするため10から始まり、EDROP のエントリは9から始まります。同じレンジが複数のソースに現れる場合は最も高いスコアが採用されるため、Spamhaus に掲載されたレンジは、IPsum の件数よりも常に高く評価されます。
階層はスコアから直接導かれます。
- Critical(8~10):最も確度の高いグループです。通常は犯罪インフラの運営者が運用するブロックや、実際に悪用されている乗っ取られた空間で、スパム、マルウェア配布、認証情報の窃取が想定されます。
- High(5~7):複数のフィードで敵対的と指摘されているものの、必ずしも組織的な犯罪インフラとは限らないレンジです。bulletproof ホスティングの顧客やスパムに寛容な ISP がここに入ります。
- Medium(3~4):複数のフィードで指摘されていますが、裏付けは比較的弱いレンジです。共有ホスティング環境や、過去に悪用があり持ち主が変わった可能性のあるブロックが、このあたりに現れやすくなります。
大まかなポリシーには階層を、長いリストを順位付けしたいときには生のスコアを使ってください。スコアの上限は10なので、さらに別のリストに載ったからといってレンジの深刻度が上がることはなく、スケールは長期にわたって安定します。
レンジ単位と単一 IP 単位のブロック判断
単一アドレスのチェックが答えるのは、「この特定の IP は今フラグが立っているか」という狭い問いです。IP 不正利用チェッカーや、IP ルックアップが返す abuse_score フィールドはこの用途で、同じレンジを使っており、スコアはレンジに付随するため追加のクエリは不要です。一方、レンジ単位のデータが答えるのは別の問い、つまり「インターネット上のこの一帯からの通信を信頼してよいか」です。
無理のないポリシーの段階は次のとおりです。
- Critical のレンジ:境界で破棄するか、内容解析の前に SMTP 接続を拒否します。敵対的なブロック内の送信者は、メッセージ単位のスコアリングでは信頼を回復できないためです。
- High のレンジ:クレデンシャルスタッフィングやスクレイピングツールが使われやすいログインや API のトラフィックに、厳しいレート制限や CAPTCHA を適用します。
- Medium のレンジ:完全にブロックするのではなく、ログを記録して検証を強化します。
- すべての階層:SIEM のアラートが Critical レンジ内のアドレスで発生した場合は自動的にエスカレーションします。周辺の状況によって優先度が変わるためです。
レンジのシグナルは、ASN ルックアップのネットワーク情報と組み合わせてください。フラグの立った3つのレンジがすべて同じ自律システムに属している場合は、判断を ASN 単位で行うほうがよいかもしれません。ルックアップでは、所有者、国、広告されているレンジを確認できます。
共有ネットワークに関する注意点
レンジ単位のブロックには副作用があります。共有ホスティングやクラウドの割り当てには、悪質なテナントが1つと正当なテナントが数百含まれていることがあり、プレフィックス全体をブロックするとそのすべてに影響します。そのため、特に過剰なブロックが顧客の喪失につながるコンシューマー向けサービスでは、Medium 階層のエントリを一律のポリシーの前に確認すべきです。また、レンジは持ち主が変わります。過去の悪用で掲載されたブロックが、現在はクリーンな所有者のものである場合もあり、6時間ごとの更新も、上流のフィードの更新が追いつく範囲でしか効果がありません。
もう1つの限界はカバレッジです。レンジは上記3つのソースに由来する IPv4 の CIDR ブロックと単一アドレスであり、すべての敵対的ネットワークを網羅しているわけではないため、クリーンという結果が信頼の保証にはなりません。また、ipto はレジデンシャルプロキシを検知しないため、家庭の回線を経由した通信はここには現れません。階層は、VPN、Tor、データセンターの各フラグと並ぶ入力の1つとして扱ってください。それらは脅威フィードのページで閲覧できます。ソース間の一致がなぜ重要かという背景については、ブラックリストの裏付けに関する記事をご覧ください。
ipto で試す
悪質ネットワークのページを開いて Critical で絞り込めば最悪のレンジを確認でき、疑わしいプレフィックスがあればそれを検索することもできます。コードからは GET /v1/abuse?tier=critical&page=0 を呼び出してレスポンスをキャッシュしてください。レスポンスは5分間のキャッシュ有効期間付きで配信されます。abuse_score と is_abuser を含むアドレス単位のルックアップは、サインアップ不要で1日あたり1,000リクエストまで無料です。