MR. ROBOTのエリオットの様に音楽CDの中にファイルを隠す方法

MR. ROBOTの主人公エリオットは、ハッキングで得たデータをDeepSoundというアプリケーションを使って音楽ファイルに埋め込み、それをCDに焼いてコレクションしています。

エリオットの様にDeepSoundを使って音楽ファイルに任意のファイルを埋め込む方法を簡単に解説します。

DeepSoundのインストールと使い方

ここからダウンロードしてインストールします。DeepSoundはWindowsにしか対応していません。クールなツールなのに残念です。

DeepSoundを起動します。上に音楽ファイル、下に隠したいファイルをドラッグアンドドロップで追加します。

「Encode secret files」を押して出力します。この時パスワードを設定することでAES256で暗号化できます。
デフォルトのファイルの出力先は「C:\Users\ユーザーID\Documents\」になっていますが、「Settings」で変更可能です。

ファイルを埋め込んだファイルはもちろん通常通り音楽ファイルとして再生可能です。CD-Rに音楽CDとして焼いた場合、CDプレイヤーで再生とPCに再度取り込んで複合化が可能かどうかは検証していません。

ファイルの取り出し方法は、ファイルをドラッグアンドドロップして対象のファイルを選択後「Extract secret files」を押します。

 

音楽ファイルのダウンロード方法

劇中に映画をtorrentでダウンロードして観ている描写があることから、おそらく音楽ファイルも購入したものではなくダウンロードしたものかと思われます。

ここからエリオットならこうするだろうなという予想です。

以下のクエリでGoogle検索すると、アーティスト名の曲のmp3ファイルがヒットします。

intitle:”Index of /” and intext:”Apache” and mp3 and アーティスト名

Googleは世界中のウェブサーバーをインデックスしており、膨大な情報をため込んでいます。その中には設定ミス等で公開状態になっているプライベートなディレクトリがインデックスされていることが多々あります。それを見つけるのがこの検索クエリです。

あとは次のようなコマンドでダウンロードしているのではないかと想像します。

wget -nd -r -l1 -A mp3 対象URL

cryptsetupでLUKSファイルシステムを使用する

今回はHDDなどの物理媒体を暗号化するのではなく、ファイルを暗号化します。

ddコマンドでテスト用ファイルluks.img(1GB)を作成。

# dd if=/dev/zero of=luks.img bs=1M count=1024

1.LUKSとしてフォーマット

cryptsetup luksFormat イメージファイルorデバイスファイル」でLUKSとしてフォーマットします。A you sure?には大文字でYESと入力。次にパスフレーズを2度聞かれるので入力します。

# cryptsetup luksFormat luks.img
WARNING!
========
This will overwrite data on luks.img irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for luks.img:
パスフレーズを確認:

fileコマンドで確認してみます。

# file luks.img
luks.img: LUKS encrypted file, ver 1 [aes, xts-plain64, sha256] UUID: 94fd36b1-f397-4f14-8ee6-a39c6c88809b

cryptsetup luksDumpで詳細な情報が得られます。

# cryptsetup luksDump luks.img
LUKS header information for luks.img
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 256
MK digest: f6 53 e6 6a 29 a1 28 9d 42 45 4e 75 63 89 c6 29 fc 96 59 01
MK salt: 9b 37 90 94 1c 97 e9 b6 4e 6b b6 b1 3e 6e 01 ee
ef 3b a9 70 9c e4 b8 03 4e 52 15 ae e0 d1 3c 83
MK iterations: 213472
UUID: 94fd36b1-f397-4f14-8ee6-a39c6c88809b
Key Slot 0: ENABLED
Iterations: 3415556
Salt: a6 aa 14 a3 0a c7 f9 e3 c9 72 9b ab 75 92 de 60
70 44 cc 6e 1f b6 c0 0e 16 76 45 b9 07 f9 76 b7
Key material offset: 8
AF stripes: 4000
Key Slot 1: DISABLED
:

2.LUKSを開く

cryptsetup luksOpen イメージファイルorデバイスファイル 任意の名前」でLUKSを開きます。

# cryptsetup luksOpen luks.img luksfilesystem
Enter passphrase for luks.img:

パスワードが正しい場合「/dev/mapper/任意の名前」にデバイスファイルが出現します。「luksfilesystem」という名前で開いたので「/dev/mapper/luksfilesystem」が対象のファイルです。

# ls /dev/mapper/
control luksfilesystem←これ

3.ファイルシステムを作成

通常のデバイスと同じ要領でmkfsなどでファイルシステムを作成します。

# mkfs -t ext4 /dev/mapper/luksfilesystem

