2012-10-30 9 views
14

Piszę aplikację, która będzie używać su do wykonywania niektórych poleceń w jądrze Linux. Zastanawiam się, w jaki sposób SuperUser domyśla się, że aplikacja prosi o uprawnienia root'a? Czy istnieją również znane sposoby (poprzez zaciemnianie), w których można ominąć tę kontrolę?W jaki sposób aplikacja Android SuperUser wykrywa, że ​​aplikacja żąda root?

W jaki sposób Android/(SuperUser) wie, że aplikacja wymaga uprawnień roota, mimo że nie ma żadnych wyraźnych żądań w pliku manifestu Androida.

Zadaję to pytanie z punktu widzenia bezpieczeństwa. Chcę poznać szczegóły tego działania, aby mieć pewność, że złośliwa aplikacja nie może ominąć SuperUser.

Odpowiedz

14

Po uruchomieniu tego:

Process p = Runtime.getRuntime().exec("su"); 

Próbujesz wykonać „Su”, który tylko aplikacja z prawami administratora może zrobić! Tak więc zawsze, gdy Android wykryje, że próbujesz uruchomić "su" Otrzyma to, że aplikacja będzie potrzebować uprawnień administratora.

Ponadto system Android ma zarezerwowany obszar, do którego dostęp ma tylko system Android. Jeśli Twoja aplikacja chce uzyskać do niej dostęp, Android zrozumie, że jest potrzebny superużytkownik.

Załóżmy na przykład, że próbujesz zmodyfikować plik hosta lub zmodyfikować niektóre konfiguracje sieciowe, takie jak DHCP. Lub próbujesz uzyskać dostęp do plików z obszaru systemu, np. /data Android sprawdzi, czy aplikacja ma uprawnienia administratora, a następnie przyzna dostęp do takich rzeczy.

O złośliwym oprogramowaniu, gdy aplikacja wymaga dostępu superużytkownika, system poprosi użytkownika o przyznanie lub odmowę uprawnień administratora aplikacji. Tylko wtedy aplikacja może uzyskać dostęp do roota. To użytkownik decyduje, czy zaakceptować lub odmówić dostępu root dla dowolnej aplikacji. (System poprosi użytkownikowi każdym razem aplikacja próbuje uzyskać dostęp do czegoś, co wymaga dostępu jako root, CHYBA systemu powiesz zapamiętać wybór akceptacji lub negacji dla konkretnej aplikacji.)

PS: Można rozważyć sprawdzanie website for Superuser app.

+1

+1 miłe wyjaśnienie –

+2

i jak/dlaczego aplikacja 'Superuser' działa tylko jako dostawca ** Su **? Co sprawia, że ​​jest on odpowiedzialny? – waqaslam

+0

@Waqas To może odpowiedzieć na twoje pytanie http://androidsu.com/superuser/ Po prostu poznaj witrynę. Zaktualizuję link w odpowiedzi. Może być pomocny dla innych. :) –

6

W rzeczywistości jest to dość proste. Wanilla Android nie ma nawet su ani superuser. Kiedy rootujesz urządzenie, uruchamiasz powłokę jako root. Następnie zainstalujesz plik binarny su i superuser.apk. Po instalacji ustawiasz powłokę z powrotem do jej normalnych uprawnień. Wszystkie te aplikacje tylko dla roota mogą teraz wywoływać numer su, aby uzyskać dostęp do roota.

Po uruchomieniu su, wywołuje superuser.apk z komunikatem z pytaniem, czy chcesz podnieść uprawnienia. Pliki binarne su i superuser.apk są chronione normalnym piaskownicą systemu Android. Zwróć uwagę, że kiedy przyznasz przywileje root aplikacji, możesz zrobić wszystko, co chcesz, w tym nadpisać su własną wersją.

17

System superużytkownika składa się z dwóch części: superuser binary (su na terminalu) i SuperUser.apk (aplikacja na Androida do zarządzania aplikacjami przy użyciu su).Patrząc na kod źródłowy su binary, gdy żądanie dostępu su poprzez

Process p = Runtime.getRuntime().exec("su"); 

to publikuje intencję przez kierownika android wiadomości, że złożono wniosek wymaganych dla superużytkownika dostępu.

sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei version_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE); 

Aplikacja menedżera słucha tego zamiaru i prosi użytkownika o obsługę żądania (zezwolenie/odmowę).

+0

Według twojego wyjaśnienia, wydaje się, że 'su' nadaje komunikat proszący o Superuser.apk, aby powiedzieć, że powinien zezwalać na dostęp root'a, czy też nie. Zastanawiam się więc, co uniemożliwia innej aplikacji, aby odpowiedzieć na to żądanie zamiast Superuser.apk? (co byłoby ogromną luką w zabezpieczeniach, gdyby było to możliwe, więc domyślam się, że tak nie jest, po prostu ciekawa) Jaka jest ochrona, która uniemożliwia aplikacji żądanie rootowania pod fałszywą nazwą? (tzn. złośliwy.apk żądający root'a pod nazwą awesome-root-only-app.apk, aby skłonić użytkownika do udzielenia dostępu) – youen

Powiązane problemy