用于安全的azure cis扫描仪

azure_cis_scanner的Python项目详细描述



角色::raw-html-m2r(raw)
:格式:html





azure_-cis_scanner
==



cis azure benchmark 1.0的安全合规性扫描工具

互联网安全基准测试中心CTICES于2018年2月20日发布。此repo的灵感来自aws的一个类似扫描仪scout2。


此项目尚未准备好生产,只能从未暴露于不受信任网络的本地计算机上运行。

-————————————————————————————————————————————————————————————————image::images/cis_test_vm_section.png?raw=true
:target:images/cis_test_vm_section.png?raw=true
:alt:azure cis scanner homet





此扫描仪还允许跟踪一段时间内的进度
image::images/cis_test_secure_transfer_graph.png?raw=true
:目标:images/cis_test_secure_transfer_graph.png?raw=true
:alt:azure存储:未启用安全传输





raw数据的格式将与azure api以json格式返回的格式相同。
raw数据将根据名称按文件中的主要cis部分显示。

代码块:

标识和访问管理日志和监视
安全中心网络
存储虚拟机
SQL服务其他杂项项


筛选的数据将位于由查找命名的文件中,并具有以下格式

…代码块:

{
"应该打开威胁检测":{
"元数据":{"列":["区域"、"服务器"、"数据库"],
"查找":"应该打开威胁检测"}
"状态":{"已检查项":10,"标记项":4},
"items":[
('us-west-1'、'server01'、'db011')
('us-west-2'、'server02'、'db021')
('us-west-2'、'server02'、'db023')
('us-west-2'、'server02'、'db024')
]
}
"本节中的另一个发现物":……




入门
----


最佳做法是在Docker容器中工作,以避免多租户环境中可能出现的任何问题。
如果从本机命令行运行,请注意多订阅调用,如Permissions.sh只能看到正确的目标
在`~/.azure/目录``中的订阅。

容器当前是pshchelo/alpine-jupyter-sci-py3的基础,上面是Microsoft/azure cli dockerfile。
我们将用更正式的(nbgallery或jupyter)docker映像替换pshchelo基础,并在将来调整映像。

创建了一个azure帐户或已被授予具有足够权限运行扫描仪的凭据。
我们将在容器外部登录一次(将creds与~/.azure中的任何内容合并)以获取正确的订阅ID,然后在容器内部再次登录
以将自己限制在cor仅限矩形凭据。

configure
^^^^^^^^^


代码块:

$git clone git@github.com:praetorian inc/azure-cis-scanner.git&;cd azure-cis-scanner



代码块:

$git clone https://github.com/praetorian-inc/azure廑cis廑scanner.git&;cd azure廑cis廑scanner


copy azure廑cis廑scanner/.env sample to.env。这是一个特殊的文件名,控制docker compose并位于.gitignore中。

…代码块:

azure_cis_scanner$cp.env sample.env



根据需要编辑azure_cis_scanner/.env文件。
如果要进行开发,请打开docker-compose.yml并取消对标记为"开发模式"的行的注释

代码块:

azure_cis_scanner$docker compose up




代码块:

azure-cis-scanner$docker ps
azure-cis-scanner$docker exec-it<;容器id>;/bin/bash



/根目录/.azure。
这允许您停止并启动容器,而无需在令牌的生存期内重新登录。

。代码块:

bash-4.4$az account list
bash-4.4$az account set--subscription<;choice from above>;



edit report/settings.py for your active\u subscription目录。这可以是任何内容,但约定是友好名称和上面"account list"中正确"id"的前8个字符。由于它被安装到容器中,因此它将在容器内外发生变化。

sample deploy(可选)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

,示例deploy/terraform azure运行得最好。首先我们需要将terraform添加到容器中。代码块:

apk add terraform




代码块:

terraform init
terraform apply




您可能需要重新登录,因为terraform在令牌上有很短的超时时间。
请记住在完成后销毁资源

。代码块:

terraform destroy


mmand在jupyter笔记本中设置变量并运行它。或者,在第一次运行时,可以使用"docker compose up"的url
输出登录到笔记本并逐步完成调用。使用订阅ID和基本目录的适当参数编辑下面的行。代码块:

bash-4.4$cd/praetorian tools/azure-cis-u scanner/scanner
scanner$run-jnb-a'{"订阅ID":"510f92e0-xxxx-yyyy-zzzzz-095d37e6a299","基本目录":"/engagements/cis-test"}'-v azure-cis-u scanner.ipynb-t 500



在编辑器中修改上述内容,并将其全部粘贴到shell中。
当前没有进度报告,但如果打开Sublime,则可以查看在基本目录中创建的文件。
如果未按预期创建文件,请在"运行"JNB输出中搜索线索,或者更好地,转到浏览器中的jupyter笔记本,单步浏览单元格,直到出现错误。

当扫描器在新的一天运行时,将创建一个新文件夹。


浏览报告
^^^^^^^^^^^^^^^^^^^^^^^


此时,您的基本目录应该已经填充了如下所示的文件

。image::images/cis_test_azure_scanner_files.png?raw=true
:目标:images/cis_test_azure_scanner_files.png?raw=true
:alt:raw和筛选生成的文件






在容器中,我们现在运行一个flask应用程序,将生成的html页面与报告一起服务器化。

……代码块:

bash-4.4 scanner$cd../report
bash-4.4 report$python3 app.py



浏览到127.0.0.1:5000查看报告。通过ui进行订阅切换尚未工作。

当前,只有两天的数据后,才会显示图表。


请求具有正确RBAC的凭据以运行扫描仪
在zure环境中,您应该要求尽可能少的
权限。

owner生成最小权限角色定义和临时键
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^r为测试人员生成最小cred的权限。
获取用于生成自定义角色定义和临时存储访问密钥的minimal_tester_role.json和permissions.sh脚本。

。代码块:

$git clone https://github.com/praetorian inc/azure戋u cis戋u scanner.git



代码块:

$docker pull microsoft/azure cli



使用本地mount`-v.azure/:~/.azure``持久化cred是可选的。

…代码块:

$cd/path/to/working project
$cp/path/to/azure-cis-scanner/{permissions.sh,minimal-tester-role.sh}。
working project$docker run-it-v.azure/:~/.azure-v.:/workdir
bash-4.3



bash-4.3提示下,我们现在位于容器中。登录时间。

…代码块:





通过Web用户界面登录完成登录。


通用电气键代码块:

bash-4.3/workdir/permissions.sh



脚本创建AzureSecurityScanner角色定义。所有者现在将该角色与
用户关联,并可以复制生成的(资源组、帐户、SAS密钥)元组,并将其安全地发送到pen tester。

d密钥元组-例如(资源组、服务器、数据库)-
,仅在yaml中受支持。尝试使用safe_yaml,但元组导致错误。其目的是让"raw"数据尽可能少地从cloud api中提取,尽可能接近交付的格式存储。:raw-html-m2r:`<;br>;`
我们将来可能从元组切换到嵌套dict。

roadmap
----



*进一步开发用于部署不安全测试环境的自动化的NT。
*添加到"修正"文件夹中的修正脚本以自动解决许多简单的"打开"问题。
*使用Python sdk而不是bash。
*用Praetorian Flask包装Flask项目以确保安全。仅在本地网络上运行,直到完成此操作。
*通过生成具有正确订阅/资源组路径的minimal_tester_role.json来删除手动步骤。
*容器当前是pshchelo/aline-jupyter-sci-py3的基础,顶部是Microsoft/azure cli dockerfile。
*用更正式的(nbgallery或jupyter)Docker图像替换pshchelo基础,并在将来调整图像。
*添加Git挂钩以自动删除azure_cis_scanner.ipynb的单元格输出,以避免签入敏感信息

是确保云环境安全的第一个好工具,以确保采用了最佳做法和安全配置设置。
但是,除了一些基本的现在设置不正确。azure在不断发展,secops团队的一部分挑战是在每月发布新工具的环境中跟上最佳实践。

EventGrid和许多其他高级功能。

需要手动渗透测试?Praetorian在云、物联网、Netsec等领域拥有专业知识。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java安卓,如何从一个私有的内部类更新视图元素,这个类是一个异步任务   如果代码中没有数字,则返回true的java方法   java是否将liferay service builder数据放入api?   java如何在javafx中显示单元格中的字符串数组   javascript如何从另一个GUI类获取变量?   创建多个对象后的java REST API POST响应?   java中静态块中声明的变量的范围是什么?   jsp Java,Spring MVC,从服务器中提取任何类型的文件(.png,.jpg,.pdf,.doc等)并提供给用户下载的最简单方法?   java应用程序运行在其他应用程序之上   java正则表达式匹配字符串是否应包含“;”特定字符串前后   C++的java原生源代码。awt。机器人   用于访问/共享单个目录的java多个Xodus应用程序   java将方法传递给另一个活动   java如何获取Struts 2中XWWWForMurlen编码的contenttype的参数