APIVoid を Google SecOps と統合する

このドキュメントでは、APIVoid を Google Security Operations(Google SecOps)と統合する方法について説明します。

始める前に

Google SecOps で v2 の APIVoid 統合を構成する前に、次のものがあることを確認してください。

  • APIVoid v2 アカウント: v2 API サービスにアクセスできるアクティブなアカウント。

  • APIVoid v2 API キー: APIVoid ユーザー ダッシュボードから v2 API 専用に生成された新しい API キー。

  • 更新された API エンドポイント: 使用する予定の特定の APIVoid サービス(IP Reputation API、Domain Reputation API など)の更新された v2 API エンドポイント URL を把握していること。

APIVoid v2 API キーを生成する

APIVoid v2 API キーを生成する手順は次のとおりです。

  1. APIVoid のユーザー ダッシュボードにログインします。

  2. [API キー] セクションに移動します。(場所はダッシュボードの更新によって異なる場合があります)。

  3. 新しい API キーを生成します。すぐにキーをコピーして安全に保管します。1 回しか表示されない場合があります。

ネットワーク

関数 デフォルト ポート 方向 プロトコル
API 複数の値 送信 apikey

統合のパラメータ

次のパラメータを使用して統合を構成します。

パラメータ名 種類 デフォルト値 必須 説明
インスタンス名 文字列 なし いいえ 統合を構成するインスタンスの名前。
説明 文字列 なし いいえ インスタンスの説明。
API ルート 文字列 https://endpoint.apivoid.com はい APIVoid インスタンスのアドレス。
API キー パスワード なし はい APIVoid のコンソールで生成された API キー。
SSL を確認する チェックボックス オフ いいえ APIVoid 接続で SSL の検証が必要な場合は、このチェックボックスをオンにします。
リモートで実行 チェックボックス オフ いいえ 構成した統合をリモートで実行するには、フィールドのチェックボックスをオンにします。オンにすると、リモート ユーザー(エージェント)を選択するオプションが表示されます。

Google SecOps で統合を構成する方法については、統合を構成するをご覧ください。

必要に応じて、後の段階で変更できます。統合インスタンスを構成すると、ハンドブックで使用できます。複数のインスタンスを構成してサポートする方法の詳細については、複数のインスタンスのサポートをご覧ください。

操作

アクションの詳細については、 デスクから保留中のアクションに対応するとケースで手動アクションを実行するをご覧ください。

ドメインのレピュテーションを取得する

ドメイン レピュテーション チェックでは、URLVir、ThreatLog、OpenPhish、Spam404、PhishTank、ZeuS Tracker などの一般的で信頼できるドメイン ブロックリスト サービスによってドメインが除外されているかどうかを確認します。複数のドメイン ブロックリスト サービスは、マルウェアの配布、フィッシング インシデント、偽のオンライン ショップに関与する、悪意のある不正なウェブサイトを特定します。

パラメータ

パラメータ名 種類 デフォルト値 必須 説明
しきい値 文字列 0 はい ドメインのリスクしきい値。しきい値は数値で指定してください。例: 3
インサイトを作成する チェックボックス オン はい アクションで分析情報を作成するかどうかを指定します。

ユースケース

Domain Reputation API のユースケースの 1 つは、クライアントのウェブサイトが除外されているかどうかを確認すること、アプリケーションでユーザーが送信した URL を確認すること、または悪意のある安全でないウェブサイトを特定することです。

実行

このアクションは次のエンティティに対して実行されます。

  • ホスト名
  • URL

アクションの結果

エンティティ拡充

ネガティブ エンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。

