suバイナリを単純にコピーできないのはなぜですか(技術的な応答をお願いします)


18

私はいくつかのSamsungデバイスを根付かせており、基本的な「目標」はいわば、suバイナリを取得してSuperuser.apk/system/xbinをインストールすることのようです。

私の質問は、なぜこれらのフープのすべてをジャンプして電話をルート化する必要があるのですか(カスタムリカバリとルート化されたROMをフラッシュするか、現在のインストールを活用する)?プリコンパイルされたsuをダウンロードして、SDカードに移動し、adb経由で実行することはできませんか?ROMを「ルート化」するように思われるのは、それぞれのシステムパスにスーパーユーザーとsuバイナリがあることです。なぜそれが実行されるほど重要なのかわかりません/system/xbin

回答:


24

suバイナリには、実行とsetuid許可ビットセットの両方が必要です。1つ目はファイルを実行できること、2つ目はファイル所有者の権限(ユーザーIDまたはsetuidを設定します。この場合、所有者はルートです。詳細はこちら)で自動的に実行されることです。

外部ストレージ上のファイルには、実行可能ファイルとsetuid許可ビットが設定されておらず、root権限がなければ許可されません。また、一般的に起動するのを防ぐために、SDカードは「noexec」フラグでマウントされることに注意してください。

shell@android:/sdcard $ ./su
/system/bin/sh: ./su: can't execute: Permission denied
126|shell@android:/sdcard $ chmod 4755 su
Unable to chmod su: Operation not permitted
10|shell@android:/sdcard $ mount | grep /mnt/sdcard
/dev/block/mmcblk0p1 /mnt/sdcard vfat [...],noexec,[...]

これが基本的suに、SDカードにコピーしてから実行するだけでルートを取得できない理由です。


それがルート化を妨げる唯一のことです。/sdcardが実行可能ではなく、chmodができないという事実ですか?suがゴールデンの実行可能ファイルをchmoddedできる適切な場所に配置されたら。誰かが単にsuを実行するのを防ぐためのセキュリティの層があると思います。私のサーバーとdebianボックスでは、通常のユーザーとしてsuを実行することはできません。パスワードの入力を求められます。suをインストールできる場合、シャドウファイルを上書きしてパスワードを変更できると仮定していると思いますか?
-user974896

3
@ user974896:まあ、システム以外のユーザーが実行できるものを置く場所は他にありませんし、Androidにもファイルpasswdshadowファイルはありません。あなたは文字通りsu実行可能な場所に置くためにルートを必要とします。それがルート化方法が特権エスカレーションのエクスプロイトを含むか、カスタムリカバリに入ることです(すべての賭けは基本的にオフです)。
eldarerathis

はい。これが答えです。
Android Quesito

3
@ user974896:noexecにマウントされている/ sdcardに加えて、suid許可ビットが実行可能ファイルに設定されている場合にのみsetuidシステムコールを呼び出すことができ、chownおよびchmodシステムコールはファイルのsetuidビットの設定のみをrootに許可しますrootが所有します(事実上、root権限で実行できる実行可能ファイルを作成できるのはrootのみです)。誰でもsuを呼び出すことができますが、呼び出し元がスーパーユーザーのデータベース(または従来のLinuxのpasswd / shadowデータベース)で呼び出しを許可されていない限り、呼び出しは成功しません。スーパーユーザーのデータベース(および特権プロセス)のみがスーパーユーザーのデータベースを変更できます。
ライライアン

3
@ user974896:これは、各dalvikアプリケーションが独自のユーザーとして実行されるAndroidの通常のセキュリティシステムに加えて、スーパーユーザーのホワイトリスト内のアプリケーションのみがプロンプトなしでルートにエスカレーションできるアプリケーションを意味します。ブラックリストに含まれる)、またはスーパーユーザーにユーザーに許可を求めるプロンプトを表示します。
ライライアン

5

応援には、Androidのバージョンに応じて脆弱性を悪用するため、「すべてのフープを飛び越えて電話を応援します

その鶏と卵!

ルートを悪用する/systemには、ハンドセットにセキュリティで保護されていないadbデーモン(つまり、再マウントする機能)が必要です。セキュリティで保護されていないadbを使用するには、ルートが必要です。また、ロックされていないブートローダーが必要です。

一つは見ていエクスプロイトと呼ばzergRushは githubの上で見つかりました。興味のある関数が呼び出されdo_fault()、そのvoldデーモンが所有するパイプに接続することでデーモンのスタックフレームを「破壊」し、スタックポインタを上書きしてコピーされた場所を指すことでクラッシュさせます。boomshから実行されるシェルのバージョン/data/local/tmp

ソースを読んだ後、suバイナリをコピーするだけではハンドセットを「ルート化」するのに十分ではなく、フープをジャンプする必要がある理由がわかります。また、SDカードのファイルシステムレベルの実行可能ビットがブロックされているため、そこに行くことはありません-それは明らかな理由であります!:)


リンクを読んでくれてありがとう。だから、SDカードが工場から777に変更されたとしても、単にダウンロードして実行するだけではrootになれませんでしたか?
-user974896

1
正しい!立ち入り禁止!iotaに違いはありません。工場でインストールされたROMにはláが保護されているchmodので、それを達成するにはrootが必要です。:)
t0mm13b

1
suが/ system / xbinにある場合、suが特別な理由は何ですか?adbシェルに入る(または通常のユーザーとしてアプリを実行する)場合、あなたは非特権ユーザーです。理論的にchmod 777 / sdcardで実行するのではなく、/ system / xbinにあるsuを実行するとrootになるのはなぜですか?
-user974896

/system/xbinこれはbusyboxユーティリティが入るディレクトリであり、...ルート化されたハンドセットでは、これecho $PATHを発行すると/ sbin:/ vendor / bin:/ system / sbin:/ system / bin:/ system / xbinが生成されます <-それに注意してください!その道に!そこにそれを持っているためには、ルートが必要です。したがって、多くの鶏と卵の状況があります...:D
t0mm13b

はい、私はそれがデフォルトで行く場所であることを知っています。つまり、そこで実行することの特別なところです。工場が777でchmoddedされたディレクトリでROMを出荷したと仮定して、/ sdcard /、/ data /、または非ルートが必要なディレクトリで./suを実行する理由は何ですか。 ./suを実行するということは、root以外のユーザーがこれを実行できるディレクトリが実行可能でないか、全体像があるという事実です。
-user974896
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.