android 루트 권한 분석

《 상편 》.
       현재 안 드 로 이 드 시스템 의 루트 해 제 는 기본적으로 여러분 의 필수 스 킬 이 되 었 습 니 다!인터넷 에 도 중 원 키 로 풀 수 있 는 소프트웨어 가 많아 서 루트 를 쉽게 풀 수 있 습 니 다.그런데 루트 해체 의 원 리 를 생각해 본 적 이 있 나 요?루트 해체 의 본질은 무엇 입 니까?리 눅 스 kernal 의 구멍 을 이용 한 것 일 까?본 고 는 루트 의 해독 원 리 를 간단하게 분석 할 것 이다.
       본 고 는 루트 원리 에 대해 방향 적 인 묘 사 를 했다 고 말 할 수 있 을 뿐 구체 적 인 측면 에서 명확 하 게 묘사 하지 못 했다.본 고 는 그것 에 대해 필요 한 확장 과 보충 을 진행 할 것 이다.
       프로그램 개발 을 진행 한 적 이 있다 면 루트 가 있 는 휴대 전화 에서 루트 권한 을 얻 는 코드 는 다음 과 같 습 니 다.
   1: Process process = Runtime.getRuntime().exec("su");
   2: DataOutputStream os = new DataOutputStream(process.getOutputStream());
   3: ......
   4: os.writeBytes("exit
");
   5: os.flush();

     위의 코드 에서 우 리 는 먼저 su 프로그램 을 실행 해 야 한 다 는 것 을 볼 수 있 습 니 다. 사실 루트 의 비밀 은 모두 su 프로그램 에 있 습 니 다. Android 시스템 의 기본 su 프로그램 은 루트 와 셸 만 su 를 실행 할 수 있 습 니 다. 이것 은 안전 합 니 다.이 제한 을 떼 면 루트 가 풀 립 니 다!
     프로그램 이 루트 권한 을 어떻게 얻 었 는 지 자세히 분석 해 보 겠 습 니 다. 리 눅 스 의 su 명령 에 익숙 한 친구 가 su 프로그램 이 모두 SUID 위 치 를 설정 한 것 을 알 수 있다 면 제 핸드폰 (루트 가 풀 렸 음) 의 su 권한 설정 을 살 펴 보 겠 습 니 다.
      su 의 소유자 와 모든 그룹 이 루트 인 것 을 발 견 했 습 니 다. 사실은 busybox 의 소프트 링크 입 니 다. busybox 의 속성 을 살 펴 보 니 SUID 와 SGID 가 설정 되 어 있 고 소유자 와 모든 그룹 이 루트 입 니 다.SUID 와 SGID 의 역할 은 무엇 일 까요?이렇게 busybox 를 실행 하 는 일반 사용자, busybox 를 실행 하 는 과정 에서 루트 의 유효한 사용 자 를 얻 었 습 니 다.su 프로그램 은 자신 을 새로운 프로그램 으로 시작 하고 자신의 권한 을 루트 로 향상 시 키 는 것 입 니 다.
     다시 한 번 말씀 드 리 지만 루트 폰 에 su 만 SUID 를 설정 해 야 하 는 것 이 아니 라 모든 Linux 시스템 의 su 프로그램 에 SUID 위 치 를 설정 해 야 합 니 다.UC 서버 의 su 권한 상황 참고:
     su 도 SUID 위 치 를 설정 한 것 을 발 견 했 습 니 다. 그러면 일반 사용자 도 su 프로그램 을 실행 할 수 있 습 니 다. su 프로그램 은 루트 비밀 번 호 를 검증 합 니 다. 만약 에 올 바른 su 프로그램 이 사용자 권한 을 향상 시 킬 수 있 는 루트 (SUID 위 치 를 설정 하기 때문에 실행 기간 은 루트 권한 이기 때문에 자신의 권한 을 향상 시 킬 수 있 습 니 다).
     이렇게 하면 안 드 로 이 드 시스템 의 해체 의 근본 원 리 는 시스템 의 su 프로그램 을 교체 하 는 것 임 을 알 수 있 습 니 다. 시스템 의 기본 su 프로그램 은 실제 사용자 권한 을 검증 해 야 하기 때 문 입 니 다.해 제 된 su 는 실제 사용자 권한 을 검사 하지 않 습 니 다. 그러면 일반 사용자 도 su 프로그램 을 실행 할 수 있 고 su 프로그램 을 통 해 자신의 권한 을 향상 시 킬 수 있 습 니 다.
     여기까지 루트 해독 에 신 비 롭 지 않 으 시 죠?루트 해 제 는 리 눅 스 커 널 구멍 (리 눅 스 커 널 에 이렇게 큰 구멍 이 있 을 수 없다) 을 이용 하지 않 았 습 니 다. 루트 해 제 는 시스템 에 '목마 su' 를 심 어 놓 은 것 으로 이해 할 수 있 습 니 다. '목마' 라 고 해도 과언 이 아 닙 니 다. 악성 프로그램 이 시스템 에서 실행 된다 면 su 를 통 해 자신의 권한 을 향상 시 킬 수 있 습 니 다. 이런 결 과 는 재앙 이 될 것 입 니 다.그래서 일반적인 상황 에서 루트 과 휴대 전 화 는 슈퍼 유저 애플 리 케 이 션 으로 사용자 가 루트 권한 을 얻 을 수 있 도록 관리 하 는 것 도 시스템 에 보험 을 든 셈 입 니 다!
     위 와 같이 작가 사 이 먼 의 개인 적 인 루트 해독 에 대한 인식 입 니 다. 잘못된 부분 이 있 으 면 여러분 의 지적 을 환영 합 니 다.
 
《 하 편 》.
 
루트 해독 과정의 최종 목 표 는 시스템 의 su 프로그램 을 교체 하 는 것 입 니 다.그러나 시스템 에서 su 프로그램 자 체 를 교체 하려 면 루트 권한 이 필요 합 니 다. 루트 해독 과정 에서 루트 권한 을 얻 는 것 이 우리 연구 의 중점 이 되 었 습 니 다.다음은 우리 가 시스템 상황 을 해결 해 야 한 다 는 것 을 확인 하고 해결 해 야 할 안 드 로 이 드 시스템 이 다음 과 같은 조건 을 갖 추고 있다 고 가정 합 니 다.
1. adb 를 통 해 장치 에 연결 할 수 있 습 니 다. 일반적으로 드라이버 가 설치 되 어 있 음 을 의미 합 니 다.         2. 그러나 adb 가 사용자 권한 을 얻 는 것 은 루트 가 아 닌 셸 사용자 입 니 다.
루트 해독 과정 을 이해 하려 면 먼저 adb 도 구 를 알 아야 합 니 다. SDK 에는 adb 도구 가 포함 되 어 있 습 니 다. 장치 쪽 에 adbd 서비스 프로그램 배경 이 실행 되 고 개발 기의 adb 프로그램 에 서 비 스 를 제공 합 니 다. adbd 의 권한 은 adb 의 권한 을 결정 합 니 다.구체 적 인 사용 자 는/system/core/adb 의 원본 코드 를 볼 수 있 습 니 다. Android. mk 를 보면 adb 와 adbd 가 사실은 코드 인 것 을 발견 하고 매크로 를 통 해 컴 파일 할 수 있 습 니 다.
adb. c 의 adb 보기main 함수 에서 adbd 에 다음 코드 가 있 음 을 발견 할 수 있 습 니 다:
   1: int adb_main(int is_daemon)
   2: {
   3:     ......
   4:     property_get("ro.secure", value, "");
   5:     if (strcmp(value, "1") == 0) {
   6:         // don't run as root if ro.secure is set...
   7:         secure = 1;
   8:         ......
   9:     }
  10:  
  11:     if (secure) {
  12:         ......
  13:         setgid(AID_SHELL);
  14:         setuid(AID_SHELL);
  15:         ......
  16:     }
  17: }

이 속성 이 1 이면 사용자 권한 을 셸 사용자 로 강등 시 키 는 adbd 를 볼 수 있 습 니 다.일반 장치 가 출하 될 때/default. prop 파일 에 있 습 니 다.
   1: ro.secure=1

이렇게 하면 adbd 가 시 작 될 때 자동 으로 셸 사용자 로 강 등 됩 니 다.
그리고 adbd 가 언제 시 작 됐 는 지 다시 한 번 소개 해 드릴 까요?정 답 은 init. rc 에서 설정 한 시스템 서비스 입 니 다. init 프로 세 스 에서 시작 합 니 다.init. rc 에 다음 과 같은 내용 이 있 는 지 확인 합 니 다.
   1: # adbd is controlled by the persist.service.adb.enable system property
   2: service adbd /sbin/adbd
   3:     disabled

Android 속성 시스템 에 대해 잘 모 르 는 사람 은 init. rc 에서 설정 한 시스템 서비스 가 시 작 될 때 모두 루트 권한 이라는 것 을 알 게 될 것 입 니 다. (init 진행 은 루트 권한 이 고 서브루틴 도 루트 이기 때 문 입 니 다.)이로써 우 리 는 adbd 프로그램 에서 실행 되 고 있 음 을 알 수 있다.
   1: /* then switch user and group to "shell" */
   2: setgid(AID_SHELL);
   3: setuid(AID_SHELL);

코드 는 모두 루트 권한 이 었 습 니 다. 이 두 문장 을 실행 한 후에 야 셸 권한 이 되 었 습 니 다.
이렇게 하면 우 리 는 루트 해독 과정 에서 루트 권한 을 얻 는 방법 을 끌 어 낼 수 있 습 니 다. 그것 은 바로 위의 setgid 와 setuid 함수 로 실 패 했 습 니 다. 즉, 강등 실패 입 니 다. 그러면 루트 권한 아래 에서 계속 실 행 됩 니 다.
이것 은 사실 RageAgainst TheCage 의 빈틈 을 이용 한 것 입 니 다. 구체 적 인 분석 은 과 을 참고 하 십시오.이 안 에는 간단 한 설명 이 있다.
1. 출하 설정 의 ro. secure 속성 이 1 이면 adbd 도 셸 사용자 권한 에서 실 행 됩 니 다.2. adb 도구 가 만 든 프로 세 스 ratc 도 셸 사용자 권한 에서 실 행 됩 니 다.
3、ratc
하위 프로 세 스 를 계속 만 듭 니 다 (ratc 에서 만 든 서브루틴 도 셸 사용자 권한 에서 실 행 됩 니 다). 이 어 서브루틴 이 종료 되 고 좀 비 프로 세 스 가 형성 되 며 셸 사용자 의 프로 세 스 자원 을 차지 합 니 다. 셸 사용자 의 프로 세 스 수 는 RLIMIT 입 니 다.NPROC 때 (adbd, ratc 및 서브루틴 포함) ratc 가 하위 프로 세 스 를 만 드 는 데 실 패 했 습 니 다.이 때 adbd 를 죽 이 고 adbd 프로 세 스 는 안 드 로 이 드 시스템 서비스 이기 때문에 안 드 로 이 드 시스템 에 의 해 자동 으로 재 부팅 됩 니 다. 이때 ratc 도 경쟁 적 으로 서브루틴 을 만 듭 니 다.adbd 프로그램 이 위의 setgid 와 setuid 를 실행 하기 전에 ratc 는 새로운 하위 프로 세 스 를 만 들 었 습 니 다. 그러면 셸 사용자 의 프로 세 스 한도액 이 달성 되면 adbd 프로 세 스 가 setgid 와 setuid 를 실행 하 는 데 실 패 했 습 니 다.코드 에 따라 실 패 를 발견 한 후에 adbd 는 계속 실 행 될 것 입 니 다.이렇게 하면 adbd 프로 세 스 는 루트 권한 아래 에서 실 행 될 것 입 니 다.3. 이것 은 adb 로 장 치 를 다시 연결 하면 adb 는 루트 권한 아래 에서 실 행 됩 니 다.
위의 소 개 를 통 해 RageAgainst TheCage 구멍 을 이용 하여 adbd 가 루트 권한 을 얻 을 수 있 습 니 다. 즉, adb 가 루트 권한 을 얻 었 습 니 다.루트 권한 을 받 으 면 남 은 문 제 는 쉽게 처리 할 수 있 습 니 다. 해 제 된 su 프로그램 을 시스템 에 복사 합 니 다.
사실 adbd 의 이 구멍 을 막 는 것 도 간단 하 다.
   1: /* then switch user and group to "shell" */
   2: if (setgid(AID_SHELL) != 0) {
   3:     exit(1);
   4: }
   5: if (setuid(AID_SHELL) != 0) {
   6:     exit(1);
   7: }

setgid 와 setuid 함수 가 실 패 했 음 을 발견 하면 adbd 프로 세 스 가 이상 하 게 종료 되 어 이 구멍 을 막 습 니 다.왜 이렇게 많은 설비 가 이 구멍 을 막 지 못 했 습 니까?저 는 설비 업 체 의 전략 (바보 X 의 업 체 가 존재 하 는 것 을 제외 하지 않 습 니 다) 이 라 고 생각 합 니 다. 구멍 을 어떻게 막 는 지 알 지만 뒷문 을 남 겨 두 고 제3자 가 자신 에 게 rom 을 맞 추고 자신의 시스템 의 용이 성 을 향상 시 키 도록 하 는 것 입 니 다.
이로써 우 리 는 루트 의 과정 과 루트 이후 시스템 상황 을 모두 소 개 했 습 니 다. 당신 도 루트 에 대해 더 이상 신 비 롭 지 않 을 것 이 라 고 믿 습 니 다!당신 은 본문 과 윗글 에 대해 어떤 의견 이 있 습 니까? 저 와 토론 하 는 것 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기