拡充フィールド名 ロジック - 適用するタイミング
alexa_top_100k JSON の結果に存在する場合に返す
domain_length JSON の結果に存在する場合に返す
alexa_top_10k JSON の結果に存在する場合に返す
ブラックリスト JSON の結果に存在する場合に返す
サーバー JSON の結果に存在する場合に返す
ホスト JSON の結果に存在する場合に返す
most_abused_tld JSON の結果に存在する場合に返す
alexa_top_250k JSON の結果に存在する場合に返す
分析情報
重大度 説明
警告 拡充されたエンティティの悪意のあるステータスを通知するため、警告インサイトが作成されます。これは、検出されたエンジンの数が、スキャン前に設定された最小不審しきい値以上の場合に作成されます。
スクリプトの結果
スクリプトの結果名 値のオプション 例
success True/False success:False
JSON の結果
[
    {
        "EntityResult": {
            "alexa_top_100k": false,
            "domain_length": 17,
            "alexa_top_10k": false,
            "blacklists": {
                "scantime": "0.07",
                "detection_rate": "0%",
                "detections": 0,
                "engines_count": 29,
                "engines": [{
                    "engine": "ThreatLog",
                    "detected": false,
                    "confidence": "high",
                    "reference": "http://www.threatlog.com/"
                }, {
                    "engine": "Threat Sourcing",
                    "detected": false,
                    "confidence": "high",
                    "reference": "https://www.threatsourcing.com/"
                }, {
                    "engine": "URLVir",
                    "detected": false,
                    "confidence": "high",
                    "reference": "http://www.urlvir.com/"
                }]},
            "server": {
                "region_name": null,
                "reverse_dns": " ",
                "ip": " ",
                "isp": null,
                "continent_code": null,
                "latitude": null,
                "city_name": null,
                "longitude": null,
                "country_code": null,
                "country_name": null,
                "continent_name": null
            },
            "host": "example.com",
            "most_abused_tld": false,
            "alexa_top_250k": false
        },
        "Entity": "example.com"
    }, {
        "EntityResult": {
            "alexa_top_100k": false,
            "domain_length": 9,
            "alexa_top_10k": false,
            "blacklists": {
                "scantime": "0.03",
                "detection_rate": "0%",
                "detections": 0,
                "engines_count": 29,
                "engines": [{
                    "engine": "ThreatLog",
                    "detected": false,
                    "confidence": "high",
                    "reference": "http://www.threatlog.com/"
                }, {
                    "engine": "Threat Sourcing",
                    "detected": false,
                    "confidence": "high",
                    "reference": "https://www.threatsourcing.com/"
                }, {
                    "engine": "URLVir",
                    "detected": false,
                    "confidence": "high",
                    "reference": "http://www.urlvir.com/"
                }]},
            "server": {
                "region_name": null,
                "reverse_dns": " ",
                "ip": " ",
                "isp": null,
                "continent_code": null,
                "latitude": null,
                "city_name": null,
                "longitude": null,
                "country_code": null,
                "country_name": null,
                "continent_name": null
            },
            "host": "192.0.2.1",
            "most_abused_tld": false,
            "alexa_top_250k": false
        },
        "Entity": "192.0.2.1"
    }
]

IP レピュテーションを取得する

IP Reputation API は、スパム、ウェブサイト攻撃、不正行為によく使用される、悪意のある可能性のある IP アドレスを検出します。

パラメータ

パラメータ タイプ デフォルト値 必須 説明
しきい値 文字列 なし はい IP リスクのしきい値。しきい値は数値で指定してください。例: 3。
インサイトを作成する チェックボックス オン はい アクションで分析情報を作成するかどうかを指定します。

実行

このアクションは IP アドレス エンティティに対して実行されます。

アクションの結果

エンティティ拡充

ネガティブ エンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。

