MR. ROBOTの技術的内容を解説する(S2E1〜4)

ネタバレを含むので注意。

Season 2 Epsode 1 eps2.0_unm4sk-pt1.tc - 「仮面 前編」

さて、シーズン2について書いていきたい。ちなみに、これを書いている時点で私はシーズン2をすべて見終わっている。シーズン2も解説すべき技術内容はあまり無さそうで、余談や感想がメインになりそうな予感。

まずはタイトル。シーズン1ではムービーファイルの拡張子が付けられていたが、シーズン2の拡張子は最初良くわからなかった。aesやp12が出てきてようやく気づいたのだが、これはどれも暗号化に関連するファイルだ。

こちらにすべての拡張子についての説明があるが、Windowsの細かい暗号化ツールまでは知らなかった。本作ではあまりWindowsを活用するようなシーンが無い。脆弱性の象徴としてWindows 98やなんかを登場させている。エリオットがCD-Rに書き込んだデータを復号化する際に仮想マシンのWindowsを起動させたのが、主人公サイドでの唯一の利用方法のような気が。

で、タイトルの「unmask」というのは、技術用語としてはしっくりくるものが思い当たらない。情報技術の世界の中で汎用的にマスクという言葉は領域を区分するための何かという意味で使用される。たとえば、IPアドレスのうちネットワーク部分を指し示すための「サブネットマスク」とか。IllustratorやPhotoshopなどを使用した経験があれば、こういったレタッチやドローソフトでも範囲を指し示すための「マスク」を使ったことがあるだろう。あとは、プログラミングの世界では連続するビットの特定部分を抽出するために1が連続した二進数との論理積をとる操作を「マスクする」と言ったりする。

ただ、今回のエピソードは例の仮面が印象的な役割を果たすので、「Unmask」に何か技術的な意図は無いだろう。

さて、本編を見ていくとシーズン1の終わりごろのシーンからスタートする。エリオットとタイレルがfun societyで何かのスクリプトを実行したところからだ。コンソールを見ると、シーズン1では何かと話題になったサーバ「CS30」にログインしている。また、別の画面ではIRCのチャット画面が開いていて、英語でスクリプトの実行タイミングを話し合っている。この時に表示されている名前は中国語であるから相手はブラックアーミーだろう。ここで、エリオットがブラックアーミーと会話しているという事実が、今シーズンでは重要な情報だった。シーズン1ではもっぱらシスコを通していたよね?ここで違和感に気づけば、シーズン2の謎解きも捗ったように思う。

つづいて、エリオットはCS30サーバ上の「fuxsociety.py」なるスクリプトを実行している。これを見ると、全シーズンで謎だったCS30サーバ上の「fsociety」はやっぱりディレクトリであることがわかる。スクリプトが保存されているのはfsocietyというディレクトリの下だ。

ちなみに、「.py」というのはPythonというプログラミング言語のソースであることを表している。Pythonは初心者でも簡単に覚えることができるが、ゲームやハッキング、人工知能や機械学習まで出来てしまう汎用性の高い言語だ。ただ、日本ではPythonを使えるエンジニアが他の国よりも比べて少ないと言われる。

このスクリプトを実行したあと、画面上には質の良い乱数を高精度に生成して暗号化するためのキーを生成し、その後あらゆるディレクトリ(重要な顧客情報が入ったデータベースをも含む)を暗号化しはじめている。

「質の良い乱数」というのは何か。基本的にコンピュータは決められた手続き通りにしか処理をすすめることができない。こういう性質の機械だから、コンピュータは「ランダムな数を生成する」ということが厳密には行うことができない。つまり、どんなに高性能なコンピュータであっても、サイコロを振ることすらできないのだ。

しかしながら、例えばテレビゲームでは敵キャラクターはランダムに動くし、ゲームは毎回違った展開になる。これは本当の乱数は生成できないので、乱数を擬似的に作っているに過ぎない。

