« バックドア型 Trojan Horse 「トロイの木馬」 検出ツールについて | メイン | ポートスキャンで開始されるサーバー攻撃を予防するために »

2004年01月22日

Perl Script によるCGIを使用するときの注意点

[作成日 2003-03-02 23:27:15]

こちら をご一読下さい。
Perlスクリプトで作成された 掲示板、送信フォーム、アクセスカウンター、アクセス解析、チャットなどのフリーソフトは、多くのサイトで容易に入手できます。これらスクリプトのインストールマニュアルには、通常「各ファイルをアップロード後、パーミッション CGI ⇒ [755]、 データファイル ⇒ [666] に変更する」と指定されていることが多いのですが、この設定では、データファイルは "すべて丸見え" となっています。
データファイル ⇒ [666](ないし [606])以外では作動しないサーバーでは、セキュリティ対策として、データファイルのファイル名やアップロード先のディレクトリ名を変更し、管理者以外の人に直接アクセスさせないようにしたり、平文で書かれた個人情報などをサーバー上に残さないなどの対策が必要です。
また、CGI本体ないし、設定ファイル(.dat ないし .cgi)の中に管理者専用パスワードを入力しますが、レンタルサーバーやプロバイダー(ISP)提供の Web サーバーを多くのユーザーが共有していると、パーミッション CGI ⇒ [755] では、同一サーバーの他ユーザーやグループのアクセスが何らかの理由で可能になると、パスワードまで読み取られてしまいます。パーミッション CGI ⇒ [700] ないし [701] で作動しなければ、サーバー管理会社やISPは信頼できるところを選びましょう。
他に、ログファイルを自動生成するタイプの掲示板などでは、ログ用ディレクトリにも書込み権限が必要ですので、パーミッション ⇒ [777] (ないし [757], [707] )とすることになります。もし、画像掲示板などで、悪意ある攻撃者により実行ファイル類が "添付ファイル"用、"ログ"用ディレクトリにアップロードされると、Web 改ざんも可能となります。
パーミッション CGI ⇒ [700],[701] データーファイル⇒ [600] で作動しないサーバーは、安全とはいえないので、
安全なパーミッションで動作させる方法
をお伝えします。

しかし、正しく設定されなかった「suEXEC」は、とても危険です。また、攻撃者が suidperl を悪用しパーミッションを設定すると同様のことがおこります。Unix 由来のオペレーティングシステムでは、通常 setuid (suid・sbit), setgid (sgid) 操作が可能です。setuid, setgid されたコマンドやプログラムでは、コマンド操作した者が、(それぞれ)所有者、所有グループの権限で実行できるようになります。
suidperlが実装されたサーバーにおいて、ホームディレクトリにアクセス後、
% chmod 04701 [perlスクリプト] (chmod u+s も使用可)
setuid すると、誰でも perlスクリプト(CGIなど)を実行できるようになります。
% ls -la
-rws-----x 1 所有者名 ------ [perlスクリプト]
setgid する方法は、
# chmod 02751 [perlスクリプト] (chmod g+s も使用可)
です。
# ls -la
-rwxr-s--x 1 所有者名 所有グループ名 ------ [perlスクリプト]
と「s」という文字で表示されるようになります。
なお、自宅サーバー内では、デフォルトで setuid, setgid されたコマンドなどチェックする方法として、
% find / -type f (-perm -u+s -o -perm -g+s ) -ls
または、
% find / -type f (-perm -04000 -o -perm -02000 ) -ls
があります。オプション -type f はファイルタイプがファイルのもののみ表示するようにしています。ルートディレクトリ以下のすべてをチェックしますが、検索のためにサーバーに負担をかけます。
また、
% ls -l /{,usr/,usr/local/}{,s}bin/ | grep 'r[-w]s'
でも /usr/以下の指定ディレクトリがチェックできます。
実際には、passwd,chpass,login,man,procmail,rcp,ping,traceroute,shutdown,crontab などが setuid されています。
owner 所有者 = root のファイルが setuid されると、最も危険な存在となることがお分かりいただけると思います。また、group グループ = 0 ないし wheel のファイルは FreeBSDでは コマンド su を使用できますので、setgid されると同様に危険です。
このため、Webサーバー管理のため、ファイルシステムのマウント時に、mount(8) の nosuid オプションを指定し、setuid / setgid を無効とする方法があります(下表 /usr/ports /var/www ⇒Webサーバーを設置したところ)。
フリーソフト CGI にセキュリティ上のバグがあると、setuid(suid・sbit) された perl スクリプトと同様に非常に危険なものとなります。攻撃者によって、Web ページ"改ざん"など可能となります。
# vi /etc/fstab
---------
# Device Mountpoint FStype Options Dump Pass#

/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1c /usr ufs rw 2 2
/dev/ad0s1d /usr/ports ufs rw,nosuid 2 2
/dev/ad0s1f /var ufs rw 2 2
/dev/ad0s1g /var/www ufs rw,nosuid
2 2
/dev/acd0c /cdrom cd9660 ro,noauto 0 0
proc /proc procfs rw 0 0
-----------
マウント時に、mount コマンドでマウントオプション
# mount -o nosuid device mountpoint
でも設定可能です。

投稿者 support : 2004年01月22日 15:46

トラックバック

このエントリーのトラックバックURL:
trackbacklink 11

コメント

コメントしてください

サイン・インを確認しました、 . さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?




 Modified by Toshiaki YAMAMURA    Powered by Movable Type
 ■シックス・アパート株式会社より「個人用ライセンス」を取得し、Movable Type にて情報提供中です. ■ハンドル名とメールアドレスを入力すると、自由にコメント投稿できます. 但し、15歳未満のお子供は必ず保護者の指導・監督下で行って下さい. ■本ウエブログでは、サイト管理・運営者が著しく不利益と判断するコメントや他人を誹謗中傷するコメントは、直ちに削除いたします.