本文是翻译文章,原文地址在:
https://securelist.com/a-study-of-car-sharing-apps/86948/
背景介绍
随着汽车共享服务的日益普及,专家们开始预测:大城市的私家车数目将逐渐减少。数据统计似乎支持了这一说法:例如,在2017年,莫斯科的共享汽车,活跃用户数量以及他们的出行次数几乎翻了一番。这是一个好消息,但另一方面,信息安全专家也开始提出一系列相关的问题:使用共享汽车服务的用户数据安全该如何保护?他们在未经授权访问其帐户时会面临哪些潜在风险?
不法分子如何从共享汽车中获利?
一种普遍的情况是,他们想用别人的钱开一辆好车。但是,这样做可能会出现这样的问题 -——有时车主会收到一笔租车费用,然而他们并没有将自己的汽车出租,他们很可能会联系中介公司,而中介公司便会跟进查实租车细节,可能最终向警方报案。这意味着不法分子只要再次开启被追踪车的引擎,就被追踪,甚至抓获。显然,这直接导致了犯罪嫌疑人不愿意劫持他人账户,从中获利。
出售被劫持的账户似乎是一个可行的方案。没有驾驶执照的人或者被汽车共享服务的安全团队拒绝登记的人必然会有这种需求。实际上,市场上已存在这种性质的报价,如下图所示:
此外,掌握用户的汽车共享帐户的详细信息的人,还可以追踪他们的所有行程轨迹并窃取汽车中留下的物品。而且,租用汽车更方便于开往偏远地区,以便于不法分子拆卸汽车配件。
软件层面的安全性
由此,我们知道犯罪分子在其中获得潜在的利益不菲。那么,作为汽车共享应用的开发者,他们是否考虑过用户的安全性并保护其软件避免未经授权的访问?他们是否采取了防欺诈等一系列安全性措施了呢?答案是肯定。我们测试了13个移动应用程序,结果却差强人意......
我们首先检查应用在具有root权限的时候,是否有阻止Android设备启动的能力,并评估其代码的复杂性。主要出于以下两种情况:
- 绝大多数Android应用程序都可以反编译,修改代码(例如将用户的证书发送到C&C),然后重组,用新证书签名并再次上传到应用程序商店;
- 处在根设备上的攻击者可以渗透必要应用程序的进程并获取对身份验证数据的访问权限。
另一个重要的安全要素是在使用服务时设置用户名和密码的强度。许多服务使用个人的电话号码作为用户名。这对于网络犯罪分子来说非常容易获取,因为用户经常忘记保护,并将其暴露在社交媒体上,因此汽车共享用户可以通过他们的标签和照片在社交媒体上识别区分。
然后,我们查看了应用程序如何使用证书,并确定网络犯罪分子是否有机会发起成功的MITM攻击。并且,我们研究发现,使用未授权窗口覆盖该应用程序界面是一件非常容易的事。
逆向工程和超级用户权限
在我们分析的所有应用中,只有一个能够抗逆向工程。它在DexGuard的帮助下得到了保护,DexGuard是一种解决方案,开发人员还承诺受保护的软件不会在所有者获得root权限时或已经在修改的设备上启动。
然而,虽然该应用程序可以很好地防止逆向工程,但没有什么可以阻止它在具有超级用户权限的Android设备上启动。当以这种方式进行测试时,应用程序会成功启动并完成服务器授权过程。攻击者可以获取位于受保护存储中的数据。但是,在这个特定的应用程序中,数据被非常牢固地加密。
密码强度
在一般的应用程序中,通常用户不被允许创建自己的证书;相反,他们被强制使用自己的电话号码和在短信的验证码。一方面,这意味着用户无法设置像'1234'这样的弱口令;但在另一方面,它为攻击者提供了获取口令的机会(通过使用SS7漏洞拦截它,补发手机的SIM卡)。我们决定使用我们自己的帐户来试验找出所谓的“密码”是多么的容易。
如果攻击者在社交媒体上找到某人的电话号码并尝试使用该号码登录该应用时,则账号的所有者将收到如下验证码的短信:
我们可以看到,验证码只有四位数,这意味着只需要10,000次尝试就可以猜测它——事实的数字更小。在理想化的情况下,此类代码应至少为六位数字,并包含大写和小写字符以及数字。
另一种汽车共享服务向用户发送更强的验证码;然而,这同样存在缺点,它们的验证码遵循着一个固定的模板:在第一个和最后一个位置总是有数字,在中间有四个小写的英文字符:
这意味着这里存在有4500万种可能的组合可供搜索; 如果数字的定位不受限制,组合的数量将增加到20亿。当然,45,000,000也是一个庞大的数级,但如果应用程序如果没有超时或者次数限制,同样可以通过暴力破解来突破验证。
现在,让我们回到第一个应用程序的验证码。该应用程序为用户设定输入验证码的校验时间为一分钟; 如果超时,用户必须重新申请验证码。事实证明,暴力枚举必然会超过两分钟。因此,我们可以写一个小型的爆破脚本,修改部分app / server通信协议并启动了暴力破解。然而,我们依旧没有爆破成功,经过我们的分析,应该存在如下两个原因:首先,我们的线程开得不够大,或者说,汽车共享运营商为验证码设置了两分钟超时,因此只有在足够大的带宽,更大的线程中,才能在2分钟内跑出结果。由于条件限制,我们就不继续了。
与此同时,我们有意对单线程中的单IP进行暴力破解,从而有意让对方检测并实施拦截,耗费其资源,处理潜在的威胁,然后再自行停用账户,这是我们压箱底的战术了。但我们一般不会用这样的招数,决定继续测试下一个应用程序。
接下来,我们在第二个应用程序上尝试了所有上述的过程,唯一的例外是我们在爆破中没有使用任何一个能够正常访问的账号。我们发现,该太服务器会自动校验我们发出的1000中不同的验证码,因此推测,假如我发送了4500万,它还会可能全部校验,所以爆破成功只是时间的问题。
这是一个可预测结果的漫长过程。该应用程序还会以加密格式在本地存储用户名和密码,但如果攻击者知道其格式,则强制执行只需几分钟——大部分时间将用于生成秘钥/MD5哈希对(密码),再对生成的MD5进行哈希处理并写入设备上的文件中)。
MITM攻击
值得注意的是,应用程序是通过使用HTTPS与控制中心之间进行数据通信,因此可能需要很长时间才能确定通信协议。为了使我们的“攻击”更快,我们采取了MITM攻击,在另一个全球安全漏洞的帮助下:因为所测试的应用程序都没有检查服务器的证书,我们能导出整个会话信息。
上图为成功进行MITM攻击的屏幕截图,获取到的HTTPS会话信息。
防止被顶替
当然,假如Android设备被入侵,即可以截获其授权的SMS,那么攻击者可以立即登录其他设备。从攻击者的角度来看,这种方式更快速高效。如果存在复杂的密码,则攻击者可以通过显示虚假窗口来劫持该应用程序,该窗口包含用于登录详细信息的输入字段,其中包含正版应用程序的界面。我们分析的所有应用都无法对抗这类活动。如果操作系统版本足够高,还可以升级权限,并且在某些情况下,可以提取所需要的数据。
结果
这种情况与我们在Connected Car应用程序中发现的情况非常相似。应用程序开发人员似乎并不完全了解当前对移动平台的威胁——这既适用于设计阶段,也适用于创建基础架构。有一个用于通知用户可疑活动的扩展功能是一个良好的开始——当前只有一项服务向用户发送有关尝试从其他设备登录其帐户的通知。我们分析的大多数应用程序从安全角度来看设计很差,需要进行改进。并且,许多程序不仅彼此非常相似,而且实际上基于相同的框架,甚至是代码。
俄罗斯汽车共享运营商可以从其他国家的同行们那里学到一些事。例如,短期汽车租赁市场中的主要参与者仅允许客户使用特殊卡访问汽车——这可能让该服务的体验性降低,但显著提高了安全性。
给用户的建议
- 不要公开电话号码(电子邮件也一样)
- 使用单独的银行卡进行在线支付,包括汽车共享(虚拟卡也可以使用),并且不会比你需要更多的开销。
- 如果您的汽车共享服务向您发送了包含您帐户验证码的短信,请与安全服务部门及时联系,并断开您的银行卡与该帐户的连接。
- 使用安全解决方案可以保护您免受窃取短信的网络犯罪分子的攻击。这样不仅对于那些搭便车者,也对那些拦截银行短信的人来说,都是非常致命的打击。
对汽车共享服务的建议
- 使用机制检测,防止存在有根设备上的操作。
- 允许用户创建自己的证书; 确保所有密码强度够大。
- 每次登陆,都通知用户有关从其他设备成功登录的信息。
- 切换到PUSH通知:恶意软件监控Android中的通知栏仍然很少见。
- 保护您的应用程序界面不被其他应用程序资源抢占。
- 添加服务器证书检查。