[安全] SIEM on AWS

[安全] SIEM on AWS

背景

安全运营团队依靠收集日志和使用搜索工具来发现需要关注的潜在事件,这些事件可能代表未经授权的活动或无意的更改。但是,仅仅分析收集的数据和手动处理信息不足以应对从复杂架构流出的大量信息。单凭分析和报告无法及时分配合适的资源来处理事件。

构建成熟的安全运营团队的最佳实践是将安全事件和结果的流程深度集成到通知和工作流系统中,例如票证系统、错误/问题系统或其他安全信息和事件管理 (SIEM) 系统。这样,工作流可以摆脱电子邮件和静态报告,让您能够路由、上报和管理事件或调查结果。许多组织也在逐步将安全警报集成到他们的聊天/协作和开发人员工作效率平台中。对于正在踏上自动化之旅的组织,一个由 API 驱动的低延迟票证系统能够在规划“首要自动化任务”时提供极高的灵活性。

这种最佳实践不仅适用于从描述用户活动或网络事件的日志消息生成的安全事件,还适用于在基础设施本身检测到的更改生成的安全事件。当面对一些更改,而且这些更改的不受欢迎程度足够微妙,以致于目前无法使用一组 IAM 和 Organizations 配置来防止这些更改发生时,为了保持和验证安全架构,必须能够检测更改、确定更改是否适当,然后将这些信息路由到正确的修复工作流程。

挑战

安全信息与事件管理系统(SIEM)在国内我们通常更倾向于称之为安全运营中心(以下简称SOC),主要用于发现整个企业中的趋势和态势,从多种事件和具有上下文信息的数据源中收集和分析安全事件, SIEM支持威胁检测和安全事件响应——即:一个界面可以连接所有数据。大多数企业使用SIEM来收集日志数据,并将安全事件与多个系统(入侵检测设备,防火墙等)内部安全日志和事件数据相关联。它是有效关联内部数据和提取的威胁数据信息流的起点,还可以自动报警并进行阻断。

组织的安全需要围绕着SIM来进行,SANS 2019年的报告显示,超过70%的大型企业仍然依赖安全信息和事件管理(SIEM)系统来进行数据关联、安全分析和运营。此外,很多企业的安全运营中心(SOC)团队还围绕SIEM配备了用于威胁检测/响应、调查/查询、威胁情报分析以及流程自动化/编排的其他工具。

现在使用AWS服务的用户在安全日志管理方面,主要面临如下的困难及需求。

  • 日志数据过于分散
    • AWS 已提供多种安全相关服务,例如CloudTrail, WAF Log, S3 Access Log, Guarduty Log, Security Hub。 但是这些服务的日志信息都是分别进行存储,没有针对安全信息进行汇总。
  • 缺乏统一的UI 界面
    • 无统一汇总页面
    • 对于安全事件及数据无法做到概览
  • 太多原始“噪音”
    • SIEM的一个重大困难在于其中输入的数据需要大量的过滤。如果过量的威胁元数据进入SIEM,可能会产生大量的误报,降低SIEM性能,也会强烈干扰监控和事件响应团队。此外,当无效的原始威胁信息流开始并入到SIEM中,它就无法分别情报的好坏。
  • 知己欠缺知彼
    • 虽然SIEM可以关联事件,或分析可疑或恶意活动,精确定位威胁。但是它缺乏专注于对手的意图或基于过去观察到的行为显示入侵者下一步可能做什么的能力。
  • 只对已知威胁有反应
    • 由于SIEM通常只能识别和标记已知威胁,而当您试图在恶意行为之前提前采取行动时,这将成为问题。如果一个持续的攻击者使用新的技术或工具来抵御企业的检测,SIEM本身无法检测到它,因为它对这种新方法并不熟悉。

企业用户需要对于其组织内的安全事件需要有一个汇总需求,易于查询的需求,那么都需要有一个SIM系统来统一管理安全相关日志,以帮助其及时发现安全威胁。

能解决什么业务问题

该解决方案为组织提供了一个检测其网络最新安全威胁的强大方式。通过提供实时报告和对安全事件的长期分析,为您呈现组织 IT 安全的整体状况。它记录整个网络中的来源的事件记录。这些日志为 IT 人员提供重要的取证工具,然后该软件帮助进行分析。

