この記事はCTFのWebセキュリティ Advent Calendar 2021の1日目の記事です。
はじめに
CTFのWeb問題を細々と解いていたが、そろそろ解説で意味が分からないことも少なくなってきたので、
Web問題についての情報まとめをアドベントカレンダーで一斉放出することにした。
いつもブログを見てくださっている人には分かるかもしれないが、いつものようにキーワードを並べたようなまとめである。
なので、手取り足取り教えると言ったものではなく、学習ガイドとして活用してほしい。
CTF入門
CTFとは何なのか
CTFとはセキュリティ的な問題を解く競技のことであり、色々なジャンルに分かれている。
全体的な話は他の記事に譲るとして、Web問題に絞って話すことにしよう。
大体のCTFは一問一答の形をとっており、とあるWebシステムが与えられて、そのシステムに含まれている「お宝」を探すのが目的である。
このお宝をFlagと呼んでおり、一般的にはハッカーがWebシステムを攻撃して手に入れたい情報という風に解釈されている。
例えば、Cookieの情報や不正ログイン後に得られる情報、場合によってはシステム自体を乗っ取れば得られる情報もあったりする。
こういった攻撃を通して攻撃者の思想や技術を学ぶことで防御に役立てる。これがCTFの本分である。
(単にハッキングの美学に触れるためでもあるが)
重要なこと
重要なことは、CTFでしか攻撃をしてはいけないということである。
実際のサービスに興味本位であっても(仮に善意があっても)攻撃を仕掛けるのは犯罪である。
今回のまとめで紹介することは現実のセキュリティについても参考にはなるが、CTF以外での知識の利用は推奨しない。
初学者に向けて
現状、Web問題に対する入門方法は確立されていないように思う。
確実性のある最短ルートは示せないが、道筋とそこで学べることはいくつか示せるので、それを紹介しよう。
- 徳丸本
- Webセキュリティを網羅的に日本語で書いてある本はこれくらいしか無い。2021年時点全く色褪せない
- 徳丸本を読んでからCTFのWeb問題に取り組むと、CTFに慣れるまでが大変ではあるが、2ステップ目くらいからは背景知識があるので比較的楽に進めるかと思う
- あと、知識が無いゆえによく分からないということも減るだろう
- セキュリティコンテスト本を読む
- 詳解セキュリティコンテスト
- セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-
- セキュリティコンテストのためのCTF問題集
- どちらもWeb問に対して網羅的な解説ではないが、CTFのWeb問題への向き合い方や実際にどう解くかといった話も書いてあり、周りに有識者がいない場合は大変参考になる
- 徳丸本の読破は初心者にとってはかなり信念を持ってないと厳しく、CTFにチャレンジしてみたいという人であれば、この本から始めた方が良いだろう
- Web Security Academy: Free Online Training from PortSwigger
- Web問を解く場合はBurp Suiteというツールを使っている人が多く、そのツールを出している会社が用意している学習リソース
- 全英語なのでそこは頑張る必要があるが、解説もあってある程度の道筋も示していて、実践的な攻撃が学べるだろう
…と色々書いたが、トライアンドエラーで試行錯誤していく他無いのが現状ではないだろうか。
CTFは毎週何かしらやっている。
CTFtimeというサイトでActiveなCTFが見られるので、そこで毎週出てみよう。
大会開催後は有志による解説、CTF用語で言う所のWriteupが公開されるので、解けなかった問題を復習していく。
Writeupが公式から提供される確証は無いので、なるべく参加人数が多いCTFに出ると復習できる可能性が上がるだろう。
YouTubeで動画形式で上げてくれている人もいるので、理論だけでなく実践的なやり方をこれで学ぶこともできる。
結局はたたき上げである。
Web問への取り組み方
ここからは入門者が知識として得づらい部分や話しておくべきこと、暗黙知的なことをつらつら書いていくことにする。
- フラグってどこにあるの?
- 自動スキャンツール、自動攻撃ツールは使用してはならない
- 攻撃者目線で問題を解く
- Guess問と揶揄される問題があり、Webの内部構成を推測したり、システム上の不備を推測して解くような問題である
- かなり無茶な推測を要求する場合は批判されたりもするが、ある程度の推測は現実に寄っている感じもあって、自分は歓迎できる
- 例えば初手で
/robots.txt
を見るというのもあるが、これも攻撃者視点から来ている(要出展)
- Try Harder
- Try HarderはOffensive Security社の家訓であるが、セキュリティの特にコンテスト界隈でよく見かける。単純にもっと頑張れという意味
- CTFのWeb問題ではプログラミング言語の細かな仕様を突いて解くような調査力が要求される問題も多く出題される。なので、調査が前提というか、ここは攻撃できそうというセンスをもとに調査をして、言ってしまえばTry Harderで解法までたどり着くということが多々ある
- ググラビティも重要な要素であり、臭い部分を見つけるのがセンスと経験である
- かなり広い知識が要求される…が、ググラビティでカバーできる
- 今はWeb問題は復習ができる
- 常設のCTFでなくても、最近のCTFではコンテスト後にWeb問題の内容をdockerなどですぐに立ち上げられるようにして公開してくれていたりする
- なので、githubとかでCTFのタイトルをググったりするとレポジトリが見つかって実際にシステムに対して復習ができる
- SECCONとかでも過去問があったはず。使えるのでやってみるといい
より強くなるために
もう頑張るしかないし、正直自分もそんなに強くない。
Web問題では要求知識が多いにも関わらず、最新のWeb関連技術を絡めてきたり、ライブラリのゼロデイを出して来たりと最悪な感じなので、頑張ってとしか言いようがない。
だが、基本的な概念はそれほど変わっておらず、未だに徳丸本が第一線であるように、移り変わりが激しいWebであっても根本的な考え方はそれほど変化していない。
(しかも、最近はWebの変化が鈍化しているような…?自分のセンサーが衰えただけか?)
なので、これから出すまとめ記事から概念やキーワードを拾うことで、体系的な知識を身に着けてほしい。
これだけ学習したにもかかわらず、全然勝てないのでCTFは難しいですね…
まとめ
- CTFのWebセキュリティにおけるHTTP通信まとめ(HTTP, Request Smuggling, Response Splitting, HTTP2)
- CTFのWebセキュリティにおける認証認可まわりまとめ(Cookie/Session、Authentication/Authorization、JWT、IDOR, TOTP, OAuth)
- CTFのWebセキュリティにおけるデータ形式まとめ(XML, Json, Insecure Deserialization, XXE)
- CTFのWebセキュリティにおけるSQL Injectionまとめ(MySQL/MariaDB, PostgreSQL, SQL Server)
- CTFのWebセキュリティにおけるNoSQLまとめ(Redis, MongoDB, GraphQL)
- CTFのWebセキュリティにおけるXSSまとめ(PRSSI, XFS, CSS Injection)
- CTFのWebセキュリティにおけるPath Traversal, LFI/RFI (File Upload, ZipSlip)
- CTFのWebセキュリティにおけるCRLF Injection/Header Injection
- CTFのWebセキュリティにおけるWebサーバー/インフラまとめ(Apache, nginx, IIS, CDN/Cache, CGI, Docker/Kubernetes)
- CTFのWebセキュリティにおけるCSRF/SSRF
- CTFのWebセキュリティにおけるサイドチャネル攻撃まとめ(Blind SQL Injection, XSLeak)
- CTFのWebセキュリティにおけるDNS/ドメインまとめ
- CTFのWebセキュリティにおけるCommand Injectionまとめ(Linux, Windows, RCE)
- CTFのWebセキュリティにおけるSSTIまとめ
- CTFのWebセキュリティにおけるRace Condition
- CTFのWebセキュリティにおけるPHPまとめ
- CTFのWebセキュリティにおけるJavaScript,nodejsまとめ(Prototype pollution, 難読化)
- CTFのWebセキュリティにおけるPythonまとめ
- CTFのWebセキュリティにおけるその他言語まとめ(C#, .NET, GO, Java, Perl, Ruby)
- CTFのWebセキュリティにおけるクライアント側まとめ(CSP, CORS, Web Assembly, PostMessage)
- CTFのWebセキュリティにおけるCloud問題(AWS, GCP)
- CTFのWebセキュリティにおけるPassword Cracking, ハッシュ, 暗号化
- CTFのWebセキュリティにおけるオープンリダイレクトまとめ
- CTFのWebセキュリティにおける細かな話題まとめ(Unicode, Reguler Expression, LDAP Injection, Dependency Confusion, DoS)
終わりに
さて、アドベントカレンダーとしてはこれからまとめ記事を書いていく。全く初心者向けではないので、単語をもとに調べて理解する必要がある。
いつものようにまとめているだけなので、それ以降は頑張ってくださいといういつもの感じです。
こういったキーワード集があることで、学習の指針になったり、単に知らないということだけで学習が止まってしまわないようになることを祈る。