1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Filebase
  4. Forum
  5. Zebradem-WIKI
  6. Foren-Regeln
  7. Spenden Liste
    1. Spenden
  • Anmelden
  • Registrieren
  • Suche
ZebraDem-Sponsoring
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Dateien
  • Forum
  • Erweiterte Suche
  1. Forum
  2. Computer Ecke
  3. Handy/Smartphone
  4. iPhone

Hier mal eine Erklärung wie der aktuelle evasi0n Jailbreak im Detail funktioniert.

  • Reppo
  • 5. Februar 2013 um 10:39
  • Reppo
    Super Moderator
    Punkte
    69.655
    Beiträge
    12.683
    • 5. Februar 2013 um 10:39
    • #1

    iOS 6.1 evasi0n jailbreak

    The latest jailbreak is out, and it’s time to dissect it and document all the exploits and techniques it contains. These days, jailbreaks are so well tested that it’s easy for people to forget all the complexity that goes into them. There are numerous exploit mitigations in iOS userland, such as sandboxing, ASLR, and code signature requirements that make jailbreaking incredibly difficult.

    One important point to make is that unlike the previous jailbreakme.com exploits, which could be used against an unwitting victim, jailbreaks that require USB tethering have a lower security impact, and are usually only useful to the phone’s owner. Attackers are less interested because iPhones with a passcode set will refuse to communicate over USB if they are locked, unless they have previously paired with the connecting computer. So your phone is stolen and it’s locked, attackers won’t be able to jailbreak it. Therefore, only malicious code already running on your computer can leverage USB jailbreaks nefariously.


    Evasi0n userland component

    This blog post will focus on the evasi0n userland component. Evasi0n’s userland component is very unique, because it is entirely filesystem-based. It doesn’t require memory corruption to escalate privileges from mobile to root. Perhaps it was named evasi0n because it evades all the userland exploit defenses instead of attacking them head-on.

    Evasi0n works in 3 stages that are described below. All of the stages use functionality on the phone exposed by MobileBackup, the daemon used to backup user data from the device, and restore backups back to the device. Since backups are created by the user’s device, and must be interchangeable between devices, they cannot be easily cryptographically signed, so they are essentially untrusted data.
    MobileBackup uses both a domain, such as MediaDomain, and a relative path to identify every file. A static absolute path corresponding to the domain, joined with the file-specific relative path, determines the absolute path of every file. Evasi0n creates all its files in MediaDomain, so all of the files are within /var/mobile/Media.


    Stage 1:
    During stage 1, evasi0n creates a fresh backup to restore to the device, containing only the following files. All files are within the MediaDomain.


    • directory: Media/
    • directory: Media/Recordings/
    • symlink: Media/Recordings/.haxx -> /var/mobile
    • directory: Media/Recordings/.haxx/DemoApp.app/
    • file: Media/Recordings/.haxx/DemoApp.app/Info.plist
    • file: Media/Recordings/.haxx/DemoApp.app/DemoApp
    • file: Media/Recordings/.haxx/DemoApp.app/Icon.png
    • file: Media/Recordings/.haxx/DemoApp.app/"[email protected]"[/email]
    • file: Media/Recordings/.haxx/DemoApp.app/Icon-72.png
    • file: Media/Recordings/.haxx/DemoApp.app/"[email protected]"[/email]
    • file: Media/Recordings/.haxx/Library/Caches/com.apple.mobile.installation.plist

    The symlink in .haxx to /var/mobile is created to escape the MobileBackup domain’s normal path restriction. That is, normally files in the MediaDomain must reside within /var/mobile/Media; however, with the symlink created any file that exists in .haxx is actually restored in /var/mobile. This technique has been used in past jailbreaks as well.

    Next, DemoApp.app, an iOS app, is created in /var/mobile, complete with icons and other supporting collateral. The plist com.apple.mobile.installation.plist is updated so that Springboard knows where the app lives, and can display it on the home screen.
    However, unlike a normal iOS app, this app contains a very peculiar main binary consisting of just the following:
    #!/bin/launchctl submit -l remount -o /var/mobile/Media/mount.stdout -e /var/mobile/Media/mount.stderr -- /sbin/mount -v -t hfs -o rw /dev/disk0s1s1


    For those unfamiliar with UNIX shell scripts, the kernel looks at the first line of text files to determine the interpreter for the script. The above file contents tell the kernel to execute launchctl with those specific arguments.
    Additionally, com.apple.mobile.installation.plist contains a peculiar section for DemoApp.app, defining an environment variable to set when running it:


    <key>EnvironmentVariables</key>
    <dict>
    <key>LAUNCHD_SOCKET</key>
    <string>/private/var/tmp/launchd/sock</string>
    </dict>

    At this point, the device is rebooted so that the app is picked up by Springboard, and displayed to the user.


    Stage 2.1:

    Now that the previous files have been put into place, Stage 2 begins by creating a new empty backup, and restoring more files to the device.


    • directory: Media/
    • directory: Media/Recordings/
    • symlink: Media/Recordings/.haxx -> /var/db
    • symlink: Media/Recordings/.haxx/timezone -> /var/tmp/launchd

    Essentially, this just creates a symlink called /var/db/timezone that points to /var/tmp/launchd. The normal permissions on /var/tmp/launchd are:

    drwx------ 2 root wheel 102 Feb 4 12:17 launchd

    These permissions normally prevent applications running as user mobile from descending into this directory. Next, evasi0n tells the user it is stroking lockdownd. What that actually means is evasi0n is sending a malformed PairRequest command to lockdownd. Lockdownd is the main daemon that operates on commands received over USB, and is used to start/stop other services, such as MobileBackup and AFC. Since lockdownd runs as root and the user can communicate to it, abusing it to perform unintended tasks has become common in recent jailbreaks.


    Now we come to the first vulnerability exploited. Sending lockdownd a malformed PairRequest command, causes lockdownd to chmod 777 /var/db/timezone so that it is accessible to mobile (and all users). It isn’t clear whether this is a vulnerability in lockdownd or in an underlying library or framework.


    Stage 2.2:

    Stage 2.2 drills down further into /var/tmp/launchd. It modifies the permissions in the system so that the launchd socket is also accessible by the mobile user. Stage 2.2 changes the timezone symlink as follows:

    Symlink: Media/Recordings/.haxx/timezone -> /var/tmp/launchd
    To
    Symlink: Media/Recordings/.haxx/timezone -> /var/tmp/launchd/sock
    Then evasi0n sends another malformed PairRequest packet to lockdownd, causing /var/tmp/launchd/sock to become accessible to the mobile user.


    Stage 2.3:

    Stage 2.3 begins by uploading a Cydia and packagelist tarfile to the phone. This isn’t used immediately, but is uploaded for use after the jailbreak is complete.

    Next, the user is instructed to run the Jailbreak app (actually DemoApp.app) on their phone. Recall what that app did:
    #!/bin/launchctl submit -l remount -o /var/mobile/Media/mount.stdout -e /var/mobile/Media/mount.stderr -- /sbin/mount -v -t hfs -o rw /dev/disk0s1s1

    With the environment variable


    LAUNCHD_SOCKET = /private/var/tmp/launchd/sock


    If you read man launchctl, you will see that the submit command is described as follows:

    submit -l label [-p executable] [-o path] [-e path] -- command [args]
    A simple way of submitting a program to run without a configuration file. This mechanism also tells launchd to keep the program alive in the event of failure.
    -l label
    What unique label to assign this job to launchd.
    -p program
    What program to really execute, regardless of what follows the -- in the submit sub-command.
    -o path Where to send the stdout of the program.
    -e path Where to send the stderr of the program.

    If you look at the manpage for launchd, you will see:
    ENVIRONMENTAL VARIABLES
    LAUNCHD_SOCKET

    This variable is exported when invoking a command via the launchd command line. It informs launchctl how to find the correct launchd socket for communications.


    Unlike most other things on iOS, launchd’s IPC mechanism operates through unix domain sockets. There are also multiple launchd processes – one running as each user. On iOS, there is one running as root, and one running as mobile. So the user, as mobile, is executing launchctl via DemoApp.app. However, launchctl is not talking to the mobile user’s launchd. Instead, it is talking to the root user’s launchd, via the launchd socket that was exposed via UNIX permissions using the /var/db/timezone vulnerability.

    Since the root user’s launchd runs as root, this job will be run as root. The job will remap the system partition as read-write, allowing the exploit to then make persistent changes on the system partition that will execute as root in the early boot environment.


    Stage 3:


    Next, the final stage of the jailbreak begins, again using MobileBackup, but this time with full access to the system partition.



    [LIST=|INDENT=1]
    [*]directory: Media/
    [*]directory: Media/Recordings/
    [*]symlink: Media/Recordings/.haxx -> /
    [*]symlink: Media/Recordings/.haxx/private/etc/launchd.conf -> /private/var/evasi0n/launchd.conf
    [*]directory: Media/Recordings/.haxx/var/evasi0n
    [*]file: Media/Recordings/.haxx/var/evasi0n/evasi0n
    [*]file: Media/Recordings/.haxx/var/evasi0n/amfi.dylib
    [*]file: Media/Recordings/.haxx/var/evasi0n/udid
    [*]file: Media/Recordings/.haxx/var/evasi0n/launchd.conf
    [/LIST]

    Things are getting a bit confusing due to extensive use of pushing files through symlinks, but essentially this creates a directory at /var/evasi0n containing an executable, a library, and a new launchd.conf. Launchd.conf is described by Apple (see man launchd.conf) as:

    DESCRIPTION
    launchd.conf contains a list of subcommands (load, unload, etc.) to run via launchctl(1) when launchd(8) starts.

    The replacement launchd.conf, which will run at each boot, contains:

    bsexec .. /sbin/mount -u -o rw,suid,dev /
    setenv DYLD_INSERT_LIBRARIES /private/var/evasi0n/amfi.dylib
    load /System/Library/LaunchDaemons/com.apple.MobileFileIntegrity.plist
    bsexec .. /private/var/evasi0n/evasi0n
    unsetenv DYLD_INSERT_LIBRARIES
    bsexec .. /bin/rm -f /private/var/evasi0n/sock
    bsexec .. /bin/ln -f /var/tmp/launchd/sock /private/var/evasi0n/sock

    Here’s what that does, line by line:


    bsexec .. /sbin/mount -u -o rw,suid,dev /

    [LIST=|INDENT=2]
    [*]Mount system partition read-write again
    [/LIST]
    setenv DYLD_INSERT_LIBRARIES /private/var/evasi0n/amfi.dylib

    [LIST=|INDENT=2]
    [*] Insert amfi.dylib into any executable that launches after this point
    [/LIST]
    load /System/Library/LaunchDaemons/com.apple.MobileFileIntegrity.plist

    [LIST=|INDENT=2]
    [*] Load the MobileFileIntegrity daemon
    [/LIST]
    bsexec .. /private/var/evasi0n/evasi0n

    [LIST=|INDENT=2]
    [*] Execute the malicious code, previously dropped in /var/evasi0n/evasi0n
    [/LIST]
    unsetenv DYLD_INSERT_LIBRARIES

    [LIST=|INDENT=2]
    [*] Unset DYLD_INSERT_LIBRARIES, so that amfi.dylib will no longer be inserted into every executable after this point
    [/LIST]
    bsexec .. /bin/rm -f /private/var/evasi0n/sock

    [LIST=|INDENT=2]
    [*] Delete any pre-existing socket file at /private/var/evasi0n/sock
    [/LIST]
    bsexec .. /bin/ln -f /var/tmp/launchd/sock /private/var/evasi0n/sock

    [LIST=|INDENT=2]
    [*] Create a symlink from /var/tmp/launchd/sock to /private/var/evasi0n/sock, allowing other code direct access to the root launchd socket


    [/LIST]
    Next, the exploit reboots the device, causing this configuration file to get run, line by line, on next boot. The interesting thing about amfi.dylib and evasi0n is that neither are code-signed. If you look at amfi.dylib with otool, you will see that it in fact has no TEXT/text section at all. No TEXT/text section means that there is nothing to sign, and therefore, it won't trip up the code-signing machinery. What it does have, is lazy binding information.

    $ dyldinfo -export amfi.dylib
    export information (from trie):
    [re-export] _kMISValidationOptionValidateSignatureOnly (_kCFUserNotificationTokenKey from CoreFoundation)
    [re-export] _kMISValidationOptionExpectedHash (_kCFUserNotificationTimeoutKey from CoreFoundation)
    [re-export] _MISValidateSignature (_CFEqual from CoreFoundation)

    This technique is described, at least, at networkpx Project Blog: Compiling iPhoneOS (3.1) apps with Xcode 3.2 without Provisioning Profile:

    "

    If we can force MISValidateSignature() to always return 0, any binaries will pass the test. This function is part of libmis.dylib, which is now part of the shared cache, so you can't binary patch this file. Replacing the implementation of a function is a perfect job with MobileSubstrate, unfortunately, no matter how I tried MS can't be injected. Therefore I use a trick: create a "proxy dynamic library" that changes only the MISValidateSignature function, and let the rest pass through."



    By clever usage of a codeless dynamic library, existing valid methods (such as CFEqual()) can be re-exported as different methods with the same method signature, such that MISValidateSignature will always return 0, allowing any unsigned binary to run.


    Conclusion


    Evasi0n is interesting because it escalates privileges and has full access to the system partition all without any memory corruption. It does this by exploiting the /var/db/timezone vulnerability to gain access to the root user’s launchd socket. It then abuses launchd to load MobileFileIntegrity with an inserted codeless library, which is overriding MISValidateSignature to always return 0.

    Quelle: http://blog.accuvantlabs.com/blog/bthomas/e…rland-component

    • Zitieren
  • Badly
    Erleuchteter
    Punkte
    24.975
    Beiträge
    4.326
    • 5. Februar 2013 um 19:46
    • #2

    Kaum aufwendig...*G*

    • Zitieren
  • tyson
    Gast
    • 5. Februar 2013 um 20:17
    • #3

    hey

    geht bei meinen s3 viel leichter löl.jeder wie er mag.

    mfg tyson

    • Zitieren
  • oboduebel
    Fortgeschrittener
    Punkte
    2.365
    Beiträge
    450
    • 6. Februar 2013 um 10:28
    • #4
    Zitat von tyson;491791

    hey

    geht bei meinen s3 viel leichter löl.jeder wie er mag.

    mfg tyson


    :lala::lala::lala:

    • Zitieren
  • Reppo
    Super Moderator
    Punkte
    69.655
    Beiträge
    12.683
    • 6. Februar 2013 um 11:17
    • #5

    [h=1]Planetbeing erklärt Evasi0n: Wie der iOS 6.x Jailbreak mit Evasi0n funktioniert![/h]
    Der Jailbreak mit Evasi0n dürfte dank unserer Anleitung für die meisten ein Kinderspiel gewesen sein. Doch die Entwicklung eines Jailbreaks für iPhone, iPad oder iPod touch ist in der heutigen Zeit nicht so einfach, wie man es sich vorstellt. Apple baut viele Mechanismen gegen den Jailbreak ein – ein bekanntes Katz-und-Maus Spiel, das die Sicherheit von iOS stets weiter erhöht hat. Planetbeing aka David Wang packt bei Forbes aus und erklärt den iOS 6.x Jailbreak.
    Das ganze liest sich einfacher als es ist. Jedem der dem Englischen mächtig ist empfehlen wir die “Original-Lektüre” bei Forbes. Wir haben hier in möglichst einfachen Worten den technischen Hintergrund für den Evasi0n Jailbreak zusammengefasst. Übrigens erklärt die Vorgehensweise der Hacker auch das Evasi0n Problem mit der verstellten Uhrzeit!


    1. Mit libmobiledevice (siehe dazu auch unser Interview mit pimskeks) kann Evasi0n eine Schwachstelle im iOS Mobile Backup ausnutzen und Zugriff auf eine Datei zu erhalten, die für die Zeitzone auf dem iPhone, iPad oder iPod touch verantwortlich ist (daher haben auch manche Probleme mit einer verstellten Uhrzeit nach Evasi0n)
    2. In dieser Zeitzonen-Datei wird ein symbolischer Link auf eine andere Datei gelegt. Dieser Link ermöglicht den Aufruf des Launch Daemon launchd mit root Rechten. Soll heißen – immer wenn das iOS Gerät das mobile Backup ausführt, kann über das Zeitzonen-File Zugriff auf launchd gewonnen werden.
    3. Ein weiteres Problem stellt das Code-Signing dar. Eigentlich erlaubt es Apple NUR, dass signierte Programme ausgeführt werden können. Durch einen Unix-Trick wird das File-System beschreibbar gemountet
    4. evasi0n ändert nun die Konfigurationsdatei des launchd namens launchd.conf – ab hier wird beim Start des Gerätes das Filesystem IMMER beschreibbar gemountet.
    5. Jetzt steht der Kernel an – das “Herz” des Betriebssystem. Der Launch Daemon lädt eine Library, die bei jeder Prüfung eines Programms auf eine vorhandene Apple Code-Signierung immer “zulässig” ausgibt.
    6. ASLR – Adress Space Layout Randomization – ist ein weiteres Problem beim Jailbreak. Eigentlich soll der Mechanismus jeden Code in zufällige Speicherbereiche schreiben – durch einen durch evasi0n bewusst herbeigeführten Crash kann evasi0n Rückschlüsse gewinne, auf welchen Speicherbereichen welcher Code liegt.
    7. Ein letzter Bug im iOS USB Interface ermöglicht evasi0n in jeden beliebigen Bereich des Kernels zu schreiben. Ab diesem Zeitpunkt – dem “Vollzugriff auf den Kernel” – ist jedes andere Sicherheitskonzept gegen den Jailbreak wirkungslos.

    Klingt super-einfach? Als Otto-normal Jailbreaker hat man “nur einen Klick” vom Evasi0n-Start bis zum jailbroken iOS Device, doch was da oben steht ist wirklich allerhöchste Hacking-Kunst. Wir möchten nochmals unseren Dank und vor allem Respekt an das komplette Evasi0n Evad3rs Team aussprechen. Denn diese Jungs haben unseren iOS Geräten endlich wieder Leben eingehaucht.



    Weiterlesen auf: Planetbeing erklärt Evasi0n: Wie der iOS 6.x Jailbreak mit Evasi0n funktioniert! | apfeleimer

    • Zitieren

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!

