sudoとは?使い方と悪用される権限昇格の手口を解説|サイバーセキュリティ.com

sudoとは?使い方と悪用される権限昇格の手口を解説



sudo(superuser do)は、LinuxやUnix系オペレーティングシステムにおいて、通常のユーザーが一時的にスーパーユーザー(root)権限でコマンドを実行できるようにするコマンドです。

本記事では、sudoの基本的な使い方から、sudoが悪用される権限昇格の具体的な手口、実際に発見された脆弱性事例までを解説します。

sudoとは

sudo(superuser do)は、LinuxやUnix系オペレーティングシステムにおいて、通常のユーザーが一時的にスーパーユーザー(root)権限でコマンドを実行できるようにするコマンドです。sudoコマンドを利用すると、システムの設定変更やインストール、管理用のコマンドを、管理者が指定したユーザーに限って実行することができます。

これにより、通常のユーザーがシステム管理を行う際に、root権限を全体に渡すことなく、特定の操作のみを許可できるため、セキュリティが向上します

sudoを使用するには、システムの`/etc/sudoers`ファイルで適切な設定が必要です。このファイルで、特定のユーザーやグループに対して、sudoを使用して実行できるコマンドの範囲や権限を指定します。

sudoの基本的な使い方

sudoコマンドを使用して特権操作を実行するための基本的な形式は以下の通りです。

sudo コマンド

例:sudoの使用例

システムをアップデート

sudo apt update

新しいパッケージのインストール

sudo apt install パッケージ名

特定のファイルを編集

sudo nano /etc/hostname

上記のコマンド例では、通常のユーザーがaptパッケージ管理コマンドやnanoエディタで設定ファイルを編集するためにsudoを使用しています。

sudoの主な機能

一時的な管理者権限の付与

sudoは、通常のユーザーが必要な時にのみ一時的に管理者権限を持てるようにするため、rootユーザーに直接アクセスするのではなく、システムの安全性を確保したまま管理作業が行えます。

ログの取得

sudoを使用したコマンドは、システムのログに記録されます。これにより、管理者はどのユーザーが、いつ、どのコマンドをsudoで実行したかを監視することができ、セキュリティ監査やトラブルシューティングに役立ちます。

パスワードの確認

sudoを使用すると、システムはユーザーのパスワードを確認し、認証が通った場合にのみ権限を付与します。この機能により、他の人が無断でsudoを使えないように制限がかかります。

権限のきめ細かい制御

sudoersファイルで設定を行うことにより、特定のユーザーやグループに対して、許可するコマンドのみを制限して権限を与えることができます。これにより、root権限全体ではなく、特定の操作にのみ権限を限定できるため、システム全体のセキュリティが強化されます。

sudoの便利なオプション

  • -l(–list):sudoで実行可能なコマンドのリストを表示します。sudo -l
  • -u(–user):指定したユーザー権限でコマンドを実行します。sudo -u ユーザー名 コマンド
  • -k(–reset-timestamp):sudoの認証情報をクリアし、再度パスワード入力を要求するようにします。sudo -k
  • –preserve-env(-E):環境変数を引き継いだまま、sudoコマンドを実行します。sudo -E コマンド
  • -i(–login):指定したユーザーのログインシェルに切り替わり、ログインした状態の環境でコマンドを実行します。sudo -i

sudoersファイルとsudoの関係

sudoを使用するには、システムの`/etc/sudoers`ファイルで許可されている必要があります。このファイルでは、特定のユーザーやグループに対して、実行できるコマンドや、パスワードなしで実行できるコマンドを指定できます。sudoersファイルはvisudoコマンドを使用して編集するのが一般的で、構文エラーのチェックが自動的に行われます。

sudoersファイルの例

ユーザーaliceが全コマンドをroot権限で実行可能

alice ALL=(ALL) ALL

グループadminsのメンバーがroot権限でコマンド実行可能

%admins ALL=(ALL) ALL

ユーザーbobが特定のコマンドをパスワードなしで実行可能

bob ALL=(ALL) NOPASSWD: /usr/bin/apt-get update

sudoとsuの違い

rootとして操作する方法には、sudoのほかに`su`コマンドもあります。両者は似て見えますが、権限モデルには重要な違いがあります。

sudo su
権限の範囲 1コマンドだけ昇格 以降すべての操作が昇格
パスワード 自分のパスワード rootのパスワードが必要
ログ記録 実行したコマンドが個別に記録される セッション単位でしか記録されない
リスク 比較的低い 比較的高い

