2019年11月17日、都内のアマゾン ウェブ サービス ジャパンのオフィスを会場に「とある診断員とSecurity-JAWS #01」が開催された。Security-JAWS初となる本ワークショップは、CTF形式でAWSのセキュリティを学ぶサイト「flaws.cloud」をベースに、演習と解説で1問ずつ解きながら進める内容。当日は100名以上が参加し、手を動かしながら問題に取り組んだ。
みんなでflaws.cloudに挑戦
flaws.cloudは、AWSセキュリティコンサルタントのスコット・パイパー(Scott Piper)氏が有志で作成した常設の問題集。内容は、AWSサービスで陥りがちな権限設定ミスやAWS固有の脆弱性など、6つの設問が用意されている。設問は「Level」と表現され、後半にいくほど難易度が上がる。基本的にはAWSセキュリティについて知ってもらうための学習用CTFなので、各設問にあるヒントを見れば、少なくともLevel3くらいまでは難なく解けるようになっている。いつでも気負わず挑戦できるのが魅力だ。
たとえば、Level1を見てみる。問題文は「This level is *buckets* of fun. See if you can find the first sub-domain」とある。最初のサブドメインを探すのが目的で、「buckets of fun」ということはAmazon S3(Amazon Simple Storage Service)のバケットに関連するということが読み取れる。実際、DNS lookupでflaws.cloudのIPアドレスを調べてみるとIPアドレスが表示され、このIPアドレスもDNS lookupにかけると「s3-website-us-west-2.amazonaws.com」の結果が返ってくる。つまり、このWebサイトは「us-west-2」のリージョンのS3バケットでホストされているということが分かるわけだ。S3はデータを格納するAWSのストレージサービスだが、最近はWebサーバーとして静的コンテンツ配信用に利用されることも増えているという。
Amazon S3の名前空間は全AWSアカウントで共有され、S3バケット名はグローバルに一意で、静的Webサイトをホストする場合はバケット名とドメイン名を一致させる必要がある。こうした仕様を踏まえると、バケット名もflaws.cloudであるという推測が成り立つ。S3バケットのURLは、仮想ホスト形式(http://バケット名.s3-リージョン名.amazonaws.com/など)とパス形式(http://s3-リージョン名.amazonaws.com/バケット名など)の2種類がある。そこで、「http://flaws.cloud.s3-us-west-2.amazonaws.com」や「http://s3-us-west-2.amazonaws.com/flaws.cloud/」にアクセスしてみると、バケット内に格納されたファイルのXMLインデックスが表示される。その中に一目で怪しいと分かるファイルがあるのでアクセスすると、「Congrats!」と書かれたページが開いて正解となる。
Level1の問題は、S3のバケット設定によっては保存データが公開状態になることを題材にしたもの。アカウント単位で新規/既存バケットの公開設定をブロック指定できるパブリックアクセス設定機能がデフォルト設定にあるので、回避することは可能だ。
ただし、Webサイトとして利用するとなると話は違ってくる。Webサイトの場合、配信されるオブジェクトを誰もが読み取れるようにする必要があり、アクセスしてきた全員に"s3:GetObject"を許可するバケットポリシーを作成することになる。全員にオブジェクトの一覧許可をすると、当然ディレクトリ内のファイルを誰もが一覧でき、アクセス可能になる。そうした設定を知らず/忘れてS3バケットに顧客データを格納すれば、うっかり公開することにもなりかねない。
flaws.cloud著者も快諾、自分のペースで楽しめる勉強会に
ワークショップ開催のきっかけについて、とある診断員さん(@tigerszk)こと三井物産セキュアディレクションの洲崎俊さんは、「脆弱性診断やペネトレーションテスト業務でAWSのセキュリティについてリサーチしていたところ、flaws.cloudに出会い、とても勉強になったから」と明かす。
「常設サイトだから、やろうと思えばいつでもできるのですが、なかなかまとまった時間ってとりにくいんですよね。また、英語をハードルに感じる人もいるかもしれない。それで、半日くらい時間をとって、日本語で解説しながら一緒に勉強するのはどうだろうと。以前、@yamatosecurity氏が主催する大和セキュリティ勉強会に参加したんですが、あんな楽しいハンズオンができたらと考えていたのもあります」(洲崎さん)
そんな中で、最初のチャンスが到来した。OWASP Sendaiで小規模なハンズオンを開催することができた。参加者の反応は上々。これならばと、Security-JAWS運営メンバーの吉江瞬氏に相談し、今回のワークショップ開催に至った。
「Security-JAWSでワークショップ形式の勉強会を開催したことがなく、やってみたいと思いました。ハンズオンで必要な設備が整ったAWS Japanの会議室を会場として借りられることは、日々の運営で分かっていたので、ならやってみようと。蓋を開けてみたら、100名を超える応募がありました」と吉江氏は笑う。
開催に当たっては、flaws.cloudの生みの親であるパイパー氏にも連絡した。
「flaws.cloudの続編でflAWS 2というのがあるのですが、これのwriteup(CTFなどで自分がどうやって問題を解いたかを紹介する記事)を公開したら、パイパー氏がTwitterでリツイートして、コメントをくれたことがあったんです。それで、『writeupを書いたものですが、flaws.cloudのファンで、こんなイベントを日本でやりたいんだけどいいですか?』と聞いたら、『どんどんやっちゃって』と即レスが(笑)」。快諾してもらえて感謝していると洲崎さんは述べる。
当日は、参加申し込み時にAWS CLIのセットアップなど事前準備を条件としたことで、すぐにハンズオンを開始できた。時間はたっぷりあるとは言えど、6問をすべて網羅するには時間が足りない。そう感じた洲崎氏たちは、なるべく当日は課題に集中してもらえるよう条件を設けたと話す。
問題の解説はLevel1から順番に行なわれたが、早く解ければ先に進んでいいという緩めの方針で進行した。洲崎さんによる解説付きの資料も事前に提供され、flaws.cloudにも分かりやすいヒントが記載されているので、「当日の解説と併せて、自分のペースで楽しんでもらいたい」(洲崎氏)というのが主旨だ。
当日の資料などは、すべて公開されている。自宅で復習する際に活用してもいいし、会社やサークルなどの勉強会で使ってもらうのも大歓迎と洲崎さんは言う。
「今回のワークショップでは対策について解説しなかったが、JAWS DAYS 2019での講演『PenTesterが知っている危ないAWS環境の共通点~攻撃者視点よりお届けする狙われやすいAWSの穴~』で紹介しているので、参考にしてもらえれば幸い」(洲崎さん)
週刊アスキーの最新情報を購読しよう