拡充フィールド名 ロジック - 適用するタイミング
情報 JSON の結果に存在する場合に返す
ブラックリスト JSON の結果に存在する場合に返す
匿名性 JSON の結果に存在する場合に返す
ip JSON の結果に存在する場合に返す
分析情報
重大度 説明
警告 拡充されたハッシュの悪意のあるステータスを通知するため、警告インサイトが作成されます。この分析情報は、検出されたエンジンの数が、スキャン前に設定された不審な最小しきい値以上の場合に作成されます。
スクリプトの結果
スクリプトの結果名 値のオプション 例
success True/False success:False
JSON の結果
[
    {
        "EntityResult": {
            "information": {
                "is_proxy": false,
                "is_vpn": false,
                "region_name": "Zhejiang",
                "is_webproxy": false,
                "latitude": 28.680280685424805,
                "isp": "ChinaNet Zhejiang Province Network",
                "continent_code": "AS",
                "is_tor": false,
                "reverse_dns": " ",
                "detections": 18,
                "engines_count": 76,
                "longitude": 121.44277954101562,
                "city_name": "Jiaojiang",
                "country_name": "China",
                "continent_name": "Asia",
                "detection_rate": "24%",
                "country_code": "CN",
                "is_hosting": false
            },
            "blacklists": {
                "scantime": "0.57",
                "detection_rate":
                "24%",
                "detections": 18,
                "engines_count": 76,
                "engines": [{
                    "engine": "PlonkatronixBL",
                    "detected": false,
                    "reference": "http://bl.plonkatronix.com/"
                }, {
                    "engine": "Engine",
                    "detected": true,
                    "reference": "https://home.nuug.no/~engine/"
                }, {"engine": "Malc0de",
                    "detected": false,
                    "reference": "http://malc0de.com/database/index.php"
                   }]},
            "anonymity": {
                "is_tor": false,
                "is_proxy": false,
                "is_vpn": false,
                "is_webproxy": false,
                "is_hosting": false
            },
            "ip": "192.0.2.1"
        },
        "Entity": "192.0.2.1"
    }
]

URL レピュテーションを取得する

URL の安全性評価とリスク スコアリングを取得します。

パラメータ

パラメータ名 種類 デフォルト値 必須 説明
しきい値 Integer なし はい

URL のリスクしきい値。しきい値は数値で指定してください。例: 3

ユースケース

アナリストは、ドメインや IP アドレスのレピュテーションを取得する方法と同様に、URL のレピュテーションを取得できます。

実行

このアクションは URL エンティティに対して実行されます。

アクションの結果

エンティティ拡充

ネガティブ エンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。if data.get("report", {}).get("risk_score", {}).get("result") > threshold

