やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

DotNetコマンドで情報漏洩を強いられる件(テレメトリ詐欺)

 許可なく利用状況データを盗る。さすがですわMicrosoft様。

問題

 dotnetコマンドを実行するとMicrosoft社へデータ通信が行われる。

  1. パケット通信料を徴収されてしまう(使うたび・不要・無駄・意図せず)
  2. 個人情報が漏洩してしまう
    • IP アドレス(地理的な場所を決定するために使用する 3 つのオクテットの)
    • MACアドレス
    • パス
    • OSとバージョン
    • タイムスタンプ

 どこにいる、誰が、いつ、何をしたかがわかってしまう。他にもまだたくさんある。抜き取られる個人情報の一覧についてはこちらを参照。

個人の特定

IPアドレス

 IPアドレスから個人が特定できる。インターネットサービスプロバイダ(ISP)によって割り当てられたIPアドレスと照らし合わせれば、契約したときの個人情報とむすびつく。氏名、生年月日、電話番号、住所などすべて。ISPとIT業者(Microsoft)が個人情報を売買していれば丸見え。

MACアドレス

 MACアドレスから個人が特定できるかも。MACアドレスはネットワーク機器の識別番号らしい。もし購入時点でクレジットカード、電子マネー、ポイントカードなど個人情報と紐付けることができる決済方法をしたなら、誰が、どのMACアドレスの機器を購入したか判明する。販売業者とIT業者(Microsoft)が個人情報を売買していれば丸見え。

解決

 dotnetをインストールするに、ターミナルで以下の変数を定義する。(インストール時にもデータ送信するため)

DOTNET_CLI_TELEMETRY_OPTOUT=1

 設定を永続化すべく~/.bashrcで設定する。

~/.bashrc

DOTNET_CLI_TELEMETRY_OPTOUT=1

情報源

 よーし、HelloWorldやってやるぜ! と意気込んていた矢先に……。

やってみた→罠→調査→捗らず

 なんと、ドキュメント一発目のコマンドでつまづく。未だかつてない躓きっぷり。公式ドキュメントのコマンド一発目でこれほど惑わされたのはお前が初めてだ。

$ dotnet new console -o myApp

.NET Core 3.0 へようこそ!
---------------------
SDK バージョン: 3.0.100

テレメトリ
---------
.NET Core ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは匿名です。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。
---------

.NET Core CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry

----------------
ドキュメントを確認する: https://aka.ms/dotnet-docs
問題を報告し、GitHub でソースを参照する: https://github.com/dotnet/core
新機能を参照する: https://aka.ms/dotnet-whats-new
インストール済みの HTTPS 開発者の証明書の詳細情報: https://aka.ms/aspnet-core-https
'dotnet --help' を使用して利用可能なコマンドを確認するか、次にアクセスする: https://aka.ms/dotnet-cli-docs
初めてのアプリを作成する: https://aka.ms/first-net-core-app
--------------------------------------------------------------------------------------
Getting ready...
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on myApp/myApp.csproj...
  /tmp/work/myApp/myApp.csproj の復元が 553.64 ms で完了しました。

Restore succeeded.

無断で情報漏洩するクソコマンド

 dotnet new ...はプロジェクトを作るコマンドだったはずだが……。

 は? 利用状況データを収集します。って、唐突に何いってんの? 勝手なことするな。プロジェクト作ればいいんだよ余計なことするな。最低でもユーザの許可とれよ。人様のPCを勝手に操作するな!

意味不明なメッセージ

テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。

 お前は何を言っているんだ?

 「テレメトリ」ってなんぞ? 「オプトアウト」? お前はルー大柴か! ヘルプが日本語化されたと思ったらこれだよ。

 「利用状況データの収集を停止するにはDOTNET_CLI_TELEMETRY_OPTOUT環境変数1またはTRUEにする」って意味でOK? たぶん違うのだろう。それならそう書くはず。文脈的にはそう読み取れるのだが、きっとこのパターンは誤魔化すためにわざとわけわからんこと書いて煙に巻くつもりだな。「いいえ、それをやっても利用情報は収集しますよ? そんなこと言ってませんし?」とか言うんだろ。騙されないぞ。

