セキュリティ・キャンプ2017全国大会に参加したという話

はじめに

こんにちは。
morimolymolyです。
セキュリティ・キャンプに参加したのでその感想文を投下します。
技術的な内容というよりかはポエム寄りです。

セキュリティ・キャンプ全国大会とは?

IPAが実施するセキュリティに関する興味をもつ若者(22歳以下)を対象とした合宿のようなものです。
キャンプとは名ばかりで一日一回の任意参加のコンビニへの買い出し以外、ホテルの中に監禁されセキュリティに関する様々な分野の講義を受けさせられます。
開講される講義やおはなしは業界の最前線に立つハッカーによるもので、内容は高度かつ貴重なものです。
交通費、宿泊費、授業代、教科書代、ボルヴィック&アクエリアス代、ハンドスピナー代はすべて税金や企業からの協賛金から賄われ、参加者は完全無料で圧倒的成長の機会を得ることができます。

参加するまで

税金でタダ飯を喰らい、高度な授業を受けるためには応募課題というものを提出する必要があります。
今年は参加者枠が大幅に増え、82人となったものの応募者数は310人とそこそこな倍率だったようです。これまではセキュキャン実施期間と大学の期末試験が被り、参加できなかったのですが、今年はなぜかいい感じに外れていたので参加を決意しました。応募課題はポエム問題とゴリゴリ課題問題に分かれていて僕はどっちかと言えばポエム問題が苦手(というより文章力がない)なのでかなり苦戦しました。結局、先延ばしに先延ばしを重ね、応募用紙に着手し始めたのは〆切二日前でした。応募課題のポエムはかなりイキリまくっていて恥ずかしいので公開することはありませんが、まあイキったもの勝ちという情報を耳にしたので、どんなに小さなものでも胸を張って書けばいいと思います。文章量とか高度な内容というよりも熱意が見られたのかなと言う印象でした。
ゴリゴリ課題問題に関してはカーネルエクスプロイトとかシステムコールのトレースなどそこそこ高度な内容でしたが、おそらく完答する必要はなく(というかexploit成功してない)、これもポエム同様、どんなに小さな気づきでも書きまくればいいと思います。
そんなこんなで錬成したポエムが認められ参加することになりました。

参加決定から当日までの過ごし方

かなりおそ松でした。試験とレポートでかなり苦しみ、抑うつ感がすごくて事前課題をすすめるのに苦労しました。とはいえ指定されたことはそこそこにこなして当日までにいろいろと仕上げました。(なんか抽象的♥)事前課題は講義当日の質に大きく関係しているので、頑張って進めましょう。

キャンプ一日目

キャンプ当日は早起きして、終わっていない事前課題を進めたりTwitterを眺めたり荷物をパックしたりしてました。現地集合なので各自会場へ向かう必要があるのですが、家にめちゃくちゃ近かったし、電車が苦手なのでタクシーで向かいました。
会場につき受付で名前を言うと、交通費だの名札だのをもらい開会式場まで案内されました。名前認証のみなので頑張れば開会式までよくわからんやつが紛れ込むとかそういうことができそうでした。
会場でははやくも名刺交換がちらほらと行われていたのですが、人見知りかつTwitterで絡みをあまりしていなかったのでぼーっとしてました。Twitterは大事ですね。でも昼食の後に名刺交換大会2017(非公式かつ自然発生)が開催され、いろいろと名刺交換ができました。参加者の中には会ったことがある人もいたのですが、顔を忘れているなど粗相をしてしまいました。
以下からは当日の講義をだらっと振り返ります。

セキュリティ基礎

Brain Storming時間。AIにセキュリティの仕事が奪われるか?ということを話し合いました。AI流行ってるねぇ。

特別講義1

海外で活躍するセキュリティエンジニアについてのお話でした。かなり衝撃的な内容もあり初めからとんでもない講義でした。

特別講義2

フォレンジックのお話。こんなキャリアパスもあるのかと参考になりました。
というかココらへんの話ってどこまで公開可能なんでしょうか。

チューター紹介

ぶっ飛び三人組の紹介。異次元なレベルを見せつけられました。

