作業が横道にそれて、追加でARM系(Apple silicon Mac)のKalilinuxでPwntoolsを動作させた話にもなります。
きっかけは、社内のCTF大会の事後学習で、Kalilinux環境(Apple silicon MacのUTM内に作った)をイジってたら、GitHubからダウンロードしたPoCが動かなくなったり、Pythonのライブラリがインストールでき無くなったりしてた。
応急処置として、Windows(Intel Core i7)のデスクトップパソコンにVirtualBoxを入れてKalilinux環境を構築して対応してたんだけど、なんともマシンを切り替えて、さらにキーボードやマウスも切り替えるのがとても不便で、困っていた。
まぁ、会社のCTF大会では、Python を使わなきゃいけないような問題まで辿り着かなかった😂ので、特に問題にはならなかったんだけど、今後の他のCTF参加とか、LangChainとかAIや機械学習とか様々なPythonでのプログラムを組んでいくには致命的だなと思って、着手しはじめた。ちょうどその頃のブログがこれ👉「Pythonの環境を整える」です。
そして、最近いろんなことが落ち着いて来て、時間が取れたので、調べてみると、いつのまにかPython3のバージョンが(3.12.6)となっていた。
どうもこれはKalilinuxの新しいバージョン2024のどこからかで、Pythonのバージョンが上がったのと、その管理が厳格化されたようで、僕がインストールするようなサードパーティのライブラリはpipではなくて基本pipxを使わなければうまくインストールできないようになったようだ。
さて、この環境問題に陥っていたのは、会社のCTF大会よりも前からなのか?後からなのか?わからないんだけど🤣
ただ、今となっては面倒なことはやめて、Dockerでやれば一発解消なんじゃ無いか、とか、思っているんだけど、それはそれで、ということで😊
まずは、venvを使った仮想環境と、pyenvを使った複数バージョンを運用する環境を整えて、その手順を軽く記録した。いろいろと試しているうちに、Pythonのバージョンとpip、pipxのバージョンの複雑な関係とか、Pythonの-mオプションの意味とかの勉強ができて、少しは頭の整理ができた。(細かい手順はそのうちキレイにして公開したいなぁ。)
ということで、環境をほぼほぼ構築してから、動作を確認するためにちょっと複雑めなツールで試すことにした。Pwntoolが良い材料だと思って、CTFとかで使った簡単めのBinary(pwn)の問題を試しに、ちゃんと動くかを確認したら、残念🫤動かなかった。
どうも、Pythonの環境だけの問題じゃなかったようだ。
基本的にBinary(pwn)の出題って、Intel(x86)系アーキテクチャのプラットフォームを想定して作られているので、Mac(Apple silicon)ではARM系アーキテクチャのプラットフォームになるから、当然動かない。それを解消しないと動作しない。
ということで、Kalilinuxの中にQEMU(qemu-user、qemu-user-static)のPythonライブラリを使用し、あと追加で必要なものとして、共有ライブラリの libc6:amd64パッケージをインストールした。
そして、マルチアーキテクチャの環境を再構築し正常動作することを確認することができた。
な、なんともMacの中でQEMUでエミュレートした仮想環境でKalilinuxを動作させていて、さらにその中で動いているKalilinuxでQEMUを利用してIntel(x86)系のアプリを動かすとは思わなかった😁
あとはコマンドラインでの確認ツールとして、objdumpを動作できるようにクロスツール(gcc-multilib gdb-multiarch)を整えた。
$objdump -M intel -b elf64-x86-64 -d ./vuln
これはちゃんと動作することを確認できたので、ひとまずは困ることはないと思う。
あとbinfmt-supportも入れておいた。Windowsのコマンド(.exe)がwineのパラメータじゃなくて、そのままコマンドライン実行できるようだ。(12/28追記 これbinfmt-supportは入れない方が良さそうだ。コメントにも書いたけど、何度試してもKalilinuxが起動できなくなる)
でも、残念ながらgdbはうまく動作させることができなかった。代わりとしては、ghidraなどのマルチアーキテクチャ対応のツールを使うしか無いようだ。でも、ghidraを使いこなせてないので、使いこなせるようになるまでは、結局はWindowsのKalilinux環境に構築してるgdb-pedaのお世話にはなりそうかな😅(いつか再チャレンジかな)
だいぶ横道にそれながら、問題を解決していった😆。
あと、RsaCtfToolも追加で確認してみた。これも一部に動作できないライブラリ(Sagemathとyafu)とかがあったけど、Mac本体ではSagemathは動作しているので良し(yafuはダメなままだけど)とした。完全ではなかったけど、まぁこれも確認できた。
全体を通して、とりあえずは、一歩前に進んだかなというところ✌️
それぞれの詳細は、今後さらに落ち着いたらブログに残そうと思っているので、乞うご期待あれ🥸
あと、全体的に頭に定着させるために、正月休み🎌はKalilinuxの全環境を再度見直そうかなと思ってます。(乞うご期待)
binfmt-supportは危険かもしれない。Kalilinuxが起動できないなどの事象に陥ることが起こっていて、どうもこれが原因っぽい。インストールしなくても、対処できそうなので、今後その辺りを整理していきたい。