夢の“スカウト”を開けたら罠だった。LinkedIn経由で届いた「コード見て」が、`npm install`した瞬間に乗っ取る仕掛けだった話
フルスタックのPythonエンジニア、ローマン・イマンクロフさんがLinkedInで受け取った“暗号通貨スタートアップの採用スカウト”が、実はマルウェアの罠だった話がHacker Newsで話題に。採用担当を名乗る人物から「うちのGitHub(公開ソースコード置き場)のコードをちょっと見て、古くなったNodeモジュールの不具合を確認して」と頼まれる——が、これは`npm install`(必要な部品をネットから取り寄せて組み込むコマンド)を実行させるための誘導だった。package.jsonに、installの直後に自動で走る`prepare`スクリプトが仕込まれ、“テスト用コード”の顔をした約250行のファイルが、バラバラのかけらから隠しURLを組み立てて接続。「サーバーから送られてきた命令を何でも実行する」=遠隔操作で中身を抜かれる二段構え。スカウト本人もコードの作者名も、実在のエンジニアと芸術系ライターの身元を盗んだなりすましだった。ローマンさんは用心して自分のPCではなく“読み取り専用の隔離環境(サンドボックス)”で開いたため無傷。教訓は「知らない人の“ちょっと見て”を、自分のマシンで動かさない」。4人がこの巧妙な罠を掘る。
みずき:…就活とか転職してる人、ちょっとだけ聞いて。夢みたいなスカウトほど、裏があるって話。
ひかり:えっ何それこわい!スカウトって、あの「あなたに興味があります!」っていきなり来る、あれのこと!?
ことね:ローマンさんっていうエンジニアの実話ね。LinkedInで、ある暗号通貨スタートアップの“採用担当”から「うちのコード、ちょっと見てくれない?」ってDMが来たの。GitHub——公開されたソースコードの置き場ね——のリポジトリを渡されて、「古くなった部品(Nodeモジュール)の不具合だけ確認して」って頼まれた。
ひかり:コードを見てほしいだけなら、なんだか親切で良さそうだけど…どこが罠なの?
ことね:その「確認して」が誘導なの。確認するには、まず`npm install`——必要な部品をネットから取り寄せて組み込むコマンド——を打つ流れになるでしょ。で、そのinstallが終わった“直後”に、こっそり別の命令が自動で走る仕掛け(package.jsonの`prepare`という設定)が仕込んであったの。
みずき:つまり頼みは「見て」じゃなく「動かして」。コードを読むだけのつもりでも、入れた瞬間にもう手遅れ。…手口が陰湿。
ひかり:うわっ、その勝手に走る命令って、いったい何してくるの!?
ことね:表向きは“テスト用のコード”の顔をした250行くらいのファイルに、バラバラのかけらをつなげて隠しURLを組み立てて、そこへ接続。あとは「サーバーから送られてきた命令を何でも実行する」——つまり相手の好きなように遠隔操作されて、パソコンの中の鍵やお財布を抜かれてもおかしくない状態よ。
みずき:しかも、スカウトの人もコードの作者名も、実在する他人の名前を盗んだなりすまし。本物のエンジニアと、芸術系のライターさんだったって。…顔まで借り物。
ひかり:こわすぎる…!それで、ローマンさんは無事だったの!?
ことね:それがね、用心深い人で——自分のパソコンには入れずに、“読み取り専用の隔離された箱(サンドボックス)”の中で開いたの。だから無傷。教訓は「知らない人の“ちょっと見て”は、自分のマシンで動かさない」。これに尽きるわね。
ひなた:ふぁ〜…「知らない人にもらったお菓子は食べちゃだめ」って、おばあちゃんが言ってたのです。…パソコンのお菓子も、おなじなのです。あけて、においをかぐ前に——別のお皿で、そっと開けるのがいいのです。
まとめ:うますぎるスカウトには、たいてい「ちょっと動かしてみて」がくっついてくる。知らない人のコードは、自分のマシンじゃなく“別のお皿”で開ける——ひなた家の家訓「知らない人のお菓子は食べない」は、ネットでもちゃんと効くのです。