4.マウントする

通常のデバイスと同じ要領でマウントします。

# mount /dev/mapper/luksfilesystem /mnt

通常のディレクトリと同じようにアクセスできます。

# df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/luksfilesystem 990M 2.6M 921M 1% /mnt
# ls /mnt
lost+found

5.アンマウントしてLUKSファイルシステムを閉じる

デバイスの取り外しの際にはアンマウントした後にcryptsetup luksCloseを実行してLUKSを閉じます。

# unmount /mnt
# cryptsetup luksClose luksfilesystem

おまけ bruteforce-luks

キーフレーズが設定されたLUKSはbruteforce-luksでブルートフォースや辞書アタックが可能です。ちなみにLUKSファイルの頭10MBあれば攻撃可能です。

# dd if=luks.img of=lukstest.img bs=1M count=10
# bruteforce-luks -f /usr/share/john/password.lst lukstest.img

WordPressのパスワードが分からない場合の対処法

phpmyadminにログインできるかデータベースがいじれるのなら、wp_usersテーブルにある対象のユーザーのuser_passを編集します。

user_passの関数をMD5に変更し、任意のパスワードを値に入れて実行。

そのパスワードでログインできるようになります。

John the RipperでLinuxのパスワードを解読する方法

Linuxは全ユーザーに閲覧権限のある/etc/passwdにログイン情報が書かれています。

(スラッシュはセキュリティの都合上、全角で表記しています)

大昔は同ファイルにパスワードハッシュも書いてある時代がありましたが、セキュリティを高めるためにシャドウパスワードと呼ばれる/etc/passwdとは別に/etc/shadowにパスワードハッシュを保存するという形を取るようになりました。

ちなみにシャドウパスワードを有効化・無効化するコマンドがあります。
(おそらく使わないでしょうけど)
シャドウパスワードの有効化: pwconv
シャドウパスワードの無効化: pwunconv

john the ripperをインストール

aptコマンドでインストールします。

sudo apt update && sudo apt install john

パスワード解読のアカウントを作成

パスワード解読のデモンストレーションなので、あえてガバガバなパスワードでユーザーアカウントを作成します。

sudo useradd testuser
sudo passwd testuser
(パスワードを入力:test)

ID: testuser PW: testのアカウントができました。

/etc/shadowを解読

/etc/shadowから解読したいアカウントの行を出力させます。先ほど新規追加したアカウントを解読するため「tail -1」で一番下の行を出力しています。

sudo tail -1 /etc/shadow > passwd

次のような文字列がカレントディレクトリのpasswdファイルに出力されます。

testuser:$6$JwHz7UVh$3hAf/Gs7/KT7C49PfTQwPdlLBCLBOv2uUoGAYpA2SzJYX2zzlgQ2SaERwOKHsCU/.NK33HfiZwkCo6fQ9LmTl0:18308:0:99999:7:::

johnで解読します。

john ./passwd

一瞬でパスワードが「test」と出ました。

パスワードの解読はデフォルトではsingle、wordlist(デフォルト:/usr/share/john/password.lst)、inclimentalの順で実行されるようです。

辞書ファイルに載っているような単語であれば、この通り一瞬で解読されてしまいます。

ちなみに環境によっては「No password hashes loaded (see FAQ)」と表示される場合があるので、その際は次のように「–format=crypt」を指定して実行します。
john passwd –format=crypt

MR.ROBOT シーズン4 3話のハッキングシーン

キプロス国立銀行のデウス担当者のオリビア・コルテスがハッキングのターゲット。

業務用PCでVPNで接続しているため、遠隔での侵入は不可能。

彼女のスケジュールに、2015.12.24 PM5:00からエヴァンと”OKCupid”というバーへ行く予定を見つける。

彼女の部屋へ侵入し、机の鍵付きの引き出しをピッキング。業務用のノートPCを見つけて電源を入れる。パスワードがかかっているのを確認。

そこで、Kali LinuxをUSBブートしてOphcrackなどを使うのかと思いきや、もっと原始的な方法でハックしていました。

復帰モードで起動し、プライバシーポリシーのテキストを開くとnotepadが起動。

このnotepadは管理者権限で起動しているのでしょう。ツールバーのFileのOpenからsethc.exeをリネームしてcmd.exeに置き換えます。

するとcmd.exeが起動。

ユーザーアカウントを列挙

net user

新たなパスワードを設定

net user Olivia *

再起動して設定したパスワードでログイン。パスワードマネージャーからパスワードをエクスポートしてUSBに保存する。

エリオットのKali LinuxのノートPCを取り出し、先ほどエクスポートしたパスワードをインポートする。そしてウェブブラウザを起動。