たとえば、ファミコンやスーパーファミコンなどといったハードウェアでは内部に「乱数表」というランダムな数字が入力された表というか「列」があった。こいつの使い方は、たとえばゲームが開始してからの経過秒数やキー入力回数によって乱数列の取得位置を変えて読みだすというものだ。乱数表に書かれている乱数列は固定だが、乱数が必要になった瞬間の時点での経過秒数やキー入力回数はそれをプレイしているユーザーが生成した「乱数」なので、結果的にランダムに近い値が取得できるという仕組みだ。

もっとも、逆に言えば乱数の読み出し位置はユーザーによって制御できるということも意味する。ニコニコ動画やYoutubeの「TAS」動画(ツールを使ってゲームを驚くべきスピードでクリアする動画)を見ると、RPGでは度々カーソル移動やマップ入れ替えを繰り返す一見無駄な動きが見られるが、これがすなわち「乱数の読み出し位置を変えている」ということになる(乱数調整)。たとえば、「得られた乱数値が200以上でクリティカルヒット」というプログラムになっていれば、200以上の乱数値が出現するまでカーソル移動などの操作を繰り返せば、毎度クリティカルヒットが出るようになる、と、こういう仕組みだ。

しかしながら、このような方法は大事なデータを暗号化する際などには使用できない。データを暗号化する際も乱数が必要になる。現代の暗号化というのは、簡単に言えば「大量の組み合わせの中から正解はひとつだけ」というような仕組みで成り立っている。大量の組み合わせの中から一つを選ぶことをたとえば人間が行ってしまうと人間の心理から偏りができてしまう。だから、答えも推測できてしまう。これはよくない。だから、正解はランダムに決める必要がある。だからといって乱数表のような単純な擬似乱数ではこれも答えを推測されてしまう。現代のコンピュータで擬似乱数を生成するときは乱数表よりはもっとマシな「線形合同法」などを用いたりするが、これでも暗号化に使うには不十分だ。

だから、質の良い乱数を得るために現代のサーバーなどでは発生したOSのイベントやパソコンへの入出力(ネットワーク、キー入力など)を乱数を得るための種として使う。いつキーやネットワーク通信が発生するかを予測するのは困難だから、より質の良い乱数がこの方法で得られる。

エリオットが操作する画面には「Loading Source of Entropy」と書かれているが、このエントロピー(乱雑さ)が乱数の種であり、Loadingとはその種(つまりネットワーク通信やキー入力)が集まるのを待っているという意味だ。

しかしながら、ネットワーク通信を解析すると意外にネットワーク通信もランダムでない(周期性や再現性がある)ことがわかるし、この方法も本当に完璧であるとは言えない。本当に厳密な乱数が必要な場合は、たとえばラジウムが放射性崩壊する際の放射線を読み取って乱数を生成するようなチップデバイスを使うしかない(実際にそういう製品が販売されている)。放射線崩壊がいつ発生するかは完全に確率的な事象なので、この方法だと本当の乱数を得ることができる。

乱数の話で長くなってしまった…。サクサク行きましょう。

シーズン2ではエリオットは母親の元で暮らし、デジタルデバイスを一切捨ててしまってアナログな生活をしている。ただ、ハッカーとしての名残のようなものはあり、たとえば日記の一ページにはQRコードが書かれていたりする(読み取ろうとしたがダメだった)。

続いてはE Corpの法務顧問であるスーザンが住むスマートハウスのシステムが誤作動するシーン。家の中にプールがあり、音楽はマッキントッシュのアンプ、大型スクリーンでテレビが見れて、コンセントは存在しないという。すごい家だな。システムは警報や音楽を大音量で鳴らしまくって車庫のシャッターを上げ下げしたり、空調の温度を限界まで下げたりしている。スーザンは耐え切れず家を飛び出す。

これを操っていたのはやっぱりfsocietyである。空き家になった家にfsocietyのメンバーが集まるという寸法だ。
ちなみに、こういうことをやるのは十分可能であると私は考える。昨今、スマートハウスやスマート家電が多数登場しているが、そのセキュリティはあまり高いものとは言えないように思う。ちなみに私の家にもいくつか存在して、いくつかをハッキングした経験もある。

