4泊5日の間、面白い話を聞いたり遊んだりしてるだけのすばらしいイベントでした。 受講者側で参加。 講師チューターや運営やスポンサーさん等の、この機会を提供してくれた方々には感謝しています。

その参加記です。 ちょっとあれな話も含めて適当に全部書きます。

セキュリティキャンプとは

IPAのページ https://www.ipa.go.jp/jinzai/camp/2016/zenkoku2016.html を見て。 意識の高い若者に対して高度な教育を実施するイベントらしいです。

事前課題

やればすぐ終わるんでしょ、って言いながらぎりぎりまでやらず。 1ヶ月以上前から出ていた課題もあった気もするが、結局数日前にまとめてやった。

1日目

会場到達

少し早めに出ておいたがそれに甘えて適当な移動をしてたらあまり余裕のない時間に着いた。 名刺交換会がなされていた。面倒だったので名刺を作らなかった人は(直接見た範囲では)私だけだった。

共通講義 特別講義

開会式等があって、その後お話があった。 インターポールの人と警察の人がその仕事や対象について話してくださった。 面白い話なのだがそうは言っても技術の話ではないのでちょっと暇で、内職する訳にもいかずちょっと困った。 初日じゃなかったら寝てた気がするが、寝てたらチューターさんが起こしにきてくれるようなので安心だしありがたいね。 ITの犯罪で強く困ってるのは先進国だけなんだよね、みたいな意見は新鮮だった。

グループワーク

グループワークというから班で何かプログラムを書くんだろうなと素朴に思っていたら、抽象的で非技術的なテーマで発表する感じのやつだった。 正直あまり気乗りがしなかった。

コンビニツアー

受講者の外出は禁止なのでコンビニツアーがある。高校生大学生が監督下で列を成してすぐ近くのコンビニまで行くのはなんだか面白い。 外出禁止は、下は中学生から参加しうるし、そもそも講義の時間が詰まってるから外出してる暇もないしで実際妥当。

tsunさんとpwnをした。 bataさんリストのeasyのひとつに挑んだ。 日付けが変わる少し前まで粘ったが、revが面倒だなあって言い続けただけで終わった。

2日目

起床

6:30に起きて朝食。始まる前は4泊5日軟禁生活とかやばいよねという思いがあったが、このあたりで、部屋は快適だし食事も豪華なのを作ってもらった食べるだけだし最高だと気付く。 そもそも普段の生活からして自主軟禁だった。 私は利用しなかったが、起床失敗してるとチューターさんが部屋まで起こしにきてくれるらしく、これもとてもありがたい。

1-D Dissecting Malware - x86 Windows malware analysis -

マルウェア解析の講義。

事前課題は(おそらく)IDAにちょっと慣れておいてねというもの。 そのために課題提出が要求されたが、どのようなものの提出が期待されているのか分からなかったので最低限のみ適当にした。 提出されたファイルはちゃんと読んで講義で紹介されていたため、申し訳なさがあった。 IDA Freeを使うのだが、私の文字が潰れてしまってとても読みにくい問題があり困っていたところ、 http://tkmr.hatenablog.com/entry/2015/09/18/044359 に解決策があるというのをチューターさんに教えてもらった。

講義は実際のマルウェア(の.idbファイル)を使って解析してみようというもの。 外部からコマンド受けとるマルウェアは 受信 - switch - コマンド中身 みたいな形になってるよ、解析妨害がいろいろ入ってるよ、とかそういうのの演習をした。 解析妨害技術はけっこう好きな感じのものだった。 暗号化/複合化ぽい部分は特有の定数があるのを見れば判明することがあるよ、というのは覚えておきたい。 実際の解析では、マルウェアの実装の詳細よりそれは何ができるのかを知りたがられる、というのも印象的だった。 IDAと完全に和解できた気がする(が、やはりまだobjdump+vimから乗り換える気はない)。

2-D ヒューリスティック検知技術を学ぼう

アンチウイルスソフト等がどのように検知を行っているのかについての講義。

