セキュリティキャンプ全国大会に参加した
ptr-yudaiのブログもあわせてどうぞ
セキュリティキャンプ1日目
開会です。いろんな説明を受けた後、「セキュリティ基礎」がありました。
セキュリティ基礎では、今後セキュリティ業界でどんな仕事がAIに取って代わられるだろうということをグループディスカッションしました。
その後、今度は特別講義として、2つの講義がありました。一つはJPCERTの人の話で、その人がどんな仕事をしているかという話なのですが、なんでこんなにおもしろい話ができるんだというほど面白く話をしてくれました。特に森見登美彦の太陽の塔を引用したところは最高でした(これは本質じゃないけど)。
続いて、チュータの人の紹介を兼ねた発表がありました。すごかった。
そこまでして、夕飯を食べ、それからグループワークでした。グループワークでは、数日かけて、8人程度で、何か問題を解決する姿勢を見せていこうというようなものです。いろんな人に話を聞き、どんなことを自分たちがすればいいのかを考えて、最終日に発表することになります。
Day2
Day2では、Dの解析トラック(カーネルのエクスプロイトまわり)の授業を受講しました。講師は、がちゃぴん先生とかるくす先生です。D1ががちゃぴん先生のカーネルエクスプロイト入門編で、D2,3がるくす先生による実践編のような位置づけでした。
D1では、まずカーネルソースの大雑把な構造から始まりました。大体この話だけで学校のオペレーティングシステムの授業を越えて行きました。
それから、カーネル周りの知識として、カーネルのダンプ(メモリ全部のダンプ)の解析(あるプロセスが脆弱性を突かれてメモリをアホほど食べているのでそれを突き止める。フォレンジックっぽい)をやったり(できなかった)、Dirty COWについて簡単な仕組みとPOCを渡されてこれをもうちょい実用的にしてくれといわれたりしました(できなかった)。あとあと、セキュリティキャンプの応募課題(るくす氏が出してた)のフォローアップがありました。私はこの課題は挑戦しかけて諦めたのでなにもわからなかった。
というわからないづくしの時間をすごしました。でも絶対無駄じゃないし、丁寧に資料が作られていたのでまた読み返してきっちり倒します。
お昼を挟んで、こんどはるくす先生のD2,3でした。これは究極的にはBadIRETで権限昇格をしようというものなのですが(さらに言えばWebKitの任意コード実行から権限昇格したい)、まず前座としてBadIRETの原理でカーネルを落とそうということをやりました。落とすだけならもうコードをるくす先生が書いていたのですが、これにちょっとだけ細工をして、レジスタをいじってから落とすとかしました。運が良いと結果が出るらしいですが、徳を積みすぎてほぼ毎回でました。
こんどはブラウザほうからアプローチして、(これも任意コード実行のところはるくす先生が書いてくれていたので、)試しに fd = open("/dev", 0); getdents(fd, buf, 4096); write(1, buf, 4096)
するシェルコ―ドを書いて動かそうという演習がありました。これがいろいろはまりどころがあって、なかなか進まず、なんとかこれができたくらいで夕食になりました。
夕食は同じ講義の人とたべて、ちょっと仲良くなりました。
今日は miyagaw61 さんと __ukun さんの顔と名前とアイコンとハンドル画一致した
— ふるちゅき (@theoldmoon0602) 2017年8月15日
夕食後も同じことをやって、更に進んで、BadIRETでの権限昇格コードを書き始めようというところまで来ました。しかしこれがとてもむずかしく、原理が理解できず、コードもまたかけない。悩みに悩んでタイムアップでした。悔しい。
21時から22時までは、(権限昇格が難しすぎたので急遽)カーネルの脆弱性の緩和策などのサーベイになりました。
これでやっと講義がおわり、昨日が終わったというわけです。本当に疲れていて、疲れ of 疲れという感じでした。
るくす先生「どうもみなさまお疲れ様でした」
— ふるちゅき (@theoldmoon0602) 2017年8月15日
みんな「……」(疲れて声が出ない) #seccamp
Day3
今日は2つの講義と、2つのBoFと企業講演とグループワークがありました。
午前の講義では、Dトラックの、「マルウェア x 機械学習」を受けました。
講義としては、機械学習の簡単な説明から始まり、じゃあ機械学習でマルウェア検知するならどうやってやる? みたいな話をグループでしました。ありきたりな選択肢しか出ませんでしたがまあそれは良いです。講師の人からは、バイナリのタイムスタンプがわりと効果的という話をききました。
ここまでやって、続いてデータセット(トレーニング用マルウェア・正常プログラム1000件ずつ、評価用マルウェア・正常プログラム500件ずつ)と、簡単なランダムフォレストの実装、バイナリファイルからの特徴量の抽出サンプル(ひどい特徴の選び方をしているやつ。出力フォーマットのサンプルというわけ)が渡されまして、これを改善していく(特徴の選び方を変えていく)という演習をやりました。
最初はAccurancyが5割とか(五割くらい検知するし、五割くらい誤検知する感じ)だったわけですが、試行錯誤で、87%程度まで上がりました(7割くらい検知するし、1割くらい誤検知する感じだったと思う)。特徴としては{タイムスタンプ、バイナリサイズ、DLLのリンク量、DLLから読んでる関数の数、シンボル数}くらいを採用しました。9割行かなくて残念でしたが、同じ講義を受けていた人の中では一番いい値が出たようです。
マルウェア分類のAccuracyが87.5% になった。9割届かず悲しい #seccamp
— ふるちゅき (@theoldmoon0602) 2017年8月16日
そこまでで時間いっぱいでした。続いてお昼ですが、一人で黙々と食べました。おわり。
午後の講義は「信じて送り出した家庭用ルータがNetBSDにドハマリしてloginプロンプトを返してくるようになるわけがない」でした。この講義では結局VirtualBoxにNetBSDを入れて、そこでラズベリーパイ用のNetBSDをビルドしました。そしてそれをラズパイに書き込んで起動ヤッターという感じです。それだけしかしていなくて、あとはこぼれ話がいろいろという感じだたのですが、私はラズベリーパイ用のイメージのクロスコンパイルで失敗しまくってうえええって言っていました。これの原因はメモリが足りないというものだったのですが、1Gじゃあ足りないんですね……。
私だけツールチェインのビルドに失敗するんですが、徳ですか!? #seccamp
— ふるちゅき (@theoldmoon0602) 2017年8月16日
はい、そのあと夕食ですが、割と席指定の夕食で、同じ講義を受けていた ukn さんと、昨日お世話になったるくす先生、コアキャンプに来ていた hama さんと食べました。私は静かに座っているかかりをしていました。
(夕食の席で)るくす氏「一番つらかった講義ってなんですか?」
— ふるちゅき (@theoldmoon0602) 2017年8月16日
夕食後はBoFと企業講演でした。BoFはあんまり書くことないと思うんですが、二個目の講義がものすごくためになるというか、セキュリティとはみたいな本質情報を突いてくれるもので、今年のキャンプで一番忘れられない話になりそうでした。
その後はグループワークでした。グループワークのメンバリーダが結構苦手のようです。考え方が合わないつらい。
Day4
午前では、はじめはブラウザ上のスマホゲーっぽいのをチートしてたのですが解けなかった(あると思ってたサーバ側の処理がなかったらしくてめっちゃ簡単だった)。
続いてはAndroidエミュレータ立ち上げて、講師の人が2週間くらいで作ったと言ってたゲームのチートをやりました(ゲームとしての完成度が高くてすごかった)。メモリ書き換えとかファイル書き換えとか通信書き換えをやっていろいろチートしました。ファイル書き換えはやったことなかったので憶えました。あと、通信がxor -> base64 で難読化されてたんですが、 xor に気がつけずちょっと悔しかったです。
この講義ではどうやってチートするのかということと合わせて、開発者側の視点での話も聞けたので大変良かったです。
午後はまた別のゲームチートで、開幕即演習というか演習しかなく、ひたすら手を動かしていました。UnityゲームのC#なdllをいじるのは一瞬だったんですが、apkの.soを解析して……となるとなかなか厳しく、有意義でつらい時間を過ごしました。
企業講演でサイボウズさんのお話を聞き、そしてグループワークでした。
グループワークのやばいところは個人的にリーダへのヘイトが溜まっていくところです。ずっと相容れなさを感じてる。
キャンプ恒例のプレゼントがありました。翌日時間がなさそうだったからこの日にあったんですかね。
ありがとうございます!!!! #seccamp pic.twitter.com/fL1WouStrS
— ふるちゅき (@theoldmoon0602) 2017年8月17日
Day5
講義が終わったという安堵と、前日の晩に資料作成のうち私のやるべきところは終わっていた(たたき台ばかりつくってた)のでほとんど死んでました。
グループワーク発表は面白いところとか上手なところとかそうでないところとかありましたが、去年の程の面白さが合ったのかどうかは微妙じゃないかなと思っています。うちのチームもそれなりの発表をしました。
それでお昼を食べ、午後は成果発表でした。まずは集中コースでptr-yudaiの発表とか、その他すごい発表を聞いていました。
名残惜しいですがこれでだいたい全過程が終了となりまして、あとは挨拶などを聞き、写真撮影などし、解散でした。
終わった後ご飯でもという感じだったのですが、きっと都心方面だろうとたかをくくって先に歩を進めていたら逆で、結局参加できずまっすぐホテルに来ました。
キャンプでは毎日、健康調査票というのを提出していて、これは各食事ちゃんと摂ったかとか寝れてるかとかを丸とか三角とかで書くわけですが、そこに記述欄がありました。それで
健康調査票ってのを日毎に提出するんですが、記述欄に「体が冷える」とか「疲れてる」って雑に書いちゃうとめっちゃ丁寧なお返事をもらってしまい恐縮する
— ふるちゅき (@theoldmoon0602) 2017年8月16日
というわけです。上述した**さんがこのお返事を書いてくれたひとで、かなり嬉しかったので、**さんには悪いなと思いつつ、ちょっとどんな内容だったかを書いていきます。
Day 2
ふるつき「体がひえる」
**さん「上着で***てください。必要であればブランケットの貸出もあるので言ってください(空調の調節等何かあればスタッフに言ってください」
Day 3
ふるつき「疲れてる」
**さん「お疲れ様です。なかなか難しいと思いますが休めるときは早めに休んでください。何かあれば連絡を……」
Day 4
ふるつき「いきてます」
**さん「良かったです!!!! コメントありがとう。体調について分かりやすかったです。今日までお疲れ様でした、ラスト一日も頑張って、そして***ください」
記述欄は書いていきましょうという話。
--
ptr-yudaiがキャンプ中に私のツイッターを監視していたりしたらしいのですが、その画面を見た誰か(数人いるっぽい)が「ふるつきさんですか!?」と尋ねる事案が発生していたっぽいです。一体誰なんだ。