ひよっこサウナ blog

バグバウンティ・マルウェア解析・フォレンジックに興味があるTier1 SOCアナリスト

教習所のオンライン学科(N-LINE)で顔認証NGに悩む人へ|OBSバーチャルカメラで解決した話

この記事の対象者

  • 教習所のオンライン学科(N-LINE等)でカメラ判定NGを食らった経験がある人
  • メモを取ったり教本を確認するだけでNGになるのがストレスな人
  • 動画の内容はちゃんと見たいが、カメラを気にして集中できない人

注意: この方法は「動画を見ずにサボる」ためのものではありません。顔認証の誤判定を回避し、学科の内容に集中するためのTipsです。

背景:N-LINEの顔認証は厳しい

最近、こんなポストがバズっていた。

残り1分半でNG判定。8.5万いいね。共感の嵐。

N-LINEに限らず、教習所のオンライン学科はAI顔認証で受講態度をチェックしている。NG判定が一定回数溜まると強制終了され、最初からやり直しになる。

NG判定になる主な条件

行為 判定
カメラから顔が消える NG
下を向く(メモ、教本) NG
居眠り NG
マスク着用で顔が認識できない NG
逆光で顔が暗い NG
他の人がカメラに映り込む NG
別ウィンドウを開く NG

メモを取るだけでNG。教本を確認してもNG。真面目にやっているのに判定で落とされるのがこのシステムの問題点。

カメラチェックの仕組み

実際にN-LINEを受講して気づいたのは、カメラは常時監視ではないということ。

  • 約2分おきにランダムなタイミングで写真が撮影される
  • 撮影タイミングは数秒程度
  • その瞬間の顔の向きや状態がチェックされる
  • 3回連続でNGになると強制終了

つまり、たまたまチェックのタイミングでメモを取っていたり、ふと目を逸らしただけでNGになる。50分近く真面目に見ていても、最後の数分で運悪くNGを食らうと全部やり直し。これがバズった理由。

解決策:OBSのバーチャルカメラ

PCのブラウザでバーチャルカメラを使えば、この問題から解放される。

仕組みはシンプルで、自分がカメラを見ている映像を事前に録画し、それをループ再生してカメラ入力として使う。AIは録画映像をチェックするので、常に「正面を見ている状態」と判定される。

必要なのは OBS Studio だけ。無料・オープンソースで、Windows / Mac / Linux対応。

Step 1:OBSをインストール

公式サイトからダウンロードしてインストール。特別な設定は不要。

OBS Studio 26.0以降はバーチャルカメラ機能が標準搭載されているので、追加プラグインは不要。

Step 2:カメラ映像を録画する

まず、バーチャルカメラで流すための「自分がカメラを見ている動画」を撮影する。

  1. OBSを開く
  2. 「ソース」の「+」をクリック → 「映像キャプチャデバイス」を選択
  3. デバイスで自分のWebカメラを選択
  4. プレビューで映りを確認し、画面いっぱいに顔が映るようにサイズ調整
  5. カメラを見ながら自然な姿勢で「録画開始」
  6. 約1分間、動画を見ているような自然な姿勢でカメラを見続ける
    • 完全に静止するのではなく、軽く瞬きしたり微動する程度が自然
  7. 「録画終了」

録画ファイルはデフォルトで C:\Users\{ユーザー名}\Videos (Windowsの場合)に保存される。

Step 3:録画した動画をソースに設定する

  1. 先ほど追加した「映像キャプチャデバイス」のソースを削除
  2. 「ソース」の「+」をクリック → 「メディアソース」を選択
  3. 「ローカルファイル」にチェックを入れ、Step 2で録画した動画ファイルを選択
  4. 「繰り返し(ループ)」にチェックを入れる ← これが重要
  5. OKで閉じる

プレビューで動画がループ再生されていることを確認。

Step 4:バーチャルカメラを開始する

OBSのメイン画面で「仮想カメラ開始」ボタンをクリック。

これで「OBS Virtual Camera」がシステムのカメラデバイスとして認識される。

Step 5:ブラウザのカメラをOBSに切り替える

N-LINEをPCのブラウザで開き、カメラ選択画面で「OBS Virtual Camera」を選択する。

ブラウザのカメラ設定変更方法:

Chrome の場合:

  1. アドレスバー左のカメラアイコンをクリック
  2. または chrome://settings/content/camera でデフォルトカメラを変更

Edge の場合:

  1. edge://settings/content/camera でデフォルトカメラを変更

Firefox の場合:

  1. カメラ許可のポップアップで「OBS Virtual Camera」を選択

これで完了。N-LINEの顔認証チェックにはOBSから流れるループ映像が使われるので、実際の自分はメモを取ろうが教本を見ようが自由に動ける。

OBS以外の選択肢

OBSが最も手軽だが、他にもバーチャルカメラ機能を持つソフトがある。

ソフト 対応OS 料金 特徴
OBS Studio Win / Mac / Linux 無料 録画〜バーチャルカメラまで全部これ1本で完結
ManyCam Win / Mac 無料プランあり UIがシンプル。動画ファイルをソースに指定可能
FineCam Win / Mac 無料プランあり AI背景除去などの追加機能あり
Webcamoid Win / Mac / Linux 無料 オープンソース。軽量

個人的にはOBS一択。録画もバーチャルカメラも1つのソフトで完結するし、完全無料で広告もない。

注意点

ループ再生を忘れない

Step 3で「繰り返し(ループ)」にチェックを入れ忘れると、録画が1回再生されて終わる。1分の録画なら1分後にカメラが真っ暗になり、確実にNG判定を食らう。

録画時は自然に

完全に固まっていると不自然。普通に動画を見ているときの自然な姿勢で、軽く瞬きしながら撮影するのがベスト。

PCのブラウザで受講する

この方法はPCのブラウザ前提。スマホアプリ版のN-LINEではバーチャルカメラは使えない。

動画の内容はちゃんと見る

当たり前だが、カメラを気にしなくてよくなっただけで、動画の内容は集中して見よう。学科の知識は路上に出てから自分を守る武器になる。

二段階審査がある場合

教習所によっては、AI判定後に翌日指導員が映像を目視確認する二段階審査を採用している。ただし、チェック対象は「受講態度」であり、バーチャルカメラの映像は普通に自分がカメラを見ている映像なので、目視チェックで弾かれる可能性は低い。

最初は「毎回同じ服装だとバレるのでは?」とビビっていたが、数日間同じ録画映像を使い回しても特に何も言われなかった。自分の場合は最初の数回だけ真面目に撮り直して、後半はずっと同じ動画で通していた。

まとめ

  • N-LINEの顔認証は約2分おきのランダムチェック
  • メモや教本確認のタイミングが悪いとNGになる
  • OBSで自分の映像を1分撮影 → ループ再生 → バーチャルカメラとして使用
  • ブラウザのカメラを「OBS Virtual Camera」に変更するだけ
  • カメラを気にせず、学科の内容に集中できるようになる

教習所のオンライン学科で顔認証に振り回されている人は試してみてほしい。

npm install したら北朝鮮が来た話——あるいは、月曜日の朝に世界が終わるとはこういうことだ

npm install したら北朝鮮が来た話——あるいは、月曜日の朝に世界が終わるとはこういうことだ

📝 この記事について 本記事は、セキュリティリサーチブログ watchTowr Labs のライティングスタイル(ユーモアと皮肉を交えた独特の文体)に影響を受けて書いたパロディ記事です。 技術的事実はすべて一次ソースに基づいていますが、文体・演出・括弧内ツッコミなどは watchTowr Labs へのリスペクトを込めたオマージュです。

技術的に正確な情報だけが必要な方はこちら → 週1億DLのnpmパッケージaxiosが侵害された日——2026年3月31日 サプライチェーン攻撃の全記録

⚠️ 事実確認済み この記事はフィクションではない。すべての技術的事実は確認済みだ。だからこそしんどい。


椅子を引いて座ってほしい。

お茶でもコーヒーでも、何か飲み物を手元に用意してほしい。アルコールでも構わない。むしろアルコールの方がいいかもしれない。

2026年3月31日、月曜日の朝に何が起きたか、これから話す。

我々はこの記事を書きながら、何度かため息をついた。笑った。また溜め息をついた。

あなたも同じような気持ちになると思う。


プロローグ:祝・月曜日(という名の地獄への入り口)

少し想像してほしい。

月曜日の朝、あなたはコーヒーを飲みながらターミナルを開く。新しいプロジェクト、新しい週、新しい希望。npm install を実行する。

そのたった1行が、あなたのマシンを北朝鮮に開放していたかもしれない。

月曜日が台無しだ。

axiosをご存じだろうか。まあご存じだろう。週あたりのダウンロード数は約1億件。Wizによるとクラウド環境の約80%に存在する。*1 JavaScriptを書いたことがある人間なら、import axios from 'axios' と書いた回数はおそらく自分の年齢より多い。

つまりこれは、インターネットの酸素だ。

酸素が毒になった。

それが、2026年3月31日に起きたことだ。


第一章:侵入——「メールアドレスを変えるだけで世界を支配できる」という事実

strap in。

攻撃の起点は、axiosの主要メンテナ jasonsaayman のnpmアカウントだった。

攻撃者がまず何をしたか。

メールアドレスを変えた。

以上だ。(以上ではないが、まずここから始める必要がある)

登録メールを ifstap@proton.me(ProtonMailですよ)に書き換え、盗んだnpmアクセストークンで直接パッケージを公開した*2

