読書の秋。
ということで久々に
Hacking: 美しき策謀 ―脆弱性攻撃の理論と実際 (2005/06/20) Jon Erickson 商品詳細を見る |
この本はいつ読んでも、どうしてそういう風になるかはわかるけど思いつきはしない、というものばかり。
これはパズルですね。
たとえばlibcへのリターン。
まずそもそもsystem()関数という関数の存在そのものを知らなかったのですが、その関数でどのようにroot権限でコマンドを実行させるかということを行っています。
大体シェルコードやメモリ上の命令を使ってハッキングを行う場合に問題になるのがNULLバイトの存在なんですが、上の話ではそれをprintf()関数で解決しています。
最終的には呼び出すのは標準のlibcだけとなり、スタック上でコードを実行することなく脆弱性攻撃を行うことができています。
関数呼び出しが行われる場合、スタック上は
関数のアドレス | 戻りアドレス | 引数1 | 引数2 | ・・・ |
やはり、まだまだ修行が足りないということをこういう部分では実感します(ただのアプリケーション開発するならそこまで必要な知識ではないでしょうが)。関数のボキャブラリが圧倒的に足りないのがその一因だとは思います。そして経験も足りません。
そんなこんなで今度からLinux系のC言語の関数の勉強を再開したいと思っています。
忙しい時期ですが今やらないとそれこそ勉強する時間はなくなると思うので、しっかりやっていこうと思います。
うーん、一時期はゲーム開発でもやってみようかとか思ってたんだけどなあ・・・。