如今各家云厂商都通过给用户提供API调用的方式来实现一些自动化编排方面的需求。为了解决调用API过程中的通信加密和身份认证问题,大多数云厂商会使用同一套技术方案—基于非对称密钥算法的鉴权密钥对,这里的“密钥对”即API凭证,是云上用户调用云服务API、访问云上资源的唯一身份凭证。

在信息安全领域有一个广为认可的假定,即所有系统都是可攻破的,这里的“攻破”是广义的,可以是外部攻击,也可以是恶意内部威胁(insider threat),当然也可能是无心泄漏导致的潜在威胁。API凭证(在阿里云被称为AccessKey)作为用户访问内部资源最重要的身份凭证,被外部人员恶意获取或被内部员工无心泄露的案例时有发生,其导致的数据泄露非常严重,因此如何做好API凭证管理和监测就显得非常重要。

一、API凭证的安全现状

API凭证相当于登录密码,只是使用场景不同。前者用于程序方式调用云服务API,而后者用于登录控制台。

在阿里云,用户可以使用AccessKey构造一个API请求(或者使用云服务SDK)来操作资源。AccessKey包括AccessKeyId和AccessKeySecret。其中AccessKeyId用于标识用户,AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密。在阿里云,它们看起来像这个样子:

(图1)阿里云AK样式

在大多数AK泄露的案例中,都是开发者不小心将自己的AccessKey提交到了任何人都可以访问的公共代码托管平台,导致安全防线毁于一旦。

笔者做了一个简单的测试,在开源代码托管网站Github上搜索一些特定的关键字,可以看到搜索结果近3万条,稍微进一步查找,就能发现某个用户在项目里将自己的AccessKey直接写在代码中。

(图2)泄漏的凭证

笔者曾在不同的代码托管平台搜索了不同云平台的凭证格式,都能发现存在或多或少的凭证漏,这已经是一个普遍的安全问题。

北卡罗莱纳州立大学的一篇研究报告则直接指出,“我们在涉及到的10万开源项目中发现,凭证泄漏问题不是一次性偶然问题,而是每天都在发生的,有数千新的、不重复的机密凭证公布到了网站”。

大家应该还记得,2018年波兰某招聘网站被曝泄漏近千份用户简历,内容包含邮件、照片、电话和职业生涯等隐私信息。

(图3)泄漏的简历

相比历史上大型用户密码、信用卡信息泄露之类的事件,这千份私人简历显得有点微不足道。但是因为欧盟新出台的GDPR政策,这类数据泄露可能会导致运营公司面临数千万欧元的罚款。更为严重的是,即使该公司加强在数据安全方面的建设,用户也很难会继续信任该网站,流失的用户数造成的收入减少更是雪上加霜。

事后复盘数据泄漏原因发现,正是因为该公司管理员不慎将云服务器的凭证配置不当,导致黑客未授权访问到了其中一个存储容器而造成的大范围数据泄露。

从漏洞赏金猎人网站Hackerone公开的案例中笔者也能查询到Grab、SnapChat、Starbucks、Uber、Yelp等著名网站也存在过凭证泄漏的问题。

(图4)Hackerone上面公开的案例

所幸这些问题被白帽黑客直接报告给了网站管理方,没有造成事态进一步的恶化。由此可见,当业务发展到一定程度,在使用AccessKey的过程中极有可能会遇到类似的安全问题。

二、阿里云安全中心实现AK安全自动化检测闭环

作为国内最大的云服务提供商,阿里云率先和最大的开源代码托管服务商Github合作,引入Token scan机制。

(图5)Token scan流程

​整个流程完全自动化,可以实现高效且精准的检测到在Github上泄漏的AccessKey。实际场景中,阿里云能够做到在含有AccessKey的代码提交到Github的数秒之内就通知用户并且做出响应,尽可能减少对用户产生的负面影响。

用户可以在“云安全中心—AK&账密泄露检测”模块中查看到泄漏的详情:

(图6)AK泄漏检测详情

在日常使用云产品的过程中为了防患于未然,用户也可以在“云安全中心—云安全最佳安全实践”检查当前云产品的配置项:

  • 确保云产品的操作审计日志处于开启状态,有助于分析是否有异常的调用行为。
  • 确保使用Ram用户的AK而不是主账号AK,遵守最小权限原则,一旦发生泄漏问题不至于失去整个云账号的控制权限。
  • 确保开启MFA认证。有数据统计显示,当开启多因素
    认证后能够显著降低因为密码泄漏导致的未授权访问。

(图7)云安全最佳实践

除了泄漏前的提前预防,在“云安全中心—待处理告警—云产品威胁检测”中,系统将对用户日常的业务调用基线做学习,在出现疑似黑客异常AK调用行为时进行告警,及时提醒用户做出响应,做到泄漏后及时检测。

(图8)云产品调用威胁检测

云安全中心为了应对用户不慎泄漏AccessKey造成恶劣影响,设计了全方位检测理念,从泄漏前配置检查——泄漏行为检测——黑客异常调用三点完成检测闭环,为用户的云上业务安全保驾护航。

