聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

本文作者介绍如何从AWS环境下的应用程序中找到易于发现的漏洞。如下是全文。

毋庸置疑,云环境已主导当前市场。服务提供商中,AWS 的地位正在上升。我将简要说明如何找到 AWS 环境下应用程序中的“低垂果实”,对安全策略设置和错误配置可能引发的风险稍作解释。此外,我还将列出一些有助于恢复 accesskey 和 secretkey 的某些常见漏洞以及一些利用后程序。不过,由于我并非云专家,这里的内容只是基于我的几次亲身实践。

配置不当的更多风险

在AWS环境配置某用户的访问策略过程中,会进行很多操作,例如,EC2 资源很可能会提供450多种操作。这就要求我们在配置过程中尤其小心,因为任何应用不当的规则都可导致访问控制缺陷。例如,如下所示MFA的配置:

从中可发现,每个MFA操作都具有唯一的规则,如禁用设备、启用设备、获取用户数据、为用户列出设备等。然而,对规则的任何不慎删除或增加都可导致严重问题。在上述案例中,如果我们将 Resource 字段的值更改为 *,则可使所有用户控制其它用户的设备和令牌。

这种选项的多样性是很好的解决方案,因为它允许精细配置。然而,在未规划的情况下采取某些措施可带来严重风险。

因此,需要记住的一个要点是,在黑盒分析过程中,我们应当了解可分配给和资源相关的所有规则,并测试自己是否具有该权限。

尽管我们可能会发现,被暴露的 AWS 密钥对(后续将讨论相关方法)对于利用某个特定 EC2 实例几乎毫无用处,但访问策略的颗粒度告诉我们仍然发生很多配置不当的情况,如 S3 桶访问或者甚至是完全控制IAM。

查找机密

众所周知,每个漏洞都很重要而且都应该得到缓解,然而,在AWS 上通过EC2 起作用的应用程序中,某些漏洞可导致 Secretkey 和 Accesskey 被暴露,而组合所分配的策略,可导致严重的安全后果。在这里不再赘述这些特定的漏洞,不过可将这些信息概括如下:

1、 在 JS 或 Mobile App 中硬编码。开发人员常常会在应用程序的客户端对accesskey和secretkey进行硬编码,或以明文形式或以编码形式进行。这就是为何说仔细分析客户端代码或目标的移动应用非常重要。在名称中搜索带有 “accesskey” 或 “secretkey” 或者 “access” 和后缀 “aws” 的变量。搜索前缀为”AKIA”(IAM 中Access 密钥的前缀)的字符串也很重要。

2、 SSRF。这种漏洞可使攻击者通过服务器提出请求,如果易受攻击的应用程序是一个 EC2 实例,那么就会有元数据API;在元数据中,如果存在与该实例相关联的 IAM 角色,则路径 security-credentials/role-name 中包含可使用的安全凭据。例如,在如下路径中:

http://169.254.169.254/latest/meta-data/iam/security-credentials/{role-name}

尽管,API新版本要求认证令牌,但IMDSv1 仍在使用。

3、路径遍历。由于该漏洞可允许读取任意文件,因此可利用它读取如下内容:

  • 环境变量。accesskey和secretkey被用作内存中变量的情况非常常见。如果在 Linux 环境中搜索,就能够读取路径 /proc/self/environ 路径上的文件;

  • 配置文件。在很多应用程序中,该配置文件中包含很多服务的凭据和变量,包括AWS 资源在内(例如,../../.env 或 ../../config/config.inc.php);

  • 配置 AWS-CLI:通常在使用AWS 资源的应用程序中,开发人员会安装 aws-cli 对功能和权限进行测试。因此尝试阅读 /home 路径中的路径 .aws/credentials 起着重要作用。因为我们不知道用户名,因此AWS 环境中常会测试服务器中是否存在 ec2-user 和 Ubuntu 用户。

  • 老旧文件。开发人员通常会在生产环境中创建开发环境的配置文件副本,末尾是旧名称或保存 backup.zip。需要注意的一个要点是,如果不存在路径遍历漏洞,则记得在外部尝试这些路径。

4、 调试报文。在操纵AWS 环境的操作中,尝试引发错误,根据报文的情况,可能会披露密钥。例如,将文件上传至S3存储桶。

猎取低垂的果实

如之前所述,某些漏洞可被用于获取secretkey和accesskey,那问题来了:之后该怎么办?

