APIVoid を Google SecOps と統合する

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

統合バージョン: 12.0

始める前に

v2 用の Google SecOps で 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. エンティティが見つからない(データがない)場合: 「次のエンティティの評判が見つかりませんでした: <entities identifer list>」
  4. URL エンティティのないアラート: 「APIVoid: No URLs found.」
全般
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 の高品質なスクリーンショットを撮影できます。

パラメータ

なし

ユースケース

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

実行

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

アクションの結果

エンティティ拡充

否定的なエンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。is_suspicious: 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. 失敗したエンティティ: 「次のエンティティでエラーが発生しました: <エンティティ ID のリスト>」
  3. エンティティが見つからない(データがない)場合: 「次のエンティティのスクリーンショットが見つかりませんでした: <エンティティ ID のリスト>」
  4. URL エンティティのないアラート: 「APIVoid: スクリーンショットをキャプチャするための URL エンティティが見つかりませんでした。」
  5. エンティティが大きすぎる場合(添付ファイルのサイズが 3 MB を超える場合): 「次のエンティティにスクリーンショットを添付ファイルとして追加できませんでした: <<エンティティ識別子リスト>>」
全般
添付ファイル

データが利用可能な場合は、新しいファイル オブジェクトを作成します。

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

Ping

接続をテストする。

パラメータ

なし

実行

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

アクションの結果

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

メールを確認

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

パラメータ

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

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

例: 3

ユースケース

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

実行

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

アクションの結果

エンティティ拡充

否定的なエンジンの数が指定されたしきい値以上の場合、エンティティを不審としてマークします。is_suspicious: 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. エンティティが見つからない(データがない): 「次のエンティティに関する情報が見つかりませんでした: <entities identifer list>」
  4. URL エンティティのないアラート: 「APIVoid: No emails found.」
全般
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 のプロフェッショナルから回答を得ることができます。