GitHub Actions OIDCによる正規のリリースフロー? スキップ。コードレビュー? スキップ。対応するコミット? タグ? リリースノート? 全部スキップ。

GitHubリポジトリには何も残らない。axiosのソースには何も変わっていない。記録も、履歴も、証拠も何もない。

Sigh.

ついでに攻撃者は jasonsaaymanGitHubアカウントにも侵入し、axios宛に提出されていたセキュリティレポートを削除した*3

証拠隠滅まで完璧だ。

We do not envy Jason Saayman. 本当に。

さらに nrwise(メール: nrwise@proton.me)という別のnpmアカウントが、悪意あるパッケージを事前に用意していた。*4

両方ProtonMailだ。無関係に、コメントなしに申し上げておくと——ProtonMailは別に悪くない。ただ「攻撃者はProtonMailが好き」という傾向はある。


第二章:準備——「日曜日から仕込んでいた」という事実が我々をさらに傷つける

3月30日、日曜日の午後2時57分(JST)。

あなたが週末の昼寝をしていた頃、攻撃者は plain-crypto-js@4.2.0 という無害なパッケージをnpmに公開していた。*5

無害なやつを、わざわざ。

なぜか。アカウントの「信頼スコア」を積み上げるためだ。「このアカウントは真面目な開発者ですよ」という実績を事前に作るためだ。

18時間後、本番を差し込んだ。

時刻 (JST) 出来事
3/30 14:57 plain-crypto-js@4.2.0(おとり)を公開
3/31 08:59 plain-crypto-js@4.2.1(本物)を公開
3/31 09:21 axios@1.14.1 公開。感染窓、開く
3/31 10:00 axios@0.30.4 も公開。念には念を
3/31 ~12:15 npmが削除
3/31 12:25 セキュリティホールド適用
3/31 13:26 スタブ公開、完全封じ込め

セキュリティホールドとは: npmが悪意あるパッケージを封じ込めるメカニズム。npmセキュリティアカウントが無害なスタブ(0.0.1-security.0)を公開し、以降 npm install plain-crypto-js を実行するとセキュリティ通知が返るようになる。*6

axios@1.14.1 の感染窓は約2時間53分。週1億DLのライブラリにとってその間に何が起きていたか——あえて計算はしない。*7

Wizは「影響を受けた環境の約3%で実際の実行が観測された」と言っている。*8 3%。週1億DLの3%。

これについては何も言わない。数字をそのまま置いておく。


第三章:仕掛け——「axiosのコードには悪意が1行もない」という、むしろ怖い事実

「axiosのソースコードに悪意ある変更はない」

これは褒め言葉ではない。

攻撃者が加えた変更はたった1つ——package.json へのこの1行だ:*9

"plain-crypto-js": "^4.2.1"

このパッケージはaxiosのソース全体で一度もインポートされていない。存在意義はただひとつ——postinstall フックを実行すること

npm install が走ると、npmは「あ、postinstallスクリプトあるね」と判断して自動実行する。そういう仕様だ。

setup.js は難読化されていた。逆順Base64、修正されたパディング文字、XOR暗号(キー: OrDeR_7077、定数: 333)の組み合わせで。*10

キー名 OrDeR_7077 について、我々はしばらく黙って画面を見つめた。

そして実行後、このスクリプトは自分自身を消した。3ステップで:*11

  1. setup.js(postinstallスクリプト)を削除
  2. postinstallフックを参照している package.json を削除
  3. あらかじめパッケージに package.md という名前で同梱しておいたクリーンなマニフェストを package.json にリネーム

最後の手順が好きだ(好きではない)。

事前に「クリーンなpackage.json」を package.md という名前で同梱しておき、犯行後にすり替える。これを誰かが事前に設計した。設計書に書いた。

我々はこれを発見したとき、「neat」と言った。それ以外の言葉が出なかった。

事後に node_modules/plain-crypto-js/ を確認しても setup.js は消えている。ネットワークログやEDRテレメトリなしでは検出がほぼ不可能だ。*12


第四章:RAT——「設計書から作ったんだろうな」と言うしかないクロスプラットフォーム対応

このRATについて話す前に、Elasticの一言を引用しておく:

「この一貫性は、単一の開発者または密接に連携したチームが共通の設計書から作業していたことを強く示唆する」 — Elastic Security Labs

設計書。攻撃者に設計書がある。

……。

気を取り直して続ける。

macOS・Windows・Linuxの3プラットフォームに対して、同一のC2プロトコルと同一のコマンド体系を持つ実装が用意されている。

C2通信仕様

項目
トランスポート HTTP POST
エンコーディング Base64エンコードJSON
User-Agent mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)
ビーコン間隔 60秒
C2 sfrclak[.]com:8000 / IP: 142[.]11[.]206[.]73
プラットフォーム識別 macOS→packages.npm.org/product0、Windows→product1、Linux→product2

packages.npm.org というホスト名でnpm正規トラフィックを偽装している。*13

ここでいったん、あなたのネットワーク監視ツールに話しかけたい。

packages.npm.org をブロックしたら何が起きるか考えてみよう。大丈夫、我々も考えたくない。

プラットフォーム別ペイロード

macOS: C++製 "macWebT"*14

/Library/Caches/com.apple.act.mond にドロップされる。com.apple.act.mond。Appleのキャッシュデーモンっぽい名前だ。*15

Gatekeeperを通過するために codesign --force --deep --sign でad-hocコード署名する。*16

これについては一言だけ言わせてほしい。

Gasp.

Windows: VBScript、PowerShell、そしてWindowsTerminal詐称

VBScriptが .ps1 をダウンロードし、PowerShellインタープリタを %PROGRAMDATA%\wt.exe にコピーして実行する。*17 wt.exe。Windows Terminalの実行ファイル名だ。

さらに %PROGRAMDATA%\system.bat という download cradle を作成し、ログインのたびにC2からRATを再フェッチする。レジストリ Run キーに MicrosoftUpdate という名前で登録する。*18

MicrosoftUpdatewt.exesystem.bat

Some would say this is disingenuous.

Linux: Pythonで簡潔に

/tmp/ld.pynohup python3 で常駐。シンプルだが同一のC2プロトコルで動く*19

コマンド体系

  • kill: RATを終了。ただしWindowsでは持続性が残る。killで終わらない
  • runscript: コマンド実行(Windows: PowerShell、macOS: AppleScript、Linux: shell)
  • peinject: バイナリを配信・実行
  • rundir: ファイル一覧を返す*20

Huntressの John Hammond は報告した。「すべての感染ホストで、RATは即座にシステム偵察を実行した——ユーザーディレクトリ、ファイルシステム、実行中プロセスをすべて列挙してC2に送信した」*21

月曜日の朝、あなたのマシンで何が開いていたか——すべて送られていたかもしれない。

考えるのをやめよう。


第五章:C2の現在——「死んでいる。誰が殺したかは不明」

記事執筆時点(2026年4月1日。エイプリルフールだが本当の話だ):

$ proxy-web.exe "http://sfrclak.com:8000/6202033"
-> ERR_NAME_NOT_RESOLVED

$ proxy-web.exe "http://142.11.206.73:8000/6202033"
-> ERR_CONNECTION_REFUSED

死んでいる。

攻撃者の自主撤退か、ホスティング会社による停止か、当局の介入か。現時点で公開情報がない。

ThreatFoxにも登録はない。

謎は謎のまま残る。我々はこれに慣れることにした。慣れるしかない。


第六章:帰属——「やっぱりそうか」コーナー

さて。

Elastic Security Labsの分析によると、macOSバイナリはMandiantが追跡する WAVESHAPER という既知のC++バックドアと重大なオーバーラップを示す。WAVESHAPERは UNC1069——北朝鮮(DPRK)関連の脅威クラスタ——に帰属されている。*22

翌4月1日、Google Threat Intelligence Group(GTIG) がElasticとは独立に同じ結論を発表。UNC1069への帰属と、macOS RAT(macWebT)がBlueNoroffインフラに接続していることを確認した。*23*24

2つの独立した大手セキュリティ機関が同じ結論に達した。

Right.

GTIGの主席アナリスト John Hultquist は述べた:

「北朝鮮のハッカーはサプライチェーン攻撃に深い経験を持っており、歴史的にそれを暗号資産の窃取に活用してきた」 — The Record

深い経験。歴史的実績。

SentinelOneはすでに2023年、同グループが偽Zoomキャンペーンで暗号資産企業を標的にしていたことを把握していた。*25 偽Zoom、偽npmパッケージ。一貫している。方向性がぶれていない。

Mandiant CTOの Charles Carmakal はこう警告した。「今回の侵害で盗まれた認証情報が、今後数日・数週間・数か月にわたってさらなるサプライチェーン攻撃を可能にするだろう」と。*26

We do not envy anyone reading this on a Monday morning.

TechCrunchも「北朝鮮が関与」と報じた。*27 もはや誰も驚いていない。

帰属は常に確率的だ。ただ現時点では「DPRK系、高確率」という認識が複数の独立した機関によって支持されている。


第七章:なぜ6分で見つかったのか——「最後に人間が必要だった」という構造的問題

これだけ精巧な攻撃が、なぜ3時間以内に封じ込められたのか。

答えには希望と絶望が同居している。

Snykのタイムラインによると、Socketのスキャナーが公開から約6分後(~00:27 UTC)に検出した*28

npmの公式機構ではなく、サードパーティの監視サービスによって。*29

6分。自動化の勝利だ。3つのシグナルが機能した:

① GitHubに記録のないnpmリリース axiosは通常 GitHub Actions OIDC で公開される。今回は対応するコミットもタグもない。「GitHubの歴史と一致しないリリース」は自動スキャナーにとって赤信号だ。*30

② インポートされていない依存のpostinstall 使われていない依存関係が postinstall フックだけを目的として存在する。供給チェーン攻撃の教科書的パターン。*31

③ 新規アカウント+ProtonMail nrwise は新規で、jasonsaayman のメールも直前にProtonMailに変わっていた。*32

検出から削除まで:1時間25分のギャップ

ElasticがGitHub Security Advisoryをファイルしたのが 01:50 UTC。npmが削除したのが ~03:15 UTC。*33*34

6分で検出。1時間25分で削除。

自動化は仕事をした。その後は人間が処理した。

「最終的な封じ込めは人間に依存する」という構造——これは今後の課題として業界全体に残っている。我々はこれを指摘するたびに少しだけ疲れる。でも指摘し続ける。


第八章:npmの対応——「侵害されたアカウントの代わりに消しました」

削除を実施したのは npmチームだ。jasonsaayman は侵害されていたので自分では動けなかった。*35

npmの対応:

  1. 悪意あるaxiosバージョン(1.14.1・0.30.4)をunpublish
  2. plain-crypto-js にセキュリティホールドを適用
  3. plain-crypto-js@0.0.1-security.0 スタブを公開して後続インストールを無害化

Elasticがaxiosリポジトリ宛にGitHub Security Advisoryをファイルしたのは 01:50 UTC(JST: 10:50)。*36 月曜日が終わる前に対応は完了した。

これは本当によかった。本当に。


第九章:広がる汚染——「axiosだけじゃなかった」という後日談

ところで。

Socketの調査で、同一マルウェアを配布していた別パッケージが2件発見された。*37

パッケージ名 バージョン 手口
@shadanai/openclaw 複数 plain-crypto-js ペイロードを直接同梱
@qqbrowser/openclaw-qbot 0.0.130 改ざんした axios@1.14.1node_modules/ に同梱

axiosの正規依存関係は follow-redirectsform-dataproxy-from-env の3つだ。plain-crypto-js の追加はそれだけで明白な改ざんの証拠だ。*38

これはaxiosだけを狙った作戦ではなかった可能性がある。全容はまだわかっていない。

Put that in your threat models.


エピローグ:あなたがすべきこと

まず確認:

npm ls axios
ls node_modules/plain-crypto-js

痕跡の確認:

OS 確認場所
macOS /Library/Caches/com.apple.act.mond
Windows %PROGRAMDATA%\wt.exe%PROGRAMDATA%\system.bat、レジストリ Run キー
Linux /tmp/ld.py

見つかった場合:

  1. node_modules/plain-crypto-js を削除
  2. axios@1.14.0 または 0.30.3 にダウングレード*39
  3. すべての認証情報をローテーション(npmトークン、クラウドクレデンシャル、SSHキー、CI/CDシークレット、本当にすべて)*40
  4. Windows固有: レジストリ Run キー MicrosoftUpdate%PROGRAMDATA%\wt.exe%PROGRAMDATA%\system.bat を削除*41

kill コマンドでRATを止めてもWindowsの持続性は残る。念のため。

再発防止:

  • npm install --ignore-scripts(postinstallを無効化)*42
  • npmの min-release-age(7日以上推奨)*43
  • pnpmの trustPolicy: no-downgrade*44

まとめ——あるいは、我々が毎週月曜日に繰り返し学ぶこと

このインシデントの本質は信頼の搾取だ。

axiosは何年もかけて信頼を積み上げた。だから誰も疑わない。攻撃者はその信頼を正確に理解し、axiosのコードに悪意を1行も書かずに、世界中の開発環境にRATを送り込もうとした。

6分で検出された。1時間25分で封じ込められた。

それでも感染窓は実在した。週1億DLのエコシステムに向けて矢は放たれた。

次は6分で検出されないかもしれない。

npm install を実行するとき——少しだけ立ち止まって考えてほしい。あなたが信頼しているのは、誰が、いつ、どのように公開したパッケージなのかを。

それだけでいい。

我々はこの記事を書き終えて、ため息をついた。

そしてまた来週も、月曜日が来る。

📝 2026年4月1日追記: C2インフラは現時点で停止確認済み。エイプリルフールだが本当の話だ。ここだけは笑えない。

*1:https://www.wiz.io/blog/axios-npm-compromised-in-supply-chain-attack

*2:https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

*3:https://www.bleepingcomputer.com/news/security/hackers-compromise-axios-npm-package-to-drop-cross-platform-malware/

*4:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*5:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*6:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*7:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*8:Wiz調査による数値。根拠・測定方法の詳細は非開示。https://www.wiz.io/blog/axios-npm-compromised-in-supply-chain-attack

*9:https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

*10:https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/

*11:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*12:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*13:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*14:https://www.bleepingcomputer.com/news/security/hackers-compromise-axios-npm-package-to-drop-cross-platform-malware/

*15:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*16:https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/

*17:https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/

*18:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*19:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*20:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*21:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*22:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*23:https://therecord.media/google-links-axios-supply-chain-attack-north-korea

*24:https://www.bleepingcomputer.com/news/security/hackers-compromise-axios-npm-package-to-drop-cross-platform-malware/

*25:https://therecord.media/google-links-axios-supply-chain-attack-north-korea

*26:https://therecord.media/google-links-axios-supply-chain-attack-north-korea

*27:https://techcrunch.com/2026/03/31/hacker-hijacks-axios-open-source-project-used-by-millions-to-push-malware/

*28:Snyk タイムライン記録より "Socket's scanner detects malicious version (within ~6 minutes)" https://snyk.io/blog/axios-npm-package-compromised-supply-chain-attack-delivers-cross-platform/

*29:Aikido - "The attack's detection appears to have relied on vigilant third-party security monitoring rather than automated npm safeguards." https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

*30:https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

*31:https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

*32:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*33:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*34:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*35:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*36:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all

*37:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*38:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*39:https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan

*40:https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat

*41:https://thehackernews.com/2026/03/axios-supply-chain-attack-pushes-cross.html

*42:https://blog.flatt.tech/entry/axios_compromise

*43:https://blog.flatt.tech/entry/axios_compromise

*44:https://blog.flatt.tech/entry/axios_compromise

メモ バグバウンティで使えそうな情報

Bug Bounty 情報ソース

Bug Bounty JP Podcastのshow notesから引っ張ってきてAIに分類・拡充してもらいました。

永続的な情報ソース(定期的にチェックすべき)

バグバウンティプラットフォーム・プログラム

ソース URL 備考
HackerOne https://hackerone.com/ 最大手プラットフォーム
Meta Bug Bounty https://bugbounty.meta.com/scope/ Metaのスコープ一覧
Epic Games (H1) https://hackerone.com/epicgames
Grafana Bug Bounty https://github.com/grafana/bugbounty GitHub上でスコープ管理

学習プラットフォーム

ソース URL 備考
PortSwigger Web Security Academy https://portswigger.net/web-security Web脆弱性の体系的学習(Lab付き)
PortSwigger URL Validation Bypass Cheat Sheet https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet SSRF用チートシート

研究者ブログ(継続的に発信)

研究者 URL 専門
Orange Tsai https://blog.orange.tw/ Apache/PHP/Server-side全般
ryotak https://blog.ryotak.net/ サプライチェーン、Git、日本語
Sam Curry https://samcurry.net/ 大企業のバグバウンティ
Alex Chapman https://blog.ajxchapman.com/
joaxcar https://blog.joaxcar.com/
masatokinugawa https://github.com/masatokinugawa/filterbypass/wiki XSSフィルタバイパス集

企業リサーチブログ(継続的に発信)

組織 URL 専門
PortSwigger Research https://portswigger.net/research Web最先端リサーチ
Flatt Security https://flatt.tech/research/posts/ Race condition, Git, Supply chain
Assetnote https://www.assetnote.io/resources/research/ 攻撃面分析
SonarSource https://www.sonarsource.com/blog/ コード品質・脆弱性
Wiz https://www.wiz.io/blog/ クラウドセキュリティ
Securitum https://research.securitum.com/ Mutation XSS等
Codean Labs https://codeanlabs.com/blog/ CVE分析

X/Twitter フォロー推奨アカウント

アカウント URL 備考
@HackerOne (H1) https://x.com/Hacker0x01 LHE招待、新プログラム告知
@NahamSec https://x.com/NahamSec バグバウンティ教育・コミュニティ
@Rhynorater https://x.com/Rhynorater Critical Thinking Bug Bounty Podcast
@SinSinology https://x.com/SinSinology
@samwcyo (Sam Curry) https://x.com/samwcyo
@ryotkak https://x.com/ryotkak
@kinugawamasato https://x.com/kinugawamasato XSS研究
@kevin_mizu https://x.com/kevin_mizu DOM系ツール開発
@albinowax (James Kettle) https://x.com/albinowax PortSwigger Research Director
@ajxchapman https://x.com/ajxchapman
@assetnote https://twitter.com/assetnote
@CaidoIO https://twitter.com/CaidoIO Burp代替ツール
@flatt_security https://x.com/flatt_security
@sonar_research https://x.com/sonar_research
@thezdi (ZDI) https://x.com/thezdi 脆弱性買取プログラム
@renniepak https://x.com/renniepak
@hackerscrolls https://x.com/hackerscrolls バグバウンティTips

ツール

