Trusted Design

T1206 - Sudo Caching

概要

The sudo command "allows a system administrator to delegate authority to give certain users (or groups of users) the ability to run some (or all) commands as root or another user while providing an audit trail of the commands and their arguments." (Citation: sudo man page 2018) Since sudo was made for the system administrator, it has some useful configuration features such as a timestamp_timeout that is the amount of time in minutes between instances of sudo before it will re-prompt for a password. This is because sudo has the ability to cache credentials for a period of time. Sudo creates (or touches) a file at /var/db/sudo with a timestamp of when sudo was last run to determine this timeout. Additionally, there is a tty_tickets variable that treats each new tty (terminal session) in isolation. This means that, for example, the sudo timeout of one tty will not affect another tty (you will have to type the password again).

Adversaries can abuse poor configurations of this to escalate privileges without needing the user's password. /var/db/sudo's timestamp can be monitored to see if it falls within the timestamp_timeout range. If it does, then malware can execute sudo commands without needing to supply the user's password. When tty_tickets is disabled, adversaries can do this from any tty for that user.

The OSX Proton Malware has disabled tty_tickets to potentially make scripting easier by issuing echo \'Defaults !tty_tickets\' >> /etc/sudoers (Citation: cybereason osx proton). In order for this change to be reflected, the Proton malware also must issue killall Terminal. As of macOS Sierra, the sudoers file has tty_tickets enabled by default.

管理者によるコメント

T1206は「Sudo Caching(Sudoキャッシュの悪用)」として定義される、LinuxおよびmacOS環境を標的にした非常に巧妙な「特権昇格(Privilege Escalation)」のテクニックです。

システム管理者が一度 sudo コマンドを実行した際にOS側で一定時間保存される「認証パスワードの免除キャッシュ(有効期限内トークン)」に攻撃者が便乗し、パスワードを入力することなく最高権限(root)を横取りする手法です。

1. 概要(攻撃者は何を実現できるのか?)

この手法で攻撃者は、「正規のシステム管理者がログインして作業しているその隙に、パスワードを一切盗むことなく、無音でroot(最高権限)を強奪すること」を実現します。

2. 攻撃の仕組み(Sudoタイマーの悪用)

LinuxやmacOSの sudo コマンドには、ユーザーがコマンドを打つたびに毎回パスワードを入力させる煩わしさを軽減するため、一度認証に成功するとデフォルトで「15分間(macOSは5分間など)」はパスワードの再入力を免除するという親切なキャッシュ機能が備わっています。

このキャッシュ情報は、システム内の特定のディレクトリに「タイムスタンプファイル(トークン)」として記録されます。

攻撃者は、一般ユーザーのセッション(SSHの別画面や、侵害したWebサーバーのバックグラウンドプロセスなど)からこのキャッシュが有効な時間内に sudo コマンド(例: sudo -s)をハイジャック実行します。OSはタイムスタンプが有効期限内であることを確認し、攻撃者に対してパスワードを要求せず、そのままrootの支配権を差し出してしまいます。

3. 攻撃の流れ

この手法は、管理者がアクティブに作業しているサーバーや端末に攻撃者が「一般ユーザー」として既に潜入している状況で実行されます。

  1. 初期侵入と待機:
    攻撃者はWebアプリケーションの脆弱性(RCE)などを悪用し、Linuxサーバー内に一般ユーザー(例: www-datalocaluser)の権限でリバースシェルを確立し、潜伏します。

  2. 管理者のアクティビティ監視:
    攻撃者はシステム内のプロセスやログイン状況を監視し、正規のシステム管理者が sudo コマンドを使ってメンテナンス業務(アップデートやサービスの再起動など)を行うのをじっと待ちます。

  3. キャッシュの発生(トリガー):
    管理者が sudo apt update などを実行し、パスワードを入力します。これにより、システム内に有効期限(15分間)のカウントダウンが刻まれたキャッシュトークンが生成されます。

  4. 便乗と特権実行(目的達成):
    攻撃者は管理者が作業を終えて画面を離れた(しかしログアウトはしていない、あるいはキャッシュが残っている)絶妙なタイミングで、すかさず自身のシェルから以下のコマンドを実行します。

    • コマンドの例:
      sudo -S sh -c "backdoor_command" < /dev/null

    (※ -S オプションなどを巧みに使い、OSに「キャッシュがあればそれを使え、なければエラーにしろ」と指示します。キャッシュが生きているため、パスワード入力なしで backdoor_commandroot権限でバックグラウンド実行 されます)

  5. 永続化の設置:
    獲得した一時的なroot権限を使い、前述の T1166(Setuidの付与)やアカウントの新規作成を行い、二度と締め出されない強固な裏口を完成させます。

4. 防御・対策

利便性のために用意された「猶予時間(キャッシュ)」を極限まで絞り込むことがディフェンスの要です。

5. 関連する主なCWE

6. 関連する代表的な事例・マルウェア

T1206(Sudo Caching)は、LinuxやmacOSを狙う高度な標的型マルウェア(主にサイバースパイ目的)のコンポーネントとして組み込まれることが非常に多いです。

実務上のアドバイス:

Linuxサーバーのセキュリティ運用において、「管理者が手動でサーバーをメンテナンスした直後のログ」を確認する際は注意が必要です。

管理者が作業を終えてターミナルの画面を開きっぱなしにして離席したり、SSHのセッションを切断せずに放置したりした場合、その猶予時間(15分間)はハッカーにとっての「ゴールデンタイム」になります。

インフラ運用ルールとして timestamp_timeout=0 を徹底するか、あるいは作業終了時に必ず sudo -k(強制的に現在のSudoキャッシュを即時破棄・リセットするコマンド)を実行することをエンジニアの習慣(手順書への組み込み)にすることが、この極めて実戦的な特権昇格を予防するための最も確実なブレイクスルーとなります。

分析

この攻撃手法を利用する脅威アクター

関連する CVE

攻撃手法 – 脅威アクター Graph


← Technique一覧に戻る ← Tactics一覧に戻る