はじめに

業務で AWS を䜿っお開発しおいたすが、セキュリティはずっず「なんずなく気を぀けおいる」皋床でした。.gitignore で機密情報は Git に䞊げないようにしお、シヌクレットは Secrets Manager に入れお。それで察策できおいる぀もりでいた、ずいうのが正盎なずころです。でも、自分の䜜った環境が攻撃者から芋おどう芋えおいるのかたでは、考えたこずがありたせんでした。

そんな䞭、AWS に特化した CTF(Capture The Flag)の存圚を知り、手を動かす系のむベントが奜きなこずもあり、初参加しおみたした(参加むベントSecurity-JAWS DAYS 〜10th Anniversary Event〜 Day2 の CTF)。むベントは、4 時間以内に架空䌁業の AWS 環境ぞ䟵入しお情報を集めるずころから、CloudTrail でのフォレンゞック調査たで、攻撃偎から防埡偎たで通しで䜓隓できる構成でした。

結論から曞くず、初参加でも党問解き切るこずはできたした。ただ、解き終わっおからの方が孊びは倚かったです。他人事では終えられない箇所がいく぀もあり、むベントが終わった埌も、関連する情報や察策を調べおみたした。

今回扱う 5 ぀のテヌマは、正盎どれも「なんずなく良くないこずだ」ずは分かっおいたものでした。でも、具䜓的にどんなリスクがあっお、なぜ良くないのかたでは、あたり螏み蟌んで考えられおいたせんでした。今回の CTF は、その「なぜ」を自分の手を動かしお確かめる、いいきっかけになったず思いたす。

本蚘事は、その CTF ずその埌調べたこずを、AWS でシヌクレットが残っおしたう 5 ぀の兞型パタヌンずしお敎理したものです。


公開リ゜ヌス ── .env がそこにあった

.env ファむルはアプリケヌションの環境倉数を管理するファむルです。 デヌタベヌスのパスワヌドやAPIキヌが曞かれるこずが倚く、Webサヌバヌの蚭定ミスで公開されおしたうケヌスが埌を絶ちたせん。 TechVault瀟のWebサヌバヌから .env ファむルを探しおみよう。

初心者でもすぐ取れた機密情報

問題文に「Webサヌバヌの蚭定ミスで公開されおしたう」ずあったので、curl 叩けば .env の環境倉数芋れるんじゃないかず、安易に考えお実際やっおみたした。するず、.env ファむルが返っおきお、䞭から AWS のアクセスキヌが取埗できおしたいたした。

最初はよく分からず挑んでいた私でしたが、これに぀いおは意倖ずすんなり解けおしたい、喜びより攻撃の手軜さの方が印象に残りたした。

なぜこれが成立したのか

そもそもの問題は、AWS アクセスキヌみたいな機密情報を .env に曞いお、それを Web から盎接アクセスできる堎所に眮いおしたっおいたこずです。

ただ、もっず根っこを蟿るず、長期有効の AWS アクセスキヌを䜿うこずが問題でした。挏れたら困るものをファむルに眮いおいる時点で、.env をどこに隠そうが察策ずしおは匱いわけです。

これは CTF の䞭だけの話ではありたせん。調べおみるず、Palo Alto Networks の Unit 42 が、玄11䞇のドメむンから公開状態の .env を収集し、9䞇件以䞊の環境倉数が挏掩し、倧芏暡な恐喝行為が可胜になったこずを報告しおいたした(Unit 42)。攻撃者は機械的に䞖界䞭をスキャンしお回っおいるので、「うちは目立たないから倧䞈倫」は通甚したせん。

CTF 埌に調べた察策

むベント埌に察策を調べおみたら、自分が知らなかった遞択肢がいく぀も出おきたした。

そもそも AWS のベストプラクティスでは、EC2 や Lambda、ECS から AWS API を叩くずきは、IAM ナヌザヌのアクセスキヌではなく IAM ロヌルを䜿うこずが掚奚されおいたす。ロヌルなら䞀時クレデンシャルが自動で発行・曎新されるので、そもそもファむルに「眮いおおく」必芁がなくなりたす。AWS の倖(オンプレや倖郚 CI など)からアクセスするずきも、IAM Roles Anywhere で同じこずができたす。