拡充フィールド名 ロジック - 適用するタイミング
domain_blacklist JSON の結果に存在する場合に返す
html_forms JSON の結果に存在する場合に返す
server_details JSON の結果に存在する場合に返す
response_headers JSON の結果に存在する場合に返す
話題の転換 JSON の結果に存在する場合に返す
file_type JSON の結果に存在する場合に返す
risk_score JSON の結果に存在する場合に返す
security_checks JSON の結果に存在する場合に返す
geo_location JSON の結果に存在する場合に返す
url_parts JSON の結果に存在する場合に返す
site_category JSON の結果に存在する場合に返す
web_page JSON の結果に存在する場合に返す
dns_records JSON の結果に存在する場合に返す
スクリプトの結果
スクリプトの結果名 値のオプション 例
is_success True/False is_success:False
JSON の結果
[
    {
        "EntityResult": {
            "domain_blacklist": {
                "detections": 0,
                "engines": [{
                    "detected": false,
                        "name": "SpamhausDBL", "reference": "https://www.spamhaus.org/lookup/"
                    }, {
                        "detected": false,
                        "name": "ThreatLog",
                        "reference": "http://www.threatlog.com/"
                    }, {
                        "detected": false,
                        "name": "OpenPhish",
                        "reference": "http://www.openphish.com/"
                    }, {
                        "detected": false,
                        "name": "PhishTank",
                        "reference": "http://www.phishtank.com/"
                    }, {
                        "detected": false,
                        "name": "Phishing.Database",
                        "reference": "https://github.com/mitchellkrogza/Phishing.Database"
                    }, {
                        "detected": false,
                        "name": "PhishStats",
                        "reference": "https://phishstats.info/"
                    }, {
                        "detected": false,
                        "name": "URLVir",
                        "reference": "http://www.urlvir.com/"
                    }, {
                        "detected": false,
                        "name": "URLhaus",
                        "reference": "https://urlhaus.abuse.ch/"
                    }, {
                        "detected": false,
                        "name": "RPiList Not Serious",
                        "reference": "https://github.com/RPiList/specials"
                    }, {
                        "detected": false,
                        "name": "precisionsec",
                        "reference": "https://precisionsec.com/"
                    }, {
                        "detected": false,
                        "name": "AntiSocial Blacklist",
                        "reference": "https://theantisocialengineer.com/"
                    }, {
                        "detected": false,
                        "name": "PhishFeed",
                        "reference": "https://phishfeed.com/"
                    }, {
                        "detected": false,
                        "name": "Spam404",
                        "reference": "https://www.spam404.com/"
                    }]},
            "html_forms": {
                "number_of_total_input_fields": 0,
                "email_field_present": false,
                "number_of_total_forms": 0,
                "password_field_present": false,
                "two_text_inputs_in_a_form": false,
                "credit_card_field_present": false
            },
            "server_details": {
                "continent_name": "Asia",
                "hostname": "example.com",
                "region_name": "Seoul-teukbyeolsi",
                "ip": "192.0.2.141",
                "isp": "Example Corporation",
                "continent_code": "AS",
                "country_name": "Korea (Republic of)",
                "city_name": "Seoul",
                "longitude": 126.97782897949219,
                "country_code": "KR",
                "latitude": 37.568260192871094
            },
            "response_headers": {
                "status": "HTTP/1.1 404 Not Found",
                "content-length": "177",
                "code": 404,
                "server": "nginx/1.4.6 (Ubuntu)",
                "connection": "keep-alive",
                "date": "Wed, 15 Jul 2020 08:21:54 GMT",
                "content-type": "text/html"
            },
            "redirection": {
                "url": null,
                "found": false,
                "external": false
            },
            "file_type": {
                "headers": "HTML",
                "extension": "HTML",
                "signature": " "
            },
            "risk_score": {
                "result": 10
            },
            "security_checks": {
                "is_suspended_page": false,
                "is_defaced_heuristic": false,
                "is_windows_exe_file": false,
                "is_credit_card_field": false,
                "is_windows_exe_file_on_free_hosting": false,
                "is_masked_linux_elf_file": false,
                "is_exe_on_directory_listing": false,
                "is_php_on_directory_listing": false,
                "is_masked_windows_exe_file": false,
                "is_sinkholed_domain": false,
                "is_robots_noindex": false,
                "is_windows_exe_file_on_free_dynamic_dns": false,
                "is_doc_on_directory_listing": false,
                "is_non_standard_port": false,
                "is_linux_elf_file_on_free_dynamic_dns": false,
                "is_suspicious_domain": false, "is_suspicious_url_pattern": false,
                "is_china_country": false,
                "is_risky_geo_location": false,
                "is_pdf_on_directory_listing": false,
                "is_valid_https": false,
                "is_external_redirect": false, "is_windows_exe_file_on_ipv4": false,
                "is_phishing_heuristic": false,
                "is_linux_elf_file_on_ipv4": false,
                "is_email_address_on_url_query": false,
                "is_uncommon_clickable_url": false,
                "is_most_abused_tld": false,
                "is_domain_blacklisted": false,
                "is_host_an_ipv4": false,
                "is_linux_elf_file_on_free_hosting": false,
                "is_zip_on_directory_listing": false,
                "is_password_field": false,
                "is_linux_elf_file": false,
                "is_empty_page_title": false,
                "is_directory_listing": false,
                "is_masked_file": false,
                "is_suspicious_file_extension": false,
                "is_suspicious_content": false
            },
            "geo_location": {
                "countries": ["KR"]
            },
            "url_parts": {
                "host_nowww": "example.com",
                "host": "www.example.com",
                "path": "/dynamic/example.html",
                "query": null,
                "scheme": "http",
                "port": 80},
            "site_category": {
                "is_vpn_provider": false,
                "is_url_shortener": false,
                "is_anonymizer": false,
                "is_torrent": false,
                "is_free_dynamic_dns": false,
                "is_free_hosting": false
            },
            "web_page": {
                "keywords": "",
                "description": "",
                "title": "404 Not Found"
            },
            "dns_records": {
                "ns": {
                    "records": [{
                        "country_name": "Korea (Republic of)",
                        "ip": "192.0.2.95",
                        "isp": "Example Corporation",
                        "target": "example.com",
                        "country_code": "KR"
                    }, {
                        "country_name": "Korea (Republic of)",
                        "ip": "192.0.2.26",
                        "isp": "LX",
                        "target": "example.com",
                        "country_code": "KR"
                    }]},
                "mx": {
                    "records": []
                }}},
        "Entity": "www.example.com:80/dynamic/example.html"
    }
]
ケースウォール
結果のタイプ 説明 種類
出力メッセージ *
  1. 成功したエンティティ: 「APIVoid: 次のエンティティの評価を取得しました: <entities identifer list>
  2. 失敗したエンティティ: 「次のエンティティでエラーが発生しました: <エンティティ ID リスト>」
  3. エンティティが見つからない(データがない)場合: 「次のエンティティの評価が見つかりません: <エンティティ識別子リスト>」
  4. URL エンティティのないアラート: 「APIVoid: URL が見つかりませんでした。」
