retrage.github.io

2022年にやったこと

https://twitter.com/retrage/status/1608981455182651392

こういう不安を感じたので、心の安寧を取り戻すために今月と今年に何をやったのかをまとめてみる。なお、自分の中で「取り組んでいることを話題にすると完成しなくなる」ジンクスがあるので、いまやっていることはここでは書かない。

GDB Support for Cloud Hypervisor

  • 1月~2月

地味ではあるが、これを作ったおかげでRust Hypervisor Firmwareのデバッグが効率的になった。もともとcrosvmのGDB対応を参考に作っていたが、gdbstub 0.6.0でAPIが大きく変わったのでそれに合わせて実装を見直してmulti-core対応などを行なった。他にもkvm-ioctlsにPRを送る必要があったりと、思ったよりいろいろやった。自分が入れたGDB対応はx86_64のみだったが、あとからaarch64対応も他の方が入れてくれた。

Rust Hypervisor Firmware Integration for m1n1

  • 4月~5月

aarch64/LinuxではUEFIを使った起動を採用しているが、Apple Siliconでは従来のIntel MacのようにEFI環境が用意されていない。このギャップを埋めるために、Asahi Linuxではm1n1というブートローダからu-bootを起動し、u-bootの提供するEFI環境を使って(GRUBを経由して)Linux kernelを起動する。 ここで気になったのは、「u-bootでEFI環境を提供する代わりに、Rust Hypervisor Firmwareをm1n1に直接統合することでLinux起動できないか」ということである。幸い、m1n1にはRustで書かれたchainloadがあったため、これを入れ替える形でRHFをm1n1に統合できた。なお、RHFはx86_64向けだったので、これが初めてのaarch64対応でもあった。GRUBのロードと起動まではできたものの、本来であればGRUB CLIを操作して調査するところだが、USBキーボードのドライバがm1n1にはないので動かせないのでデバッグできず、そのまま放置してある。

https://twitter.com/retrage/status/1521746313767170049

UEFI Firmware Vulnerability Detector for Ghidra

  • 3月~6月

IDA ProプラグインであるefiXplorerには静的解析による典型的なSMMの脆弱性スキャナが実装されている。Iこの機能がどのように作られているのか知りたかったのでGhidra向けに実装した。Ghidraで使われている中間表現であるpCodeがかなり高レベルな情報まで復元して表現してくれるため、かなり実装がしやすかった。簡単なData Flow Analysisも実装したが、比較的書きやすかった覚えがある。 ついでにこの脆弱性スキャナを簡単に使えるように、GitHub ActionsにHeadless Ghidraを実行するactionsを作成して、検出結果をレポートとして報告するようにしてみた。

https://twitter.com/retrage/status/1503000062980358147

まとめ

これぐらいが今年のうちに一区切りついた、もしくは飽きたことだと思う。期間を見るとわかるが、7月以降やったことが書かれていない。これは、自分の中でまだ途中だったりサボっていたりしているためである。 来年は良い年であるように。