Kernel/VM探検隊@関西 8回目 & 第9回 自作OSもくもく会 参加記

第7期サイボウズ・ラボユース研究生 の川田(@megumish)です。

サイボウズ・ラボユースについては以下の僕の記事を見てみてください。

diary.megumi.sh

要は技術に興味のある学生にプロフェッショナル達が技術に関する支援をしてくれる制度というわけです。

上の記事では人狼知能の補助ツールを開発するということになっていますが

ラボユースではそのときに強く興味のあることを支援してくれるということで、今はExploit・Pwnに関する研究をしています。

Kernel/VM探検隊@関西 8回目

Kernel/VM探検隊(以下 k/vmと呼ぶ)はカーネル仮想マシンの話など低レイヤーな話題について有志が発表しあう会です。

このk/vmには一度北陸で参加して発表したことがあります。(本当の初心者である自分はごく簡単な発表をした程度でしたが……。)

前回もそうでしたが、今回もマニアックでレベルの高い発表ばかりでした。

そのため、浅学の私に理解できるのは自分が普段やっているところに近いところ(Exploitやバイナリ解析周り)だけでした。

これはCTFの話の後の質問の時にCharoさんが話してくれた言葉ですが、「CTFの問題は現実世界ではミニチュア」ということなので

k/vmで大半を占める現実世界のコンピュータ周りの話も今最も興味のあるCTFの分野でも活かせるんじゃないかと感じました。

さて、自分の聞いた発表の中でも面白かったものを適当にピックアップしていきたいと思います。

No RELROとPartial RELROの違い

Exploit・PwnにおいてFull RELROとParital RELROの違いは再配置されるライブラリ関数のポインタを書き換えられるか否かとして注目されているものでした。

当然これは自分も毎回Pwn問を解く上で気にしていたことでした。しかし、今回解説されたCTFの問題はPartial RELROとNo RELROの違いに気をつけなければならない問題でした。

No RELROとPartial RELROの違いは再配置されたライブラリ関数の最初の呼び出し時にあります。

No RELROはPartial RELROとは違い文字列(名前)によるライブラリ関数のアドレスの解決をします。

だから、その文字列を指すポインタを書き換えてしまえば、任意の関数が呼び出せてしまうという脆弱性がつけるのです。

CTFは現実世界のミニチュア

CTFについての話の後、発表者の方にCTFの問題を解く以外にCTFの問題を思いつくときはあるのかという質問をしてみました。

現実のソースコードやプログラムの動作を追っていく中で思いつくものはあるとのことでした。

またCTFは現実世界のミニチュアということも言っていました。

Nintendo Switch のバイナリ

CTFで出されるバイナリとしてはELFフォーマットがほとんどですが、ごくまれにGameBoyAdvanceのバイナリが問題として出されることもあります。

自分がCTFが楽しいと感じる理由はほとんどが未知のオブジェクトを少しずつ解析していくところなのですが、こういった現実世界のバイナリを解析するのも面白いんじゃないかと感じました。

Nintendo Switchのバイナリは単一でなくライブラリ(.so的なもの)も含まれているということで、さらに解析の面白さがあるのではないかと感じたので、いつか触れてみたいところです。

その他

その他にもVMMの話やUSB3.0デバイスドライバの話、さらにそれをユーザー空間で動かす話、新しいリンカlddなど面白いものがありました。

自分もそういうものに触れることでより奥深い未知の世界を探検していきたいですね。

第9回 自作OSもくもく会

さて、k/vmの翌日には自作OSもくもく会というものに参加してきました。

今回はもくもく会ということで Operating System Concepts というOSの概念について書かれた本を読んできました。

スライドです。

speakerdeck.com