sudoは、必要な時に必要な分だけ権限を昇格させ、かつ実行したコマンドが個別にログへ残るため、最小権限の原則に沿った運用がしやすい仕組みです。rootのパスワードを共有する必要がない点も、複数人で管理するサーバーでは大きな利点になります。

sudoを悪用した権限昇格の手口

sudoで実行できるコマンドを限定していても、限定しているコマンドによっては、攻撃者や内部犯に悪用され、意図しない操作をされてしまう場合があります。

スクリプト言語(Python/AWK)を使った権限昇格

sudoでの実行権限にPython、Perl、Ruby、AWKなど、スクリプト言語のバイナリを許可している場合、root権限で任意のコマンドが実行可能です。例えば、Pythonの標準ライブラリであるosモジュールを使用して、root権限のシェルにアクセスできてしまいます。

テキストエディタ/ファイル閲覧コマンド(vi/nano)を使った権限昇格

vi、vim、nanoなどのテキストエディタや、less、moreなどのファイル閲覧コマンドに対してsudoでの実行を許可している場合も、root権限で任意のコマンドが実行可能です。例えばviでは、起動時に`-c`オプションを付与したり、コマンドモードで外部コマンドを実行する機能を使ったりすることで、シェルへのアクセスが可能になります。

find/nmapなど他コマンドを経由した権限昇格

findコマンドは、検索結果に対して別のコマンドを実行する`-exec`オプションを使用することで、root権限のシェルにアクセスできます。ポートスキャナのnmapも、NSE(Nmap Scripting Engine)と呼ばれるスクリプト実行機能を悪用されると、同様にシェルへアクセスされる恐れがあります。

ほかにも、env・man・tar・cp・mv・chmod・scpなど、意図せず権限を付与している場合に悪用され得るコマンドは多数存在します。

これらの手口に共通するのは、「便利な機能の一部として、外部コマンドを実行できる仕組みを持つツール」が、そのままsudo経由での権限昇格の入口になってしまうという点です。sudoの実行権限を与えるコマンドを選ぶ際は、そのコマンド自体に他のプログラムを呼び出す機能がないかを確認することが重要です。

実際に発見された脆弱性事例(CVE-2021-3156)

sudoコマンド自体にも、過去に深刻な脆弱性が発見されています。2021年に公表されたCVE-2021-3156(通称「Baron Samedit」)は、許可されていないユーザーでもroot権限へのアクセスを可能にするバッファオーバーフローの脆弱性で、発見後にはベンダーによってエクスプロイトも公開されました

この事例は、sudoersの設定を適切に行っていても、sudoコマンド自体の脆弱性によって権限昇格を許してしまう可能性があることを示しています。

sudoを安全に使うための注意点

sudoのセキュリティ設定を正しく行うことで、通常のユーザーが必要な権限だけを使ってシステム管理ができるため、root権限を不用意に開放するリスクを減らせます。

  • 実行を許可するコマンドを必要最小限に絞る:権限のきめ細かい制御機能を活用し、業務に必要なコマンドだけを許可しましょう。
  • 許可するコマンドの悪用可能性を事前に確認する:vi・find・pythonなど、外部コマンドの実行機能を持つツールを許可する場合は特に注意が必要です。
  • NOPASSWDの設定は必要な範囲に限定する:パスワードなしで実行できるコマンドを広く設定すると、リスクが高まります。
  • sudoコマンド自体を最新の状態に保つ:CVE-2021-3156のような脆弱性に備え、OSやsudoパッケージのアップデートを定期的に適用しましょう。
  • ログを活用した監査を行う:sudoによるコマンド実行はシステムログに記録されるため、不正なアクセスやミスが発生した場合にトレースできる体制を整えておきましょう。

まとめ

sudoは、LinuxやUnix系システムにおいて通常のユーザーが一時的に管理者権限を使ってシステム管理操作を行うための便利かつ安全な手段です。sudoersファイルでユーザーやコマンドを細かく制御できるため、不要なroot権限の付与を避けつつ、安全なシステム運用が可能となります。

一方で、許可するコマンドの選び方を誤ると権限昇格に悪用されるリスクがあり、sudoコマンド自体の脆弱性も過去に報告されています。基本的な使い方だけでなく、こうした悪用の手口や脆弱性事例も踏まえたうえで、sudoersの設定を定期的に見直していくことが重要です。

SNSでもご購読できます。