なんとかくんの雑記

備忘録だったり、気が向いたりしたら書くかもしれない。基本雑感

SECCON Beginners 2018 広島に参加してきました。

  • そもそも

SECCON Beginners 2018というのはCTF(Capture The Flag)の初心者向け講座で、CTFとはフラグと呼ばれる文字列を色々なwebやプログラムに紛れ込ませてあり、それをどーにかこーにかして探し出そう。と言う感じのものです。


というわけで(?)、開催から数日経ってしまってから諸事情により書くことにしました。(どーちょーあつりょく?)

 

  • 会場で

どうやら県外勢が多数おられたようで、皆さんブログには移動も含めて書かれていますが、僕は通常の移動圏内なのでこれまた割愛。

 

会場には少々早めに着き、受付を済ますと皆さんパソコンを出していくわけですが、ぱっと見Win勢が大半でしたね。そしてMac勢がちらほら。その他の僕が一人ですかね。(Ubuntu勢は勢としてカウントしないでしょ)
パソコン事情はそんな感じで、年齢層的にはこれまたざっくりとした感想ですが、大学生前後っぽいのが大半で年配の方が数名程度でした。

 

 

同じ大学の先輩も参加すると言うのは事前情報で把握してました。(あのクッソ目立つカバンを持っていた人です。)

 

  • 講義開始

実際に講義をしてくれる人たちの紹介で、ぼんやりと聞いてたのですが、東京大学とか筑波大学とか東京農工大学とかいう、僕のメンタルにダイレクトアタックしてくるネームバリューの院生の方々でした。それに加えてDEFCONにも参加されているとのことで……ただただすごい人たちでした。

 

最初はCTFをやるに当たって心構え的なものの話でした。当たり前といえばそうですが、CTFはつまるところハッキングやクラッキングの腕を競う側面があるので、その技術はそのまま現実世界で通用する物ですから取扱は十二分に注意してもしたり無いくらいのものです。法律があるからやらない、ではなく、教えてくれた人たちに迷惑をかけないために、というスタンスには非常にくるものがありました。

 

  • 1つめーCryptoの講義

最初の講義はCrypto、つまり暗号の講義でした。暗号とは言ってもジュリアスシーザー暗号や、転置式暗号、置換式暗号、といった人間が処理するレベルのものではなく、主に公開式鍵暗号方式に関する説明でした。(ちなみにどうでもいい情報ですが、ジュリアスシーザー暗号をパソコンで解析するという分野もあることはあります。情報系の分野ではないですが)

 

公開式鍵暗号というのは、2つの鍵のうち片方は掛ける専用、片方は開ける専用として、どちらかを公開するという仕組みです。言うなれば南京錠と鍵の組み合わせのようなものです。(これまた余談情報ですが、掛ける専用を公開するだろ常考、といわれそうですが実はこの技術を応用した使い方として、電子署名があります。これは鍵をかけた署名を受け取った人が鍵を開けることで、中身が途中で改ざんできない、つまり本人であるという風に使われます(合ってるよな……?))
CTFでは一般的なRSA暗号というものの仕組みが問題になることが多いので、今回の講義でもRSAの話でした。と言っても、中身はわりと難解な数学なのですべてをすると時間がいくらあっても足らん、ということになるので問題を解くのに必要な情報だけインプットしました。

 

RSAの解説はググれば死ぬほどわかりやすいのが死ぬほど出てくるので、これまた割愛しますが、キーポイントはmod計算、いわゆる余りのある割り算のことです。この余りが重要になります。(ちなみに余談情報、わりとこの業界余り計算は結構重要な要素で、いろんな技術に使われています。バーコードやセンター試験の受験番号のチェックディジット、誤り訂正符号などは余り計算の賜物です。)実際に手計算すると面倒ですが、せっかく目の前にパソコンがあるのですから式を食わせてしまえばいいので、さほど計算は面倒ではないのですが、いかんせん僕は高校数学が苦手な人のなので、講義中はわかってるフリをしながらググりまくりでした。計算手法自体はパソコンにまかせてばどうにかいい感じに出てくるので、気にしないことにしました。

 

  • 昼休み

お昼は、会場に来る前に寄ったコンビニのおにぎりです。というか、基本的に外食するのがめんどいとか思っちゃうタイプの人間なので(ひきこもりとも言う)

あと、皆さん結構ツイッターで繋がっているようで、挨拶して回っていたりする人もちらほら、まあ僕はツイッターは最近始めたばかりなので、誰も知り合いはいませんでしたけどね

 

  • 2つめーWEBの講義

お昼をはさんで午後の講義はWEB問のXSSの講義でした。こちらは僕にとって完全に初耳の単語でした。
XSSというのは、平たく言えば、予想外のことをぶっこんだら、バグるよね?それ使って情報を抜こうぜ。っていうことです。もう少し言うと、HTMLのタグ<>←これ、を本来ならばエスケープ処理をするべきところを、その処理を怠ったが故に、タグをフォームに投げることができてしまう、さらにそこに攻撃用スクリプとを埋め込むことで、相手の情報を抜き取るというもの。

実際に講義では、運営さんが用意したテスト用のサーバーのフォームに、いろんなHTMLのタグを投げてあそんでみました。<maequee>のタグは横にスクロールするものなんですが、↓これですね。

 

 

まあ読みづらいったらありゃしない。 

 

(正直言って、HTMLのタグ知識が皆無に等しい僕は、みんながもっとおもろしろいタグを投げるのを指を咥えて見てました。あびゃー。タグぐらい理解しとけよって話)

 

