読者です 読者をやめる 読者になる 読者になる

撤退

情報系学科所属

セキュリティ・キャンプ2016に行った

セキュリティ・キャンプ2016感想

行ったぞ。

動機

とても良い文章を過去の僕が書いていたので、それを動機とします。

応募用紙

1, 4, 5, 10を答えました。応募用紙の問題はどこかにあったと思いますので割愛します。

10

10の問題は調べるとどれがどのハイパーバイザ検知手法かというのはすぐ分かる一方、実行してみようとするとVirtual PCの環境構築がとても難しかったです。

特に Virtual PCが曲者で Virtual PC 自体が Windows 7 以前でしか動作しない上に Virtual PC は最近の Linux Kernel との相性が最悪でまともに動作しないという問題があり、40行程度のCプログラムをビルドして動かすのに大量の時間がかかることとなりました…

また Virtual PC 上では、Puppy LinuxVine Linux ならある程度簡単に動作するものの gcc やネットワークなどの兼ね合いで断念しました。もし今後 Virtual PC 上でLinux系のOSを動かしたかったら、 Ubuntu 9.10 がおすすめです。

ついでにDECAFでQEMU検知を回避するプラグインを書きました。 提出したものでは1回目の実行時にはうまく回避しきれませんでしたが、今ソースコードを読み返してみると、レジスタに書き込むべきところをメモリに書き込んでいるので、当時の自分の追い詰められ具合を感じています。

1

解いてみて面白かった問題は1でした。 はじめはただ仮想アドレス空間上のスタックとヒープの違いしか書くことがない話かと思ったら、各OSによっての malloc の実装の差異に注目するもので、mallocシステムコール brk と mmap のどちらを呼ぶかによって動作が違うということを詳しく調べたので勉強になりました。

自分は Ubuntu, Mac OS X, Free BSD でこのコードを実行してみましたが、 Mac OS X が問題の実行環境のアドレスと一番近かったと思います。

事前課題

ちょうど忙しい時期と重なってしまい大変辛いかとおもいきや、集中講義を多くとっていたので、事前課題自体が少なかったので特に問題ありませんでした。

事前課題としては設定されていなかったもののを自分で調べておいたほうが良いなと思ったものもありました。

専門講義

Dissecting Malware - x86 Windows malware analysis -

マルウェアの静的解析をしていく上で、具体的なレジスタやメモリの値の動きばかりではなく、どのような動作をするのかというところに抽象度を一つ引き上げて着目していくのが重要だということを感じました。 同時にプログラムの静的解析とIDAは強い結びつきがあると感じたので、IDAのテクニックなども少しずつ学んでいきたいです。

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

講義中は普段 Windows プログラムをあまり作らない兼ね合いで色々と苦戦しました。

マルウェアの検知について有効な発想とそれが難しくなるポイントについての解説と、 そこからくる false-negative, false-positive という問題についての説明があった後に演習が行われました。 演習では無害な検知されるプログラムや有害な検知されないプログラムについて考えました。

演習中は自分のしていることがなんだか漠然としていて不安が残りましたが、色々講評を聞いていったところとにかく地味に突き進むのも良いということが分かったので、勉強になりました。 他の講義と比べて演習中の理解度が低かったので、今後研究の傍らで遊んで行きたいと思っています。 やはり身を以って体感するのは大切ですね。

OS/VMレイヤで実現する圧倒的高速なパケットフィルタ/サンドボックス

eBPFによるアクセス制御とDPDKによる高速パケットフィルタの実装です。 建前的にはハードウェアの高速化に伴い従来のOSでは存在しなかったボトルネックとなりうる問題に挑もうと言う話です。 詳細はtotemくんのブログを読むと良いと思います。

bbottait.hatenablog.com

自分個人としては高速化のためにカーネル内でハンドルしたいものを in kernel virtual machine によって保護機構を担保するという発想は理にかなっていると思いました。 ただ、実装は大変な気がします。

自分はeBPFによるLSMの実装を手がけましたが、圧倒的に成長する前に圧倒的に時間が足りなくてeBPFに到達していないので事後課題として頑張ります。

github.com

講師の忠鉢さん以外にも、TOMOYO Linuxの半田さんにお世話になりました。 開発者の眼前で行うTOMOYO Linuxソースコードリーディングは普段と比較して信じられない勢いで理解が進むのでとても驚きました。あと全然知らなかったカーネルデバッグテクニックを教えていただいたので参考にしていきたいと思います。 また、担当講師の垣根を超えて教えてくださる半田さんを見て、オフラインで集まってする勉強会の意義を強く感じるとともに、わざわざ幕張まで来て4泊5日も軟禁された意味もあったなあと思った次第です。

なぜマルウエア解析は自動化できないのか

午前中は自動動的解析を行うサービスに対して、そのサービスを検知して回避する方法を考え実装しました。 どうしても動的解析を自動で行おうとすると環境特有な特徴が出てしまうため、検知されないようにするのは難しいというということを感じました。

VMware backdoor I/O port にアクセスする部分を追加したものです。

github.com

午後はDECAFで先のソフトウェアの情報を自動で抜き取れるようなプラグインを作りました。具体的には Windows api のうち URLDownloadToFileW のアクセスするURLを出力することと、 ReadFile の読み込んだバッファの内容を出力するということをしています。

github.com

専門講義以外

スポンサー企業プレゼンは元々スポンサーとなっている企業の方の話なので期待が大きかったわけですが、特に各企業の特徴が色濃く出ていて、部門固有の話を多く聞くことができたので、とても有意義でした。

生活

僕は気が向かなくなると散歩に出るような性格なので、朝08:30から夜22:00までやることがあるのは辛く苦しかったです。

正直途中で何回も帰って自宅のベットで寝たくなりましたが、講義はどれも面白く、多くの人と話すのは面白かったので帰らなくて良かったです。

スポンサー向け画像

いっぱいもらいました。 f:id:turn_up:20160819173229j:plain

終わりに

  • 4泊5日楽しんだ分ラボの進捗に追われていて辛いです。
  • キーボードを貰えるらしいけど、JISキーだったら辛い…
  • LINE Developers day に行けるらしいので行く人はよしなに