整合Shuffle与Virustotal和thehive -开源SOAR部分3

来源:https://medium.com/shuffle-automation/integrating-shuffle-with-virustotal-and-thehive-open-source-soar-part-3-8e2e0d3396a9

在信息安全领域,从业者和领导者之间的不协调是正常的。领导可能决定购买从业者不喜欢的产品或服务,但要求实现。这意味着您需要将其完全集成到您的流程和过程中。但是你是怎么做到的呢?这是一个困难的问题,通常需要花费大量的时间和精力。但如果没有必要呢?

Shuffle为您提供了从编程的角度探索平台的选项,无论您是否具备技术能力,并且提供了访问开放标准以在几分钟内构建实现的机会,而不是几个月或几年的时间。在这篇文章中,我们将快速了解如何在Shuffle中实现一个新服务。

服务来来往往,无论你是小型中小企业还是大型企业。变化是唯一不变的。在接下来的十分钟里,我们的重点是完成为Shuffle创建一个应用程序并将其集成的过程。我们的想法是继续前一篇文章中创建的工作流,并在此基础上构建Virustotal和hive功能。由于Virustotal并不是OpenAPI规范之外Shuffle的一部分,所以我们必须从创建应用本身开始。这些是我们将遵循的步骤。

(1)为Virustotal创建一个应用程序能够得到一个IP报告

(2)将虚拟的“获取IP报告”操作添加到我们的工作流程中

(3)如果您还没有,设置TheHive ()

(4)使用Virustotal提供的IP历史记录在hive中创建警报

1. 创建一个Virustotal应用

假设您已经安装了Shuffle,我们将在https://localhost:3443/apps上进行应用程序选择。我们看到了一个视图,可以创建、编辑、删除、搜索、下载以及其他所有与应用程序相关的内容。这个地方可以访问我们需要的一切,包括从github存储库下载应用程序,无论是公共的还是私有的(下图右上方),从OpenAPI生成应用程序(左下角)或从头开始创建应用程序。在我们的例子中,由于Virustotal没有公开的OpenAPI规范,我们将使用“从头创建”函数。

PS:如果你想跳过创建过程,可以在Shuffle的应用搜索栏中搜索“virustotal”并激活它,或者单击“从OpenAPI创建”并使用virustotal.yaml文件。


首先:我们需要了解Virustotal使用哪种身份验证,以及它们的API URL是什么。最常用的API认证选项有 Bearer auth(特定头)、基本认证(用户名和密码)、API-keys(自定义头或查询)和Oauth2(特殊、多层)。要找到特定平台的API文档,可以先搜索或访问他们的网站。在Virustotal中,它在标题栏中。

下面是Virustotal对身份验证的看法。


这告诉我们必须使用自定义头,这意味着我们应该使用API键。接下来,我们必须找到URL。为了找到它,我们将滚动到我们正在构建的函数,它有一个包含完整URL的示例。下面是我们将要创建的函数的一个亮点,它返回关于IP地址的数据。



回到Shuffle,我们现在有了为Virustotal(基础URL和认证方案)创建应用所需的信息。我已经在这里为Virustotal添加了一张图片和一个名字。


请注意,基本URL是可选的,这使得定制应用程序的本地托管成为可能。Authentication是一个可以从中选择的下拉菜单,在我们的例子中,我们选择了“API key”,然后按照文档中描述的“x-apikey”绘图。

完成第一步后,让我们为应用程序创建第一个动作。向下滚动一点,点击“NEW ACTION”按钮。

打开新操作的视图后,下一步是填写操作“Get IP report”的特定信息。在复制以下内容之前,填写名称和描述(可选):

curl --request GET \

  --url https://www.virustotal.com/api/v3/ip_addresses/{ip} \

  --header 'x-apikey: <your API key>'

该命令使用curl——一种常用的命令行工具来发出网络请求(例如HTTP)。我不会深入研究curl或HTTP的工作原理,但其本质是不同软件之间的一种对话方式。Shuffle支持CURL解析,这意味着我们可以直接使用这个命令来执行操作。

简而言之,创建一个动作:

给它起个好名字

在URL字段中粘贴CURL命令

点击提交按钮!


第一个操作的创建过程完成后,就可以进行保存了。通过点击红色(橙色)保存按钮,Shuffle将创建三样东西:OpenAPI规范、带有APP SDK的Python代码和完成的Docker映像。这可能需要一分钟,但您可以立即开始修改工作流。


创建过程完成后,我们现在应该测试我们的应用程序。频繁测试是在向工作流引入新部件时避免遗留问题的最好方法。创建新工作流后,我们首先将Virustotal V3应用拖到工作流视图中,选择它,然后填充“apikey”和“ip”参数(如下图所示)。要处理api键或可重用数据,最好的方法是使用工作流变量。要找到Virustotal的API密钥,请在选择右上角的“API密钥”之前登录。


Using the workflow variable “Virustotal APIkey” with the API key in it

保存并执行,然后检查结果。记住,根据所选的IP,结果可能很大。如果有什么问题,找我,希望我能帮上忙。

2. 添加Virustotal“获取IP报告”动作到我们的工作流程

