su 바이너리를 단순히 복사 할 수없는 이유는 무엇입니까?


18

나는 여러 삼성 장치와 기본 "목표"를 뿌리 뽑아 su바이너리 를 가져 와서 Superuser.apk/system/xbin 설치 하는 것으로 보입니다 .

내 질문은 왜이 모든 후프를 뛰어 넘겨 전화를 루팅해야합니까 (사용자 정의 복구 설치 및 사전 루트 ROM 플래시 또는 현재 설치 활용)? 미리 컴파일 된 su를 다운로드하여 SD 카드로 옮긴 다음 adb를 통해 실행할 수 없습니까? ROM을 "루팅 된"것으로 만드는 것은 해당 시스템 경로에 수퍼 유저와 su 바이너리가 있다는 것입니다. 왜 그것이 중요한지 모르겠습니다 /system/xbin.

답변:


24

su 바이너리에는 실행 및 setuid 권한 비트 세트가 모두 필요합니다. 첫 번째는 파일을 실행할 수 있어야하고 두 번째는 파일 소유자의 권한 (사용자 ID 또는 setuid 설정)으로 자동 실행하는 것입니다.이 경우 소유자는 root입니다. 자세한 내용은 여기를 참조 하십시오 .

외부 저장소의 파일에는 실행 파일 및 setuid 권한 비트가 설정되어 있지 않으며 루트 권한이 없으면 부여 할 수 없습니다. 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,[...]

기본적으로 suSD 카드에 복사 한 다음 실행하여 루트 권한을 부여 할 수없는 이유 입니다.


그래서 이것이 루팅을 막는 유일한 방법입니다. / sdcard가 실행 가능하지 않으며 chmod 할 수 없다는 사실입니까? su가 적절한 위치에 있으면 황금을 실행할 수 있습니다. 누군가가 단순히 su를 실행하지 못하게하는 보안 계층이 있다고 생각합니다. 내 서버와 데비안 상자에서 일반 사용자로 su를 실행할 수 없으며 암호를 묻는 메시지가 표시됩니다. 나는 su를 설치할 수 있다면 섀도 파일을 덮어 써서 암호를 변경할 수 있다고 가정합니다.
user974896

3
@ user974896 : 비 시스템 사용자가 실행할 수 있고, 안드로이드에 파일 이 passwd없거나 shadow파일 이없는 다른 곳은 없습니다 . su실행 가능한 위치 에 넣으려면 문자 그대로 루트가 필요하므로 루팅 방법에는 권한 상승 악용 또는 사용자 지정 복구 (모든 베팅이 기본적으로 해제되어 있음)가 포함됩니다.
eldarerathis

예. 이것이 답입니다.
안드로이드 Quesito

3
@ user974896 : noexec가 마운트되는 / sdcard 외에도, setuid 시스템 호출은 suid 권한 비트가 실행 파일에 설정된 경우에만 호출 할 수 있으며 chown 및 chmod 시스템 호출은 루트가 파일의 setuid 비트를 설정하도록 허용합니다. root가 소유합니다 (효과적으로 root만이 루트 권한으로 실행할 수있는 실행 파일을 작성할 수 있습니다). 누구나 su를 호출 할 수 있지만, 호출자가 수퍼 유저 데이터베이스 (또는 전통적인 Linux, passwd / shadow 데이터베이스)에서 그렇게하지 않으면 호출은 성공하지 못합니다. 슈퍼 유저 앱 및 권한있는 프로세스 만 슈퍼 유저의 데이터베이스를 수정할 수 있습니다.
Lie Ryan

3
@ user974896 : 각 dalvik 응용 프로그램이 자체 사용자로 실행되는 Android의 일반 보안 시스템에 추가하여 수퍼 유저의 허용 목록에있는 응용 프로그램 만 프롬프트없이 자신을 루트로 에스컬레이션 할 수있는 응용 프로그램을 의미합니다. 수퍼 유저에게 사용자에게 권한을 요청하는 메시지를 표시합니다.
Lie Ryan

5

응원은 안드로이드 버전에 따라 약점을 악용하는 것이므로 " 전화를 응원 하기 위해 모든 농구대를 뛰어 넘다 "

닭고기와 계란!

루트를 이용 /system하려면 핸드셋에 보안되지 않은 adb 데몬 (즉, 다시 마운트하는 기능 )이 필요하고 보안되지 않은 adb를 가지려면 루트가 필요합니다! 또한 잠금 해제 된 부트 로더가 필요합니다.

github에서 발견 된 zergRush 라는 하나의 익스플로잇을 살펴보십시오 . 해당 데몬이 소유하고있는 파이프에 연결하여 데몬 의 스택 프레임을 "파괴"하려는 시도를하고 호출 된 스택을 가리 키도록 스택 포인터를 덮어 쓰면 충돌이 발생하는 지점에서 호출됩니다. 셸의 버전은 다음에서 실행됩니다 .do_fault()voldboomsh/data/local/tmp

소스를 읽은 후, 왜 su바이너리를 복사하는 것이 핸드셋을 "루팅"하기에 충분하지 않은 이유와 후프를 건너 뛰어야하는 이유를 알게 될 것입니다. 또한 SDcard의 파일 시스템 수준에서 실행 가능한 비트가 차단되었으므로 아무런 이유가 없습니다. :)


나중에 읽을 링크에 감사드립니다. 그래서 sdcard가 공장에서 777로 chmodded 되더라도 단순히 다운로드하고 실행하여 루트가 될 수 없었습니까?
user974896

1
옳은! 안돼! 차이가 나지 않으며 공장에서 설치된 ROM에 보호 할 수 있기 때문에이를 달성하기 위해서는 루트 chmod가 필요합니다. :)
t0mm13b

1
/ system / xbin에 있으면 su가 왜 그렇게 특별합니까? adb shell을 입력하거나 일반 사용자로 앱을 실행하면 권한이없는 사용자입니다. / system / xbin에있을 때 su를 실행하면 왜 이론적으로 chmod 777 / sdcard에서 실행하는 것과 달리 루트가됩니까?
user974896

/system/xbin이 발행, 뿌리 휴대폰에서 ... BusyBox라는 유틸리티로 이동 디렉토리이며, echo $PATH얻을 것입니다 / 공급 업체 / 빈 : 경우 / sbin을 / 시스템 / sbin에 : / 시스템 / 빈은 / 시스템 / xbin <- 통지 그것! 그 길에있다! 거기에 그것을 갖기 위해서는 루트가 필요하기 때문에 많은 닭과 계란 상황이 필요합니다 ... : D
t0mm13b

예, 그것이 기본적으로 어디 있는지 알고 있습니다. 내가 의미하는 것은 거기에서 실행하는 것이 너무 특별하다는 것입니다. / sdcard /, / data / 또는 루트가 아닌 필수 디렉토리에서 ./su를 실행하는 이유는 777에서 chmodded 디렉토리로 ROM을 출하 한 것으로 가정하면 루트가 아닌 디렉토리가 작동하지 않는 것입니다. 기본적으로 의미하는 것은 다운로드를 중지하는 유일한 방법입니다. 그리고 ./su를 실행하는 것은 루트가 아닌 사용자가 이것을 할 수있는 디렉토리가 실행 불가능하거나 더 큰 그림이 있다는 사실입니다.
user974896
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.