VPNに接続し、キプロス国立銀行のログインフォームに進む。

しかしログインにはワンタイムパスコードが必要だった。

MR.ROBOT シーズン3 10話のハッキングシーン

「FBIはロメロのファイルを解読できなかった。ロメロを知らないからだ。」

「俺は違う。」

ドムの権限によってFBIのセンチネルにログインしたエリオットは、かつての仲間ロメロから押収されたUSBキーロガーのダンプファイルをダウンロードする。
(拡張子に.rawとついており、LUKSファイルシステムであることから、押収したUSBからddなどでダンプしたファイルと思われる。)
そのファイルはLUKSでAES256で暗号化されており、FBIは解読できていなかった。

エリオットは歌詞をパスワードに設定していると踏み、getlyrics.pyというスクリプトで歌詞をダウンロードして辞書ファイルを作成する。

bruteforce-luksを使ってパスワードの辞書アタックを仕掛ける。

cryptsetupでLUKSファイルシステムを使用する

cryptsetup luksOpenで判明したパスワードを使って/media/にマウントする。cdで移動し、lsでファイル一覧を表示すると、keylog.txtがあった。lost+foundはファイルシステムが自動的に作成するディレクトリ。

keylog.txtをlessで表示する。lessはページ送りができるためコマンドラインでログを見る際によく使う。

MR.ROBOT シーズン3 5話のハッキングシーン

UPSのバッテリーを使って爆破する計画を進めるMr ROBOTとそれを阻止するエリオット。

エリオットは署名が無いコードを実行できないように細工するが、ダークアーミーはEコープのコード署名構築チーム”Frank Bowman”の権限をバックドアとして不正プログラムに署名を付けて実行しようとします。実行を阻止するためにはHSMに物理的にアクセスする必要があります。

しかし、暴徒と警官だらけの本社ではエリオットがいつも使っている裏口にアクセスすることは不可能。爆破予定の”復旧施設”へ行ってUPSを直接操作するしかありません。

社員に成りすまして復旧施設へ侵入し、会議室のLANからネットワークに侵入します。

update.binの署名を検証

gpg --verify update.bin.asc update.bin

“E Corp Power systems Hardware Development Team”によって署名されていることを確認。複製されたHSMによって署名されたものと思われる。

update.bin.ascとupdate.binを削除。rmではなくて、shredによって乱数を3回上書きした後に0で上書きしてから削除しているところが良いですね。

shred -uzn3 update*

UPSの正規のアップデートパッチを取得し、カレントディレクトリに解凍します。

wget -q https://192.251.68.232/files/ups_640_patch.zip
unzip ups_fw_patch.zip

エリオットによる署名であることを確認した後、念入りに改ざんされていないかsha256sumで検証します。

gpg--verify hashes.asc
sha256sum --check hashes.asc

scpでUPSにアップデートパッチを送ります。

scp * upsadmin@192.251.68.229:/upsfw

sshでUPSにログインし、アップデートを試みますが。。。

ssh upsadmin@192.251.68.229
upsfwupdate

エリオットがMr Robotに乗っ取られ、同ネットワークセグメントからのアクセスをファイアーウォールでブロックするように設定してしまう。firewallというコマンドは使ったことが無いので分かりませんが、iptablesみたいなものでしょうか。

firewall -f fw.fwl
firewall -r
exit

192.251.0.0/16からの接続を無視するという設定のようですが、ルールを反映した時点で”Connection lost”になると思います。sshで再びログインを試みますが、”Connection refused”というエラー。discardしている場合はパケットを破棄してしまうので、本当なら”Connection timed out”になるでしょう。

MR. ROBOT シーズン2 6話のハッキングシーン

ダーリーンがホテルの宿泊客を装いルームサービスを呼び出し、リンスが切れたと言いながら近づき、ルームサービスが持っているマスターキーカードをスキミングする。

スキミングしたデータを使い客室に入り、ノートPCを立ち上げる。OSはKali Linuxというその道の人御用達のOS。BackTrackの後継OS。ポテトチップスの缶にスマホスタンドをくっつけたような装置は指向性Wifi。ちなみに「Cantena」と呼ばれている。

Wifiのパスワードはアンジェラからあらかじめ聞いていたのか、ハッキング無しでEコープのオフィスのネットワークにログインする。

アンジェラはFBIエージェントが徘徊する社内でトイレの個室に移動し、スクリプトの実行を試みるが、最初にcd binを打つことを忘れ、コードが実行できなかった。モーブリーからcd binでディレクトリを移動してからスクリプトを実行することを指示される。無事にスクリプトが実行され、ダーリーンがフェムトセルと接続ができる環境になった。

