
非ロボット向けのパッシブなホスト名・ドメイン・IPルックアップツール
非ロボット向けのパッシブなホスト名・ドメイン・IP検索ツール


wtfis は、さまざまなOSINTサービスを利用してドメイン、FQDN、IPアドレスに関する情報を収集するコマンドラインツールです。同種の他のツールとは異なり、人間が読むことを目的として作られており、見た目がきれいで(人によりけり)、読みやすく理解しやすい結果を提供します。
このツールは、無料枠 / コミュニティレベルのアカウントを使用していることを前提としており、クォータやレート制限に達するのを最小限に抑えるため、できるだけ少ないAPI呼び出しを行うようにしています。
プロジェクト名は「whois」をもじったものです。
| サービス | ルックアップでの使用 | 必須 | 無料枠 |
|---|---|---|---|
| Virustotal | すべて | いいえ | あり |
| AbuseIPDB | IPアドレス | いいえ | あり |
| Greynoise | IPアドレス | いいえ | あり |
| IP2Location | IPアドレス | いいえ | あり |
| IP2Whois | ドメイン/FQDN | いいえ | あり |
| IPinfo | IPアドレス | いいえ | あり(登録不要) |
| IPWhois | IPアドレス | いいえ | あり(登録不要) |
| Shodan | IPアドレス | いいえ | なし |
| URLhaus | すべて | いいえ | あり |
主要な情報源です。以下を取得します:
AbuseIPDB は、報告された悪意のあるIPアドレスのクラウドソース型データベースです。wtfis はそのAPIを通じて以下を表示します:
IPアドレスの代替位置情報およびASNルックアップソース(デフォルトは IPWhois)。以下を取得します:
IP2Whois と IP2Location は同じサービスの異なる機能なので、サインアップは一度だけで済みます。APIキーは両方のルックアップに使用できます。
認証情報が提供されている場合にオプションで使用されます。以下を取得します:
whois データについては、いくつかの理由から Virustotal よりも IP2Whois が推奨されます:
IPアドレスのもう1つの代替位置情報およびASNルックアップソース。以下を取得します:
IPアドレスのデフォルトの位置情報およびASNルックアップソース。以下を取得します:
IPWhois は、ドメインの Whois データを提供する IP2Whois と混同しないでください。
Greynoise の コミュニティAPI を使用して、wtfis はIPが Greynoise のデータセットのいずれかに含まれるかどうかを表示します:
データセットの詳細はこちら。
さらに、APIはIPの Greynoise による分類(利用可能な場合)も返します。指定可能な値は benign、malicious、unknown です。
/shodan/host/{ip} エンドポイントからデータを取得します(ドキュメントを参照)。各IPについて以下を取得します:
URLhaus は、報告された悪意のあるURLのクラウドソース型データベースです。このエンリッチメントにより、照会したホスト名またはIPが、HTTPまたはHTTPSを介したマルウェア配信に現在使用されているか、以前使用されていたかに関する洞察が得られます。提供されるデータは次のとおりです:
$ pip install wtfis
conda(conda-forge)でインストールするには、wtfis-feedstock を参照してください。
brew でインストールするには:
brew install wtfis
wtfis は以下の環境変数を使用します(すべてオプション):
VT_API_KEY - Virustotal APIキーABUSEIPDB_API_KEY - AbuseIPDB APIキーIP2LOCATION_API_KEY - IP2Location APIキーIP2WHOIS_API_KEY - IP2Whois APIキーGREYNOISE_API_KEY - Greynoise APIキーSHODAN_API_KEY - Shodan APIキーURLHAUS_API_KEY - URLhaus APIキーWTFIS_DEFAULTS - デフォルトのブール引数GEOLOCATION_SERVICE - 使用する位置情報 / ASN ルックアップサービスこれらはご自身の方法で設定してください。
または、ホームディレクトリに ~/.env.wtfis というファイルを作成し、上記のオプションを記述します。テンプレートは .env.wtfis.example を参照してください。注意: chmod 400 を忘れないでください!
usage: wtfis [-h] [-A] [-s] [-g] [-a] [-u] [-m N] [-n] [-1] [-V] [--geolocation-service {ip2location,ipinfo,ipwhois}] entity
positional arguments:
entity Hostname, domain or IP
options:
-h, --help show this help message and exit
-A, --all Enable all possible enrichments
-s, --use-shodan Use Shodan to enrich IPs
-g, --use-greynoise Enable Greynoise for IPs
-a, --use-abuseipdb Enable AbuseIPDB for IPs
-u, --use-urlhaus Enable URLhaus for IPs and domains
-m N, --max-resolutions N
Maximum number of resolutions to show (default: 3)
-n, --no-color Show output without colors
-1, --one-column Display results in one column
-V, --version Print version number
--geolocation-service {ip2location,ipinfo,ipwhois}
Geolocation service to use (default: ipwhois)
基本的に:
$ wtfis FQDN_OR_DOMAIN_OR_IP
すると、上記の画像のようにパネルごとに整理された結果が表示されます。
デファングされた入力も受け付けます(例: api[.]google[.]com)。
ターミナルが対応している場合、一部のフィールドや見出しは、それぞれのサービスのウェブサイトへのクリック可能なハイパーリンクになります。
各エンリッチメントフラグを個別に指定する代わりに、-A / --all フラグを使用すると、可能な場合にすべてのエンリッチメントを有効にできます。このフラグは --use-* フラグとは相互排他的です。
-a または --use-abuseipdb フラグを使用して、ホスト名、ドメイン、IPに対する AbuseIPDB エンリッチメントを有効にします。