サイバーセキュリティの知識があって、ちゃんとした防衛ができている会社というのは意外に少ないんじゃないのかと私は考えている。たとえば、車のハッキングなども最近良く話題になっていて、外部からロックを解除したり音楽を鳴らしたりなどといったことを行う動画がYoutubeにアップされている。

この原因は、開発コスト低減のために自社開発をやめて汎用的なOSやソフトウェアなどの技術を導入したことにある。それ自体は悪いことではなく、世界中どこの企業でもやっていることであるが、生産性と引き換えに有名なソフトウェアや技術・規格の導入は既知のセキュリティリスクをも抱え込むことに繋がる。自社開発で社内の人間しか理解できないシステムであれば、たとえセキュリティリスクが存在してもそれを暴くのは困難だが、しかし今時はすべてのソフトウェアを自社開発していたら開発予算がいくらあっても足りなくなる。ソフトウェア開発は偉大な先人たちの発明によって成り立っているのが現状だ。

今は、かつてインターネットとは無縁の製品を作っていたメーカーがIoTの名のもとにネットワークに踏み出した過渡期であり、時間がたてば組み込み向け製品のセキュリティもずっと向上するものと私は信じている。

続いては演説を終えたダーリーンが端末でなにやらコマンドを叩くシーン。ここでは、SETというツールを使用している。SETというのはソーシャルエンジニアリングを行うのに便利な一式のツールセットだ。ソーシャルエンジニアリングとは人のミスに漬け込むハッキング手法。たとえばログインパスワードを叩くキーボードの指の動きを読み取ったりするなどというのもソーシャルエンジニアリングの一つだし、「オレオレ詐欺」も広義のソーシャルハッキングの一つと言える。SETではフィッシング詐欺に使われる偽サイトを作ったりする機能がある。また、シーズン1でエリオットがスティールマウンテンに侵入したときにモブリーがSMSを送るが、これもSETの一機能を使用しているようだ。

表示内容を見るに、ダーリーンはUSBメモリを差し込むと感染するような自動実行ファイルを生成しているようだ。その自動実行ファイルとは、要求する金銭を払わなければE Corpのシステムを停止するという脅迫を表示させるためのウィルス(Cryptwall)で、モブリーが感染させたようだ。

こういったソフトは「ランサムウェア」と呼ばれる(劇中でも字幕は出ていないがスーザンが「ランサムウェア」だと言っている)。実行したPCをロックしたり暗号化したりして、「解除するにはこういうツールを買ってウイルスを駆除する必要がありますよ」などと通知して金を払わせようとする手法だ。PCのクリーニングやウィルススキャンを行うとうたうソフトウェアに同封されることが多い。無知なユーザーは感染したウイルスを駆除するためのソフトを購入しているつもりになるが、全ては攻撃者の自作自演というわけだ。

Season 2 Epsode 2 eps2.0_unm4sk-pt2.tc - 「仮面 後編」

続き。

エピソード2はスコット・ノウルズが例の仮面を付けて大金を燃やすシーンからスタートする。タイトルの「unmask」とは、スコットが燃える札束を前にゆっくりと仮面を外すシーンが元になっているのではないだろうか。

続いてはシーズン2の中心人物となるFBI所属のドムの初登場シーン。ちなみに私はドムがあんまり好きじゃない。理由は上手く言えないが、こういう「私ってサバサバしてるでしょ」みたいな人が苦手だ。反対にシーズン2で一番好きなのがレオン。無口なエリオットを何故か敵から徹底的に守ろうとしてくれる。どうやらその行動には裏があるというのが後々わかってくるが、しかしこういう考えと行動が一致している人はわかりやすくて好感が持てる。

と、書いていて気づいたが、私は本心が理解できない人が苦手のようだ。ドムは本心は表面に出さず、タフな仕事っぷりをシーズン2では発揮しているが時に弱気な内面を覗かせる。私も実はこういうタイプで、仕事では絶対に素の自分を出さず一線を引いている。…とここまで書いてまた気づいたのだが、私は自分に似ている人を嫌悪する傾向がある。同族嫌悪というやつだろうか。私は自分自身のことが大好きだが、と、同時に自分のような人が周りに実在したら絶対に友達にはなれないだろうなとも思う。