ツール URL 用途
Caido https://github.com/caido/caido Burp Suite代替(Rust製、高速)
DOMLogger++ https://github.com/kevin-mizu/domloggerpp DOM XSS検出用ブラウザ拡張
DOMPurify https://github.com/cure53/DOMPurify サニタイズライブラリ(バイパス研究対象)
reNgine https://github.com/yogeshojha/rengine 自動リコン・脆弱性スキャン
MobSF https://github.com/MobSF/Mobile-Security-Framework-MobSF モバイルアプリ解析

チートシート・ペイロード集

総合

リポジトリ URL 備考
swisskyrepo/PayloadsAllTheThings https://github.com/swisskyrepo/PayloadsAllTheThings 75k+ stars。XSS/SQLi/SSRF/SSTI/XXE/CMDi/CORS等全網羅。最重要
OWASP/CheatSheetSeries https://github.com/OWASP/CheatSheetSeries 28k+ stars。OWASP公式。防御視点だが攻撃面の理解にも必須
carlospolop/hacktricks https://github.com/carlospolop/hacktricks Wiki形式のペンテスト百科事典(https://book.hacktricks.xyz
EdOverflow/bugbounty-cheatsheet https://github.com/EdOverflow/bugbounty-cheatsheet XSS/SSRF/XXE/Open Redirect/CRLF等をファイル別に整理
daffainfo/AllAboutBugBounty https://github.com/daffainfo/AllAboutBugBounty 脆弱性タイプ別バイパス・ペイロード集
0xn3va/cheat-sheets https://github.com/0xn3va/cheat-sheets CORS/Prototype Pollution/OAuth/OIDC/GraphQL/SSTI等。構造化が優秀
riramar/Web-Attack-Cheat-Sheet https://github.com/riramar/Web-Attack-Cheat-Sheet Web攻撃ペイロード+コマンドリファレンス
ivan-sincek/penetration-testing-cheat-sheet https://github.com/ivan-sincek/penetration-testing-cheat-sheet 実践的コマンド集

XSS

リポジトリ URL 備考
masatokinugawa/filterbypass wiki https://github.com/masatokinugawa/filterbypass/wiki ブラウザXSSフィルタバイパス集(kinugawamasato)
payloadbox/xss-payload-list https://github.com/payloadbox/xss-payload-list 7.8k+ stars。XSSペイロード大量収録

SQL Injection

リポジトリ URL 備考
payloadbox/sql-injection-payload-list https://github.com/payloadbox/sql-injection-payload-list SQLiペイロード集
kleiton0x00/Advanced-SQL-Injection-Cheatsheet https://github.com/kleiton0x00/Advanced-SQL-Injection-Cheatsheet Union/Error/Blind/Time-based、MySQL/MSSQL/PostgreSQL/Oracle対応

SSRF

リポジトリ URL 備考
swisskyrepo/SSRFmap https://github.com/swisskyrepo/SSRFmap SSRF自動ファジング+ペイロード内蔵ツール

SSTI

リポジトリ URL 備考
ogtirth/SSTI https://github.com/ogtirth/SSTI Jinja2/Twig/FreeMarker等のSSTIチートシート

XXE / Command Injection / LFI

リポジトリ URL 備考
payloadbox/xxe-injection-payload-list https://github.com/payloadbox/xxe-injection-payload-list 1.3k+ stars
payloadbox/command-injection-payload-list https://github.com/payloadbox/command-injection-payload-list CMDiペイロード集
payloadbox/rfi-lfi-payload-list https://github.com/payloadbox/rfi-lfi-payload-list RFI/LFIペイロード集

Open Redirect

リポジトリ URL 備考
payloadbox/open-redirect-payload-list https://github.com/payloadbox/open-redirect-payload-list
cujanovic/Open-Redirect-Payloads https://github.com/cujanovic/Open-Redirect-Payloads フィルタバイパス付き

Prototype Pollution

リポジトリ URL 備考
BlackFan/client-side-prototype-pollution https://github.com/BlackFan/client-side-prototype-pollution 脆弱ライブラリ一覧+Script Gadget+PoC

OAuth / OIDC

リポジトリ URL 備考
koenbuyens/oauth-2.0-security-cheat-sheet https://github.com/koenbuyens/oauth-2.0-security-cheat-sheet OAuth 2.0攻撃ベクター

GraphQL

リポジトリ URL 備考
Escape-Technologies/awesome-graphql-security https://github.com/Escape-Technologies/awesome-graphql-security GraphQLセキュリティリソース集

API

リポジトリ URL 備考
riteshs4hu/API-Pentesting-Resources https://github.com/riteshs4hu/API-Pentesting-Resources REST/JSON/GraphQLのワードリスト・チェックリスト

Reverse Shell

リポジトリ URL 備考
d4t4s3c/OffensiveReverseShellCheatSheet https://github.com/d4t4s3c/OffensiveReverseShellCheatSheet 多言語・多プラットフォーム対応

バグバウンティ方法論・ツール集

リポジトリ URL 備考
vavkamil/awesome-bugbounty-tools https://github.com/vavkamil/awesome-bugbounty-tools BB用ツールをカテゴリ別に整理
OlivierLaflamme/Cheatsheet-God https://github.com/OlivierLaflamme/Cheatsheet-God OSCP/PTP向けリファレンス集
Kitsun3Sec/Pentest-Cheat-Sheets https://github.com/Kitsun3Sec/Pentest-Cheat-Sheets ペンテスト用コードスニペット

日本語コミュニティ

ソース URL 備考
Bug Bounty JP Podcast https://bugbountyjppodcast.notion.site/ 日本語バグバウンティPodcast
scgajge12ブログ https://scgajge12.hatenablog.com/ 日本語でBB情報発信
IssueHunt p3nfest https://issuehunt.jp/events/ 日本のバグバウンティイベント

カンファレンス

イベント URL 備考
Black Hat https://www.blackhat.com/ スライド・録画が研究資料に
DEF CON https://media.defcon.org/ 同上
NahamCon https://www.nahamcon.com/ バグバウンティ特化カンファレンス
Bug Bounty DEF CON https://www.bugbountydefcon.com/ BB専門イベント
HackerOne LHE https://www.hackerone.com/lhe/ Live Hacking Event
Security Camp https://www.security-camp.or.jp/ 国内若手向け

OSS脆弱性調査ターゲット(huntr.com向け)

リポジトリ URL 備考
Gitea https://github.com/go-gitea/gitea Git hosting (Go)
Gogs https://github.com/gogs/gogs Git hosting (Go)

一時的に有用な記事(単体の技術記事・レポート)

脆弱性クラス別

Server-Side (SSRF, RCE, Injection)

記事 URL 要点
CVE-2024-4577: PHP RCE https://blog.orange.tw/2024/06/cve-2024-4577-yet-another-php-rce.html PHP CGI引数インジェクション
Confusion Attacks on Apache https://blog.orange.tw/posts/2024-08-confusion-attacks-en/ Apacheの意味的曖昧性を悪用
WorstFit: Windows ANSI変換 https://blog.orange.tw/posts/2025-01-worstfit-unveiling-hidden-transformers-in-windows-ansi/ Windows文字変換の隠れた脆弱性
SQL Injection at Protocol Level DEF CON 32 slides (Paul Gerste) プロトコルレベルのSQLi smuggling
HTTP Parameter Pollution 2024 https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89 HPP最新手法
DNS Rebinding SSRF https://mokhansec.medium.com/ フィルタバイパスSSRF
TE.0 Request Smuggling https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-... Google Cloudサイトへの影響
Encoding Differentials https://www.sonarsource.com/blog/encoding-differentials-why-charset-matters/ charset差異による攻撃
Attacks on Maven Proxy https://github.blog/security/vulnerability-research/attacks-on-maven-proxy-repositories/ サプライチェーン
RegreSSHion (CVE-2024-6387) https://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt OpenSSH RCE
GFW-caused Vulnerabilities https://www.assetnote.io/resources/research/insecurity-through-censorship-... GFWの検閲が生む脆弱性
Okta AD/LDAP Auth Bypass https://trust.okta.com/security-advisories/okta-ad-ldap-delegated-authentication-username/

Client-Side (XSS, DOM)

記事 URL 要点
DOMPurify Bypass (Mutation XSS) https://portswigger.net/research/bypassing-dompurify-again-with-mutation-xss
DOMPurify via MathML https://research.securitum.com/mutation-xss-via-mathml-mutation-dompurify-2-0-17-bypass/
DOMPurify Bypasses & Fixes https://mizu.re/post/exploring-the-dompurify-library-bypasses-and-fixes 包括的まとめ
CVE-2024-4367: PDF.js任意JS実行 https://codeanlabs.com/blog/research/cve-2024-4367-arbitrary-js-execution-in-pdf-js/
Cookie Monster in Browsers https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers Cookie操作攻撃
Cookie Sandwich (HttpOnly steal) https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique
URL Credentials Payload Concealing https://portswigger.net/research/concealing-payloads-in-url-credentials
DoubleClickjacking https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html 新手法
YouTube経由ファイル窃取 https://lyra.horse/blog/2024/09/using-youtube-to-steal-your-files/

Authentication / Account Takeover

記事 URL 要点
EA Account Takeover https://battleda.sh/blog/ea-account-takeover
Zoom ATO https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html
iOS OAuth Attack https://evanconnelly.github.io/post/ios-oauth/
Subaru Hacking https://samcurry.net/hacking-subaru 車両遠隔操作まで

Supply Chain / Git