全般
CSV ケースウォール

データが利用可能な場合は、新しいエンティティ CSV テーブルを作成します。

  1. ドメイン ブロックリスト レポート: data.get("report",{}).get("domain_blacklist",{}).get("engines", [])
全般
拡充

データが利用可能な場合は、エンティティの拡充として以下を追加します(接頭辞「APIVoid」を忘れずに追加してください)。

  1. geo_location: data.get("report",{}).get("geo_location",{}).get("countries", [])
  2. is_suspicious_domain: data.get("report",{}).get("security_checks",{}).get("is_suspicious_domain")
  3. is_domain_blacklisted: data.get("report",{}).get("security_checks",{}).get("is_domain_blacklisted")
  4. is_risky_geo_location: data.get("report",{}).get("security_checks",{}).get("is_risky_geo_location")
  5. risk_score: data.get("report", {}).get("risk_score", {}).get("result")
  6. is_external_redirect: data.get("report",{}).get("security_checks",{}).get("is_external_redirect")
エンティティ

スクリーンショットを取得

ウェブサイトや URL の高画質なスクリーンショットを撮影します。

パラメータ

なし

ユースケース

アナリストは、任意のウェブサイトまたは URL の高画質のスクリーンショットを PNG または JPG 画像形式でキャプチャできます。

実行

このアクションはユーザー エンティティに対して実行されます。

アクションの結果

エンティティ拡充

ネガティブ エンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。is_suspicious: if data.get("score") > threshold

拡充フィールド名 ロジック - 適用するタイミング
ドメイン JSON の結果に存在する場合に返す
should_block JSON の結果に存在する場合に返す
スコア JSON の結果に存在する場合に返す
使い捨て JSON の結果に存在する場合に返す
has_mx_records JSON の結果に存在する場合に返す
has_spf_records JSON の結果に存在する場合に返す
スクリプトの結果
スクリプトの結果名 値のオプション 例
is_success True/False is_success:False
JSON の結果
[
    {
        "EntityResult": {
            "domain": "example.com",
            "valid_tld": true,
            "email": "user@example.co",
            "role_address": false,
            "should_block": false,
            "risky_tld": false,
            "dirty_words_username": false,
            "suspicious_domain": false,
            "score": 100,
            "educational_domain": false,
            "dirty_words_domain": false,
            "did_you_mean": " ",
            "username": "user",
            "valid_format": true,
            "is_spoofable ": false,
            "disposable": false,
            "government_domain": false,
            "has_spf_records": true,
            "domain_popular": false,
            "has_mx_records": true,
            "china_free_email": false,
            "free_email": false,
            "russian_free_email": false,
            "police_domain": false,
            "dmarc_enforced": false,
            "suspicious_username": false
        },
        "Entity": "USER@EXAMPLE.COM"
    }
]
ケースウォール
結果のタイプ 説明 種類
出力メッセージ *
  1. 成功したエンティティ: 「APIVoid: 次のエンティティのスクリーンショットを追加しました: <entities identifier list>」
  2. 失敗したエンティティ: 「次のエンティティでエラーが発生しました: <エンティティ識別子リスト>」
  3. エンティティが見つからない(データがない): 「次のエンティティのスクリーンショットが見つかりませんでした: <entities identifier list>」
  4. URL エンティティのないアラート: 「APIVoid: スクリーンショットをキャプチャするための URL エンティティが見つかりませんでした。」
  5. エンティティが大きすぎる場合(添付ファイルのサイズが 3 MB を超える場合): 「次のエンティティにスクリーンショットを添付ファイルとして追加できませんでした: <<エンティティ識別子リスト>>」