でもって、それだけだと自分の画面だけが荒ぶるだけなので、相手にとっては痛くも痒くもないどころか、知らんがなということなので、実際に攻撃するにはどうするかという話が次にきました。簡単な説明をすると、JSで組まれた攻撃用スクリプトを<script>のタグをフォームに突っ込むと、cookie情報を外部サーバーに送信してくれるので、それを元手になりすましをしたりするわけです。こちらも詳しい説明がネットにはあるので割愛。

 

  • 3つめーReversing

プログラムを解析して中身を読んで、答えを考えると言う形式のものです。

 

ただ、これは結構好き嫌いが激しくわかれるもので、僕は割と好きな方なんですが。というのも、父親とC言語のプログラムの話をしてたときに、「コンパイルできないのはエラーでわかるけど、中身が正しく動いてるかどうかはアセンブリを読むしか無い」という、理論をぶちかましてくれたので、わりと興味はありました。(ただ、今考えるとその理論は標準入出力がないやつ用なんじゃないかな?とは思うんですけどね。父は組み込み系のプログラムを書いてた人なので、一般的な標準入出力を使わないからこそアセンブリを読むしか無いということなのでは?と思ったり)

 

ここで、事前に用意しておけと言われたVirutalBoxのkalilinuxが生きてくるわけなんですが、結局linuxの実行ファイルを実行できる環境がほしいだけだったので、面倒になって実機環境で動かしました()ほんとは良くない(というのも、実際の解析では何が起こるかわからないソフトを不用意に実機で動かしてしまうと、最悪データ消滅、起動しない、なんてことになるので、仮想環境が望ましいのですが、僕のノーパソはメモリが貧弱過ぎるしGnome3の演算にもパワーを取られたのでやめました。)

 

  • 最終講ーCTF演習

このイベントの最大の目玉。実際にCTFを講義に参加したローカルの人たちでやろう。ということで、目の前にはランキングがドーンっと出ており、正解者が出るとパトランプが光ってアラームがなるという豪華仕様(ていうか、そのパトランプどっかのプレゼント企画で見たことある。ていうかそれ普通に売ってるものなのか?とかおもったけど)更に、本番さながらの妨害コンテンツもご用意。

というわけで、いざ尋常にスタート。

まあ、どんな試験でも、テストでもそうですが、解けるところから解く、これが基本です。
まずはそれぞれのwram-upをぱぱっとクリアした……かった。orz Reversingの一番目が結局解けず……
まあ、それはそれとして、ウィンドウに残して置きつつ、別の問題へ。
CryptoのFactoring は休憩時間に突っ込んでおいたsagemathに食わせておしまい。(使い方がわからなくてCTF中にググってたけど)、同じくSimpleRSAも示されたデータをもとにsagemathで鍵を生成して、pycryptoのbytes_to_longに投げ込んで終了。(とは言ってるけど、実際いくつか手順ミスったり、コピペ失敗したり色々あったのでこれだけでもかなり時間食ってる)
Web問題はmake alert!は講義で習ったのをそのままやれば良く、続くContact Revengeも同じく講義で使ったものをそのまま転用。しかしContact Re-Revengeは解けず、おそらくなにかしらの偽装をしてスクリプとを読み込ませたら良かったのだろうけど、HTMLとJSでの知識不足で全く思いつかないで、これまたウィンドウを残しつつ、次の問題へ

と、この時点で1時間以上経過しており、みんなのスコアも止まりかけてきたところで、もう僕が解けそうな問題がなくなり、いろんな問題を覗いては、うーんと首をかしげるということばかり。さらにこの少し前から妨害コンテンツとしてスーモの曲が流れたり、実際のCTFで流れたコンテンツが流れたりと、会場はかなりカオスに。僕は、あたまが煮詰まって、周囲を無視し続けたのであんまり影響はなかったのですが……時々笑いを取りに来るコンテンツにはクスッとしながら画面とにらめっこ状態。途中calcに手をつけようかと考えたけど、CTF for Beginners2018でてけいさんエクストリームなるものがあり、それはスクリプとを組まなければならなかったことを思い出し、スクリプとを書こうかとも考えたんですが、そんな技術はなかった。orz

最後の最後残り1分で、RevのReviewが解け、残り30秒のところでフラグを叩き込んで、締めとなりました。

 

結果はこちら

 

カバンの先輩には勝ったのでよし

 

  • その後ーゆるい答え合わせと懇親会

最後まで解けなかったRevの一問目を勇気あるどなたかが聞いており、これまた頭の良さそうスーパーな人がstrignsコマンド使えばよい、とさらっと答えており僕は一人で「ああああああああ」ってなったりしてました。orz ホンマになんで気づかんかったんや……

 

で、懇親会は、参加してたけど参加してません()居ただけです。
というか、おなじ大学の先輩sと内輪で話しつつ、お菓子たべてただけです。ほんとに。途中、運営STAFFの東大氏から名刺をもらって、名刺なんて作ったことすら無いわ、とか思ったり、Binaryを大人力で解いた先生とバイナリの話をちょろっとしてたら終わりました。

 

  • 終わってからー

なぜか、全てが終わってからわざわざ県外から参加していた立派なお二人と、うちの面倒な先輩sが夕飯を食べに行くことになり、便乗する形で僕も夕飯に参加しました。お好み焼きなのか広島焼きなのか、もともと愛知県民ですからよくわからないけど、まあどっちでもいっか。

 

  • 雑感ー

たぶん、人生で初の技術系のイベントに参加してみて、いろいろ得るものがありました。これからどこかの何かに出没していきたいとは思ってます。とりあえず、次のCTFは先輩がやる気出してるので、僕も参加しようかなと思います。

 

あと名刺作ったほうがよいと思った。

 

 

 

以上

 

参加者並びに関係各所の皆さんこれからも良いエンジニアライフを