Saya akan langsung mengatakan bahwa tujuan saya bukanlah untuk menipu sistem atau melarikan diri dari karantina. Sejujurnya saya menghabiskan 2 minggu saya di rumah. Oke, saya pergi ke toko terdekat beberapa kali untuk minum bir. Tujuannya adalah untuk melihat apa yang diketahui sistem ini tentang kami dan seberapa benar beberapa pernyataan penulisnya. Awalnya saya mulai mengumpulkan informasi awal. Saya menemukan sesuatu seperti berikut:
- Aplikasi ini dibuat berdasarkan program pelacak truk sampah. Apa yang saya tidak menemukan konfirmasi yang waras, dan menggali bagian dalam program juga tidak mengkonfirmasi hal seperti itu.
- Versi beta tidak dilindungi dengan cara apapun, itu didekompilasi dan diunggah ke github. Namun, itu dihapus dari github atas permintaan pemegang hak cipta.
- Versi beta mengirimkan gambar ke server di Estonia untuk menggunakan layanan pengenalan wajah.
- Kemudian saya membaca pernyataan kepala DIT Eduard Lysenko, yang mengatakan sebagai berikut: "Kepala DIT Moskow dengan tegas menyangkal informasi bahwa aplikasi mengirimkan foto ke server pihak ketiga:" Sebenarnya, tidak ada yang ditransfer ke mana pun, "katanya. - Pertama, pada prinsipnya tidak ada foto yang ditransfer. Kedua, kode biometrik yang muncul, secara eksklusif masuk ke server DIT. " Di sini saya sudah bertanya-tanya bagaimana gambar-gambar ini pada prinsipnya tidak ditransmisikan. Apakah mereka diubah menjadi kode biometrik langsung di ponsel cerdas Anda?
- Versi baru program sangat dikaburkan dan sekarang hampir tidak mungkin untuk menganalisisnya.
Kemudian saya mengumpulkan rumor dari teman dan kenalan:
- Nyatanya, tidak hanya satu foto yang dikirimkan, melainkan serangkaian foto. Ini dilakukan agar tidak mungkin mengambil gambar foto kertas Anda. Atau bahkan video sedang dikirim.
- , .
Sejujurnya saya memasang aplikasi "live" di iPhone dan tidak berencana untuk menggunakannya sama sekali. Saya tidak memiliki iPhone di mana saya dapat melakukan jailbreak, tetapi saya memiliki Android yang telah di-root. Saya mulai dengan dia. Ngomong-ngomong, di Android yang di-rooting, aplikasi tidak dimulai. Mengaburkan kode Java terlihat lucu. Semua variabel dan nama fungsi telah diganti namanya. Namun, melalui rantai tersebut, kami menemukan diri kami pada bagian kode yang dapat dibaca sepenuhnya. Kira-kira bagaimana cara menelusuri daftar disassembler, hanya di akhir kejutan. Saya akan menghabiskan setidaknya beberapa hari untuk menggali kode ini, tetapi tiba-tiba saya menemukan solusi yang lebih sederhana. Tetapi bagaimana jika ... mereka mempercayai OS untuk memeriksa sertifikat SSL? Di tempat kerja, terkadang saya harus membalikkan protokol Apple, Google, Whatsapp, dan banyak lainnya. Di hampir semua sistem, sertifikat dasar digabungkan di dalam program, yang membuatnya sangat sulit untuk menganalisis lalu lintas.
Saya meletakkan mitmproxy di MacBook, penganalisis lalu lintas yang sangat berguna dengan pengaturan minimum. Saya mengunduh sertifikat root mereka, menambahkan profil ke iPhone - dan hanya itu! Kami melihat semua lalu lintas program dalam sekejap.
Pendaftaran aplikasi
Anda perlu menginstal dan mendaftarkan aplikasi dalam waktu 24 jam sejak awal karantina. Pada kesempatan ini, datang SMS. Sebelumnya, tidak masuk akal untuk melakukan ini, hanya telepon tidak akan ditemukan di database. Seperti inilah tampilan permintaan pendaftaran:
<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>
Sebagai tanggapan, kami selalu mendapatkan "200 OK" dan tidak lebih. Jika ponsel ada di database, Anda akan menerima SMS dengan kode yang harus dimasukkan ke dalam aplikasi. Jika tidak ada telepon di database, tidak akan ada yang datang. DeviceId berisi UDID iPhone. Semuanya terkait dengan pengenal ini. Jika iPhone rusak dan kami mengambil yang baru dari cadangan, aplikasi tidak akan berfungsi. Dan akan ada denda, yang tidak jelas bagaimana menanganinya. Selanjutnya, data pribadi akan sepenuhnya atau sebagian diganti dengan "XXYYZZ".
Transmisi koordinat
Kemudian saya mengumpulkan keberanian dan menghubungkan telepon "hidup" melalui mitmproxy. Setiap 5-10 menit, serta saat aplikasi dimulai, permintaan berikut dibuat:
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)"
}
]
Di sini kita kembali melihat deviceId, itu berbeda, permintaan pertama saya buat dari iPad.
akurasi - akurasi menentukan koordinat, saya tidak tahu di unit apa
battery_level adalah tingkat pengisian baterai. Aku heran kenapa dia DIT-y?
mengisi daya - apakah telepon sedang diisi. Juga tidak jelas mengapa itu ditularkan.
datetime - tanggal dan waktu saat ini. Mungkin digunakan sehingga tidak mungkin untuk "memutar" waktu pada perangkat.
device_model - model telepon. Saya tidak menyesal jika DIT mengetahui hal ini.
indoorNavigation cukup menarik. Berikut adalah daftar jaringan wifi yang dikenal dimana Anda dapat menentukan koordinatnya. Namun, BSSID tidak dikirimkan, yang membuat informasi ini sama sekali tidak berguna. Koordinat tidak dapat ditentukan dengan nama jaringan.
install_datetime - dapat digunakan untuk melindungi dari meniru permintaan ini. Meskipun informasi ini dapat diperoleh jika diinginkan dan cukup sederhana.
lat, lon - sebenarnya, koordinat
location_status - apakah GPS diaktifkan dan apakah program diizinkan untuk menggunakannya di latar belakang. Jika tidak, akan ada denda.
os_version - versi iOS
version_ext - tidak mengerti, mungkin versi aplikasinya sendiri
Transfer selfie
Kesenangan dimulai. Mengendus lalu lintas saat mentransfer foto selfie yang diambil. Jadi di mana hash dan video biometrik kami? Dan inilah yang sebenarnya terjadi:
<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>
Nah, semuanya jelas, bukan? Bagian ini dilindungi sedikit lebih kuat, permintaan juga berisi token Bearer, yang digunakan untuk mengatur otorisasi. Saat saya menerima token, saya tidak mengendusnya, mungkin token itu datang saat meminta selfie. Tepat satu daun foto. Di mana hash biometrik Anda, Tn. Lysenko?
Permintaan status dan rilis karantina
Selain mengirimkan koordinat, aplikasi juga rutin membuat permintaan status. Ngomong-ngomong, ada kemungkinan ketika Anda meminta status, permintaan untuk selfie datang. Ketika aplikasi berhenti meminta saya untuk selfie, saya mengendus permintaan status demi kepentingan:
<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>
Hal yang paling menarik tentang respons server adalah "karantina: null". Artinya karantina telah berakhir. Tetapi aplikasi tidak memberi tahu Anda hal itu. Apalagi dalam pesan tersebut mereka masih berjanji untuk meminta foto selfie. Dan statusnya masih aktif. Dan koordinatnya ... yah, tentu saja, aplikasi terus mengirim koordinat perangkat ke server DIT! Oleh karena itu, hapus instalan aplikasi segera setelah karantina berakhir.
Apa yang bisa dilakukan
Dari apa yang telah ditulis, jelas bahwa Anda dapat menulis skrip yang akan meniru pengoperasian aplikasi dan mengirim semua data yang diperlukan. Penulisan menjadi sulit karena fakta bahwa mudah untuk mengambil penalti selama pengujian. Pertama-tama, Anda perlu mengendus seluruh proses pendaftaran sampai akhir, termasuk pada saat menerima SMS dengan kode. Berurusan dengan otentikasi Bearer dan trivia lainnya. Mungkin saja mereka menganalisis rekaman foto EXIF. Di mana ada waktu yang tepat, serta koordinat. Oleh karena itu, solusinya adalah membuat banyak foto berbeda terlebih dahulu, dan mengedit EXIF dengan cepat sebelum dikirim.
Sebagai kesimpulan, saya ingin mengatakan bahwa saya sama sekali tidak mendorong siapa pun untuk melanggar karantina, terutama dengan hasil tes positif untuk virus corona. Ini hanya analisis sistem dan kerikil kecil di taman DIT, yang suka membuat pernyataan publik yang aneh. Jangan sakit!