测试结束后,我们现在可以进入真正的工作流,也就是我们在第二部分中创建的“我的第一个工作流”。

在这里,我们首先添加节点,然后将其连接到最后一个节点—“Print IP”。这里的目标是使用我们自己的IP(通过“Get URL”节点传递),并在Virustotal中搜索它。我们通过写$Get URL来做到这一点。因为从“Get URL”节点返回的数据是以{" ip ": " your_ip "}的形式返回的。


为了测试,我们使用执行参数{" url ": " https://api.ipify.org/?(PS:我修改了我们获取IP的URL,因为另一个URL经常失败)。结果是来自Virustotal节点的关于IP的JSON格式数据。

为Virustotal创建了应用程序并从Virustotal检索了数据,现在就可以使用数据了。接下来的步骤和博文将把我们的注意力从Shuffle的基本用法转移到一般的集成和真实的用例上。

3.设置thehive(如果你有一个测试实例就跳过)

在这一步中,我们将快速设置thehive,授予用户创建警报的权限,并获取API-key以供以后使用。

thehive有很好的文档,可以通过多种方式安装。将以下内容复制到一个名为“docker-compose”的文件中。然后键入“docker- composition -d”。这需要几分钟,具体时间取决于您的网络速度。

version: "2"

services:

  elasticsearch:

    image: elasticsearch:6.8.8

    environment:

      - http.host=0.0.0.0

      - discovery.type=single-node

    ulimits:

      nofile:

        soft: 65536

        hard: 65536

  cortex:

    image: thehiveproject/cortex:latest

    depends_on:

      - elasticsearch

    ports:

      - "0.0.0.0:9001:9001"

  thehive:

    image: thehiveproject/thehive:latest

    depends_on:

      - elasticsearch

      - cortex

    ports:

      - "0.0.0.0:9000:9000"

    command: --cortex-port 9001

1、完成docker-compose执行后,转到http://localhost:9000(或您选择安装它的主机)。

2、点击“更新数据库”

3、设置一个管理员用户并登录

4、单击右上角“Admin > Users”

5、选择您的用户(或创建一个新用户),并让它访问创建警报。


6. 复制API键并将其保存为Shuffle中的变量


PS:如果你遇到与Elasticsearch相关的错误,这是一个测试实例,运行以下命令来删除常见错误:

docker exec -u 0 -it thehive_elasticsearch_1 curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_cluster/settings -d '{ "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } }'; curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

4. 使用Virustotal数据在hive中创建警报

有了我们的API密钥,我们现在可以创建一个警报。由于Shuffle已经为thehive开发了一个应用程序,唯一缺少的就是将我们的“创建警报”动作添加到工作流中。在连接到Virustotal节点之前,从左侧拖动它。


thehive需要注意的是:type、source和sourceref每次必须是唯一的组合。在我的例子中,我的外部IP更改得非常频繁,所以我决定使用我自己的IP作为引用(源文件):这也有一个很好的副作用:如果我的IP发生了变化,它将在日程表上生成一个新的警报。

后一个字段是可选的,但如果对分析人员来说不是很重要,则非常有用。标题和描述被大量用于帮助决定如何处理警告。这里是我在我的可选字段中使用的,但您可以放置任何您想要的内容。

title: Info for $Get URL.ip

description: * IP owner: $Virustotal v3_1.data.attributes.as_owner \n * Country: $Virustotal V3_1.data.country \n* Reputation: $Virustotal V3_1.data.attributes.reputation \n* Whois: $Virustotal V3_1.data.attributes.whois

执行会产生一个新的警报,如下所示。为了确保每次外部IP更改时它都会创建一个新的警报,我们需要重新启用调度程序。我将自己的游戏设置为每5分钟(300秒)运行一次,导致每天都会在the hive中发出警告,因为这是我的IP租期。如果您想继续扩展此构建,我建议检查现有的安全定义,包括我们完整的Virustotal OpenAPI规范。


正如你可能已经注意到的,第一步比后三个步骤要长得多,因为它是唯一的“新”步骤。后三个都是关于工作流版本和安装,而第一个试图解释一个新概念。通过了解如何通过curl命令或手动在几分钟内创建一个应用程序,您可以在几天内为您的资源实现工作流,而不是几个月或几年的专有内部开发时间。

只要使用OpenAPI或其他标准,它就会使事情变得更简单、更容易理解、最后也是最重要的;你并不局限于技术本身。Shuffle中的OpenAPI可以导入、导出、生成等,并且(与JSON API一起)将成为下一代安全行业Rest API事实上的标准。信息安全/IT自动化通常是由开发人员的“独角兽”单独完成的,如果我们一起工作,甚至都无法达到我们能达到的程度。

接下来,我们将继续与hive的合作,专注于实时数据传输(Webhook /消息队列)和真实的集成,而不是虚构的例子。我们还将快速查看MSSP的Shuffle、潜在的多租户和其他触发器。

我欢迎您进一步探索Shuffle,尝试它并在它的基础上构建它。如果没有社区,它就无法生存,这里有一些帖子来帮助它启动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355