いくつかのランダムアカウントとの基本的な違いは何ですかroot
? 0UID
以外のものですか?
それで、それは何をしますか?数バイナリするユーザーをrootに昇格させる方法は?私はユーザーが最初にsudo
私たちが見つけたコンテンツを通してグループの一部でなければならないことを理解しています/etc/sudoers
。
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
su
見つかった実行可能ファイルの権限を確認してください。-rwsr-xr-xまたは4755(つまり、すでにsetuid
設定されています)
はいまたはいいえ数この構成ファイルを読み取り、root権限を要求するユーザーが2つのグループのいずれかに属していることを確認するバイナリSudoまたは行政?もしそうなら、バイナリは別のシェルをrootとして作成しますか?設定値ビット) ユーザーが予想されるグループの一部であり、交換したい適切なユーザーのパスワードを知っているとします (例:根、特に)?
長すぎます。
特権昇格の動作は次のsetuid
点に依存していますか?数バイナリですか、それとも現在のプロセスのUIDを変更する他のメカニズムはありますか?前者の場合、EUIDのみが変更され、UID! = EUIDが残ります。これは問題ですか?
関連 これはすべてAndroid環境でどのようにシミュレートされますか?私が知っている限り、プロセスはまだこの権限レベルで実行されていますが、ルートへのアクセスは完全に削除されました。
を削除するとsudo
権限su
の昇格を防ぐのに十分ですか、またはAndroidは追加の措置を講じますか?
答え1
ルートはユーザー0です。
キーはユーザーID 0です。カーネルには呼び出しプロセスのユーザーIDを確認する場所がたくさんあり、ユーザーIDが0の場合にのみ特定の操作を実行する権限が付与されます。
ユーザー名は重要ではありません。カーネルはユーザー名さえ知らない。
Androidの権限メカニズムはカーネルレベルでは同じですが、アプリケーションレベルではまったく異なります。 Androidには、Linuxカーネルベースの他のシステムと同様に、rootユーザー(UID 0)があります。 Androidにはユーザーアカウントがなく、ほとんどの設定でユーザー(デバイスを運営して所有している人など)がrootとしてタスクを実行することはできません。 「ルーティング」Androidは、デバイスの所有者/ユーザーがrootとしてタスクを実行できるようにする設定です。
setuidの仕組み
ㅏ設定値実行可能ファイルは、実行可能ファイルを所有するユーザーとして実行されます。たとえば、su
setuidでルートが所有しているため、ユーザーがそれを実行すると、実行中のプロセスがrootとしてsu
実行されます。これは、su
それを呼び出すユーザーがrootアカウントへのアクセス権を持っていることを確認し、検証に成功した場合は指定されたコマンド(またはコマンドが指定されていない場合はシェル)を実行し、検証に失敗した場合は終了します。たとえば、su
ユーザーはルートパスワードを知っていることを証明するように求められます。
もっと詳しく言えば、プロセスはユーザーID 3:これ効果的なセキュリティチェックに使用されるUID。本物UIDは一部の権限確認に使用されますが、主に元のユーザーIDのバックアップとして使用され、保存されたユーザーIDとして使用され、プロセスは一時的に有効なUIDを実際のユーザーIDに切り替えてから古い有効なUIDに戻すことができます。 UID(たとえば、setuidプログラムが元のユーザーとしてファイルにアクセスする必要がある場合に便利です。)setuid実行可能ファイルを実行すると、有効なUIDが実行可能ファイルの所有者に設定され、実際のUIDが保持されます。
setuid実行可能ファイル(およびsetgidなどの同様のメカニズム)を実行することは、プロセスの権限を向上させる唯一の方法です。他のほとんどすべてはプロセスの権限を減らします。
伝統的なUnixを超えて
これまで、私は伝統的なUnixシステムを説明しました。これらはすべて最新のLinuxシステムに適用されますが、Linuxはいくつかの追加の複雑さをもたらします。
Linuxでは能力システム。カーネルには、ユーザーID 0で実行されているプロセスだけが許可されている多くのチェックがあると言ったことを覚えていますか?実際、各検査には独自の機能があります。正確ではありませんが、一部の検査では同じ機能を使用します。たとえば、raw ネットワークソケットにアクセスする機能や、システムを再起動する機能があります。各プロセスには、そのユーザーとグループに関連する一連の機能があります。プロセスがユーザー 0 として実行されるか、または検査に対応する機能がある場合、検査に合格します。特定の権限を必要とするプロセスは、rootではなくユーザーとして実行できますが、必要な機能があるため、プロセスにセキュリティの脆弱性があると影響が制限されます。実行可能ファイルは1つ以上の機能に設定できます。これは setuid に似ていますが、プロセスのユーザー ID ではなく、プロセスの機能セットに適用されます。たとえば、pingにはrawネットワークソケットのみが必要なため、CAP_NET_RAW
setuidルートの代わりにsetcapを使用できます。
Linuxにはいくつかセキュリティモジュール、最も有名なのはSELinux。セキュリティモジュールは、ルートとして実行されるプロセスにも適用できる追加のセキュリティチェックを導入します。たとえば、SELinuxを設定することは可能です(簡単ではありません!)。ユーザーID 0でプロセスを実行しますが、制限が多すぎるため、実際には何もできません。。
Linuxはユーザーネームスペース。カーネル内では、ユーザーは実際には単純なユーザーIDではなく、ユーザーIDと名前空間のペアです。名前空間は階層を形成します。子ネームスペースは、親ネームスペース内の権限を具体化します。フルユーザーは、ルートネームスペースのユーザー0です。名前空間のユーザー0は、その名前空間内でのみ権限を持ちます。たとえば、ユーザーの名前空間のユーザー0はその名前空間のすべてのユーザーを偽装することができますが、外部ではその名前空間のすべてのプロセスが同じユーザーとして実行されます。
答え2
Linuxには4つのUIDがあります。ルイド(本物),EUユーザーID(効果的な),スエイド(保存済み)、FSUID(ファイルシステム)。
これはプロセスの属性である数値にすぎず、カーネルプロセステーブルの制御ブロックに格納されます。
UIDは通常、アクセスが制限されていない'0'
ユーザーを表すという点で特別な特性を持っていますroot
。
su
sudo
新しいサブプロセスを開始し、SetUIDビットを介してEUIDを新しいUIDに設定して、ユーザーの有効アクセス権を変更するプログラムですsu
。その後、このsuプロセスは新しい子プロセスから新しいシェルを再生成し、4つのUIDを新しいUID値に設定します。
次の例はこれを示しています。ユーザーがrda
SSH端末を介してログインしているとします。ps fax
次のプロセスが表示されます。
472 ? Ss 0:00 /usr/sbin/sshd -D
9151 ? Ss 0:00 \_ sshd: rda [priv]
9153 ? S 0:00 | \_ sshd: rda@pts/1
9154 pts/1 Ss+ 0:00 | \_ -bash
4つのプロセス、sshデーモン、sshセッション(およびターミナル?)用の2つのプロセス、最後のプロセスはログインシェル(-
以前はaとマークされていますbash
)です。
ps faw -eo euser,ruser,suser,fuser,f,comm
プロセスのUIDが表示されます。
EUSER RUSER SUSER FUSER F COMMAND
...
root root root root 4 sshd
root root root root 4 \_ sshd
rda rda rda rda 5 | \_ sshd
rda rda rda rda 0 | \_ bash
認証の成功後に呼び出されると、su
次の結果が発生します。
EUSER RUSER SUSER FUSER F COMMAND
...
root root root root 4 sshd
root root root root 4 \_ sshd
rda rda rda rda 5 | \_ sshd
rda rda rda rda 0 | \_ bash
root rda root root 4 | \_ su
root root root root 4 | \_ bash
'0'
'bash'プロセスはSetUIDビットによって(ルート)に設定されたEUIDを使用して新しい 'su'サブプロセスを開始し、RUIDはまだrdaのUIDに設定されます。 「su」プロセスは新しいシェルを使用して新しいサブプロセスを再起動し、ユーザーにrootアクセス権を付与します(RUID'0'
も次のように設定されます)。ユーザーは自分の作業ディレクトリに残り、新しいシェルは親シェルと同じ環境を使用します。たとえば、次のようになります。
server:/home/rda# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
server:/home/rda# pwd
/home/rda
を使用してシェルを閉じることexit
ができ、ユーザーは元のアクセス権を持つ親シェルに入ります。
「su」がハイフン引数で呼び出されると、状況が異なります'-'
。
rda@server:~$ su -
Password:
server:~# echo $PATH
/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
server:~# pwd
/root
新しいシェルはログインシェルなので、シェル環境が変更されました。参照'-su'
: いくつかの追加の構成スクリプトを実行します。
9151 ? Ss 0:00 \_ sshd: rda [priv]
9153 ? S 0:00 | \_ sshd: rda@pts/1
9154 pts/1 Ss 0:00 | \_ -bash
9613 pts/1 S 0:00 | \_ su -
9614 pts/1 S+ 0:00 | \_ -su
ログインシェルはoffとして使用する必要がありますlogout
。
理論的には、ユーザーが端末、SSHなどを介してシステムに直接ログインし、デバイスに物理的にアクセスできないようにすることで、sudo
ユーザーが高い権限を取得するのを防ぐことができると思います。su
修正する:Androidのルートプロセス
詳しく説明したようにここ、Androidデバイスをルーティングする方法は次のとおりです。ブートローダーそしてAndroidシステムのプロパティ ro.secure
。
目標は常に同じです。つまり、su
バイナリをインストール/system
しますsetuid(0)
。
ロック解除されたブートローダを搭載したデバイス:
dd
デバイスからプライマリROMを抽出、追加su
、再圧縮(または変更されたROMのダウンロード)、フラッシュモードでデバイスを再起動し、変更されたROMをフラッシュします。
ro.secure=0のデバイス:
このシステム属性は、入力したコマンドがroot()または許可されていないユーザー()adb shell
で実行されるかどうかを制御します。値は起動時にrootユーザーのみがアクセスできるため、安全なディレクトリのファイルに設定されます。ro.secure=0
ro.secure=1
ro.secure
default.prop
root
ほとんどの場合ro.secure
に設定されていますが、1
一部のメーカーではに設定されています0
。デバイスのターミナルエミュレータまたはadbシェルでコマンドを実行してgetprop ro.secure
これを確認できます。ルートに設定すると0
簡単です。コンピュータに接続し、実行し、読み書きでadb
マウントしてインストールします。/system
su
ブートローダがロックされたデバイス:
これらのデバイスのリカバリ機能は、製造者が署名していないカスタムROMフラッシュを許可しません。この状況でrootアクセス権を取得する唯一の方法は、実行中のシステムプロセスの1つ(特権モードで実行されている)のセキュリティ脆弱性を悪用し、それを攻撃して「ランダムコード」の実行を許可することです。このコードは通常、永久にマウントおよびインストールさ/system
れますsu
。
答え3
通常、有効なuidは0だけです。実行可能ファイルの「setuid」ビットが実際に設定されました。効果的なプロセスのUID。有効な uid が 0 でなく、実際の uid が 0 でない場合、プログラムは「権限のない」ユーザーとして実行されています。以下が適用されます。
権限のないプロセスは、実効ユーザーIDを実ユーザーID、実効ユーザーID、または保存されたセットユーザーIDにのみ設定できます。権限のないユーザーは、実際のユーザーIDを実際のユーザーIDまたは有効なユーザーIDにのみ設定できます。
Androidに関する限り、いいえ、削除するだけでsudo
十分su
だと思います。プログラムがsetuidビットを設定できる場合、そのプログラムはおそらくuid = 0で実行されます。内部ファイルシステムはいつでもrootとして使用でき、その後これらのプログラムを導入してrootアクセスが可能です。