テレメトリングとは、遠隔地にある計測器などのデータを、通信回線を使って収集するシステムのことである。

オプトアウトとは、個人情報の第三者提供に関し、個人データの第三者への提供を本人の求めに応じて停止することである。

 ってことらしい。知らんかった。何これ常識なの? さも当然のようにサラッと言われましても、オジサンついていけない……。調べるの面倒だし。

 でも、それが狙いなんだろ? わざと新しい言葉を作ったり使ったりして、理解するまでに手間暇をかけさせることで面倒になり断念させ、結果的に無断でデータ搾取してやろうって魂胆だ。

 後で「こんなに個人情報が漏洩するなんて聞いてねーぞ!」と文句をつけても無駄だろう。MicrosoftはちゃんとURLを提示してある。「面倒だからとやめたお前らユーザが悪い」とでも言い返されて終わってしまうに違いない。そうはさせないぞ。お前らの手口はわかってんだからな。泣き寝入りさせて牛耳る暴君めらが。

 私は絶対にあきらめない負けない挫けない。執拗に戦い追い続けて暴いてやる!

解読

before

 テレメトリをオプトアウトするには、好みのシェルを使用して、
DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。

after

俺たちMicrosoftからみて遠隔地にあるお前のPCは、お前の個人情報を抜き取るマッシーンにしてやった。
自由を返してほしくばDOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' にしろ。

 無断で私のPCを計測器化しやがった。やめて? ねぇやめて?

 要約すると「お前の個人情報は抜き取った。やめてほしくばDOTNET_CLI_TELEMETRY_OPTOUT=1しろ」と。

 じつはこの認識すら甘かった。以下のような内容が隠されていたことが後述で判明する。個人情報が抜き取られていると知ったときには手遅れという構造だ。悪質すぎてヘドが出る。

 もっとも、インストール時とこのメッセージを表示させたコマンドによって、
すでに少なくとも2回はデータを頂いたがな。

 これを回避するにはインストールする前に環境変数の設定が必要だ。
 説明もなしに誰もそんなことはできまい。

 つまり事実上、最低でも2回はデータを盗れるって寸法よ。チョロいぜw

エクスペリエンスの向上(笑)

 エクスペリエンスの向上のために情報を抜き取るらしい。一見いつもの口実にみえる。だがこの文言には一歩進んだ罠があるように思える。

 エクスペリエンスとは「経験」「体験」の意味。しばしば「ユーザ・エクスペリエンス」と言われる。意訳すると「開発者(我々)は使いやすいソフトウェアを提供するため、ユーザ(あなた)の利用状況データを収集します」といったところか。

 だが、ここでは「ユーザ・エクスペリエンス」ではなく、「エクスペリエンス」と書いてある。ただの「体験」であり、「誰」の体験を向上させるかについて語っていない。怪しい。詐欺の手口は「嘘」より「半端な真実」を用いることで成される。それを前提に少し考えてみよう。

 もしユーザの体験を向上させる目的だと言ってしまうと、「いや、テレメトリ自体がユーザ・エクスペリエンスを損っているだろが!」とツッコまれてしまう。実際そのとおりだ。今こうして情報漏洩のリスクを強要されることで嫌々アレコレ調べざるを得なくさせられていること自体がきわめて不快な体験であるのだから。

 誰の体験が向上するのかは言っていない。もしかすると、ユーザの個人情報を搾取することによって、Microsoft社の営利目的に対する体験が向上するという意味かもしれない。これならエクスペリエンスの向上という表現は嘘にならない。

MS<「はぁ? ユーザ・エクスペリエンス? そんなこと、どこにも書いてませんけど?」

 いつぞやにMicrosoftはTVのCMでイケメン・ダンディ・ボイスで「ユーザ・エクスペリエンス(ドヤァ)」とかカッコつけて言ってなかったか? それを印象づけておいて、こう落とすと。これがお前の答えか。

 Micrsoftは嘘をつかず、ユーザが勝手に都合よく解釈するような表現にすることで、体よく情報搾取するつもりなのだろう。さらに後述するが、ユーザに責任転嫁までする。これでユーザ体験の向上とかいう考えはゼロどころか完全にマイナス。きわめて不愉快。

明かされぬ3つの謎