我已经在利用后进程中列出了一些需要观察的非常有意思的内容。记住,很多规则可适用于一种资源,因此建议检查所有的可能性,不过我列出了开始探索时可找到的一些低垂果实。

1、列出可用的S3存储桶:

我认为,这是利用后进程中最重要的任务,因为存储在S3桶中的权限和数据可能确保攻陷成功。如果够幸运,你甚至可以找到数据库备份。

另外,这一操作有助于开展余下步骤,例如,可以找到 SSH Keys 的备份,之后发现它有权更新安全组的规则,获得访问SSH权限。

因此,我认为这一步很重要,因为它有助于用户实现评估目标或有助于开展其它操作。如下代码展示的是查看S3存储桶的命令:

aws s3 ls BucketName/

2、 SSM

AWS 指出,SSM 是一种能力集合,有助于自动化管理任务如收集系统清单、应用操作系统补丁、自动化创建 AMIs,并大规模配置操作系统和应用程序。

该特性的最佳之处在于,它可通过以权限用户(系统或根)运行命令文档 AWS-RunPowerShellScript 和 AWS-RunShellScript 的实例中远程执行代码。

当资源活跃时就有意思了,因为用户可通过简单方法获取反向 shell。如下案例是可被执行的命令:

aws ssm send-command \

— instance-ids “instance-ID” \

— document-name “AWS-RunShellScript” \

— comment “IP config” \

— parameters commands=ifconfig \

— output text

3、 UserData 属性

UserData 属性可能会加载初始化脚本,之后当实例开始时,脚本将运行。这是在实例中你执行命令的另一种简单方法,并很可能获得特权反向 shell。如果用户有权修改该实例属性,则可插入自身的脚本,它将和实例一起启动:

aws ec2 modify-instance-attribute \

— instance-id=”instance-ID” \

— attribute userData \

— value file://UserData.base64.txt

4、 更新SecurityGroup:

我们可将AWS中的 Security Groups 规则看作是Firewall 的规则。这些规则允许或拒绝向 EC2 实例导入流量或从中导出流量。通常而言,开发人员会拦截不重要的进展流量,如流量SSH或RDP,它和SMB是一样的情况。

比如,你发现了一个密码或找到了SSH密钥的备份,但流量遭拦截。那么更新安全组的权限有助于接触这种流量拦截。同时也可以更新安全组,启用某些端口的进展流量实施密码攻击(暴力攻击、喷射攻击、填充攻击)。

aws ec2 authorize-security-group-ingress \

— group-id SecurityGroup-ID \

— protocol tcp \

— port 22

5、跳出盒子

如本文所述,可应用多种操作。保持开放心态,发现用户规则中应用的任何缺陷很重要。

我们假设你已经恢复了凭据、测试了最重要资源(EC2、S3、RDS) 的所有危险操作但并未成功。机组,需要探索更多的资源,如以员工身份发送邮件,从而获得钓鱼攻击的窗口。

借助枚举工具:ScoutSuite

在此之前,我写的是某些利用后技术,但实际上AWS 也有很多资源,而且每种资源都有很多操作。有时候我们必须借助工具自动化枚举。

因此,我们对NCC SecurityGroup 开发的我最喜欢的工具 ScoutSuite 稍作说明。

ScoutSuite 能让我们更轻松地执行自动化任务,它有助于我们:

  • 查看可用RDS;

  • 查看公开分享的截屏数据库;

  • 检测很酷的资源和不同寻常的SES,例如我们可使用ScoutSuite 检查是否启用了SES,因而你可以发送伪造的邮件;

  • 检查安全组及其规则;

  • 发现在单一仪表盘中(在所有区域中)运行的所有 EC2 实例;

  • 探索S3存储桶,并检测是否存在弱点;

  • 检查IAM中的权限

  • 以及其它很多特性

当红队陷入艰难之地,而且也无法找到低垂果实时,我会使用 ScoutSuite 进行枚举,而且总会实现目标。


推荐阅读

少有人挖但仍可获得奖金的10类Web 漏洞(下)

开源云原生平台 Apache Kafka暴露多家大企业的敏感数据

因服务器配置不当,热门直播平台 Twitch 的125GB 数据和源代码被泄露

微软在 Linux 虚拟机偷偷安装Azure App,后修复严重漏洞但Linux虚拟机难以修复

【BlackHat】黑帽大会上值得关注的安全工具

原文链接

https://medium.com/stolabs/hunting-for-low-hanging-fruit-in-applications-at-aws-environments-658737dc7983

