0x00 前言

对于一家大量采用AWS的甲方企业来说,如何实时的发现暴露在外网的AWS资产对其进行企业安全建设来说则至关重要。这些暴露在外面的AWS资产就是潜在的攻击面,我们可以这些资产进行更高优先级的监控,确保当出现安全问题时可以第一时间进行事件响应。而来我们也可以对这些暴露再外的资产进行高优先级的风险评估,尽量避免其出现已知的安全问题。当然,随着业务的发展,暴露在外的资产信息也是动态变化的,如何实时的收集到这些变化的动态资产信息,进行高优先级的风险评估是一个值得思考的问题。
我们没有办法保护我们看不到的资产,在这篇文章中,我主要记录一下我对Smogcloud这款开源项目的一些研究,以及如何配合Smogcloud和其他工具耦合起来实现高效且稳定的AWS公网资产监控平台。

0x01 Smogcloud 简介

如 Smogcloud 的 README 页面所述,其主要解决的问题就是发现暴露在外网的AWS资产,全量、实时、稳定的AWS资产监控平台是我们实施下一步安全手段的第一步。
Smogcloud 主要解决的问题如下:

  1. 针对多个AWS账号进行外网资产发现
  2. 针对这些资产进行检查是否存在错误配置或者相关安全问题
  3. 识别长时间未使用的资产
  4. 识别未被监控到的资产
  5. Shadow IT

0x02 当前环境

  • Amazon Linux 2
  • Golang 1.15.5

0x03 Smogcloud 的安装和配置

由于 Smogcloud 是基于 Golang 开发的,在使用 Smogcloud 之前我们要先安装Golang的开发环境。看了下代码写的还是比较简洁的,直接拿来用用,后面需要的话直接上手改代码简单扩展一些也是ok的。
一、Golang 的安装和配置步骤如下:

1
2
3
4
5
wget https://golang.org/dl/go1.15.5.linux-amd64.tar.gz
vim ~/.bash_profile
export PATH=$PATH:/usr/local/go/bin
source ~/.bash_profile
go version

安装成功之后会展示出如下信息:

1
2
[root@ip-10-188-188-188 ec2-user]# go  version
go version go1.15.5 linux/amd64

二、安装 Smogcloud

1
2
go get -u github.com/BishopFox/smogcloud
smogcloud

出现这个报错的话,说明我们已经安装成功了,接下来我们需要配置账号ID和访问凭证,来进行资产收集了。

1
2
3
4
5
[root@ip-10-188-188-188 ec2-user]# smogcloud

Cannot list functions for region us-east-1
NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors

三、配置 Smogcloud

1
2
3
export AWS_ACCOUNT_ID=''            # Describe account
export AWS_ACCESS_KEY_ID='' # Access key for aws account
export AWS_SECRET_ACCESS_KEY='' # Secret key for aws account

配置完成之后再次运行smogcloud执行,对这些暴露在外网的资产进行收集。
收集完成之后相关结果保存在results文件夹下。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@ip-10-188-188-188 results]# tree
.
|-- apigateway
| `-- 123456789012.us-west-2.json
|-- ec2
| `-- 123456789012.us-west-2.json
|-- iot
| |-- 123456789012.us-west-2.json
| `-- 123456789012.us-east-1.json
`-- s3
`-- 123456789012.global.json

4 directories, 5 files

0x04 Smogcloud 的二次开发

Smogcloud 本质上是调研AWS Golang SDK获取资产信息对于符合条件的资产进行收集。严格来讲,其仅仅是一个用于收集信息的脚本,我们可以顺着这个思路进行二次开发,将收集到的信息进行入库及分析展示。
这里举一个小例子,通过收集包含工网IP的EC2实例,结合其附加的安全组以及端口扫描情况可以梳理出来对外暴露的端口。对于不合规的端口进行告警,对于必须暴露的端口如Web应用进行其他手段的安全测试。对于其他的服务,如S3一类的,也是同样的思路。
再就是如何配合AWS Config服务,利用Config服务收集资产信息,配合rule进行合规性检查。

0x05 参考链接

[1] Smogcloud:https://github.com/BishopFox/smogcloud
[2] Golang Installation, Setup, GOPATH, and Go Workspace https://www.callicoder.com/golang-installation-setup-gopath-workspace/