明かされぬ謎

 エクスペリエンスの向上という文言の謎。

  • の体験を向上させるのか?
  • 体験とは具体的に何か?
  • 向上とは具体的に何がどうなることか?

表(好意的解釈)

 仮にこれが以下の意味だったとする。

 「ユーザがより使いやすいソフトウェアを開発する一助とするため、あなたの個人情報を無断でいただきます。二回目以降は設定次第でやめれます」

 ユーザ・エクスペリエンスを損なった代償として別のユーザ・エクスペリエンスを提供します、という意味になるだろうか。

 だがこれはおかしい。仮にそれが正しいとしても、事前に説明もなく許可もとらずにデータ送信させられるのは間違っている。勝手に決めるな。勝手にユーザの所有物であるPCを動かすな。Microsoftが考えるユーザ・エクスペリエンスを改善すれば、無許可でユーザのPCからデータ送信させていいとでも? それがユーザ体験にプラスだと?

 どう考えてもユーザ体験は悪化している。だが、バグ回収し公開すればユーザ体験は向上するはず。それ自体は嘘ではない。ただし、それが無断でデータ送信していい理由になるはずがない。許可を取らず無断でデータ送信する点は擁護不可。

 そもそも、バグ改修だけならIPアドレスMACアドレスなんて不要。ようするに個人情報を搾取するための口実でしかない。

 ダメだ、なんとか好意的に解釈しようとしても不自然すぎて擁護できん。むしろ騙し取る手口がみえるばかり。

裏(悪意的解釈)

 「Microsoftが個人情報を搾取し、それを販売することで利益をあげる」ということではないのか?

 無許可でデータ送信させられた時点で信用ならない。こちらの意志を無視して、無断でやりたい放題やってやろうとする意図が態度にあらわれている。ニュースを見ても、企業による個人情報の売買があたりまえのように行われていることがわかっている。営利目的なのだから当然。

 これで筋が通ってしまう。

.NET Core SDK 製品利用統計情報

 「アプリ実行時は収集しないが、それ以外のほぼすべてのコマンドで収集する」と読み取れた。これはひどい

「オプトアウトする方法」が後出しジャンケン詐欺

.NET Core SDK の製品利用統計情報機能は既定では有効になっています。 製品利用統計情報機能をオプトアウトするには、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を 1 または true に設定します。

 以下が罠っぽい。

正常にインストールされると、製品利用統計情報のエントリ 1 件も .NET Core SDK インストーラーによって送信されます。 オプトアウトするには、.NET Core SDK をインストールする前に DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を設定します。

 おわかりだろうか。「インストールするに」とある。いやいや、だれがインストールする前に何の説明もなく「DOTNET_CLI_TELEMETRY_OPTOUT=1」なんて環境変数を設定するんだよ。もうインストールしちゃったよ。まさかこれ、一度インストールしたらもう二度とオプトアウトできないってことなの? 違うよね? インストール時の1回だけの話だよね?

 要約すると「お前の個人情報は抜き取った。やめてほしくばDOTNET_CLI_TELEMETRY_OPTOUT=1しろ。ただしインストール時とこの説明URLを表示するための初回コマンドの計2回分はもう手遅れだがなw」と。

知ったときには手遅れ

 「じつは情報漏洩してま〜す」という説明サイトにたどり着くには、事前に情報漏洩する必要がある。つまり、データ送信をともなう操作であるインストールとコマンド実行をする必要がある。そのとき表示されたURLでサイトを閲覧したとき、はじめて情報漏洩が発覚するのだ。絶対に漏洩を回避できない。きわめて悪質な後出しジャンケンである。

手順

 とにかく今すぐ停止しよう。二度と動かないように~/.bashrcに設定しよう。これ以上被害を出さないために。

~/.bashrc

DOTNET_CLI_TELEMETRY_OPTOUT=1

「不注意による情報開示」というユーザへの責任転嫁

