{"id":178205,"date":"2016-06-12T12:37:01","date_gmt":"2016-06-12T10:37:01","guid":{"rendered":"http:\/\/www.borncity.com\/blog\/?p=178205"},"modified":"2019-03-21T10:52:27","modified_gmt":"2019-03-21T09:52:27","slug":"autsch-ungefragter-telemetrie-code-in-vc-c-programmen","status":"publish","type":"post","link":"https:\/\/borncity.com\/blog\/2016\/06\/12\/autsch-ungefragter-telemetrie-code-in-vc-c-programmen\/","title":{"rendered":"Autsch: Ungefragter Telemetrie-Code in VC C++-Programmen"},"content":{"rendered":"<p><img decoding=\"async\" style=\"float: left; margin: 0px 10px 0px 0px; display: inline;\" src=\"https:\/\/borncity.com\/blog\/wp-content\/uploads\/2015\/01\/Stop.jpg\" align=\"left\" \/>Microsoft ist mal wieder mit den Fingern im Honigtopf erwischt worden. Wer mit Visual Studio 2015 Programme in C++ entwickelt, liefert im Hintergrund Code mit, der zur Erfassung von Telemetriedaten dienen kann. War nur ein Versehen und wird beim n\u00e4chsten Update wieder ausgebaut.<\/p>\n<p><!--more--><\/p>\n<h3>Eine Diskussion bei Reddit als 'Stein des Ansto\u00dfes'<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ssl-vg03.met.vgwort.de\/na\/dbe944eb90084f1bb4d60a61c4d0f095\" alt=\"\" width=\"1\" height=\"1\" \/>Erste Hinweise auf dieses Verhalten, welches wohl in Visual Studio 2015 bei C++ auftritt, findet sich seit ca. einem Monat <a href=\"https:\/\/www.reddit.com\/r\/cpp\/comments\/4ibauu\/visual_studio_adding_telemetry_function_calls_to\/\" target=\"_blank\" rel=\"noopener noreferrer\">bei Reddit.com<\/a>. Einem <a href=\"https:\/\/habrahabr.ru\/post\/281374\/\" target=\"_blank\" rel=\"noopener noreferrer\">russischen Entwickler<\/a> war aufgefallen, dass seine C++-Programme bei der Ausf\u00fchrung Funktionsaufrufe der Art: <em>__telemetry_main_invoke_trigger(nullptr);<\/em> in den Laufzeitcode einbinden. Bei <a href=\"https:\/\/www.infoq.com\/news\/2016\/06\/visual-cpp-telemetry\" target=\"_blank\" rel=\"noopener noreferrer\">infoq.com<\/a> hat man sich des Themas angenommen und das Ganze best\u00e4tigt. Hier ein Auszug eines minimalen Programms (Quellcode links, Maschinencode rechts), welches kaum etwas tut.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/i.imgur.com\/TiVrXyf.png\" width=\"602\" height=\"285\" \/><br \/>\n(Quelle: infoq.com)<\/p>\n<p>Beim Aufruf wird ein Zeitstempel oder das Module Load-Ereignis per Event Tracing for Windows (ETW) in eine Protokolldatei geschrieben. Das sind zwar nur lokale Eintr\u00e4ge, die aber \u00fcber Telemetriefunktionen leicht nach \"au\u00dfen\" \u00fcbertragen werden k\u00f6nnen. Das Pikante: Der Code wird ungefragt eingebaut und kann nur \u00fcber einen Linker-Parameter <em>notelemetry.obj<\/em> stoppen.<\/p>\n<h3>Alles nur ein Versehen, man hat die Implikationen nicht bedacht<\/h3>\n<p>Nachdem das Ganze ruchbar wurde, meldete sich Steve Carroll, Entwicklungs-Manager beim Visual C++-Team, im Reddit-Tread und entschuldigte sich:<\/p>\n<div class=\"reddit-embed\" data-embed-created=\"2016-06-12T10:10:12.247Z\" data-embed-live=\"false\" data-embed-parent=\"false\" data-embed-media=\"www.redditmedia.com\"><a href=\"https:\/\/www.reddit.com\/r\/cpp\/comments\/4ibauu\/visual_studio_adding_telemetry_function_calls_to\/d30dmvu\">Comment<\/a> from discussion <a href=\"https:\/\/www.reddit.com\/r\/cpp\/comments\/4ibauu\/visual_studio_adding_telemetry_function_calls_to\/\">Visual Studio adding telemetry function calls to binary?<\/a>.<\/div>\n<p><script src=\"https:\/\/www.redditstatic.com\/comment-embed.js\" async=\"\"><\/script><\/p>\n<p>Der Code soll beim Update 3 f\u00fcr Visual Studio 2015 wieder \"ausgebaut\" werden. Idee hinter dem Ansatz war \"ein Framework zu brauen, welches Performance Probleme analysieren helfen sollte\". Dabei habe man \u00fcbersehen, dass dies \"nicht jedem Recht sei\" und zu Spekulationen bez\u00fcglich der Verwendung f\u00fchren k\u00f6nnte.<\/p>\n<h3>Interessant: Dokument, wo man Datentransfer an MS-Server stoppen kann<\/h3>\n<p>Im Posting von Carroll findet sich \u00fcbrigens noch ein interessanter Link auf <a href=\"http:\/\/web.archive.org\/web\/20170221052223\/https:\/\/technet.microsoft.com\/en-us\/itpro\/windows\/manage\/manage-connections-from-windows-operating-system-components-to-microsoft-services\" target=\"_blank\" rel=\"noopener noreferrer\">diese Microsoft-Seite<\/a>, die sich mit dem Thema \"Daten\u00fcbertragung an Microsofts Server\" unter Windows 10 befasst und aufzeigt, wie man diese Kommunikation \u00fcber Registrierungseintr\u00e4ge stoppen k\u00f6nnen soll.<\/p>\n<h3>Meine 2 Cents<\/h3>\n<p>Wollen wir den Ausf\u00fchrungen von Carroll mal Glauben schenken, dass das alles unabsichtlich passierte. Aber ich kann mir nicht helfen: Vertrauen schafft dieses Verhalten Microsofts hier bei mir nicht. Woher wei\u00df ich denn, ob nicht der n\u00e4chste Simpel bei Microsoft in seinem \"Cubicle\" mal wieder einen Knopf dr\u00fcckt, um ein St\u00fcckchen Code in diesem Windows 10 zu compilieren, die solche Einstellungen umgeht (nat\u00fcrlich unbewusst).<\/p>\n<p>W\u00e4re ja nicht das erste Mal, dass da etwas bez\u00fcglich der Datenschutzeinstellungen bei einem Windows 10-Update gr\u00fcndlich was schief ging. Wenn ich so <a href=\"http:\/\/www.heise.de\/forum\/heise-online\/News-Kommentare\/Visual-Studio-2015-stopft-ungefragt-Tracing-Code-in-C-Programme\/forum-357486\/comment\/\" target=\"_blank\" rel=\"noopener noreferrer\">die Kommentare bei heise.de<\/a> zum Thema durchgehe, geht die Post ab. <a href=\"http:\/\/www.heise.de\/forum\/heise-online\/News-Kommentare\/Visual-Studio-2015-stopft-ungefragt-Tracing-Code-in-C-Programme\/Die-Schnueffelfunktionen-sind-ja-erst-per-Update-reingekommen\/posting-28746501\/show\/\" target=\"_blank\" rel=\"noopener noreferrer\">Dieser Kommentator<\/a> bringt das Ganze auf den Punkt: Die Funktion kam per Update rein, soll wieder per Update ausgebaut werden und kommt irgendwann vielleicht wieder \u00fcber die Hintert\u00fcr rein. Und <a href=\"http:\/\/www.heise.de\/forum\/heise-online\/News-Kommentare\/Visual-Studio-2015-stopft-ungefragt-Tracing-Code-in-C-Programme\/FT-Neue-EULA-verbietet-das-Dekompilieren\/posting-28746862\/show\/\" target=\"_blank\" rel=\"noopener noreferrer\">hier weist jemand<\/a> darauf hin, dass die Eula von VS 2015 k\u00fcnftig das Decompilieren des C++-Codes verbiete &#8211; ist zwar Ironie, aber wer weiss, ob das nicht bald Realit\u00e4t wird.<\/p>\n<p>Eine Entschuldigung f\u00fcr so etwas kommt zwischenzeitlich Microsofts Leuten leicht \u00fcber die Lippen (ist ja nicht das erste Mal). Ein Konzept f\u00fcr ein explizites Opt-In zur Telemetrie- und andere Datenerfassung habe ich bei Microsoft jedenfalls noch nicht gesehen. Und noch was: Das Telemetriezeugs wird in Windows 7\/Windows 8.1 ja st\u00e4ndig per Update nachger\u00fcstet. Ist zwar ewig her, dass ich programmiert habe, aber jeder Funktionsaufruf, der irgend ein Event-Log schreibt, kostet Ressourcen. Wenn ich mir so ansehe, was da zwischenzeitlich an Events ungefragt und ungewollt geloggt wird, ist es kein Wunder, dass die Rechner langsam werden. Irgendwie ist das alles ziemlich kaputt.<\/p>\n<p>Nachtrag: In den heise.de-Kommentaren gibt es zwar den Beitrag \"<a href=\"http:\/\/www.heise.de\/forum\/heise-online\/News-Kommentare\/Visual-Studio-2015-stopft-ungefragt-Tracing-Code-in-C-Programme\/Schwacher-Artikel\/posting-28748832\/show\/\" target=\"_blank\" rel=\"noopener noreferrer\">Schwacher Artikel<\/a>\", der sich nach Boah anh\u00f6rt. Geht aber am Kern vorbei. Es mag ja sein, dass es bessere M\u00f6glichkeiten zum Tracken gibt. Aber: a) ist es eine Sauerei, wenn solche Aufrufe\u00a0ungefragt in den Code eingebunden werden und b) was soll denn diese f\u00fcr Endanwender nutzlose Trackerei im Event-Log? Jeder Aufruf schreibt mir irgend etwas in die Protokolldateien &#8211; mehr als \"fl\u00fcssig\" &#8211; n\u00e4mlich \u00fcberfl\u00fcssig. Und im Kontext: MS wei\u00df selbst nicht, was die linke\/rechte Hand tut, \u00e4ndert sich nichts an der Kernbotschaft.\u00a0Oder wie seht ihr das? (<a href=\"http:\/\/www.heise.de\/newsticker\/meldung\/Visual-Studio-2015-stopft-ungefragt-Tracing-Code-in-C-Programme-3235676.html\" target=\"_blank\" rel=\"noopener noreferrer\">via<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsoft ist mal wieder mit den Fingern im Honigtopf erwischt worden. Wer mit Visual Studio 2015 Programme in C++ entwickelt, liefert im Hintergrund Code mit, der zur Erfassung von Telemetriedaten dienen kann. War nur ein Versehen und wird beim n\u00e4chsten &hellip; <a href=\"https:\/\/borncity.com\/blog\/2016\/06\/12\/autsch-ungefragter-telemetrie-code-in-vc-c-programmen\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[426,3694],"tags":[5045,451,672,4355],"class_list":["post-178205","post","type-post","status-publish","format-standard","hentry","category-sicherheit","category-windows-10","tag-c","tag-datenschutz","tag-microsoft","tag-visual-studio"],"_links":{"self":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/178205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/comments?post=178205"}],"version-history":[{"count":0,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/178205\/revisions"}],"wp:attachment":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/media?parent=178205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/categories?post=178205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/tags?post=178205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}