完整的日志收集有助于解决许多合规性报告要求。解析和标准化图将来自不同系统的信息记录到常用数据模型中,并能够分析以不同源格式记录的相关事件。本解决方案聚合通过实时整合与关联的聚合事件数据相关的重复事件记录和报告,并与长期摘要相比较,减少了事件数据量。

使用场景

本解决方案主要解决如下问题:

  • SIEM 软件为组织提供了一个检测其网络最新安全威胁的强大方式。
  • SIEM 通过提供实时报告和对安全事件的长期分析,为您呈现组织 IT 安全的整体状况。
  • SIEM 软件记录整个网络中的来源的事件记录。这些日志为 IT 人员提供重要的取证工具,然后该软件帮助进行分析。
  • 完整的日志收集有助于解决许多合规性报告要求。解析和标准化图将来自不同系统的信息记录到常用数据模型中,并能够分析以不同源格式记录的相关事件。
  • 关联链接记录来自不同系统或应用程序的事件,这加速了对安全威胁的检测和反应。
  • SIEM 聚合通过实时整合与关联的聚合事件数据相关的重复事件记录和报告,并与长期摘要相比较,减少了事件数据量。

概述

SIEM on AWS 为日志记录提供了聚合、重复数据删除和分析机制,您也可以通过其他 AWS 服务提供这些机制。具体来说,GuardDuty 提取、聚合和分析来自 VPC DNS 服务的信息以及您也可以通过 CloudTrail 和 VPC 流日志查看的那些信息。Security Hub 能够提取、聚合和分析来自 GuardDuty、AWS Config、Amazon Inspector、Amazon Macie AWS Firewall Manager 以及 AWS Marketplace 中提供的大量第三方安全产品的输出,如果您相应构建了自己的代码,还将包括这些代码。

GuardDuty 和 Security Hub 都有一个主节点-成员模型,此模型可以跨多个账户聚合调查结果和见解,拥有本地 SIEM 的客户通常将 Security Hub 用作 AWS 端日志和警报预处理器和聚合器,随后即可通过基于 Lambda 的处理器和转发服务器提取 Amazon EventBridge。

设计思路

通过收集AWS安全服务日志及其他基础架构日志,把所有的日志汇总到S3存储桶,并且针对每一种日志进行格式清理及格式转换等服务。使用无服务器Lambda架构把所有的安全日志发送到Elatic Search。基于Elastic Search的 Kibana开发Dashboard,汇总及及分析实时检测威胁,借由日志分析功能可捕获实时日志事件和网络流数据。

使用 SIEM 安全智能平台感知分析和消除威胁,以 AI 为基础的用户行为分析,可让数据安全人员快速获取必要的可视性,进而协助保护企业网络安全与 IT 资产,满足当前数据安全挑战与法规遵循要求。

概览

逻辑架构

详细架构

已支持日志类型

本解决方案可以管理如下19种日志。

  • GuardDuty
  • AWS Directory Service
  • AWS WAF
  • AWS Security Hub
  • AWS Network Firewall
  • ClouFront Access Log
  • CloudFront Real-time Log
  • CloudTrail
  • CloudWatch
  • CloudWatch Logs
  • Config
  • Config Rule
  • ELB Access Logs
  • S3 access log
  • Route53 Resolver VPC DNS Query Log
  • Amazon VPC Flow Logs
  • Amazon FSx for Windows File Server audit log
  • RDS(Aurora MySQL/MySQL/MariaDB)
  • EC2 Instance Log (Cloudwatch agent)

本方案优点

本解决方案可从安全数据获取切实可行的洞察,快速识别最关键的威胁。关于威胁的分类,可以分为 1)内部威胁: 发现可能指示凭证已泄露或存在内部威胁的可疑用户活动。2)高级威胁:将多个看似低风险的事件组合起来,及时发现风险高的网络攻击。3)数据泄漏:关联数据泄漏 4)管理合规性:管理各种合规性要求(例如 GDPR、PCI、SOX、HIPAA 等)所涉及的监管风险。

