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)を横取りする手法です。
この手法で攻撃者は、「正規のシステム管理者がログインして作業しているその隙に、パスワードを一切盗むことなく、無音でroot(最高権限)を強奪すること」を実現します。
認証のステルスバイパス:
攻撃者が一般ユーザー権限(または盗んだ一般アカウント)で侵入している際、通常はroot権限に昇格しようとするとパスワードの壁に突き当たります。しかし、本物の管理者が同じ端末で直前に sudo を使っていた場合、その「残り香(キャッシュ)」にタダ乗りすることで、パスワード検証プロセスを完全にスキップして特権を獲得できます。
ログの偽装・難読化:
パスワードを入力しないため、ブルートフォース(総当たり攻撃)のような派手なアラートが発生しません。また、実行されるプロセスはOSの仕様に従って承認されるため、一見すると「正規の管理者が続けて作業を行っている」かのように防衛側の目を欺くことができます。
LinuxやmacOSの sudo コマンドには、ユーザーがコマンドを打つたびに毎回パスワードを入力させる煩わしさを軽減するため、一度認証に成功するとデフォルトで「15分間(macOSは5分間など)」はパスワードの再入力を免除するという親切なキャッシュ機能が備わっています。
このキャッシュ情報は、システム内の特定のディレクトリに「タイムスタンプファイル(トークン)」として記録されます。
Linux(Ubuntu/CentOSなど):
/var/run/sudo/ts/ または /var/db/sudo/ 配下
macOS:
/var/db/sudo/ts/ 配下
攻撃者は、一般ユーザーのセッション(SSHの別画面や、侵害したWebサーバーのバックグラウンドプロセスなど)からこのキャッシュが有効な時間内に sudo コマンド(例: sudo -s)をハイジャック実行します。OSはタイムスタンプが有効期限内であることを確認し、攻撃者に対してパスワードを要求せず、そのままrootの支配権を差し出してしまいます。
この手法は、管理者がアクティブに作業しているサーバーや端末に攻撃者が「一般ユーザー」として既に潜入している状況で実行されます。
初期侵入と待機:
攻撃者はWebアプリケーションの脆弱性(RCE)などを悪用し、Linuxサーバー内に一般ユーザー(例: www-data や localuser)の権限でリバースシェルを確立し、潜伏します。
管理者のアクティビティ監視:
攻撃者はシステム内のプロセスやログイン状況を監視し、正規のシステム管理者が sudo コマンドを使ってメンテナンス業務(アップデートやサービスの再起動など)を行うのをじっと待ちます。
キャッシュの発生(トリガー):
管理者が sudo apt update などを実行し、パスワードを入力します。これにより、システム内に有効期限(15分間)のカウントダウンが刻まれたキャッシュトークンが生成されます。
便乗と特権実行(目的達成):
攻撃者は管理者が作業を終えて画面を離れた(しかしログアウトはしていない、あるいはキャッシュが残っている)絶妙なタイミングで、すかさず自身のシェルから以下のコマンドを実行します。
sudo -S sh -c "backdoor_command" < /dev/null(※ -S オプションなどを巧みに使い、OSに「キャッシュがあればそれを使え、なければエラーにしろ」と指示します。キャッシュが生きているため、パスワード入力なしで backdoor_command が root権限でバックグラウンド実行 されます)
永続化の設置:
獲得した一時的なroot権限を使い、前述の T1166(Setuidの付与)やアカウントの新規作成を行い、二度と締め出されない強固な裏口を完成させます。
利便性のために用意された「猶予時間(キャッシュ)」を極限まで絞り込むことがディフェンスの要です。
Sudoキャッシュタイムアウトの無効化(0分設定 ※最重要):
/etc/sudoers(または /etc/sudoers.d/ 内の設定ファイル)を編集し、共通設定(Defaults)のタイムアウト時間を 0 に変更します。これにより、キャッシュ機能自体が無効化され、sudo を実行するたびに毎回必ずパスワード入力が強制されるため、攻撃者の便乗(T1206)を根本から封圧できます。
/etc/sudoers 内に以下を記述
Defaults timestamp_timeout=0端末(TTY)ごとのチケット独立化(tty_tickets の有効化):
デフォルトで有効なOSが多いですが、tty_tickets オプションが有効であることを確認します。これが有効な場合、キャッシュは「同じターミナル画面(TTY)」の中でしか使い回せなくなります。これにより、攻撃者が別セッション(別のSSH画面やWebシェル)から割り込んでキャッシュを横取りするリスクを大幅に低減できます。
Defaults tty_ticketsSudo監査ログの集中監視:
/var/log/auth.log(Ubuntu系)や /var/log/secure(RedHat系)のログをSIEMに転送し、短時間のうちに異なるセッションや不自然な親プロセスから sudo が連続して成功していないかを相関分析します。
CWE-592: Authentication Bypass Issues(認証バイパスの問題)
一度の認証成功に紐づく有効期限(キャッシュ)の検証設計が緩く、同一システム内の他のセッションやプロセスからのなりすまし実行(認証のすり抜け)を許してしまう問題。
CWE-732: Incorrect Permission Assignment for Critical Resource(重要なリソースに対する不適切なアクセス権限の割り当て)
キャッシュファイルの保存先パーミッションの設定や、Sudoersファイルにおけるタイムアウトポリシーのデフォルト値が「利便性優先」で長く設定されており、攻撃者に悪用の時間的猶予を与えてしまう問題。
T1206(Sudo Caching)は、LinuxやmacOSを狙う高度な標的型マルウェア(主にサイバースパイ目的)のコンポーネントとして組み込まれることが非常に多いです。
sudo を実行するタイミングをバックグラウンドで監視し、/var/db/sudo/ts/ 配下のタイムスタンプが更新された(キャッシュが有効になった)瞬間に牙を剥きました。パスワードの再入力を求めるダイアログを出さずに、裏でルート権限のカスタム設定を流し込み、システムの踏み台化とキーロガーの設置を完全無音で成功させた事例として有名です。Linuxサーバーのセキュリティ運用において、「管理者が手動でサーバーをメンテナンスした直後のログ」を確認する際は注意が必要です。
管理者が作業を終えてターミナルの画面を開きっぱなしにして離席したり、SSHのセッションを切断せずに放置したりした場合、その猶予時間(15分間)はハッカーにとっての「ゴールデンタイム」になります。
インフラ運用ルールとして timestamp_timeout=0 を徹底するか、あるいは作業終了時に必ず sudo -k(強制的に現在のSudoキャッシュを即時破棄・リセットするコマンド)を実行することをエンジニアの習慣(手順書への組み込み)にすることが、この極めて実戦的な特権昇格を予防するための最も確実なブレイクスルーとなります。