Safebrowsing API 上传哈希以检查是否存在可疑软件

Safebrowsing API upload hash to check for suspicious software

我正在尝试发送一个散列作为安全浏览 API 的有效负载,以检测文件是否 suspicious/malicious,但显然我在发送正确的有效负载时遇到了问题。

我的负载:

curl --location --request POST 'https://safebrowsing.googleapis.com/v4/threatMatches:find?key=myKey' \
--header 'Content-Type: application/json' \
--data-raw '{
    "hash": "YzIyZDM4NDA="
}'

https://developers.google.com/safe-browsing/v4/lookup-api 声明我需要使用 ThreatEntry 对象(见下面的截图)

这就是 threatEntry 对象应该看起来像 https://developers.google.com/safe-browsing/v4/reference/rest/v4/ThreatEntry 的样子。它说我只需要使用其中一个选项,所以我在我的有效负载中选择了 hash,但是这个错误返回给我。

{
    "error": {
        "code": 400,
        "message": "Invalid JSON payload received. Unknown name \"hash\": Cannot find field.",
        "status": "INVALID_ARGUMENT",
        "details": [
            {
                "@type": "type.googleapis.com/google.rpc.BadRequest",
                "fieldViolations": [
                    {
                        "description": "Invalid JSON payload received. Unknown name \"hash\": Cannot find field."
                    }
                ]
            }
        ]
    }
}

我做错了什么?

根据安全浏览 API v4,您缺少一些值以允许它工作。您还需要更好地了解不同的威胁条目。

API 文档:https://developers.google.com/safe-browsing/v4/reference/rest

API 终点:POST https://safebrowsing.googleapis.com/v4/threatMatches:find?key=YOURKEYHERE

HEADERS: Content-Type: application/json

BODY:

{
    "client": {
        "clientId": "NothingTooSeeHereInc",
        "clientVersion": "1.5.2"
    },
    "threatInfo": {
        "threatTypes": [
            "MALWARE",
            "SOCIAL_ENGINEERING",
            "THREAT_TYPE_UNSPECIFIED",
            "UNWANTED_SOFTWARE",
            "POTENTIALLY_HARMFUL_APPLICATION"
        ],
        "platformTypes": [
            "ANY_PLATFORM"
        ],
        "threatEntryTypes": [
            "EXECUTABLE"
        ],
        "threatEntries": [
            {
                "digest": "OTAwMTU2N2UyMDI1ZjgzYzkzNmI4NzQ2ZmQzYjAxZTQ0NTcyZjcwZDhkZGVjMzliNzViOTQ1OWY3ZTUwODljOA=="
            }
        ]
    }
}

推理:在您的代码中,您试图仅在 json 的哈希字段中传递哈希。 API 需要正确的结构来处理请求。在您的示例中,您想为恶意文件传递 base 64 编码的哈希值。要参考我下面的示例执行该操作,您可以看到您需要传递一个客户端 object 和一个威胁信息 object。在 threatInfo object 中,您需要 threatTypes、platformTypes、threatEntryTypes 和 threatEntries。在你的例子中,即使你有像我上面的例子那样的正确结构,你的条目仍然会失败,因为你试图将可执行摘要作为哈希类型传递。我附上了 API 参考 link。希望这可以帮助。 PS:如果有匹配项,您只会 return 一个非空数据集。

干杯。