题图:Pixabay License

本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

如何找到 AWS 环境下应用程序中易于得手的漏洞?相关推荐

  1. 多线程环境下,程序真是危机四伏

    姿势在不断的更新迭代, 太卷了. 你管这也叫线程安全? 最近大意了,竟然想将<面试官:实现一个带值变更通知能力的Dictionary>一文中的临界锁只应用到写操作. 内心旁白:读操作又不会 ...

  2. 如何在Linux桌面环境下自动启动程序?

    2019独角兽企业重金招聘Python工程师标准>>> 如何在Linux桌面环境下自动启动程序? 2014-01-06 11:24 布加迪编译 51CTO.com 字号:T | T ...

  3. 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

    http://blog.csdn.net/whuancai/article/details/11994341 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通 ...

  4. 快捷键关闭c语言程序,C语言:VS环境下的程序快捷键大全以及Windows快捷键命令...

    //如果要找程序调试的快捷键,请看博客"C语言:VS环境下的程序调试快捷键" Alt+空格+R:恢复最小化窗口           Alt+空格+N:最小化当前窗口 Alt+空格+ ...

  5. Linux下在程序中如何进行繁体中文和简体中文的转换

    此文章转自他人,只是为了方便自己整理资料以及大家共同进步而发布. 转载自: http://hi.baidu.com/runningon/item/7acd387eddb5aa346cc37ce4 Li ...

  6. 公有云环境下应用程序的自动化部署与水平扩展问题

    先介绍了一下公有云计算环境下的一些特点,再根据这些特点探讨一下作为云计算用户而言,如何对应用程序做好自动化部署和水平扩展(弹性计算)的问题.阅读本文需要有一定的云计算知识.开发运维知识. 公有云环境的 ...

  7. Windows环境下Code::Blocks中成功配置MySQL Connector/C连接MySQL数据库

    下面我将介绍当需要用C语言开发能访问MySQL数据库的程序时成功配置的关键事项. 操作系统:Windows 7 x64 编程环境:Code::Blocks 10.05(32bit) 配置方式说明:用C ...

  8. linux输出文件没有找到,Linux环境下标准输入、输出、错误信息详解

    Linux环境下标准输入.输出.错误信息详解 下面我们介绍在Linux环境下标准输入.输出.错误设备.标准输入设备代号为0, 用来显示输入信息,标准输出设备代号为1,用来显示正常信息,标准错误设备代号 ...

  9. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一 ...

最新文章

  1. pandas 删除列名字符串中的空格
  2. can差分线阻抗_CAN总线冷知识—边沿台阶是怎么来的?
  3. C++之指向对象成员函数的指针
  4. 论文浅尝 | KGQR: 用于交互式推荐的知识图谱增强Q-learning框架
  5. 硕、博、 博后招生 | 加拿大卡尔加里大学智能空间信息实验室
  6. GAN也有脾气:「太难的部分我就不生成了,在下告退」
  7. ARMv7的OP-TEE源代码的获取和编译
  8. Unity Shader·科技感描边效果(利用Robert算子边缘检测)
  9. 解决Tomcat中文乱码问题——windows平台
  10. abp The value could not be converted to a GUID:
  11. BN层的running_mean更新机制
  12. 利用梆梆加固逻辑漏洞取巧脱壳
  13. BI项目实施为什么成功率那么低
  14. Linux系统重设开机秘码-------忘记linux开机密码
  15. Socket和ServerSocket的介绍
  16. 2020年前端安全综述-填坑记
  17. Ubuntu 10.10与局域网中的Windows文件共享详细操作步骤
  18. android 抽屉,凌乱了 Android的抽屉到底要不要?
  19. Go语言WEB框架:请求参数处理
  20. 南京工业大学本科毕业论文答辩和论文选题PPT模板

热门文章

  1. Hadoop2 实战系列之1 -- Hortonworks Sandbox的安装和使用
  2. MongoDB安装、管理工具、操作
  3. OpenJDK源码研究笔记(六)--观察者模式工具类(Observer和Observable)和应用示例
  4. 关于公开产品想法这件事的开篇
  5. 今天终于完成对postfix配置的修改
  6. git commit 规范校验配置和版本发布配置
  7. 2009年云计算将引发一场黑客攻击高潮
  8. 任务二十九:表单(一)单个表单项的检验
  9. Oracle的回收站和闪回查询机制(二)
  10. 再谈子网划分方法与子网划分示例