www.morihi-soc.net

誰もが安心して使える、安全なインターネットを目指して

noexecでマウントする

/tmp や /dev/shm のような一時ディレクトリはどのユーザアカウントでも書き込めるディレクトリであることは,ご存知だと思います.誰でも書き込めるということは,Webサービスの脆弱性を突かれて不正にファイルをアップロードされたり作成されたりした場合の,ファイル置き場になることがあります.

そこでもしこれらのような不正なファイルの置き場にされてしまったときに,少しでも影響を緩和する対策として,/tmp や /dev/shm をファイルの実行を禁止するオプションを指定してマウントすることが挙げられます.ファイルの実行を禁止しておけば,たとえファイルを不正に作成されてしまったとしても,実行ができないので,データの流出や外部への攻撃を防ぐことができることが期待されます.

今回はこのマウント方法について紹介します.

 

下記の説明では,CentOS 6.4(64bit 版)を用いており,/tmp を独立したパーティションとして作成したシステムで検証しています.その他のバージョンやディストリビューションでも同じように設定可能と思われますが,念のため,コマンドヘルプやマニュアルを参照してください.また設定する際は自己責任で,まずは検証環境で確認してから本番環境で試してください.

 

本題に入ります.

ファイルの実行を禁止するマウントコマンドのオプションは noexec です.この noexec オプションを指定してマウントされたパーティションに存在するプログラムは,実行権限を付与されていたとしても,プログラムを実行することはできません.さらに noexec 以外のオプションとして,nosuid と nodev というオプションがあります.これらの説明は省略しますが,どちらも/tmp や /dev/shm には不要な権限を削除し,使用制限を厳しくするものです.

 

また今回は /tmp と /dev/shm に対してのみマウントの制限をしていますが,/var/tmp というディレクトリも存在します.こちらは /tmp へのシンボリックリンクにすることで対策できます.

 

すでにマウントされているパーティションに対して,noexec で再度マウントするコマンドは次のとおりです.

# mount -o remount,noexec,nosuid,nodev /tmp

# mount -o remount,noexec,nosuid,nodev /dev/shm

※マウント状況の確認は mount コマンドのオプション無しで可能です.

 

実行例(noexec 指定前)

# mount
/dev/sda5 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda3 on /tmp type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/shm と /tmp の両方が rw の読み込み・書き込み権限だけのオプションでマウントされていることが分かります.

 

実行例(各オプション指定後)

# mount
/dev/sda5 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,noexec,nosuid,nodev)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda3 on /tmp type ext4 (rw,noexec,nosuid,nodev)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/shm と /tmp の両方が rw の読み込み・書き込み権限に加えて,noexec, nosuid, nodev のオプション込みでマウントされていることが分かります.

実際に noexec のオプションを指定してマウントし,プログラムが実行できないことを検証した動画を Youtube にアップロードしています.よければご覧ください.

noexec でマウント

またマウントコマンドによりマウントした状態は,OS を再起動するとオプションが消えてしまいます.そのため /etc/fstab へ noexec のオプションを追記することを忘れないでください.

※CentOS 6.4 ではインストール画面に従った手順でインストールすると /tmp が独立したパーティションになりません.インストール時に独立したパーティションを切っていることが前提です.

 

ここまで記事を読まれた方の中にはいないと思いますが,もしマウントって何? という方は,まず Linux の基礎知識から学習されることをオススメします.例えば,エルピーアイジャパンのLinux標準教科書Linuxサーバ構築標準教科書,最近公開されたLinuxセキュリティ標準教科書などを参照されると良いのではないでしょうか.


今回は /tmp や /dev/shm を noexec でマウントし,ファイル実行ができないようにする方法を解説しました.ファイル実行を禁止することで,データの流出や外部への攻撃を防ぐことが期待されます.

しかし,完全に侵入された場合(SSH の不正ログイン等)は,これらの一時ディレクトリではない場所でファイルを実行される可能性が高いです.あくまで不正にファイルを作成されてしまったときの,影響を緩和する対策であることを忘れないでください.

最近,流行りの Apache Magica を利用したと考えられる攻撃では,/tmp に不正なファイルを作成されることが多いです.もし/tmp がファイル実行を禁止する設定になっていれば,たとえ Apache Magica による攻撃が成功しファイルが作成されたとしても,実行は防げます.被害者から加害者になる瀬戸際です.そのため noexec でマウントは,一定の効果はあるのではないかと考えます.

Written by 森久

11月 19th, 2013 at 6:33 pm

Posted in Security