通过收集AWS安全服务日志及其他基础架构日志,把所有的日志汇总到S3存储桶,并且针对每一种日志进行格式清理及格式转换等服务。使用无服务器Lambda架构把所有的安全日志发送到Elatic Search。基于Elastic Search的 Kibana开发Dashboard,汇总及及分析实时检测威胁,借由日志分析功能可捕获实时日志事件和网络流数据。

使用 SIEM 安全智能平台感知分析和消除威胁,以 AI 为基础的用户行为分析,可让数据安全人员快速获取必要的可视性,进而协助保护企业网络安全与 IT 资产,满足当前数据安全挑战与法规遵循要求。

部署指南

本部署指南详细描述了如何在云上使用 AWS CloudFormation 模板部署 SIEM on AWS 解决方案。安全日志收集对于安全来讲是非常重要的。主要表现在:

  • 持续监控与定期评估控制环境的变化与即时合规性,是实现安全合规的基本前提。
  • 组织不仅需要考虑IT 系统的安全,同时也需要使用自动化的日志收集及显示工具。
  • 希望AWS 能提供开箱即用的SIEM方案,帮助其快速上线,及时发现潜在风险点。
  • 虽然 AWS 已经提供相关服务可以协助用户进行安全合规的检查,例如 AWS config 服务。但是有些规则是预先定义好的,无法在此基础上进行修改或者扩展。

部署说明

使用 CloudFormation 模板部署应用

部署以宁夏region为例。 ~~https://cn-northwest-1.console.amazonaws.cn/cloudformation/home?region=cn-northwest-1#/stacks/create/template~~ https://console.amazonaws.cn/cloudformation/home?region=cn-northwest-1#/stacks/new?stackName=siem&templateURL=https://aws-industry-solutions-cn-northwest-1.s3.cn-northwest-1.amazonaws.com.cn/siem-on-amazon-opensearch-service/v2.5.0/siem-on-amazon-opensearch-service-china.template

第一步:指定模板

第二步:指定堆栈详细信息

StackName: 输入 siemonaws, 其他值保持默认。 点击 【下一步】 勾选 I acknowledge that Amazon CloudFormation might create IAM resources with customer names 单选框。 点击[Create Stack]

堆栈创建完成

点击链接 Kibana URL, 用户名默认为 aesadmin, 密码如上图的KibanaPassword中所示。

点击 [Log In] 进入 ElasticSearch Kibana 界面。

S3 存储桶

本解决方案的设计思路上把所有的相关日志放到同一个S3 Bucket中的不同 Prefix。运行完CloudFormation后,会在当前账户创建3个S3 Bucket.

  1. aes-siem-accountid-geo 负责存储geolite2 数据库。主要的功能是负责IP地址到国家或城市的映射关系。
  2. aes-siem-accountid-log 负责存储所有的日志。
  3. aes-siem-accountid-snapshot 负责存储Kibanan dashboard JSON模板文件。

最重要的是 aes-siem-accountid-log 存储桶。配置好响应的日志后,目录结构如下。

服务集成

以VPC Flow Log 为例,首先需要选择需要监控的VPC,例如选择 Default VPC。点击 Flow Logs 标签页,选择 [Create Flow Log] Filter 选择 All, Maximum aggregation interval, 选择 1 mintues Destination 选择 Send to an Amazon S3 bucekt S3 bucket ARN 选择 aes-siem-accountid-log bucket的 ARN. 配置成功后,稍等几分钟。 VPC Flow log 已经成功的存储到S3 Bucket 中。

ElasticSearch 配置

如何限制特定IP 登录 ElasticSearch

  1. 进入 Elastic Search Console
  2. 点击 Domain【aes-siem】 链接
  3. 点击 Modify access policy
  4. 选择 Custom access policy
  5. 添加允许访问 ElasticSearch 的客户端公网IP地址。点击【Submit】按钮。

Kibana配置

以VPC Flow Log 配置为例,首先进入ElasticSeach console, 选择 Kibana 下面的 Visualize 链接。 在输入框输入 vpcflowlogs作为关键字。 选择 VPC FLowLogs - Sent Size via VPC 点击 右侧的Buckets 进行编辑。

系统运行原理

Lambda

本解决方案一共部署了如下5个Lambda函数。

Lambda 日志