…と最後までこのエピソードをざっくり見返してみたが、技術的な解説が必要そうな内容は今回のエピソードでは皆無だった。ので、これで終了。

Season 2 Epsode 3 eps2.1_k3rnel-pan1c.ksd - 「カーネルパニック」

タイトルのカーネルパニックとはOSの核である「カーネル」で復帰できないエラーが発生したことを指す。Windowsでいう「ブルースクリーン」のLinux/Unix系OS版だ。こうなってしまうとマシンを再起動する以外方法は無くなってしまう。

今回もほとんど解説すべき技術的内容が無い。エリオットのアデロール(飲んでいる薬、日本では覚せい剤指定)が切れたときに一瞬映る黒い画面がカーネルパニックが起きた時の画面であることと、レイが何者かとサイトの移転について話をしているということだけだ。サイトの移転はどうもクラッカーからの攻撃を受けての対処らしいことが伺えるがそれ以上のことは分からない。どうもビットコインを利用したサービスらしいということがわかるだけだ。

あとは、アデロールが切れかかっていた時に例のお面を被った3人姉妹(?)が出てくるときに一瞬鳴る効果音はWindows 95(98?)のエラー音ということくらいか。

Season 2 Epsode 4 eps2.2_init_1.asec - 「初期化」

タイトルのinit 1はLinux系OSでランレベルを変更するためのコマンド。ランレベルというのは、起動状態の「レベル」で、それぞれの環境によって差異はあるが、だいたい1がシングルユーザーモード、5がGUIを立ち上げるモードといった感じだ。0は停止状態、6はリブート。シングルユーザーモードというのは通常使うことはなく、エラーによって起動が不可能になった際に修復のために利用するモードだ。Windowsでいうセーフモードに近い。

だから、邦題の「初期化」というのはすこし違和感の残る役だ。確かにinitはinitialize、つまり初期化のことである。init 1というコマンドを実行することでシングルユーザー用の初期化スクリプトが走るからこういう名前になっている。しかしながら日本語で一般的な初期化というとデータの消去をイメージするから私にはちょっと違和感を感じさせる名前だ。「セーフモード」がよりしっくり来るが、「セーフモード」も一般的な言葉ではないし、難しい。

エリオットはMR.ROBOTを封印させるべく試行錯誤している最中なので、まさにinit 1、シングルユーザーモードの状態と言えるだろう。

さて、冒頭の回想シーンではダーリーンが出前のサービスをハッキングしてすべての注文を自分のアフィリエイトリンクに紐づけてクーポンを不正に取得するということを述べている。たしかにこういうことは不可能ではないが、まともな管理者が居ればすぐに気づきそうなものだが…。少なくとも、ここ数年の広告プロバイダ経由での広告掲載では不正がないか厳重にチェックしているから、広告掲載元のページビュー数と比較して明らかに売上が多すぎればすぐに不正のアラートが発せられる仕組みになっているはずだ。

エリオットがお面を被ってMR.ROBOTのジャケットを羽織り「オールセーフで働くべきかも。トロイの木馬になれる」と言っている。トロイの木馬(トロイアの木馬)は兵士が潜んだ木馬が出てくるギリシア神話になぞらえて命名した、「安全そうなファイルに見せかけたコンピュータウィルス」である。

ちなみに、この一連の解説ではわかりやすいようにコンピュータウィルスという名前を意識的に使ってきたが、厳密に言えばこれは正しくない。何らかの悪意に基づいて作成されたソフトウェア全般をマルウェアと言い、その中で他のファイルに寄生しつつ自己増殖機能のあるものをコンピュータウィルスとよび、自己増殖能力を持ちつつ単独の実行可能ファイルになっているものをワームとよび、何らかの安全なファイルに偽装したものをトロイの木馬という。

