どうも!職業訓練生のがっちゃんです!
ただいま長期人材育成コースの「情報セキュリティ管理者資格」2年コースを絶賛受講中です。自分の復習と、どなたかの参考にと思い講義録をまとめて公開しています。
今回は、授業のひとつとして4名が1チームとなり「MBSD Cybersecurity Challenges 2019」コンテスト(主催:三井物産セキュアディレクション(株))に参加したことについてお話していきたいと思います。
私たちが挑戦した課題はこちらです。今年から課題がガラリと変わったそうです。
「専門学校と経営」→「企業との連携」→「第4回セキュリティコンテスト」より
脆弱性を指摘されたWebサイトの運営会社は、予算の都合でWebアプリケーションの修正は行わず、WAF(Web Application Firewall)を導入する方針を決めた。しかし、予算がないため安価に導入できるベンダーを探しているが、どのWAFを導入すればいいのか分からず、社員一同、途方に暮れていた。そんな状況下で、あなたのチームにWAFのセットアップ依頼が舞い込んだ。
さて、あなたのチームのWAFは攻撃を食い止めることができるだろうか!?
1次審査 競技概要
- 1チーム4名以内とし、課題に取り組んでください。
- エントリーしたチームに別途配布する課題の詳細に沿ってWAFを作成し、作成したWAFの説明資料(レポート)を提出してください。
- 期限までに提出されたWAFの説明資料について一次審査を行います。上位10チームは2019年12月16日(月)に開催される最終審査会に進出することができます。
- 1次審査結果は、審査を通過したチームの代表者に、11月27日(水)に事務局よりご連絡いたします。
1次審査 審査観点
- あなたのチームが作成したWAFを導入するにあたり、本当に有効なのか判断する必要があります。そのため、作成したWAFで実装した機能およびその根拠や有効性を示してください。
- どんなに優秀なWAFを作成しても実装した機能説明が相手に伝わらないと有効なのか判断ができない可能性があります。提出してもらう説明資料の見やすさ、分かりやすさを工夫してください。
- 他のチームとは違う実装や観点でWAFを作成することで、採用されるかもしれません。WAFを実装するためにどのような工夫をしたのか、他のチームと何が違うと自負しているのかを示してください。
今回参加したチームなど公式結果は、以下の公式サイトでご確認くださいませ。
以上が、今回の課題のレギュレーションです。「え!?WAFってなんなん!?おいしいの?」みたいなイメージしかないのに、レポートを出すことができるのでしょうか?
チーム分けは講師の方が、それぞれの生徒の技術レベルに応じて、平等になるように分けてくださったそうなのですが、それでもやはり、チームごとに実力の差が歴然としています。以前IT企業にお勤めの生徒がいるチームは有利です。そこへいくと、わがチームは全員素人さんです。元介護士の私に、元柔道整復師さんと元美容師さんの3人です。ずば抜けての素人集団です。
そんなことを言っている場合ではありません。レポート提出のために一生懸命やるしかありません。わがチームは以下のようにレポート提出をすすめていきました。
WAFを置くリバースプロキシサーバと、WEBサーバを作成
課題では、以下のような感じで「OWASP Juice Shop」を稼働させる検証環境を用意するよう、指示されています。配布されたWAFを経由してJuice Shopにアクセスするように、WAFを設定していきます。
以下がOWASP Juice Shop ProjectのホームページとGitHubページです。
OWASP Juice Shop Project – OWASP
GitHub – bkimminich/juice-shop: OWASP Juice Shop is an intentionally insecure webapp for security trainings written entirely in Javascript which encompasses the entire OWASP Top Ten and other severe security flaws.
OWASP Juice Shopとは、いわゆる「やられサイト」だそうでして、あらかじめ脆弱性が含まれたサイトとして作成されたサイトのことです。セキュリティや脆弱性の教育などでもちいられるそうです。
OWASP – Open Web Application Security Project とは、Webをはじめとするソフトウェアのセキュリティ環境の現状、またセキュアなソフトウェア開発を促進する技術・プロセスに関する情報共有と普及啓発を目的としたプロフェッショナルの集まる、オープンソース・ソフトウェアコミュニティです。The OWASP Foundationは、NPO団体として全世界のOWASPの活動を支えています。
WEBサイトの脆弱性を診断
上記の環境設定の参考サイトに、若干のヒントが書かれていました。
スコアボードを探せ!
脆弱性を示すスコアボードが表示できるようになっているそうです。それも自分で探しなさい、ということらしく、ヒントはここまでなのですが、私はURLに、それっぽいワードを入力して探すことにしました。で、あっという間にビンゴ!以下のようなスコアボードを見つけることができました。直下に答えを書いちゃっているので、自分で探したい人は見ないふりをしてください。
トップページのURLに、以下を入力したら表示されました。
1 |
/* /#/score-board */ |
ジュースショップの攻略本を読め!
もうひとつのヒントが、以下のページ(英語ですのでグーグル先生に翻訳してもらいましょう)に、この「ジュースショップ」のチャレンジ方法が書かれているよ、ということが書かれていました。ここにもジュースショップをローカルで作成して勉強できる方法が書かれています。上記でうまく作成できなかった方は、こちらも参考になさってください。
https://pwning.owasp-juice.shop/
さて、これらのヒントをもとに、脆弱性を探っていきます!スコアボードを確認すると、結構な種類の脆弱性があるようです。結局わがチームでは6つの脆弱性しか見つけることができませんでした。
ほかのチームはいろいろな脆弱性を見つけているようです。
レポート提出まで、あと1週間を切ってきたところで、脆弱性診断を終え、それらをカバーするためのWAF設定にとりかかります。
サイトを守るためのWAFを設定
今回の課題で提供されているWAFは、「Mod Security」というオープンソースのソフトウエアが配布されました。今回の課題では、それ以外のものを使用してもよし、自作してもよし、ということになっていますが、わがチームでの実力で、配布された「Mod Security」を使う以外の方法を知り得るわけがありません。
まずは「Mod security」って、なんぞ!?というところからです。調べてみると、無料のソフトですが、いろんな脆弱性から守ってくれるみたいです。今回提供された「Mod security」にはまだ「Core Rule Set」がインストールされておらず、「未セッティングだから、このままだと攻撃されても全部攻撃をとおしちゃうよ」という仕様になっているようです。
どうやらこの「Core Rule Set」をそのまま使ったら、強力すぎて正常なリクエスト通信も遮断しちゃうらしいのです。「これ導入したらもう課題はクリアしたもんやん。ってかみんなこれ導入したら課題も何も、みんな決勝進出やん!」と思ったのですが、そうはいかないようなのです。守るべきサイトに合わせて独自にルールを作っていかないといけないようです。
今回は、上記で確認できた脆弱性に対して、どんなルールを作っていけばよいのかを考えていきます。そういえば課題のところに、ルールの書き方が載っていました。とはいえ例がひとつ掲載されているだけで、今一つルールの書き方が分かりません。というわけで、もうひとつ「Mod Security」の仮想環境を構築し、そこには「Core Rule Set」をインストールして、どのように防御するのかを実際に見ることにしました。
「Core Rule Set」をインストールすには、以下のコマンドを実行します。
1 |
# yum install mod_security mod_security_crs |
変更したら必ず、apacheを再起動させましょう。
1 |
# systemctl restart httpd |
これで強力に防御するWAFが構築されました。実際にルールが書かれているのは、以下のフォルダです。この中身を見て、ルールの書き方を勉強します。
1 |
/etc/httpd/conf.d/mod_security.conf |
実際に脆弱性に対して攻撃し、どんなふうに防御されているのかを確認します。Mod Securityのログはmod_security.confで指定された場所にmodsec_audit.log(デフォルトの場合/var/log/httpd/modsec_audit.log)格納されています。今回は「var/log/modsec_audit.log」にログが出力されていました。
これを見れば、「何時に、こんなところから、こんなリクエストが来たんだけど、このルールにマッチしたから攻撃とみなして、こんなふうに対処したよ!」ってなかんじでログが書かれています。もちろんここには「正常通信をとおしたよ」っていうログも書かれています。そのままナマのログでもだいたいは分かりますが、「Mod Security」のログ解析ツール「Audit Console」というのがあります。今回は時間がなく、使うまでには至りませんでしたが、次回は使いたい。以下がダウンロードサイトです。
これで「Mod Security」の働きと設定方法がひととおり分かるようになりました。わがチームオリジナルのルールを設定していくことにします。
使用したツール
使用したツールは、そんなに多くありません。なにぶん、環境構築で結構手間取ってしまったので、その時その時に困ったら「なんか便利なツールないん?」って感じで調べていました。上記で紹介したツール以外では、以下のものを利用しました。
●ModSecurity Online Handbook
https://www.feistyduck.com/library/modsecurity-handbook-free/online/
●Slack(チーム内コミュニケーションツール)
●FileZilla(クライアントPCとサーバ間のデータ交換、書き換えなどに利用)
https://filezilla-project.org/
●セキュリティルールを作る際に正規表現のチェックをするサイト
https://jex.im/regulex/#!flags=&re=%5E(a%7Cb)*%3F%24
一次審査へレポート提出
なんやかんやで、素人なりにレポートが出来上がりました。技術面では絶対に勝てないわがチームは、「素人が見ても分かりやすい!」「営業トークでなんかスゴイんちゃうん、これ!?」と思わせるようなレポート作りを心掛けました。若干どころか半分くらい、自分でレポート書いてて「こんなことできますのかいな!?」みたいなところがありましたが、「ま、最終的には先生のチェックも入るだろうから、修正してくれるだろう」と気楽に考え、提出の運びとなりました。
実際には、先生のチェックは一切入らず、わがチームが作ったレポートがそのまま一次審査に提出されたのでした。その時のレポートがこちらになります。チームで作成しましたので、一部修正して公表させていただきます。ご了承くださいませ。
mbsd2019_firstreportなぜだか一次審査を突破したよ
「青天の霹靂」とは『予想外の出来事・事件が起こること』を言うそうです。
一次審査にレポートを提出し「入賞はあり得へんわ。次の授業はWordPressでサイト構築ですか!?面白そうですやん。まずは要件定義書の作成でっか!?」って感じで、レポートのことをすっかり忘れた一週間後に「青天の霹靂」が起こります。
「一次審査の結果、貴校からエントリーいただいたチーム、2チームが選出されました。誠におめでとうございます。・・・最終審査会にご出場いただきますようお願いいたします。」というメールが学校に届きました。
「マジでか!?もう一つのチームは分かるけど、わがチームがどうして入賞するの!?絶対何かの間違いやて!」と思ったのですが、まさかあのハッタリのようなレポートを審査員が真に受けて・・・。いやいや、相手はそんな素人なわけがない。何が入賞のカギだったんだろうか?考えるほどに分からなくなりましたが、唯一入賞が考えられるのは、「分かりやすいレポート」だったということだろうか?
最終審査会まで約20日。まったく腑に落ちないまま、最終審査会への課題に取り組むのでした。
東京最終審査会の課題
課題は2つ
●ノートPCにWAFを設定し、最終審査当日、東京へ持参。WAFの動作環境と調整を行い、WAFの有効性評価が行われます。
●8分でWAFのプレゼンテーション。作成したWAFを導入してもらうため、Webサイトの運営会社担当者に機能や特徴などをアピール
審査の配点
一次審査:30点
プレゼン:10点
WAFの有効性評価(攻撃ブロック):20点
WAFの有効性評価(正常通信):40点 合計100点満点で競います。
WAFの有効性評価でも、正常通信をキチンと通すか?というのが一番大きな配点になっています。技術的なところはもう、どうしようもないのでプレゼンテーションに力を入れることにします。
東京最終審査会に参加した感想
私や一部の生徒は、東京の最終審査会に行くのには乗り気でしたが、他のチームの方を含め、大半が「えぇ~、行きたくない」という意見でした。どうして行きたくないのか!?「このような実績を積めば勉強になるし、なによりも職務経歴書にも書いてアピールできるじゃないの?」と思っている私にはまったく理解できませんでした。
最終的には全員行ってくれることになり、ホッとしました。
実際、東京最終審査会に行って感じたことは、「スゲーヤツばっかりやん」ということ。全員ガチで勉強している人ばかりです。WAFの設定も、他のチームはいろいろと最終調整をしていました(前日も2時間しか眠らず、ひたすらWAFを設定していたところもありました)が、わがチームは最終調整などひとつもしていません。それどころか、ノートパソコンに「VirtualBox」という仮想化ソフトを使ってWAFを構築していたため、ネットワークの設定でトラブってしまい、ギリギリまで接続設定に戸惑ってしまいました。
ネットワークに無事接続、守るべきサイトが表示されたところで「ん!?なにこれ!?」一次審査と違うサイトが表示されたのです。最初は「間違いじゃね!?」と思いましたが、他のチームも同じサイトが表示されています。「ま、これで大丈夫なんやなぁ」で、終わってはいけなかったのでした。
「ということは、守るべきサイトの脆弱性も変わってるんじゃね!?」と思わないといけないところだったんです!あれだけ社会人はずる賢いヤツがいるのことを、辛い思い出とともに理解していたはずなのに、すっかり忘れてしまったようです。
そうなんです!一次審査とは違う脆弱性を含ませたSNSサイトを準備されていたのでした。後でうかがうと、実は昨年の課題で使用したSNSサイトを改良したとのことで、毎回参加されている学校の生徒さんはピンときたようです。
わたしたち、無垢なチームは、そんな勘繰りに、調整時間終了間際に気づいてしまい、結局なにも調整できないまま、WAFの有効性評価がされることになりました。
プレゼンテーションについては予行練習のとおりの実力が出せたので、何の問題もありませんでした。唯一、質問コーナーで「見積書に社会保険が入っているけど、これはウチでもたないといけないの?」と言われたことでしょうか?「現場での傷害保険」とか書いていけばよかったかぁ、と後悔しきりです。
今回の最終審査会でのプレゼン資料を、以下に貼り付けておきます。
ここでは、当日わがチームがプレゼンで行った、圧巻のパフォーマンスを記すことができないのが残念でなりません。
73d4e6b4fe8e8b9acd8a5d9c16951e16最終審査会結果発表
公式結果は、このページの最初の引用のところにリンクを張っていますのでご確認ください。ここでは、当日の講評と得点などをお伝えしたと思います。
まずは、得点。以下が最終審査会での順位です。
順位 | チーム名 | 一次審査 | プレゼン | WAF評価 | 総計 |
1 | 0xDEADBEEF | 24.6 | 7 | 54.4 | 86 |
2 | 0>ping78.75.72.83 | 14.6 | 5.5 | 48 | 68.1 |
3 | 村上製作所 | 12.8 | 4.5 | 48.8 | 66.1 |
4 | 電子遊戯部 | 18.6 | 5 | 42.4 | 66 |
5 | てっててー | 16 | 4.75 | 41.6 | 62.35 |
6 | 創造社Dチーム | 15.8 | 4.75 | 32.8 | 53.35 |
7 | ?team=ecc_1%E5% | 15 | 4.5 | 32.8 | 52.3 |
8 | NKC_KY | 12.2 | 4.75 | 34 | 50.95 |
9 | PITM | 17 | 3.5 | 20 | 40.5 |
10 | 創造社Bチーム | 15.4 | 4.25 | 19.2 | 38.85 |
1位はぶっちぎりの得点です。講評でも、「攻撃・正常通信バランスよく設定されていた。また、一次審査で独自のパラメータを追加していて点数も高かった」とベタボメでした。3位、4位さんは、本当に僅差でした。わがチームは6位。意外と検討したのではないかと自負しております。チームメンバーと「正常通信を意外とブロックして点数が低くなってたから、あのルール外していたらワンチャン3位入賞もあり得たで」と話していました。
実はこのブログを作成する際に、最終審査会でのビデオを見直していましたが、ホンマにあの設定外していたら3位入賞してたなぁ、と感じました。
そして入賞者には豪華景品が!
3位には、kindle paper 32G 、Amazonギフト券 5,000円
2位には、Apple ipad (7gen/128G) 、Amazonギフト券 10,000円
1位には、Microsoft Surface go(RAM8G/HDD128G) 、Amazonギフト券 20,000円、BurpSuit Pro 1年間無料使用
一つずつじゃないですよ!4名全員にです!特に今年からはスポンサーさんが多くなり、昨年以上に豪華になったそうです!去年はちなみにVRセットだったそうな。
参加賞は、32G.USBメモリ、エコバッグ、MBSD2019特製ステッカー、手帳、スマホホルダーでした。
勉強になったこと、まとめ
今回、このようなコンテストに参加させてもらい、本当に勉強になりました。
サーバーの構築、設定。WebサーバやDBサーバ、リバースプロキシサーバ、ネットワークの複雑さ、WAFの機能や設定方法、脆弱性の調査、ログの解析、などなど、授業だけでは理解できなさそうなことを、実技で学べたことで頭にすんなりと入れこむことができました。特に今回は「実技の楽しさ」を知ることができました。今までは「こんなスキルじゃ、シゴト絶対見つからんわ」と思っていましたが、「シゴトやりだしたらオレでもできるんじゃね!?」と思い直すことができました。
時間があれば、自宅でいろいろな「やられサイト」を見てまわり、来年のMBSD2020もぜひ参加したいと思います。こんなコンテストって、他にもあるのかな?ボチボチ就職活動に本腰を入れないといけないので、そんな時間がなくなるのかもしれませんが、就職するまで、全力で勉強していきたいと思います。特に実技!(笑)
この仕事を目指して、ホントに良かった、と思ったのでした。
それは本日も最後までお付き合いいただき、ありがとうございました!