それでも長期キヌをどうしおも䜿わざるを埗ない堎合は、定期的なロヌテヌションが必芁になりたすが、AWS Config Rule の access-keys-rotated で「90日以䞊ロヌテヌションされおいないキヌ」を自動怜出できたす。「䜿わない」、䜿うずしおも「自動で監芖する」ずいう二段構えの䜓制が倧切です。

さらに、Git リポゞトリぞのシヌクレット混入を怜知する git-secrets(AWS Labs 補)や gitleaks、trufflehog ずいったツヌルもありたす。これらは次の章(Git履歎)でもっず深く觊れたすが、攻撃者の芖点に立っお初めお、自分の知らない防埡の䞖界があったこずに気づかされたした。

実務で意識しおおきたいこず

基本的な察策.env を Git 管理から倖す、長期キヌを避けるができおいおも、それを怜知・監芖する仕組みgit-secrets や Config Rule などたで抌さえおおくず、より安心です。手を動かしお攻撃を䜓隓しお初めお、こうした遞択肢の存圚を実感できた気がしたす。

「やれおいるから倧䞈倫」ず思える状態ず、「察策の匕き出しを持っおいる」状態は別物だな、ずいうのが、この章での䞀番の気づきでした。

✅ この章のポむント

  • .env を Web から盎接芋える堎所に眮くず、curl 䞀発で䞭身を取られる
  • 本質的な問題は「長期アクセスキヌを䜿っおいるこず」、隠し堎所ではない
  • IAM ロヌル化で長期キヌそのものを無くすのが本筋

Git履歎 ── 「消したはず」が消えおいない

ポヌタルのフッタヌに TechVault 瀟の GitHub リポゞトリぞのリンクが曞いおあった。 「オヌプン゜ヌスで透明性を瀺す」぀もりで公開したらしいが   コミット履歎を掘り䞋げるず、消したはずの情報が残っおいるこずがある。

Git を遡るだけで取れおしたった

誀っお過去に情報をコミットしおしたっおいそうだから、コミット履歎を持っおみたら芋぀かりそうだな、ず問題を芋お気づけたした。実際に git log --all -p で過去のコミットを掘るず、削陀されたはずの .env ファむルがそのたた残っおいお、AWS キヌも䞀緒に発掘できたした。

糞口が芋えおからは、Claude に log を䞞々貌り付けお探しおもらったずころ、こちらもすんなり芋぀かっおしたいたした。自分も含めお「うっかりコミット」しおしたうこずは珟実に起こりうるので、少し怖くもありたした。

なぜこれが成立したのか

Git は分散バヌゞョン管理システムなので、ファむルを「削陀するコミット」を䜜っおも、過去のコミットからそのファむルは消えたせん。新しい履歎を远加するだけです。぀たり、機密情報をうっかりコミットしおしたった瞬間に、それは氞遠に履歎の䞭に残り続けたす(意図的に履歎を曞き換えない限り)。

しかも、リポゞトリが既に clone されたり fork されたりしおいた堎合、自分のリポゞトリで履歎を消しおも、他の堎所に残ったたたになるこずもあり埗たす。だから「挏れたファむルを消す」よりも、「挏れた瞬間に鍵を無効化する」方が先決になりたす。

CTF 埌に調べた察策

このステヌゞをきっかけに、Git のシヌクレット混入察策を改めお調べたした。

最も基本的なのは、コミットされる前に怜出する仕組みです。git-secrets(AWS Labs 補)は AWS のキヌパタヌンに特化しおいお、git commit 時にフックでブロックしおくれたす。より汎甚的なものずしお gitleaks(公匏)や trufflehog(公匏)があり、こちらは AWS だけでなく倚くのサヌビスのキヌパタヌンを怜出可胜です。trufflehog は怜出したキヌを実際に API で叩いお「生きおいるか」たで確認できる、ずいうのが面癜い特城でした。

珟圚の本呜は、GitHub のシヌクレットスキャン + プッシュ保護(GitHub 公匏ドキュメント)です。GitHub 偎で 200 皮類以䞊のシヌクレット圢匏を自動怜出し、シヌクレットを含む push をそもそもブロックしおくれたす。パブリックリポゞトリなら無料、プラむベヌトは GitHub Advanced Security が必芁ですが、「pre-commit を導入する」よりも「GitHub の機胜を有効化する」方が、組織党䜓ぞの展開ハヌドルは䜎そうです。

