如何使用 Go 扫描 GCP 存储文件是否存在威胁

1,857次阅读
没有评论

共计 7421 个字符,预计需要花费 19 分钟才能阅读完成。

本文讨论了将外部安全解决方案与云存储实例集成的重要性,并提供了与 GCP 集成的解决方案。

随着企业云存储解决方案在全球市场上稳步发展,为保护这些按规模付费服务而部署的防病毒和恶意软件安全策略变得越来越强大。当然,城堡墙越高,攀爬的攻城梯就越高,但威胁行为者和云安全从业者之间的持久战斗似乎让我们越来越接近更安全的数字未来。

也就是说,成功的云存储攻击所造成的灾难性损害不可低估,并且永远不应低估这种攻击向量的演变。公共、私有和托管云存储服务对于威胁参与者来说都是非常有价值的目标,它们托管着在用户设备之间频繁移动的有价值的数据,并且定期探索各种有效的攻击媒介以通过这些位置渗透网络。威胁行为者可以利用网络钓鱼等众所周知的技术来诱使用户在公共位置保存和存储恶意内容,并且他们可以通过 Office 宏或 PDF 密码保护等内置文件功能在直接客户端上传场景中非常有效地伪装恶意软件措施。

如果存储内威胁检测策略执行扫描的速度不够快,或者未将其配置为标记伪装的文件威胁,则恶意文件可能会快速分发给毫无戒心的用户,这些用户在打开这些文件后,会无意中发起突然且不可预测的攻击。始终将云存储安全视为一项多策略工作至关重要,并部署多个集成安全解决方案,以增加在到达存储实例后快速检测到文件上传威胁的可能性。

与竞争对手相比,谷歌云平台 (GCP) 存储约占全球云存储市场份额的 10-13%,是受益于外部威胁检测策略集成的众多流行且快速增长的解决方案之一。与竞争对手非常相似,GCP 使开发人员可以轻松地将额外的安全措施与其内置的安全架构集成在一起。在本文的其余部分中,我将演示一种免费使用的 API 解决方案,该解决方案可以快速集成,以纳入针对任何给定 GCP 存储桶中的文件上传的各种威胁检测策略。

示范

下面提供的云存储扫描 API 旨在与 Google Cloud Storage Bucket 集成,并使用任何 GCP 管理员帐户中提供的基本信息扫描文件。该解决方案能够根据经常更新的病毒和恶意软件签名列表(目前总共超过 1700 万个签名,包括特洛伊木马、勒索软件和间谍软件)来引用文件,并且还能够通过以下方式检测各种日益常见的隐藏威胁类型:深入内容验证。这些隐藏内容威胁类型包括可执行文件、无效文件、脚本、受密码保护的文件、宏、XML 文件(包括 XXE 威胁)、不安全反序列化对象和 HTML 输入,并且可以通过设置自定义策略(使用 API 请求正文中的布尔值)来阻止或允许这些威胁中的每一种。

对于涉及直接将用户文件上传到 GCP 存储桶的存储用例,您还可以通过在 API 请求中提供以逗号分隔的可接受文件扩展名列表来针对不需要的文件类型设置自定义限制。设置此策略后,将根据您接受的文件扩展名列表验证每个文件上传。

要将此 API 与您的 GCP 存储桶集成,您需要在请求中设置以下信息:

  1. 存储桶名称:您的存储桶在 GCP 存储中的名称

  2. 对象名称:GCP 存储中的对象或文件的名称

  3. JSON 凭证文件:Google Cloud 的服务帐号凭证,存储在 JSON 文件中

包含病毒或恶意软件签名和 / 或违反 API 请求正文中设置的自定义威胁策略的文件将收到 CleanResult: False 来自底层安全服务的响应,典型响应时间为亚秒级。CleanResult 例如,此布尔值可用于将干净的文件和受感染的文件分离到其他 GCP 存储桶中,以便最终删除或文件隔离 / 威胁分析。

您可以使用各种常见的编程语言来构造您的 API 请求,在本文中,我将提供 Go 代码示例以方便您使用。

要构建您的请求,请使用以下可立即运行的代码示例,并在带标签的标头中输入相关的 GCP 存储桶信息。要授权您的请求,请将免费层 API 密钥(允许每月 800 次 API 调用,无需额外承诺)复制到 API 密钥标头中。

package main

import (
     "fmt"
     "bytes"
     "mime/multipart"
     "os"
     "path/filepath"
     "io"
     "net/http"
     "io/ioutil"
)

