Microsoft Tag – 2D Barcode – Protokollanalyse und Sicherheit

Marc berichtete gestern über Microsoft Tag. Tag ist ein 2D-Barcode, der mittels 4 verschiedenen Farben und deren Kombinationen einen Hash bildet.
Mit der Kamera des Handys wird der Tag aufgenommen und dann an einen Microsoft-Server geschickt. Dieser überprüft, ob der Hash registriert ist und liefert an den Client zurück, ob dieser Hash existiert. Hinter einem Hash kann sich ein Link, ein Freitext, eine Telefonnummer oder eine vCard verbergen.
Wenn der Hash existiert, werden eben diese Informationen zurückgesendet. Das Prinzip ist also ganz simpel.
Mir stellte sich nun die Frage, wohin gehen denn überhaupt die Daten und was wird an den Client gesendet?

Zur Überprüfung schloss ich mein HTC Touch Diamond mittels USB-Kabel an den PC an, startete Wireshark und schaute mir die Verbindungen an.
Sobald das Handy eine Anfrage an den Server stellt, wird an rs.tag.microsoft.com über TCP/80 (normales HTTP) ein GET-Request gesendet. Der GET-Request sieht folgendermaßen aus

GET /6FADWESYVPYSPHHQ5TMKHGSWF3ODWWRP.aspx?Level=1&VID=1%2B71&TH=_%2BxrkrK8F013hNEWheA%24&PL=zqMa3C48QBs_4fI9cRZKGpvix1XhvxuqEQ1eFlqKqwlbXzl%2BgvWxM7zTaq0xRFcdWuneeC5VRGuYitVRubwb1kswVAc19dpoJDZEf5HpqlbHvw7WPzpVYibwvX02LygEnOXbXbTbeM04VzICWva2GVdYXXKekdxPvL8evEZbJG5Xi8t9PUlVHOL_yS_dsXi2XT5cejeRsGArLzVpkvjcPLyyG6csBzoOTeHuKiZLTnKYgLcyxqMQvDQtIQ5J6rYFW19SZ4r1

rs.tag.microsoft.com liefert danach dann

<PAYLOAD><NAME>Deine</NAME><PIN>0</PIN><DATA>r6QEsUVaVGZOm9MVWDszHo_0vTzeonHOUytWESKQ3gVLLjl5kfK5IsvFGaJYLDsDGqrrMzErE1C3rNcrtKwYrE1J</DATA></PAYLOAD>

zurück.

Um etwas strukturierter an die Sache zu gehen, hier die Tests mit den einzelnen Typen.

Dialer

Request:

GET /7KDWMBOYE474DQA7PMH5KVDLDK4SGSZJ.aspx?Level=1&VID=1%2B71&TH=_%2BxrkrK8F01ahPoWheA%24&PL=tr8e2zMtRBU68uguaBwhGIz43Bv8ujayaxlTASP4zA8jQz15n%2BS1PbnAcL4oTjwfTfPFZDNOQ3PinthGwM580DMsUAAo5N5mISVebIjjwVTQpRXKIiFSelzksGpPXU8C5PnfWqnKfMM9RCgRQ_zdG0BCRm6DittXxqsTqz8pQ2gvl896IFhREufs0zzEuxO0SiRHZiqKt3hROzh%2B64q7OsSuH6AxFj4ASPL0OT9BJXCPmqwu27gXpE45LBkwmNEDI0NWYJfk

Response:

<PAYLOAD><NAME>Dialer</NAME><PIN>0</PIN><DATA>r6QEsUVaVGZOm9MVWDszHo_0vTzKymK1QjZaFzWG3RpKMy9onPusWcm3GKpCPVd5TvK9biFaSXqGgLRSycY$</DATA></PAYLOAD>

vCard (ohne Passwort)

Request:

GET /DYMDUQZA5HDH3KXOEV7X5DPS7S4U2ZSN.aspx?Level=1&VID=1%2B71&TH=_%2BxrkrK8FE1lhPwWheA%24&PL=utsO1EIiWgwg8OM9CRszE46boA79tyW5aQpEF1LpqREvJy127uurJKPCe61JSS4UT%2BW5fDJDSHjgjc9Qsd8Zzj9IQA9Z68B_OydVf%2Bnk01_Ss2nSIyxZcV73p3w%2BTCoc6J3PVdjFYtonRiMCIvvPEEJUOnaCh9BcxLgEvU44JnYj8991UVdPC_3u2C%2BlvAG_SDI7fiuHvHNTKC9ompveJMjKD69AGSAZUvD_Kl5GN3uNjNA22rUcr0wqOw9BibQdLydGb%2Bbr

Response:

<PAYLOAD><NAME>vCard unprotected</NAME><PIN>0</PIN><DATA>r6QEsUVaVGZOm9MVWDszHo_0vzrHpAndKDpLHSSHyAZULyRvgP+wN7DHcbFDPjsFOoTMGCswJXWBifsdzb0Pp1A4Sw9CjLRFaC8oCJezj3z7niaDZBR7HS2o_1FiZXxun5PHapHbEKVEKUZpKunHdUo9OxjV2KUqwdIJ3F0zIn43lNINNhJ0aO6Ryj7FrQqgWChJEU3WlwFeK1obio6qQKjLetIqMxw_S4bRfUogOAXwx+M8y7cErTw+XAA27sQbUCU4coD_0wSelQ2CYw8rIxrjiFxUKCIOhY63Rd_EcqJaMTs$</DATA></PAYLOAD>

URL

Request:

