如何使用Elasticsearch与TheHive构建开源安全应急响应平台


这篇文章主要介绍了如何使用Elasticsearch与TheHive构建开源安全应急响应平台,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过开源软件可以构建一个安全应急响应平台,该平台可以进行日志整合、告警生成、IoC 丰富与事件管理。在上面的流程图中,作为 HIDS 的 Wazuh 将数据发送回 Wazuh Manager 与 Elasticsearch。ElastAlert 观测到新事件并在 TheHive 中相应生成告警。然后通过 Cortex 与 MISP 查询额外信息丰富该事件,之后自动关闭该事件或提交给分析师。请注意,系统中的任何端点服务或者可以生成日志传送给 Elasticsearch 的 Agent 都可以被替代。该套系统的好处在于绝大多数的组件都可以替换。Wazuh 是一个开源安全监控解决方案,用于收集、分析主机安全数据。Wazuh 是 OSSEC 项目的分支。Wazuh 组件与 Elasticsearch 和 Kibana 的整合度很高,可以用来执行许多与安全相关的任务,如日志分析、Rootkit 检测、监听端口检测、文件完整性检测等。Elasticsearch 将充当整个系统的日志存储库。Elasticsearch 非常强大,具备很多功能。常与 Logstash(日志收集)和 Kibana(可视化)结合使用。Elasticsearch 为所有类型的数据存储都提供了一个强大的平台。ElastAlert 是由 Yelp 发起的项目,为 Elasticsearch 提供告警机制。ElastAlert 通过 REST API 查询 Elasticsearch 并有多个输出来匹配告警。TheHive 是一个可扩展的、开源、免费安全应急响应平台,旨在让任何安全从业人员能够轻松地处理安全事件,并快速地采取行动。本质上讲 TheHive 是一个告警管理平台,用于管理全部事件告警。Cortex 与 TheHive 是一个团队开发的产品。Cortex 使用分析器获取日志中有关指标信息的其他数据。允许在第三方服务中查询 IP、URL 与文件哈希等指标,并将第三方返回的结果作为附加信息丰富告警事件。MISP 是 CIRCL 维护的开源威胁情报共享平台,其 Feed 可以是某个组织提供的付费订阅,也可以是社区维护的开源订阅,这也是数据丰富的主要来源。首先部署 Elasticsearch 集群,系统使用 Ubuntu 16.04(文章使用虚拟机安装,DHCP 为该虚拟机预留了地址,确保其始终使用相同的 IP 地址)。作者提供了 Vagrantfile 帮助配置构建 Elasticsearch 虚拟机。注意:TheHive 正在进行一些后端重构,这会导致设置复杂化。TheHive 背后的开发团队认为 Elasticsearch 已经不再满足它们的需求了,4.0 版本后将在后端使用 GraphDB。当前稳定版本 3.2.1 版本以及我们在此使用的 beta 版本 3.3.0 都是用 Elasticsearch 5.6 作为后端。因此,在虚拟机中需要部署 Elasticsearch、Logstash 和 Kibana 6.6.1 作为日志存储仓库,另一个 Elasticsearch 5.6.15 部署在 TheHive 虚拟机中作为后端。虽然我总结了安装步骤,但是如果需要进一步了解细节可以查看安装指南。默认情况下,Elasticsearch 依赖的 Java 堆的大小为 1 GB。可以通过修改 /etc/elasticsearch/jvm.options 中的 Xms1g 与 Xmx1g 参数,将其增加到总内存的 50-80%。我的虚拟机只有 4GB 内存,所以我保留了默认值。编辑配置文件 /etc/elasticsearch/elasticsearch.yml:取消 cluster.name 和 node.name 的注释,并设置为不同的名字设置 bootstrap.memory_lock 为 True设置 network.host 为 0.0.0.0设置 discovery.type 为 single-node编辑服务 sudo systemctl edit elasticsearch.service:然后继续执行:应该可以看到类似的响应:编辑 Kibana 的配置文件:sudo nano /etc/kibana/kibana.yml设置 Kibana 来响应外部接口:server.host: 0.0.0.0启动服务:sudo systemctl start kibana.service打开浏览器:http://:5601 应该可以看到 Kibana 控制台按照如下命令执行:注意:此时 Logstash 没有运行。这部分将讲述如何安装 Wazuh Manager,并将 Wazuh 与 Elasticsearch 进行集成。使用 Wazuh 的 Agent 及其规则集来识别端点的行为并生成告警。这些告警从 Wazuh 的 Agent 转发到 Wazuh Manager 写入 /var/ossec/logs/alerts/alerts.json。Filebeat 的服务不断监视该文件的更改,然后转发给 Elasticsearch。详情请参见官方文档Wazuh API 是连接 Kibana 所必需的。Wazuh API 的默认账户密码是 foo/bar,如果想要变更可以查阅文档。首先安装 Filebeat:在末尾的 YOUR_ELASTIC_SERVER_IP 部分替换为 Elasticsearch 6.6.1 服务器的真实 IP。启动 Filebeat 服务:为 Elasticsearch 加载 Wazuh 模板。在 Elasticsearch 主机上运行此命令:curl https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/elasticsearch/wazuh-elastic6-template-alerts.json | curl -X PUT "http://localhost:9200/_template/wazuh" -H 'Content-Type: application/json' -d @-下载用于 Wazuh 远程安装的 Logstash 配置文件,在 Elasticsearch 主机上运行此命令:curl -so /etc/logstash/conf.d/01-wazuh.conf https://raw.githubusercontent.com/wazuh/wazuh/3.8/extensions/logstash/01-wazuh-remote.conf确保使用新配置文件运行 Logstash 服务:sudo systemctl restart logstash.service首先尝试运行 Wazuh 文档中提供的命令:sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip如果发现错误:之所以运行命令 npm update caniuse-lite browserslist 产生错误,是因为本机尚未安装 Node。卸载了插件并在没有 NODE 选项的情况下运行命令:sudo -u kibana /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip。此时安装将会成功,然后重新启动。根据你自己的系统情况按照说明进行安装,本文在 Linux 上进行安装。安装后,需要在 ossec.conf 中编辑 Wazuh Manager 的 IP 地址。Debian 的 Agent 安装在 /var/ossec,编辑 sudo n免费云主机域名ano /var/ossec/etc/ossec.conf 改变 MANAGER_IP 即可。我们使用简单的,不安全的方法注册 Agent:在 Manager 上,运行以下命令启动注册服务:/var/ossec/bin/ossec-authd在 Agent 上,使用 Manager 的 IP 地址运行 agent-auth 程序对于 Linux 来说:/var/ossec/bin/agent-auth -m 对于 Windows 来说:C:Program Files (x86)ossec-agentagent-auth.exe -m 应该可以看到如下输出:此时连接到 Kibana,就会在左侧工具栏中发现 Wazuh 的图标,点击此按钮跳转到配置 API 的页面:保存 API 配置,然后点击跳转到 Overview 页面。点击页面顶端的 Agent 即可查看 ID 为 001 的 Agent,即之前注册好的主机。它显示为 Active 状态即视为正常,否则可能需要在 Agent 上确保更改 MANAGER_IP 成功并重启 Agent 的服务。在 Kibana 中,深入到 Management > Elasticsearch > Index Management 应该可以看到名为 wazuh-monitoring-3.x 的索引。然后转到 Management > Kibana > Index Patterns,如果还没有定义默认索引模式,点击 wazuh-monitoring,然后点击右上角的星号将其设为默认值。点击 Discover 查看已创建的事件,可能暂时还没有。返回 Elasticsearch Index Management 页面,等待名为 wazuh-alerts 的索引出现。我们试图通过生成告警让其出现。作为测试,转到另一个主机并尝试使用虚假的用户通过 SSH 登录主机:ssh fakeuser@。这将会触发主机的 auth.log 出现无效的登录尝试,这将被 Wazuh Agent 获取,在新创建的 wazuh-alerts 索引中生成新条目。现在,我们就得到了一个存储告警的仓库。部署 MISP 可以允许 Cortex 或者任何能够发起简单 REST 请求的程序查询威胁指标,如 IP 地址、URL 与文件哈希。MISP 可以自主添加订阅与查询的源,返回的信息取决于订阅源提供的数据,而且订阅源之间的差异很大。有些只是提供了数据列表,有些提供了大量额外的信息。将 MISP 通过 Docker 进行部署相比通过源码安装容易得多,哈佛安全小组提供了一个示例。请注意:如果将其部署到生产环境中,应该使用 build.sh,这样就可以在构建之前更改默认的 MySQL 密码与 MISP_FQDN。初始化 MISP 数据库:docker run -it --rm -v /docker/misp-db:/var/lib/mysql harvarditsecurity/misp /init-db。这可以启动容器,运行脚本使用必要的数据库文件填充 misp-db 目录,最后删除容器。如果查看 misp-db 目录,可以发现已经新增了文件。如果不生成 SSL 证书,Cortex 就不能请求 MISP,按照如下命令生成证书:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /docker/certs/misp.key -out /docker/certs/misp.crt,如果没有特殊要求,可以接受所有默认选项。打开浏览器访问 https://localhost,使用 admin@admin.testadmin 作为用户名与密码。系统会要求更改密码,新的密码至少包含 12 个字符,其中包含大写字母和特殊字符。在 Administration > Server Settings 与 Maintenance > MISP Settings 中设置 MISP.live 为 TRUE、MISP.disable_emailing 为 TRUE。在 Sync Actions > List Feeds 的列表中选择订阅源进行订阅。我选了 malwaredomainlist,选中复选框然后点击顶部的 Enable Feed 就可以了。在列表中可以看到该订阅源,点击向下箭头就可以拉取所有事件,可以在 Administration > Jobs 处查看正在执行的任务。点击放大镜图标,可以显示 IP 的列表,复制其中任意一个,之后会用到。我们使用 Postman 来测试 API,在 File > Settings 中将 SSL certificate verification 设为 OFF。在 MISP 中,在 Administration > List Users 中拷贝用户的身份密钥。在 Postman 中设置 Header 中的三个字段:将用户的身份密钥粘贴到 Authorization 字段中。在顶部将 REST 命令从 GET 改为 POST,API 设置为: https://localhost/attributes/restSearch。换到 Body 选项卡,点击 Raw 按钮并粘贴以下 JSON,将值替换为之前复制的 IP 地址:应该会接收到以下响应:此时,MISP 现在已经可以响应查询请求,为 Cortex 的加入做好了准备。返回订阅列表可以添加更多订阅源,在 Administration > Scheduled Tasks 中可以将 fetch_feeds 设置为 24 并点击 Update All 就可以配置好定时拉取任务。这篇文章部署的 TheHive 3.3.0 RC5 与 Cortex stable v2.1.2,而 TheHive 4.1 版本(预计在 2019 年第二季度发布)后将取消 Elasticsearch 作为后端,转而使用 GraphDB。注:后续使用 3.3.0 稳定版安装也可以正常使用。打开浏览器,查看网站:http://:9000,应该可以看到数据库更新消息:点击 Update Database,如果没有看到上面的消息而是看到了登录框,意味着与 Elasticsearch 的连接中断了,请检测日志 varlogthehive。更新完成后,仍然有机会为管理员账户更改用户名与密码。还可以检查 Elasticsearch 名为 the_hive_14 的索引:curl http://127.0.0.1:9200/_cat/indices?v。如果忘记了管理员的账户与密码,请删除此索引重新开始。注:安装 Cortex 3.0.0-RC1 会遇到一些问题,安装 Cortex 2.1.3 则不会遇到。在 TheHive 主机上安装 Cortex:安装 Cortex 有一些依赖需要先安装:从 GitHub 拉取源代码,为每个 Analyzer 单独安装 requirements.txt 的依赖:本文的下载位置在:/etc/cortex:安装依赖不可避免地会出现一些错误,解决此类办法的好方法是挑选要安装哪些 Analyzer 防止依赖冲突。修改 Cortex 的配置文件 application.conf 指向 Cortex-Analyzers 目录:sudo nano /etc/cortex/application.conf。取消注释 #play.http.secret.key,并更改密码。找到 ## ANALYZERS 的位置,将其改为 /etc/cortex/Cortex-Analyzers/analyzers。启动 Cortex:打开浏览器检查安装是否成功:http://:9001。更新数据库并创建管理员用户登录,就像安装 TheHive 时做的那样。Cortex 中规定必须在组织账户下登录才能启用、管理 Analyzer,否则只能创建组织与用户。点击 +Add Organization 创建一个新组织,切换到 Users 标签页点击 +Add User 创建一个新用户,并且将新用户分配给创建的组织并分配 OrgAdmin 角色。保存后,点击 New Password 为刚创建的用户设置密码,按回车键保存。然后注销账户,用新用户登录。点击顶部的 Organization 标签页,点击 Analyzers 子选项卡,而不是顶部蓝色的 Analyzers 选项卡。如果 Cortex 配置正确,应该可以看到 Analyzers,按照我的配置安装了 113 个可用的 Analyzer。可以启用以下几个 Analyzer,接受默认配置:除了 MISP 之外,这些都不需要 API 密钥或者进行进一步的配置。 点击 Users 子选项卡并创建一个新用户和 TheHive 集成。该用户应该分配 read & analyze 角色,这次可以不用为其设置密码,点击 Create API Key 并且拷贝该密钥。点击页面顶端的 +New Analysis:不用管 TLP 与 PAP更改数据类型为 IP添加 8.8.8.8选中你启用的 Analyzer 旁边的框点击开始修改 TheHive 的 application.conf 来指向 Cortex:sudo nano /etc/thehive/application.conf。滚动到底部,找到 #Cortex 部分,取消注释 play.modules.enabled += connectors.cortex.CortexConnector。添加 API 密钥与 URL:重启服务器,两个服务再次启动的时候就可以使用了。在 TheHive 点击 +New Case 测试 Cortex:给事件一个名称与描述,然后打开这个事件,点击 Observables 选项卡,点击 +Add Observable 设置 Type = IP、Value = 1.1.1.1、Tag 为 test。只需要提供 tag 或者 description,不必二者都填。在 Observable 列表中点击该 IP 地址,这将打开一个新选项卡,包含相关数据,也可以在底部看到 Analyzer:点击 Run All,如果返回 Cortex 将会看到 Analyzer 在 Job History 标签页中运行。回到 TheHive,现在 Analyzer 应该有了最后分析的时间与日期。返回 Observables 选项卡并刷新页面,应该可以在 Observables 下看到一个标签列表:在 https://dl.bintray.com/thehive-project/binary/report-templates.zip 下载报告模版包。使用管理员帐号登录 TheHive,点击 Admin > Report templates 选择 Import templates,在其中选择下载的包。现在,在 Observables 中点击最后分析时间时将会获得包含分析结果的报告:在 MISP 的页面上点击 Administration > Add User:给用户分配一个电子邮件,cortex@admin.test将用户添加到 ORGNAME 组织分配角色 user取消底部所有复选框拷贝用户 API 密钥在 Cortex 的页面上点击 Organization > Analyzers,在搜索框中输入 misp,然后启用 MISP_2_0:为 MISP 服务器提供描述URL = https://key = AuthKey from MISP user you createdcert_check: False现在回到 MISP 页面,点击 Sync Actions > List Feeds。找到其中一个订阅源,然后点击右侧放大镜,从列表中选择一个 IP 并复制。在 Cortex 中点击 +New Analysis,添加 IP 的数据类型,然后粘贴复制的 IP 地址。选择 MISP_2_0 的 Analyzer 运行。在 Job History 页面点击 View 将会看到复制的 IP 列表名与其他信息。可以在 TheHive 中添加此 IP 为 Observables 进行测试。现在已经将 TheHive、MISP 与 Coretx 集成在了一起。最后一步是安装 ElastAlert 从 Elasticsearch 中的事件中生成警报。ElastAlert 当前版本要求 Python 2.7,本文安装在了 Elasticsearch 主机上:安装位置在:/home/username/.local/bin/elastalert,注:ElastAlert 也有 Docker 镜像提供。创建一个目录来存储配置和规则:mkdir -p ~/elastalert/rules。可以拉取公开配置文件或者制作自己的配置文件,复制如下必要的设置,保存为 ~/elastalert/config.yaml:运行 elastalert-create-index 在 Elasticsearch 中创建必要的索引。可以得到以下结果:在 TheHive 页面中点击 Admin > Users,创建一个名为 elastalert 的用户,但不为其分配角色,并选中 elastalert。点击 Create API Key 并拷贝 API 密钥。TheHive 的管理指南指出:“为了更好地审计,一旦创建了用户,就无法删除该用户,只能锁定该账户”。每条规则定义要执行的查询,触发匹配的参数与每个匹配触发的告警列表。本文中创建一个规则来识别失败的 SSH 登录,编辑规则文件 nano ~/elastalert/rules/failed_ssh_login.yaml:注意最后将 Observables 映射为 Types 的部分。尽管可以在标签字段使用嵌套的字段名({match[data][srcip]}),但对于 hive_observable_data_mapping 好像并不起作用。只能使用单个字段名('{match[srcip]}')。我们需要修改 Logstash 主机上的 01-wazuh.conf 配置文件来解决这个问题。在 Logstash 主机上修改 01-wazuh.conf 文件 [data][srcip] 过滤器的部分,将 add_field => [ "@src_ip", "%{[data][srcip]}" ] 改为 add_field => [ "src_ip", "%{[data][srcip]}" ]。geoip 过滤器的部分,将 source => "@src_ip" 改为 source => "src_ip"。现在日志中应该已经有了 src_ip 字段,可以通过 Kibana 进行验证。在 Kibana 页面中选择 Management > Kibana > Index Patterns,选择 wazuh-alerts 索引模式,点击 Refresh 启用新字段:针对运行着 Wazuh Agent 的主机生成一些告警:连续运行三次以下命令:ssh invaliduser@serverip。此时应该可以看到 Kibana 中显示了告警,ElastAlert 可以在下次运行时接收这些告警:在 TheHive 的 Alerts 下生成新告警:点击右侧 Page 图标预览告警,可以为其分配一个模版,然后导入它:这时已经完成了全部任务,Wazuh 生成的告警已经能在 TheHive 中显示为事件了。感谢你能够认真阅读完这篇文章,希望小编分享的“如何使用Elasticsearch与TheHive构建开源安全应急响应平台”这篇文章对大家有帮助,同时也希望大家多多支持云编程开发博客,关注云编程开发博客行业资讯频道,更多相关知识等着你来学习!

相关推荐: 双因素认证(two-factor authentication)

什么是双因素认证??? 从密码学理论上说,用于身份认证主要有三方面要素:一是需要用户记忆的身份认证内容,例如密码或号码等;二是用户拥有认证硬件,例如USB Key,智能卡(免费云主机域名以下简称IC 卡),磁卡等;三是用户本身拥有的唯一特征,例如指纹、瞳孔、声…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/03 11:40
下一篇 02/03 11:41