naobe @ ウィキ

セキュリティ

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可
コンピュータに戻る。

【参考文献】
http://hack.ninja-web.net/academy003-060.htm 
ハッカー・プログラミング大全

暗号


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を追加しないというセキュリティルールは、バックドアを防ぐためのもの。
添付ファイル
ウィキ募集バナー