感染力の強いインタビュー:詐欺師がいかにして偽の求人職を通じてマルウェアを配布するか

開発者のための現代的な仕事探しは、しばしばDMで行われます。LinkedInはネットワーキングの宝庫ですが、同時に巧妙なソーシャルエンジニアリング攻撃の主要なベクトルにもなっています。開発者 ashishb による最近の報告は、不穏な傾向を明らかにしています。詐欺師がリクルーターや創設者を装い、「技術面接」や「プロジェクト評価」の名目で、技術エキスパートにローカルマシンへのマルウェアのインストールを仕向けるのです。

これは単なるフィッシングリンクではありません。開発者が自身のツール、具体的には GitHub、VS Code、および npm エコシステムに対して寄せている信頼を悪用した、多段階の攻撃です。

攻撃の解剖学:2つのケーススタディ

2つの異なる事例において、著者は技術アドバイザーとして LinkedIn でアプローチを受けました。どちらもほぼ同一のスクリプトに従っていました。プロフェッショナルな連絡、信頼関係を築くための短い導入の会話、そしてコードベースのレビュー依頼です。

ケース1:VS Code と npm ライフサイクルによるトリガー

最初の事例では、攻撃者はヨーロッパのソフトウェアエンジニアを装っていました。短いミーティングと Figma モックのレビューの後、「採用マネージャー」は候補者に GitHub リポジトリをクローンし、VS Code を通じて画面を共有することを促しました。

危険はリポジトリの設定にありました。分析の結果、4つの異なる攻撃ベクトルが判明しました。

  1. VS Code Auto-Run: .vscode/tasks.json ファイルは runOn: folderOpen トリガーで設定されていました。VS Code でフォルダを開いた瞬間に、Vercel でホストされた C2 (Command and Control) サーバーからシェルスクリプトをダウンロードして実行する curl/wget コマンドが実行されました。
  2. 環境変数の流出: サーバーコードには、起動時に C2 URL をデコードし、process.env 全体(AWS キー、Stripe シークレット、データベース URI を含む)を攻撃者に POST する関数が含まれていました。
  3. リモートコード実行 (RCE): 同じサーバーサイドのロジックが、C2 サーバーからの HTTP レスポンスを直接 new Function() 呼び出しにパイプしており、攻撃者が被害者のマシン上で任意のコードを実行することを可能にしていました。
  4. npm ライフサイクルフック: package.json には prepare スクリプトが含まれていました。npm install は自動的に prepare スクリプトをトリガーするため、開発者が依存関係をインストールしようとした瞬間に、アプリケーションが起動する前であってもマルウェアが起動しました。

ケース2:難読化されたバックドア

2番目の攻撃は、不動産 MVP のための Bitbucket リポジトリに関わるものでした。この攻撃はより巧妙で、エラーハンドラー内にペイロードを隠していました。

  • ペイロード: errorHandler.js という名前のファイルは、Function.constructor を使用して渡された文字列を実行していました。
  • トリガー: マルウェアは、バリデーター・ミドルウェアのモジュール・トップレベルでトリガーされました。これは、サーバーが起動してミドルウェアを require するやいなや、バックドアがアクティブになることを意味します。
  • カモフラージュ: 攻撃者は config.env.example ファイルを使用して C2 URL とシークレット・ヘッダーを保存していました。dotenv を介してこの「例」ファイルを明示的にロードすることで、ユーザーが実際の .env ファイルを作成していなくても、マルウェアは機能し続けました。

大きな構図:国家主導の脅威

これらの攻撃は、既知の高度な持続的脅威 (APT) グループが使用する戦術を反映しています。著者は、以前にソーシャルエンジニアリングを使用して開発者を侵害し、DeFi プロトコルから数億ドルを盗み出した北朝鮮ベースの詐欺師(Lazarus Group など)との類似性を指摘しています。「技術アドバイザー」をターゲットにすることで、攻撃者は、機密性の高い本番環境や暗号化キーへのアクセス権を持つ可能性が高い、価値の高いターゲットにアクセス権を得ることができます。

自分自身を守る方法

開発者にとって、未知のリポジトリを扱う際、「信頼するが、確認する」というモデルでは不十分です。以下は、注意すべきレッドフラッグと防御戦略です。

注意すべきレッドフラッグ

  • 即座のコードアクセス: NDA が署名される前、あるいは組織に正式にオンボーディングされる前に、リポジトリを共有する者は注意が必要です。
  • ローカルでの実行を強要: ライブ通話中に、リポジトリをクローンし、個人のマシンで npm installnpm start をを実行するよう強く求める面接官には疑念を抱いてください。
  • **Web3 「アドバイザー」の役割:** コミュニティが指摘しているように、「Web3 技術アドバイザー」という、勧誘のないオファーファーは、現在、非常に高いリスク信号です。
    

技術的な防御策

  • ローカル実行を避ける: 未知のソースからの npm install やバイナリの実行を、ホストマシン上で決して行わないでください。
  • Cloud IDEs の使用: GitHub Codespaces や Gitpod のようなツールは、使い捨て可能な、隔離された環境を提供し、、ローカルのファイルシステムや環境変数を侵害から保護します。
  • コンテナ化: 未知のコードを Docker コンテナ内で、あるいは専用のサンドボックス内で実行してください。これにより、もしプロセスが process.env を流出させようとした場合、プロセスは個人のシークレットではなく、コンテナの限定された環境のみを見ることることえます。
  • 仮想マシン: 高リスクな評価の案件では、クラウド上の使い捨て可能な VM をレンタルして、自宅のネットワークから完全に隔離することを確保してください。

「誰も、オープンソースにするつもりがない限り、公開的に自分のコードリポジトリを公開することはありません... 誰も、NDA がなければ、自分のプライベートなコードリポジトリを共有することはありません。」

すべての勧誘のないリポジトリを、マルウェア配布の潜在的な手段として扱うことで、開発者は、自身のマシンと保持しているシークレットを保護することができます。

Sources