56秒で634件のパスワード
ある開発者が、実在しない会社との面接を2回受けました。本物のWebサイト、本物の顔写真、本物の技術面談。その後、コーディング課題の実施を指示されました。1分もかからずに、Chromeに保存されたすべてのパスワード、macOS Keychain、そして暗号資産ウォレットのデータが持ち出されました。
ある開発者 —— セキュリティに注意を払い、経験も豊富で、自ら詐欺を探すような人物 —— が、実在しない会社による複数段階の面接プロセスを受けました。人事面談。2名のエンジニアによる技術面談。チームの顔写真が掲載された本物のWebサイト。本物のLinkedInプロフィール。数週間にわたる関係構築。
続いて、画面共有をしながら短いコーディング課題を実施するよう求められました。
56秒後、攻撃者はChromeに保存された634件のパスワード、macOS Keychainファイル(復号鍵そのものが入っています)、そしてMetaMaskウォレットのデータを手にしていました。
攻撃の手口
GitHubリポジトリは一見きれいでした。バックエンドのファイルが数個あるだけで、不審な点はありません。ただし、依存パッケージの一つ winston-middleware —— 名前はごく普通のログ用パッケージです —— が、さらに next-runtimejs という依存を持っていました。
兵器はそこにありました。
npm install を実行した瞬間、シェルスクリプトが無言で実行されます。確認プロンプトも、警告表示もありません。Go製のバックドアをダウンロードし、以降はすべての起動時に自動起動するよう登録しました。
これはスクリプトキディの道具ではありません。RC4で暗号化された独自のC2プロトコル。シェル実行、ファイル窃取、Chromeパスワードの抽出、Keychainの持ち出し、暗号資産ウォレットを狙う各種コマンド。職業的に作られています。
バックドアは16:16:37に起動しました。Chromeのパスワードへのアクセスは16:17:33。開発者はmacOSに表示された外部接続の通知に気づき、1分以内にWiFiを切断しましたが、被害はすでに発生していました。
面接が重要だった理由
この攻撃は、いきなり送るメールでは成立しません。見知らぬ人からの「このリポジトリを実行して」は無視されます。
しかし、面接を2回受けた後なら? 開発者を狙う偽の求人詐欺がどれだけ多いかを笑いながら話した後なら? 面接官の一人が「バックドアを探してみてください」と微笑みながら言った後なら?
警戒が解けるのはその時です。信頼こそが攻撃経路であり、マルウェアは単なるペイロードに過ぎません。
開発者は的確に述べています。「私に起きたなら、あなたのチームの誰にでも起き得ます」
Chromeのパスワードが実際に意味するもの
Chromeは保存されたパスワードをAESで暗号化します。復号鍵はmacOS Keychainに保存されます。攻撃者は両方のファイルを1分未満で持ち出しました。
保存されたパスワードはすべて —— 銀行、メール、GitHub、クラウドのコンソール —— 攻撃側で読み取り可能になりました。Keychainファイルはオフラインで、試行回数の制限なく解析できます。開発者はすべてのパスワードを変更する必要がありました。
ブラウザに保存するパスワードには、こうした問題があります。暗号化鍵が同じマシン上に存在するためです。マシンが侵害されれば、その「暗号化」は飾りに過ぎません。
DPRKの手口
この開発者は、自身の「前の会社」も3か月前に北朝鮮によってハッキングされていたと述べています。これは「Contagious Interview」キャンペーンです。DPRKの国家支援を受けた攻撃者が、偽の求人面接を装って開発者のマシンにマルウェアを仕込みます。
無差別ではありません。開発者を標的にするのは、開発者がアクセスを持つもの —— 本番環境の資格情報、署名鍵、クラウド基盤、そしてますます増えてきている、さらに多くの情報にアクセスできるAIエージェントのトークン —— のためです。
規模は産業的です。生成された顔写真を持つ偽の会社。作り込まれたWebサイト。数週間続く面接プロセス。投資するだけのリターンがあるからです。
「パスワード管理ツールは役に立たない」
この開発者はスレッドの中で、次のような指摘をしています。「このようなバックドアを使ってあなたのコンピュータにアクセスできているなら、パスワード管理ツールは役に立たない。後から任意のファイルを送信でき、あなた専用の特別な攻撃コードを作り、キーロガーを使い、スクリーンショットを撮れるからだ」
この指摘は、部分的には正しく、部分的には誤りです。
ボルトをローカルディスクに保存し、自分で入力するマスターパスワードでロック解除するパスワード管理ツールであれば —— はい、キーロギングとファイルアクセスを備えたバックドアに侵害され得ます。
しかし、ハードウェアに紐づく鍵を持つパスワード管理ツール —— 復号鍵が物理認証デバイスから導出され、ディスク上のファイルとして存在しないもの —— は根本的に異なります。バックドアはファイルを窃取し、キー入力を記録し、スクリーンショットを撮ることはできます。しかし、物理的にタップしている間だけハードウェアセキュリティモジュール内部に存在する鍵を取り出すことはできません。
634件のChromeパスワードが窃取されたのは、暗号化されたデータと復号鍵の両方がファイルシステム上のファイルだったからです。復号鍵の取得にデバイスの物理的所持が必要であれば、ファイルを窃取しても得られるのは暗号化されたデータの塊だけでしかありません。
対応策
- 面接用のコードを普段使いのマシン上で実行しない。VMまたは別デバイスを使う
- 見慣れないリポジトリでは、実行前に
npm install --ignore-scriptsを実行する - 新規接続を警告するアウトバウンドファイアウォール(Little Snitch、LuLu)を利用する
- Chromeへのパスワード保存をやめる。これは例外なく
- 暗号資産はブラウザ拡張ではなくハードウェアウォレットに保管する
- リクルーターから依頼されるコーディング課題は、どれだけ打診の回数があっても、敵対的な可能性があるものとして扱う
この開発者が被害を最小限に抑えられたのは、macOSのポップアップが外部接続をその時点で検知したためです。多くの人は、Allowを二度と考えずにクリックしていたでしょう。
56秒。必要なのはそれだけです。