(图9)云安全中心检测理念

三、安全建议

除了上述的措施外,笔者还建议用户在阿里云产品使用过程中遵循以下几点安全规范,从不同角度缓解凭证泄漏造成的影响:

不要将AccessKey嵌入代码中:嵌入代码中的凭证容易被人忽视,经验丰富的开发者会将其写入数据库或者独立的文件中,使得其管理起来更方便。

  • 定期轮换AccessKey:定期更新代码中存在的AccessKey能够保证一些旧的代码泄漏出去后不会影响线上业务。
  • 定期吊销不需要的AccessKey:从控制台可以看见最后一次AccessKey的访问时间,记得把不用的AccessKey都禁用。
  • 遵循最小权限原则,使用RAM账户:根据不同业务需要授予不同子账户的读写权限,给不同业务使用不同子账户的AccessKey。
  • 开启操作日志审计,并将其投递至OSS和SLS长期保存和审计:将操作日志存至OSS,遇到异常情况可以起到固证的作用,投递至SLS可以在日志量十分庞大的时候也能够高效检索。

上述措施对API凭证泄漏安全风险的防范和收敛有很大的效果,虽然具有一定的运维成本,但正是因为从一次次泄漏事故中我们看见了凭证泄漏对于一个企业的巨大伤害,相比这些巨额的经济损失,运维成本就显得微不足道。希望各位读者能够提早发现风险,提早防范风险,安全的享受API给我们带来的便利。


本文作者:云安全专家

原文链接

本文为云栖社区原创内容,未经允许不得转载。

只想着一直调用一直爽, 那API凭证泄漏风险如何破?的更多相关文章

  1. android怎样调用@hide和internal API

    android怎样调用@hide和internal API 2012-12-11 16:21 8772人阅读 评论(3) 收藏 举报  分类: Android开发(277)  Android有两种类型 ...

  2. Access Toke调用受保护的API

    ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API 在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端 ...

  3. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文

    近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...

  4. C++调用有道翻译API实现在线翻译之发声篇

    大概半月前写了一篇博文:C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译, 得到大家的热情捧场,有人看了文章说要是能发声不是更好,我觉得说的也是哈,能听到专家的标准发音,那该是多美的 ...

  5. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  6. MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务

    ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...

  7. php,javscript调用百地图度API实现标记

    最近一个项目需要用到地图的定位和标记功能,本来考虑使用google map API .但是在国内这个速度确实很慢,有时候加载到一半就出现错了,不过可以通过google agent 来解决在国内的访问速 ...

  8. 如何调用EcStore中的API接口

    EcStore系统已内置了丰富的API接口供外部系统调用(接口列表见文章最下面),外部系统具体如何调用这些API呢? 例如有一个PHP的论坛需要调用ecstore系统内一个商品的详情,则可以使用b2c ...

  9. QT调用百度语音REST API实现语音合成

    QT调用百度语音REST API实现语音合成 1.首先点击点击链接http://yuyin.baidu.com/docs/tts 点击access_token,获取access_token,里面有详细 ...

随机推荐

  1. Java常用的数据结构

    collection : List:arrayList,linkedList,vector set:treeSet ,hashSet; map: hashMap treeMap linkedHashM ...

  2. 文件上传 - Commons FileUpload介绍

    概述 FileUpload能够以多种不同的方式使用,具体取决于应用程序的要求.在最简单的情况下,调用单个方法来解析servlet请求,然后处理解析出来的Item集合.此外也可以自定义FileUploa ...

  3. Python学习之列表--自动超市购物车

    效果图: 实现代码: menu = [0,5000,500,9000,3000,30,50,7000,70,40]name = [0,"iphone","bicycle& ...

  4. ionic4环境搭建

    1.下载安装node 下载地址:https://nodejs.org/en/ 安装后,win+R输入cmd,回车运行cmd命令窗口,输入下面的命令验证node是否安装成功: 如果出现上图所示,则证明n ...

  5. curl下载安装与使用

    下载: https://curl.haxx.se/download.html 安装: 二进制安装.即解压即可. 使用 1.获取页面内容. 不加任何参数时,默认会发送GET请求来获取url内容到标准输出 ...

  6. JS中的$符号

    1. 首先可以用来表示变量, 比如变量 var s='asdsd'或var $s='asdasd'; 2. 在正则表达式中,它可以匹配结尾 /sa$/.test(string) 匹配string字符串 ...

  7. oracle 监听配置文件路径

    app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN listener.ora tnsnames.ora 配置监听直接在 tnsnames.o ...

  8. Python科学计算生态圈--Pandas

  9. Linux系统下实现远程连接MySQL数据库的方法教程

    1.在服务器端开启远程访问首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'passw ...

  10. 怎么让一个不定宽高的div垂直水平居中?

    方法一:使用CSS3 transform 父盒子设置:position:relative; div设置:position:absolute;transform:translate(-50%,-50%) ...