Venmo是当下一款非常热门的手机应用程序,它可以让使用者更加轻松地处理朋友之间的金钱问题(例如AA付款和出游支出)。当你将银行账号或者信用卡与Venmo帐号进行了绑定之后,你就可以非常方便地给朋友转账了。除此之外,Venmo还被认为是一个迷你型的社交网络,用户可以使用非常有意思的表情符号来与其他正在相互支付的好友进行交流。值得注意的是,这款应用程序从诞生之日起就十分受欢迎,在2016年4月份苹果公司评选出的iPhone十佳应用程序中,Venmo的排名为第五位。
有了Venmo之后,你所能做的将不仅仅只限于支付自己的账单,它甚至还可以允许你代付他人的账单。比如说,你的好友想购买一份十分美味的煎饼,但是他或她的身上并没有带现金,这时你就可以帮他们付款了。当然了,你也可以使用Venmo来主动要求让你的好友帮你代付。让某人代付你的账单,并不意味着这笔钱会直接从他的银行账号中取出来。你的好友只会收到一个通知,他将会看到他的账号中有一个等待付款的订单。只有当你的好友接受付款申请时,整个支付环节才算完成。而这就是我们在今天的攻击中所要使用的功能。
Venmo通知
与很多其他的移动App一样,Venmo也有其自身的通知系统。当你的帐号接收到了新的消息(例如支付请求等)时,系统会向你推送相应的通知。默认情况下,Venmo会自动推送和清除这些通知信息。每当外界发生了与你账号有关系的事情时,你都会看到你的移动设备屏幕上将出现一个熟悉的弹窗信息。
前段时间,一个朋友曾让我帮他代付过一瓶酒。就我个人而言,我十分讨厌这种弹窗式的通知,所以我将它们全部禁用了。虽然我没有收到那种典型的“应用程序通知”,但是我却收到了一条短信。在此之前我从未见到过这种通知短信,所以我猜测这应该是Venmo的一个新功能。看完这条短信之后,我意识到这不仅仅是一条通知信息,这实际上是一条付款请求。这条短信的内容如下图所示,它给了我一个选择:回复这个六位数的验证码,即可完成付款。我按照短信的要求做了,随后系统便显示“支付正在处理”,一切都如预期的一样。
但事后我便开始思考,Venmo在要求我进行支付之前,并没有对我的身份进行验证。我只是简单地回复了一条文字信息而已,这一切发生得实在太快了。
从锁屏设备中窃取金钱
正如上文中提到的,你可以使用Venmo来向某人发送支付请求。整个过程就如同转账给某人一样简单,但是我们可以不去点击“支付”按钮,而点击“收费”按钮。Venmo给每位用户的每周限额为2999.99美金,与这篇文章的标题一样。
我似乎记得,当你的设备处于锁屏状态下时,你可以使用Siri来发送短信。当iOS 9中添加了“嗨 Siri”功能之后,Siri也变得越来越受欢迎了。
既然我们已经知道了,我们可以使用锁屏设备来发送短信息,那么我们还需要得到的就是短信息中用于完成支付行为的验证码。苹果推出了一个名为“文本消息预览”的功能,这个功能允许你在锁屏状态下读取信息的发送者和其部分内容。值得注意的是,这个功能也是默认开启的。
在这两个功能的帮助下,我就可以在锁屏状态下,看到短信中的操作验证码,并使用Siri来回复短信了。请注意,所有的这些操作都可以在设备屏幕锁定的状态下进行。
Venmo的短信通知
为了验证这种可能性是否存在,我在我自己的手机上进行了攻击测试。但是在我将这个问题报告给Venmo之前,我得确保在其他的设备上也存在同样的问题。我在我女朋友的iPhone上进行了测试,结果非常出乎我的意料,这一次我并没有收到短信通知。这就非常的麻烦了,因为我此前设想的是所有设备在默认配置下都会存在这样的问题,但是这一发现使我的“世界观”完全崩塌了。没错,我确实可以在锁屏状态下读取到短信信息。没错,我确实可以使用Siri回复文字信息。但是Venmo的短信通知功能并不是默认开启的,所以这一切能够实现的前提就是目标Venmo账号必须开启这个功能。
但是,我非常想在默认配置下实现这种攻击方式,于是我便打算重新分析一下其具体的工作机制。当我在对短信服务进行分析时,我回复了一串随机字符,此时我会接收到另外一条短信,短信内容如下图所示:
当我仔细阅读完这条短信之后,我突然意识到,我此前竟然忽略了一个最重要的地方:“回复‘STOP’可以取消服务”。如果我可以通过回复“STOP”来取消短信通知服务,那么我是否可以通过发送“START”来激活短信通知服务呢?
没错!你确实可以通过向号码86753发送短信“START”来激活Venmo的短信通知服务。其中,86753是Venmo的服务号码,Venmo会使用这个号码来给用户发送通知短信。
现在,我可以激活Venmo的短信通知服务了,并让Siri告诉我短信的操作验证码,然后回复相应的操作码来完成支付。所有的操作都可以在一台处于锁屏状态下的设备上完成。
Venmo的修复策略和应对方案
当我将这个问题和一些相关发现报告给Venmo之后,他们便决定立刻修复这个漏洞。为此,Venmo在包含了这六位数字验证码的短信中间添加了额外的空格,因为“短信预览功能”显示的字符数量有限。Venmo在向短信中添加了足够多的空格之后,就可以防止其操作验证码在锁屏预览中被显示出来。
不幸的是,这种修复方式并没有解决目前存在的根本问题。我发现了一个非常简单的方法,在这个方法的帮助下,我仍然可以得到短信中的操作验证码。我所要做的就是使用Siri来“阅读我最新接收到的短信消息”。由于在锁屏状态下,我无法查看到短信内容,但是我可以让Siri将短信内容读给我听。简单且有效!
演示视频如下:
如何防止这类攻击
这里面还存在很多问题,老实说,这并不全是Venmo的错。现在的问题不仅仅是你可以通过回复一条短信来完成支付操作。你可以在设备的锁屏状态下查看并回复短信,这也就使得问题变得更加严重了。而这个问题就是苹果公司所要处理的了。
除此之外,Venmo还允许你通过发送短信的方式来开启服务,这种事情是完全不应该发生的。Venmo应该取消这个功能,这样才能完全防止这类攻击的发生(除非用户已经启动了该功能)。考虑到禁用Venmo的短息通知服务并没有预期的那么有效,所以我建议用户禁用手机的短信预览功能。当然了,你也可以禁用锁屏状态下的Siri,这样就没有人能够“帮”你发送短信了。