GET /7JGMIVQUKMNDPCW5ET5CRG4JP4KB35LK.aspx?Level=1&VID=1%2B71&TH=_%2BxrkrK8FE1mhNkWheA%24&PL=sNsc3yQ5RQU%2B9IVKZBI5d%2B6Q2HmepDnPZWwqF1zsxQclJz99iPC0Lb3GHdokQCRwL%2B7BClFOSA7s66FQv9p12DVIUgQ_8N92JSMzCITt2TuyuBGkQCFZB1KRyXwwSUYK4p3dXr7efdM5QkV1T_LFdCJfQgDhitAqyN5qvUA9SmAp881%2BN0xQAuPqvljItQvbKDlDCEiKvAVfTkFolJ6yMsLKHaQmAj8QTPSZXTNPPR_th6hAubgc2UBMVQ9PjNgLJSdUZIDw

Response:

Location: http://wap.ecw.de

Hier eine kurze Anmerkung: Bei einer URL wird im HTTP-Header ein Location-Feld zurückgeliefert. Sobald der Tag mit der Software geladen wurde und Microsoft die Antwort liefert, wird der Standard-Browser des Handys aufgerufen – ohne Nachfrage! Sicherheitstechnisch äußerst bedenklich – man stelle sich nur mal vor, dass man z.B. eine Bank mit einer falschen URL taggt. Der Benutzer nimmt das Tag auf, der Browser öffnet sich und der Nutzer sieht die gefälschte Bank-Seite.

vCard (mit Passwort)

Request:

GET /KV4PWBAKHRXTHEGERKNRYY3YKY4PIMYZ.aspx?Level=1&VID=1%2B71&TH=_%2BxrkrK8FE1shOYWheA%24&PL=u6Ad3j4pJwMiiPcxZAsqBO2GzWTuvHS7FghEEkeI3g4uXD58kuDWK6G6b6EkWTcDLPjUCSFXN3qfj89VpL5u0T4zUwUl4L1wOV9Bc4T0ykixrgSnMDgmcyH1p3krLV0D6ebcX6TOH9UlPjcOT%2BvWByFJVwORk69eu7oEuFtZUWkiiMx_LVwyBP%2BWzCPIrBioKy9WCziTw3EsKi9tj_qpO8mxHKU8El0WUIjrJjNWLmzukb1DyaFjrTMoOwpU6MMCLlxVZZrg

Response:

<PAYLOAD><NAME>vCard protected</NAME><PIN>1</PIN><DATA>s61ur1A7XGooj8JqXDc9HIPlxTnMvxujU1pdGjOKug5IJk5xlZ64O9bTYM5HMjUHNpW2GyArNwv66e0a2rB9r0wxIRFX7bxJDjs5d5O_gX73j1yAbw9pY1bI6VZ1aA5mg5qtdIS6GKkiPVcWLuXJd0YsQRvew7dUurIf20o+UHYrnbgTI3N8ZIiF20HBoQSiVDkzEkbNhX8lS0wcnYPYSLTCEMw_UhQzLZLAAk4sNgf81pk_wKwW00deSgch47YTTCxSbJWe2wj4gRz9ZwMlIRby8l9fMzBw_u6hQsjJAKpGOFE$</DATA></PAYLOAD>

Freitext
Request:

GET /I6YA3RA6VSFCYMAO5AI7XYQAZKBJNJZD.aspx?Level=1&VID=1%2B71&TH=_%2BxrkrK8FE1vhN4WheA%24&PL=pKQToEA4JxxD7IQ6exQsDI2Iwh3ipma9bA9VGUCIqQsxWDAC7PHWNMDeHKo7RjELTPbbdS1MSHzliN5eo74Z1CE3XXtb8b1vWDsyeJvrzEDRoAvbPCNZdVvytnIsLSoG9uLSIdrfH8pEWkQFUPTQD0FHWH%2BdiNBYwb0Vs1xZJmw9jMIBU00yG57yvyjXsx6gSyFZdzSIvHdWLT5miPrePta1EttCA10JMeyYLSxJKGSOn7I_xbocq0kvKgFT6LQHMVhbG%2BTx

Response:

<PAYLOAD><NAME>Free Text</NAME><PIN>0</PIN><DATA>r6QEsUVaVGZOm9MVWDszHo_0vTzeonHOUytWESKQ3gVLLjl5kfK5IsvFGaJYLDsPHq_pOTExB1i37Mo4z70FoCc$</DATA></PAYLOAD>

Anmerkungen
Die zu ladende Datei (….aspx) und der GET-Parameter “TH” ergeben eventuell die ID. Ich habe zwei verschiedene Schnappschüsse des FreeText-Tags gemacht und jedesmal war die ASP-Seite und der TH-Parameter identisch. Der PL-Parameter änderte sich hingegen. Liefert Microsoft da eventuell irgendwelche GPS-Koordinaten mit? Ich kann leider die Daten nicht entschlüsseln – die Strings scheinen zwar Base64-codiert zu sein. Ein Encoding brachte aber kein verwertbares Ergebnis.

Vielleicht kann irgendwer mit diesen Erkenntnissen etwas anfangen. Viel interessanter fände ich es, wenn man seinen eigenen Tag-Provider hinterlegen könnte und wenn das Protokoll vor allem offen und standardisiert wäre.

Btw: Mit Hilfe des Tags könnte man z.B. eine Türklingel für das Eingangsschild der Wohnung realisieren: Tag an das Namensschild, Gast ent-taggt das Foto, Windows Live ruft eine URL auf dem Home-Server des Gastgebers auf. Das dahinter-hinterliegende Script startet den Musik-Player… Eigentlich ganz cool 🙂

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>