感染力の強いインタビュー:詐欺師がいかにして偽の求人職を通じてマルウェアを配布するか
開発者のための現代的な仕事探しは、しばしばDMで行われます。LinkedInはネットワーキングの宝庫ですが、同時に巧妙なソーシャルエンジニアリング攻撃の主要なベクトルにもなっています。開発者 ashishb による最近の報告は、不穏な傾向を明らかにしています。詐欺師がリクルーターや創設者を装い、「技術面接」や「プロジェクト評価」の名目で、技術エキスパートにローカルマシンへのマルウェアのインストールを仕向けるのです。
これは単なるフィッシングリンクではありません。開発者が自身のツール、具体的には GitHub、VS Code、および npm エコシステムに対して寄せている信頼を悪用した、多段階の攻撃です。
攻撃の解剖学:2つのケーススタディ
2つの異なる事例において、著者は技術アドバイザーとして LinkedIn でアプローチを受けました。どちらもほぼ同一のスクリプトに従っていました。プロフェッショナルな連絡、信頼関係を築くための短い導入の会話、そしてコードベースのレビュー依頼です。
ケース1:VS Code と npm ライフサイクルによるトリガー
最初の事例では、攻撃者はヨーロッパのソフトウェアエンジニアを装っていました。短いミーティングと Figma モックのレビューの後、「採用マネージャー」は候補者に GitHub リポジトリをクローンし、VS Code を通じて画面を共有することを促しました。
危険はリポジトリの設定にありました。分析の結果、4つの異なる攻撃ベクトルが判明しました。
- VS Code Auto-Run:
.vscode/tasks.jsonファイルはrunOn: folderOpenトリガーで設定されていました。VS Code でフォルダを開いた瞬間に、Vercel でホストされた C2 (Command and Control) サーバーからシェルスクリプトをダウンロードして実行する curl/wget コマンドが実行されました。 - 環境変数の流出: サーバーコードには、起動時に C2 URL をデコードし、
process.env全体(AWS キー、Stripe シークレット、データベース URI を含む)を攻撃者に POST する関数が含まれていました。 - リモートコード実行 (RCE): 同じサーバーサイドのロジックが、C2 サーバーからの HTTP レスポンスを直接
new Function()呼び出しにパイプしており、攻撃者が被害者のマシン上で任意のコードを実行することを可能にしていました。 - 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 installやnpm startをを実行するよう強く求める面接官には疑念を抱いてください。 **Web3 「アドバイザー」の役割:** コミュニティが指摘しているように、「Web3 技術アドバイザー」という、勧誘のないオファーファーは、現在、非常に高いリスク信号です。
技術的な防御策
- ローカル実行を避ける: 未知のソースからの
npm installやバイナリの実行を、ホストマシン上で決して行わないでください。 - Cloud IDEs の使用: GitHub Codespaces や Gitpod のようなツールは、使い捨て可能な、隔離された環境を提供し、、ローカルのファイルシステムや環境変数を侵害から保護します。
- コンテナ化: 未知のコードを Docker コンテナ内で、あるいは専用のサンドボックス内で実行してください。これにより、もしプロセスが
process.envを流出させようとした場合、プロセスは個人のシークレットではなく、コンテナの限定された環境のみを見ることることえます。 - 仮想マシン: 高リスクな評価の案件では、クラウド上の使い捨て可能な VM をレンタルして、自宅のネットワークから完全に隔離することを確保してください。
「誰も、オープンソースにするつもりがない限り、公開的に自分のコードリポジトリを公開することはありません... 誰も、NDA がなければ、自分のプライベートなコードリポジトリを共有することはありません。」
すべての勧誘のないリポジトリを、マルウェア配布の潜在的な手段として扱うことで、開発者は、自身のマシンと保持しているシークレットを保護することができます。