
ホモグラフフィッシング攻撃、タイポスクワッティング、ブランドなりすましを検出するためのドメイン名順列エンジン

ユーザーがドメイン名を入力しようとして、どのようなトラブルに巻き込まれ得るかを確認しましょう。 攻撃者があなたを攻撃するために利用できる類似ドメインを検出します。タイポスクワッティング、 フィッシング攻撃、詐欺、ブランド冒充を検出できます。標的型脅威インテリジェンスの 追加情報源として有用です。

DNSファジングは、組織を標的とする悪意のあるドメインを発見することを目的とした自動化ワークフローです。 このツールは、指定されたドメイン名に基づいて包括的な置換リストを生成し、 その置換のいずれかが使用されているかを検証します。 さらに、Webページのファジーハッシュを生成して、進行中のフィッシング攻撃やブランド冒充を検出することもできます。
お急ぎの場合は、Webブラウザでお試しください: dnstwist.it
Python PIP
$ pip install dnstwist[full]
または、最小限の構成をインストールし、必要に応じて他の要件を手動で追加します:
$ pip install dnstwist
Git
最新バージョンのコードを実行したい場合は、Gitからインストールできます:
$ git clone https://github.com/elceef/dnstwist.git
$ cd dnstwist
$ pip install .
Debian/Ubuntu/Kali Linux
すべての追加パッケージを含めてツールをインストールするには、次のコマンドを実行します:
$ sudo apt install dnstwist
Fedora Linux
$ sudo dnf install dnstwist
Arch Linux User Repository (yay)
$ yay -S dnstwist
macOS
これにより、dnstwist がすべての依存関係とともにインストールされ、バイナリが
$PATH に追加されます。
$ brew install dnstwist
Docker
Docker Hubから公式イメージをプルして実行します:
$ docker run -it elceef/dnstwist
または、ローカルイメージをビルドすることもできます:
$ docker build -t dnstwist .
$ docker build -t dnstwist:phash --build-arg phash=1 .
このツールは、指定されたドメイン名をファジングアルゴリズムにかけ、 DNSレコードとともに潜在的なフィッシングドメインのリストを生成します。
通常、特に長い入力ドメインの場合、何千ものドメイン置換が生成されます。 そのような場合、登録されているものだけを表示するのが実用的かもしれません:
$ dnstwist --registered domain.name
DNSサーバーが短時間に数千のリクエストを処理できることを確認してください。
そうでない場合は、--nameservers 引数で外部DNSまたはDNS-over-HTTPSサーバーを
指定できます。
ファジングアルゴリズムによって生成されたドメイン置換が不十分な場合は、
dnstwist に辞書ファイルを指定してください。フィッシングキャンペーンで使用される
最も一般的な単語のリストを含む辞書サンプルがいくつか同梱されています。
$ dnstwist --dictionary dictionaries/english.dict domain.name
異なるTLDを持つドメインが存在するかどうかを確認する必要がある場合は、 TLDのリストを含む辞書ファイルを指定します。
$ dnstwist --tld dictionaries/common_tlds.dict domain.name
一方、選択したアルゴリズムのみを使用する必要がある場合は、カンマ区切りのリストを
受け取る --fuzzers 引数が利用可能です。
$ dnstwist --fuzzers "homoglyph,hyphenation" domain.name
カラフルなターミナル出力に加えて、このツールは結果をCSVおよびJSONにエクスポートできます:
$ dnstwist --format csv domain.name | column -t -s,
$ dnstwist --format json domain.name | jq
DNSルックアップを行わずに置換のみが必要な場合は、--format list 引数を使用します:
$ dnstwist --format list domain.name
このツールは、IPv4アドレスの地理的位置(国レベルに近似)を返すリアルタイムルックアップを 実行できます。
$ dnstwist --geoip domain.name
デフォルトではGeoIP2ライブラリが使用されます。国データベースの場所は
$GEOLITE2_MMDB 環境変数で指定する必要があります。ライブラリまたはデータベースが
存在しない場合、ツールは古いGeoIP Legacyにフォールバックします。
利用可能なすべてのオプションを簡単な説明付きで表示するには、引数なしでツールを実行します。
フィッシングサイトを配信しているかどうかを各ドメイン名を手動でチェックするのは
時間がかかる場合があります。これに対処するため、dnstwist はファジーハッシュ
(局所性鋭敏型ハッシュ、LSH)と知覚ハッシュ(pHash)を利用します。ファジーハッシュは
2つの入力(HTMLコード)を比較して基本的な類似度を判定する概念であり、知覚ハッシュは
画像(Webページのスクリーンショット)の視覚的特徴から導出されるフィンガープリントです。
ファジーハッシュ
類似したHTMLソースコードを検出する独自機能は、--lsh 引数で有効にできます。
生成された各ドメインについて、dnstwist は応答するHTTPサーバーからコンテンツを取得し
(可能なリダイレクトに従います)、HTMLコードを正規化して、そのファジーハッシュを元の
(初期の)ドメインのものと比較します。類似度はパーセンテージで表されます。
有効なURLが元のドメインと同じ場合、誤検知の兆候を排除するために ファジーハッシュはまったく計算されません。
注: MITM攻撃フレームワークであっても100%一致することはかなり稀であり、フィッシングサイトが 完全に異なるHTMLソースコードを持つ可能性があることに注意してください。
$ dnstwist --lsh domain.name
場合によっては、フィッシングサイトが特定のURLから配信されることがあります。引数として
完全または部分的なURLアドレスを指定すると、dnstwist はそれを解析し、生成された各ドメイン名
バリアントに適用します。元のWebページを取得するURLを上書きするには、--lsh-url を使用します。
$ dnstwist --lsh https://domain.name/owa/
$ dnstwist --lsh --lsh-url https://different.domain/owa/ domain.name
デフォルトでは、LSHアルゴリズムとして ssdeep が使用されますが、TLSH も利用可能で、 次のように有効にできます:
$ dnstwist --lsh tlsh domain.name
知覚ハッシュ
Chromiumブラウザがインストールされている場合、dnstwist はグラフィカルユーザーインターフェースなしで
動作するヘッドレスモードを利用して、Webページのスクリーンショットをキャプチャし、レンダリングして、
pHash値を計算できます。これらのpHash値を比較して、視覚的類似度をパーセンテージで評価します。
$ dnstwist --phash domain.name
さらに、キャプチャしたスクリーンショットをPNG形式で任意の場所に保存することもできます:
$ dnstwist --phash --screenshots /tmp/domain domain.name
注: 完全に機能するWebブラウザをマルチスレッドで使用するため、十分な空きリソース (主にメモリ)を用意する必要があります。
プロキシサポート
すべてのHTTP接続について、大文字小文字を区別しないアプローチで $<scheme>_proxy という名前の
環境変数の存在が検出されると、プロキシが自動的に使用されます。小文字と大文字の両方の環境変数が
存在する場合は、小文字が優先されます。
ツールが生成したデータをコード内で利用する必要がある場合、最も便利で効率的な方法は 次のように入力を渡すことです。
>>> import dnstwist
>>> data = dnstwist.run(domain='domain.name', registered=True, format='null')
完全にパッシブな動作モードで動作し、ドメイン置換のみを生成するには、リスト形式と nullデバイスへの出力リダイレクトを組み合わせる必要があります。
>>> dnstwist.run(domain='domain.name', format='list', output=dnstwist.devnull)
dnstwist.run() の引数は内部的に変換されるため、コマンドラインと非常によく似た使い方ができます。
返されるデータ構造は、処理が容易な辞書のリストです。dnstwist.run() は複数のデーモンスレッドを
生成することに注意してください。
何千ものドメイン置換をテストする場合、速度と効率は明らかな優先事項です。一方、このツールは DNSリゾルバに過剰な負荷をかけず、貴重なリソースを節約する「すぐに使える」ように設計されています。 とはいえ、デフォルト設定は慎重なバランスを保っていますが、改善の余地は常にあります。
スレッド数を実験することをお勧めします。この数は当初、利用可能なCPUコアに基づいて計算されますが、 ほとんどの場合、この値を上げることで大幅なパフォーマンス向上が得られます。もう1つの提案は、 ネットワークラウンドトリップタイム(RTT)が最も短い高速なDNSリゾルバを選択することです。 数ミリ秒は大きな違いに聞こえないかもしれませんが、何千ものドメイン置換に掛け合わせると、 顕著な時間節約につながります。
入力ドメインの長さが増加するにつれて、アルゴリズムによって生成されるバリアントの数は 大幅に増加し、それらを検証するために必要な時間とリソースも大幅に増加します。特に長い入力ドメインの場合、 すべての可能なドメイン置換をチェックすることは非現実的であり、何百万ものDNSルックアップが必要になります。 したがって、このツールは元のドメインに非常に類似したドメインを生成してチェックします。理論的には、 これらのドメインは攻撃者の観点から最も魅力的です。ただし、攻撃者の想像力には限界がないことに 注意することが重要です。
Unicodeテーブルは数千の文字で構成され、その多くは互いに視覚的に類似しています。しかし、特定の文字が punycodeを使用してエンコード可能であっても、ほとんどのTLD当局はドメイン登録プロセス中にそれらを拒否します。 一般に、TLD当局は異なるUnicodeスクリプトに由来する文字の混在を禁止するか、独自の許容文字セットを 維持しています。とはいえ、ホモグリフファザーは、生成されたドメインが実際に登録可能であることを保証するために、 慎重に調査されたUnicode文字(ホモグリフ)の範囲に基づいて構築されています。
このスキャナは、世界中の数十のSOCおよびインシデントレスポンスチーム、ならびに独立した 情報セキュリティアナリストや研究者によって利用されています。さらに、多くのセキュリティプロバイダーの 製品やサービスに統合されており、特に以下のものがありますが、これらに限定されません:
Splunk add-on, RecordedFuture, SpiderFoot, DigitalShadows, SecurityRisk, SmartFense, ThreatPipes, PaloAlto Cortex XSOAR, Rapid7 InsightConnect SOAR, Mimecast, Watcher, Intel Owl, PatrOwl, VDA Labs, Appsecco, Maltego, Conscia ThreatInsights, Fortinet FortiSOAR, ThreatConnect, CISA Crossfeed.
質問、考え、またはチョコレートバーを送りたい場合は、[email protected] に メールを送ってください。フィードバックはすべて歓迎します。確認されたフィッシングドメインを発見した場合や、 このツールが気に入った場合は、遠慮なくメッセージを送ってください。ありがとうございます。