func main() {

     url := "https://api.cloudmersive.com/virus/scan/cloud-storage/gcp-storage/single/advanced"
     method := "POST"

     payload := &bytes.Buffer{}
     writer := multipart.NewWriter(payload)
     file, errFile1 := os.Open("/path/to/file")
     defer file.Close()
     part1,
         errFile1 := writer.CreateFormFile("jsonCredentialFile",filepath.Base("/path/to/file"))
     _, errFile1 = io.Copy(part1, file)
     if errFile1 != nil {fmt.Println(errFile1)
          return
     }
     err := writer.Close()
     if err != nil {fmt.Println(err)
          return
     }


     client := &http.Client { }
     req, err := http.NewRequest(method, url, payload)

     if err != nil {fmt.Println(err)
          return
     }
     req.Header.Add("bucketName", "")
     req.Header.Add("objectName", "")
     req.Header.Add("allowExecutables", "")
     req.Header.Add("allowInvalidFiles", "")
     req.Header.Add("allowScripts", "")
     req.Header.Add("allowPasswordProtectedFiles", "")
     req.Header.Add("allowMacros", "")
     req.Header.Add("allowXmlExternalEntities", "")
     req.Header.Add("restrictFileTypes", "")
     req.Header.Add("Content-Type", "multipart/form-data")
     req.Header.Add("Apikey", "YOUR-API-KEY-HERE")

     req.Header.Set("Content-Type", writer.FormDataContentType())
     res, err := client.Do(req)
     if err != nil {fmt.Println(err)
          return
     }
     defer res.Body.Close()

     body, err := ioutil.ReadAll(res.Body)
     if err != nil {fmt.Println(err)
          return
     }
     fmt.Println(string(body))
}

我建议将所有自定义威胁检测策略设置为“False”,以充分利用此解决方案 – 它可以在改善 GCP 存储桶的威胁概况方面发挥巨大作用。

示例一

在当今数字化时代,我们越来越依赖云存储来保护和管理我们的数据。Google Cloud Platform(GCP)提供了强大的云存储服务,可以帮助我们存储和访问各种类型的文件。然而,随着威胁越来越多样化和复杂化,我们需要一种方法来扫描和检测存储在 GCP 中的文件是否存在潜在的安全威胁。

本文将介绍如何使用 Go 语言编写一个简单的程序来扫描 GCP 存储文件,并检测是否存在潜在的威胁。我们将使用 GCP 提供的 Cloud Storage API 和 Google Cloud Storage Go SDK 来实现这个功能。

准备工作

在开始之前,您需要完成以下准备工作:

安装 Go 编程语言:确保您的系统已经正确安装了 Go 编程语言。

创建 GCP 项目:在 Google Cloud Console 上创建一个新的 GCP 项目,并启用 Cloud Storage 服务。

获取 GCP 凭据:获取一个具有适当权限的 Service Account JSON 文件,以便您的 Go 程序能够访问 GCP 云存储。

配置 Go 项目

首先,我们需要创建一个新的 Go 项目,并配置所需的依赖项。

1、在命令行中,创建一个新的目录,并进入该目录:

mkdir gcp-threat-scan && cd gcp-threat-scan

2、初始化 Go 项目并添加所需的依赖项:

go mod init gcp-threat-scan
go get cloud.google.com/go/storage

编写扫描程序

下面是一个使用 Go 语言编写的简单程序,用于扫描 GCP 存储文件是否存在安全威胁。请在您的项目目录下创建一个名为 main.go 的文件,并将以下代码复制到其中:

package main

import (
    "context"
    "fmt"
    "log"

    "cloud.google.com/go/storage"
)

func main() {ctx := context.Background()

    // 填写您的 Service Account JSON 文件路径
    serviceAccountKeyFile := "path/to/service-account.json"

    // 填写您的 GCP 项目 ID 和存储桶名称
    projectID := "your-project-id"
    bucketName := "your-bucket-name"

    // 创建一个新的 Storage 客户端
    client, err := storage.NewClient(ctx)
    if err != nil {log.Fatalf("Failed to create client: %v", err)
    }

    // 使用 Service Account 凭据进行身份验证
    opt := option.WithCredentialsFile(serviceAccountKeyFile)
    client, err = storage.NewClient(ctx, opt)
    if err != nil {log.Fatalf("Failed to create client: %v", err)
    }

    // 列出存储桶中的所有对象
    it := client.Bucket(bucketName).Objects(ctx, nil)
    for {attrs, err := it.Next()
        if err == iterator.Done {break}
        if err != nil {log.Fatalf("Failed to iterate objects: %v", err)
        }

        // 在此处添加您的威胁扫描逻辑
        threatDetected := scanForThreats(attrs.Name)
        if threatDetected {fmt.Printf("发现潜在威胁:%sn", attrs.Name)
        }
    }
}

