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

本文讨论了将外部安全解决方案与云存储实例集成的重要性,并提供了与 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", "<string>")
     req.Header.Add("objectName", "<string>")
     req.Header.Add("allowExecutables", "<boolean>")
     req.Header.Add("allowInvalidFiles", "<boolean>")
     req.Header.Add("allowScripts", "<boolean>")
     req.Header.Add("allowPasswordProtectedFiles", "<boolean>")
     req.Header.Add("allowMacros", "<boolean>")
     req.Header.Add("allowXmlExternalEntities", "<boolean>")
     req.Header.Add("restrictFileTypes", "<string>")
     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("发现潜在威胁:%s\n", 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模板网!

原文地址:https://www.toymoban.com/diary/golang/304.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
Java与其他编程语言比较分析,编程语言选择与优点、缺点和适用场景详解
上一篇 2023年08月27日 13:26
下一篇 2023年08月27日 17:49

相关文章

  • 恶意IP检测API接口,恶意IP威胁情报查询,通过大数据查询IP是否存在威胁或恶意。

    恶意IP检测,是指使用多种手段来检测IP地址是否存在威胁或恶意。在当前的网络安全环境下,恶意攻击已经成为常态化,各种类型的攻击不断涌现,其中大部分的攻击都是通过IP地址发起的。因此,对IP地址的安全性进行监控和检测,是保障网络安全的重要手段之一。 恶意

    2024年02月06日
    浏览(56)
  • Java如何判断某文件目录是否存在

    在java中如何判断某文件所在的目录是否存在,若不存在创建目录 可以通过国使用 File 类的 getParentFile() 方法来获取文件所在的目录,并通过 exists() 方法来判断该目录是否存在,若不存在,通过 mkdirs() 方法创建目录,以下为实例 或直接简写

    2024年02月12日
    浏览(85)
  • 存储过程不要使用IF EXISTS 使用@RecordCount = count(1) 查询是否存在数据

    业务需求:在存储过程中保存前判断:是否数据库中已经存在要存储的条码信息,如果存在,则抛出提示信息,不存储 错误代码 该代码IF EXISTS 无法走,不知道为什么 修改成

    2024年01月19日
    浏览(59)
  • opencv C++ 读取视频中的光斑是否在移动(图片存储在指定文件见下,光斑坐标存在TXT文本中)

    读取视频中的光斑是否在移动(图片存储在指定文件见下,光斑坐标存在TXT文本中)

    2024年02月12日
    浏览(60)
  • [ 云计算 | AWS 实践 ] 使用 Java 检查指定的密钥是否存在于给定的 Amazon S3 存储桶中

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月05日
    浏览(65)
  • 【Shell-HDFS】使用Shell脚本判断HDFS文件、目录是否存在

    本文主要讲述如何使用 Shell 脚本判断 HDFS 文件或目录是否存在,算是一个小技巧吧,这几天做 distcp 的时候用到的,因为要判断 HDFS 中是否存在某个目录。 Shell脚本测试: 1、测试路径是否存在。 2、测试目录是否存在。 3、测试文件是否存在。 4、测试路径大小是否大于0。

    2023年04月24日
    浏览(84)
  • SQL Server判断数据库、表、列、视图、存储过程、函数是否存在

    在写一些业务逻辑相对复杂点的存储过程的时候,经常会用到临时表或者数据表作为临时结果的保存。但每次在作表是否存在的判断时,往往想不起完整的SQL写法。因此,记录一些常用的数据库对象是否存在的判断方法,可以达到快速查找的目的。正是:好记性不如烂笔头。

    2024年02月02日
    浏览(128)
  • Python检查文件是否存在,若不存在则创建

    Python检查文件是否存在,若不存在则创建 在Python中,我们经常需要操作文件。在处理文件时,有时候需要判断目录是否存在。如果目录不存在,则需要创建一个新的目录。本篇文章将介绍如何使用Python来检查目录是否存在,如果不存在则创建一个新的目录。 使用os.path.exist

    2024年02月07日
    浏览(60)
  • shell 查询文件是否存在

    在 shell 中,可以使用 test 命令来查询文件是否存在。例如,要查询文件 /path/to/file 是否存在,可以使用以下命令: 如果文件存在,则会输出 \\\"File exists\\\";如果文件不存在,则会输出 \\\"File does not exist\\\"。 此外,也可以使用 [ -e /path/to/file ] 来查询文件是否存在。这两种方法都是等

    2024年02月16日
    浏览(52)
  • 【Linux | Shell 】- 判断文件是否存在、去掉文件后缀

    在Linux编程过程中, 设计到对文件的处理时常常需要判断某个文件是否存在,或者需要获取文件的前缀或文件后缀,这篇文章主要介绍在Linux的Shell编程或者在命令行与Shell交互时,如何判断文件是否存在、如何获取文件后缀,获取文件前缀。 将下面代码保存为 dirExist.sh ,运

    2024年02月08日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包