亚马逊AWS官方博客

Amazon GuardDuty 的新增功能 – Amazon EBS 卷的恶意软件检测

借助 Amazon GuardDuty,您可以监控自己的 AWS 账户和工作负载以检测恶意活动。我们于近日在 GuardDuty 中增加了检测恶意软件的功能。恶意软件用于危害工作负载、重新调整资源用途或未经授权访问数据。启用 GuardDuty 恶意软件保护之后,当 GuardDuty 检测到您在 EC2 上运行的 EC2 实例或容器工作负载之一正在执行可疑操作时,就会启动恶意软件扫描。例如,当 EC2 实例与已知恶意的命令和控制服务器进行通信时,或者正在对其他 EC2 实例执行拒绝服务 (DoS) 或蛮力破解攻击时,就会触发恶意软件扫描。

GuardDuty 支持许多文件系统类型,该工具会扫描已知用于传播或包含恶意软件的文件格式,包括 Windows 和 Linux 可执行文件、PDF 文件、存档、二进制文件、脚本、安装程序、电子邮件数据库和普通电子邮件。

识别出潜在的恶意软件后,将生成可操作的安全调查结果,其中包含威胁和文件名、文件路径、EC2 实例 ID、资源标签以及(如果是容器)容器 ID 和使用的容器映像等信息。GuardDuty 支持在 EC2 上运行的容器工作负载,包括客户管理的 Kubernetes 集群或个别 Docker 容器。如果容器由 Amazon Elastic Kubernetes Service (EKS) or Amazon Elastic Container Service (Amazon ECS) 管理,则调查结果还包括集群名称和任务pod ID,因此应用程序安全团队可以快速找到受影响的容器资源。

与所有其他 GuardDuty 调查结果一样,恶意软件检测将发送到 GuardDuty 控制台,通过 Amazon EventBridge 推送,路由到 AWS Security Hub,然后在 Amazon Detective 中提供以开展事件调查。

GuardDuty 恶意软件保护的工作原理
启用恶意软件保护后,您将设置一个 AWS Identity and Access Management (IAM) 服务相关角色,该角色授予 GuardDuty 执行恶意软件扫描的权限。对 EC2 实例启动恶意软件扫描时,GuardDuty 恶意软件保护使用这些权限拍摄小于 1 TB 的附加 Amazon Elastic Block Store (EBS) 卷快照,然后在同一 AWS 区域内的 AWS 服务账户中恢复 EBS 卷,以对它们进行恶意软件扫描。您可以使用标记,从这些权限和扫描中包括或排除 EC2 实例。这样,您无需部署安全软件或代理来监控恶意软件,扫描卷的操作也不会影响正在运行的工作负载。扫描完成后,将删除服务账户中的 EBS 卷和您账户中的快照。或者,您可以在检测到恶意软件时保留快照。

服务相关角色授予 GuardDuty 访问用于加密 EBS 卷的 AWS Key Management Service (AWS KMS) 密钥的权限。如果对附加到可能遭到入侵的 EC2 实例的 EBS 卷使用客户托管式密钥进行加密,则 GuardDuty 恶意软件保护也会使用相同的密钥来加密副本 EBS 卷。如果这些卷未加密,GuardDuty 将使用自己的密钥来加密副本 EBS 卷并确保隐私。不支持使用 EBS 托管式密钥加密的卷。

云中的安全是您与 AWS 共同承担的责任。作为防护机制,GuardDuty 恶意软件保护使用的服务相关角色如果具有 GuardDutyExcluded 标签,则无法对您的资源(例如 EBS 快照和卷、EC2 实例和 KMS 密钥)执行任何操作。在将 GuardDutyExcluded 设置为 true 的情况下标记快照后,GuardDuty 服务将无法访问这些快照。GuardDutyExcluded 标签将取代任何包含标记。权限还会限制 GuardDuty 修改快照的方式,以便在与 GuardDuty 服务账户共享时无法将其公开。

由 GuardDuty 创建的 EBS 卷始终是加密的。GuardDuty 只能在具有 GuardDuty 扫描 ID 标签的 EBS 快照上使用 KMS 密钥。在获得 EC2 检测结果后创建快照时,GuardDuty 会添加扫描 ID 标签。无法从除 Amazon EBS 服务之外的任何其他上下文调用与 GuardDuty 服务账户共享的 KMS 密钥。扫描成功完成后,将撤销 KMS 密钥授予并删除 GuardDuty 服务账户中的卷副本,从而确保 GuardDuty 服务在完成扫描操作后无法访问您的数据。

