Last Mile Telemetrie

Irgendwie habe ich es ja schon immer geahnt, dass Microsoft meinen Client zur Überwachung der Dienste nutzt. Es ist der OneDrive-Client, der die Cloud checkt und Rückmeldung gibt. Also habe ich mich auf die Suche gemacht.

Erste Spur

Microsoft möchte natürlich wissen, wie gut die Clients an die Dienste in der Cloud kommen Da bietet es sich ja an, eine auf dem Client installierte Software zu verwenden. Ich habe zuerst einmal wieder Fiddler gestartet und gewartet. Nach einige Zeit habe ich dann auch den ersten Treffer gefunden:

Hier gibt sich eine Software mit dem UserAgent "Last Mile Telemetry" aus und lädt ein kleines 43byte großes GIF-Bild Exchange Online.

URL-Liste

Ich gehe mal davon aus, dass der Prozess immer den gleichen User-Agent nutzt, so dass ich einfach darauf filtern konnte. Folgende Image-URLs habe ich wärend eines knapp 90 minütigen Mitschnitts gefunden:

https://outlook.office.com//apc//trans.gif
https://outlook.office365.com//apc//trans.gif
https://msxfaq-my.sharepoint.com/_layouts/15/images/fp/trans.gif
https://msxfaq.sharepoint.com/_layouts/15/images/fp/trans.gif
https://spo-ring.msedge.net//apc//trans.gif
https://statics.teams.cdn.office.net//apc//trans.gif
https://teams.microsoft.com//apc//trans.gif

Alle Adressen können anonym ohne Authentifizierung aufgefunden werden. Auch der doppelte "//" ist hier normal und erlaubt und können einfach per Invoke-Webrequest abgerufen werden

Soweit erst einmal nichts Geheimes zu sehen.

Interval

Als nächste wollte ich natürlich wissen, in welchem Intervall diese Dateien abgerufen werden. Ich habe die Request nach der URL sortiert und sehen Sie selbst:

Der Client lädt die Bilder im gleichen Abständen zu vier Abrufen jede Stunde pro URL und dann immer zwei Paare mit einem Abstand von ca. 38 Sekunden.

Damit hat Microsoft im Idealfall 24 Messungen a 4 Dateien pro Client. Ein Standort mit 1000 aktiven PCs würde dann in 8 Arbeitsstunden 32000 Requests mit 43 Bytes Bild + Overhead auslösen. Das hört sich viel an aber sie können sicher sein, dass produktive Mitarbeiter deutlich mehr Nutzdaten übertragen.

Konfiguration

Mit dem UserAgent habe ich noch eine interessante URL gefunden.

https://config.fp.measure.office.com/conf/v2/odsync2/fpconfig.min.json

Diese URL ruft der Client per GET immer kurz vor den Tests ab. Die Rückgabe ist eine JSON-Datei mit Testkonfigurationen:

Decodiert sieht die Datei wie folgt aus. Das sind wohl die URLs, die der "Last Mile Telemetrie-Agent" prüfen kann.

{
   "s": 5000,
   "n": 11,
   "e": [
      {"e": "*.sharepoint.com",                    "w": 10, "m": 8,     "o": "/_layouts/15/images/fp/100k.gif"},
      {"e": "*.sharepoint.com",                    "w": 20, "m": 132,   "o": "/_layouts/15/images/fp/trans.gif"},
      {"e": "*.sharepoint.com",                    "w": 10, "m": 12288, "o": "/_layouts/15/transfertest/transfertest"},
      {"e": "*-my.sharepoint.com",                 "w": 20, "m": 132,   "o": "/_layouts/15/images/fp/trans.gif"},
      {"e": "farmurlsubstitution.sharepoint.com",  "w": 20, "m": 128,   "o": "/_layouts/15/images/fp/trans.gif"},
      {"e": "outlook.office.com",                  "w": 20, "m": 132    },
      {"e": "outlook.office365.com",               "w": 20, "m": 132    },
      {"e": "spo-ring.msedge.net",                 "w": 10, "m": 128    },
      {"e": "statics.teams.cdn.office.net",        "w": 10, "m": 1164   },
      {"e": "teams.microsoft.com",                 "w": 10, "m": 1164   },
      {"e": "worldaz.tr.teams.microsoft.com",      "w": 20, "m": 114688 }
   ],
   "r": ["upload.fp.measure.office.com/r.gif","upload2.fp.measure.office.com/r.gif"]
}

Interessanterweise entsprechend diese URLs aber nicht meinen Beobachtungen im Fiddler und eine Bedeutung der Zahlen hinter "w" und "m" erschließt sich mir auch noch nicht.

Upload

Nach einem Testdurchlauf finde ich auch noch die Rückmeldung an die Cloud:

Es ist einfacher GET, bei dem aber die Ergebnisse über die Parameter mitgegeben werden.

Die Rückgabe ist wieder ein kleines GIF89a-Bild. Anscheinend will Microsoft damit möglichst unauffällig agieren. Allerdings sind das nur Rückmeldungen zu Sharepoint und er verrät an Microsoft, über welche Netzwerkkarte er den Abruf getätigt hat. Interessanterweise hat er aus "*.sharepoint.com" in der Konfiguration ein "star.sharepoint.com" gemacht. Auch das erhaltene Zertifikat wird gemeldet. Ob hier bei Microsoft jemand irritiert schaut, dass der OneDrive-Client hier das Fiddler-Zertifikat gesehen hat?

