SUID/SGID は実行可能なファイルが持つ特殊な属性であり、主に コマンド実行者 ≠ ファイル所有者 の場面で使われます。
ファイル実行時の権限を所有者権限に一時的に引き上げて実行できます。
- SUID:Set User ID
- SGID:Set Group ID
この属性(特にSUID)を持つファイルは権限昇格攻撃の経路になりやすいので、脆弱性ポイントとして重視されます。
名前がよく似ていますが、wifi接続でよく見かけるSSID(Service Set Identifier)とは無関係です。(最初はよく勘違いして混同してました。)
SUID属性
すべてのファイルには、所有者(u)、グループ内(g)、その他(o)の別に実行権が割り当てられています。(これは “chmod” コマンドで設定できます。)
が、例外として所有者でない実行者も所有者に成り代わって実行(所有者IDで実行)できるように設定することができます。
このとき付加される属性がSUID属性です。(これも “chmod” コマンドで設定できます。)
典型的な例は、 “$passwd” コマンドにSUID属性が付加されています。(一般ユーザーが “root” としてパスワード変更出来る)
この属性が付くと、所有者の “x” が “s” に変わります
-rwxr-xr-x

⬇️ SUID属性付加後
-rwsr-xr-x

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

SUIDの付加
以下で属性変更します。
chmod u+s ファイル名
SUIDの削除
chmod u-s ファイル名
SGID属性
SGID属性が付加されたファイルは所有グループ権限で実行出来ます。
複数のユーザーが、ある特定のグループの権限でファイル操作を行う必要がある場合などに使われます。
こちらは主にディレクトリに付与されることが多いようです。
ディレクトリに設定した場合は、新規ファイル作成時に所有グループが自動継承されます。(o+w属性の場合には、誰でも所有グループ権限でファイルを作成できるようになります)
この属性が付くと、所有グループの “x” が “s” に変わります
drwxr-xr-x

⬇️ SGID属性付加後
drwxr-sr-x

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

SGIDの付加
chmod g+s ファイル名
SGIDの削除
chmod g-s ファイル名
数字でのパーミッション設定
数字で設定する場合は、下記を合算した数字で指定します。
chmod 数字 ファイル名
| 数字 | 特殊ビット | 数字 | 所有者 | 数字 | グループ | 数字 | その他 |
|---|---|---|---|---|---|---|---|
| 4000 | SUID | 400 | 読込 | 40 | 読込 | 4 | 読込 |
| 2000 | SGID | 200 | 書込 | 20 | 書込 | 2 | 書込 |
| 1000 | Sticky(下記参照) | 100 | 実行 | 10 | 実行 | 1 | 実行 |
Stickyビットについて
Stickyビットは、削除制御を設定する特殊属性です。
主にディレクトリに設定され、この設定により同一ディレクトリ上の他人のファイルの削除や名前変更が禁止されます。
設定方法
上記の数字による設定以外に下記の設定方法があります。
chmod +t ディレクトリ名
一般ユーザーの実行権限が “x” であった場合は、これが “t” に変わります。

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

- スティッキービット (
tまたはT): ディレクトリに設定すると、ファイル所有者、root、またはディレクトリ所有者以外は、たとえ書き込み権限があっても、他のユーザーが作成したファイルを削除したり名前を変更したりできなくなります。
セキュリティ上の意味
SUID
特にSUIDが設定されたファイルは、一般ユーザーがroot権限でプログラムを実行できてしまうため、プログラムに脆弱性があるとシステム全体を危険にさらす可能性があります。
権限昇格の手掛かりとなるファイル(root権限を奪取される危険のあるファイル)になりえます。
- 脆弱なプログラムの利用: プログラム自体にバッファオーバーフローなどのセキュリティ上の脆弱性がある場合、悪意のあるユーザーは細工した入力を与えることで、root権限を利用してシステム上で任意のコードを実行し、完全な制御を奪うことができます。
- シェル起動: SUIDが設定されたプログラムが、簡単に別のシェル(例:
/bin/sh)をroot権限で起動できるように作られていた場合、一般ユーザーが容易にrootシェルを取得できてしまいます。
SGID
SGIDがディレクトリに設定されている場合、そのディレクトリ内で作成されるファイルがすべて親ディレクトリと同グループに所属するように設定されます。
- 意図しない情報共有: 誤って機密性の高いグループのディレクトリにSGIDを設定し、さらにそのディレクトリのグループへの書き込み権限(
w)を開放している場合、そのグループに属するすべてのユーザーが機密ファイルを作成・閲覧・変更できるようになり、機密性が損なわれます。
セキュリティ対策
1. 設定の最小化
SUID/SGIDの設定は必要最小限にとどめ、セキュリティに十分注意する必要があります。
2. 信頼できるコードのみに適用
SUIDを適用するプログラムは、セキュリティレビューが行われ、バッファオーバーフローなどの既知の脆弱性がないことが確認された信頼できるコードである必要があります。可能であれば、自身でコードを確認することが望ましいです。
3. ファイルシステムのマウントオプション
ファイルシステムをマウントする際に、nosuid オプションを使用することで、そのファイルシステム上のすべてのSUID/SGID実行ファイルの実行を無効化できます。これは、特に外部ストレージやユーザーが書き込み可能なパーティションに対して有効なセキュリティ対策です。
4. スティッキービットの利用 (共有ディレクトリ)
共有ディレクトリに対しては、SUID/SGIDの代わりにスティッキービット(パーミッションの8進数で 1xxx)の利用が推奨されます。
まとめ
SUIDやSGIDは脆弱性のポイントとなり得ます。
よってシステムの監査ツールには、SUID/SGID属性のあるファイルを列挙する機能があります。

コメント