تطبيق المراقبة الاجتماعية: تحليل حركة المرور

بدأ كل شيء بالوصول إلى موسكو. كما هو متوقع ، اجتزت اختبار PCR المطلوب لـ covid ، وانتظرت نتيجة سلبية ، وقمت بتحميله إلى خدمات الدولة و ... قررت أن هذه كانت نهاية مغامراتي في موسكو. لكن اتضح أنه ليس بهذه البساطة جاءني طبيب فجأة. وسلم مرسومًا يفيد بأنني مضطر للبقاء في المنزل لمدة أسبوعين في الحجر الصحي ، حيث كان شخص مصاب يطير معي على متن الطائرة. سمعت الكثير عن تطبيق المراقبة الاجتماعية وحتى أنني قرأت مقالًا عن حبري ، حيث تعمق الناس في نسخته التجريبية. حسنًا ، ما هو نوع الباحث الذي لا يميل إلى الخوض في مثل هذا التطبيق المثير للاهتمام؟



سأقول على الفور إن هدفي لم يكن خداع النظام أو الهروب من الحجر الصحي. بصراحة قضيت أسبوعين في المنزل. حسنًا ، ذهبت إلى أقرب متجر بضع مرات لتناول الجعة. كان الهدف هو معرفة ما يعرفه هذا النظام عنا ومدى صحة بعض أقوال مؤلفيه. في البداية بدأت في جمع المعلومات الأولية. اكتشفت شيئًا مثل ما يلي:



  1. التطبيق مكتوب على أساس برنامج تعقب شاحنة القمامة. ما لم أجده تأكيدًا معقولًا ، كما أن البحث في الأجزاء الداخلية للبرنامج لم يؤكد أي شيء من هذا القبيل.
  2. لم تكن النسخة التجريبية محمية بأي شكل من الأشكال ، فقد تم فك تجميعها وتحميلها على جيثب. ومع ذلك ، تمت إزالته من github بناءً على طلب صاحب حقوق النشر.
  3. نقلت النسخة التجريبية الصور إلى خادم في إستونيا لاستخدام خدمة التعرف على الوجوه.
  4. ثم قرأت بيان رئيس DIT Eduard Lysenko ، الذي قال ما يلي: "نفى رئيس DIT Moscow بشكل قاطع المعلومات التي تفيد بأن التطبيق ينقل الصور إلى خادم جهة خارجية:" في الواقع ، لا يتم نقل أي شيء في أي مكان "، قال. - أولاً ، لا يتم نقل أي صور من حيث المبدأ. ثانيًا ، رمز المقاييس الحيوية الذي يظهر ، يذهب حصريًا إلى خوادم DIT ". هنا كنت أتساءل بالفعل كيف لا يتم نقل هذه الصور من حيث المبدأ. هل تم تحويلها إلى رمز بيولوجي على هاتفك الذكي؟
  5. النسخة الجديدة من البرنامج غامضة للغاية والآن يكاد يكون من المستحيل تحليلها.


ثم جمعت شائعات من الأصدقاء والمعارف:



  1. في الواقع ، لم يتم نقل صورة واحدة ، بل تم نقل سلسلة من الصور. يتم ذلك بحيث يستحيل التقاط صورة لصورتك الورقية. أو حتى يتم نقل الفيديو.
  2. , .


لقد وضعت التطبيق "المباشر" بصراحة على iPhone ولم أخطط للدخول فيه على الإطلاق. لم يكن لدي جهاز iPhone يمكنني وضع جيلبريك عليه معي ، لكن كان لدي Android متجذر. لقد بدأت معه. بالمناسبة ، لا يبدأ التطبيق على Android الذي تم عمل روت له. تشويش كود جافا يبدو مضحكا. تمت إعادة تسمية جميع المتغيرات وأسماء الوظائف. لكن ، عبر السلسلة ، نجد أنفسنا على جزء من التعليمات البرمجية يمكن قراءته تمامًا. حول كيفية السير عبر قائمة مفكك ، فقط في نهاية المفاجأة. كنت سأقضي يومين على الأقل في البحث في هذا الرمز ، لكن فجأة توصلت إلى حل أبسط. ولكن ماذا لو ... وثقوا في نظام التشغيل للتحقق من شهادات 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" ولا شيء أكثر من ذلك. إذا كان الهاتف موجودًا في قاعدة البيانات ، فستتلقى رسالة نصية قصيرة تحتوي على رمز يجب إدخاله في التطبيق. إذا لم يكن هناك هاتف في قاعدة البيانات ، فلن يأتي شيء. يحتوي معرف الجهاز على UDID الخاص بجهاز iPhone. كل شيء مرتبط بهذا المعرف. إذا تعطل 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.



الدقة - دقة تحديد الإحداثيات ، لا أعرف في أي وحدات

battery_level - مستوى شحن البطارية. أتساءل لماذا DIT-y؟

الشحن - ما إذا كان الهاتف يشحن. كما أنه من غير الواضح سبب انتقاله.

datetime - التاريخ والوقت الحاليان. ربما يتم استخدامه بحيث يستحيل "تحريف" الوقت على الجهاز.

device_model - طراز الهاتف. حسنًا ، لست آسفًا إذا اكتشفت DIT هذا الأمر.

الملاحة الداخلية ممتعة جدا. فيما يلي قائمة بشبكات wifi المعروفة والتي يمكنك من خلالها تحديد التنسيق. ومع ذلك ، لا يتم إرسال 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>


الشيء الأكثر إثارة للاهتمام حول استجابة الخادم هو "quarantine: null". هذا يعني أن الحجر الصحي قد انتهى. لكن التطبيق لا يخبرك بذلك. علاوة على ذلك ، في الرسالة ، ما زالوا يعدون بطلب صور شخصية. وما زالت الحالة نشطة. والإحداثيات ... حسنًا ، بالطبع يستمر التطبيق في إرسال إحداثيات الجهاز إلى خادم DIT! لذلك ، قم بإلغاء تثبيت التطبيق فور انتهاء العزل.



ماذا يمكن ان يفعل



مما تم كتابته ، من الواضح أنه يمكنك كتابة برنامج نصي يحاكي تشغيل التطبيق ويرسل جميع البيانات اللازمة. الكتابة صعبة بسبب حقيقة أنه من السهل التقاط عقوبة أثناء الاختبار. بادئ ذي بدء ، تحتاج إلى شم عملية التسجيل بأكملها حتى النهاية ، بما في ذلك وقت تلقي رسالة نصية قصيرة تحتوي على رمز. التعامل مع مصادقة الحامل والتوافه الأخرى. من الممكن أن يقوموا بتحليل تسجيلات EXIF ​​للصور. حيث يوجد وقت محدد وكذلك إحداثيات. لذلك ، سيكون الحل هو عمل الكثير من الصور المختلفة مسبقًا ، وتعديل EXIF ​​سريعًا قبل الإرسال.



حسنًا ، في الختام ، أود أن أقول إنني لا أحث أي شخص بأي حال من الأحوال على انتهاك الحجر الصحي ، خاصة مع اختبار إيجابي لفيروس كورونا. هذا مجرد تحليل للنظام وحصاة صغيرة في حديقة DIT ، الذين يحبون الإدلاء بتصريحات عامة غريبة. لا تمرض!



All Articles