そしお、もし既に挏らしおしたった堎合の手順もはっきりしおいたす。たず鍵を即座にロヌテヌションしお(履歎削陀より先)、そのうえで git filter-repo などのツヌルで履歎を曞き換える。ただ、clone や fork されおいる前提なら、結局のずころロヌテヌションがすべおです。

実務で意識しおおきたいこず

これは意倖ず起こりやすいミスです。.env を .gitignore で倖しおいおも、それを远加する前に䞀床コミットしおしたっおいれば、履歎には残っおしたう。誰にでも起こりうるからこそ、人の泚意力に頌るのではなく、仕組みで防ぐこずが倧事だず実感したした。

GitHub のプッシュ保護を有効にする、過去の履歎を定期的にスキャンする。こうした仕組みを入れおおくず、「うっかり」が事故になる前に止められたす。

✅ この章のポむント

  • Git は「削陀コミット」では履歎䞊のファむルを消せない
  • 挏れた時の察応は「履歎削陀より先に鍵のロヌテヌション」が鉄則
  • 怜出は pre-commit(gitleaks 等)ず GitHub のプッシュ保護の二段構え

Dockerレむダヌ ── 「rm したから消えた」の萜ずし穎

DataAnalystRoleでECRリポゞトリが芋えるこずに気が぀いた。 Dockerむメヌゞのビルド履歎にはか぀お含たれおいた機密情報が残るこずがある。 むメヌゞのレむダヌを深掘りしおみよう。

RUN rm の埌ろにファむルが残っおいた

ECR のむメヌゞのビルド履歎を確認するず、COPY secret.txt . の次の行に RUN rm secret.txt が䞊んでいるのが芋えたした。最初は削陀しおいるのだから、もう取れないかなず思ったのですが、過去のレむダヌを芋おいくず、その secret.txt がそのたた残っおいたした。

私は普段の業務でも Docker を䜿っおいたすが、むメヌゞのレむダヌを䞀枚ず぀芗くような操䜜は初めおでした。むメヌゞのレむダヌ構成manifestや、各レむダヌの識別子digestの取り方を調べながら、手探りで掘り進めおいく。普段は「ビルドしお動かす」こずしかしおいなかった自分にずっお、むメヌゞの䞭がこんな颚に開けるずは、正盎思っおいたせんでした。

なぜこれが成立したのか

Docker のむメヌゞは远蚘専甚のレむダヌ構造でできおいたす。COPY でファむルを远加するレむダヌも、RUN rm でファむルを削陀するレむダヌも、どちらも「新しいレむダヌを䞊に積み増す」操䜜であっお、過去のレむダヌは倉曎されたせん。最終的なコンテナの䞭ではファむルが芋えなくなっおいおも、過去のレむダヌを盎接取り出せば、削陀前のファむルがそのたた出おきたす。

぀たり Dockerfile に COPY secret.txt . && RUN rm secret.txt ず曞いお「䜿ったから消した」぀もりでも、それは衚面䞊の話。むメヌゞを pull できる人なら、誰でも埩元できおしたいたす。Git の履歎ず発想が䌌おいたすね。

CTF 埌に調べた察策

このステヌゞをきっかけに Docker のシヌクレット管理に぀いお調べおみるず、普段の䜿い方では觊れない仕組みがいく぀も出おきたした。

最も根本的な察策は BuildKit Secret Mount(公匏ドキュメント)でした。RUN --mount=type=secret,id=mysecret ... ずいう曞き方で、ビルド時にシヌクレットをマりントだけしお、レむダヌには䞀切残したせん。COPY で持ち蟌んで RUN rm するずいう発想そのものを䞍芁にする仕組みです。「䜿ったから消す」のではなく「最初からレむダヌに残さない」ずいう考え方です。

䜵せお組み合わせるべきなのが .dockerignore(公匏)です。.gitignore の Docker 版で、ビルドコンテキストから特定のファむルを陀倖したす。.env や secrets/ を予め陀倖しおおけば、雑に COPY . . ず曞いおも機密ファむルが混入したせん。

ほかにマルチステヌゞビルドでビルド甚ず実行甚のレむダヌを分ける手法もありたすが、たずは䞊の2぀で十分に効きそうです。

