本报告展示了一种新型的攻击,我们称之为“Man in the cloud(MITC)”。MITC攻击将常见的文件同步服务(如GoogleDrive、Dropbox)作为它的C&C、数据泄露和远程访问基础设施。不用使用任何的exp,只需简单的重构下这些服务就可将它们转化成一个灾难性的攻击工具,并且还不容易被常见的安全检测方法检测到。
感染阶段中,MITC不需要使用任何的恶意代码或者exp,所以很难检测到,也很容易被感染。另外借助于同步协议,要想从正常的流量中区分出恶意流量几乎是不可能的事情。即使有人察觉到,也很难找出感染的证据来,因为终端处几乎没有留下一点痕迹。在MITC攻击中,攻击者无需入侵受害者的用户名和密码就可访问受害者账户。
近几年中,入侵事件和数据泄露事件频发。摩根大通银行泄露7600W数据,近1/4的美国家庭受到影响;索尼影视事件中,员工数据和商业电影信息泄露,损失数亿;间谍软件公司hacking team被黑客攻击,400GB数据泄露。被窃取的信用卡信息、个人敏感数据等已被黑客放在地下市场上进行交易。
随着移动设备、平板电脑、VPNs、远程桌面、SaaS应用程序的使用,越来越多的用户选择将数据存储在云端,也就是说将数据存储在一个没有边界的区域内。然而对于这样一个没有边界的区域,怎样保护数据安全呢?
文件同步服务是指用户只要登录同一个账号,就可以在不同的设备之间共享信息,如果在一个设备上修改信息,其他设备上同样能看到修改后的信息。目前比较流行的同步服务有GoogleDrive、Dropbox、OneDrive、Box。
企业一直在强调终端安全,并会找出一些解决方法。老的方法是基于一些模式核对文件中是否含有恶意代码,新方法是在一个受控的环境中打开文件,然后检测文件中是否含有恶意代码,或者监视终端是否有一些恶意的行为。还有一些解决方案是试图通过白名单或者异常检测识别出C&C通信。然而对于上述的解决方法,攻击者似乎已经找出了应对方案。
我们迅速将目标放到了文件同步服务上,因为文件同步服务已被越来越多的企业使用,而且它含有一个开放的网络通信通道。另外,当用户从本地设备传输文件到网上时,黑客可以从中窃取文件;当用户从网上将文件下载到本地时,黑客可以借机远程访问用户数据。除了尝试入侵受害者的文件同步账户,还可以用攻击者账户同步受害者终端。
4.1 短暂的double switch
Man in the cloud攻击非常简单,攻击者可以分享受害者的文件同步账户。随之攻击者便可以访问受害者同步的文件,并在其中注入恶意代码,其中要使用的工具为Switcher。攻击流程如下图:
1.攻击者诱骗受害者或者使用exp执行Switcher工具。Switcher工具会在Drive APP上植入攻击者的同步token
2.当完成第一个开关时,Switcher会将初始同步token复制到同步文件夹中
3.Drive APP同步攻击者账户
4.攻击者拥有受害者的同步token
5.攻击者使用窃取的受害者同步token连接受害者的文件同步账户
6.Switcher工具第二次在受害者设备上运行,恢复受害者的初始同步token,最后基本能把Drive APP恢复到最原始的状态。
4.2 持久的double switch
和前面的攻击相似,除了可以远程访问受害者设备外,攻击者还可以时时与受害者设备进行交互,执行任意代码、搜集代码的输出等。
1. 攻击者诱骗受害者或者使用exp执行Switcher。Switcher工具会在Drive APP上植入攻击者的同步token
2. 当完成第一个开关时,Switcher会将初始同步token复制到同步文件夹中。
3. Drive APP同步攻击者账户
4. 攻击者拥有受害者同步token
5. 攻击者使用窃取的受害者同步token连接受害者的文件同步账户
6. Switcher工具第二次运行在受害者设备上,恢复受害者的初始同步token,最后基本能把Drive APP恢复到最原始的状态
7. 在第二个开关之后,攻击者设置远程访问受害者设备。一旦获得远程访问权限,攻击者便可在受害者设备上执行任意代码
8. 在攻击者设备同步文件夹的特定位置上放置代码
9. 同步代码到受害者设备上,然后后门机制会识别新文件并执行
10. 输出的代码会被写进受害者设备的同步文件夹中,同样也会同步到攻击者设备上
11. 攻击者搜集输出的内容,然后删除输出内容和代码。
在这个环节中,攻击者会把受害者的云存储当做C&C和远程访问基础设施。
4.3 Single Switch
在Single Switch攻击中,受害者的数据会同步到受攻击者控制的账户上。
1.攻击者诱骗受害者或者使用exp执行Switcher。Switcher会将攻击者的同步token植入进Drive APP
2.受害者的数据会同步到攻击者账号
3.短暂的攻击结束,攻击者开始访问受害者数据。在持久性攻击中,攻击者同样会设置远程访问受害者设备
4.为了在受害者设备上执行恶意代码,攻击者会将代码放在受他们控制的设备的同步文件夹中
5.恶意代码被复制到受害者的同步文件夹中,然后执行
MITC攻击不易被检测到。即使受害者察觉到其账户可能被入侵,他也很难阻止攻击者进一步访问其账户。
当用户不连接账户或者不连接设备时,Dropbox同步令牌可更改。相当于Dropbox可以废除被攻击者利用的token。但是如果攻击者已经将受害者的token恢复到了初始状态,那么受害者就没有办法废除它们了。
Box会不断的更新token,但是一旦攻击者拿到了受害者的一个token,就能顺藤摸瓜,找到更新token的规则。也就是说即使用户更改了密码,他们依然能及时知晓。用户在更改密码时选择“废除所有token”可最大化的降低被攻击者窃取密码的可能性。
如果你发现你的同步token被偷了,GoogleDrive应该是能把危害降到最小的一个产品了。它会更改账户密码,强制所有更新的token都恢复到初始状态并且要求每个设备输入用户名和密码重新认证。
OneDrive和GoogleDrive类似,会恢复更新的token、更改账号密码、重新认证设备。与GoogleDrive不同的是,拥有有效token的设备会继续接收、访问数据,而且这些设备需要人工手动从账户中清除。
本节将介绍一些我们分析过的应用,包含同步token的格式、存储、以及同步token被偷的影响。被测试应用的版本号如下图:
6.1 GoogleDrive
谷歌使用OAuth 2.0进行授权。当用户首次登陆GoogleDrive应用时,GoogleDrive会提示用户输入用户名和密码。体验GoogleDrive应用发现,一旦应用认证了登陆凭证,它就会收到一个“更新token”。更新的token进一步发出请求,然后就能收到访问token。如果访问token到期了,应用会再申请一个新的token。
GoogleDrive的重要数据会保存在HKEY_CURRENT_USER/Software/Google/Drive目录下,该路径的解密密钥是:OAuthToken_o3hPm********Bni0=
进一步研究GoogleDrive加密token发现,它使用的是Crypt32.dll(这是Windows操作系统中一个非常常见的库)。GoogleDrive调用CryptProtectData功能加密token,所以劫持调用就能找到哪些数据被加密了。
GoogleDrive加密了一个由多种字段组成的64位编码的字符串:
1.更新token——事实上是想窃取的同步token
2.用户ID
3.应用认证需要的用户信息
4.APIs列表
上面的数据可用下面的方式串联成一个唯一的字符串:
‘2G’ + Base64Encode(Refresh Token) + ‘|’ + Base64Encode(Client ID) + ‘|’ + Base64Encode(Client Secret) + ‘|’ + Base64Encode(Base64Encode(feeds API) + ‘|’ Base64Encode(drive API) + ‘|’ + Base64Encode(google talk API) + ‘|’ + Base64Encode(docs API))
GoogleDrive会存储应用某些功能的数据,并存储在sync_config.db数据库中。该数据库中还存储着应用程序版本信息、同步文件的路径、用户邮箱等。
基于以上信息,攻击者可用一个简单的代码检索出明文token,然后执行以下任务:
1.在HKEY_CURRENT_USER/Software/Google/Drive中读取有效用户名
2.使用Crypt32.dll 的CryptUnrotectData功能解密数据
3.提取更新后的token
首先,攻击者必须拿到更新后的token,且必须是和受害者相同版本的GoogleDrive所生成。攻击者创建一个新的GoogleDrive账户获得token,然后执行上述步骤。在Switcher代码中嵌入token,然后在受害者设备上运行。除了token本身外,攻击者还需提供该token目录的名称。之后执行如下操作:
1.终止GoogleDrive应用进程
2.创建一个字符串,里面包含攻击者token;然后用CryptProtectData对其进行加密
3.从OAuthToken_******注册表中删除旧的目录
4.在注册表中创建新的目录,名称同攻击者设备上的名称(OAuthToken_o3hPm********Bni0=)
5.用CryptProtectData加密之前创建的字符串,然后植入进新的注册表中
6.除了local_sync_root_path目录之外,sync_config.db数据表中的数据都替换成攻击者的数据
7.重启GoogleDrive应用
6.2 Dropbox
与Google Drive不同,Dropbox在授权时使用的不是OAuth协议。Derek Newton在2011年的一篇博文中提到,Dropbox用的是”host_id”。这个东西被当作授权的token,并且储存在一个名为“ config.dbx”(旧版本中是config.db)的SQLite文件中。获取Dropbox帐号内文件和Dropbox帐号(如帐号管理)只需要这个host_id文件。而且这个host_id文件不会随密码的改变而改变。为了提高安全性,Dropbox会对config.dbx进行加密。然而这儿的加密密钥可以被轻松提取。
为了获取受害者原来的同步密钥,攻击者需要解密config.dbx文件。攻击者可以通过使用Dhiru Kholia所做的名为dbx-keygen-windows的python脚本。这个脚本会从注册表获取加密的键值,然后用标准的Windows API解密,然后获取实际的密钥。正如前面所说,这些API,会用现在已经登录的用户的凭证来解密。
接下来,攻击者会用sqlite3-dbx,这款工具也是Dhiru Kholia写的,它会用提取的加密密钥解密config.dbx文件。文件包含一个config数据库。攻击者可以在这个数据库里找到“host_id”和它的值。
从一个账户切换到另一个账户的完整过程如下:
1. 终止运行中的Dropbox(如果有的话)
2. 运行dbx-keygen-windows获取数据库密钥
3. 使用sqlite3-dbx和前面获得的密钥打开config.dbx文件
4. 把config.dbx文件中的host_id替换成新的host_id
5. 运行Dropbox
接着攻击者就会用他控制的电脑中窃取的host_id。如果把他控制的电脑中的“device_id”也一起替换,攻击就会更加隐蔽(不会有类似“来自新设备的登录”的提示)。
有几个安全漏洞使得这种攻击难以检测防范。
可能最显眼的安全问题就是host_id。攻击者可以用这个token获取Dropbox的数据,也可以通过web界面控制Dropbox账号。host_id值之前是每个Dropbox账号永久不变的。现在,Dropbox会为每个登录生成一个新的host_id,并将这个host_id与设备关联起来。受害者可以断开有问题的host_id,这样就可以取消授权了。
对攻击者来说,要避免被认为是新设备登录(从而避免受害者收到“新设备登录”的邮件)也是很简单的事。只要从受害者电脑上获得“device_id”然后用在攻击者控制的电脑上就好了。只要改动不是太多,就很难注意到账号被盗。 虽然Dropbox会跟踪登录位置(可在账户管理界面查看),但对每个设备只会保留一个记录。因此,如果两台电脑使用相同的“device_id”,受害者就很难注意到账号被盗,因为大部分的账号的活动都是受害者执行的,所以显示的会是受害者的位置。
甚至攻击者访问账号管理界面也可以不被察觉。尽管Dropbox为了防止这种情况提供了审计跟踪。攻击者一旦连接到管理界面,就能删除所有日志,从而隐藏踪迹。
6.3 OneDrive
OneDrive也是使用OAuth 2.0进行应用授权。第一次验证的时候,需要用户输入用户名和密码,之后应用会收到一个“更新token”。应用会进一步使用更新token请求并获得访问token。一旦访问token过期,应用便会使用更新token请求获得一个新的token。同步服务还会给每个更新token配备一个“user-id”。
OneDrive使用Windows的Credentials Store存储更新token,Credentials Store使用用户的账号名和密码登录凭证加密数据。Windows API 调用用于访问Credentials Store,以及检索名为“OneDrive Cached Credential”目录。更新token存储在“password”字段中,user-id存储在“user name”字段中。
开启账户需要执行以下操作:
1.终止运行中的OneDrive(如果有的话)
2.将OneDrive Cached Credentia目录替换成受攻击者控制账户的user-id和password字段
3.删除受害者设备上设置文件夹中的<user-id>.txt文件(例.%USERNAME%/AppData/Local/Microsoft/OneDrive/ settings/Personal))
4.复制攻击者控制设备上的<user-id>.txt文件内容到受害者的设置文件夹中
5.运行OneDrive
OneDrive上可以看到有哪些设备连接了OneDrive账户,并且还能看到是从哪里连接的。如果开启这项功能,用户则可以看到最近的活动和连接账户的地理位置。但是如果用户的“user-id”被同时从两个不同的地点使用,它也不会通知用户。
6.4 Box
和OneDrive类似,Box也使用OAuth进行授权,在Windows Credentials Manager中存储更新token。用户名是账户的邮件地址,存储的数据是加密的更新token。如果Credentials Manager不能使用的话,token就会被储存在“C:/ Users/%USERNAME%/AppData/Local/Box Sync/wincrypto_pass.cfg”文本文件中。
与OneDrive、GoogleDrive不同的是,无论何时,只要用户登录设备,对Box进行操作,Box就能获得一个新的refresh token。
访问受害者账户之前,攻击者的恶意代码需要完成以下操作:
1.终止运行中的Box(如果有的话)
2.替换Windows Credentials 中Box的初始密码字段
3.删除Box的同步文件夹
4.启动Box时应该隐藏弹出窗口,选择同步文件夹
Box有一个比较好的方面就是在文件上传、下载、删除的时候会通知用户。另外,Box还会显示连接设备的地理位置。
开启Box应用,它会用当前存储的token请求一个新的token。随之,Box吊销旧的token,不再使用旧的token。攻击者会在Box吊销旧token之前将受攻击者控制的终端连接到服务上。
从上面的研究中可以发现,利用常用的文件同步服务就可以控制受害者设备、窃取数据、远程访问等。从攻击者的角度看,这种技术有很大的优点,恶意行为结束之后,恶意代码不会存在受害者设备上,并且数据还是通过正常的、标准的、加密信道流出。在MITC攻击中,攻击者不需要获取受害者的用户名和密码就可以控制它。其实在文件同步服务中,用户名和密码的价值并不如同步token。一般用户察觉不到他们的文件同步应用已被攻击者入侵,而且即使察觉到了,也很难阻止他们的攻击行为,唯一的办法就是关闭这个账户然后另外重新注册一个新的账户。
至于如何防护这种类型的攻击,首先,建议企业使用开启云访问安全代理(CASB),它可以帮助企业限制访问权限,只允许企业内部员工使用,还可以监视可疑的访问。其次,建议企业在重要数据周围部署控制器,如DAM、FAM,识别不正常的访问。
报告原文 地址 !
* FB小编/简单整理,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)