Bir dakikalık jailbreak iOS 11.4 Dünyanın en iyi hacker konferansı DEFCON ayrıntılı tartışma

Lei Feng'den editörün notu: Apple, sistemi kötü amaçlı yazılımlardan korumak için hem macOS hem de iOS'ta bir korumalı alan mekanizması benimsedi. Dünyaca ünlü hacker konferansı DEFCON'daki bu konuşmada, Ali Security'den güvenlik araştırmacıları iOS'un en son sürümündeki korumalı alan mekanizmasını ve korumalı alan yapılandırma dosyasının nasıl elde edileceğini analiz ettiler. Ardından, iOS'taki IPC mekanizmasını tartıştı ve birkaç klasik sanal alan kaçış güvenlik açığını gözden geçirdi. Ardından, güvenlik araştırmacısı, iOS 11.4'te iki sanal alan kaçış 0 gün güvenlik açığı gösterdi.

Güvenlik Ali tarafından sunulan bu makale, yazar: haşlanmış pirinç, Bai Xiaolong

0x01 Sandbox'a Giriş

Apple, sandbox'ı macOS 10.5'te MACF stratejisinin ilk tam uygulamasını sağlayan "SeatBelt" olarak tanıttı. MacOS'ta başarılı bir denemenin ardından Apple, korumalı alan mekanizmasını iOS 6'ya uyguladı. Yeni sistemlerin piyasaya sürülmesiyle veya yeni tehditlerin ortaya çıkmasıyla, sandbox kancalarının sayısı istikrarlı bir şekilde artmaktadır. Aşağıda, iOS / macOS'un her sürümündeki kanca sayısı verilmiştir:

Başlangıçta, Apple'ın korumalı alanı bir kara liste yaklaşımı kullandı; bu, Apple'ın bilinen tehlikeli API'leri entegre ettiği ve bunları engellediği ve böylece diğer herkesin varsayılan olarak kullanmasına izin verdiği anlamına geliyordu. Apple Sandbox'ın geliştirilmesiyle, tüm API'leri reddeden ve yalnızca Apple'ın güvendiği güvenli arayüzlere izin veren bir beyaz liste yaklaşımı benimsedi.

MacOS'ta, yapılandırma dosyaları görülebilir ve / System / Library / Sandbox / Profiles konumunda saklanır. İOS'ta, yapılandırma dosyası / usr / libexec / sandboxd olarak derlenir. Sanal alan yapılandırma dosyasının kodunu çözmek zordur, ancak dönüş değerine dayalı olarak makine arama listesini elde etmek için tüm Mach hizmetlerini gezebiliriz (örneğin, Jonathan Levin'in sbtool'u aracılığıyla).

Güvenlik açığını bulmak için, ilgili Mach hizmetinin işleme işlevini içeren ikili dosyayı söküp analiz etmemiz gerekir. / System / Library / LaunchDaemons, çoğu Mach hizmeti için yapılandırma plistini içerir. Plist dosyasında, "ProgramArguments" alanı ikili dosyanın yolunu gösterir ve "MachServices" ilgili mach hizmetlerini gösterir.

0x02 iOS IPC: Mach, XPC ve NSXPC

Mach mesajları, bağlantı noktası izinlerini ve büyük bellek alanlarına referansları içerebilen yazılı veriler içerir. XPC mesajları Mach mesajlarına dayanır ve NSXPC mesajları XPC mesajlarına dayanır. Mach mesajları aracılığıyla, korumalı alandaki uygulamalar korumalı alanda olmayan Mach (MIG) hizmetleri, XPC hizmetleri ve NSXPC hizmetleri ile iletişim kurabilir.

0x03 Eski güvenlik açıklarından yenilerine

Bluetoothd'nin "com.apple.server.bluetooth" Mach hizmetinde (0xFA300'den başlayarak) 132 işlev vardır. Bluetooth, korumalı alandaki uygulamalarla ve diğer korumalı olmayan işlemlerle (örneğin, SpringBoard) "com.apple.server.Bluetooth" aracılığıyla iletişim kurar. İşlem, bluetoothd için session_token oluşturmak için BTSessionAttach'ı kullanabilir ve ardından olay bildirimleri için geri aramaları kaydetmek için BTLocalDeviceAddCallbacks'i kullanabilir.