アンジェラがトイレから出るとロス・トーマス捜査官に話しかけられてしまう。モーブリーはSNSを検索し、個人情報を調べる。

サンディエゴ出身、恋愛関係は複雑、元セキュリティエンジニアでFBI歴1年弱であることが判明。「母親との電話回数が多い。それを利用して何とかする」と母親の番号に偽装して電話をかけるが切られてしまう。アンジェラは誘いに乗るふりをしてロス・トーマス捜査官をかわす。

次にネットワークにフェムトセルを差し込むのですが、これはアンジェラがトイレに行く前の描写ですよね。

ダーリーンがsftpで何かのファイルをダウンロードしている最中にWifiの接続が切れてしまう。

Wifiを復帰すべく、アンジェラのデスクのPCでKali LinuxをUSBブートするように指示される。ちゃんと「再起動させてF12を押しUSBで起動」「AMD64を選んでエンターキー」と細かいところまで説明しているところがリアリティがあります。

sshでフェムトセル?にログインし、ifconfigでWifiの復帰を試みる。

ssh -l root l4713116.e-corp-usa.com
ifconfig wlan0 up
ifconfig wlan1 up

MR. ROBOTのソーシャルハッキングが鮮やかだった

MR. ROBOTが面白い。主人公エリオットはセキュリティコンサルティング会社に勤めているエンジニア。コミュ障気味である反面、高度なハッキング技術を持つ彼は、身近な人のメールやSNSなどをハッキングして人の秘密を握り、取得したデータをAES256で暗号化して音楽CDに見せかけたディスクに書き込んでコレクションしている。彼が務めている会社の大口契約先である富を貪る大企業”Eコープ”と、金融データを破壊しローンや借金をチャラにして、未だかつてない”富の再分配”を企むハッカー集団”Fソサエティ”とのごにょごにょを描いた物語です。

この世界は幻想でできている。薬で合成される感情、広告という名の心理戦争、食べ物で心をかき乱され、メディアに頭を洗脳される、SNSで作り出される虚構。リアリティがなんだって?21世紀の世界にそんなもんはない!

こちらの記事もどうぞ

MR. ROBOTのエリオットの様に音楽CDの中にファイルを隠す方法

原題がかっこよかった

ところどころ、技術的なシーンになると誤訳が多いと感じたので、もしや「やあ、君」だとか「1かゼロか」とか意味深なタイトルも正確に訳せていないのではと疑問に思い、wikiを見た所、原題はめっちゃかっこよかったですね。連続ドラマらしくないタイトルですが、その道の人が見たらなるほどと思えるような文字列です。

スペースの代わりにアンダーバーを入れるのはシェル上でファイル名を指定する際に””や”で囲む必要が無い為です。wikiで一通りタイトルを見たところ、シーズン1は動画ファイルの拡張子がついており、Leet文字が見受けられます。シーズン2は拡張子はでたらめなものもありますが、マスタースレーブ、ハンドシェイク、カーネルパニックなど専門用語がつけられています。一番気になったタイトルはシーズン3の最終話「シャットダウン」。原題は「shutdown -r」なのですが、これは見る人が見ればピンときます。「再起動」だと。シーズン4のタイトルはHTTPステータスコードになっています。邦題は直訳になってしまっており雰囲気ぶち壊しです。

シーズン1-1話「eps1.0_hellofriend.mov」の考察

RON’S COFFEEにて。

Wifi環境が異様に良いことに不審を持った主人公は、ネットワークトラフィックを監視したところ、オーナーが違法なウェブサイトを運営している事が発覚した。

「Torで匿名化しているが俺は見た。オニオンルーティングを信用しすぎだ。出口ノードをおさえたものが通信をコントロールする。それが俺さ」

Torとは複数のサーバーを経由することによって通信元を秘匿化するツールで、だれもが無料で使用可能です。10年前はTor越しにウェブブラウジングしようにも速度が遅くて使い物になりませんでしたが、現在はTorノードが昔より圧倒的に増えて平均的なネットワーク速度も格段に上がっているため、ストレスなく動画ストリーミングが見れる程度まで実用性が上がってきています。

https://www.torproject.org/

世界中の複数のサーバーを経由し、その間の通信は暗号化されていますが、出口ノードだけは相手サーバーに直接つながっているため、出口ノードの運営者は通信が丸見えであることは昔から指摘されている事です。なのでTorで通信内容の秘匿化というよりは、通信元をごまかす程度と考えておかねばなりません。

ソーシャルハッキング