AbuseIPDB フィールド名は(ターミナルが対応している場合)ハイパーリンクになっており、クエリに対応する AbuseIPDB データベースのページに移動します。
Greynoise を有効にするには、-g または --use-greynoise フラグを指定して呼び出します。API のクォータがかなり低い(2023年3月時点で週50リクエスト)ため、このルックアップはデフォルトでオフになっています。

GreyNoise フィールド名も(ターミナルが対応している場合)ハイパーリンクになっており、より多くのコンテキストが表示される Greynoise ウェブインターフェースのIPエントリを指します。
Shodan を使用すると、IPのオープンポートやサービス、場合によってはOSを表示できます。-s または --use-shodan フラグを指定して呼び出します。

ターミナルが対応している場合、Services フィールドは Shodan ウェブインターフェースに移動するクリック可能なハイパーリンクです。
-u または --use-urlhaus フラグを使用して、ホスト名、ドメイン、IPに対する URLhaus エンリッチメントを有効にします。

Malware URLs フィールド名は(ターミナルが対応している場合)ハイパーリンクになっており、クエリに対応する URLhaus データベースのページに移動します。
FQDN およびドメインのルックアップでは、-m NUMBER または --max-resolutions=NUMBER を使用して、表示する IP 解決結果の最大数を増減できます。上限は 10 です。解決結果がまったく不要な場合は、数値を 0 に設定します。
すべてのパネルを1列で表示するには、-1 または --one-column フラグを使用します。

パネルは -n または --no-color を使用して色なしで表示できます。

デフォルト引数は、WTFIS_DEFAULTS 環境変数を設定することで定義できます。たとえば、デフォルトで Shodan を使用し、結果を1列で表示するには:
WTFIS_DEFAULTS=-s -1
WTFIS_DEFAULTS に引数が含まれている場合、コマンド呼び出し時に同じ引数を指定すると、その引数は否定されます。つまり、上記の例で次のコマンドを実行すると:
$ wtfis example.com -s
Shodan は使用されません。
現在、最大解決結果数(-m N, --max-resolutions N)はデフォルトで定義できないことに注意してください。
これを変更する推奨方法は、GEOLOCATION_SERVICE 変数を設定することです。たとえば、IPinfo を使用するには:
GEOLOCATION_SERVICE=ipinfo
または、コマンド呼び出し時に --geolocation-service を設定します:
$ wtfis --geolocation-service=ipinfo 1.1.1.1
上記の両方が設定されている場合、コマンドラインフラグが優先されます。
wtfis は Docker イメージから実行できます。まず、含まれている Dockerfile を使用してイメージをビルドします:
$ make docker-image
イメージには、最新の タグ付き バージョン(必ずしも最新コミットとは限りません)の wtfis が含まれます。これにより、安定版を確実に入手できます。
イメージを実行する方法は2つあります:
ホームディレクトリに .env.wtfis があり、必要な環境変数が設定されていることを確認します。その後、次のコマンドを実行するだけです:
$ make docker-run
これは以下のエイリアスです:
$ docker run --env-file=${HOME}/.env.wtfis -it wtfis
各定義の等号の前後にスペースを入れないでください(FOO=bar であり、FOO = bar ではない)。
あるいは、環境変数を自分で設定してから、次のように実行することもできます:
$ docker run -e VT_API_KEY -e SHODAN_API_KEY -it wtfis