Ancak Bluetoothd, süreçleri tanımlamak için yalnızca oturum belirteçlerini kullanır; bu, Bluetooth ile korumalı alan dışındaki işlemler arasındaki iletişimi oturum belirteçleri aracılığıyla ele geçirmek için korumalı alan uygulamalarını kullanabileceğimiz anlamına gelir (CVE-2018-4087).

Güvenlik açığının nedeni, ses_token'ın kaba kuvvetle kırılamayacak kadar kolay olmasıdır. Yalnızca 0x10000 (0x0000-0xFFFF) olası değerleri vardır. Apple bu sorunu her oturuma user_id (= arc4random) ekleyerek çözer, yalnızca işlemin kendisi user_id'yi bilir ve bluetoothd map == user_id'yi kontrol eder.

Daha önce belirtildiği gibi, user_id = arc4random =. Session_token'ı biliyorsak, yine de user_id aracılığıyla iletişimi şiddetle ele geçirebiliriz. Ancak uzun sürüyor (yaklaşık 12 saat). User_id doğrulaması yoksa, başka herhangi bir geri arama kayıt işlevi var mı? Bingo! 0xFA365 BTAccessoryManagerAddCallbacks!

Ancak, BTAccessoryManagerAddCallbacks aracılığıyla bluetoothd'ye bir mesaj gönderdikten sonra hiçbir şey olmuyor! Sonunda sorunu buldum. Geri arama olayı yalnızca iOS cihazı yeni bir cihaza bağlandığında tetiklenir; bu, geri aramayı tetiklemek için Bluetooth cihazını manuel olarak tıklamamız gerektiği anlamına gelir.

CallBacks 1 (uzun zaman alır), CallBacks 2 (tetiklemesi zor) ve CallBacks 3 tekrar! Bu sefer, bir geri arama işlevini kaydedebilen yeni bir işlev keşfettik ve tetiklemesi kolay!

0xFA329 BTDiscoveryAgentCreate, keşif aracısı için bir geri arama oluşturabilir ve ardından manuel olarak tıklatmadan geri aramayı tetiklemek için 0xFA32B BTDiscoveryAgentStartScan kullanabiliriz!

0x04, PC'den ROP'a

Amacımız sadece PC işaretçisini kontrol etmek değil, aynı zamanda tüm süreci kontrol etmektir. Bir sonraki adım, ROP zincirini oluşturmak ve hedef işlemde yığın püskürtme yapmaktır. Bu durumda, MACH_MSGH_BITS_COMPLEX Mach mesajını ve MACH_MSG_OOL_DESCRIPTOR formatını kullanıyoruz. Bir mesaj gönderir ve bir mesaj almazsak, ROP zinciri hedefin hafıza alanında kalmaya devam edecektir. Birçok testten sonra, 0x105400000 adresinde bir MAGIC_ADDR bulabiliriz.

Kontrol edebileceğimiz kayıtlar: X3, X4, X5, X19, X20. Son BR X4'tür. Şimdiye kadar sadece BOP (JOP) yapabiliyoruz. Ancak bu durumda program akışını kontrol etmek bizim için zor. Bu nedenle, yığını kontrol etmek ve BOP'tan ROP'a dönüştürmek için bir yığın pivotuna ihtiyacımız var.

Libsystem_platform.dylib'de harika bir yığın pivot gadget'ı bulunabilir. X0'ı kontrol edebilirsek, sp'yi kontrol edebiliriz.

0x05 ROP'tan görev portuna

Bağlantı noktası, IPC için bir uç nokta sağlar. Bağlantı noktasına mesajlar gönderilebilir veya buradan alınabilir. Bağlantı noktaları izinler içerebilir ve bağlantı noktası izinleri iletilerde geçirilebilir. Bir sürecin en önemli bağlantı noktası mach_task_self'dir. İşlemin belleği ve tüm kayıtları, görev portu üzerinden kontrol edilebilir.

Uzak bir işlemde bellek ayırmak için mach_vm_allocate (target_task_port, & remote_addr, remote_size, 1) kullanabiliriz. mach_vm_write (target_task_port, remote_address, local_address, length) verileri uzak bir işleme kopyalamak için kullanılabilir. thread_create_running (target_task_port, ARM_THREAD_STATE64, & thread_state, stateCnt ve thread_port) uzak süreçlerde yeni evreler oluşturmak için kullanılabilir. Bu nedenle, bir sürecin görev portunu alabilirsek. Tüm süreci mach msg ile kolayca kontrol edebiliriz.

Mach_portal'dan öğrenilen bazı beceriler:

1. Porta gönderme izni eklemek için mach_port_insert_right (mach_task_self (), port, port, MACH_MSG_TYPE_MAKE_SEND) kullanabiliriz. Bu tür bağlantı noktaları, MACH_MSG_PORT_DESCRIPTOR tipi OOL mesajları aracılığıyla gönderilebilir.

2. Çoğu durumda, mach_task_self 0x103 döndürür, bu nedenle ROP kullanmadan 0x103 kullanabiliriz (mach_task_self () çağrısı).

3. Görev portunu pwn uygulamamıza göndermek için, pwn uygulamamızın port numarasını bilmemiz gerekiyor. Ama bize yardım etmek için launchd'yi kullanamayız. Neyse ki, bağlantı noktası numarası (0x103 + 0x100 * N) ile tahmin edilebilir. Bu nedenle uzak işleme 0x1000 portu gönderiyoruz (başarı oranını artırmak için).

Ancak iOS 11'de Apple, görev bağlantı noktasını elde etmek için korumalı alandaki uygulamayı kontrol etmek için yeni bir azaltma mekanizması ekledi:

0x06 B Planı

Görev bağlantı noktasını kolayca elde edemememize rağmen, herhangi bir işlevi çağırmak için aşağıdaki ROP aracını kullanabiliriz:

Bu ROP'ları kullanarak, daha fazla saldırı yüzeyi açabilir ve çekirdeğe daha fazla saldırabiliriz.

0x07 Referanslar

1. MacOS ve * İşletim Sistemi Dahili Parçaları

2. Pangu 9 Internals https://www.blackhat.com/docs/us-16/materials/us-16-Wang-Pangu-9-Internals.pdf

3. triple_fetch https://bugs.chromium.org/p/project-zero/issues/detail?id=1247

4. https://blog.zimperium.com/cve-2018-4087-poc-escaping-sandbox-misleading-bluetoothd/

5. Mach portalı https://bugs.chromium.org/p/project-zero/issues/detail?id=965

0x08 güncellemesi

Haziran ayında, makalede bahsedilen iki "0day" güvenlik açığı tarafımızca Apple'a gönderildi ve iOS 11.4.1 ve iOS 12 beta'da düzeltildi (CVE-2018-4330 ve CVE-2018-4327) . Ancak iOS 11.4 ve önceki sürümlerde kullanılabilir.Olası saldırılardan kaçınmak için lütfen iOS'unuzu mümkün olan en kısa sürede yükseltin.

Leifeng.com, Leifeng.com, Leifeng.com üzerinden üç kez önemli şeyler söyleniyor.

Çok tatlılar tabi ki öyleler! ? Koca adam
önceki
Birinci sınıftaki çocuklar çevrimiçi alışverişe gidecek ve üçüncü sınıftaki çocuklar program yapabilecek ... Okulun ilk gününde ödev becerilerini sergilemiyorlar.
Sonraki
Beyler trendi karşılıyor, bu yüzden NMD boyutuna göre oynandı? X Henry Poole x adidas Originals
Daha ağır dahili eğitim testi Geely Vision SUV 1.3T CVT
Üniversiteye giden ilk cep telefonu bu 5 seçenekten kesinlikle kaybetmeyeceksiniz
DRAM satışları tarihsel olarak 100 milyar ABD dolarını aşacak ve Samsung aynı zamanda yarı iletken lideri mi olacak?
Akıllı balkonlu ev aletlerinin yükselişi Akıllı kurutma raflarının geleceği beklenebilir!
Gişe rekorları kıran filmlerin "ders kitabı benzeri oyunculuğa" ihtiyaç duymadığını kim söyledi "Predatory City" nin "büyük keşfi" aslında o.
Çok istenen bir renk şemasıyla başlayın, Y-3 Qasa Highın yeni renk şeması şimdi satışta
Zamanımı kurtarın! Süper güçlü dış ticaret araçları, dünyanın her yerinden ülkeler burada!
Çevrimdışı pazardaki en uygun maliyetli selfie amiral gemisi: Redmi Note 5A High Edition Ayrıntılı İnceleme
Kralın ihtişamının bir mucizesi vardır ve büyük bir hamlesi ve bir parıltısı olan kahramanlar
"Deadpool 2: I Love My Family" 8 biten yumurta Marvel film rekorunu kırdı, Stan Lee'nin mesajı insanları ağlatıyor
Son Rolls-Royce Phantom Resmi imajı yıl içinde değiştirilecek
To Top