ただ、最近ではマルウェアやそれに準ずるソフトウェアも多様化し、このような分類をすることにもあまり意味は無くなってきているように思う。

そして見返して気づいたが、エリオットはここで「(E Corpを終わらせるためには)データベースの再構築を防ぎ、大衆の信用を失墜させないといけない」と述べている。これがシーズン2では非常に重要なことだったのだな。

あと、エリオットが「俺が目を閉じて想像する未来って何だ?」から始まる想像のシーンがSeason 2では一番平和的で好きだ。Season 1でちょろっと出てきたビル・ハーパー(スティールマウンテンでエリオットに罵られた警備員)に謝ったりするシーンがあったりして。まさかSeason 2でこの人を見るとは思わなかったし。

今回のエピソードで、エリオットはついにコンピュータに触れることになる。レイの依頼を引き受けてサイトの移転作業をすすめる。この時、レイから受け取ったファイルに書いてあるのはサイト移転の手順だ。nginxというWebサーバアプリをインストールし、TOR(Season 1 Epsode 1でも出てきたネットワーク匿名化ツール)をインストールして設定といった手順が書かれている。インストール時に使われているのはaptというコマンドなので、Debian系のLinux OSということになる。

余談だが狭義のLinuxとはLinuxカーネルそのものを示す。カーネルとはOSのコアの部分のことだ。一方で、一般にLinux OSというとLinuxカーネルと周辺のソフトウェア一式を含めた環境のことを意味する。RedHatやUbuntuといったものはLinuxカーネルと周辺のソフトウェア一式を含めた環境(つまりLinux OS)である。この環境一式のことはより正確に言うとLinuxディストリビューションと呼ぶ。ちなみに、以前紹介したエリオットが使用するKali Linuxもディストリビューションの一つだ。

Linuxディストリビューションには、ソフトウェアパッケージからいくつか分類がある。rpmパッケージを使用するRedHat系、debパッケージを使用するDebian系の二つが主流である。すでに述べたようにここで使われているaptはdebパッケージの管理ツールであるからDebian系のLinuxを使っているということになり、おそらくはUbuntuが使われているのだろう。

Ubuntuはアフリカの学校等で使用するために先進国から払い下げられた中古PCでも動作させられるような軽い環境というのが当初のコンセプトだった。しかしながら最近では世界中でUbuntuが広まり、デスクトップPCからサーバまで広く使用されている。ただ、日本ではサーバOSとしてはRedHat系のCent OSが使われる率が高いように思う。

ちなみに私はUbuntuを日常的に使用していて(この文章もUbuntuで書いている)、仕事でもUbuntuサーバーを触っている。

話をMR.ROBOTに戻す。例の手順書はドラマの小道具としては非常に良く出来ている。1秒程度しか画面に出ないシーンであってもちゃんとした知識がある人に制作を依頼したのだろう。ただ、エリオットはそれを見て「単純なサイトの移転だな」と言うが、実際に作業をすすめるとしたらWebアプリケーションがどのような言語やフレームワークで作成されているかなどといった情報が必要になるだろうと思う(そういった情報は書かれていない)。

そしてエリオットがPCに向かってやり始めたのはサイトの移転作業…ではなく、例のチャットだ。ここでは、レイのパソコンからPuTTYという遠隔地からコンピュータを操作するWindowsソフトを立ち上げ、どこかに設置された自分のサーバに接続をしている。Linux系OSはほとんどの作業をコンソール上のテキストインタフェースで行うことができるので、どこかに自分のサーバを持っておくと、どんな状況にいても自分が使い慣れた環境を触ることができる。ちなみに、Windowsで言えばリモートデスクトップがこれにあたるが、テキストインタフェースでのやりとりはリモートデスクトップに比べてもずっとデータ通信量が少ないので、通信料のかかるモバイル環境やネットワーク回線が貧弱な環境であっても安心して使うことができる。

…と、ここでダーリーンよりfsocietyの最新情報を受け取ったところで今回のエピソードは終わる。