进入Cloudwatch console, 输入 aes-siem 作为关键字进行过滤。 选择 /aws/lambda/aes-siem-es-loader 选择 任意日志进行查看 从日志内容来看,如下的Json字符串被成功的加入到ElasticSearch中。

 1
 2{
 3    "_aws": {
 4        "Timestamp": 1630907980209,
 5        "CloudWatchMetrics": [
 6            {
 7                "Namespace": "SIEM",
 8                "Dimensions": [
 9                    [
10                        "logtype",
11                        "service"
12                    ]
13                ],
14                "Metrics": [
15                    {
16                        "Name": "InputLogFileSize",
17                        "Unit": "Bytes"
18                    },
19                    {
20                        "Name": "OutputDataSize",
21                        "Unit": "Bytes"
22                    },
23                    {
24                        "Name": "SuccessLogLoadCount",
25                        "Unit": "Count"
26                    },
27                    {
28                        "Name": "ErrorLogLoadCount",
29                        "Unit": "Count"
30                    },
31                    {
32                        "Name": "TotalDurationTime",
33                        "Unit": "Milliseconds"
34                    },
35                    {
36                        "Name": "EsResponseTime",
37                        "Unit": "Milliseconds"
38                    },
39                    {
40                        "Name": "TotalLogFileCount",
41                        "Unit": "Count"
42                    },
43                    {
44                        "Name": "TotalLogCount",
45                        "Unit": "Count"
46                    }
47                ]
48            }
49        ]
50    },
51    "logtype": "cloudtrail",
52    "service": "es-loader",
53    "s3_key": "AWSLogs/12223344/CloudTrail/cn-northwest-1/2021/09/06/12223344_CloudTrail_cn-northwest-1_20210906T0600Z_xcKps0MTZddgp1iY.json.gz",
54    "InputLogFileSize": [
55        902
56    ],
57    "OutputDataSize": [
58        3885
59    ],
60    "SuccessLogLoadCount": [
61        1
62    ],
63    "ErrorLogLoadCount": [
64        0
65    ],
66    "TotalDurationTime": [
67        56
68    ],
69    "EsResponseTime": [
70        2
71    ],
72    "TotalLogFileCount": [
73        1
74    ],
75    "TotalLogCount": [
76        1
77    ]
78}

系统截图

所有威胁概览

VPC Flow Log

CloudTrail

![]../2022-11-15-22-55-44.png)

ELB Access Log

WAF Log

GuardDuty

SecurityHub

Appendix:如何在ElasticSearch中现在地图?

在国内的ElasticSearch中的Kibana服务,Amazon ES 的 Kibana 默认安装包括地图服务,但印度和中国区域的域除外。所以无法在Kibana中显示地图。

解决方法

由于Kibana可以配置Web 地图服务 (WMS) 服务器来提供坐标地图可视化。区域地图可视化只支持默认地图服务。

Kibana提供了Coordinate Map和Region Map两种基于地图的数据可视化方法,其地图由Elastic Maps Service提供服务。所以需要通过自行搭建GeoServer为Kibana提供地图服务的方法。

GeoServer介绍

GeoServer是一个基于java开发的软件服务器,使用开放地理空间联盟(Open Geospatial Consortium,OGC)提出的标准,可提供WMS兼容的地图服务。而且还是免费的! 允许用户查看和编辑地图数据。利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间共享空间地理信息。

安装GeoServer

  1. 创建EC2,选择AmazonLinux2 AMI。
  2. 设置Security Group 端口 22, 8080
  3. 安装JDK
    1. sudo yum install -y java-1.8.0-openjdk.x86_64
  4. 下载 GeoServer 二进制文件
    1. wget https://sourceforge.net/projects/geoserver/files/GeoServer/2.19.2/geoserver-2.19.2-bin.zip/download
    2. unzip geoserver-2.19.2-bin.zip
  5. 运行 GeoServer
    1. cd bin
    2. sh startup.sh
 1GEOSERVER_HOME environment variable not found, using current
 2location. If not set then running this script from other
 3directories will not work in the future.
 4GEOSERVER DATA DIR is /home/ec2-user/bin/../data_dir
 52021-08-20 09:24:12.903:INFO::main: Logging initialized @672ms to org.eclipse.jetty.util.log.StdErrLog
 62021-08-20 09:24:13.274:WARN:oejx.XmlConfiguration:main: Property 'jetty.port' is deprecated, use 'jetty.http.port' instead
 72021-08-20 09:24:13.275:WARN:oejx.XmlConfiguration:main: Property 'http.timeout' is deprecated, use 'jetty.http.idleTimeout' instead
 8Error binding ShutdownMonitor to port 8079: java.net.BindException: Address already in use (Bind failed)
 92021-08-20 09:24:13.289:INFO:oejs.Server:main: jetty-9.4.18.v20190429; built: 2019-04-29T20:42:08.989Z; git: e1bc35120a6617ee3df052294e433f3a25ce7097; jvm 1.8.0_302-b08