高速にファイルをスキャンするような場面では、速度の面で重たい解析処理はできないので丁寧な解析とは毛色の違うものだが、そういったものがどういう特性を持つのか調べてみようというもの。 バイナリを https://www.virustotal.com/ というサイトに投げれば、種々のアンチウイルスソフトでの診断結果一覧が出るので、それらを誤動作させるようなものを書く演習だった。 マルウェアと誤認されるような無害なプログラムと、実際のマルウェアを起動するがとりあえずはこれらに引っかからないwrapperを書いた。 前者はかなり難しくほとんどできなかったが、後者はhexやbase64にするだけでもパスするようで驚きである(単純にやると展開後の時点を見て検知されるだろうけど)。

参加者のひとりが配布されたランサムウェアを誤操作により実行しようとしてしまっていたが、ウイルスバスターに救われていた。 GUIでぽちぽちしてるとミスるのでCUIを使おう、msys2を入れよう。

キャンプを通してひたすらいろはすが供給されてた。 睡眠と食事をちゃんと取ってるかが調査票という形できっちり確認されてるあたりも含め、過去になにかあったんだろうなあと感じる。

おかしも供給されていた。かなり食べた気がする。眠たみ対策にもなるし良かったです。

CTF

seccampCTF。 開始までは運営側がとてもつらそうにしていたが、開始後は我々がつらかった。 raspberry piのデフォルトのパスワードでsshでLoginするだけの問題があったが、そのような形でsshするのが久しぶりすぎて、user名を指定するのを忘れておりできなかった。 他メンバーもぎりぎりまで分からずで、Login後に見えた他の問題が時間不足で解けず。 XSSするだけ問があったが、 http://requestb.inに飛ばしたため解けず。問題鯖から外部へは出ていかないので、手元でncを建ててそこに飛ばせば解けていた。 換字式暗号するだけ問もあったが、文字列を送ればそれをその表で換字した結果を返してくれることを見落として解けず。 最終は3完。解けるはずのが解けないとつらい。

妨害コンテンツとしてのチューターさんらの成果発表は面白かった。 特に、make now justさんの正規表現エンジンの話はとてもよかった。 彼とは他の時間に正規表現トークをしたりもしている。正規表現の後方参照が正規でないのは有名だけど、先読みや後読みはそうではないらしい。

友利奈緒(s)も見た。

2度目のpwn会。参加者は増えた。

時間がなくて解けなかったrev問を処理。これはすぐ。 not strippedなのを読むと連立方程式が立つので、wolfram alphaにでも投げれば解ける。 これをz3で豪快に処理しようとした人がいたが、自明解のみが出力されて困ってる人がいた(定数項がないため解が無限個存在する)。

もう1問あったrev問に関しては解けず。gdbでmain関数にbreak pointを張っても止まらないので困っていた。 後にチューターさんに聞いたところ、main関数の中身を書き換える処理が先に走っているのだが、これが原因なのではないかということであった。

3日目

3-C 脆弱性検出実践(ファジング技術と脆弱性報告)

ファジング。 競プロではストレステストと言う名で似たことが行われているし、Haskell界隈ではQuickCheckとして行われているようなそれに関する講義。

有償ツールを使って実際に試してみよう、ということであったが、選んだ機器が堅牢であったこともあり座ってるだけ感があった。 朝なので眠たかった。

4-C オンラインゲームアタック&ディフェンスチャレンジ

オンラインゲームにおけるチート対策の講義。 クライアントから来る入力は信用しないようにしようね、というのが主。

A&Dで競技形式でやったが、ゲームとしてはバランスが悪かった。 脆弱性は分かりやすいものが3つあり、内1つは対策しないと攻撃側の勝利が即確定というものだった。

操作を自動化する簡単scriptを書いたが、元々の要求経験値が渋すぎるので非常に効果的というものでもなかった。 gist: https://gist.github.com/kmyk/be5385e37ea6685d67bb110253e4a0e2y/\n/ /してBrowserのconsoleに貼れば動く。 書くだけだし皆すぐ書いてくるものだと思ってたらそうでもなかったのはちょっと意外だった。 delayを挟まず適当にやると上手く動かなかったが、そこを丁寧にやれば強かったかもしれない。

5-D みんなでクールなROPガジェットを探そうぜ

ROPの講義。最も気になっていたやつ。

