Social Monitoring-Anwendung: Verkehrsanalyse

Alles begann mit einer Ankunft in Moskau. Wie erwartet habe ich den erforderlichen PCR-Test für covid bestanden, auf ein negatives Ergebnis gewartet, es in die staatlichen Dienste hochgeladen und ... entschieden, dass dies das Ende meiner Moskauer Abenteuer war. Aber alles stellte sich als nicht so einfach heraus. Ein Arzt kam plötzlich zu mir. Und er übergab ein Dekret, dass ich zwei Wochen lang in Quarantäne zu Hause bleiben musste, da eine infizierte Person mit mir im Flugzeug flog. Ich habe viel über die Social Monitoring-Anwendung gehört und sogar einen Artikel über Habré gelesen, in dem sich die Leute mit der Beta-Version befasst haben. Nun, welche Art von Forscher wäre nicht versucht, sich mit einer so interessanten Anwendung zu befassen?



Ich werde sofort sagen, dass mein Ziel nicht darin bestand, das System zu täuschen oder der Quarantäne zu entkommen. Ich habe ehrlich gesagt meine 2 Wochen zu Hause verbracht. Okay, ich ging ein paar Mal zum nächsten Laden, um ein Bier zu trinken. Das Ziel war zu sehen, was dieses System über uns weiß und wie wahr einige der Aussagen seiner Autoren sind. Zuerst fing ich an, vorläufige Informationen zu sammeln. Ich habe so etwas herausgefunden:



  1. Die Anwendung basiert auf dem Müllwagen-Tracker-Programm. Was ich nicht als vernünftige Bestätigung empfand und mich in die Interna des Programms vertiefte, bestätigte auch nichts dergleichen.
  2. Die Beta-Version war in keiner Weise geschützt, sie wurde dekompiliert und auf github hochgeladen. Es wurde jedoch auf Antrag des Copyright-Inhabers aus dem Github entfernt.
  3. Die Beta-Version übertrug Bilder an einen Server in Estland, um den Gesichtserkennungsdienst zu nutzen.
  4. Dann las ich die Aussage des Leiters des DIT, Eduard Lysenko, der Folgendes sagte: „Der Leiter des DIT in Moskau bestritt kategorisch die Information, dass die Anwendung Fotos an einen Server eines Drittanbieters überträgt:„ Tatsächlich wird nirgendwo etwas übertragen “, sagte er. - Erstens werden grundsätzlich keine Fotos übertragen. Zweitens geht der angezeigte biometrische Code ausschließlich an die DIT-Server. " Hier habe ich mich schon gefragt, wie diese Bilder grundsätzlich nicht übertragen werden. Werden sie direkt auf Ihrem Smartphone in einen biometrischen Code umgewandelt?
  5. Die neue Version des Programms ist stark verschleiert und jetzt ist es fast unmöglich, sie zu analysieren.


Dann sammelte ich Gerüchte von Freunden und Bekannten:



  1. Tatsächlich wird nicht ein Foto übertragen, sondern eine Reihe von Fotos. Dies geschieht so, dass es unmöglich ist, ein Foto von Ihrem Papierfoto zu machen. Oder sogar das Video wird übertragen.
  2. , .


Ich habe die "Live" -Anwendung ehrlich auf das iPhone gestellt und hatte überhaupt nicht vor, darauf einzugehen. Ich hatte kein iPhone, auf das ich einen Jailbreak setzen konnte, aber ich hatte ein verwurzeltes Android. Ich habe mit ihm angefangen. Auf gerootetem Android startet die Anwendung übrigens nicht. Das Verschleiern von Java-Code sieht lustig aus. Alle Variablen und Funktionsnamen wurden umbenannt. Beim Durchlaufen der Kette befinden wir uns jedoch auf einem vollständig lesbaren Code. Ungefähr wie man durch eine Disassembler-Liste geht, nur am Ende der Überraschung. Ich hätte mindestens ein paar Tage damit verbracht, diesen Code zu durchsuchen, aber plötzlich kam ich auf eine einfachere Lösung. Aber was ist, wenn ... sie dem Betriebssystem vertrauen, dass es SSL-Zertifikate überprüft? Bei der Arbeit muss ich manchmal die Protokolle von Apple, Google, WhatsApp und vielen anderen umkehren. In fast allen Systemen sind Stammzertifikate in das Programm integriert, was die Analyse des Datenverkehrs sehr schwierig macht.



Ich habe Mitmproxy auf MacBook installiert, einen sehr praktischen Verkehrsanalysator mit einem Minimum an Einstellungen. Ich lade ihr Stammzertifikat herunter, füge dem iPhone ein Profil hinzu - und fertig! Wir sehen den gesamten Programmverkehr auf einen Blick.



Anmeldung zur Bewerbung



Sie müssen die Anwendung innerhalb von 24 Stunden nach Beginn der Quarantäne installieren und registrieren. Bei dieser Gelegenheit kommt eine SMS herein. Bisher war es sinnlos, nur das Telefon wurde nicht in der Datenbank gefunden. So sieht die Registrierungsanfrage aus:



<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>


