Unixファミリーシステム(macOs、Linux、Solarisなど)が悪意のある攻撃者によって開発されたプログラムをインターネットにインストールしたシナリオを考えてみましょう。
プログラムは、特権を高めるためにシステムのゼロデーの脆弱性を使用しません。すべての制限を含む管理者ではなく、一般ユーザーのコンテキストで実行されます。ユーザーが端末に「su」と入力し、パスワードの入力を記録するまで、バックグラウンドですべてのキーストロークを記録します。このプログラムは突然rootユーザーのパスワードをキャプチャしました。
私の質問は、このパスワードをキャプチャした後にプログラムがrootユーザーのコンテキストでそれ自身を再開できるのか、それとも実行中に特権を昇格させ、現在のユーザーが気づかないようにするのかということです。そのようなプログラムがそのようなタスクを実行できるようにするユーティリティは何ですか?私はカーネルのバグや脆弱性が悪用されない理想的なシナリオについて話しています。私は、既存のシステムユーティリティをもともと意図したとおりに使用するプログラムについて話しています。
答え1
expect
これは、このプログラム(および同様のプログラム)が実行するように設計されています。su
で実行しexpect
、パスワードプロンプトを検出し、パスワード(キャプチャ)を送信してからコマンドを送信できるルートシェルを持つことができます。
例えば
#!/usr/bin/expect --
set mypasswd "imnottellingyou"
spawn "su"
expect "ssword"
send "$mypasswd\n"
expect "#"
interact
答え2
はい。su
を実行してsu
ユーザーのパスワードを変更できるプログラムです。su
ユーザーを変更する機能があり、正しいパスワードを入力した場合にのみこれを実行してください。
ただし、これを行う唯一の方法は、新しいプロセスを開始するか、既存のプロセスのプログラムを置き換えることです。その後、新しい権限で再起動できます。
賢明な注意:プロセスはエスカレーションを通じて権限をエスカレーションできますsu
。しかし、プログラムはできません。ただし、新しいプログラム(su
)は古いプログラムを再起動できます。