事前課題はROPするだけだった。bataさんリストのbabyレベル。

講義は単にROPをしてみようというだけで不安感があった。 しかし、それができる人はpolyglotにしてそれもできればgolfしようという最高のものであった。 最高なので後で別に記事を建てて詳しく書く予定なので省略。

講義とは関係ないが、この講義で(高級な)言語処理系を作ってる受講者を見つけたのが記憶に残っている。

企業プレゼン

この枠のは正直なところあまり印象にないので会社名ごと省略。 申し訳ない。

会社やその仕事に関してすごくまじめに話がなされていたはずで、その時はなるほどと言いながら聞いていたはずだし、良い印象は受けた。 しかし(少なくとも私の場合は)講師の人が好き勝手にその人の趣味について楽しそうに話しているだけみたいなのの方が印象に残るので、どうしてもこうなる。

夜 ハニーポット布教会

ジャンクさんによる臨時講義。布教されに行った。

ハニーポットの実装手段にもいろいろあるよねとか、攻撃者の入力をリプレイする機能もあるんだよとかそういうのを聞いた。 22番を開けているだけど日100接続ぐらいあるらしいというのも印象的。 80番だとphpmyadminとかを狙って日1,2接続来るのは見たことがあるが、かなりの差である。 なおこのblogは記述時現在で600記事超ですが日70PVぐらいです。 ハニーポットの中に入ってみたかったがトラブルがあったらしくこれはできなかった。 ハニーポットが集まるすごいページとかハニーポット検出に関する論文とかも見た。 ハニーポット検出とマルウェアの秘解析検出って似てるなあという印象を受けた。

4日目

6,7-F なぜマルウェア解析は自動化できないのか

https://speakerdeck.com/ntddk/nazemaruueajie-xi-hazi-dong-hua-dekinaifalseka

事前課題はCPU emulatorであるunicornを使ってみようというもの。 与えられたサンプルコードの各所の$32$を$64$に書き変えないといけないとかの細かい罠はあるが基本やるだけ。 加えてz3も使ってみようという課題はやらなかったが、 https://twitter.com/RKX1209/status/762291050459213824 という話があった。 後でやりたいなとは思っている(が、実際にやるかは怪しい)。

講義前半は、与えられたマルウェア風のプログラムを改変して、仮想環境内で実行されていたら実行を取り止めるようにしようというもの。 すごく難しいということもなく、ある程度なら、例えばマウスが動いているかやハードディスクの容量はどれくらいか等で判断できてしまうようだった。 講義は面白いはずなのだが、朝なので眠たかった。 おそらくは環境がWindows + Visual Studioだったのも眠みの一因。

講義後半は、同プログラムに関して、DECAFでURL叩く関数やfileを読む関数をhookしてみよう、どのようなコマンドが存在するかをangrで解析してみようというもの。 wchar_tで少し困ったが、hookして引数等を覗くのはやればできた。しかし謎の障害により失敗しててつらそうな人も居た。angrに関してはだめ。かなり不安定らしい。

unicornもz3もDECAFもangrも便利で面白いのでこれから使っていきたい。

講師はntddkさんであったが、twitter上での印象に反して普通のかっこいいお兄さんという感じであり、意外性が高かった。 講義中にntddkの文字列が出てくるまでまったく気付かなかった。

企業プレゼン

リクルートさんのセキュリティ部門の話。

他の受講者と、ここには競技プログラミングで散々いい思いさせて貰ってるし聞く必要性薄いのではと言いながら聞いてた。 普通に業務説明やtwitterで見える競プロerの中の人の雰囲気と整合する話であって、そうだねという感じ。 話していた方がその仕事を楽しんでいる感じがありとても良かった。

5日目

グループワーク 発表

グループワーク自体は、(こう書くと怒られが発生しそうだが)私はこれに対して感じた面白さに相応の労力だけを掛けて終えた。 グループのメンバーには少し申し訳なさがある。

倫理、というテーマを選択した班が多かったが、なんだか建前感があった。 後で講師の人が、倫理そのものが目的じゃあないんだよ、という話を少しされたが、これはその通りだなと思った。 食う物に困ってて攻撃すれば助かるとなれば誰もがすると思うし、そうしないのは金銭や社会の意味で恵まれてるからでしょというのが私の考えです。 下手に遊びのつもりで問題を起こして遊ぶ時間を奪われてるような人に関しては知らんが、子供ってそういうものではという気がする。

