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の問題がペンテスターの実務に寄せられていて、
とても勉強になったので、
次回も問題の情報共有させていただきます。

ヾ(・◇・)ノ ピヨピヨ