実装の概要 マイクロソフトWindows macOS UnixおよびUnixライク
セキュリティに関する考慮事項
セキュリティ上の大きな懸念事項の一つは、悪意のあるアプリケーションがキー入力やマウスクリックをシミュレートし、セキュリティ機能を欺いたり偽装したりして、悪意のあるアプリケーションに高い権限を付与する可能性があることです。
ターミナルベースのクライアント(スタンドアロンまたはデスクトップ/GUI内)を使用する場合: su とsudoは ターミナルで実行されるため、入力の偽装に対して脆弱です。もちろん、ユーザーがマルチタスク環境(つまり、シェル内で単一ユーザーのみ)を実行していない場合は、これは問題になりません。ターミナルウィンドウは通常、ユーザーに対して通常のウィンドウとして表示されるため、インテリジェントなクライアントまたはクライアントとして使用されるデスクトップシステムでは、ユーザーはデスクトップ上の他のマルウェアが入力を操作、シミュレート、またはキャプチャすることを防ぐ責任を負わなければなりません。オペレーティングシステムに密接に統合されたGUI/デスクトップを使用する場合: 一般的に、デスクトップシステムは、パスワードやその他の認証を要求する前に、すべての一般的な入力手段をロックまたは保護し、傍受、改ざん、またはシミュレートできないようにします。PolicyKit ( GNOME - X サーバーにすべてのキーボードとマウスの入力をキャプチャするように指示します。PolicyKitを使用する他のデスクトップ環境では、独自のメカニズムを使用する場合があります。gksudo - デフォルトではキーボード、マウス、ウィンドウフォーカスを「ロック」し、[ 17 ] 実際のユーザー以外がパスワードを入力したり、確認ダイアログ に干渉したりすることを防止します。UAC (Windows) - デフォルトではセキュア デスクトップ で実行され、悪意のあるアプリケーションが「許可」ボタンをクリックしたり、確認ダイアログに干渉したりするのを防ぎます。[ 18 ] このモードでは、ユーザーのデスクトップは暗く表示され、操作できません。gksudo の「ロック」機能または UAC のセキュア デスクトップのいずれかが侵害または無効化された場合、悪意のあるアプリケーションは、キーストローク ロギング を使用して管理者のパスワードを記録することによって管理者権限を取得できます。または、UAC の場合、管理者として実行されている場合は、「許可」ボタンのマウス クリックを偽装できます。このため、音声認識もダイアログとの対話が禁止されています。gksuパスワード プロンプトは特別な権限なしで実行されるため、悪意のあるアプリケーションは、 strace ツールなどを使用してキーストローク ロギングを実行できることに注意してください。[ 19 ] (ptrace は後のカーネル バージョンで制限されました) [ 20 ]
偽の認証ダイアログ もう一つのセキュリティ上の懸念事項は、悪意のあるソフトウェアが正規のセキュリティ確認要求に見せかけたダイアログを偽装 できることです。ユーザーが偽のダイアログを正規のものだと信じて認証情報を入力した場合、悪意のあるソフトウェアはユーザーのパスワードを知ることになります。セキュアデスクトップなどの機能が無効になっている場合、悪意のあるソフトウェアはそのパスワードを使ってより高い権限を取得する可能性があります。
UACは Windows 11でセキュアな注意シーケンスを要求し、ログインのなりすましを防ぐために、ユーザーに最初にCtrl+Alt+Deleteを押して資格情報を入力するように求めます。 使いやすさの観点からデフォルトの動作ではありませんが、UAC は 認証プロセスの一部として、ユーザーにCtrl+Alt+Del キー を押すことを要求するように構成できます(セキュア アテンション シーケンス として知られています)。このキーの組み合わせを検出できるのは Windows だけなので、この追加のセキュリティ対策を要求することで、偽のダイアログが正規のダイアログと同じように動作することを防ぐことができます。[ 21 ] たとえば、偽のダイアログではユーザーにCtrl + Alt + キー Del を押すように求められないため、ユーザーはダイアログが偽物であることに気づくことができます。または、ユーザーが Ctrl+Alt+Del キーを押した場合、UAC 確認ダイアログではなく、通常 Ctrl+Alt+Del キーを押したときに表示される画面が表示されます。このようにして、ユーザーはダイアログが悪意のあるソフトウェアにパスワードを入力させようとする試みかどうかを判断できます。 GNOMEでは、PolicyKitは システムの構成に応じて異なるダイアログを使用します。たとえば、指紋リーダー を搭載したシステムの認証ダイアログは、指紋リーダーを搭載していないシステムの認証ダイアログとは異なる可能性があります。アプリケーションはPolicyKitの構成にアクセスできないため、どのダイアログが表示されるかを知る方法がなく、したがってそれを偽装する方法もありません。[ 22 ]
ユーザビリティに関する考慮事項 これらの実装において考慮されたもう一つの点は、ユーザビリティ です。
管理者アカウントを別途用意する su では 、ユーザーは少なくとも 2 つのアカウントのパスワードを知っている必要があります。通常使用するアカウントと、root などのより高い権限を持つアカウントです。sudo 、kdesu 、gksudoは よりシンプルな方法を採用しています。これらのプログラムでは、ユーザーは特定の管理タスクへのアクセス権限が事前に付与されていますが、アプリケーションがその権限で実行されるためには、明示的に承認する必要があります。ユーザーはスーパーユーザーや他のアカウントのパスワードではなく、自身のパスワードを入力します。pfexec は 、ユーザーアカウントの代わりに「プロファイル」を使用してユーザーに権限を付与します。[ 15 ] 各プロファイルは、特定のコマンドと認証を実行するためのアクセス権を付与し、そのプロファイルが実行する機能にちなんで命名されます。(たとえば、ユーザーは、およびを実行できるようにするために、「監査管理」プロファイルを使用できる必要があり/usr/sbin/auditます/usr/sbin/auditconfig。[ 16 ] )UAC とAuthenticateは 、これら2つの概念を1つに統合したものです。これらのプログラムを使用すると、管理者はプログラムをより高い権限で実行することを明示的に承認できます。管理者以外のユーザーは、管理者のユーザー名とパスワードの入力を求められます。PolicyKitは 、これらのアプローチのいずれかを採用するように構成できます。実際には、配布元がいずれかを選択します。
対話の簡潔さ アプリケーションに管理者権限を付与するために、sudo 、[ 23 ] gksudo 、およびAuthenticate は管理者にパスワードの再入力を促します。 UAC では、標準ユーザーとしてログインしている場合、アプリケーションに管理者権限を付与する必要があるたびに、管理者名とパスワードを入力する必要があります。しかし、Administrators グループのメンバーとしてログインしている場合は、(デフォルトでは)毎回パスワードを再入力する代わりに、確認または拒否するだけです(ただし、再入力もオプションとしてあります)。デフォルトの方法はよりシンプルですが、セキュリティは低くなります。[ 21 ] ユーザーがコンピューターをロックせずに物理的に離れると、他の人が近づいてシステムに対する管理者権限を取得できてしまう可能性があるためです。PolicyKitでは 、ユーザーにパスワードの再入力、または別の認証手段(指紋認証など)の提供を要求します。
認証情報を保存 UACは 、プログラムの権限昇格が呼び出されるたびに、承認を求めます。sudo [ 7 ] gksudo およびkdesu は、プログラムの 権限 昇格のために呼び出されるたびにユーザーにパスワードの再入力を求めません。代わりに、ユーザーは起動時に一度だけパスワードを求められます。ユーザーが一定期間管理者権限を使用していない場合 (sudo のデフォルトは 5 分[ 7 ] )、ユーザーはパスワードを再度入力するまで再び標準ユーザー権限に制限されます。sudo のアプローチは、セキュリティと使いやすさのトレードオフです。一方では、一連の管理者タスクを実行するために、ユーザーは各タスクごとにパスワードを入力するのではなく、パスワードを一度だけ入力すれば済みます。しかし同時に、タイムアウト前にこれらのコマンドのいずれかがプレフィックスとして付加された、その tty で実行されるすべてのプログラム ( sudo の場合) またはターミナルで実行されていないすべてのプログラム (gksudo と kdesu の場合) が管理者権限を取得するため、攻撃対象領域が大きくなります。セキュリティを重視するユーザーは、sudo が使用された各 tty または pts からコマンドを使用して、必要なタスクを完了したら一時的な管理者権限を削除できます(pts の場合、ターミナル エミュレータを閉じるだけでは不十分 です)。kdesu の同等のコマンドは です。gksudo には同じことを行うオプションはありませんが、ターミナル インスタンス内で実行しない (たとえば、 [+ アプリケーションの実行] ダイアログボックスで [ターミナルで実行] のチェックを外す) とすれば、目的の効果が得られます。sudo -kkdesu -ssudo -kAlt F2 Authenticateは パスワードを保存しません。ユーザーが標準ユーザーの場合は、ユーザー名とパスワードを入力する必要があります。ユーザーが管理者の場合は、現在のユーザー名が既に入力されているため、パスワードを入力するだけで済みます。ユーザー名は変更可能で、別のユーザーとして実行することもできます。アプリケーションは一度だけ認証を必要とし、その認証はアプリケーションが権限を必要とする際に要求されます。一度権限が昇格されると、アプリケーションは終了して再起動されるまで、再度認証する必要はありません。 ただし、認証にはさまざまなレベルがあり、これらは「権限」と呼ばれます。要求された権限は、パスワードの下にある「詳細」の横にある三角形を展開することで確認できます。通常、アプリケーションは system.privilege.admin を使用しますが、セキュリティのために低い権限、より高いアクセスが必要な場合は高い権限など、別の権限が使用される場合もあります。アプリケーションが持つ権限がタスクに適していない場合、権限レベルを上げるために再度認証が必要になることがあります。 PolicyKitは 、これらのどちらのアプローチを採用するように設定できます。
管理権限が必要なタイミングを特定する オペレーティングシステムがユーザーに認証を求めるタイミングを把握するためには、アプリケーションまたはアクションが、管理者権限を必要とするものであることを明示する必要があります。技術的には、そのような権限を必要とする操作が実行されるまさにその瞬間にユーザーに認証を求めることは可能ですが、タスクの途中で権限を要求するのは必ずしも理想的ではありません。ユーザーが適切な認証情報を提供できなかった場合、管理者権限が必要になる前に実行された作業はやり直さなければならず、タスクを最後まで完了させることができないためです。
Microsoft WindowsのコントロールパネルやMac OS Xの環境設定パネルといったユーザーインターフェースの場合、適切なタイミングで(例えば、管理者のみが閲覧できる情報を表示する前など)ユーザーに認証ダイアログが表示されるように、権限要件がシステムにハードコーディングされています。オペレーティングシステムによって、アプリケーションがセキュリティ要件を識別する方法は異なります。
sudo は 、すべての特権認証情報を単一の設定ファイル sudoers に集約します。sudoers/etc/sudoersには、ユーザーとそのユーザーが使用を許可されている特権アプリケーションおよびアクションのリストが含まれています。sudoers ファイルの文法は、コマンドライン パラメータに制限を設けるなど、さまざまなシナリオに対応できる柔軟性を持つように設計されています。たとえば、root アカウントを除くすべてのユーザーのパスワードを変更する権限をユーザーに付与するには、次のように記述します。ピート ALL = /usr/bin/passwd [Az]*, !/usr/bin/passwd root pfexec (およびpfsh 、pfedit などの関連コマンド) は、権限認可情報を複数の設定ファイル ( /etc/user_attr、/etc/security/prof_attrおよび) に分割します。各ファイルの構文は、おおよそ/etc/passwd /etc/security/exec_attrで使用される形式に従います。は、ユーザー アカウントに関連付けられた追加の属性を指定します。これには、属性を使用して追加される、アカウントが使用できるプロファイルが含まれます。[ 24 ] は 、プロファイルとその基本権限および認可を定義します。また、プロファイルのヘルプ ファイルの場所も含まれます。[ 25 ] は、で定義されたプロファイルで実行が許可されているコマンドとデーモンを指定します。[ 26 ] user_attrprofiles=prof_attrexec_attrprof_attrユーザーアカウント制御は、 ヒューリスティックスキャンと「アプリケーションマニフェスト」を組み合わせて、アプリケーションが管理者権限を必要とするかどうかを判断します。[ 27 ] マニフェスト(.manifest )ファイルは、Windows XPで初めて導入されたもので、アプリケーションと同じ名前で拡張子が「.manifest」のXML Notepad.exe.manifestファイルです。例:アプリケーションが起動されると、マニフェストが参照され、アプリケーションのセキュリティ要件に関する情報が調べられます。たとえば、次のXMLフラグメントは、アプリケーションが管理者アクセスを必要とするが、アプリケーション以外のユーザーデスクトップの他の部分への無制限のアクセスは必要としないことを示します。<security> <requestedPrivileges> <requestedExecutionLevel level= "requireAdministrator" uiAccess= "false" /> </requestedPrivileges> </security> マニフェストファイルは、埋め込みリソース としてアプリケーション実行ファイル自体にコンパイルすることもできます。ヒューリスティックスキャンも主に下位互換性のために使用されます。その一例として、実行ファイルのファイル名を調べます。ファイル名に「Setup」という単語が含まれている場合、その実行ファイルはインストーラであるとみなされ、アプリケーションが起動する前にUACプロンプトが表示されます。[ 28 ] UAC は、署名付き実行ファイルと署名なし実行ファイルからの昇格要求を区別し、前者の場合は発行元が「Windows Vista」であるかどうかも区別します。プロンプトの色、アイコン、文言はそれぞれ異なり、たとえば、実行ファイルが署名されていない場合は、署名されている場合よりも警告の度合いが強くなるようにしています。[ 29 ] PolicyKit を使用するアプリケーションは、認証を求める際に特定の権限を要求し、PolicyKitはアプリケーションに代わってそれらの操作を実行します。認証を行う前に、ユーザーはどのアプリケーションがその操作を要求したか、そしてどのような操作が要求されたかを確認できます。
関連項目 特権昇格は 、セキュリティ上の脆弱性を悪用する手法の一種である。最小権限の原則 (セキュリティ設計パターン)特権ID管理とは 、特権アカウントを管理するための方法論である。特権パスワード管理は 、特権ID管理と同様の概念です。 すなわち、特権パスワードを定期的にスクランブルする。 パスワード値を安全で可用性の高い保管庫に保存する。 これらのパスワードをいつ、どのように、誰に開示するかに関するポリシーを適用する。
参考文献 ↑ 「ユーザーアカウント制御の概要」。マイクロソフト 。2006年10月2日。2011年8月22日にオリジナルからアーカイブ。2007年3月12日 に取得。 ↑ 「Runas」 。Windows XP 製品ドキュメント 。Microsoft 。 2007年3月13日 取得 。 ↑ " 「RunAs」の基本(および中級)トピック」。Aaron Margosis の WebLog。MSDN ブログ。2004 年 6 月 23 日。2007年 3 月 13 日 に取得 。↑ 「Windows 用 Sudo」 。2025-07-22。 ↑ 「PolicyKitについて」 。PolicyKit 言語リファレンスマニュアル 。2007年。 2012年2月18日に オリジナルからアーカイブ済み 。 2017年11月3日 に取得。 ↑ ミラー、トッド C. 「須藤の簡単な歴史」 。 2007年2月22日の オリジナルからアーカイブ。 2007年3月12日 取得 。 1 2 3 ミラー、トッド C. 「須藤の要点」 。 2007年7月1日 取得 。 ↑ 「GKSuホームページ 」 ↑ 「Gnome wiki の gksu PolicyKit」 。 ↑ Bellevue Linux (2004-11-20). "The KDE su Command" . 2007-02-02 の オリジナルからアーカイブ済み 。2007-03-12 に 取得 。 ↑ Canonical Ltd. (2007-08-25). "GutsyGibbon/Tribe5/Kubuntu" . 2007-09-18 に取得。 ↑ beesu の詳細については、 Wayback Machine の アーカイブ (2011 年 7 月 25 日) をご覧ください。Koji からダウンロードできます ↑ "OpenBSD 5.8" . www.openbsd.org . 2021年5月17日にオリジナルから アーカイブ済み 。 2020年5月6日 に取得。 1 2 Sun Microsystems (1999-09-10). "pfexec - Oracle man pages section 1: User Commands" . 2025-03-05 に取得。 1 2 "illumos: マニュアルページ: pfexec.1" . 2016-07-08 . 2025-03-05 に取得 . 1 2 "illumos: マニュアルページ: profiles.1" . 2018-01-07 . 2025-03-05 に取得 . ↑ "gksu - Gtk+ su フロントエンド Linux マニュアルページ" 。2011-07-15 の オリジナルからアーカイブ済み 。2007-08-14 に 取得 。 ↑ 「セキュアデスクトップでのユーザーアカウント制御プロンプト」 。UACBlog。Microsoft 。 2006 年5月3日 。 2007年3月4日 取得 。 ↑ 「gksu: マウス/キーボードをロックしてもキーロギングを防ぐには不十分」 。 ↑ 「ptrace保護」 。 1 2 Allchin, Jim (2007-01-23). "セキュリティ機能 vs. 利便性" . Windows Vista チームブログ . Microsoft . 2007-03-12 に取得. ↑ 「認証エージェント」 。2007年。 2012年2月18日に オリジナル からアーカイブ済み 。 2017年11月15日 に取得。 ↑ ミラー、トッド C. 「Sudoers Manual」 。 2007年3月12日 取得 。 ↑ "illumos: マニュアルページ: user_attr.5" . 2020-10-01 . 2025-03-05 に取得 . ↑ "illumos: マニュアルページ: prof_attr.5" . 2018-01-18 . 2025-02-25 に取得 . ↑ "illumos: マニュアルページ: exec_attr.5" . 2017-08-03 . 2025-03-05 に取得 . ↑ 「最小権限環境でのアプリケーション開発における開発者向けベストプラクティスとガイドライン」 。MSDN。Microsoft 。 2007 年3月15日 取得 。 ↑ 「Windows Vista におけるユーザー アカウント制御の理解と構成」 。TechNet。Microsoft。2007 年 3 月 15 日 に取得 。 ↑ 「アクセシビリティ対応のUACプロンプト」 。Windows Vistaブログ 。Microsoft。 2008年1月27日の オリジナルからアーカイブ済み。 2008年2月13日 取得 。