Als Antwort bekommen wir immer "200 OK" und nichts weiter. Befindet sich das Telefon in der Datenbank, erhalten Sie eine SMS mit einem Code, der in die Anwendung eingegeben werden muss. Wenn sich kein Telefon in der Datenbank befindet, wird nichts kommen. Die Geräte-ID enthält die UDID des iPhone. Alles ist an diese Kennung gebunden. Wenn das iPhone kaputt geht und wir ein neues aus dem Backup auswählen, funktioniert die Anwendung nicht. Und es wird eine Geldstrafe geben, mit der nicht klar ist, wie man damit umgeht. Im Folgenden werden private Daten ganz oder teilweise durch „XXYYZZ“ ersetzt.



Übertragung koordinieren



Dann nahm ich den Mut zusammen und verband ein "Live" -Telefon über Mitmproxy. Alle 5-10 Minuten sowie beim Start der Anwendung wird die folgende Anfrage gestellt:



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)"
    }
]


Hier sehen wir wieder deviceId, es ist anders, ich habe die erste Anfrage vom iPad gestellt.



Genauigkeit - die Genauigkeit der Bestimmung der Koordinaten, ich weiß nicht, in welchen Einheiten

Batteriestand - der Batterieladezustand. Ich frage mich, warum er DIT ist?

Laden - ob das Telefon aufgeladen wird. Es ist auch unklar, warum es übertragen wird.

Datum / Uhrzeit - das aktuelle Datum und die aktuelle Uhrzeit. Vielleicht wird es verwendet, damit es unmöglich ist, die Zeit auf dem Gerät zu "verdrehen".

device_model - Telefonmodell. Nun, es tut mir nicht leid, wenn DIT davon erfährt.

IndoorNavigation ist ziemlich interessant. Hier ist eine Liste bekannter WLAN-Netzwerke, anhand derer Sie die Koordinate bestimmen können. Die BSSID wird jedoch nicht übertragen, wodurch diese Informationen völlig unbrauchbar werden. Die Koordinaten können nicht durch den Netzwerknamen bestimmt werden.

install_datetime - Kann zum Schutz vor der Emulation dieser Anforderungen verwendet werden. Diese Informationen können zwar auf Wunsch erhalten werden und sind recht einfach.

lat, lon - eigentlich

location_status- Koordinaten - ob GPS aktiviert ist und ob das Programm es im Hintergrund verwenden darf. Wenn nicht, wird es eine Geldstrafe geben.

os_version - iOS-Version

version_ext - hat möglicherweise die Version der Anwendung selbst nicht verstanden



Selfie-Übertragung



Der Spaß beginnt. Schnüffeln Sie am Verkehr, sobald Sie das aufgenommene Selfie übertragen haben. Wo sind unsere biometrischen Hashes und Videos? Und hier ist, was tatsächlich passiert:



<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>


Nun, alles ist klar, oder? Dieser Teil ist etwas stärker geschützt, die Anfrage enthält auch das Inhaber-Token, nach dem die Autorisierung organisiert ist. In dem Moment, in dem ich den Token erhalten habe, habe ich nicht gerochen, vielleicht kommt der Token, wenn ich ein Selfie anfordere. Genau ein Foto geht. Wo ist Ihr biometrischer Hash, Mr. Lysenko?



Statusanforderung und Quarantänefreigabe



Neben dem Senden von Koordinaten stellt die Anwendung regelmäßig eine Statusanfrage. Übrigens ist es möglich, dass bei der Anforderung eines Status eine Anforderung zum Aufnehmen eines Selfies eingeht. Als die Anwendung aufhörte, mich nach einem Selfie zu fragen, schnüffelte ich aus Interesse an der Statusanfrage:



<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>


Das Interessanteste an der Serverantwort ist "Quarantäne: null". Dies bedeutet, dass die Quarantäne beendet wurde. Aber die App sagt dir das nicht. Darüber hinaus versprechen sie in der Nachricht immer noch, Selfies anzufordern. Und der Status ist noch aktiv. Und die Koordinaten ... natürlich sendet die Anwendung weiterhin die Gerätekoordinaten an den DIT-Server! Deinstallieren Sie die Anwendung daher sofort nach Beendigung der Quarantäne.



Was kann getan werden?



Aus dem Geschriebenen geht hervor, dass Sie ein Skript schreiben können, das den Betrieb der Anwendung emuliert und alle erforderlichen Daten sendet. Das Schreiben wird dadurch erschwert, dass es beim Testen leicht ist, eine Strafe zu erhalten. Zunächst müssen Sie den gesamten Registrierungsprozess bis zum Ende verfolgen, auch zum Zeitpunkt des Empfangs einer SMS mit einem Code. Beschäftige dich mit der Inhaberauthentifizierung und anderen Kleinigkeiten. Es ist möglich, dass sie EXIF-Aufzeichnungen von Fotos analysieren. In dem gibt es eine genaue Zeit sowie Koordinaten. Daher besteht die Lösung darin, im Voraus viele verschiedene Fotos zu erstellen und EXIF ​​vor dem Senden im laufenden Betrieb zu bearbeiten.



Abschließend möchte ich sagen, dass ich auf keinen Fall jemanden auffordere, die Quarantäne zu verletzen, insbesondere nicht mit einem positiven Test auf Coronavirus. Dies ist nur eine Analyse des Systems und ein kleiner Kieselstein im Garten des DIT, der gerne seltsame öffentliche Aussagen macht. Sei nicht krank!



All Articles