f:id:ytyaru:20191015170826p:plain

 収集されるデータは「CLI/SDK の例外」がある。このうちファイルパスが含まれる。よってパス名に個人情報や機密情報があれば漏洩してしまう。とのこと。そんなことは滅多に起きないと思ってはいるが……。だったら最初からオプトアウト(OFF)しろよ。搾取したいからデフォルトでオプトイン(ON)しているくせにヌケヌケと。

 そもそも、パスよりもIPアドレスMACアドレスなど多数の情報と紐付いてしまうのがヤバイわ。それを主張しろよ。パスなんて小さい問題のほうへ視点誘導して被害が少ないかのように印象操作しようとしているんじゃないの? あと、パスにかこつけて、他の個人情報漏洩についてもユーザの不注意が原因であるかのように思わせようと誘導してない?

 「不注意による情報開示を避ける」という見出しになっていたが、ふざけているのか? まさか「ユーザの情報が開示されてしまうのは、ユーザの不注意によるものである」とでも?

 なんでユーザが悪いみたいな言い方してんの? パスに個人情報なんぞ入れている不注意なユーザが悪いってか? デフォルトでデータ送信させる設定にしやがったお前らMicrosoftが悪いに決まってるだろうが! 事前にデータ送信することをユーザに説明もせず、許可もとらず無断でやったくせに! ユーザの不注意だと?! ざけんな! 注意してやめられるならやめたいわ! そういう仕組みじゃねーだろ! お前らがそうしたんだろ! それをユーザのせいにすんな!

 問題はパスに含まれた個人情報なんかじゃない。仮にパスに個人情報が入っていなくとも、IPアドレスMACアドレス等、個人を特定できそうな多数の情報をとるのだから、そちらのほうこそ重大な問題だ。それらすべて、お前らの意志でやったくせに! なのに、ユーザの不注意だと?!

 パスの話に誘導すれば「個人情報はユーザの不注意が原因で漏洩した」という結論にできるとでも思ったか? ユーザが悪いと責任転嫁できると? こっちは最初から個人情報を貢ぎたくなんてねぇんだよ! そっちの都合だろうが! だから漏洩不可避の設計にしているくせに! なのに、なのに、「ユーザの不注意」とは何事かぁぁぁぁ! バッカモーーーーン!!

 デフォルトで公開しない設定にすればいいだけだろ。インストールするDOTNET_CLI_TELEMETRY_OPTOUT=1なんて設定できるわけねーだろ。それを説明する表示を出す頃にはすでに2回漏洩する設計のくせに。それで漏洩するのは「ユーザの不注意」とのたまうとか、てんめぇ……

ふ ざ け る な !

 Microsoft、てめぇは敵だ

「ユーザの不注意」説について

 まとめよう。Microsoftによると以下はユーザの不注意らしい。

  • インストール前にDOTNET_CLI_TELEMETRY_OPTOUT=1と設定しなかった
    • インストール後にDOTNET_CLI_TELEMETRY_OPTOUT=1と設定しなかった
      • ファイルパスに漏洩したくない情報があった
        • 個人情報の漏洩が発生した
          • ユーザの不注意である
            • Microsoft「俺は悪くねぇ。お前らが悪い」

 Microsoft俺たちは無断でユーザどもの情報を搾取するけど、それでお前らのアレコレが漏洩してもお前らの不注意のせいだからヨロシクw

 なめてんの? バカにしてんの? 無断で人様のPCを操作したことを「ユーザの不注意だ」って……。どう考えても犯罪組織の身勝手な言。犯罪者の思想。こんなのがまかり通っている現実。絶対に許せん。

  1. 事前に説明なく無断で個人情報を送信させられた
    1. インストール時とコマンド実行時の2回
    2. 漏洩は事後報告だった
    3. URLで詳細をみてはじめてIPアドレスなど多数の個人情報が漏れていると知った
      1. 利用状況データではなく個人情報であると判明した
    4. 漏洩は避けられない仕組みだった(漏洩しないと漏洩報告やURLが表示されない)

 事前に説明せず、無断で個人情報を漏洩するしくみ。にも関わらず、それをユーザの不注意だと責任転嫁。パスがどうのと視点誘導し、IPアドレスなど多数の問題ある個人情報の漏洩については「利用状況データ」などとごまかした表現を使う。

 悪質すぎ。

