今年はブログ記事も書かなかったし、外から見えるアウトプットが目に見えて少なかった。今はまだ技術の貯金とか業務でコードを書いているのでいいが、そのうち技術も追いつかなくなって、「Twitterでは訳知り顔で抽象的な技術論を語るが、実際には手を動かしていないおじさん」化しそうで怖い
— retrage (@retrage) December 31, 2022
こういう不安を感じたので、心の安寧を取り戻すために今月と今年に何をやったのかをまとめてみる。なお、自分の中で「取り組んでいることを話題にすると完成しなくなる」ジンクスがあるので、いまやっていることはここでは書かない。
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対応も他の方が入れてくれた。
- https://github.com/cloud-hypervisor/cloud-hypervisor/pull/3575
- https://github.com/rust-vmm/kvm-ioctls/pull/191
- https://github.com/cloud-hypervisor/cloud-hypervisor/issues/3658
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にはないので動かせないのでデバッグできず、そのまま放置してある。
The unmodified GRUB launched from Rust Hypervisor Firmware integration for m1n1 entered the rescue shell. Next setting up full environment to boot Asahi Linux without u-boot. pic.twitter.com/xWQAz2sAOh
— retrage (@retrage) May 4, 2022
- https://github.com/retrage/m1n1/tree/rust-hypervisor-firmware-integration
- https://github.com/retrage/rust-hypervisor-firmware/tree/m1n1-lib-bootloader
UEFI Firmware Vulnerability Detector for Ghidra
- 3月~6月
IDA ProプラグインであるefiXplorerには静的解析による典型的なSMMの脆弱性スキャナが実装されている。Iこの機能がどのように作られているのか知りたかったのでGhidra向けに実装した。Ghidraで使われている中間表現であるpCodeがかなり高レベルな情報まで復元して表現してくれるため、かなり実装がしやすかった。簡単なData Flow Analysisも実装したが、比較的書きやすかった覚えがある。 ついでにこの脆弱性スキャナを簡単に使えるように、GitHub ActionsにHeadless Ghidraを実行するactionsを作成して、検出結果をレポートとして報告するようにしてみた。
My Weekend Project: Ghidra version of efiXplorer vulnerability scanner. I reimplemented the SMM callout checker as an extension of efiSeek. It can detect CVE-2021-3452.https://t.co/FFDpr1ivxH pic.twitter.com/1sIHonFm1C
— retrage (@retrage) March 13, 2022
- https://github.com/retrage/efiSeek/tree/efi-xplorer
- https://github.com/retrage/efiseek-action
- https://github.com/retrage/efiseek-action/actions/runs/2442057589
まとめ
これぐらいが今年のうちに一区切りついた、もしくは飽きたことだと思う。期間を見るとわかるが、7月以降やったことが書かれていない。これは、自分の中でまだ途中だったりサボっていたりしているためである。 来年は良い年であるように。