将 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 服务的更新后的 v2 API 端点网址(例如,IP Reputation API、Domain Reputation API)。

生成 APIVoid v2 API 密钥

如需生成 APIVoid v2 API 密钥,请完成以下步骤:

  1. 登录您的 APIVoid 用户界面

  2. 前往 API 密钥部分。(位置可能会因信息中心更新而异。)

  3. 生成新的 API 密钥。立即复制并妥善保存密钥。它可能只会显示一次。

网络

函数 默认端口 方向 协议
API 多值 出站 apikey

集成参数

使用以下参数配置集成:

参数名称 类型 默认值 是否为必需参数 说明
实例名称 字符串 不适用 您打算为之配置集成的实例的名称。
说明 字符串 不适用 实例的说明。
API 根 字符串 https://endpoint.apivoid.com APIVoid 实例的地址。
API 密钥 密码 不适用 在 APIVoid 的控制台中生成的 API 密钥。
验证 SSL 复选框 尚未核查 如果您的 APIVoid 连接需要 SSL 验证,请选中此复选框。
远程运行 复选框 尚未核查 选中相应字段,以便远程运行配置的集成。选中后,系统会显示用于选择远程用户(客服人员)的选项。

如需了解如何在 Google SecOps 中配置集成,请参阅配置集成

如有需要,您可以在稍后阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例

操作

如需详细了解操作,请参阅 在工作台页面中处理待处理的操作执行人工处置措施

获取网域声誉

如果某个网域被热门且可信的网域封锁名单服务(例如 网址Vir、ThreatLog、OpenPhish、Spam404、PhishTank、ZeuS Tracker 等)排除,则获取网域声誉检查结果。多种网域屏蔽名单服务可识别涉及恶意软件分发、钓鱼式攻击事件和虚假网店的潜在恶意网站和欺诈性网站。

参数

参数名称 类型 默认值 是否为必需参数 说明
阈值 字符串 0 网域风险阈值。阈值必须是数值。示例:3
创建分析洞见 复选框 勾选 指定操作是否应生成数据洞见。

使用场景

网域声誉 API 的一个使用场景是检查客户的网站是否被排除,检查用户在您的应用中提交的网址,或识别可能具有恶意性和不安全性的网站。

运行于

此操作适用于以下实体:

  • 主机名
  • 网址

操作结果

实体丰富

如果负面引擎的数量达到或超过指定阈值,则将实体标记为可疑。

扩充项字段名称 逻辑 - 应用场景
alexa_top_100k 如果存在于 JSON 结果中,则返回
domain_length 如果存在于 JSON 结果中,则返回
alexa_top_10k 如果存在于 JSON 结果中,则返回
黑名单 如果存在于 JSON 结果中,则返回
服务器 如果存在于 JSON 结果中,则返回
主机 如果存在于 JSON 结果中,则返回
most_abused_tld 如果存在于 JSON 结果中,则返回
alexa_top_250k 如果存在于 JSON 结果中,则返回
数据分析
严重程度 说明
警告 系统会创建警告数据洞见,以告知富集实体的恶意状态。当检测到的引擎数量等于或超过扫描前设置的最低可疑阈值时,系统会创建该事件。
脚本结果
脚本结果名称 值选项 示例
成功 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 结果中,则返回
数据分析
严重程度 说明
警告 系统会生成一条警告数据洞见,用于告知富集哈希的恶意状态。当检测到的引擎数量等于或超过扫描前设置的最低可疑阈值时,系统会生成相应的数据洞见。
脚本结果
脚本结果名称 值选项 示例
成功 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"
    }
]

获取网址信誉

获取网址的安全声誉和风险得分。

参数

参数名称 类型 默认值 是否为必需参数 说明
阈值 整数 不适用

网址风险阈值。阈值必须是数值。示例:3

使用场景

分析师可以检索网址声誉,类似于检索网域或 IP 地址的声誉。

运行于

此操作在网址实体上运行。

操作结果

实体丰富

如果负面引擎的数量等于或高于给定的阈值,则将实体标记为可疑。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:已提取以下实体的声誉:<实体标识符列表>
  2. 失败的实体:“以下实体发生错误:<实体标识符列表>”
  3. 缺少实体(无数据):“找不到以下实体的声誉:<实体标识符列表>”
  4. 不含网址实体的提醒:“APIVoid:未找到任何网址。”
常规
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")
实体

获取屏幕截图

截取任何网站或网址的高品质屏幕截图。

参数

不适用

使用场景

分析师可以 PNG 或 JPG 图片格式捕获任何网站或网址的高质量屏幕截图。

运行于

此操作在 User 实体上运行。

操作结果

实体丰富

如果负面引擎的数量达到或超过给定阈值,则将实体标记为可疑。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:已为以下实体添加屏幕截图:<实体标识符列表>”
  2. 失败的实体:“以下实体发生错误:<实体标识符列表>”
  3. 缺少实体(无数据):“未找到以下实体的屏幕截图:<实体标识符列表>”
  4. 不含网址实体的提醒:“APIVoid:未找到用于捕获屏幕截图的网址实体。”
  5. 对于大型实体(附件文件大小 > 3MB):“无法将屏幕截图添加为以下实体的附件:<<实体标识符列表>>”
常规
附件

如果有数据可用,请创建一个新的文件对象:

  1. 附件标题:“屏幕截图 - {0}”.format(entity.identifier)
  2. 文件名应为不含后缀 (https/http) 的网址 +“_capture.<文件格式>”
  3. 屏幕截图以 base64 编码的字符串形式返回 --> 文件内容应为 b64decode(data.get('base64_file'))
  4. 别忘了添加 try、except - 我们有来自平台的 3MB 限制。如果出现错误,请向日志记录器添加相关消息。
常规

Ping

测试连接。

参数

不适用

运行于

此操作会针对所有实体运行。

操作结果

脚本结果
脚本结果名称 值选项 示例
成功 True/False success:False

验证电子邮件

检查电子邮件是否为临时电子邮件地址、是否具有 MX 记录等。

参数

参数名称 类型 默认值 是否为必需参数 说明
阈值 整数 不适用

电子邮件风险阈值。阈值必须是数值。

示例:3

使用场景

分析师可以检查电子邮件是否为临时电子邮件,获取 MX 记录等。

运行于

此操作在 User 实体上运行。

操作结果

实体丰富

如果负面引擎的数量达到或超过给定阈值,则将实体标记为可疑。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:已提取以下实体的信息:<实体标识符列表>
  2. 失败的实体:“以下实体发生错误:<实体标识符列表>”
  3. 缺少实体(无数据):“找不到以下实体的信息:<实体标识符列表>”
  4. 不含网址实体的提醒:“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 专业人士的解答。