全般
添付ファイル

データがある場合は、新しいファイル オブジェクトを作成します。

  1. 添付ファイルのタイトル: 'Screenshot - {0}'.format(entity.identifier)
  2. ファイル名は、接尾辞(https/http)のない URL + 「_capture.<ファイル形式>」にする必要があります。
  3. スクリーンショットは Base64 でエンコードされた文字列で返されます。ファイルの内容は b64decode(data.get('base64_file')) にする必要があります。
  4. try、except を追加することを忘れないでください。プラットフォームには 3 MB の制限があります。エラーが発生した場合は、関連するメッセージをロガーに追加します。
全般

Ping

接続をテストする。

パラメータ

なし

実行

このアクションはすべてのエンティティに対して実行されます。

アクションの結果

スクリプトの結果
スクリプトの結果名 値のオプション 例
success True/False success:False

メールを確認

メールが使い捨てかどうか、MX レコードがあるかどうかなどを確認します。

パラメータ

パラメータ名 種類 デフォルト値 必須 説明
しきい値 Integer なし はい

メールのリスクしきい値。しきい値は数値で指定してください。

例: 3

ユースケース

アナリストは、メールが使い捨てかどうかを確認したり、MX レコードを取得したりできます。

実行

このアクションはユーザー エンティティに対して実行されます。

アクションの結果

エンティティ拡充

ネガティブ エンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。is_suspicious: if data.get("score") > threshold

拡充フィールド名 ロジック - 適用するタイミング
ドメイン JSON の結果に存在する場合に返す
should_block JSON の結果に存在する場合に返す
スコア JSON の結果に存在する場合に返す
使い捨て JSON の結果に存在する場合に返す
has_mx_records JSON の結果に存在する場合に返す
has_spf_records JSON の結果に存在する場合に返す
スクリプトの結果
スクリプトの結果名 値のオプション 例
is_success True/False is_success:False
JSON の結果
[
    {
        "EntityResult": {
            "domain": "example.com",
            "valid_tld": true,
            "email": "user@example.com",
            "role_address": false,
            "should_block": false,
            "risky_tld": false,
            "dirty_words_username": false,
            "suspicious_domain": false,
            "score": 100,
            "educational_domain": false,
            "dirty_words_domain": false,
            "did_you_mean": " ",
            "username": "user",
            "valid_format": true,
            "is_spoofable ": false,
            "disposable": false,
            "government_domain": false,
            "has_spf_records": true,
            "domain_popular": false,
            "has_mx_records": true,
            "china_free_email": false,
            "free_email": false,
            "russian_free_email": false,
            "police_domain": false,
            "dmarc_enforced": false,
            "suspicious_username": false
        },
        "Entity": "USER@EXAMPLE.COm"
    }
]
ケースウォール
結果のタイプ 説明 種類
出力メッセージ *
  1. 成功したエンティティ: 「APIVoid: 次のエンティティの情報が取得されました: <entities identifer list>」
  2. 失敗したエンティティ: 「次のエンティティでエラーが発生しました: <エンティティ ID リスト>」
  3. エンティティが見つからない(データがない): 「次のエンティティの情報が見つかりません: <エンティティ識別子リスト>」
  4. URL エンティティのないアラート: 「APIVoid: メールが見つかりませんでした。」
全般
CSV ケースウォール CSV コンテンツ: エンティティ データ(以下の例を参照) 全般
拡充

データが利用可能な場合は、エンティティの拡充として以下を追加します(接頭辞「APIVoid」を忘れずに追加してください)。

  1. suspicious_domain: data.get("suspicious_domain")
  2. should_block: data.get("should_block")
  3. score: data.get("score")
  4. disposable: data.get("disposable")
  5. has_mx_records: data.get("has_mx_records")
  6. has_spf_records: data.get("has_spf_records")
エンティティ

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。