func scanForThreats(filename string) bool {
    // 在此处添加您的威胁扫描逻辑
    // 返回 true 表示发现了潜在威胁,false 表示未发现威胁
    return false
}

确保替换代码中的 path/to/service-account.json、your-project-id 和 `your-bucket-name` 为您自己的值。这些值将用于验证您的身份并指定要扫描的 GCP 存储桶。

在上面的代码中,我们首先创建了一个新的 GCP Storage 客户端,并使用提供的 Service Account 凭据进行身份验证。然后,我们列出存储桶中的所有对象,并依次对它们进行威胁扫描。你可以根据需要在 scanForThreats 函数中添加自定义的威胁检测逻辑。

自定义威胁扫描逻辑

在 scanForThreats 函数中,您可以编写自己的威胁扫描逻辑。这可能涉及使用第三方威胁情报服务、模式匹配算法、机器学习模型等方法来检测潜在的威胁。

文章来源地址 https://www.toymoban.com/diary/golang/304.html

以下是一个示例,展示如何使用简单的模式匹配算法来检测是否存在包含敏感信息(如社会安全号码)的文件:

func scanForThreats(filename string) bool {
    // 使用简单的模式匹配算法来检测是否包含社会安全号码
    socialSecurityPattern := "^[0-9]{3}-[0-9]{2}-[0-9]{4}$"

    if matched, _ := regexp.MatchString(socialSecurityPattern, filename); matched {return true}
    return false
}

请注意,在实际的生产环境中,您可能需要使用更复杂和准确的威胁检测技术来确保对潜在威胁的全面扫描。

运行程序

完成代码编写后,您可以通过以下命令来运行程序:

go run main.go

程序将遍历存储桶中的所有对象,并输出任何被判定为潜在威胁的文件。根据您自己的需求,可以进一步扩展程序以采取适当的措施来处理或处理这些潜在的威胁。

总结一下,我们使用 Go 编程语言和 GCP 提供的 Cloud Storage API,编写了一个简单的程序来扫描 GCP 存储文件是否存在潜在安全威胁。通过自定义威胁扫描逻辑,您可以根据自己的需求来检测和应对不同类型的威胁。这个例子只是一个起点,您可以根据具体需求进行扩展和完善,以满足您的安全要求。

示例二

对于在 Google Cloud Platform (GCP) 上运行的应用程序,确保其存储的数据安全是至关重要的。在这篇文章中,我们将引导你如何使用 Go 语言来扫描 GCP 存储中的文件,以检测是否存在任何潜在的威胁。

首先,你需要设置 GCP 和 Go 环境。确保你已经安装了 Go 语言,并且在 GCP 上有一个活跃的项目。你也需要安装 Google Cloud SDK,并且使用 `gcloud auth login` 命令进行身份验证。同时,需要确保已经启用了 Google Cloud Storage (GCS) 和 Cloud Security Scanner API。

接下来,我们将编写一个 Go 程序,它将连接到 GCP,访问指定的存储桶,并扫描其中的文件。

package main

import (
	"context"
	"log"
	"cloud.google.com/go/storage"
)

func main() {ctx := context.Background()

	client, err := storage.NewClient(ctx)
	if err != nil {log.Fatalf("Failed to create client: %v", err)
	}

	bucket := client.Bucket("your-bucket-name")
	obj := bucket.Object("your-object-name")

	attrs, err := obj.Attrs(ctx)
	if err != nil {log.Fatalf("Failed to get attributes: %v", err)
	}

	log.Println(attrs.Name, attrs.Size, attrs.ContentType, attrs.Created)
}

在这个程序中,我们首先创建了一个上下文和一个新的 GCS 客户端。然后,我们指定了要扫描的存储桶和对象。我们获取并打印出对象的属性,包括名称、大小、内容类型和创建时间。

然而,这只是检查文件属性的基本步骤。对于真正的威胁扫描,你可能需要使用更复杂的工具或服务,例如 Google Cloud Security Command Center 或者自定义的威胁检测脚本。

这个示例程序可以作为你构建更复杂扫描工具的基础。你可以根据自己的需求进行扩展,例如扫描一个存储桶中的所有文件,或者根据文件的内容类型进行特定的威胁扫描。

总的来说,使用 Go 扫描 GCP 存储文件是否存在威胁是一种有效的安全措施。如果你对这个主题有任何疑问或者需要进一步的帮助,欢迎留言。我们希望这篇文章能对你有所帮助,让你能更好地保护你在 GCP 上的数据安全。

到此这篇关于如何使用 Go 扫描 GCP 存储文件是否存在威胁的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计7421字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)