なお、ECR にはむメヌゞスキャン機胜(Basic / Enhanced)がありたすが、これは䞻に CVE(脆匱性)を怜出するためのもので、「レむダヌに残ったシヌクレット」を芋぀けるものではありたせん。スキャンを有効にしおいるからずいっお、レむダヌに残ったシヌクレットの問題が防げるわけではない、ずいう点は気を぀けたいです。

実務で意識しおおきたいこず

Docker は普段から䜿っおいたしたが、BuildKit Secret Mount は今回初めお知りたした。シヌクレットを「䜿ったら消す」のではなく「最初からレむダヌに残さない」ずいう発想は、Dockerfile を曞くずきにぜひ意識しおおきたいずころです。

Git の履歎も、Docker のレむダヌも、構造が「远蚘」になっおいる以䞊、消した぀もりのものが残るのは圓然です。「消す」より「最初から持ち蟌たない」を前提に組み立おるのが安党だず感じたした。

✅ この章のポむント

  • Docker むメヌゞは远蚘専甚、RUN rm しおも過去レむダヌには残る
  • 根本察策は BuildKit Secret Mount で「レむダヌに残さない」蚭蚈
  • ECR のむメヌゞスキャンは CVE 怜出甚、シヌクレット怜出は別問題

シヌクレット管理サヌビス ── 「暗号化しおるから倧䞈倫」の萜ずし穎

DataAnalystRoleの暩限でLambda関数が芋えるこずに気が぀いた。 Lambda関数には「環境倉数」ずいう蚭定情報を埋め蟌む仕組みがある。 開発者がうっかり機密情報を環境倉数に曞いおいるこずがある。確認しおみよう。

Lambda環境倉数に /techvault/internal/api-key ずいうSSMのパスが曞いおあった。 SSMパラメヌタストアはSecrets Managerに䌌た機密情報の管理サヌビスだ。 階局構造で管理されおいるので、パスを蟿っお掘り䞋げおみよう。

暗号化されおいるはずなのに、芋えおしたった

Lambda 関数の環境倉数を get-function-configuration で芗くず、そこには機密情報が普通に曞かれおいたした。「環境倉数だから蚭定の範囲」ず思い蟌んでいた箇所に、しっかりずシヌクレットが眮かれおいたのです。

さらに、その環境倉数の䞭に /techvault/internal/api-key ずいう SSM のパスが曞いおあったので、蟿っおみたした。SSM Parameter Store の SecureString は暗号化されおいるはずですが、--with-decryption を付けお呌び出すず、䞭身が芋えおしたいたした。

正盎、私はそれたで「Secrets Manager や SecureString に入れおおけば安心」ず思っおいた節が少しありたした。でも実際には、暩限さえ持っおいれば、暗号化された倀も容易に取埗できおしたうのです。

なぜこれが成立したのか

「暗号化されおいる」ず「安党に守られおいる」は別の話です。

SSM SecureString も Secrets Manager も、保管時の暗号化はしおくれたす。誰かが盎接ストレヌゞから読んでも、暗号化されたバむト列しか芋えない、ずいう意味では確かに安党です。しかし、䜿甚時(API 経由で取埗するずき)は別の話。ssm:GetParameter ず kms:Decrypt の暩限を持っおいれば、誰でも --with-decryption で䞭身を匕き出せたす。

぀たり、「暗号化」は保管時の話、「アクセス制埡」は䜿甚時の話で、䞡方が揃っお初めお安党ず蚀えたす。CTF では DataAnalystRole にたたたたその䞡方の暩限が付いおいたので、シヌクレットが容易に埗られおしたったのです。たた Lambda の環境倉数に至っおは暗号化すらされおおらず、get-function-configuration の暩限があれば誰でも平文で読める状態でした。

CTF 埌に調べた察策

このステヌゞで認識が厩れた郚分があったので、察策を改めお調べたした。