为 AWS 账户启用恶意软件保护
如果您尚未使用 GuardDuty,则在为自己的账户激活 GuardDuty 时,默认情况下会启用恶意软件保护。我已经在使用 GuardDuty,因此需要从控制台启用恶意软件保护。如果您正在使用 AWS Organizations,您的代理管理员账户可以为现有成员账户启用此功能,并配置是否应自动注册组织中的新 AWS 账户。

在 GuardDuty 控制台中,我选择导航窗格中 Settings(设置)下的 Malware Protection(恶意软件保护)。在其中,我选择 Enable(启用),然后选择 Enable Malware Protection(启用恶意软件保护)。

控制台屏幕截图。

屏幕截图在扫描后会自动删除。在 General settings(常规设置)中,我可以选择将检测到恶意软件的屏幕截图保留在我的 AWS 账户中,并将其用于进一步分析。

控制台屏幕截图。

Scan options(扫描选项)中,我可以配置包含标签的列表,以便只扫描带有这些标签的 EC2 实例;或者排除标签,以便跳过列表中包含标签的 EC2 实例。

控制台屏幕截图。

测试恶意软件保护 GuardDuty 检测结果
为了生成几个 Amazon GuardDuty 检测结果,包括新的恶意软件保护检测结果,我克隆了 Amazon GuardDuty Tester 存储库

$ git clone https://github.com/awslabs/amazon-guardduty-tester

首先,我使用 guardduty-tester.template 文件创建一个 AWS CloudFormation 堆栈。堆栈准备就绪后,我会按照说明将 SSH 客户端配置为通过堡垒主机登录到测试器实例。然后,我连接到测试器实例:

$ ssh tester

从测试器实例中,我启动 guardduty_tester.sh 脚本来生成检测结果:

$ ./guardduty_tester.sh 

*********************************************************************
* Test #1 - Internal port scanning                                    *
* This simulates internal reconaissance by an internal actor or an   *
* external actor after an initial compromise.This is considered a    *
* low priority finding for GuardDuty because its not a clear indicator*
* of malicious intent on its own.                                     *
*********************************************************************