あとはグループワークとかいうやつをやって寝ました。

キャンプ二日目

初日からかなり疲れていたのですが、僕の大本命のカーネルエクスプロイトの講義があったのでモンスターエナジーをがぶ飲みして起床。

D1.Linuxカーネルを理解して学ぶ脆弱性入門

malloc動画などで有名なガチャピン先生がやさしくカーネルエクスプロイト101をやってくれました。malloc動画は僕が肺炎で苦しんでいるときに視聴して元気をもらっていたので、その先生が目の前にいたのでかなり感動しました。(全く関係ねえな) 当日の講義は大きく3つのパートに別れていました.
1つ目では下記の記事を丁寧に振り返るのとカーネルソースリーディングやデバッグtipsを教わりました。
rkx1209.hatenablog.com
最初から殺されると思いきやかなり丁寧で良かったです。
2つ目はCopy-On-Writeの説明とそれに起因するDirtyCow(CVE-2016-5195)という脆弱性でした。
カーネルエクスプロイトの不安定さに注目し、PoCコードに継続的に侵入できるような改変を加えるという実践的な演習を行いました。
僕は考えうる限りもっとも汚いハックでrootを取りました。楽しかったです。
3つ目は応募課題のCVE-2016-0728のフォローでした。
rkx1209.hatenablog.com
すごく丁寧な説明でした。うん。
全体的にすごく丁寧な講義だったのですが、続くD2-3では参加者全員がころすけされたみたいでした。
怖いですね。(僕もころされたかった!!!!!人気の講義なので抽選から外れました :( )

B2.組込みLinuxクロス開発スタートアップ

ncurses,busybox,bashをarm組み込み向けにビルドして最小構成の環境を構築しようという講義でした。
各ステップに必ず一つビルドエラーになる穴があり(意図的だったのだろうか)、それに対処しつつビルドしまくりました。
結局、苦しむこと講義終了3分前くらいに環境構築が終了し、RaspberryPi3にぶち込みブートさせることに成功しました。
https://twitter.com/morimolymoly/status/897377377235247104
僕以外にブートまでいった参加者がおらず、成功したときは思わず応援してくれたカメラマンさんと握手しました。
ブートが成功して嬉し恥ずかしとなるのはおそらく最初で最後の経験だろうとおもいます。

C3.Vulsを用いた脆弱性ハンドリングとハッカソン

エモいなあ!!
OSSの楽しさ、重要性がわかる大変良い講義でした。エンジニアとしての最高の生き方みたいなものもみることができました。
ハッカソンではVulsを未対応OSに対応させるには?といったことを行いました。対応させたいOSに適当にFedoraを挙げたらもう一人ガチのFedora推しの参加者とチームを組むことになったのですが、実はUbuntuくらいしかまともに触ったことない僕はすごく迷惑をかけてしまいました。。。とはいえ脆弱性情報はそこそこおっかけているつもりですので、そこらへんでふわっとちょっとだけ力になれたかもしれなかったような気がしないでもなかったです。

キャンプ3日目

このへんから疲れがたまり始めてイライラしてました。

B4.Embedded System Reverse Engineering 101

これはっきりいって最高の講義でした。
https://twitter.com/morimolymoly/status/897619905541005313
講義内容は組み込みデバイスリバースエンジニアリングするための基礎知識を触れたあと、実際に24lc64というROMとBusPirateを使いI2cでお話しました。
石のなかに文字列を書き込んだり、読み出したりする経験は初めてでワクワクが止まりませんでした。
次に実際のルーターからファームウェアを吸い出すという実習を行いました。
基盤からROMを特定して、石をとりだし、データシートから得られた情報をもとに石からファームをぶっこぬきました。
https://twitter.com/morimolymoly/status/897657474454609921
ハードウェアのリバエンはIoTなどのハッキングにおいてきわめて重要なアプローチの一つだと思うので大変いい経験ができました。
この文章を書き上げたらbuspirateとかハックに必要な一式をアキバに買い出しに行こうと思います。
https://twitter.com/morimolymoly/status/899164077804605440
書き上げる前にアキバに行って買ってきました。オタクはすぐアキバに行く。。。牛カツ食べてNewGame!の青葉のコラボドリンクを飲んで笑顔になりました。

B5.信じて送り出した家庭用ルータがNetBSDにドハマリしてloginプロンプト を返してくるようになるわけがない

ラズパイにNetBSDをビルドしてぶち込むという実習を行いました。
NetBSDの中の人の講義ということですごく濃いお話が聞けました。あらゆるデバイスをハックしてNetBSDをぶち込みまくる体験記など聞いててものすごくワクワクしました。B4のハードウェアのハックと組み合わせればいろんなデバイス上にNetBSDを走らせることができるなあとかおもって鼻息が荒くなりました。

BoF

これ最初バッファーオーバーフローかと思いました。
実際は砕けた感じにお話をきくというもので、僕は海外のDEFCONとかHITCONのハッキングカンファレンス事情を聞きに行きました。
行きたいぞDEFCON。まあ手始めに国内のカンファとかは積極的に行こうと思いました。

キャンプ4日目

疲れマックス状態でゾンビになりつつありました。

D6. LSMから見た Linux カーネルのセキュリティ

LSMを使用したAKARIとclamavを合体させてオンアクセススキャンを実装しました。
実際に動くとかなり感動しました。
事前課題が重かったのですがきちんとやれば講義自体にはそこそこついてこれるので楽しかったです。(cybozuのスレに全く参加できなかったのは悲しい)

A7.ファジング実習

前半はPeachで某バイナリエディタとかメモ帳とかルーターをファジングしました。
怪しい挙動がみれてすごく気になったのですが、exploitというわけには行きませんでした。
後半はAFLを用いてバイナリに対してファジングしました。
僕はr0pbaby(DEF CON Qualifier 2015)というpwn問題のバイナリにたいして行いました。
ripがいい感じにとれたので、ripが取れる入力を試しに書き換えるとdeadbeefまで飛ばせたりしました。
あとはいい感じにropしてやるだけで問題解けますね。
実戦投入するのはちょっと悩むけど魅力的なアプローチだと思いました。
あとカーネルにたいするファジングみたいのも共有されていたので試してみようかなと思いました。
ちなみに配布されていたモバイルルーターですが、キャンプ中かなり役に立ちました。
https://twitter.com/morimolymoly/status/897085040089194496
かなり重宝したルーターも何故か当初の予定と反して講義終了後に回収という流れになり、連れて行かれました。欠品だらけでほぼ本体のみという状況だったのですがはたして。。。

キャンプ5日目

開放感からか夜更かしをしてしまい、脳みそは遂に危険な領域へと突入する。

グループワーク

メンバーとあまり馬が合わず話し合いがうまく行かなかった気がしました。正直かなり苦痛でした。一応役割としてはヒアリング係をしていたのですが、ヒアリングを名目に講師や企業の方、チューターに踏み入った質問ができたので総合的には良かったのかなあと思いました。

あとは強い方々の成果報告を聞き、校長先生のお話を聞き、ハンドスピナーを回しながら目を回していたらキャンプが終わっていました。

さいごに

もともと興味があって手を動かしていたものから、興味はあったけど重い腰が上がらなかったものまで幅広く触ることができました。たった5日のキャンプですので大きく成長したとは言えませんが、成長するきっかけは間違いなくつかむことができたと思います。心残りがあるとすれば、もっとガンガン色んな人に話しかけて人間関係を構築できたらより良かったなあと思います。まあもともと人見知りがある方なので対して深刻に悩んでいるわけではありませんが、もうちょっと慣らしていく必要があると感じました。あと誰の言葉か忘れてしまったのですが、「情報が欲しければ情報を発信しろ」という言葉がかなり突き刺さりました。これからは小さなことでもなるべくブログなどを通じて発信していこうと思います。あとLTとかそういうのでやっていることを発信できるようにしていきたいです。

ということで情報を発信するのでだれか在宅バイト情報とか楽しいバイト情報とかください。真面目に働きます。(ワンワン)