Aqua容器安全解决方案POC测试步骤.docx
- 文档编号:11287743
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:31
- 大小:1.26MB
Aqua容器安全解决方案POC测试步骤.docx
《Aqua容器安全解决方案POC测试步骤.docx》由会员分享,可在线阅读,更多相关《Aqua容器安全解决方案POC测试步骤.docx(31页珍藏版)》请在冰豆网上搜索。
Aqua容器安全解决方案POC测试步骤
Aqua容器安全解决方案
POC测试步骤
2017-10-27
Version[1.0]
说明
包含于此篇文档中的信息属于商业或财务机密(或授权)信息。
文档为安领有限公司所专有,且只用于评估目的,除非被安领有限公司授权,否则此文档的全部或者部分信息不得用于再版或者引用。
版本历史
日期
版本
描述
2017-10-27
1.0
内容
1.准备工作
在DockerHost主机上安装完AquaServer环境后,可执行以下步骤将测试用镜像及配置文件导入到环境中。
1.将optfolder下的文件夹上传到DockerHost的/opt路径下
2.通过df-h命令确保测试主机/var路径挂载磁盘剩余空间大于10G,否则导入镜像会导致磁盘满
3.将测试镜像上传到DockerHost主机内,并通过dockerload<’tar包路径’来导入测试镜像
4.登录AquaWeb端>>Images>>Addimages>>localengine,手动逐一添加步骤2里导入的镜像文件。
除了imagescan/labeltest外都导入,此镜像将用于未扫描镜像测试。
注:
如果不想逐一添加也可配置自动拉取本地镜像,System>>Integrations>>LocalEngine>>勾选AutomaticallyPullNewImages。
这样AquaAgent就会在配置的指定拉取时间拉取本地镜像进行扫描。
5.登录AquaWeb端>>System>>Settings,点击Import按钮导入aqua_文件
6.通过groupadddocker添加docker用户组
2.镜像扫描
2.1白名单镜像
1.通过ImageAssurance内配置,首先设置DisallowImagesbyCVESeverity,则执行
dockerrun-v/:
/hostOS-i-tchrisfosterelli/rootplease失败
2.通过ImageAssurance内配置,设置chrisfosterelli/rootplease镜像为WhitelistImage,则执行
dockerrun-v/:
/hostOS-i-tchrisfosterelli/rootplease成功
2.2禁止未扫描镜像运行
1.通过ImageAssurance内配置,设置BlockUnregisteredImages,同时对应label(key=vaule)的镜像可以做例外,如下图
2.执行dockerrun-dimagescan/labeltest未扫描镜像可以正常运行,因为此镜像已打了license=GPLv2的label,如果将此例外去了即被禁止运行
2.3镜像安装包的黑白名单
1.通过ImageAssurance内,设置PackageBlacklist,禁止包含黑名单Package的镜像运行,可填写python包,所有版本,则执行dockerrun-dcentos被禁止
2.通过ImageAssurance内,设置PackageWhitelist,可以设置镜像必须包含的安装程序包,如未包含白名单内安装包,镜像将被禁止执行,可填写python包,所有版本,则执行dockerrun-dalpine被禁止
2.4自定义规则扫描镜像
1.通过ImageAssurance内,设置CustomChecks可以使用自定义规则脚本进行扫描,脚本返回0则禁用镜像。
使用默认SSH包检查脚本即可,任何安装了SSH包的镜像都将被禁用
2.在Images页面将imagescan/centoswithssh镜像Rescan重新扫描
3.执行dockerrun-it--rmimagescan/centoswithssh/bin/bash被禁止,因为此镜像安装了SSH包被Disallow
2.5包含敏感信息的镜像
1.在System>>Settings内,勾选ScanOptions下的Scansensitivedatainimages并Save
2.通过ImageAssurance内,设置DisallowImageswithSensitiveData,可以设置包含敏感信息(比如PrivateRSAkey)的镜像被禁止运行
3.执行dockerrun-dimagescan/sensitivedata失败,因为其/opt路径下有id_rsa的PrivateRSAkey
2.6结合Jenkins进行镜像扫描
1.在Dockerhost主机上执行:
chmod-R777/opt/jenkins
dockerrun-d\
-uroot\
-v /opt/jenkins:
/var/jenkins_home\
-v/var/run/:
/var/run/\
-v$(whichdocker):
/usr/bin/docker:
ro\
-v/usr/lib64/.0:
/usr/lib/x86_64-linux-gnu/.0\
-v/usr/lib64/.0:
/usr/lib/x86_64-linux-gnu/.0\
-v/usr/lib64/.1.02:
/usr/lib/x86_64-linux-gnu/.1.02\
-v/usr/lib64/.11:
/usr/lib/x86_64-linux-gnu/.11\
-v/usr/lib64/.1:
/usr/lib/x86_64-linux-gnu/.1\
-v /usr/lib64/.7:
/usr/lib/x86_64-linux-gnu/.7\
-p9090:
8080\
--namejenkins\
--restart=always\
jenkins
2.生成的jenkins可通过http:
//
9090进入,用户名为admin,密码为password。
3.进入ManageJenkins>>ConfigureSystem将以下各项按实际情况填写,其中的IP地址都是dockerhost测试主机的。
4.点击test项目>>manage,设置项目要扫描的镜像名及其所属Registry名,此处Registry名为在AquaServer>>System>>Integrations>>Registry里进行绑定的名字。
5.最后运行test项目的build即可,里面已添加了Aqua镜像扫描的步骤,从Consoleoutput查看扫描执行结果
3.威胁阻止
3.1Processlimits
1.通过ThreatMitigation内,勾选ForkGuadr下的EnableForkBombProtection,设置Processlimit为10后保存
2.执行dockerrun-dthreattest/process,里面已开启了超过10个进程,多余进程会被禁止生成
3.2只允许Link内容器互相通信
1.执行以下命令生成两个容器:
dockerrun-it-v/opt/aquatest:
/usr/share/nginx/html:
ro-p80:
80-d--namenginxweb\networktest/nginxweb
dockerrun-it-d--nametestcentos
生成后进入test容器可以curl到nginx发布的网页
dockerexec-ittest/bin/bash
curlhttp:
//
2.在ThreatMitigation>>BlockNetworkingBetweenunlinkedContainers下勾选BlockNetwork保存后,再次进入test容器无法curl到网页
3.重新生成新的带link的centos访问容器即可curl到网页
dockerrun-it-d--linknginxweb:
testlinkcentos
4.敏感信息管理
4.1自纳管Secret
1.通过之前的配置导入,前台网页Secret内应已有一个ord
2.运行dockerrun-it-d--namesecretsecrettest/static_password
此容器已将ord作为Password环境变量打入。
用户执行dockerinspectsecret|greppassword只会看到Password={ord},看不到真实值
3.用户执行dockerexec-itsecret/bin/bash进入容器执行env命令后,可看到真实值。
同时用户如在前台网页端对ord的值进行更改后,容器内对应值也会动态刷新到,不需要重启容器
4.2CyberArk纳管Secret
1.Aqua可以CyberArk的CCP进行绑定配置,通过其获取CyberArk平台内保存的密码。
通过System>>Integrations>>SecretKeyStores,点击AddSecretKeyStore进行绑定,其中的TestConnection按钮没有任何实际作用。
●ConnecitionURL:
CCP的访问地址,只需要填写IP地址,不需要后缀
●AppID:
CCP使用的AppID
●Safe:
获取密码账号所在Safe
●PullInterval:
定期刷新时间(测试下来没有实际功能,即无法将新值自动刷新到容器内)
2.在绑定的CyberarkVault内,创建WindowsSafe,配置CCP相关APPID和Provider用户对此Safe有获取密码权限,同时创建一个测试账号,账号名为CyberArkVaultTest
3.在Aqua网页端>>Secrets>>AddNewSecret,在Store处选择步骤一新建的CyberArkStore名,在Name处填写Vault内账号名,即CyberArkVaultTest
4.点击Save的同时,Aqua会尝试获取密码,如有报错会直接在页面内显示出来
5.运行dockerrun-it-d--namesecretsecrettest/static_password
此容器已将ArkVaultTest作为CyberArkPassword环境变量打入。
用户执行dockerinspectsecret|grepCyber只会看到CyberArkPassword={ArkVaultTest},看不到真实值
6.用户执行dockerexec-itsecret/bin/bash进入容器执行env命令后,可看到真实值。
5.容器运行限制
5.1以指定用户运行容器
当运行容器时没以-u参数指定运行用户环境时,Docker默认将以root用户运行容器,最高用户权限所带来的风险可想而知。
用户可通过AquaSecurity中的Runtimeprofile来限制容器运行时只能以当前Host用户的UID和GID来运行
1.不加-u参数运行容器后,得到的UID和GID为Host当前用户docker
2.同时我们可以限制容器不以root用户运行。
3.当以root用户运行容器时,得到PermissionDenied的报错,同时AquaSecurity内也有对应Block日志。
运行命令为dockerrun-itruntime/runuser/bin/sh
5.2限制容器运行时的只读文件
1.用户通常希望在Container运行时不要对容器的一些关键系统或程序文件进行修改,比如/etc、/bin目录等。
AquaSecurity可以通过RuntimeProfile来做到这点
2.设置对/etc目录的只读后,以root用户运行容器仍旧无法对/etc目录下的任何文件进行修改。
运行命令为dockerrun-itruntime/file/bin/sh,之后vi/etc/hostname修改文件会有如下报错
5.3限制容器运行时的可执行命令
1.限制用户在容器运行时的可执行命令是十分重要的,其能有效避免一些误操作所带来的严重后果。
AquaSecurity可通过Runtimeprofile里的AllowedExecutables来设置容器运行时的可执行命令白名单,如下图我们只允许执行/bin/bash命令。
2.当用户试图执行ls命令时,得到Permissiondenied的报错,同时AquaSecurity处也有对应Block日志。
3.当用户在AllowedExecutables处加上ls命令后,此命令即可正常在容器内执行。
即使sh脚本中有相关命令也同样被禁止
5.4限制Container运行时的进出网络
1.对于Container运行时的对外通信,用户可以限制其进出网络,从而隔绝容器不必要的网络通信。
用户可以在AquaSecurity内Runtimeprofile的Network选项禁止对应镜像生成的Container的对外通信。
2.这样当Container内部尝试与外部网络通信时,就会失败。
同时AquaSecurity也会记录对应的Block事件。
测试命令为dockerrun-itruntime/network/bin/sh
5.5黄金镜像---保证Container不对容器内任何文件进行修改
1.针对一些黄金镜像,用户不希望容器对其进行任何修改。
则我们可以在AquaSecurity的runtimeprofile中的ContainerEngineControls中勾选Read-onlyrootfilesystem。
2.用户尝试修改、新增、删除容器内的文件报错,无法进行增删改。
测试语句dockerrun-itruntime/goldenimage/bin/sh
5.6限制Container不以特权模式运行
1.容器运行时如果加上‘-privileged’参数,即会以特权模式运行,可访问Host上的所有设备,此容器几乎与主机上其他运行的进程一样可访问主机资源,这将带来十分高的安全风险。
所以我们可以通过AquaRuntimeProfile里的配置禁用特权模式运行容器。
2.设置后,当用户再次想以特权模式运行容器时得到‘Blockedbyruntimeprofile’的报错,同时AquaAudit日志里也有相关Block信息,测试命令为dockerrun-it--privilegedruntime/nonprivileged/bin/sh。
5.7限制Container挂载的数据卷
1.挂载数据卷是Container容器间分享永久数据的一种方式,这些永久数据通常都会影响应用运行时的配置,一些误操作的写入可能会导致Container内的应用无法正常运行,所以针对挂载数据卷的限制也是十分必要的。
我们可以通过AquaRuntimeProfile里的Allowedvolumes配置来指定Container运行时允许挂载的数据卷及其写入读取权限。
2.当用户想要挂载其他数据卷时,得到‘Blockedbyruntimeprofile’的报错。
同样当用户想要以ReadWrite权限挂载时也会报错,运行语句为dockerrun--rm-it-v/data:
/dataruntime/volumes/bin/sh。
必须指定ro权限才能正确挂载,,运行语句为dockerrun–rm-it-v/data:
/data:
roruntime/volumes/bin/sh。
5.8自主学习并生成安全规则
1.有时我们自定义的规则无法满足一些复杂的Container运行情景,此时我们可以让Aqua进行自主学习,其会根据指定image生成的Container运行情况,自动生成对应的Container运行规则。
如下图,我们在AquaSystem及image级别开启了自动Profile生成。
2.待配置的10分钟学习时间过后,Aqua即会根据之前Container运行的情况,自动生成对应的运行规则,用户可在此基础上再进行自定义调整。
5.9限制容器运行时使用的资源及进程数
1.通过Aqua的runtimeprofile可以对容器使用的CPU、内存及进程数进行限制,比如下图限制容器只能运行10个以内的进程。
2.运行dockerrun-dthreattest/process就会报错,此容器启动会自动开启超过10个ping命令进程,进入容器内部执行其他进程也都会被拒绝。
在audit内有Block的日志.
5.10环境变量加密
1.通过Aqua的RuntimeProfile的EnvironmentVariables内可以启用环境变量加密
2.执行dockerrun-d-it-epassword=test123--nameencrypttestruntime/encryptenv/bin/sh
3.执行dockerinspectencrypttest|greppassword得到加密密文
4.执行dockerexec-itencrypttest/bin/bash进入容器后执行env命令才能看到变量的真实值
6.网络控制
6.1容器与Host之间网络限制
1.运行dockerrun-it-v/opt/aquatest:
/usr/share/nginx/html:
ro-p80:
80--namenginxweb-dnetworktest/nginxweb生成测试容器,可直接通过http:
//
2.登录Aqua>>ContainerFirewall,点击已有NginxWebHost策略,对80端口做策略限制中的IP换成你的测试用主机IP后保存
3.点击Services>>AddNewService新建服务,取名为NginxWeb。
将步骤1正在运行的容器添加进去,同时防火墙策略选择步骤2中NginxWebHost即可。
这样在指定测试主机访问http:
//
6.2容器与容器间的网络限制
1.保留章节6.1中的Service及容器,运行另一个centos容器dockerrun-it-d--namecentoswebcentos/bin/bash,进入到容器内部可访问之前nginxweb容器的页面
dockerexec-itcentosweb/bin/bash
curlhttp:
//
2.登录Aqua>>ContainerFirewall,点击已有NginxWebContainer策略,其已对NginxWeb服务做了80端口的访问限制,无需做任何修改。
3.点击Services>>AddNewService新建服务,取名为CentosWeb。
将步骤1正在运行的centosweb容器添加进去,同时防火墙策略选择步骤2中NginxWebContainer即可。
这样再次进入到centosweb容器内部访问http:
//
7.主机权限管控
7.1角色权限管控
1.Aqua页面>>UserAccessControl下已有CustomImageOperator策略,其定义imageoperator用户对所有container、image拥有DockerUser权限(只能run或审计,不能commit)
2.通过以下命令在DockerHost主机上新建用户并加入到Docker用户组
useraddimageoperator
passwdimageoperator
usermod-Gdockerimageoperator
3.Su到Imageoperator用户,运行dockerimage、dockerrun--rmcentos都成功,但如果执行dockercommitcentosuactest/centos则报权限不足而失败
7.2自定义Role角色
1.Aqua页面>>UserAccessControl>>Manageaccessroles>>Addnewroles,名字填写CustomAuditor,下方命令列表将所有Auditor相关命令都加入进去,同时加上exec命令
2.Aqua页面>>UserAccessControl下已有CustomAuditor策略,其定义customauditor用户对所有container、image拥有CustomAuditor权限(审计加上exec进入容器内部权限)
3.通过以下命令在DockerHost主机上新建用户并加入到Docker用户组
useraddcustomauditor
passwdcustomauditor
usermod-Gdockercustomauditor
4.su到customauditor用户,运行dockerimage、dockerps、dockerexec-it
7.3通过image的label来分发权限
1.Aqua页面>>Images下,确保uactest/label镜像已被打上uaclabel的标签
2.Aqua页面>>UserAccessControl下已有Customlabeladmin策略,其定义labeladmin用户对标签为uaclabel的镜像及其容器有所有执行权限。
3.通过以下命令在DockerHost主机上新建用户并加入到Docker用户组
useraddlabeladmin
passwdlabeladmin
usermod-Gdockerlabeladmin
4.Su到labeladmin用户,运行dockerrun-ituactest/label/bin/bash成功,但如果执行dockerrun-itcentos/bin/bash则报权限不足而失败
8.其他
8.1Rootplease容器修改主机配置文件
1.在DockerHost主机上使用useraddroot1和passwdroot1新增root1用户并设置密码,其为普通用户,无法执行passwdroot命令
2.执行dockerrun-v/:
/hostOS-i-t--namerootpleasechrisfosterelli/rootplease开启容器
3.执行dockerexec-itrootplease/bin/sh进
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Aqua 容器 安全 解决方案 POC 测试 步骤
![提示](https://static.bdocx.com/images/bang_tan.gif)