記事 URL 要点
Clone2Leak (Git credentials) https://flatt.tech/research/posts/clone2leak-your-git-credentials-belong-to-us/
OpenWrt Supply Chain (SHA256 collision) https://flatt.tech/research/posts/compromising-openwrt-supply-chain-sha256-collision/
BatBadBut (Windows cmd exec) https://flatt.tech/research/posts/batbadbut-you-cant-securely-execute-commands-on-windows/
Git GHSA-2hvf-7c8p-28fx https://github.com/git/git/security/advisories/GHSA-2hvf-7c8p-28fx
HGW Port脆弱性 (ryotak) https://blog.ryotak.net/post/mape-over-uni-port-of-hgw/
DeepSeek DB Leak https://www.wiz.io/blog/wiz-research-uncovers-exposed-deepseek-database-leak

Race Condition / Timing

記事 URL 要点
Single Packet Race Condition拡張 https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/
Web Timing Attacks (James Kettle) https://i.blackhat.com/BH-US-24/Presentations/US-24-Kettle-Listen-to-the-whispers-web-timing-attacks-that-actually-work.pdf BH US 2024

カンファレンススライド・まとめ

記事 URL 備考
Black Hat USA 2024 全スライド https://github.com/onhexgroup/Conferences/tree/main/Black%20Hat%20USA%202024%20slides
Top 10 Web Hacking Techniques 2023 https://portswigger.net/research/top-10-web-hacking-techniques-of-2023 年次まとめ
NahamCon 2024まとめ (日本語) https://scgajge12.hatenablog.com/entry/nahamcon_2024
BB JP Podcast 2024まとめ https://scgajge12.hatenablog.com/entry/bbjppodcast_2024

バグバウンティ Tips・インタビュー

記事 URL 備考
Bug Bounty Tips集 https://gist.github.com/hackerscrolls/5c0990dfc734eeb4a9ce8cf2ccdf6fba
pixiv XSSバウンティ体験記 https://inside.pixiv.blog/kobo/5962 日本語
MSRCのCode Blue講演 https://msrc.microsoft.com/blog/2021/10/code-blue-open-talk/
H1 Email Alias https://docs.hackerone.com/en/articles/8404308-hacker-email-alias H1のメールエイリアス機能
レバテックBB インタビュー https://levtech.jp/media/article/interview/detail_466/ 日本語
URL Validation Bypass Cheat Sheet紹介 https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet

その他ツール・サービス

名前 URL 備考
Temp Mail (Firefox addon) https://addons.mozilla.org/ja/firefox/addon/temp-mail/ バウンティ用捨てメール
Toggl https://toggl.com/ 時間計測
Joplin https://joplinapp.org/ ノートアプリ
Notion https://www.notion.so/
Obsidian https://obsidian.md/
ActivityWatch https://github.com/ActivityWatch/activitywatch 活動時間トラッキング

AIを利用したランサムウェア作成者の逮捕事件

はじめに

2024年5月28日(火)に気になる事件があったのでメモとしてまとめました。

事件

概要

対話型生成AIのサービスを利用して、コンピュータウイルス(ランサムウェア)のソースコードを作成した男性が逮捕[1][2][3][4]
生成AIを使用してマルウェアを作成したことに起因する逮捕は国内では初めての事例[5]

対話型生成AIを利用して生成したもの

『作成されたウイルスは攻撃対象のデータを暗号化したり、暗号資産を要求したりする機能があった。[1]
『同課(警視庁サイバー犯罪対策課)によると、ウイルスは身代金要求のため、攻撃対象のデータを暗号化する「ランサムウエア」のようなものだった。[3]

生成したランサムウェアによる被害

『実用化のためのプログラムは入手できなかったといい、これまでに被害は確認されていない。[3]』

容疑者にはITの知識が無かったため、作成したランサムウェアを配送する方法が分からなかったのかもしれない。

動機

ランサムウェア(身代金要求型ウイルス)で金を稼ぎたかった。AIに聞けば何でもできると思った[1]

金銭目的=ランサムウェアを悪用しようとした

逮捕された経緯

2024年3月に詐欺容疑(偽造の身分証を使って携帯電話用SIMカードを不正に契約[1])で逮捕されていた容疑者の自宅PCを調べているとランサムウェアが見つかったため、そのまま逮捕

気になった点

①生成AIってマルウェアとかエクスプロイトコードみたいな犯罪に利用できるプログラムの作り方を聞くと、教えてくれないじゃなかったっけ??

マルウェアソースコードレベルで所持していても犯罪??

調査結果

①-1生成AIの悪用対策

以前、『対話型生成AIには悪用に対する保護機能がある』という主旨の記事[6]を見たので、
こちらが参考になりそう。

上記の記事によると、
『生成AI「ChatGPT」には「GuardRail」というメールアドレスなど個人情報の開示を意図したプロンプトを拒否するフィルターが実装されている』とのこと。

GuardRail

自作の生成AIに対してガードレールを追加できるサービス(NeMo Guardrails[7])もあるみたいですね。
(日本語で実装方法を解説した記事[8])

ネット上にはガードレールのような機能が実装されていない対話型生成AI(Dark AI、WormGPTなど)も数多くあり、誰でも簡単に対話型生成AIを悪用できてしまうのが現状だそう。

①-2ランサムウェアを生成した方法

ネットで検索すれば出てくる無料の生成AIを複数使った[9]

悪用対策が行われていない対話型生成AIを利用?

ニュース記事には、
『容疑者はこれ(ガードレール)を回避するため、ネット上に無料で公開されている複数の生成AIを利用。[3]
という記載があるため、

ガードレールが実装されていない対話型生成AIを利用したと予想できます。

※『使われたAIは少なくとも3種類で、悪質な命令に応じない対策(ガードレール)が付いていない、非公式のものだった。[9]』とあることから、おそらくこれは確定。

悪用対策を突破して対話型生成AIを悪用?

iPhoneでは非公式のアプリをインストールするために『脱獄[10]』という手法があります。

これと同じようなものが対話型生成AIにもあります。

①-1で記載したフィルター「GuardRail」にはBypassする方法(Jailbreak[11])が存在し、
上記を実行することで対話型生成AIが悪用可能な状態(DAN:Do Anything Now)になります。

今回の容疑者は
大手のものは犯罪行為を命令しても応じてくれないことを知っていた[4]
不正に回答を得る方法をネット検索で調べていた[2]
などと述べていることから、

Jailbreak」を行ったのかもしれません。(※あくまで予想)


ただ、以下のように述べていることからプロンプト・インジェクションをしている可能性は高いと思います。
ウイルス作成について遠回しの質問を繰り返すことで回答を得ていた[3]
AIにウイルス作成の目的を伏せた上で指示を出し、ファイルの暗号化や身代金要求などに必要な設計情報を回答させていた[2]

ランサムウエアの本質は勝手に暗号化することだが暗号化の技術はファイルを守るという意味もあるので、安全性を高めるためにプログラムを書くようになどと悪意のない指示をすることで、回答を入手することができてしまう場合もある[2]

対話型生成AIの応答精度を高めた?

こちらは明確な情報があるわけではないため、実際に行われたか不明です、、
応答精度を高める方法を解説している記事だけ載せておきます。 www.mbsd.jp

②-1不正指令電磁的記録に関する罪

コンピュータ・ウイルスの作成、提供、供用、取得、保管行為が罰するための刑法[12]

第168条の2第1項に「ウイルス作成・提供罪」があるため、今回はこれに該当したと思われる。

ウイルス作った時点で犯罪ということなので、ソースコードレベルでもアウトですね。

そもそもPythonとかはインタープリタ言語で実行ファイルが無くてもプログラムは動くので愚問でした。。

学んだこと

ITに関わったことがない人間でもランサムウェアを作成できる時代になった。

対話型生成AIにはガードレールが実装されているが、それをバイパスする手法がある。
そもそもガードレールが実装されていないサービス(Dark AI、WormGPTなど)も存在する。

マルウェアソースコードレベルでも逮捕される。

おわりに

今回は別件で逮捕されていた容疑者のPCを調査していたところ、
たまたまランサムウェアが見つかり逮捕されるという流れでしたが、
これ以降で同じように対話型生成AIでマルウェアを作成されていたとしても
現状では発見すること自体が難しいのかなーなんて思ったりしました。

あと、今回見つかったランサムウェアを容疑者が研究目的と答えていたらどうなってたんだろう(純粋な疑問)。

[参考文献]

[1]生成AI悪用しランサムウェア作成の疑い、男を逮捕 警視庁 - 日本経済新聞
[2]生成AI悪用しウイルス作成、警視庁が25歳の男を容疑で逮捕…設計情報を回答させたか(読売新聞オンライン) - Yahoo!ニュース
[3]生成AIでウイルス作成容疑 男逮捕「楽に稼ぎたかった」―遠回しの質問で回答引き出す・警視庁:時事ドットコム
[4]生成AIを悪用し身代金要求型のコンピューターウイルス作成か 25歳容疑者を逮捕 | NHK | 事件
[5]生成AIでランサムウェアを作成した容疑者の摘発事例を考察 | トレンドマイクロ (JP)
[6]ChatGPTなど生成AIによる個人情報の開示 | 技術者ブログ | 三井物産セキュアディレクション株式会社
[7]NVIDIA のオープンソース ソフトウェアが、開発者による AI チャットボットへのガードレール追加を支援 | NVIDIA
[8]AIチャットボットの回答にガードレールを用意する!NVIDIA製OSSツール「NeMo Guardrails」を試してみた | DevelopersIO
[9]生成AI使いコンピューターウイルス作成疑い 警視庁が男を再逮捕:東京新聞 TOKYO Web
[10]iPhoneの脱獄とは?何ができる?デメリットや企業の防止策も解説 - wiz LANSCOPE ブログ
[11]GitHub - 0xk1h0/ChatGPT_DAN: ChatGPT DAN, Jailbreaks prompt
[12]不正指令電磁的記録に関する罪 警視庁

