はまやんはまやんはまやん

hamayanhamayan's blog

CTFにおけるWebセキュリティ入門とまとめ

この記事はCTFのWebセキュリティ Advent Calendar 2021の1日目の記事です。

はじめに

CTFのWeb問題を細々と解いていたが、そろそろ解説で意味が分からないことも少なくなってきたので、
Web問題についての情報まとめをアドベントカレンダーで一斉放出することにした。
いつもブログを見てくださっている人には分かるかもしれないが、いつものようにキーワードを並べたようなまとめである。
なので、手取り足取り教えると言ったものではなく、学習ガイドとして活用してほしい。

CTF入門

CTFとは何なのか

CTFとはセキュリティ的な問題を解く競技のことであり、色々なジャンルに分かれている。
全体的な話は他の記事に譲るとして、Web問題に絞って話すことにしよう。
大体のCTFは一問一答の形をとっており、とあるWebシステムが与えられて、そのシステムに含まれている「お宝」を探すのが目的である。
このお宝をFlagと呼んでおり、一般的にはハッカーがWebシステムを攻撃して手に入れたい情報という風に解釈されている。
例えば、Cookieの情報や不正ログイン後に得られる情報、場合によってはシステム自体を乗っ取れば得られる情報もあったりする。
こういった攻撃を通して攻撃者の思想や技術を学ぶことで防御に役立てる。これがCTFの本分である。
(単にハッキングの美学に触れるためでもあるが)

重要なこと

重要なことは、CTFでしか攻撃をしてはいけないということである。
実際のサービスに興味本位であっても(仮に善意があっても)攻撃を仕掛けるのは犯罪である。
今回のまとめで紹介することは現実のセキュリティについても参考にはなるが、CTF以外での知識の利用は推奨しない。

初学者に向けて

現状、Web問題に対する入門方法は確立されていないように思う。
確実性のある最短ルートは示せないが、道筋とそこで学べることはいくつか示せるので、それを紹介しよう。

  1. 徳丸本
    • Webセキュリティを網羅的に日本語で書いてある本はこれくらいしか無い。2021年時点全く色褪せない
    • 徳丸本を読んでからCTFのWeb問題に取り組むと、CTFに慣れるまでが大変ではあるが、2ステップ目くらいからは背景知識があるので比較的楽に進めるかと思う
    • あと、知識が無いゆえによく分からないということも減るだろう
  2. セキュリティコンテスト本を読む
  3. Web Security Academy: Free Online Training from PortSwigger
    • Web問を解く場合はBurp Suiteというツールを使っている人が多く、そのツールを出している会社が用意している学習リソース
    • 全英語なのでそこは頑張る必要があるが、解説もあってある程度の道筋も示していて、実践的な攻撃が学べるだろう

…と色々書いたが、トライアンドエラーで試行錯誤していく他無いのが現状ではないだろうか。
CTFは毎週何かしらやっている。
CTFtimeというサイトでActiveなCTFが見られるので、そこで毎週出てみよう。
大会開催後は有志による解説、CTF用語で言う所のWriteupが公開されるので、解けなかった問題を復習していく。
Writeupが公式から提供される確証は無いので、なるべく参加人数が多いCTFに出ると復習できる可能性が上がるだろう。
YouTubeで動画形式で上げてくれている人もいるので、理論だけでなく実践的なやり方をこれで学ぶこともできる。

結局はたたき上げである。

Web問への取り組み方

ここからは入門者が知識として得づらい部分や話しておくべきこと、暗黙知的なことをつらつら書いていくことにする。

  • フラグってどこにあるの?
    • 攻撃可能な手法に対応しておかれやすい場所があったりするが、基本的に頑張って場所込みで探す必要がある
    • RCE可能であれば~/flag.txtとか/flag.txtを読みだすし、XSS可能なら被害者のCookieを抜き出せばいいし、という感じで結構まちまち。何個か問題をこなしていけば場所については慣れてくる
  • 自動スキャンツール、自動攻撃ツールは使用してはならない
    • CTFは脆弱性診断ではないので、自動化ツールは使ってはならないと肝に銘じておこう。運営者に迷惑が掛かる
    • たまーに、ディレクトリスキャニングを使ってほしいという問題もあるが、その場合は使っていいよと問題か全体ルールに書いてある。明記されてない限り使ってはいけない
    • とは言っても自分でpythonツールを書いてリクエストを送りまくって情報を抜き出したりすることが想定解である問題もあり、ややグレー。自分はそういった解法の場合は運営側に気を使ってウェイトを入れるようにしている
  • 攻撃者目線で問題を解く
    • Guess問と揶揄される問題があり、Webの内部構成を推測したり、システム上の不備を推測して解くような問題である
    • かなり無茶な推測を要求する場合は批判されたりもするが、ある程度の推測は現実に寄っている感じもあって、自分は歓迎できる
    • 例えば初手で/robots.txtを見るというのもあるが、これも攻撃者視点から来ている(要出展)
  • Try Harder
    • Try HarderはOffensive Security社の家訓であるが、セキュリティの特にコンテスト界隈でよく見かける。単純にもっと頑張れという意味
    • CTFのWeb問題ではプログラミング言語の細かな仕様を突いて解くような調査力が要求される問題も多く出題される。なので、調査が前提というか、ここは攻撃できそうというセンスをもとに調査をして、言ってしまえばTry Harderで解法までたどり着くということが多々ある
    • ググラビティも重要な要素であり、臭い部分を見つけるのがセンスと経験である
  • かなり広い知識が要求される…が、ググラビティでカバーできる
    • 知らない分野は仕方がないので、なるべくキーワードというか概念をつかんでおくことが重要なように思う
    • C#XMLを扱っている所があれば「C# XXE」でググってみるとかそういったキーワードを元に調べることができるようになると、解ける問題が広がっていくだろう
    • 強い人たちは公式ドキュメントを読んだり、無茶苦茶ググってる印象あります
  • 今はWeb問題は復習ができる
    • 常設のCTFでなくても、最近のCTFではコンテスト後にWeb問題の内容をdockerなどですぐに立ち上げられるようにして公開してくれていたりする
    • なので、githubとかでCTFのタイトルをググったりするとレポジトリが見つかって実際にシステムに対して復習ができる
    • SECCONとかでも過去問があったはず。使えるのでやってみるといい

より強くなるために

もう頑張るしかないし、正直自分もそんなに強くない。
Web問題では要求知識が多いにも関わらず、最新のWeb関連技術を絡めてきたり、ライブラリのゼロデイを出して来たりと最悪な感じなので、頑張ってとしか言いようがない。
だが、基本的な概念はそれほど変わっておらず、未だに徳丸本が第一線であるように、移り変わりが激しいWebであっても根本的な考え方はそれほど変化していない。
(しかも、最近はWebの変化が鈍化しているような…?自分のセンサーが衰えただけか?)
なので、これから出すまとめ記事から概念やキーワードを拾うことで、体系的な知識を身に着けてほしい。

これだけ学習したにもかかわらず、全然勝てないのでCTFは難しいですね…

まとめ

終わりに

さて、アドベントカレンダーとしてはこれからまとめ記事を書いていく。全く初心者向けではないので、単語をもとに調べて理解する必要がある。
いつものようにまとめているだけなので、それ以降は頑張ってくださいといういつもの感じです。
こういったキーワード集があることで、学習の指針になったり、単に知らないということだけで学習が止まってしまわないようになることを祈る。