naobe @ ウィキ
セキュリティ
最終更新:
Bot(ページ名リンク)
-
view
コンピュータに戻る。
暗号
2要素認証
ローカルバッファオーバフロー
スタック領域の構成
ほとんどの関数の先頭には以下のコードが存在する
push ebp mov ebp, esp sub esp, 010h
注)010hは、関数のデータ領域。
関数を呼び出す前に、OSが呼び出し元の関数のアドレスをスタックにプッシュしている。
よって上記コードを実行したあとのスタックの動きは以下のようになる。

よって上記コードを実行したあとのスタックの動きは以下のようになる。
子関数で、指定したサイズ以上のデータをセットすると、データ領域を超えて、呼び出し元のアドレスにデータがセットされる。
シェルを起動するアセンブラコードをスタックに書き込み、呼び出し元のアドレスにそのアドレスをセットするようにしておけば、このプログラムを実行すると新たにシェルがプログラムの実効ユーザで起動される。
passwdなどのsuidプログラムでかつ、実効権限がrootのプログラムにバッファオーバフローがあれば、プログラムの入力に細工を施すことで、上記の仕組みを利用して、rootで起動されたシェルを新たに開くことができる。
リモートバッファオーバフロー
サーバプロセスは通常、実効ユーザがrootである。またサーバプロセスはポートを指定して、パケットの受信を待っている。サーバプロセスにバッファオーバフローのバグがあると、例えば、受信バッファのサイズが受信パケットのサイズより小さい場合、受信パケットをローカルバッファオーバフローの場合と同様に呼び出し元のアドレスを受信パケットで上書きしてしまう。
受信パケットに以下のコードを書き込む。
受信パケットに以下のコードを書き込む。
echo '9999 stream tcp nowait root /bin/sh -i' > /etc/inetd.conf kill -HUP inetd
リモートから以下のコマンドを実行すると、rootで全ての操作が可能になる。
$telnet ホスト 9999 #
バックドア
裏口のこと。
通常ユーザとして侵入しPATH変数を修正し偽のコマンドを配置しログアウトする。その後、本当のユーザが偽のコマンドを実行したときに、rootのパスワードをログファイルに書く。または、インストールしたプログラムにrootのsuid属性を与える。
偽のコマンドとして、su、lsがよく使われる。
tripwireなどの改竄防止ユーティリティで防ぐことができる。
rootのPATHにcurrent directoryを追加しないというセキュリティルールは、バックドアを防ぐためのもの。
通常ユーザとして侵入しPATH変数を修正し偽のコマンドを配置しログアウトする。その後、本当のユーザが偽のコマンドを実行したときに、rootのパスワードをログファイルに書く。または、インストールしたプログラムにrootのsuid属性を与える。
偽のコマンドとして、su、lsがよく使われる。
tripwireなどの改竄防止ユーティリティで防ぐことができる。
rootのPATHにcurrent directoryを追加しないというセキュリティルールは、バックドアを防ぐためのもの。
添付ファイル