[
   {
      "T": 128,
      "RequestID": "star.sharepoint.com",
      "Ep": "191576",
      "Conn": "cold",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "0b3e8c73d738878e35c79fba7b963d0aed0d5804",
      "Fe": "FarmDirect",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"52.104.0.27\"}",
      "Pt": "1",
      "Result": 1066
   },
   {
      "T": 128,
      "RequestID": "star.sharepoint.com",
      "Ep": "191576",
      "Conn": "warm",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "0b3e8c73d738878e35c79fba7b963d0aed0d5804",
      "Fe": "FarmDirect",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"52.104.0.27\"}",
      "Pt": "1",
      "Result": 107
   },
   {
      "T": 128,
      "RequestID": "star.sharepoint.com",
      "Ep": "191576",
      "Conn": "cold",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "0b3e8c73d738878e35c79fba7b963d0aed0d5804",
      "Fe": "FarmDirect",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"52.104.0.27\"}",
      "Pt": "1",
      "Result": 1018
   },
   {
      "T": 128,
      "RequestID": "star.sharepoint.com",
      "Ep": "191576",
      "Conn": "warm",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "0b3e8c73d738878e35c79fba7b963d0aed0d5804",
      "Fe": "FarmDirect",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"52.104.0.27\"}",
      "Pt": "1",
      "Result": 101
   },
   {
      "T": 128,
      "RequestID": "outlook.office365.com",
      "Rip": "2a00:6020:b007::",
      "Ep": "AMS",
      "Conn": "cold",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "ff379f7f82830456ecb1fc79482fcf017423989e",
      "Fe": "cafe",
      "Mn": "AM4PR0302CA0023",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"2603:1026:c03:3031::2\"}",
      "Pt": "1",
      "Result": 664
   },
   {
      "T": 128,
      "RequestID": "outlook.office365.com",
      "Rip": "2a00:6020:b007::",
      "Ep": "AMS",
      "Conn": "warm",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "ff379f7f82830456ecb1fc79482fcf017423989e",
      "Fe": "cafe",
      "Mn": "AM4PR0302CA0023",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"2603:1026:c03:3031::2\"}",
      "Pt": "1",
      "Result": 16
   },
   {
      "T": 128,
      "RequestID": "spo-ring.msedge.net",
      "Rip": "2a00:6020::",
      "Ep": "AM3",
      "Conn": "cold",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "314c11e154cb2456bf99f9e40d5ca9c7f3a60b5b",
      "Fe": "AFD",
      "Mn": "AM3EDGE0110",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"2620:1ec:8f8::254\"}",
      "Pt": "1",
      "Result": 680
   },
   {
      "T": 128,
      "RequestID": "spo-ring.msedge.net",
      "Rip": "2a00:6020::",
      "Ep": "AM3",
      "Conn": "warm",
      "Object": "trans.gif",
      "Cib": "DO_NOT_TRUST_FiddlerRoot;DO_NOT_TRUST_BC",
      "Ctp": "314c11e154cb2456bf99f9e40d5ca9c7f3a60b5b",
      "Fe": "AFD",
      "Mn": "AM3EDGE0110",
      "Dsip": "127.0.0.1",
      "Ann": "{\"aName\":\"vEthernet (Extern)\",\"aDesc\":\"Hyper-V Virtual Ethernet Adapter #3\",\"aBitMap\":\"8\",\"aIfType\":\"6\",\"aDestIp\":\"2620:1ec:8f8::254\"}",
      "Pt": "1",
      "Result": 23
   }
]

Offen

Diese Analysen waren ja noch recht einfach. Aber es gibt durchaus noch Fragen, die ich noch nicht abschließend beantwortet habe.

  • Was macht der Client noch?
    Im Wireshark-Trace habe ich den ein oder anderen "Traceroute" gefunden, den ich aber nicht auf einen Prozess zuordnen konnte. Es würde sich natürlich anbieten, über dieses Werkzeug auch eine Landkarte des Internets mit den Zwischenstationen und groben Latenzzeiten zu erstellen. Aber ich habe noch nicht bestätigen können, dass OneDrive der Urheber ist und die Daten auch zu Microsoft meldet
  • HTTP ist nicht UDP
    Webtraffic ist zwar viel aber nicht alles. Ich hätte mir schon gedacht, dass Microsoft auch schon Messungen zu QUIC durchführt. Aber das kann ein Update noch nachliefern.
  • Sehr großes Intervall
    Ich bin etwas überrascht, dass Microsoft nur einmal in der Stunde mit vier Requests arbeitet. Vermutlich reicht das Microsoft als "Big Data"-Analysen, um schlechte Provider oder Flecken im Internet zu ermitteln. Wenn Millionen von OneDrive-Clients das machen, dann kommen schon einige Requests zusammen. Für eine individuelle Analyse eines Clients reicht das natürlich nicht.
  • Anzeige und Auswertung
    Auf dem OneDrive-Client gibt es meines Wissens nach keine Aussage zur Messung. Es "soll" irgendwann wohl im Office 365-Portal einen Weg geben, diese Daten auszuwerten. Einige Portale wie https://connectivity.office.com/status zeigen Dinge an, wobei ich nicht weiß, woher diese Daten kommen.

Es bleibt spannend, wann Microsoft in welchem Umfang die Daten aus OneDrive, aber auch Outlook, Teams und anderen Quellen auch den Tenant-Administratoren zur Verfügung stellt. Bis dahin bleiben nur eigene Skripte wie mein Ende zu Ende Monitoring

Weitere Links