全文共1962字,预计学习时长7分钟

 

印度的“健康码”:Aarogya Setu为何会失败?

 

为了抗击疫情,很多国家都开始使用追踪人们移动路径和健康情况的应用程序。在印度,政府发布了一款名为Aarogya Setu的移动联系人追踪应用程序。PlayStore上可以下载这款应用程序,迄今已经有9000万印度人下载并安装了。

 

在诺伊达,如果人们的手机上没有安装这个应用程序,可能会被处以监禁6个月或罚款1000卢比。如果立即下载,即可离开。他们这样做是为了让人们认真对待这个命令。

 

一切似乎很合理,但问题却是这样发生的。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

访问app内部文件

 

4月3日,也就是该app上线2天后,我决定去看看1.0.1版本。当时是晚上11点54分,我花了不到两个小时的时间来研究这个app。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

凌晨1点27分,我发现一个名为WebViewActivity的activity有些异常。这是一个webview,理论上,它负责展示web页面,例如隐私策略。

 

印度的“健康码”:Aarogya Setu为何会失败?

Aarogya Setu v1.0.1中的AndroidManife

 

而问题是,WebViewActivity能做的不止这些:

 

印度的“健康码”:Aarogya Setu为何会失败?

Aarogya Setu v1.0.1中的WebViewActivi

 

我利用onPageStarted检查了str参数的值。如果str:

 

· is tel://[电话号码]:它会要求Android打开拨号器并预拨号码

· 不包含http或https的话,没有反应

· 否则它将打开一个具有指定URI的webview。

 

可以看到,根本没有主机验证。因此,我试图通过发送以下命令打开该app的一个名为fightcona_prefs.xml的内部文件。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

 

为什么说这是个问题?因为攻击者只需单击一次,就可以打开该app任何内部文件,包括其使用的本地数据库fight-covid-db。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

掌握印度各地病患信息

 

5月4日,我决定继续我的分析,于是便打开了该app的v1.1.1版本,即当前版本。

 

一开始我就注意到先前描述的问题已经被开发人员默默地修复了。事实上,WebViewActivity从外部是无法访问的,他们删除了AndroidManifest.xml中的意图过滤器。

 

印度的“健康码”:Aarogya Setu为何会失败?

Aarogya Setu v1.1.1中的AndroidManife

 

为了继续我的分析,我决定在一个有根设备上使用这个app。然后,我直接收到了下面这条消息。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

我反编译了应用程序,找到了这个根检测的实现位置。为了绕过它,我在Frida脚本中编写了一个小函数。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

接下来我需要绕过证书锁定,以便能够监视应用程序发出的网络请求。成功后,我发现了这个app的一个有趣的特性。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

利用这个app,您可以知道有多少人在您所在的区域进行了自我评估。还可以选择这个区域的半径,500米、1公里、2公里、5公里或10公里都可以。当用户选择了其中一个距离后:

 

· 他的位置被发送出去了:查看header中的lat和lon参数

· 发送半径选择:查看url中的dist参数和header中的distance参数

 

印度的“健康码”:Aarogya Setu为何会失败?

 

我注意到的第一件事是,这个端点返回很多信息:

 

· 不适人数

· 感染人数

· 可使用蓝牙的人数

· 您周围已进行自我评测的人数

· 您周围使用该应用程序的人数

 

我做的第一件事就是修改位置,看看我是否能在印度的任何地方获得这些信息。然后我将半径修改为100公里,看看在选择了该app不支持的半径范围下,我还能否接受到信息。正如你所看到的在前面的截图,我把我的位置改为新德里,设置半径为100公里,竟然成功了!

 

但这个做法太傻了。由于这个端点,入侵这个app的人可以知道在他选择的区域谁在哪个地方被感染了。例如,我可以知道我的邻居是否生病。这个操作有点傻,听起来像是我自己的隐私问题…

 

所以我决定试一试,看看在半径为500米的范围内,某些特定地方有多少人被感染了:

 

· PMO办公室:{“感染人数”:0,“不适人数”:5,“开启蓝牙的人数”:4,“成功”:是,“自我检测人数”:215,“附近用户数”:1936}

 

· 国防部:{“感染人数”:0,“不适人数”:5,“开启蓝牙的人数”:11,“成功”:是,“自我检测人数”:123,“附近用户数”:1375}

 

· 印度议会:{“感染人数”:1,“不适人数”:2,“开启蓝牙的人数”:17,“成功”:是,“自我检测人数”:225,“附近用户数”:2338}

 

· 印度陆军总部:{“感染人数”:0,“不适人数”:2,“开启蓝牙的人数”:4,“成功”:是,“自我检测人数”:91,“附近用户数”:1302}

 

印度的“健康码”:Aarogya Setu为何会失败?

 

信息披露

 

印度的“健康码”:Aarogya Setu为何会失败?

 

在我的第一条推文发出49分钟后,NIC和印度认证中心联系了我。我给他们发了一份简短的技术报告。

 

几小时后,他们发布了一份官方声明。

 

印度的“健康码”:Aarogya Setu为何会失败?

 

意思就是“没什么问题,请继续使用。”

 

然而正如你在文章中看到的,完全有可能使用不同于5个硬编码值的半径,所以很明显,他们在这一点上撒谎了,他们清楚地知道这一漏洞。他们甚至承认现在的默认值是1km,所以他们在我的报告之后对此做了更改

 

有趣的是,他们也承认用户可以获取多个位置的数据。通过三角测量,攻击者可以精确地获得某人的健康状态。

 

印度的“健康码”:Aarogya Setu为何会失败?

图源:unsplash

 

他们的回应真的很快,这令人欣慰,并且他们还解决了一些问题。但更重要的是:请停止说谎,停止否认。公信力是很脆弱的东西,人们的信任往往只有一次。

 

印度的“健康码”:Aarogya Setu为何会失败?

我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”

印度的“健康码”:Aarogya Setu为何会失败?

(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

相关文章:

  • 2022-12-23
  • 2021-11-09
  • 2021-05-22
  • 2021-09-08
  • 2022-12-23
  • 2021-10-20
  • 2021-12-21
  • 2021-08-10
猜你喜欢
  • 2021-10-10
  • 2021-04-02
  • 2021-10-29
  • 2021-11-01
  • 2022-01-20
  • 2021-10-04
  • 2021-11-05
相关资源
相似解决方案