102021-08-20 09:24:13.317:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///home/ec2-user/webapps/] at interval 1
112021-08-20 09:24:14.257:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /geoserver, did not find org.eclipse.jetty.jsp.JettyJspServlet
122021-08-20 09:24:15.157:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
132021-08-20 09:24:15.158:INFO:oejs.session:main: No SessionScavenger set, using defaults
142021-08-20 09:24:15.159:INFO:oejs.session:main: node0 Scavenging every 660000ms
15Aug 20, 2021 9:24:16 AM org.geoserver.platform.GeoServerExtensions checkContext
16WARNING: Extension lookup 'XStreamPersisterInitializer', but ApplicationContext is unset.
17Aug 20, 2021 9:24:16 AM org.geoserver.platform.GeoServerExtensions checkContext
18WARNING: Extension lookup 'ExtensionFilter', but ApplicationContext is unset.
19Aug 20, 2021 9:24:16 AM org.geoserver.platform.GeoServerExtensions checkContext
20WARNING: Extension lookup 'ExtensionProvider', but ApplicationContext is unset.
21Aug 20, 2021 9:24:16 AM org.geoserver.platform.GeoServerExtensions checkContext

下载地图文件

下载地图 (SHP 格式) https://hub.arcgis.com/datasets/esri::world-countries-generalized/explore

选择 Shapefile, Download

下载后上传到 GeoServer服务器中 在 /data_dir/data 目录中新建 world目录, 例如 /home/ec2-user/data_dir/data/world unzip World_Countries.zip

设置 GeoServer

假设EC2 公网IP地址是52.82.11.150, 则登录地址为 http://52.82.11.150:8080/geoserver/web/

点击右上角 ,用户名 admin, 密码缺省 geoserver

新建 Workspaces

点击左侧的workspaces, 进入Workspaces 点击 Add new workspace, Name 输入 worldmap, Namespace URI 输入**http://worldmap.com** 点击 保存。 d

新建 Stores

点击左侧的Stores, 进入Stores,点击 Add New Store 选择 Shapefile- ESRI(tm) Shapefiles (*.shp) 点击 Save

发布地图

点击Publish链接 点击 compute form data compute from native bournds 链接,计算bounding box. 点击 Save.

配置步骤

将 Kibana 配置为使用 WMS 地图服务器: 打开 Kibana。 选择 Management (管理)。 选择 Advanced Settings (高级设置)。 找到 visualization:tileMap:WMSdefaults。 将 enabled 更改为 true 并将 url 更改为有效 WMS 地图服务器的 URL:

1`{"enabled": true,
2  "url": "`*wms-server-url*`",
3  "options": {"format": "image/png",
4    "transparent": true
5  }
6}`

例如 新建的WMS Server 的 URL 为 http://52.82.11.150:8080/geoserver/worldmap/wms? 则配置文件如下

 1{
 2"enabled": true,
 3"url": "[http://52.82.11.150:8080/geoserver/worldmap/wms](http://52.82.11.150:8080/geoserver/worlddetailmap/wms)?",
 4"options": {
 5"version": "1.3.0",
 6"layers": "worldmap:World_Countries__Generalized_",
 7"format": "image/png",
 8"transparent": true,
 9"attribution": "",
10"styles": ""
11}
12}

新建 visual,选择 Coordinate Map 选择 [e-commerce] orders, bucket 选择 Aggregation, Geohash. 可以显示当前订单的所在国家。