Apex Legendsの大会で起こったハッキング事件について

事件の概要

今回の事件は世界中で人気の無料バトルロワイアルFPSゲーム「Apex Legends」のE-Sports大会「Apex Legends Global Series」(以下、ALGS)にて起こりました。
大会中にハッカーがプロゲーマー2名に対してチートを付与したことにより、プロゲーマーが不正にチートを利用したのではないかと大会は一時混乱状況に陥りました。

これがきっかけとなり、ゲームの開発を行っているRespawn Entertainmentがプレイヤー全体にゲームのアンインストールを推奨するまでに至ったいいます。[1]

※本記事ではソースとしてYouTubeの動画をいろいろ貼ってますが、動画から内容をある程度は抽出してるので再生しなくても理解できるようにしてます。

おおまかな事件の流れ

【大会前の出来事】

ハッカーから送られたギフトを開封

大会前、プロゲーマー「ImperialHAL」(以下、ImperialHAL選手)はハッカーから送られたと思われるパックを開封しています。

その際、ImperialHAL選手は
「もしかしたら、ハッカーからかも。」「それでも全然もらうよ」
と言いながらパックを開封していました。

ただ、これがチートを付与されたことと直接的に関連しているかは不明です。

その後も受け取りボックスを確認すると、大量のパックが送り続けられている様子でした。

www.youtube.com

不審なファイルのダウンロード

他にも、ImperialHAL選手は
チャットで送られてきたURLから何らかのソフトをダウンロードしたそうです。

これが事実であれば、このときダウンロードしたファイルが起因となり、
PCに侵入されてしまったとも考えられます。

大会後に「Malwarebyte」というセキュリティソフトをダウンロードしてクイックスキャンを行ったそうですが、マルウェアは見つからなかったそうです。

ただ、ハッカーが自分で作った(まだ世に出回ってない)マルウェアだったためにセキュリティ製品が見つけられなかったという可能性も考えられます。

トロイの木馬】とは
正規のソフトウェアや無害なソフトウェアを装ってシステム内で活動するマルウェアです。
PCだけではなくAndroid端末に侵入するトロイの木馬なども見られるため、不用意にソフトをダウンロードしたり、正規ではない場所からのダウンロードしないよう日頃から心掛けましょう。
news.mynavi.jp




【大会中の出来事】

試合途中に突如ウォールハックが付与される

ALGS NAリージョン決勝戦の第3試合目 、
試合後半にDarkZero所属のプロゲーマー「Genburten」(以下、Genburten選手)のアカウントから「Apex hacking global series」や「by Destroyer2009 & R4ndom」というチャットが連投されました。
自動送信されたチャットの画像

それに対してチームメイトは「ハッキングされているが、気にするな」と伝えます。
(※この時点ではチャットが自動送信されているだけだったため、試合自体は続行可能と判断したと思われる。)

ただ、Genburten選手の画面では、チャットが連投されたのと同時に「TSM Halal Hook」というウィンドウが表示されていました。
チート用のコンソール画面

(※これがゲーム内の表示なのか、PC内で別プロセスで起動されたのかは不明。)

また、ウィンドウが起動したのと同時に、Genburten選手のプレイ画面ではゲーム内のプレイヤー全員が壁越しに見える状態(ウォールハック)となっていました。

(Genburten選手は両手を挙げて、自分は何もしていないと主張するような動きを見せていました。)


その後、Genburten選手は自身がウォールハック状態であることをチームメンバーに伝え、試合から抜けました。

上記はGenburten選手がチートが付与されたことに気づいてから30秒以内の出来事でした。

www.youtube.com

別の試合にてエイムボットが付与される

Genburten選手のウォールハック付与事件があった試合(決勝戦 第3試合)の終了後、
TSM所属のプロゲーマー「ImperialHAL」はGenburten選手に起こった出来事のリプレイを見ていました。

その際、ImperialHAL選手は大会出場者が全員いるロビーのチャットで
「was he not able play?(彼はゲームをプレイできなかったの?)」 と質問すると、

Zer0選手(Genburten選手のチームメイト)が
「he left bc he had wallhacks(彼はウォールハックが付与されていたから抜けた)」
とチャットを返していました。

実際のチャット画面

その後大会は運営の判断により続行となり、そのまま第4試合目が行われることとなりました。

第4試合目は中盤ごろまで問題なく進んでいるように見られましたが、今度はImperialHAL選手に異変が起こります。

この試合で初めてImperialHAL選手が敵を狙撃した際、自身にエイムボットが付与されていることに気づきました。
(※第4試合目の開始時からエイムボットがオンにされていた可能性もある。)

その際、ImperialHALは棒立ちしている敵に対してエイムを合わせていたにも関わらず、エイムした右側にいる敵にも弾が当たっていました。
ImperialHAL選手の実際のゲーム画面

この時、チームメイトは「ゲームを抜けろ」とImperialHAL選手に対して伝えますが、

それに対し、
「撃たなければどうかな?」と試合に残りたがる様子でした。

後にこの対応について、ImperialHAL選手は以下のように主張しています。

もし自分が試合を途中で抜けていれば、おそらく試合は続行になっていたと思う。
だけど逆に、自分が試合に残り続ければ運営は試合を中断するしかないと思ったんだよ。
そもそも、自分は悪いことをしていないのにハッカーのせいでハンデを背負うなんてごめんだよ。

(ただ、チートが付与された状態でのプレイはプロゲーマー間でプロレスが開催されてました笑)
↓下の動画でその様子が見れます。
youtu.be

流れでそのまま3人で試合を続行することになりましたが、大会運営の判断により試合は途中でストップされてしまいました。

そこから約1時間、大会の運営から大会自体の延期も発表されました。

このシリーズの競技の完全性が損なわれるため、我々は現時点でNAファイナルを延期する決定を下した。 近日中に詳細をお知らせします。



www.youtube.com




【大会後の出来事】

プロゲーマー「ImperialHAL」が誤BANされる

大会が中止になった後、ImperialHAL選手はランクマッチに参加しました。

すると、試合がマッチした直後、「ERROR:The Client's game account han been banned.」の画面が表示され、アカウントがBANされてしまいました。

実際にチートが付与されていたため、誤BANとは少し違うかもしれませんが。。

BANされたシーン

Genburten選手のPCをEAが回収?

同じく大会が中止になった後、Genburten選手はEAから連絡があり、おそらくPCにアクセスされたとの連絡を受けたという。
また、EAから今使っているPCに一切触るなと指示された模様。

(途中から再生されます)
youtu.be

Anti-Cheat Police Departmentによる注意喚起

ゲーム内の不正行為を調査しているアカウント「Anti-Cheat Police Department」(以下、ACPD)は当該事件の発生を受けて、
ALGS(今回事件が起こった大会)に出場した全プレイヤーに対して、下記のような注意喚起を行った。

ALGSトーナメントに参加された選手の皆様へ、個人情報保護のため早急に対策を講じることを強くお勧めします。Discordのパスワードを変更し、メールの安全性を確保することをお勧めします。
できるだけ早くOSを再インストールしてください。PCがルートキットやその他の悪意のあるソフトウェアに感染している可能性があります。

Easy Anti-Cheatによる主張

ACPDは上記の注意喚起を行う前に、ハッカーが悪用したのはApex Legends(ゲーム本体)もしくは、Apex Legendsで利用している「Easy Anti-Cheat」の脆弱性ではないかとポストしていました。[2]

PSA: 現在、@PlayApex で RCE exploit が悪用されています。ゲームに起因するものなのか、実際のアンチチート ( @TeddyEAC ) に起因するものなのかは不明です。EACで保護されたゲームやEAタイトルをプレイすることは、彼らがこれを修正するか、コメントを得られるまで控えることをお勧めします。 現在、RCEはストリーマーのマシンにチートを注入するために悪用されており、PC全体をロックするランサムウェアソフトウェアをインストールするなど、何でもできる能力を持っていることを意味する。



しかし、これに対してEasy Anti-Cheatは約4年ぶりにX(旧Twitter)の投稿を更新した。

我々は、Easy Anti-Cheat 内の RCE 問題の可能性に関する最近の報告を調査しました。現時点では、EACに悪用されるRCE脆弱性はないと確信しています。私たちは、必要なフォローアップサポートのためにパートナーと緊密に協力し続けます。

Easy Anti-CheatはApex Legends以外にも「Fortnite」や「Dead by Daylight」にも利用されている製品であるため、このソフトウェアの脆弱性が狙われていた場合は、他のゲームにも影響することが考えられました。

そのため、この報告はゲーム界隈全体で大きな安心感を与えたと思われます。

セキュリティエンジニアの方による意見

OverWatchなどのチート対策などを行っていたというPirateSoftwareのThorさんによると、
今回のハッカーはサーバサイドのPCと2台のクライアントPCに対するハッキングを行ったのではないかと推測しており、
ゲーム本体やEasy Anti-CheatのRCEの脆弱性が狙われた可能性は今の段階では低いと発言しています。

サーバサイドのハッキングに成功していると判断した根拠としては、ハッカーが行ったとされる以下の行動にあると言います。

  1. Apex Legendsのゲーム上で特定のプレイヤーにパックを送った
    2.大会とは別で試合中、ゲーム内に大量のBOT(CPU)を召喚した
    3.チートを使っていないプレイヤーをBANした