罪まとめ

  • 説明せず無断でやる

 今回のMicrosoftの罪は「説明せず無断でやった」ことに尽きる。ユーザの許可なく、ユーザが不利益を被ることを無断でやった。このせいでパケット通信の発生や、個人情報の漏洩が発生してしまった。

 Microsoftは、ユーザの許可なく、ユーザの個人情報を「利用状況データ」と称してIPアドレスMACアドレスなどの個人情報をだましとった。ファイルパスから秘密が漏れるかのように視点誘導し、その責任がユーザの「不注意」であると責任転嫁した。無断でIPアドレスなどを漏洩するしくみを棚に上げて。

 ユーザに事前説明もせず、許可なく無断で個人情報をだましとった上、責任転嫁までしたMicrosoftはギルティ。有罪。

欺瞞まとめ

  • 欺瞞1: ☓利用状況データ ○個人情報
    • 例外発生時、パスから個人情報が漏れる
    • インストールやコマンド実行するたび、IPアドレスなど多数の個人情報が漏れる
  • 欺瞞2: 漏洩は避けられない
    • インストールするDOTNET_CLI_TELEMETRY_OPTOUT=1など不可能
    • その説明をみたときにはすでに漏洩済みとなる設計である
  • 欺瞞3: ☓ユーザの不注意 ○Microsoftの計略
    • パスに個人情報があると漏洩するとか言っているが、これは「漏洩の原因がユーザの不注意にある」と責任転嫁するための視点誘導である。問題はそこではなく、その説明サイトを読んでいるとき、すでに漏洩されてしまっていることだ。インストール時やこれらの説明URLを表示するためのコマンドを実行した時点で、無断でIPアドレスなどを漏洩する悪質なしくみこそ問題である。これはユーザの注意では防げない。Microsoftによって作られた漏洩させるしくみなのだから。

こう改善しろ

 言いたいことは1つ。ユーザの許可を取ってからやれ。ないならやるな。

.NET Core 3.0 へようこそ!
---------------------
SDK バージョン: 3.0.100

ユーザ体験向上のためにご協力ください。
---------
 利用状況データを収集することでユーザ体験を向上させることができます。データは匿名です。Microsoft によって収集され、コミュニティと共有されます。ご協力いただける場合は、好みのシェルを使用して、DOTNET_CLI_TELEMETRY 環境変数を '1' または 'true' に設定してください。以降、dotnetコマンド実行するたび利用状況データを収集するようになります。

 注意

  収集するデータはCLI/SDKの例外です。ファイルパスも含まれるため、パスには個人情報など公開すべきでない内容は避けてください。

  詳しくは.NET Core CLI ツールのテレメトリ詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry

 設定しないとデータ送信されない仕様。こうあるべきだろ常識的に考えて。

 どうしても個人情報を盗りたいなら、許可しないと使わせないか、黙って盗って捕まれ。

 あと、渡す情報はユーザが選べるようにしろ。少なくともIPアドレスMACアドレスを無断で取得とかありえん。今すぐ撤廃しろ。どうしても盗みたいなら許可をとるか、黙ってやって捕まれ。

 リスク管理はユーザ自身にやらせろ。具体的には、以下のようにユーザに不利益となりうることを許可なくやるな。どうしてもやりたいならユーザに許可をとるか、黙ってやって捕まれ。

  • ネットワーク通信(パケット通信料がかかる)
  • 個人情報の漏洩(ユーザにとってリスクのほうが大きい)

所感

 超上から目線で書いてやった。

 またMicrosoftが嫌いになった。しかし、こういう欺瞞はMicrosoftにかぎらず、日常の中に満ち溢れている。本当に不愉快きわまりない。なにがテレメトリだ。なにがオプトアウトだ。かっこいいと思ってんのか? イタイんだよ。

 でも、こういうネガティブなことを口にすれば、どうせこっちが悪いみたいな扱いをされるんだろうな。社会の風潮的に、力に屈する流れだし。個人より組織。力こそパワー。弱者もまた自分がいじめられっ子側になりたくないから、一緒にいじめる側にまわるんだろ?

 はいはいそうだねあんたらが正しいね強いね万能だね仕方ないね。生き残るべきはあなたたちですね。えらいねすごいねよかったね。超幼稚化社会乙。

 ぺっ。クソが。絶対おまえらとなんか同化しねーからな。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux