我将立即说,我的目标不是欺骗系统或逃脱隔离。老实说,我在家里呆了两个星期。好吧,我几次去最近的商店买啤酒。目的是了解该系统对我们的了解以及其作者的某些陈述是多么真实。首先,我开始收集初步信息。我发现类似以下内容:
- 该应用程序是根据垃圾车跟踪程序编写的。我没有找到理智的确认,并且深入研究程序的内部也没有确认任何此类内容。
- Beta版本未受到任何保护,已反编译并上传到github。但是,应版权所有者的要求将其从github中删除。
- 测试版将图片传输到爱沙尼亚的服务器以使用人脸识别服务。
- 然后,我读了DIT负责人爱德华·利森科(Eduard Lysenko)的声明,他说:“莫斯科DIT负责人明确拒绝了该应用程序将照片传输到第三方服务器的信息:“实际上,什么都没有转移到任何地方,”他说。-首先,原则上不传输照片。其次,出现的生物特征识别码将专用于DIT服务器。” 在这里,我已经想知道这些图像原则上是如何传输的。它们会直接在您的智能手机上转换为生物识别代码吗?
- 该程序的新版本非常混乱,现在几乎无法对其进行分析。
然后,我从朋友和熟人那里收集了谣言:
- 实际上,不是传送一张照片,而是传送一系列照片。这样做是为了使您无法拍摄纸质照片。甚至视频正在传输。
- , .
老实说,我将“实时”应用程序放在iPhone上,根本不打算使用它。我没有iPhone可以越狱,但我拥有扎根的Android。我从他开始。顺便说一句,在根植的Android上,应用程序无法启动。混淆Java代码看起来很有趣。所有变量和函数名称均已重命名。但是,遍历整个链,我们发现自己处在完全可读的代码段中。大约在惊奇的结尾,大约如何遍历反汇编程序清单。我至少要花几天的时间来研究这段代码,但是突然我想到了一个更简单的解决方案。但是,如果...他们信任操作系统检查SSL证书怎么办?在工作中,有时我不得不颠倒Apple,Google,Whatsapp和许多其他协议。在几乎所有系统中,根证书都被缝合在程序内部,这使得分析流量非常困难。
我将mitmproxy放在MacBook上,这是一款非常便捷的流量分析器,只需最少的设置。我下载了他们的根证书,将配置文件添加到iPhone-就是这样!我们一目了然地看到了该程序的所有流量。
申请注册
您需要在隔离开始后的24小时内安装并注册该应用程序。在这种情况下,会收到一条短信。以前,这样做是没有意义的,只是在数据库中找不到电话。这是注册请求的样子:
<b>2020-09-12 17:48:03 POST https://sm-a-a90ae4b5a.mos.ru/api/covid/device/password HTTP/2.0
← 200 application/json 82b 156ms
{
"deviceId": "2FFA9DB6-4900-4973-B1AE-BA5874BEXXXX",
"phone": "7925xxxyyzz"
}</b>
作为回应,我们总是得到“ 200 OK”,仅此而已。如果电话在数据库中,您将收到一条SMS,其中包含必须输入到应用程序中的代码。如果数据库中没有电话,则什么也不会发生。deviceId包含iPhone的UDID。一切都与该标识符相关。如果iPhone坏了,而我们从备份中取出了新的,则该应用程序将无法运行。将会罚款,但尚不清楚如何处理。在下文中,私有数据将全部或部分替换为“ XXYYZZ”。
坐标传输
然后,我鼓起勇气,通过mitmproxy连接了“现场”电话。每隔5-10分钟以及在启动应用程序时,将发出以下请求:
2020-09-12 17:56:32 POST https://sm-a-a90ae4b5a.mos.ru/api/covid/device/60B1A8A1-2AD9-447C-BB25-91YYYYY19C6E/message
HTTP/2.0
← 200 application/json 83b 84ms
[
{
"accuracy": 65,
"battery_level": 68,
"charge": false,
"datetime": "2020-09-12T14:56:32Z",
"device_model": "iPhone 11 Pro",
"indoorNavigation": {
"bluetoothDevices": [],
"wifiDevices": [
{
"name": "wifi-XXX",
"rssi": 0
}
]
},
"install_datetime": "2020-09-08T07:57:11Z",
"lat": 55.XXZZZ732239728,
"locationDatetime": "2020-09-12T14:56:31Z",
"locationStatus": {
"gps": true,
"isPermissionGranted": true,
"network": true,
"passive": true
},
"lon": 37.YYZZZ270607305,
"os_version": "iOS 13.7.0",
"version_ext": "1.7 (127)"
}
]
在这里,我们再次看到deviceId,不同的是,我从iPad发出了第一个请求。
精度-确定坐标的精度,我不知道
电池单位-电池电量。我不知道他为什么是DIT?
充电-手机是否正在充电。还不清楚为什么它被传输。
datetime-当前日期和时间。也许使用它是为了不可能“拉紧”设备上的时间。
device_model-手机型号。好吧,如果DIT对此有所了解,我不会感到遗憾。
室内导航非常有趣。这是已知无线网络的列表,您可以通过它们确定坐标。但是,没有发送BSSID,这使得该信息完全无用。坐标不能由网络名称确定。
install_datetime-可用于防止模拟这些请求。尽管可以根据需要获得此信息,而且非常简单。
lat,lon(实际上是
location_status坐标)-是否启用了GPS,以及是否允许程序在后台使用它。如果没有,将被罚款。
os_version-iOS版本
version_ext-无法理解,也许是应用程序本身的版本
自拍转移
有趣的开始。在传输已拍摄的自拍照时嗅探流量。那么我们的生物识别哈希和视频在哪里?这是实际发生的情况:
<b>2020-09-12 18:00:15 POST https://sm-a-a90ae4b5a.mos.ru/api/covid/device/60B1A8A1-2AD9-447C-BB25-91YYYYY9C6E/photo
HTTP/2.0
← 200 application/json 39b 301ms
Request Response Detail
:authority: sm-a-a90ae4b5a.mos.ru
content-type: multipart/form-data; boundary=alamofire.boundary.04b478f466f0605d
accept: */*
shard: 6
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTk1NjYzMjl9.iq-noX2tu13tr4ut7sBWpgWl77sELkT
kXCdODK9yvL8
֞ostype: iOS
accept-language: en-RU;q=1.0, ru-RU;q=0.9, cs-RU;q=0.8
accept-encoding: br;q=1.0, gzip;q=0.9, deflate;q=0.8
versionext: 1.7 (127)
content-length: 378238
֘user-agent:
cookie: session-cookie=163402e73a984c296450ad1fdcb1815835321af39172a2bef8658e48071941dc73acdb9d1d976170d2ef9
70da45f5c87
Multipart form [m:auto]
҅Form data:
photo: ..JFIF..... . .. . Exif..MM.*.............................J...........R.(.......... i.........Z....... .....</b>
好吧,一切都清楚了吧?这部分的保护要强一些,请求还包含承载令牌,通过该令牌组织授权。我没有嗅到接收令牌的时刻,也许令牌是在请求自拍照时出现的。恰好一张照片离开。里森科先生,您的生物识别哈希值在哪里?
状态请求和隔离释放
除了发送坐标外,应用程序还会定期发出状态请求。顺便说一句,当您请求状态时,可能会发出拍摄自拍照的请求。当应用程序停止要求我提供自拍照时,出于兴趣的缘故,我嗅到了状态请求:
<b>2020-09-18 13:28:13 GET https://sm-a-a90ae4b5a.mos.ru/api/covid/device/60B1A8A1-2AD9-447C-BB25-91XXXXX19C6E/status
HTTP/2.0
← 200 application/json 317b 181ms
{
"code": 0,
"io": " .",
"last_android_version": "1.1.1",
"last_ios_version": "1.0",
"message": " ! -",
"quarantine": null,
"status": "active"
}</b>
服务器响应中最有趣的是“隔离:空”。这意味着隔离已结束。但是该应用程序不会告诉您。此外,他们在邮件中仍然承诺要求自拍照。并且状态仍处于活动状态。和坐标...好吧,当然,应用程序会继续将设备坐标发送到DIT服务器!因此,隔离结束后,请立即卸载应用程序。
可以做什么
根据已编写的内容,很明显,您可以编写一个脚本来模拟应用程序的操作并发送所有必要的数据。由于在测试过程中很容易受到惩罚,因此使编写变得困难。首先,您需要将整个注册过程嗅探到最后,包括在收到带有代码的SMS时。处理承载认证和其他琐事。他们有可能分析照片的EXIF记录。其中有确切的时间和坐标。因此,解决方案将是预先制作许多不同的照片,并在发送之前即时编辑EXIF。
好吧,总而言之,我想说的是,我绝不敦促任何人违反隔离规定,尤其是对冠状病毒进行阳性检测时。这只是对系统的分析和DIT花园中的小卵石,他们喜欢发表奇怪的公开声明。不要生病!