SUIDとSGID

Linux
この記事は約5分で読めます。

SUID/SGID は実行可能なファイルが持つ特殊な属性であり、主に コマンド実行者 ≠ ファイル所有者 の場面で使われます。

ファイル実行時の権限を所有者権限に一時的に引き上げて実行できます。

この属性(特にSUID)を持つファイルは権限昇格攻撃の経路になりやすいので、脆弱性ポイントとして重視されます。

名前がよく似ていますが、wifi接続でよく見かけるSSID(Service Set Identifier)とは無関係です。(最初はよく勘違いして混同してました。)

SUID属性

すべてのファイルには、所有者(u)、グループ内(g)、その他(o)の別に実行権が割り当てられています。(これは “chmod” コマンドで設定できます。)

が、例外として所有者でない実行者も所有者に成り代わって実行(所有者IDで実行)できるように設定することができます。

このとき付加される属性がSUID属性です。(これも “chmod” コマンドで設定できます。)

典型的な例は、 “$passwd” コマンドにSUID属性が付加されています。(一般ユーザーが “root” としてパスワード変更出来る)

この属性が付くと、所有者の “x” が “s” に変わります

-rwx

⬇️  SUID属性付加後

-rws

元々所有者に “x” 属性が無かった場合は、大文字の “S” が付きます(が、この設定のファイルはOSレベルで実行禁止にされています)

-rwS

SUIDの付加

以下で属性変更します。

SUIDの削除

SGID属性

SGID属性が付加されたファイルは所有グループ権限で実行出来ます。

複数のユーザーが、ある特定のグループの権限でファイル操作を行う必要がある場合などに使われます。

こちらは主にディレクトリに付与されることが多いようです。

ディレクトリに設定した場合は、新規ファイル作成時に所有グループが自動継承されます。(o+w属性の場合には、誰でも所有グループ権限でファイルを作成できるようになります)

この属性が付くと、所有グループの “x” が “s” に変わります

drwxr-x

⬇️  SGID属性付加後

drwxr-s

(元々所有グループに “x” 属性が無かった場合は、大文字の “S” が付きます)

drwxr-S

SGIDの付加

SGIDの削除

数字でのパーミッション設定

数字で設定する場合は、下記を合算した数字で指定します。

数字特殊ビット数字所有者数字グループ数字その他
4000SUID400読込40読込4読込
2000SGID200書込20書込2書込
1000Sticky(下記参照)100実行10実行1実行

Stickyビットについて

Stickyビットは、削除制御を設定する特殊属性です。

主にディレクトリに設定され、この設定により同一ディレクトリ上の他人のファイルの削除や名前変更が禁止されます。

設定方法

上記の数字による設定以外に下記の設定方法があります。

一般ユーザーの実行権限が “x” であった場合は、これが “t” に変わります。

drwxr-xr-t

一般ユーザーの実行権限が “-” であった場合は、これが “T” に変わります。

drwxr-xr-T

セキュリティ上の意味

SUID

特にSUIDが設定されたファイルは、一般ユーザーがroot権限でプログラムを実行できてしまうため、プログラムに脆弱性があるとシステム全体を危険にさらす可能性があります。

権限昇格の手掛かりとなるファイル(root権限を奪取される危険のあるファイル)になりえます。

SGID

SGIDがディレクトリに設定されている場合、そのディレクトリ内で作成されるファイルがすべて親ディレクトリと同グループに所属するように設定されます。

セキュリティ対策

1. 設定の最小化

SUID/SGIDの設定は必要最小限にとどめ、セキュリティに十分注意する必要があります。

2. 信頼できるコードのみに適用

SUIDを適用するプログラムは、セキュリティレビューが行われ、バッファオーバーフローなどの既知の脆弱性がないことが確認された信頼できるコードである必要があります。可能であれば、自身でコードを確認することが望ましいです。

3. ファイルシステムのマウントオプション

ファイルシステムをマウントする際に、nosuid オプションを使用することで、そのファイルシステム上のすべてのSUID/SGID実行ファイルの実行を無効化できます。これは、特に外部ストレージやユーザーが書き込み可能なパーティションに対して有効なセキュリティ対策です。

4. スティッキービットの利用 (共有ディレクトリ)

共有ディレクトリに対しては、SUID/SGIDの代わりにスティッキービット(パーミッションの8進数で 1xxx)の利用が推奨されます。

まとめ

SUIDやSGIDは脆弱性のポイントとなり得ます。

よってシステムの監査ツールには、SUID/SGID属性のあるファイルを列挙する機能があります。

コメント

タイトルとURLをコピーしました