Benutzerkonto erstellen Anmelden

Spenden

Vielen Dank für die Unterstützung!
Hiermit unterstützt du Zebradem.
Das beinhaltet überwiegend die Serverkosten und Lizenzgebühren.
Spenden

Letzte Beiträge

  • BREIN Licht ins Dunkel: Illegale IPTV-Anbieter stark unter Druck

    heugabel 17. Mai 2025 um 16:27
  • Pluto TV

    Fellfresse 16. Mai 2025 um 21:07
  • VPN-Blockade in Frankreich: Gericht ordnet Sperre illegaler Streams an

    heugabel 16. Mai 2025 um 20:27
  • Kaffeetasse, KI und Scheidung: Ein merkwürdiger Fall aus Griechenland

    heugabel 16. Mai 2025 um 16:27
  • Telegram räumt auf: Ein radikaler Schritt gegen Onlinekriminalität

    heugabel 16. Mai 2025 um 15:27
  • MagisTV/FlujoTV: IPTV-Piraterie und ihre rechtlichen Konsequenzen

    heugabel 16. Mai 2025 um 08:27
  • Samsung TV Plus/Rakuten TV

    Fellfresse 15. Mai 2025 um 20:25
  • Unberechtigte Kontoabbuchungen: Ein wachsendes Problem

    heugabel 15. Mai 2025 um 16:27
  • Will1869: P2P-Releaser festgenommen - Tracker LaidBackManor geschlossen

    heugabel 15. Mai 2025 um 12:27
  • EU-Schwachstellen-Datenbank: Eine Antwort auf die amerikanische NVD

    heugabel 15. Mai 2025 um 08:27

Aktivste Themen

  • Apple iPhone 5 mit LTE und 4-Zoll-Display

    104 Antworten
  • UPDATE: Pod2G veröffentlicht Untethered iOS 5.0.1 Jailbreak für iPhone 4, iPhone 3GS

    59 Antworten
  • evasi0n - iOS 6.x Jailbreak - Status 100%

    48 Antworten
  • iOS 7.x Jailbreak ist da

    35 Antworten
  • CCcam App fürs IPHONE!!!

    34 Antworten
  • Cydia Apps sichern???

    32 Antworten
  • Jailbreak iOS 9.x.x

    31 Antworten
  • suche update anleitung auf ios5.01 fürs iphone 4

    31 Antworten
  • untethered Jailbreak für iOS 4.21 erschienen

    31 Antworten
  • Frage: Stand Jailbreak ios 10.x.x

    30 Antworten
  1. Kontakt
© 2024 Zebradem - Software by WoltLab