(もちろん)通常のユーザーとしてXにログインし、ターミナルを開いてroot
に切り替えます:
su -
次に、ユーザーが所有している端末を持っていますが、事実上root権限が必要です。
この状況でセキュリティの問題はありますか?
通常のユーザーで実行されているマルウェア/エクスプロイトがルートコンソールにアクセスできる可能性があります(おそらくXサーバーのバグを悪用することによって?)
これは、テキストコンソールに切り替えた場合よりも安全ではありませんか(Ctrl+Alt+F1)そしてルートとして直接ログインしますか?
su -
を使用してrootに切り替えるたびにrootパスワードを入力する必要があります
はい、テキストコンソールに切り替えて直接rootとしてログインする場合よりも安全性が低くなります。
証明1:
端末にrootとしてログインしている場合、別のプロセスがその端末にコマンドを送信できます。
シンプルな概念実証:
$ xdotool mousemove 100 100クリック1 && xdotoolキーl && xdotoolキーs && xdotoolキーKP_Enter
証明2:
xinputはすべてのキーボードストロークを読み取ることができます
使用する
$ xinputリスト
キーボードのIDを特定し、
$ xinputテストID
どのキーストロークが押されたかを確認します。これにより、suターミナルからのキーストロークも表示され、パスワードが明らかになります。
権限の低いユーザーが自分の権限でマルウェアを実行した場合、そのマルウェアがユーザーのパスを変更し、別の「su」実行可能ファイルを作成した可能性があります。低い特権のユーザーとして端末を開くと、悪のsuが最初にパスにあるため、パスワードの入力を求められたときに、パスワードの制御を失っています。
これは、テキストコンソールに切り替えてrootとしてログインした場合は回避されます。ただし、自分でテキストコンソールログインに切り替え、suでrootに切り替えると、Xからこれを行うのと同じ状況になります。マルウェアがctrl + alt + F1を傍受し、ユーザー名を入力するように仕向ける可能性があることに注意してください。とパスワードですが、これははるかに難しく、より多くの特権が必要になる可能性があります。
また、ローカルの権限昇格は非常に一般的であるため、マルウェアが任意のユーザーとして実行されると、そのマルウェアが権限昇格を通じてルートを取得できる可能性があることに注意してください。
私はLinuxの内部にはあまり慣れていません。そのため、この答えを少し理解してください。
通常のユーザーとしてXサーバーにログインすると、生成されたすべてのプロセスは、そのユーザーに付与された特権を持ちます。プロセスはシステムへのアクセスを制限されており、その範囲はオペレーティングシステムの構成によって適用されますが、他のユーザープロセスと自由に対話できます。このため、プロセスメモリアドレス空間はアクセス可能であり、このユーザーが所有する他のすべてのプロセスから書き込み可能である可能性が高いです。 suプログラムを実行して特権を昇格すると、通常のユーザーとして実行されている親プロセスによって、新しいサブプロセス、スレッド、それが何であれ起動されます。
これを念頭に置いて、その犠牲プロセスの内部メモリ空間にアクセスするために、この親プロセスにコードの注入が行われるシナリオを想像することが可能です。その場合、理論的には、セッションと特権「トークン」をインターセプトしてルートアクセスを取得することが可能です。
これは2つの異なる方法で行われることがわかります。-suプログラムの起動用のフックを設定し、フローを転換して、目的のプロセスだけでなく、いくつかのプロセスを昇格させます。 -アクティブなセッションをインターセプトし、別のプロセスを生成または昇格させるリクエストを挿入します。
これらのシナリオはどちらも、犠牲PCで任意のコードを実行する必要があるため、侵害の後半の段階になります。 Xを実行するかどうかによって、デフォルトのbashではなく、正しいプロセスを注入するのが難しい場合があるため、違いが生じる場合があります。
いずれにせよ、そのような攻撃を実行することは可能だと思いますが、そのためのコードはかなり対象を絞らなければならず、APTキャンペーンの犠牲者でない限り、 「su-」コマンドを盗んで誰かがあなたのボックスを応援する可能性はほとんどありません。
私はLinuxでそのようなスタントを引っ張る方法について実際的な知識を持っていないので、上記の点について間違っている場合は、遠慮なく修正してください。
ユーザーレベルのアカウントで(ターミナル内で)ルートを使用すると、データが安全でなくなり、クロスターミナルでのマルウェアの悪用につながる可能性があります。したがって、基本的には完全なrootアクセスを使用します。
ユーザーレベルのアカウントでrootに切り替えるのは、非常に難しいことです。したがって、単にログインするたびにrootに切り替えるのが望ましい->
最初に/etc/login.defsファイルを編集し、次の行のコメントを外します(先頭の「#」を削除します)。
NO_PASSWORD_CONSOLE tty1:tty2:tty3:tty4:tty5:tty6
ログイン後にパスワードを要求しないように、これを行う必要があります。
次に、/ etc/inittabを編集します。このファイルは少し複雑なので、少し詳しく知っている場合は役立ちますが、次の行だけで作業するのではない場合に役立ちます。
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
Agettyプログラムに自動ログインプログラムを実行するように指示したいとします(これを以下に記述します)。上記の行を次のように置き換えます。
c1:12345:respawn:/sbin/agetty -n -l /usr/sbin/autologin 38400 tty1 linux
/ usr/sbin/autologinプログラムはシステムに付属していません。自分で作成してコンパイルする必要がありますが、とても簡単です。最初に空のテキストファイルを作成し、それに次の内容を追加します。
int main()
{
execlp( "login", "login", "-f", "shafiq", 0);
}
Shafiqを自動的にログインするユーザーの名前に置き換え、ファイルをautologin.cとして保存します。
次に、次のようにプログラムをコンパイルします(そのためにはrootである必要があります)。
cc autologin.c -o /usr/sbin/autologin
以上です。マシンの起動が完了すると、autologin.cで指定したユーザーとしてログインするautologinプログラムが実行されます。/etc/login.defsを編集したため、パスワードの入力は求められません。
ログイン後にプログラムを実行するには、ユーザーのホームディレクトリにある.bash_profileを編集し(ファイルが存在しない場合は作成します)、実行するコマンドをそのファイルの最後に追加します。たとえば、これはmyです。 bash_profileは、picoを実行するだけです。
pico
そして、これを行うのが安全でないと感じる場合は、起動中にBIOSを暗号化してみてください。そして、使用しているデバイスの起動の非常に早い段階でも、だれでもデバイスを開けるかどうかを確認してみましょう。
よろしく。
はい、新しいコンソールを開いてrootとしてログインする方が安全です。 su -
を使用すると、ルートセッションを通常のユーザーセッションにパイプすることになります。通常のアカウントへのシェルアクセスを持つ攻撃者がいた場合、rootとのセッションをハイジャックする可能性があります。彼はXセッションをハイジャックできないかもしれませんが、通常のユーザーとrootユーザー間の接続をハイジャックすることはできます。