Starting Nmap 6.40 ( http://nmap.org ) at 2022-05-19 09:36 UTC
Nmap scan report for ip-172-16-0-20.us-west-2.compute.internal (172.16.0.20)
Host is up (0.00032s latency).
Not shown: 997 filtered ports
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   closed http
5050/tcp closed mmcc
MAC Address: 06:25:CB:F4:E0:51 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 4.96 seconds

-----------------------------------------------------------------------

*********************************************************************
* Test #2 - SSH Brute Force with Compromised Keys                     *
* This simulates an SSH brute force attack on an SSH port that we    *
* can access from this instance.It uses (phony) compromised keys in  *
* many subsequent attempts to see if one works.This is a common      *
* techique where the bad actors will harvest keys from the web in     *
* places like source code repositories where people accidentally leave*
* keys and credentials (This attempt will not actually succeed in     *
* obtaining access to the target linux instance in this subnet)       *
*********************************************************************

2022-05-19 09:36:29 START
2022-05-19 09:36:29 Crowbar v0.4.3-dev
2022-05-19 09:36:29 Trying 172.16.0.20:22
2022-05-19 09:36:33 STOP
2022-05-19 09:36:33 No results found...
2022-05-19 09:36:33 START
2022-05-19 09:36:33 Crowbar v0.4.3-dev
2022-05-19 09:36:33 Trying 172.16.0.20:22
2022-05-19 09:36:37 STOP
2022-05-19 09:36:37 No results found...
2022-05-19 09:36:37 START
2022-05-19 09:36:37 Crowbar v0.4.3-dev
2022-05-19 09:36:37 Trying 172.16.0.20:22
2022-05-19 09:36:41 STOP
2022-05-19 09:36:41 No results found...
2022-05-19 09:36:41 START
2022-05-19 09:36:41 Crowbar v0.4.3-dev
2022-05-19 09:36:41 Trying 172.16.0.20:22
2022-05-19 09:36:45 STOP
2022-05-19 09:36:45 No results found...
2022-05-19 09:36:45 START
2022-05-19 09:36:45 Crowbar v0.4.3-dev
2022-05-19 09:36:45 Trying 172.16.0.20:22
2022-05-19 09:36:48 STOP
2022-05-19 09:36:48 No results found...
2022-05-19 09:36:49 START
2022-05-19 09:36:49 Crowbar v0.4.3-dev
2022-05-19 09:36:49 Trying 172.16.0.20:22
2022-05-19 09:36:52 STOP
2022-05-19 09:36:52 No results found...
2022-05-19 09:36:52 START
2022-05-19 09:36:52 Crowbar v0.4.3-dev
2022-05-19 09:36:52 Trying 172.16.0.20:22
2022-05-19 09:36:56 STOP
2022-05-19 09:36:56 No results found...
2022-05-19 09:36:56 START
2022-05-19 09:36:56 Crowbar v0.4.3-dev
2022-05-19 09:36:56 Trying 172.16.0.20:22
2022-05-19 09:37:00 STOP
2022-05-19 09:37:00 No results found...
2022-05-19 09:37:00 START
2022-05-19 09:37:00 Crowbar v0.4.3-dev
2022-05-19 09:37:00 Trying 172.16.0.20:22
2022-05-19 09:37:04 STOP
2022-05-19 09:37:04 No results found...
2022-05-19 09:37:04 START
2022-05-19 09:37:04 Crowbar v0.4.3-dev
2022-05-19 09:37:04 Trying 172.16.0.20:22
2022-05-19 09:37:08 STOP
2022-05-19 09:37:08 No results found...
2022-05-19 09:37:08 START
2022-05-19 09:37:08 Crowbar v0.4.3-dev
2022-05-19 09:37:08 Trying 172.16.0.20:22
2022-05-19 09:37:12 STOP
2022-05-19 09:37:12 No results found...
2022-05-19 09:37:12 START
2022-05-19 09:37:12 Crowbar v0.4.3-dev
2022-05-19 09:37:12 Trying 172.16.0.20:22
2022-05-19 09:37:16 STOP
2022-05-19 09:37:16 No results found...
2022-05-19 09:37:16 START
2022-05-19 09:37:16 Crowbar v0.4.3-dev
2022-05-19 09:37:16 Trying 172.16.0.20:22
2022-05-19 09:37:20 STOP
2022-05-19 09:37:20 No results found...
2022-05-19 09:37:20 START
2022-05-19 09:37:20 Crowbar v0.4.3-dev
2022-05-19 09:37:20 Trying 172.16.0.20:22
2022-05-19 09:37:23 STOP
2022-05-19 09:37:23 No results found...
2022-05-19 09:37:23 START
2022-05-19 09:37:23 Crowbar v0.4.3-dev
2022-05-19 09:37:23 Trying 172.16.0.20:22
2022-05-19 09:37:27 STOP
2022-05-19 09:37:27 No results found...
2022-05-19 09:37:27 START
2022-05-19 09:37:27 Crowbar v0.4.3-dev
2022-05-19 09:37:27 Trying 172.16.0.20:22
2022-05-19 09:37:31 STOP
2022-05-19 09:37:31 No results found...
2022-05-19 09:37:31 START
2022-05-19 09:37:31 Crowbar v0.4.3-dev
2022-05-19 09:37:31 Trying 172.16.0.20:22
2022-05-19 09:37:34 STOP
2022-05-19 09:37:34 No results found...
2022-05-19 09:37:35 START
2022-05-19 09:37:35 Crowbar v0.4.3-dev
2022-05-19 09:37:35 Trying 172.16.0.20:22
2022-05-19 09:37:38 STOP
2022-05-19 09:37:38 No results found...
2022-05-19 09:37:38 START
2022-05-19 09:37:38 Crowbar v0.4.3-dev
2022-05-19 09:37:38 Trying 172.16.0.20:22
2022-05-19 09:37:42 STOP
2022-05-19 09:37:42 No results found...
2022-05-19 09:37:42 START
2022-05-19 09:37:42 Crowbar v0.4.3-dev
2022-05-19 09:37:42 Trying 172.16.0.20:22
2022-05-19 09:37:46 STOP
2022-05-19 09:37:46 No results found...

-----------------------------------------------------------------------

*********************************************************************
* Test #3 - RDP Brute Force with Password List                        *
* This simulates an RDP brute force attack on the internal RDP port  *
* of the windows server that we installed in the environment. It uses*
* a list of common passwords that can be found on the web.This test  *
* will trigger a detection, but will fail to get into the target      *
* windows instance.                                                   *
*********************************************************************

Sending 250 password attempts at the windows server...
Hydra v9.4-dev (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-05-19 09:37:46
[WARNING] rdp servers often don't like many connections, use -t 1 or -t 4 to reduce the number of parallel connections and -W 1 or -W 3 to wait between connection to allow the server to recover
[INFO] Reduced number of tasks to 4 (rdp does not like many parallel connections)
[WARNING] the rdp module is experimental.Please test, report - and if possible, fix.
[DATA] max 4 tasks per 1 server, overall 4 tasks, 1792 login tries (l:7/p:256), ~448 tries per task
[DATA] attacking rdp://172.16.0.24:3389/
[STATUS] 1099.00 tries/min, 1099 tries in 00:01h, 693 to do in 00:01h, 4 active
1 of 1 target completed, 0 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2022-05-19 09:39:23

-----------------------------------------------------------------------

*********************************************************************
* Test #4 - CryptoCurrency Mining Activity                            *
* This simulates interaction with a cryptocurrency mining pool which *
* can be an indication of an instance compromise.In this case, we are*
* only interacting with the URL of the pool, but not downloading      *
* any files.This will trigger a threat intel based detection.        *
*********************************************************************

Calling bitcoin wallets to download mining toolkits

-----------------------------------------------------------------------

*********************************************************************
* Test #5 - DNS Exfiltration                                          *
* A common exfiltration technique is to tunnel data out over DNS      *
* to a fake domain. Its an effective technique because most hosts    *
* have outbound DNS ports open. This test wont exfiltrate any data,  *
* but it will generate enough unusual DNS activity to trigger the     *
* detection.                                                          *
*********************************************************************

Calling large numbers of large domains to simulate tunneling via DNS

*********************************************************************
* Test #6 - Fake domain to prove that GuardDuty is working            *
* This is a permanent fake domain that customers can use to prove that*
* GuardDuty is working. Calling this domain will always generate the *
* Backdoor:EC2/C&CActivity.B!DNS finding type                         *
*********************************************************************

Calling a well known fake domain that is used to generate a known finding

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> GuardDutyC2ActivityB.com any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11495
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;GuardDutyC2ActivityB.com.	IN	ANY

;; ANSWER SECTION:
GuardDutyC2ActivityB.com.6943	IN	SOA	ns1.markmonitor.com. hostmaster.markmonitor.com.2018091906 86400 3600 2592000 172800
GuardDutyC2ActivityB.com.6943	IN	NS	ns3.markmonitor.com.
GuardDutyC2ActivityB.com.6943	IN	NS	ns5.markmonitor.com.
GuardDutyC2ActivityB.com.6943	IN	NS	ns7.markmonitor.com.
GuardDutyC2ActivityB.com.6943	IN	NS	ns2.markmonitor.com.
GuardDutyC2ActivityB.com.6943	IN	NS	ns4.markmonitor.com.
GuardDutyC2ActivityB.com.6943	IN	NS	ns6.markmonitor.com.
GuardDutyC2ActivityB.com.6943	IN	NS	ns1.markmonitor.com.

;; Query time: 27 msec
;; SERVER: 172.16.0.2#53(172.16.0.2)
;; WHEN: Thu May 19 09:39:23 UTC 2022
;; MSG SIZE  rcvd: 238


*****************************************************************************************************
预期的 GuardDuty 检测结果

测试 1:内部端口扫描
预期的检测结果:EC2 实例 i-011e73af27562827b 正在对远程主机执行出站端口扫描。172.16.0.20
检测结果类型:Recon:EC2/Portscan

测试 2:使用泄露密钥的 SSH 蛮力攻击
预期有两个检测结果 - 一个用于出站检测,另一个用于入站检测
出站:i-011e73af27562827b 正在对 172.16.0.20 进行 SSH 蛮力攻击
入站:172.16.0.25 正在对 i-0bada13e0aa12d383 进行 SSH 蛮力攻击
检测结果类型:UnauthorizedAccess:EC2/SSHBruteForce

测试 3:使用密码列表的 RDP 蛮力攻击
预期有两个检测结果 - 一个用于出站检测,另一个用于入站检测
出站:i-011e73af27562827b 正在对 172.16.0.24 进行 RDP 蛮力攻击
入站:172.16.0.25 正在对 i-0191573dec3b66924 进行 RDP 蛮力攻击
检测结果类型:UnauthorizedAccess:EC2/RDPBruteForce

测试 4:加密货币活动
预期的检测结果:EC2 实例 i-011e73af27562827b 正在查询与比特币活动相关的域名
检测结果类型:CryptoCurrency:EC2/BitcoinTool.B!DNS

测试 5:DNS 渗透
预期的检测结果:EC2 实例 i-011e73af27562827b 正在尝试查询与泄露数据相似的域名
检测结果类型:Trojan:EC2/DNSDataExfiltration

测试 6:C&C 活动
预期检测结果:EC2 实例 i-011e73af27562827b 正在查询与已知命令与控制服务器关联的域名。
检测结果类型:Backdoor:EC2/C&CActivity.B!DNS

几分钟后,检测结果将显示在 GuardDuty 控制台中。在顶部,我看到了新的恶意软件保护功能发现的恶意文件。其中一个检测结果与 EC2 实例相关,另一个与 ECS 集群相关。

控制台屏幕截图。

首先,我选择与 EC2 实例相关的检测结果。在面板中,我看到有关实例和恶意文件的信息,例如文件名和路径。在 Malware scan details(恶意软件扫描详细信息)部分中,Trigger finding ID(触发检测结果 ID)指向触发恶意软件扫描的原始 GuardDuty 检测结果。就我而言,最初的检测结果是此 EC2 实例正在对另一个 EC2 实例执行 RDP 蛮力攻击。

控制台屏幕截图。

在此处,我选择 Investigate with Detective(使用 Detective 调查),然后直接从 GuardDuty 控制台转到 Detective 控制台,从中可视化 EC2 实例、AWS 账户和受检测结果影响的 IP 地址的 AWS CloudTrailAmazon Virtual Private Cloud (Amazon VPC) 流数据。使用 Detective,我可以分析、调查和确定 GuardDuty 发现的可疑活动的根本原因。

控制台屏幕截图。

选择与 ECS 群集相关的检测结果时,我将获得有关受影响资源的更多信息,例如 ECS 集群、任务、容器和容器映像的详细信息。

控制台屏幕截图。

使用 GuardDuty 测试器脚本可以更轻松地测试 GuardDuty 与您使用的其他安全框架的整体集成,以便在检测到真正的威胁时做好准备。

将 GuardDuty 恶意软件防护保护与 Amazon Inspector 进行比较
此时,您可能会问自己 GuardDuty 恶意软件保护与 Amazon Inspector 有何关系,Amazon Inspector 是一项扫描 AWS 工作负载的软件漏洞和意外网络暴露的服务。这两种服务相辅相成,提供不同的保护层:

  • Amazon Inspector 通过识别和修复已知软件和应用程序漏洞提供主动防护,这些漏洞是攻击者入侵资源和安装恶意软件的入口点。
  • GuardDuty 恶意软件保护可检测到活跃运行的工作负载中存在的恶意软件。此时,系统已经受损,但是 GuardDuty 可以限制感染的时间,并在系统受损导致影响业务的事件之前采取措施。

可用性和定价
Amazon GuardDuty 恶意软件保护现已在所有提供 GuardDuty 的 AWS 区域推出,不包括 AWS 中国(北京)、AWS 中国(宁夏)、AWS GovCloud(美国东部)和 AWS GovCloud(美国西部)区域。

在发布时,GuardDuty 恶意软件保护已与以下合作伙伴产品集成:

使用 GuardDuty,您无需部署安全软件或代理来监控恶意软件。您只需为文件系统中扫描的 GB 量(而不是 EBS 卷的大小)和 EBS 快照保存在您账户中的时间付费。除非您在发现恶意软件时启用快照保留功能,否则 GuardDuty 创建的所有 EBS 快照都会在扫描后自动删除。有关更多信息,请参阅 GuardDuty 定价EBS 定价。请注意,GuardDuty 仅扫描小于 1 TB 的 EBS 卷。为了帮助您控制成本并避免重复警报,同一卷的扫描频率不会超过每 24 小时一次。

使用 Amazon GuardDuty 检测恶意活动并保护您的应用程序免受恶意软件侵害。

Danilo