イントロ
最近、本当に朝が起きられずに困っています。 理由を考えたところ、冬だから朝の日光の量が少ないという結論に至りました。僕は悪くありません。
突如襲ってくる Bash スクリプト書きたい欲
「なんか Bash スクリプトを書きてぇ」
きっと皆さんも半年に一回くらい思うことがあるでしょう。 僕も思いました。 特に Bash の構文が好きとかではないし、寧ろ Bash 全然分からん民なのですが、知らないからこそ半年に一回くらいちゃんとしたスクリプトを書きたくなります。
Bash の一番いいところは、結局半年後には構文含めて全部忘れることです。 好きな小説を、もう一度読む前の新鮮な気持ちで読み直したいというのは、人類誰もが思ったことがあるでしょう。 僕もノルウェイの森は 18 歳に戻って何度でも読み直したい衝動に駆られます。 でもそれはできません。 既に何回も読んでしまったし、なによりもう 20 歳を超えてしまっています。 ノルウェイの森は、18 歳で読むべき本であり、今読み返しても当時以上の気持ちを抱くことは出来ないでしょう。 対して、Bash は何度でも忘れて何度でも新鮮な気持ちで書くことの出来る唯一の言語です。 書こうと思う度に、新しい Bash に出会えます。
さて、問題は何を書くかです。 普段からちょっとしたワンライナーくらいなら書くことはあるけど、今回はそれなりに規模のあるものを書きたい。 ということで、以下に続きます。
リシテアのお話
最近、あまり CTF の kernel 問題を解いていません。 この前久しぶりに Bsides なんちゃら CTF のshared knoteという問題をやったけどぼろぼろぼろでした。 特にひどかったのが、必ずクラッシュしてレース成功しねぇ〜〜〜〜と 8 億年くらい嘆いていたら、exploit 中でレース後に処理を止めずにそのまま exit していたため、不正な fd をそのまま全部閉じていてそのせいで落ちていただけというのがありました。 それに気づくまでかなりの時間を消耗したので、とてもぽよぽよになりました。
その問題では/proc/sys/vm/mmap_min_addr
が 0 になっているというところに気付けるかどうかが大きかったのですが、これは僕の"kernel 問で最初にやることリスト"に入っていなかったため見逃してました。
そもそもにリストに入っていたとしても、リストの中身を全部チェックするのは結構面倒くさいため多分気づいていなかったと思います。
ということで、今回はココらへんの自動化を目的として Bash スクリプトを書くことにしました。 わーい、わーい。 題材見つかったよ〜〜。
書いたやつは Github に置いときました。まだ工事中だけど。
https://github.com/smallkirby/lysithea
試行錯誤の自動ログ
kernelpwn してる時って、exploit 書いては QEMU 立ち上げて走らせて出力見て泣いて、また exploit 書き直して…の繰り返しです。 問題は途中で方針転換したりした時で、まぁ大抵うまく行きません。 取り敢えず一旦うまくいったところまで戻って書き直そうとしたときにはもう遅い、どこまでがうまくいってたやつか分からなくなっています。 戻しては実行し、戻しては実行し、最終的には乾パンを買いに行ったっきり二度と問題を解かなくなること間違いなしです。
どうしたらいいか、答えは簡単。 QEMU を動かす度に exploit のスナップショットを取れば良いんです。 但し exploit だけではどの時点までうまく行っていたか分かりません。 QEMU の出力も一緒に保存してしまいましょう。
git 使えばいいだけですね。 実行する度に commit するのはめんどいですね。 スクリプトの出番ですね。
戻りたいときは、一旦 log 一覧を確認して:
これだと思うものを指定すれば、そのときの QEMU 出力が見れます。これで、どこまでうまく行ってたのか分かりやすいね!わ〜〜い、わ〜〜〜い。
当時の exploit も簡単に確認できないとね。これで方針転換しほうだいだ!やった〜〜〜、やった〜〜〜〜。
コンフィグチェッカー
https://github.com/smallkirby/lysithea/tree/master/drothea
さてさて、先程話にも出た、確認すべき kernel のコンフィグの話。 これも、まとめてしまいましょう。 これは大体/proc 以下のファイルを cat するだけなので適当に Bash 書いときゃ OK ですね。 但し busybox のシェルは ash なので、Bash-specific な機能なしの POSIX 準拠で書かなくちゃね。 あと、userfaultfd が存在しているかどうかとかは C プログラム中で確認しなきゃなので、純 Bash で確認できないところは C におまかせしています。
但し、これを実行するのに手間がかかるとめんどくさくて、結局確認しないまま問題を解き始めて崩壊するのが目に見えていますね。そして解けなくて乾パン買いに行くのも目に見えています。人間の怠惰をなめてはいけません。これも自動化しましょう。
やった〜〜〜。 これで問題を解き始める前に 1 コマンドをホストで叩くだけでチェックリストを確認できますね。 テスト群自体はまだ殆どモックしか無いけど、まぁそれはこれからやります(やらない未来が見えているけどね)。
あとはスニペットをちょちょいと混ぜて
今までは、ファイルシステム展開したり圧縮したり exploit をビルドしたりするスニペットを別で管理していましたが、これも混ぜ混ぜしました。 名前覚えるのめんどいしね。 これでワークスペースのセットアップも 1 コマンドで済むね、わ〜〜〜〜いわ〜〜〜〜〜い。 乾パンを買いに行ける時間が増えて嬉しいです。
飽きた
ここまで書いて Bash に飽きたので、もう一生書きません。Python が至高だってカーニハンとリッチーが言ってました。
わんちゃんワンちゃん飼いたい
理念と目標を一切持たないことで知られる僕ですが、人生に対してただ一つだけ目標を持っています。
犬を、飼いたい。
これだけが、僕の人生の唯一の目標です。今すぐにでも、飼いたい。そして、愛でたい。散歩したい。
僕の実家は犬を室内飼いするのに反対な家族がいたため、犬を飼うことは出来ませんでした。外で飼うのは、僕の信念に反します。家族だから一緒の部屋で過ごしたい。よって飼うのをずっと我慢してきました。
さて、大学生になり一人暮らしになりましたが。じゃあ今すぐ犬と過ごせるかと言うと、否です。問題は金銭面ではありません。それはまぁなんとかすればなんとかなるでしょう。
問題は、大学生は研究室によく行くので家を空ける時間が多いということ。犬は人間なので、ずっと一人だと寂しくなってしまいます。不規則に且つ長時間家を空けることが多い現在は、飼うことはできません。できないというか、まぁできるはできるだろうけど、僕の犬信念に反します。
なので今は犬の画像を眺めることで我慢しましょう。以下、僕の好きな犬リストです。永久保存版です。
柴犬
一番好き、すごく好き。 地元にいる時に、近所で柴犬を飼っている人がいたので頻繁に訪れて散歩させてもらっていました。 あの素朴な可愛さは何よりもたまりません。 小さすぎないのも可愛いです。 ぼくは小さすぎる生物(チワワとか)を虫と同じレイヤーで認識してしまいがちなので、柴犬のサイズはぼくのストライクゾーンど真ん中です。 あのしっぽをマフラーにしたいです。
シベリアンハスキー
狼っぽいのが好き。ハスキーを好きになったのは大学生になってからなんですが、あの大きさで体を擦り寄せてきた時には、そのまま持って帰ってしまおうかと思いましたね。
スピッツ(日本スピッツ)
やや小さめの犬種の中で唯一のランクイン。 スピッツは、僕が猛烈に犬を飼いたかった小学生時代に、犬種図鑑みたいなのを眺めていた中で一目惚れした犬種です。 尚、一回も実物を触ったことはありません。 顔が好きです。
秋田犬
やっぱり日本の犬こそ至高。 もふもふなので最早わたあめ。 わたあめに埋もれたいという良くはないけど、秋田犬に埋もれたい気持ちは人類の三大欲求の内の 2 つを占める。
たぬき
犬以外から、堂々のランクイン。 実家にたまに出現していたんですが、なんとも愛くるしい姿をしています。 まるまる太ったたぬきは、もはやたぬきを超えてキツネと言っても過言ではないでしょう。
乾パン
非生物から、堂々のランクイン。 僕も 2 年ほど前まではこいつを犬とは思っていなかったけれども、素朴な佇まい・愛くるしいフォルム・媚び具合、どれをとっても柴犬のそれと同じ。 相違点を見つけることができなかかったため、犬として判断、ランク入り。
Youtube Shorts
さてさて、自分に肩書きをつけるとしたら、最初は大学 4 年生になるでしょう。 それでは他に何か肩書きをつけるとしたら、それは間違いなく"Youtube Shorts アンチ代表"になります。
僕は Youtube で犬の動画(そして泣く泣く猫の動画)を見ることが好きなのですが、その Youtube に最近 Shorts という機能が実装されました。 これはほぼ Tiktok で、神聖なる Youtube には到底許される機能ではありません。
まず、シーケンスバーが無い。 意味がわからない。 時間戻しが出来ない。 どうなってんねん。 ダブルタップが勝手に Like になる。 自分の LikedVideos に shorts が気づかずに入っていた日には、その日はずっと嫌な気分のままです。 それから、次の動画がわからない。 これが一番最悪。 shorts には、犬の動画が多くあります。 スワイプする度に可愛い犬が出てくるため、コレ自体はまぁいいです。 但し、次の動画が予測できない(学習されてるっぽいけど)ため、見たくもない動画が目に入ることが多いです。 一番最悪だったのは、犬の動画を見ていてスワイプしたら、G の動画だったときです。 あの日から僕は YoutubeShorts アンチ世界代表になりました。
そして、最近は shorts が存在する Youtube が嫌になったためスマホから Youtube を消しました。 さようなら。 shorts が消えたら、また会おう。
ファイアーエムブレム
最近ちょっとした時間にゲームをするためにファイアーエムブレム風花雪月を買いました。 いわゆるマスゲーとか SRPG とかいわれる種類のゲームです。 院試期間中にこの上なく civ6 にどハマリしたので、何らかのシミュレーションゲームを探していたところ、スマブラにも出てくるからという理由で風花雪月を買いました。
結果、とても好きです。 ルールをよく知らないうちは、劣化版シミュレーションゲームじゃんとか思っていたけど、ちゃんと各ステータスの意味を調べている内に、ちゃんと考えてプレイできるゲームなんだと認識しました。 純シミュレーションと異なり、キャラの育成要素もあるのが特長です。 強いて言えば、僕は育成ゲームでは徹底的に育成しまくって、周回しまくって、ラスボスをこてんぱんに蹂躙するのが好きなのですが、本ゲームでは行動回数が制限されていたり、周回時にキャラを引き継げなかったりと育成に制限が有るため、その部分だけが少し不満です。 あとキャラごとに支援値に制限が有るのも、少し不満。
既に 1 周して今 2 周目なのですが、今回はゲームを始める前にどのキャラをどう育てるかをまとめてから始めたので、1 周目とは比較にならないぐらいつよつよなパーティが出来ています。 空、飛び放題です。
先程の Bash スクリプトで出てきた lysithea とか drothea とかは風花雪月のキャラから取りました、意味はないけどね。 リシテア、めちゃめちゃ強いです。 火力がやばい。 射程 2 の魔法しか覚えないのはあれだけど、杖持たせればいいだけです。 ボスも大抵こいつでワンパンです。 強い。
アウトロ
いかがだったでしょうか???
カス記事を書くのはいつだって楽しいことが知られています。