ただ、筆者は3点目については本当にハッカーによるものかは不明だと感じています。
3点目はこの記事でも紹介した、ImperialHAL選手が誤BANされた際の話をしているのですが、 このとき、実はImperialHAL選手と一緒にランクを回していたチートを使っていないプレイヤーもBANされています。

このことから、ハッカーがBANしたのではないかという結論に至っているのですが、
実際のところ「本当にハッカーがサーバを操作してプレイヤーをBANした」のか、「チートを使っているユーザ(ImperialHAL選手)と一緒にランクをプレイしたからEasy Anti-CheatによってBANされた」のかは不明です。

今の段階ではハッカーがどのようにしてハッキングしたのか(攻撃手法)、ハッカーは何をできるのか(影響範囲)などは明らかになっていません。

おわりに

最後まで読んでいただきありがとうございます!!
読んでくれた人が事件の流れをざっくり理解できてたらいいなーと思いながらまとめましたが、いかがだったでしょう :) 

気になったのでいろいろ調べてましたが、流れを追って情報収集するのが意外と大変で疲れてしまいました笑
あと、最近は昔に比べて座っている時間が長くなったからか、今朝、腰に激痛が走った時はさすがに焦りました orz

(これをまとめるのに夢中で仕事に遅刻してしまったのはまた別のお話。。)

ただ、今回実際に書きたかったのは「攻撃の具体的な内容」「ハッカーの主張」「PirateSoftwareのThorさんによる解説」などの技術的な部分なのですが、
体力的に書けなかったので、近いうちに(需要があれば?)また記事でまとめようと思います!!

内容が気になる方は、下に記事のリンクを貼ってるので見に行ってみてください!!

参考情報

ALGSハッキングはソースエンジンのRCEエクスプロイトに関連している可能性 https://www.reddit.com/r/CompetitiveApex/comments/1bhgjmo/the_algs_hacking_may_be_related_to_an_rce_exploit/?rdt=33980

Valveがまだパッチを当てていないもの https://www.reddit.com/r/GlobalOffensive/comments/mu3xqs/rces_and_you_the_ones_valve_still_havent_patched/

ハッカーの主張(インタビュー記事) techcrunch.com

PirateSoftwareのThorによる分析 www.youtube.com

PirateSoftwareのThorとImperialHALの対談 youtu.be

【第30回】Security-JAWS DAYS CTF [!writeup#1]

 

まえがき

Security-JAWSのCTFイベントに参加してきたので問題の共有をさせていただきます!

Writeupは書けないので、いただいた解説資料を参考にしながら、
どんな問題があったのかを紹介していきます。

 

まずはイベントの基本情報です。

 

イベント概要

イベントの内容

出題する全ての問題がAWSサービスに特化した内容のものとなっている
AWS縛りのCTFイベント」

作問者

競技形式

Jeopardy形式(出題される問題をクイズ形式で回答することで得点を競う方式)

問題の種類

  • Trivia
    • CTF初心者用
    • 一問一答のクイズ
  • Warmup
    • CTF初心者用
    • AWS CLIの基本的な操作や仕組みを理解していれば簡単(?)な問題
      ※この記事ではWarmupの問題だけ取り扱います。
  • Easy
    • AWSのサービスについての理解が必要なCTF(初級)
  • Medium
    • CTF(中級)
    • かなり難しい
  •  Hard
    • レッドチーム寄りの本格的なCTF(上級)
    • SSRFを使ったりしてた
    • ペンテスターなら解けるのかな?レベル

チャレンジ

ここから問題の紹介をしていきます。

Trivia以外は基本的にAWS CLIを使ってターミナル上で操作する問題が多かったです。

一部コンソールに入って操作する問題もありました。

AWSは全く使ったことなかったので、
今回のイベントでいくつかコマンドを知れました。

 

ただ、Warmupは難易度が低めなので、
セキュリティ的な学びみたいなものはあまりなかったです。

AWS CLIの使い方を学ぶためのCTFって感じ。

 

次回は、Hardとかを紹介しようと思ってるのですが、
そこではかなりセキュリティ的な学びがありました。
ぜひ、楽しみにしていてください;)

 

Warmup

AWS CLI practice
  • 問題
    • このIAMユーザー(シークレットキー+アクセスキー)が所属するAWSアカウントIDは何?
  •  配布データ
    • Access key ID:AKIA5YYUV3PDUQZK35HR
    • Secret access key:tDyHHDd1rinqmmccbfsG7zks9nzoUXQR070yiRLD
  • 解法
    1. もらったCredentialをAWSにセット
      【使えるコマンド】
      configureAWS CLI に関する情報を設定します。このコマンドを引数なしで実行すると、AWS Access Key IdAWS Secret Access Key などの設定値の入力を求められます。 引数--profileを使用すると、名前付きプロファイルを設定できます。 設定ファイルが存在しない場合(デフォルトの場所は~/.aws/config)、AWS CLIが作成してくれます。 既存の値を保持するには、値を入力するプロンプトが表示されたらEnterキーを押します。 情報を入力するプロンプトが表示されたら、現在の値が[]内に表示されます。 configure項目に値がない場合は、[None]と表示されます。(※configureコマンドはコンフィグファイルの値でのみ動作することに注意してください。 環境変数やIAMロールの設定値は使用しません。)

      docs.aws.amazon.com

      $ aws configure

      AWS Access Key ID []: AKIA5YYUV3PDUQZK35HR
      AWS Secret Access Key []: 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
      Default region name []: ap-northeast-1
      Default output format []: json
    2. アカウントIDを取得するためのコマンドを叩く
      $ aws sts get-caller-identity

      {
          "UserId": "AIDA5YYUV3PDXROBLRDKF",
          "Account": "946546793415",
          "Arn": "arn:aws:iam::946546793415:user/ctf_challenge_0"
      }
      ※ここはアカウントIDを入力する練習問題なので"946546793415"を入力したら終わり


