SECCON Beginners 2018 広島に行きました
SECCON Beginners 2018 広島に行きました
表題の通りです、SECCON Beginners 2018 広島に行ってきました。
SECCONというのは有名な日本のセキュリティコンテスト(とその運営組織)で、CTF(Capture the Flag)の大会を主催したり(→SECCON CTF)、その入門者向け講習会を開催したり(→CTF4b)しています。
CTF、セキュリティ分野とは何か?というのについては前回CTFの大会に出たときの記事が参考になる(かもしれないしならないかもしれない)と思うので載せておきます。
今回はその入門者向け講習会SECCON Beginners(CTF for Beginners)に参加してきたよという話を書いていきます。
移動~開場
広島ということで、人生初の路面電車でした。
路面電車、どこまで行っても一律180円なのが最高でしたね。お財布に優しい。
乗ってる感じとか速度とか止まる頻度とかはバスっぽいのに中はちゃんと電車だし連結部分が特徴的でした。
きゃっきゃっ pic.twitter.com/17wbU55Oky
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
新幹線と路面電車を乗り継ぎ無事会場着。
おへー pic.twitter.com/tBsGdcvYiz
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
なんかいろいろもらいました。
ぼくの女装が完璧すぎてCTF for GIRLS🔐のステッカーをいただいてしまった
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
講義、開始―――
講義は運営スタッフの挨拶から始まり、はじめにセキュリティの勉強をする上での倫理事項などなどのお話がありました。
「若手セキュリティエンジニアが講師を務める」などは聞いていましたがまさか現役の院生でDEF CONに出てるとかの人が来るとか聞いてないし萎縮しまくりました。プロ怖いです。
倫理とかの話で印象的だったのは「セキュリティエンジニアを止めるもの」として技術者としての挟持とかそういうものを挙げられていたことでした。
法律とかはそれはそう…という感じがしますが、「今まで教えてくれた人に迷惑を掛けるような技術の使い方はしたくない」といったことを話されていたのをよく覚えています。かっこいいなあという気持ちになりました。
公開鍵暗号をやる=数学をやる
1つ目の講義はcryptoで、ctf4bでは初めて扱われる分野ということでした。
cryptoというのは暗号技術分野のことですが、今日の講義では主にRSA暗号(公開鍵暗号)の基礎についてを扱いました。
RSA暗号は非常に大きな桁の素因数分解は現実的に困難であるという性質を利用した暗号で、現実世界でもよく使われている暗号化方式の一つです。サマーウォーズに出てきたのがこれだったかと思います。
といっても我々は数学オリンピック日本代表に惜しくも選ばれなかった天才ではないので、扱うのはその理論と簡単な実例のみです。
まず、RSA暗号の仕組みを理解し実装を追うには数学のmodの知識が必要ということで、軽くmodのおさらいから講義は始まります。
3歳幼女なので生まれて初めてmodの計算をしました
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
ぼく「こんなん高専数学でやってない」
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
講義を聞きながら必死にmodなどをGoogle検索しmodを理解したところでだいぶ分かりが生えて楽しくなってきました。
拡張ユークリッドの互除法を使って逆元を取る~とか、素数2つを組み合わせて良い感じにやるとRSAの公開鍵と秘密鍵が作れる~とか、そういうことをやりました。
分かってないだろってツッコミが飛んできそうですが、実際拡張ユークリッドの互除法で逆元を取るところで心が折れて死にました。
講義には最後までしがみついていきましたが普通に数学の知識が浅すぎてしんどかったです。昼休みに頑張って復習しました。
この理解の浅さが数時間後のCTF演習で命取りとなることを、ぼくはまだ知らなかった―――。
ウェッブ(わかった)
昼休みを挟み次の講義はweb問です。
XSS(クロスサイトスクリプティング)についての講義でした。
XSSというのはwebページへの攻撃手段の一つで、フォームにhtmlタグのエスケープ処理を行っていない場合、任意のスクリプトを実行できてしまうという脆弱性を利用したものです。
演習ではまずテストページに好きなhtmlタグを入力し動作を確かめることをしました。
個人的には、<marquee>
タグを入力したときのフォームが流れていく挙動がお気に入りです。死ぬほど鬱陶しいしユーザビリティ悪いことこの上ないと思います。
<a>
タグを入力したときのフォームごとリンクになってテキスト入力ができなくなったのも面白かったです。
XSSの原理を理解したところで、実際にどのように攻撃に利用するかの手法を学びました。
cookieやページの情報などを引っ付けてHTTPリクエストを記録するサーバに投げるようにスクリプトを読ませるとサーバからそれらの本来第三者には知り得ない情報を見れてしまう、というようなのを実習を交えて体験しました。
最近はweb開発をやっていてブラウザのセッション情報が~とかなんとかを考えることが多かったですが、フレームワーク任せだとこのような箇所はフレームワークが勝手にやってくれてしまうので教わる機会がなければ深く知ることもなかったかもしれません。
「不正ログイン防止のためにパスワードを強固なものにしろ」などはよく聞く話ですが、IDとパスワードを用いたもの以外に不正ログインの手段があるというのは考えたことがなかったので良い勉強になりました。
Reversingに愛情が生えた話
実は今日の本命でした。
ハリネズミ本を開くと真っ先に立ち向かうことになるReversing、もといBinaryです。
アセンブリとかレジスタとか動的解析とかリンカとか低めなレイヤの専門用語でぶん殴ってくる分野です。RevとPwnはCTFの花形~とか言われたりするのをよく聞きますが、正直ぼくはRevにめちゃくちゃ苦手意識を持っていました。
そんなぼくがRevに興味を持つきっかけとなったのがこの動画シリーズです。
割と分かりやすくRevとかPwnについてを解説している動画なのですが、これを見てやっとわかったようなわからないような、という感じ。
でもなんとなく分かったから自分で解いてみたい…みたいなところでどうすればいいかわかんなくて死んでました。
そこでRevだけでも聞きたい!とctf4bに応募したわけですが、結論から言うと、
アセンブリが読めるようになりました(拍手喝采)。
まあアセンブリ自体は学校の授業でも扱ったんですが、忘れてるしCTFに使えるほどの知識は習ってないしで一方的に苦手意識があったというわけです。
講義は猛スピードで進んでいきました(60分しかないのでそれはそう)。
ハンズオン形式で4ステップに分けてelfファイルを逆アセンブルして読み解く、という内容で、初めは基本的な代入操作、次に演算、次にスタック、次にループと関数…といった感じです。
いや本当にめちゃくちゃ分かりが生えました。講師のしふくろさん(@shift_crops)に圧倒的感謝です。すごい。
結局この後のCTF演習では真っ先にRev問を解くことになります。
CTF演習
長くなりましたがこれが最後で、今日教わった内容を使ってCTFの問題に挑戦しました。
実戦形式で前のスクリーンには順位表が映し出され、正答者が出る度に開場のアラームが鳴るなどという豪華仕様でした。テンション上がるね~
各分野には100点~300点の点数が振られた問題が3~4問用意されており、まずはwarm-upの100点問題をシュッシュッと解いていきます。ここまでは簡単!
そして200点問題に移ったぼく
「なんもわからん」
とにかく何か解かないとやばい、ランキングどんどん落ちちゃうやばい、とか焦りながらRev問を眺めます。
objdump
でIntel記法のアセンブリに逆アセンブルする方法を調べて後はひたすらアセンブリの必要そうなところを読みます。
Rev問はなんかこんな感じでやってたら3問目まで解けました。4問目はXOR暗号だなってとこまでわかったのに何故かそこで止めちゃいました。クリア0人だったので勿体なかったです。通してたらヒーローでした。
Webはなんか良い感じに習ったもの使えるの探してたら通りました。3問目通せなかったんですがよく考えたらクソ簡単だったので勿体なかったです。
Cryptoが1番しんどかった…素因数分解の結果が出せたときはめっちゃ嬉しかったですね。RSA暗号ちゃんと理解してれば200点のSimpleRSA通せてたと思うと悔しい気持ちになります。
Miscですがこれはマジで100問計算するべきでした。簡単な計算100問すれば200点とか完全にボーナス問題だし最後諦めにかかってた15分でこれ通してれば順位がもう2つぐらい上がっていた可能性があり本当に悔しい。
そんなこんなで(雑)最終成績は以下の通りでした。
CTF演習1000点で7位でした思ったより成績良かったのでうれしいうれしい #ctf4b #seccon
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
Calc解けばよかったなあって思いました(小並) #ctf4b #seccon pic.twitter.com/XglxFNifx5
— はすみ@白黒×赤の名刺の人 (@hsm_hx) September 1, 2018
1000ptで7位、割と嬉しかったですね(クソ雑魚なのでどうにかスクリーンの順位表(10位ぐらいまで映されてた)に滑り込みたかった)。
ただまあ上で述べた通りWebの200点とMiscの200点は冷静にやれば確実に通せていたはずで、1位が1700pt、2位が1400ptだったので表彰式出れたじゃん…!という気持ちです。悔しい。
とは言えCTFガチ初心者なんもわからんのぼくにしてはよく頑張ったし自信もついたかなという結果になりました。
ctf4bがおわった
最後にアンケートを取ったり口頭Write-up大会みたいなものをして講義は終了。
Revの100点問題の解説で当てられたのでキョドりました。
あと運営スタッフさんがアンケートのQRコードを<marquee>
で動かしてたのが面白かった。
講義終了後には懇親会があり、たくさんのプロたちに囲まれてお話ができて本当に楽しかったです!モチベーションが爆上がりしました。ぼくもこんな風になりたい!と思いました。
名刺交換してくれたりお話してくれたりしたスタッフさん、参加者さん、本当にありがとうございました!
本当に18年の人生の中でもトップクラスに密度の濃い1日になったと思います。
参加者の中では自分がかなり年少者の部類で(これが意外だった)、いろいろな経験をしてこられた方々と一緒に勉強をして関わりを持てたのは自分にとっても本当に大きな糧になると思っています。
このような場を提供してくださった運営サイドのみなさん(これが本当に無料のイベントでいいのだろうか?)、親切にしてくださった参加者さん、施設をお貸しいただいた広島市立大学様、本当にありがとうございました。
自分にはまだ可能性がたくさんあることに気付けた1日でした。これからもがんばります!