主人公のかかりつけの精神科の女医と付き合っている男の正体を調べるべく、タクシー内に忘れ物をしたことを装いタクシー会社に電話し、男が乗ったタクシーの番号「56Y2」を伝えて家の住所を突き留める。

男の住所へ向かい、男に電話を貸してほしいと言って自分のスマホに電話をかけて番号をおさえる。
発信履歴を削除してるところもぬかりありません。

次に銀行員を装い、本人確認と称し秘密の質問を聞き出します。棟番号「2C」、「ヤンキース」、愛犬「フリッパー」3つのワードからコンビネーションを作成し、辞書アタックを試みますがヒットなし。偽名を使っている可能性。

最終的に本名を言い当て、浮気の事実を本人に突きつけますが、そこに至るまでの描写はありませんでした。

シーズン1-2話「eps1.1_ones-and-zer0es.mpeg」の考察

タイレルのメールをハッキングするためにメールのログインフォームページにwgetで/etc/passwdをダウンロードする不正なクエリを送ります。環境変数に仕込まれたコードを実行できてしまうというひと昔前のbashの脆弱性を突いた攻撃です。

wget -U "() [ test;];echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http:~

標的サーバーの/etc/passwdが/etc/statusにダウンロードされます。

john the ripperを使い、パスワードの解析を行います。

./john /etc/status

/etc/passwdだけで解析ができるということは、シャドウパスワードが有効ではないのでしょう。90年代ならともかく、現在はありえません。
シャドウパスワードが有効な場合、解析には/etc/shadowも必要なのですが、パーミッションがrootにしか読めない0400または0000に設定されているため、もっと特殊な方法でないと落とせません。

passwdを解析した結果、「olofson66」というパスワードが分かります。エリオット曰く「多少工夫しているが初心者レベル」だそうで。判明したパスワードでメールサーバーにログインします。しかし、フロントエンドとバックエンドが同じサーバーであることはありえないし、UNIXアカウントとログインフォームのアカウントが一致しているというのもセキュリティ的にはありえない事です。

John the RipperでLinuxのパスワードを解読する方法

JB23W 10型のギア比と速度を計算するjs

JB23W 10型のギア比は次のようになっています。JB23Wのギア比については新型ジムニーが発売される前までは公式サイトに載っていたのですが、現在は見当たらないのでカタログから引用しました。

1速:5.106、2速:3.017、3速:1.908、4速:1.264、5速:1.000、R:5.151
副変速機:1.320 / 4.300
最終減速比:4.300

これを基に自動計算するjsを書きました。
jsはこちら

計算方法は以下の通りです。

タイヤの周長(km)を求める

車速を調べるためにはタイヤ1回転あたりどれだけの距離を進むのか調べる必要があります。

タイヤのスペックについては次のように表記されています。「185/85 R16」ここではTOYO OpenCountry R/Tを例にします。
これは左からタイヤの横幅(mm)、扁平率、ラジアル構造、ホイールのインチ数を意味しています。

横幅mm × 扁平率でサイドウォールの高さが求められます。185 * 0.85 = 157.25mm サイドウォールはホイールの両側にあるため* 2して314.5mmとなります。

ホイール部分のインチ数をmmに直し16 * 25.4 = 406.4mm、これをサイドウォールと足すとタイヤの直径が出ます。314.5 + 406.4 = 720.9mm

タイヤの直径に円周率を掛ければ円周が出ます。720.9mm * 3.14 = 2263.626mm
そして / 1000000で単位をkmに直します。0.002263626km

エンジン回転数から車速を求める方法

1速、2000回転、副変速機:Highの時の速度を求めるとします。

エンジン回転数 / ギア / 副変速機 / 最終減速比でドライブシャフトの回転数を求めます。
2000 / 5.106 / 1.320 / 4.300 = 69.009これでは分速なので* 60で時速に直します。4140.54回転/h

先ほど求めたタイヤの長さと回転数を掛けると速度が求められます。
0.002263626 * 4140.54 = 9.3726km/h

車速からエンジン回転数を求める方法

40km/h、3速、副変速機:Highの時の回転数を求めるとします。

ギア * 副変速機 * 最終減速比でシャフト1回転あたりのエンジン回転数を求めます。
1.908 * 1.320 * 4.300 = 10.829808回転

時速 / タイヤの長さ / 60で1分間のタイヤの回転数を求めます。
40 / 0.002263626 / 60 = 294.5127回転

シャフト1回転あたりのエンジン回転数とタイヤの回転数を掛けるとエンジン回転数が求められます。
10.829808 * 294.5127 = 3189.5159rpm

jsはこちら