Run function
  • 問題
    • アクセスキーを調べてFLAGを入手せよ!
  •  配布データ
    • Access key ID:AKIAQZ2IU22WLIFMFL6G
    • Secret access key:9s+Yt+YYM8xXEvrxvTCpUziVnMKT/bnUTuW3pmXV
  • 解法
    1. もらったCredentialをセット
      $ aws configure --profile runfunction

      AWS Access Key ID []: AKIAQZ2IU22WLIFMFL6G
      AWS Secret Access Key []: 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
      Default region name []: ap-northeast-1
      Default output format []: json
      ※「runfunction」という新しいプロファイルを作成して、そこに新しいクレデンシャルをセットしている

    2. IAMユーザの名前を取得
      【使えるコマンド】
      sts:get-caller-identity:操作の呼び出しに使用されたクレデンシャルを持つ IAM ユーザーまたはロールの詳細を返します。(※このコマンドは実行に権限が必要なく、明示的に拒否するポリシーが書かれていたとしても常に同じ結果を返す。)

      docs.aws.amazon.com


      $ aws sts get-caller-identity --profile runfunction 

      {
          "UserId": "AIDAQZ2IU22WIFYNZDUBU",
          "Account": "055450064556",
          "Arn": "arn:aws:iam::055450064556:user/ctf_challenge_6"
      }

      ※ Security Token Service(sts)の"get-caller-identity"コマンドを叩いて、IAMユーザ名(ctf_challenge_6)を取得している

    3. ユーザにアタッチされているインラインポリシー名を取得
      【使えるコマンド】
      iam:list-user-policies:--user-nameで指定したIAMユーザに組み込まれたインラインポリシーの一覧を表示します。

      docs.aws.amazon.com


      $ aws iam list-user-policies --user-name ctf_challenge_6 --profile runfunction

      {
          "PolicyNames": [
              "runlambda"
          ]
      }
      ※"Identity and Access Management(iam)"の"list-user-policies"コマンドで"ctf_challenge_6"(ユーザ名)のインラインポリシーを確認すると、"runlambda"が付与されていることが分かる

    4. ポリシーの詳細を確認
      【使えるコマンド】
      iam:get-user-policy:指定された IAM ユーザーに組み込まれている指定されたインラインポリシードキュメント(指定したポリシーの詳細?)を取得します。

      docs.aws.amazon.com


      $ aws iam get-user-policy --user-name ctf_challenge_6 --policy-name runlambda --profile run_function

      {
          "UserName": "ctf_challenge_6",
          "PolicyName": "runlambda",
          "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": [
                  {
                      "Sid": "readiam",
                      "Effect": "Allow",
                      "Action": [
                          "iam:Get*",
                          "iam:List*"
                      ],
                      "Resource": "arn:aws:iam::055450064556:user/ctf_challenge_6"
                  },
                  {
                      "Sid": "lambdaInvoke",
                      "Effect": "Allow",
                      "Action": [
                          "lambda:InvokeFunction"
                      ],
                      "Resource": "arn:aws:lambda:ap-northeast-1:055450064556:function:run_me"
      ※"get-user-policy"コマンドで"ctf_challenge_6"にアタッチされている"runlambda"というインラインポリシーの詳細を確認すると、"run_me"という関数の実行権限が付与されていることが分かる

    5. "run_me"を実行してみる
      【使えるコマンド】
      lambda:invoke:ラムダ関数を呼び出す。関数は同期的に呼び出すことも、非同期的に呼び出すこともできます。関数を非同期に呼び出すには、InvocationTypeをEventに設定します。

      docs.aws.amazon.com


      $ aws lambda invoke --function-name run_me out --log-type Tail --profile run_function

      {
          "StatusCode": 200,
        "LogResult": "U1RBUlQgUmVxdWVzdElkOiBiMjQ1Y2NlNi0wN2RlLTRjMTktOGUxZS00NmJjZTA3ZWE2MDIgVmVyc2lvbjogJExBVEVTVApTSkFXU3tZb3Vfd2FzX2FibGVfdG9fYXJyaXZlX0B0X3RoZV9sYW1iZGFfZnVuY3Rpb24uLXdlbGxfZG9uZSF9CkVORCBSZXF1ZXN0SWQ6IGIyNDVjY2U2LTA3ZGUtNGMxOS04ZTFlLTQ2YmNlMDdlYTYwMgpSRVBPUlQgUmVxdWVzdElkOiBiMjQ1Y2NlNi0wN2RlLTRjMTktOGUxZS00NmJjZTA3ZWE2MDIJRHVyYXRpb246IDEuMDkgbXMJQmlsbGVkIER1cmF0aW9uOiAyIG1zCU1lbW9yeSBTaXplOiAxMjggTUIJTWF4IE1lbW9yeSBVc2VkOiA0MCBNQgkK",
          "ExecutedVersion": "$LATEST"
      }
      ※ "run_me"を実行してログ形式で出力すると、base64エンコードされた文字列が出てくるのでCyberChefなどでデコードすると"SJAWS{You_was_able_to_arrive_@t_the_lambda_function.-well_done!}"が取得できる

 

Find data 1
  • 問題
    • FLAGはバケツに突っ込んであるので探してね!

コンソール上でポチポチするだけだったので割愛

 

FInd data 2
  • 問題
    • FLAGはバケツに突っ込んであるので探してね!
  •  配布データ
    • Access key ID:AKIAQZ2IU22WFLIJ47XF
    • Secret access key:/e0wQSYgKV8RpsMe1U7a28z1Io5xu9sy1FuWjVxo
  • 解法
    1. この問題用のプロファイルを作成して、クレデンシャルをセット
      $ aws configure --profile finddata2

      ----------------省略----------------
    2. バケットの一覧を確認
      【使えるコマンド】
      s3:ls:S3オブジェクトと共通のプレフィックス、または全てのS3バケットをリストアップする。(※このコマンドでは--outputと--no-paginate引数は無視されることに注意。)

      docs.aws.amazon.com


      $ aws s3 ls --profile finddata2

      2023-08-13 23:13:07 backup-37szjp8pny7xx01
      2023-08-26 22:43:13 camouflagedrop-wxhqft4lqf-assets-wxhqft4lqf-assets
      2023-08-26 22:39:22 camouflagedrop-wxhqft4lqf-web-wxhqft4lqf-static
      2023-08-22 20:16:14 cdk-hnb659fds-assets-055450064556-ap-northeast-1
      2023-08-25 03:05:46 file-storage-afeffefespntbaiw7o5
      2023-08-06 21:55:59 himituno-bucket1
      2023-08-06 21:58:33 himituno-bucket2
      2023-08-06 23:08:46 himituno-bucket3
      2023-08-27 02:41:30 my-backup-file-ulxmhiw3jroec7sclynr06fkvhqssf
      2023-08-22 20:56:47 s3misssignurl-t6j4qj4r-assets-t6j4qj4r-assets-bucket
      2023-08-22 20:52:31 s3misssignurl-t6j4qj4r-web-t6j4qj4r-static-host-bucket
      2023-08-24 04:24:09 totemo-kawaii-neko-no-namae-ha-lise-desu
      2023-08-27 01:18:59 ulxmhiw3jroec7sclynr06fkvhqssf
      ※S3バケットの一覧を取得している

    3. 取得したバケット名で再起的にディレクトリを探索
      $ aws s3 ls s3://himituno-bucket2 --recursive --profile finddata2

      ----------------省略----------------
      2023-08-06 22:01:53      62896 SECRET/44/flag.jpg
      2023-08-06 22:01:54      62896 SECRET/440/flag.jpg
      2023-08-06 22:01:54      62896 SECRET/441/flag.jpg
      2023-08-06 22:01:54      62896 SECRET/442/flag.jpg
      2023-08-06 22:01:55      62896 SECRET/443/flag.jpg
      2023-08-06 22:01:55      72674 SECRET/444/flag.jpg
      2023-08-06 22:01:55      62896 SECRET/445/flag.jpg
      2023-08-06 22:01:56      62896 SECRET/446/flag.jpg
      2023-08-06 22:01:56      62896 SECRET/447/flag.jpg
      2023-08-06 22:01:56      62896 SECRET/448/flag.jpg
      2023-08-06 22:01:56      62896 SECRET/449/flag.jpg
      ----------------省略----------------

      ※一つだけファイルサイズが異なるものがある


    4. ファイルサイズの異なる怪しいファイルをローカルにダウンロード
      【使えるコマンド】
      s3:cp:ローカルファイルまたはS3オブジェクトをローカルまたはS3の別の場所にコピーする。

      docs.aws.amazon.com

      $ aws s3 cp s3://himituno-bucket2/SECRET/444/flag.jpg /Users/shimano/Dropbox/Mac/Downloads --profile finddata2

      download: s3://himituno-bucket2/SECRET/444/flag.jpg to ../Dropbox/Mac/Downloads/flag.jpg
      ※この画像を表示させると以下のような画像が確認できる

      flag.jpg

       

      ※これにより"SJAWS{t@1hen-yoku_mitukemasita!}"が取得できる

Show IAM policy
  • 問題
    • このユーザーにアタッチされているポリシーを確認してみよう!Policyドキュメントを注意深くみたらFLAGが隠れているかも。
  •  配布データ
    • Access key ID:AKIAQZ2IU22WCSKUSTUF
    • Secret access key:Qw0q8RLnpZRnreIYxpflFZIJhD7bD1raJQcveJbG
  • 解法
    1. この問題用のプロファイルを作成して、クレデンシャルをセット
      $ aws configure --profile showiam

      ----------------省略----------------
    2. IAMユーザの名前を取得
      $ aws sts get-caller-identity --profile showiam

      {
          "UserId": "AIDAQZ2IU22WGWQKEMXU3",
          "Account": "055450064556",
          "Arn": "arn:aws:iam::055450064556:user/ctf_challenge_5"
      }

      ※"get-caller-identity"コマンドでIAMユーザ名(ctf_challenge_5)を取得している

    3. IAMユーザが所属しているグループ名を確認
      $ aws iam list-user-policies --user-name ctf_challenge_5 --profile showpolicy

      {
          "PolicyNames": []
      }
      ※IAMユーザには直接アタッチされていないため、グループのインラインポリシーを確認しに行く必要がある

      その前にIAMユーザが所属しているグループ名が必要なため、調べる。

      【使えるコマンド】
      iam:list-groups-for-user:指定した IAM ユーザーが所属する IAM グループを一覧表示します。

      docs.aws.amazon.com

      $ aws iam list-groups-for-user --user-name ctf_challenge_5 --profile showiam

      {
          "Groups": [
              {
                  "Path": "/",
                  "GroupName": "ctf5",
                  "GroupId": "AGPAQZ2IU22WHDOHFQVUC",
                  "Arn": "arn:aws:iam::055450064556:group/ctf5",
                  "CreateDate": "2023-08-06T14:48:22+00:00"
              }
          ]
      }

      ※"list-groups-for-user"コマンドにより"ctf_challenge_5"は"ctf5"というグループに所属していることが分かる

    4. 見つけたグループのポリシーを確認
      【使えるコマンド】
      iam:get-gropu-policy:指定された IAM グループに組み込まれている、指定されたインラインポリシードキュメントを取得します。

      docs.aws.amazon.com

      $ aws iam get-group-policy --group-name ctf5 --policy-name selfcheck --profile showpolicy

      {
          "GroupName": "ctf5",
          "PolicyName": "selfcheck",
          "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": {
                  "Sid": "U0pBV1N7RG9feW91LWZpbmRfdGhlX0B0dGFjaGVkX3AwbDFjeT99",
                  "Effect": "Allow",
                  "Action": [
                      "iam:Get*",
                      "iam:List*"
                  ],
                  "Resource": [
                      "arn:aws:iam::055450064556:group/ctf5",
                      "arn:aws:iam::055450064556:user/ctf_challenge_5"
                  ]
              }
          }
      }

      ※グループのポリシーを確認すると、"sid"にbase64エンコードされた文字列が出てくるのでCyberChefなどでデコードすると"SJAWS{Do_you-find_the_@ttached_p0l1cy?}"が取得できる

 

Where is the password?
  • 問題
    • AWSのとあるサービスからパスワードを取得してください!ヒント:AWSで安全にパスワードを管理したときに利用するサービスと言えば?」
    • パスワードがFLAGになっています
  • 配布データ
    • ログイン時に使用するURLとクレデンシャル
  •  解法
    1. 配布されたデータを用いてコンソールにログイン
    2. AWS Secret Manager」にアクセス
    3. "secretpassword"にフラグが入っている
      • "SJAWS{Use_Secrets_Manager_for_`@ssw0rd_Management!}"

 

あとがき

今回は解説を見ながらですが、Wamupの問題をやってみました!

AWS CLIを操作するための基礎中の基礎みたいな知識はつけれたかなと思ってます:)

今後はDay1でおすすめしてたAWSのSecurityに関するWorkshopをちょっとずつやっていこうかなと


ただ、MediumやHardの問題がペンテスターの実務に寄せられていて、
とても勉強になったので、
次回も問題の情報共有させていただきます。

ヾ(・◇・)ノ ピヨピヨ