ノルマとして与えられたヒアリングに関しては、とてもよかったと思う。 講師や企業の人と話すと知らない話がたくさん出てくるので楽しい。 何らかの目的がないとそもそも会話を発生させられない性質の人間にとって、ノルマという形なのは実はすこしありがたい。 blogに書いてよいかの許可なんて取っていないので諸々を伏せて特に印象に残った話だけ書くと、

  • アンチウイルスソフトのベンダーさんは当然自社製品を社内で利用しているが、自らのコンパイルしたバイナリ等が誤検知で消されてとてもうざい問題は、しかたないので受けいれているとのこと。
  • ルータは伝送処理はhardwareレベルで特殊化して処理してるので速いが、そうでないルータそのものへのパケットには弱いらしい。
  • 影響度の小さい脆弱性を見つけて遊んでる内にやばいやつまで踏んでしまうのはあるっぽいので気を付けたい。

閉会式

賞状みたいなの渡された。おみやげも貰った。 諸々の成績が悪かったのか単に運が悪かったのかは分からないが、おみやげ争奪戦では後に回されて欲しかった本は取られてしまっていた。 でも貰った本も読んでみたらそこそこ面白いっぽい。

飲酒トラック

ひとりで直帰はもったいなかったのでちひろさんらの飲酒トラックに参加した。 運営のお姉さんとのワンチャン太郎事案とかの全体的にひどい話をしていた。 楽しかったよ。

帰宅

荷物が多くてつらい。ホテルから郵送してもらうのを面倒がってさぼったので自業自得感があった。

プログラミング

諸々の場面からなんとなく感じ取ったのだが、セキュリティとプログラミングは明確に別のものと認識されているっぽい。 セキュリティって(分かりにくいが悪用できる)バグを潰すことでしょ、というのを素朴な直感として持っていたので、これは情報量が大きい。

取材

何度か受けたが、参加理由は 楽しそうだったから だし、言える感想も主に 楽しい しかなくて語彙力がない人っぽかった。

講義

取れなかったが面白そうな講義は多かった。 わざわざ受けなくてもひとりで後から(twitter上で講師やチューターの人に聞きながら)やるという手があったのではという感じもすこしあるし、物理的な機材を要するかどうかを基準に講義を選択してもよかったのではという感じもある。実は環境構築が面倒なweb系も取っておくべきだった。 解析にしても 6,7-F なぜマルウェア解析は自動化できないのか の裏側であった 6-D リバースエンジニアリングを自動化せよ はこれも受けたかったし、さすがにこれは調整してくれよと思っていた。 来年もう1度受講したい。

scryptos

193sプロにscryptosに勧誘された。 強い人が周囲に居ると学習効率上がるしとてもありがたい。 私の周辺にチームっぽい集まりができているが、これは潰さずでいい感じに掛け持ちする方針でいきます。

CTF

CTFはその問題の性質により、(競技プログラミングやcode golfと比して)始めるのが難しい、ひとりでやってるとモチベーションが続きにくいという性質がある。 これを解決するためにここ数ヶ月で適当にチームっぽいものを作ったのですが、このチームは誰でもwelcomeなので、参加者でなくとも言ってくれれば受け入れます。 このチームに関しては、グループワークの発表でも適当に勧誘をしたりした。

倫理

開催目的などにも、

技術面のみならずモラル面、セキュリティ意識、職業意識、自立的な学習意識等の向上を図り、

という一節があるなど、けっこう倫理がうるさく言われてた。 たいへんなんだなあという印象。 私個人としては、攻撃側に回って捕まって遊べなくなるリスクを犯すより、防御側で社会正義の名の下に遊ぶ方が合理的だと思います。

就職

前々から考えていることである、セキュリティを仕事にしたいか/するべきかは、結局よく分からなかった。 少なくとも言えるのは、やはりセキュリティに付随する技術も面白いということです。

まとめ

楽しかった。まだ参加してない人は、楽しいのでぜひ来年応募しような。