セキュリティ&プログラミングキャンプ・キャラバン2009 名古屋
セキュリティ&プログラミングキャンプ・キャラバン2009 名古屋に参加してきましたので講演内容のメモと感想を書いておこうと思います。
セキュリティ&プログラミングキャンプ
セキュリティ&プログラミングキャンプの紹介 園田先生
講師の先生方がすごい人たちばかりです。
去年の応募者は368人、キャンプ参加者は62人なので倍率はで約6倍らしいです。
あとは各コースについて説明がありました。
印象に残ったのは初日の野望を語れで「某窓のOSを作っている企業をつぶす。」という記述には笑ってしまいました。
あとはウイルス対策で「アンチウイルス禁止かつWindowsUpdate禁止の縛りの上でウイルス対策をどうするか」という議論など面白そうでした。
最後に人材が不足しているのではなく、孤立している、孤独である人が多い。
そういう天才、俊才、秀才を発掘して、拡がる楽しさにどっぷりハマらせたい!という言葉は印象に残っています。
感想:調べれば公式ウェブページに書いてあることを中心に去年のキャンプの様子を動画で見せて頂けたので、キャンプの雰囲気が分かったのが良かったです。
情報セキュリティ基礎 園田先生
「個人情報」についてでした。
今時のコミュニケーションツール(Twitterやmixi、プロフなど)を使う上での「個人情報」とは何か?
Twitterのようなツールだと発言内容から人と人の関係が分かり、1人が所属を公開していたらもう1人も推測できます。
(今回の名古屋でのキャラバンはTwitterで会場が決まったらしいです)
ただ、所属とか名前とか出すと本当にまずいのか。
どこまでが個人情報になりどこまでは喋っても良いかのポリシーを定めることが重要。
個人情報をある程度出すにしても、無意識はよくない。
でも毎回気にしているのも面倒ですから、それをシステムにやらせられないか。
これはビジネスチャンスかも?
といった感じの内容でした。
少し気になったのは個人情報の定義です。
「どこまでが個人情報なのか?」という流れで話しを進めて頂きましたが、
あくまで私の個人的な考えですが、個人情報は言葉の通り、
個人に関する情報は全て個人情報だと思います。どんな小さなことでもです。
「推測できる」や「可能性がある」といったことも個人情報だと私は思います。
例えば、私が今回名古屋のキャラバンに参加して名古屋付近に住んでいるのではないかというのも情報量や価値は低いですが個人情報だと思います。ただ、申し込み忘れて最寄りのキャラバンが終わっていたので結果的に遠くの名古屋しか参加できなかった。という可能性はゼロではないですので情報量は曖昧で価値は低いです。
ただ、その個人情報のなかで「どこまでの個人情報は公開しても良いのか?」といった表現の方が私はわかりやすいと思いました。
少し話しはそれますが「実名推進派と匿名推進派」の議論を時々見かけます。
実名の人の発言の方が一般的に信憑性は高いですよね。
それでも実名のリスクは多少なりともあります。
ウェブ上での発言が現実での信頼に影響を与える可能性がある。など。
Twitterなんかで実名派と匿名派の発言から匿名派の人の情報が少なからず推測できるのではないかと思います。
システムのアクセスコントロールが破綻する可能性があるというお話しも伺いました。
それは自分の予想外の個人情報の公開ですのでその辺りも本来は改善すべき点ですよね。
あくまで過信しすぎは良くないと考える必要がありそうです。
プログラミング基礎 吉岡先生
お話の流れは、
プログラミングコースの紹介
ソースコードの読み方とデバッグの仕方の重要性
OSS
勉強会
質疑応答
といった感じでした。
議論のネタとして面白そうな、
「オープンソースにするメリットは?クローズにした方が良いのではないか?」
が気になりました。
どちらもメリット・デメリットがありますが、私はオープンの方が良いと思います。
暗号アルゴリズムと同じで、公開されていて多くの人が検証した結果使われているものの方が信頼しやすいと思います。
質疑応答では、
Q1「勉強会のコンテンツについてブログで触れることは良いのか。」
A1「明示的に講師が転載禁止と言っている場合を除き、良いことだと思う。」
Q2「ソースの読み方の重要性。」
A2「既存のソフトウェアを拡張したりメンテナンスしたりすることが圧倒的に多い。その時にデバッグの仕方やトラブルシューティングの仕方が重要になる。」
Q3「知名度のない勉強会に人を集める方法。」
A3「自分が好きなことができるなら良いのではないか。」
Q3’「場所がとれない。」
Q3’「少人数なら公民館や喫茶店、カラオケ(電源がある)など色々ある。」
Q4「BoFとは?」
A4「Birds of a Featherの略。Internet Engineering Task Forceなど専門家が集まる場所でみんなの興味のあるネタをみんなで議論しましょうという形式」
プログラミング言語組 笹田先生
自習課題としてRubyソースコード完全解説(HTML版)。
内容はRubyを題材にしてRuby自体ではなく、Rubyの言語処理系のOSとのやり取りをしたりするC言語を学ぶこと。
笹田先生は書類選考でトップレベルを選ぶらしいです。
OS作ろう組の川合先生はOSを作りたいという人に、30日でできる! OS自作入門に沿って分からない所を支援するといった基準で選んでいるらしいです。
去年のキャンプでの金井仁弘さん達の高速化のお話では全部が63%高速化したのではなく、
最終発表において、
各場合においてベンチマークテストを行い、
ある場合ではこんなに速くなる。
しかし、全部が速くなる訳ではなく、こういう場合以外は殆ど速くならない。
難しいですね。
といった感じで良い面だけでなく、改善できなかった点やより改善すべき点について発表を行ったのは大切なことです。
Rubyの処理系の基本は
- 読み込んで、
- 実行する。
らしいです。少し入り込むと、
- 読み込み部分
- 実行する部分
- バイトコードを実行
- オブジェクトを管理
- ガベージコレクション
プログラムは木構造になっている。
YARV(VM)は命令列を生成し、スタックマシンで処理する。
こちらの方が高速になる。理由は論文などを参照してください。
Ruby1.9にYARVが使われている。
x86専用にするのではなくARMなど他の環境でも動くために仮想マシンにしている。
最後の方はスタックマシンとレジスタマシンの比較を実演して頂きました。
スタックマシンの方が命令が長くなるが要素が少なくなる。
スタックマシンは情報を圧縮できるが、遅い。
遅い理由は並列度が上がらないことが原因らしいです。
調べてみると論文など広く公開して頂いていました。
笹田耕一/笹田研の研究業績リスト
YARV: Yet Another Ruby VM
名古屋Ruby会議
コンパイラを作るのは面白そうだなと感じました。
どうせなら新しい言語を作ってみたいなとか。。
気になったのは笹田先生が使っていたエディタが何か分からなかったです。
OSを作ろう組 川合先生
教科書は著書でもある30日でできる! OS自作入門で、OSを作りたいという人を対象としています。
本を読めば作れるようにはなりますが、解説の本ではないので仕組みが分かるようになるわけではないです。
川合先生の持論:「OSは、一通り作れるようになってからのほうが、全体の仕組みを理解しやすい。「理解しながら作る」だと、何倍もの時間がかかる。」
OSとデバイス制御、アプリケーションの関係を理解すること、
世間のAPIが現在の形になっている理由を理解することが目的。
コースの説明が終わってから30分(実際は20分程度)での自作ライブでは、
色々速く、あれで理解するのは難しいかと思いました。
ただ、後日試せるように細かい説明書を頂いたので、試してみようと思います。
マルウェア解析 村上先生
ITProでの連載「ホワイトハッカー道場」を書いたり、Black Hat Japanでスピーカの方です。
バイナリ解析コースの紹介として
パケット解析、ハードディスク解析、マルウェア解析の全てレイヤが低いという共通点がある。
ローレイヤ勉強会の紹介の第2回でのフィルタドライバ入門で連射機能の話しも面白かったです。
マルウェアとはMalicious Softwareからの造語で、狭義のウイルスやワーム、木馬、ボット、スパイウェア、ルートキットなど広義のウイルスと殆ど同じような意味。
種類や分類に関しては形態や目的など色々分類があり、正確な定義は存在しない。
また、細かな分類には意味がない。
解析手法は
- 動的解析
- 静的解析
の2種類で、
動的解析はシステムに与える変更を把握するため、
静的変更は条件分岐など正確に解析することが可能だが、時間が掛かる。
といった特徴を持っていて、
基本的に解析手順は
動的→静的の順で行われるそうです。
動的解析に使う主なツールとして
- Sysinternals Suite(Microsoft):Process Moniter, Process Explorer, Autorun, etc.
- SysAnalyzer(iDefense)
- WireShark
リバースエンジニアリングに関する法案は日本ではまだ未整備らしいです。
また解析に必要なスキルとして
- 動的解析
- 静的解析
プログラムの実行に関してLinkers & Loadersという本を紹介して頂きました。
Windowsの実行形式のファイルをバイナリエディタで開くと[4D5A]から始まっています。
必要な事前知識
解析で利用するツール
- IDA Pro:マルウェア解析において標準で利用される逆アセンブラ
- Ollydbg
- VisualStudioデバッガ
解析アプローチは2種類あり、
マルウェア側の立場として耐解析技術もいくつかあり、
- VM検知
- デバッガ検出
- パッカー
- etc.
殆どのマルウェアは解析されることを前提に作られているため、解析に時間が掛かるように色々な耐解析技術を施されている。
1.VM検知はVMwareのバックドア I/O ポートなどを利用してもしVMware上で動作しているなら実機上と異なる処理をする。VM検知。動作はプロセスの終了や自ファイルの削除など。
2.デバッガ検出はWindows上ではIsDebuggerPresentAPIで検出可能。他の方法。検出後はVM検知と同じで通常と異なる動作をすることで解析を困難にさせる。
3.パッカーはツールの名前で、パッカーを使ってパッキングすることで、実行ファイルをエンコードし静的解析を困難にさせることが目的。
昨今のマルウェアは全てパッキングされている。
但し、パッカーは合法での利用も多い。
暗号化と組み合わせることもある。
HITB CTFはパッキング、暗号化、難読化がほぼすべての問題にされているらしいです。
解析ではパッキング後の実行ファイルを逆アセンブラにかけると、
分岐や繰り返しなど複雑になるが、必ずどこかである条件で終了している。
その終了を見ると、ジャンプで飛んでいることが多い。
つまり、繰り返しや分岐でジャンプ先にプログラムを構築し、最後にジャンプで飛んでその先にあるプログラムを実行するという仕組み。
しかし、最近のパッカーは高性能であるため、アンパックしなくてはいけないことが多い。
最後にこういう技術に興味があるなら技術向上のために
- プログラミング
- 恐れない(壁を作らない)
- 積極的な情報収集
が大切。
情報源(全て英語ですが)
とても面白く、これからの勉強につながるお話しを伺えて良かったです。
脆弱性、指摘する人される人 竹迫先生
確認できていませんが、AVTokyoでの頭文字$ コード最速伝説の方だと思います。
一緒に発表したのは、同じくキャンプの講師のはせがわようすけさんだと思われます。
#include/* q="""*/int main() {putchar('C'); if(sizeof('C')-1); else {putchar('+'); putchar('+');}} /*=; print'Perl'#";print'Ruby'#""";print'Python'#*/
お話しのテーマは「脆弱性を指摘するのって誰得?」
まずは、XSSの説明でした。
楽天の検索結果にXSSが存在していることを見つけたというお話しは面白かったです。
別の話での「仕様です。」など、終始面白いお話しでした。
脆弱性を見つけたら具体的にどうしたら良いのか?
次に、OSSのNamazuを題材に脆弱性を指摘される人の視点のお話し。
歴史のお話しがあって、
セキュリティ関連専用の報告窓口を設置すること、
リリースを急ぎすぎないなど。
まとめとして、
もし脆弱性を見つけたら正しい窓口に報告する。
但し脆弱性を指摘される人のことも考える。
今回、このような機会を与えて頂いたことが本当に有り難いです。
講師の先生方、会場を提供して頂き受付等までして頂いた名古屋市立大学の方、このイベントを表からは見えない所で支えて頂いている多くの人々に心から感謝します。
質疑応答と懇親会については分けて書きました。