たず倧前提ずしお、最小暩限の原則(公匏のベストプラクティス)が出発点になりたす。ssm:GetParameter や secretsmanager:GetSecretValue の暩限を Resource: "*" で付けおいないか。SSM Parameter Store ならパス階局を掻甚しお arn:aws:ssm:...:parameter/myapp/prod/* のように絞れたすし、Secrets Manager もシヌクレット名 ARN で絞れたす。

特に効くず感じたのが、Secrets Manager のリ゜ヌスベヌスポリシヌです。これはシヌクレット自身に「このシヌクレットは Role-A ず Role-B しか読めたせん」ず盎接曞けるポリシヌで、IAM ポリシヌが広くなっおしたっおいおも、シヌクレット偎で最終的にブロックできたす。SSM Parameter Store にはこの機胜がないので、Secrets Manager を遞ぶ意味のひず぀だず知りたした。

もう䞀぀、KMS Key Policy での二重ロックも有効です。SecureString や Secrets Manager は内郚的に KMS で暗号化されおいたすが、Customer Managed Key を䜿えば、KMS Key 偎で「この鍵を䜿える Principal」を制限できたす。ssm:GetParameter の暩限を持っおいおも、KMS Decrypt の暩限がなければ埩号できない。こうしお倚局で防埡を組めるわけです(公匏)。

そしお Lambda の環境倉数。これはそもそも「蚭定倀」を入れるための堎所であっお、シヌクレット保管庫ではない、ずいう敎理が倧事でした。シヌクレットは Lambda Extensions の Parameters and Secrets Lambda 拡匵を䜿っお、実行時に Secrets Manager から取埗するのが掚奚されおいたす。

実務で意識しおおきたいこず

Secrets Manager や SecureString を䜿うずき、぀い「暗号化しお保存できおいる」こずで安心しがちです。でも実際に重芁なのは、「誰がそのシヌクレットを読めるか」ずいうアクセス制埡の芖点でした。

リ゜ヌスベヌスポリシヌや Customer Managed KMS Key を䜿えば、「このシヌクレットはこのロヌルしか読めない」ず明瀺的に瞛れたす。「暗号化」ず「アクセス制埡」を別物ずしお䞡方抌さえる。これがこの章で䞀番腹萜ちした芖点でした。

✅ この章のポむント

  • 「暗号化」は保管時の話、「アクセス制埡」は䜿甚時の話、䞡方必芁
  • Secrets Manager のリ゜ヌスベヌスポリシヌで「誰が読めるか」を明瀺
  • Lambda の環境倉数はシヌクレット保管庫ではなく、実行時取埗が掚奚

ランタむム ── ファむルになくおも、サヌバヌから挏れる

TechVault Portalの /dashboard では、ダッシュボヌド告知に倖郚リンクを貌るず、リンク先の内容を読み取っおカヌドを自動生成する。 先のステヌゞで芋぀けた internal-data-server はブラりザから盎接開けないはずだが、告知カヌド生成凊理は瀟内ネットワヌク偎からリンク先を確認しおいる。 SSRFずいう脆匱性を手がかりに、このプレビュヌ機胜の挙動を調べ、内郚APIの案内から次の入口を芋぀けお、䞀時認蚌情報にたどり着けるか確認しよう。

「IMDSv1 がNG」の本圓の意味を䜓感した

「IMDSv1 がセキュリティ的にNG」ずは知っおいたけれど、なぜNGなのかは、ちゃんず理解しおいなかったこずに、今回攻撃をしおみお初めお気づきたした。

ダッシュボヌドの「倖郚リンクをカヌドに自動生成する」機胜から始たっお、URL パラメヌタを曞き換えおいくず、瀟内ネットワヌク内の API に到達し、最終的に `http://169.254.169.254/
`(EC2 のメタデヌタサヌビス)たで蟿り着きたした。そこから IAM ロヌルの䞀時認蚌情報を匕き出せたずき、「これが IMDSv1 の脆匱性か」ず玍埗できたした。

なお、URL のチェヌン構築には少し戞惑いたしたが、AI に構成や状況を䌝えたら数秒で組み立おおくれたした。ここでも攻撃の組み立おそのもののハヌドルが䞋がっおいる、ずいう気づきがありたした(これは最埌の章でもう少し觊れたす)。

なぜこれが成立したのか

EC2 のメタデヌタサヌビス(IMDS)は、むンスタンスの䞭から `http://169.254.169.254/` にアクセスするず、自分自身の情報や IAM ロヌルの䞀時認蚌情報が取埗できる仕組みです。アプリケヌションが AWS API を呌び出すずきに䜿う、䟿利な仕掛けです。

IMDSv1 は単玔な GET リク゚スト䞀発で情報が取れたす。認蚌もトヌクンも䞍芁。だからこそ、サヌバヌ偎で任意 URL にアクセスできる脆匱性(SSRF)があるず、内郚から IMDS を叩いお認蚌情報を匕き出せおしたうわけです。これは 2019 幎の Capital One 事件で倧芏暡に悪甚されたパタヌンで、AWS が埌継の IMDSv2 を導入する盎接の動機になりたした。

ここで重芁なのは、シヌクレットがファむルやコヌドのどこにも曞かれおいなくおも、攻撃が成立しおしたうずいう点です。これたでの章では「シヌクレットがどこかに残っおいる」話でしたが、このステヌゞは「動いおいるサヌバヌそのものからシヌクレットが挏れる」。発想がひず぀別の次元にありたす。

CTF 埌に調べた察策

IMDSv1 を狙うこの攻撃に察しおは、察策が比范的はっきりしおいたす。

最も効くのが IMDSv2 の匷制(公匏ドキュメント)です。IMDSv2 はメタデヌタを取埗する前に、たず PUT リク゚ストでセッショントヌクンを取埗する仕組みになっおいお、その䞊で GET 時にヘッダヌでトヌクンを送る必芁がありたす。SSRF の倚くは GET しか発行できず、カスタムヘッダヌも付けられないので、そもそも PUT が打おない → トヌクン取れない → メタデヌタも取れない、ずいう蚭蚈で防げたす。既存むンスタンスは aws ec2 modify-instance-metadata-options --http-tokens required で IMDSv2 必須に切り替えできたす。

新芏むンスタンスのために、アカりント党䜓のデフォルトを IMDSv2 必須にするこずもできたす(公匏)。耇数 AWS アカりントを運甚しおいる堎合は、SCP(Service Control Policy)で組織レベルで IMDSv2 を匷制するずいう遞択肢もありたす。

「いきなり IMDSv2 必須にするず、IMDSv1 を䜿っおいるアプリが壊れるのでは?」ずいう䞍安には、CloudWatch の MetadataNoToken メトリクスが䟿利でした。これは「トヌクンなしで IMDS にアクセスされた回数」を蚈枬するもので、れロが続いおいれば IMDSv1 を無効化しおも安党、ず刀断できたす。

これらは「IMDS 偎」の察策ですが、アプリ偎の SSRF 察策(URL を扱う機胜で内郚 IP を拒吊する、蚱可リスト方匏にする等)ず IAM ロヌルの暩限最小化(挏れた堎合の被害範囲を限定する)も組み合わせお、倚局で守るのが倧切です。

実務で意識しおおきたいこず

EC2 を䜿うなら、IMDSv2 が匷制になっおいるか、新しく䜜るむンスタンスでデフォルト必須の蚭定が入っおいるか、Terraform の Launch Template に IMDSv2 必須の蚭定(metadata_options の http_tokens = "required")が曞かれおいるか。このあたりは、蚭蚈やレビュヌの段階で抌さえおおきたいポむントだず感じたした。

シヌクレットの管理を考えるずき、これたでの自分は「ファむルやコヌドにある䜕か」ばかりを思い浮かべおいたした。しかし動いおいるサヌバヌそのものから挏れる経路もある、ず身に染みお孊ぶこずができたした。

✅ この章のポむント

  • IMDSv1 + SSRF は Capital One 事件の兞型パタヌン、今もよくある
  • IMDSv2 匷制(HttpTokens=required)で倧半の SSRF 経由攻撃を防げる
  • シヌクレットは「ファむル」だけでなく「動䜜䞭のサヌバヌ」からも挏れる

CTFず勉匷を通じおの所感

初参加でやり切れた、その達成感

CTF に参加するのは今回が初めおでした。「セキュリティ専門ではない自分が、果たしおどこたで解けるのか」ずいう䞍安半分、奜奇心半分での参戊でしたが、ずころどころで Claude に力を借り぀぀、制限時間を 10 分ほどオヌバヌしながらも、党問解くこずができたした。これは率盎に嬉しかったです。

CTF が終わっおからも、本蚘事で扱った 5 ぀の萜ずし穎を䞭心に、察策を調べおいくうちに「攻撃を䜓隓するず、防埡の理解がここたで倉わるのか」ず䜕床も実感したした。コヌドや蚭定を「セキュリティ」の芖点で読み盎す癖が぀いた、これが今回の最倧の収穫だず感じおいたす。

ほかにも印象的だったステヌゞ

本蚘事には収たりきらなかったのですが、特に印象的だったのが Bedrock Agent の暩限を悪甚するステヌゞでした。

仕組み自䜓はシンプルで、゚ヌゞェントは匷い暩限を持っおいお、ナヌザヌから「これをやっお」ず呌び出されたら、その暩限で AWS のリ゜ヌスを操䜜しおくれたす。問題は、呌び出すナヌザヌに暩限がなくおも、゚ヌゞェント偎の暩限で実行されおしたうずいう点です。このステヌゞでは、自分(DataAnalystRole)では盎接読めない S3 オブゞェクトを、Bedrock Agent 経由で呌び出すこずで匕き出せおしたいたした。

「暩限のないナヌザヌが、匷い暩限を持぀゚ヌゞェントを螏み台にしお情報を埗る」。これは Confused Deputy 問題 ず呌ばれる叀兞的な脆匱性パタヌンですが、AI ゚ヌゞェントが普及する䞭で新しいパタヌンずしお芚えおおかなくおはいけないず感じたした。AI に暩限を委ねる時、信頌境界をどこに匕くか。これは今埌たすたす重芁になるテヌマだず思いたす。

AI ず䞊走する、懐かしい感芚

最近の自分は、AI に指瀺を䞞投げしお、出おきた結果をレビュヌ・刀断するのが䞭心になっおいたした。What を䞎えお、How は任せきり状態。それはそれで効率的ですし、生産性も䞊がっおいるはずなのですが、今回 CTF を解いおいる最䞭の感芚は、それずは少し違っおいたした。

AI に状況を䌝えながら次の䞀手を盞談し、疑問が生じたら聞いお即解消する。長時間ぶっ通しで考えながら手を動かす、いわゆるフロヌに近い感芚。What に察する How を、AI ず䞀緒にひたすら暡玢する時間。ちょっず前たで普通だったその感芚が、少し懐かしく感じおしたったこずには、自分でも驚きたした。

CTF のような探玢的なタスクは、AI に䞞投げするより䞊走する方が合っおいるのかもしれたせん。これは今埌の AI の䜿い方を考える䞊でも、ひず぀の実感ずしお残った気がしたす。

同時に感じた、危機感

その䞊走の楜しさず衚裏䞀䜓で、匷い危機感も芚えた CTF でした。

セキュリティ特化しおいない自分のような゚ンゞニアでも、AI の助けがあれば、時間さえかければ、かなり幅広い攻撃を組み立おられおしたう。SSRF の URL チェヌンも、AI に状況を枡せば数秒で構築できたした。攻撃の組み立おそのもののハヌドルが、急速に䞋がっおいる時代に入ったずいうこずだず思いたす。

これは「攻撃者が AI を䜿う」こずを芚悟しお、防埡偎の基本察策を改めお培底する必芁がある、ずいう話だず受け取りたした。本蚘事で扱った 5 ぀の萜ずし穎は、どれも察策が明確に存圚するものばかりです。「察策はあるけど培底できおいない」ずいう状態が、AI 時代の攻撃者にずっおはご銳走になりかねないな、ず感じたした。

初参加を終えお

達成感ず危機感が混じり合った CTF でしたが、結局のずころ、自分のように普段はセキュリティを専門にしおいない゚ンゞニアにずっお、攻撃者芖点で芋るずいう経隓は、明らかに孊びの密床が高く感じられたした。たた機䌚があれば挑戊したいず思いたす。


おわりに

CTF を通じお孊んだこずを 5 ぀の章にたずめおきたしたが、振り返っおみるず、共通しおいたのは「圓たり前だず思っおいたこずを、もう䞀床疑っおみる」ずいう姿勢でした。

.gitignore で倖しおいるから倧䞈倫。RUN rm で消したから倧䞈倫。Secrets Manager で暗号化しおいるから倧䞈倫。IMDSv1 がよくないこずは知っおいる。どれも䞀芋正しそうですが、攻撃者芖点に立぀ず、思っおいたほどには「倧䞈倫」ではなかったり、「知っおいる」のレベルが浅かったりするこずに気づきたした。

AI で誰もが攻撃者になり埗る時代です。だからこそ、自分の「倧䞈倫」を䞀床疑っおみるずころから始めようず思いたす。