Whois検索どうしてる?VirusTotalのAPIを使おう

OSINT

ドメインの調査

ドメインを調査する際,digコマンドを使ってDNSレコードを調べたり,ICCANやJPNIC,whois.comなどを利用して登録情報を検索すると思います。
でも,ドメインが沢山あると面倒ですよね。そんなときAPIを使って処理したいと思うのですが,無料だとリクエスト数の制限が厳しいものが多く使い勝手が悪いです。
そんな時はVirusTotalどうですか?という記事になります。

VirusTotal

https://www.virustotal.com/
VirusTotalは多くのセキュリティベンダーによって提供されたさまざまなアンチウイルスエンジンを使用して、ファイルやURLが悪意のあるコードやマルウェアを含んでいるかどうかをスキャンするためのオンラインツールです。
無料で使用することができ,ブラウザでは3つの機能を使用することができます。

3つの機能

  1. ファイルをアップロードして40を超えるアンチウイルスエンジンによってスキャンしファイルの安全性を確認する「ファイルスキャン」
  2. URLを入力してVirusTotalにサイトをスキャンしてもらい,フィッシングや悪質サイトを検出する「URLスキャン」
  3. VirusTotalが蓄積しているデータに対して,URL,IPアドレス,ドメイン,ファイルハッシュで検索が行える「サーチ」

があります。
よく話題になるのは,「ファイルスキャン」機能を使用する際に,機密情報が含まれるファイルをアップロードしてしまうというもの。有料版ではアップロードされたデータをダウンロードすることが可能になるため,会社等のファイルをアップロードしてしまうと外部に情報漏えいすることになってしまいます。

4番目の機能,API

上記画像にもある,「SEARCH」右横のマーク

からVirusTotalのAPI(アプリケーションプログラミングインターフェイス) を使用して前記3つの機能などをAPI経由で使用することができます。

Get a domain report

Get a domain report
ReturnsaDomainobject.

APIのリファレンスを見てみます。「Get a domain report」を使えばDomainの情報についてVirusTotalが持っている情報を取得することができます。

PATH PARAMS の Domain name に検索するドメインを入力し,HEADERSに自分のAPIKeyを入力した上で,右側のTry It!ボタンを押すとどんな結果が出るかをお試しで確認することができます。
API Keyの確認方法は下記

前の画像ではCURLでの使用方法が記載されていますが,右側LANGUAGEにあるメニューボタンをクリックすることで他の言語での使い方を確認することができます。

これはCURLの例

curl --request GET \
  --url https://www.virustotal.com/api/v3/domains/{domain} \
  --header 'x-apikey: <your API key>'

API Keyの確認方法

VirusTotalでアカウントを作成し,ログインした状態で右上のプロフィールボタンをクリックし「API Key」ページに移動します。

するとAPI Keyを確認することができます。目のマークをクリックすることで文字列として確認することもできますし,その横のコピーボタンをクリックすることでクリップボードにコピーすることができます。

また,その下側にはLimit Rateと使用した数値がグラフとして表示されます。
リクエストは4回/分,500回/日,15,500回/月の制限となっていますが,上記「Get a domain report」では

また,その下側にはLimit Rateと使用した数値がグラフとして表示されます。
リクエストは4回/分,500回/日,15,500回/月の制限となっていますが,上記「Get a domain report」では

また,その下側にはLimit Rateと使用した数値がグラフとして表示されます。
リクエストは4回/分,500回/日,15,500回/月の制限となっていますが,上記「Get a domain report」では4回/分の制限は掛からないようです。

Pythonでの使用方法

テキストから読み込み,Whois部分だけを取り出すもの。

import requests
import sys
import time
import pandas as pd
import re

def check_vt(domain):
    whosi_l = []
    url = "https://www.virustotal.com/api/v3/domains/"+ domain
    header = {'x-apikey': 'xxxxxxxxxxxここにAPI Keyxxxxxxxxxxxxxxx'}
    res = requests.get(url,headers=header)
    now = str(time.time())
    with open("tmp/"+domain+"_"+now,"w",encoding="utf-8") as f:
        f.write(res.text)
    json_data = res.json()
    whois = json_data["data"]["attributes"]["whois"]
    if ": " in whois:
        whois = re.sub(": ",",",whois)
    elif "[Domain Name]" in whois:
        whois = re.sub("] ","],",whois)
    whois_f = "tmp/"+domain+"_"+now+".whois"
    with open(whois_f,"w",encoding="utf-8") as f:
        f.write(whois)
    df_s = pd.read_csv(whois_f,index_col=0,header=None)
    df_s = df_s.T
    print(df_s)
    whois_l = re.split(r"\n",whois)
    print(whois_l)
    whois_l.append(domain)
    return whois_l,df_s

# メイン
if __name__ == '__main__':
    file = sys.argv[1]
    whois_list = []
    cols = ['domain']
    df = pd.DataFrame()
    with open(file,"r",encoding="utf-8") as f:
        lines = f.readlines()
        for l in lines:
            l = l.strip()
            whois_l,df_s = check_vt(l)
            print(df_s)
            df = pd.concat([df,df_s], ignore_index=True)
            whois_list.append(whois_l)
    print(whois_list)
    w = str(whois_list)
    with open("whois.txt","w") as f:
        f.write(w)
    df.to_csv("whois_df.csv")

他にも

他にも使える機能は沢山あるので,試してみてはいかがでしょうか

コメント

タイトルとURLをコピーしました