Gerçekten, El Capitan'daki “köksüz” özellik nedir?


241

El Capitan'daki "Rootless" özelliğini yeni öğrendim ve "Kök kullanıcısı yok", "Hiçbir şey değiştiremez /System" ve "Dünya kötüye gidemeyiz çünkü sona erecek" gibi şeyler duyuyorum .

El Capitan’ın teknik açıdan "Rootless" özelliği nedir? Aslında kullanıcı deneyimi ve geliştirici deneyimi için ne anlama geliyor? Will sudo -shala eğer öyleyse, çalışmak ve nasıl olacak şekilde bir kabuk kullanma deneyimi rootdeğişikliği?


8
“Aslında kullanıcı deneyimi ve geliştirici deneyimi için ne anlama geliyor?” Kullanıma başladığından beri beta kullanıyorum ve bu ilk duyduğum şey. sudove şifre sorma normal / önceden / beklendiği gibi çalıştı. Yani, muhtemelen cevap "farketmeyeceğin çoğu zaman; bunu yaptığında, çok zor anlarsın".
OJFord

3
Çok basit - bir özellik olarak taklit eden bir hata.
Wolfgang Fahl

Birisi yanlışlıkla çıkarsa /usr/localve kendisini yeniden oluşturamayacağını tespit ederse, bu cevaba buradan bakın .
Lloeki

Yanıtlar:


279

Birincisi: "rootless" adı yanıltıcıdır, çünkü hala bir root hesabı vardır ve buna hala erişebilirsiniz (resmi ad, "Sistem Bütünlüğü Koruması", daha doğrudur). Asıl yapması gereken, kök hesabın gücünü sınırlamaktır, böylece root olsanız bile, sistem üzerinde tam kontrol sahibi olmazsınız. Temel olarak fikir, kötü amaçlı yazılımın root erişimini sağlayamaması için çok kolaydır (örneğin, kullanıcıya bir kimlik doğrulaması iletişim kutusu sunarak, kullanıcının yönetici şifresini refleks olarak girmesine neden olur). SIP, kökün kötüleşmesine rağmen kötü amaçlı yazılımların nüfuz edemeyeceği başka bir koruma katmanı ekler. Bunun kötü yanı, elbette, kasıtlı olarak yaptığınız işler için de geçerli olması gerektiği. Ancak kök üzerine koyduğu kısıtlamalar o kadar da kötü değil; çoğu "normal" i engellemezler

İşte kökten bile kısıtladığı şey:

  • Sen bir şey değiştiremez /System, /bin, /sbin, veya /usr(hariç /usr/local); veya yerleşik uygulamalardan ve yardımcı programlardan herhangi biri. Yalnızca Yükleyici ve yazılım güncellemesi bu alanları değiştirebilir ve hatta yalnızca Apple imzalı paketleri yüklerken bunu bile yapabilir. Ancak normal işletim sistemi X tarzı özelleştirmeler içeri girdiğinden /Library(veya ~/Libraryveya /Applications) ve unix tarzı özelleştirmelerden (örneğin Homebrew) içeri girer /usr/local(veya bazen /etcveya /opt), bu büyük bir sorun olmamalıdır. Ayrıca başlangıç ​​düzeyinde diske blok yazma yapılmasını önler, böylece bu şekilde atlayamazsınız.

    Kısıtlı dizinlerin tam listesi (ve bazı istisnalar /usr/localve diğerleri gibi) /System/Library/Sandbox/rootless.conf. Tabii ki, bu dosyanın kendisi sınırlı bir alanda.

    El Capitan'a yükselttiğinizde, herhangi bir "yetkisiz" dosyayı sınırlı alanlardan alana taşır /Library/SystemMigration/History/Migration-(some UUID)/QuarantineRoot/.

  • Hata ayıklama (veya hangi dinamik kitaplıkları yüklediklerini değiştirme) gibi şeyleri için sistem işlemlerine (örneğin, bu sistem konumlarından çalışanlar) ekleyemezsiniz. Yine, çok fazla bir şey değil; geliştiriciler hala kendi programlarında hata ayıklayabilir.

    Bu, yerleşik Apple uygulamalarına (özellikle de Bulucuya) kod enjekte etmek gibi bazı önemli şeyleri engeller. Ayrıca dtrace, sistem izleme için temelli araçların (örneğin opensnoop) birçok sistem sürecini izleyemeyeceği ve raporlayamayacağı anlamına gelir .

  • Doğru şekilde imzalanmadıkça çekirdek uzantılarını (kexts) yükleyemezsiniz (örneğin, Apple veya Apple onaylı bir geliştirici tarafından). Bunun kext imzasını zorlamak için eski sistemi değiştirdiğine dikkat edin (ve bunu atlamanın eski yolları). Ancak v10.10.4 Apple, üçüncü taraf SSD'ler için trim desteğini etkinleştirme yoluna sahip olduğundan, imzasız kexts kullanmanın 1 numaralı nedeni ortadan kalktı.

  • Sierra'dan başlayarak (10.12), bazı başlatılan yapılandırma ayarları değiştirilemez (örneğin, bazı başlatılan bölmeler kaldırılamaz).

  • Mojave'den (10.14) başlayarak, kullanıcıların kişisel bilgilerine (e-posta, rehber vb.) Erişim, kullanıcının bu bilgilere erişmek için onayladığı uygulamalarla sınırlıdır. Bu genellikle ayrı bir özellik olarak kabul edilir (Kişisel Bilgilerin Korunması veya TCC olarak adlandırılır), ancak SIP'e dayanır ve SIP'in devre dışı bırakılması da onu devre dışı bırakır. Bkz. "Uygulamaların kişisel verilere erişimi kısıtlamak için macOS Mojave ne ve nasıl uygular?"

Bu kısıtlamaları istemiyorsanız - sisteminizi izin verenin ötesinde değiştirmek istediğiniz için veya bu kısıtlamalar altında pratik olmayan kexts gibi bir şey geliştirip hata ayıkladığınızdan, SIP'yi kapatabilirsiniz. Şu anda bu, kurtarma moduna yeniden başlatmayı ve komutu çalıştırmayı gerektirir csrutil disable(ve benzer şekilde yeniden etkinleştirebilirsiniz csrutil enable).

Seçmeli olarak SIP'nin bölümlerini de devre dışı bırakabilirsiniz . Örneğin, csrutil enable --without kextSIP'in çekirdek uzantısı sınırlamasını devre dışı bırakacak, ancak diğer korumalarını yerinde bırakacaktır.

Ancak lütfen SIP'yi devre dışı bırakmadan önce geçici veya kısmen bile olsa durun ve düşünün: gerçekten devre dışı bırakmanız mı gerekiyor, yoksa istediğinizi yapmanın daha iyi (SIP uyumlu) bir yolu var mı? Gerçekten /System/Libraryveya bir şeyde bir şeyi değiştirmeye ihtiyacınız var mı /bin, yoksa daha iyi bir yerde /Libraryya da benzeri bir şeyde gidebilir /usr/local/binmi? SIP, alışık değilseniz kısıtlamayı “hissedebilir” ve onu etkisiz hale getirmenin bazı meşru nedenleri var, ama onu gerçekten zorlayan şeylerin çoğu zaten en iyi uygulama.

Mümkün olduğunca zaman kadar SIP kadar terk önemini etkin altını çizmek, 23 Eylül olaylarını düşünün 2019 tarihinde gelen sembolik bir bağlantı yerine çalıştı Chrome için bir güncelleme yayınladı /varetmek /private/var. Çoğu sistemde SIP bunu engelledi ve kötü bir etkisi olmadı. SIP'nin devre dışı bırakıldığı sistemlerde, macOS'u kırılmış ve okunaksız hale getirdi. SIP'yi devre dışı bırakmanın en yaygın nedeni, onaylanmamış (/ yanlış imzalanmış) çekirdek uzantılarını (özellikle video sürücüleri) yüklemek; kext kısıtlamasını sadece etkisiz hale getirselerdi, etkilenmezlerdi. Bkz resmi Google destek ipliği , üzerinde bir süper Q & A ve bir Ars Technica makalesine .

Kaynaklar ve daha fazla bilgi: "Güvenlik ve Uygulamalarınız'a" konulu WWDC sunumu , bir quora.com üzerinde Eldad Eilam tarafından iyi açıklama , El Capitan Ars Technica yorumu ve bir SIP Apple destek makale ve Zengin Trouton tarafından derin bir dalış ( kim de bu soruya bir cevap gönderdi ).


1
Güzel, teşekkürler. Bu soruyu sordum çünkü başka bir Yığın Borsası sorusundaki o quora makalesine bağlantı yapmak üzereydim ve sonra bunun doğru hareket olmadığını anladım ;-)
Josh

15
... Ayrıca bu tamamen kextsınırsız erişime dönmek için komut satırında çalıştırabileceğim bir ikili oluşturmak için kendime izin verecek bir şeyler yazmak istememi sağlıyor !
Josh,

1
@Vladimir Üzgünüz, Apple'ın planları hakkında içeriden hiçbir bilgim yok. Tahminime göre, öngörülebilir gelecek için buralarda olacak, ancak önümüzdeki birkaç sürümde (ve SIP'in kendisi) önemli ölçüde değişmiş olsaydım şaşırmam.
Gordon Davisson

5
Apple'dan nefret ettiğim anlar var. Kendini ayağından vurmaya zorladığın için minnettarım (yıllar önce bir keresinde yanlışlıkla Linux'ta MBR'ime bir metin dosyası yakaladım); güzel bir korumayı etkisiz hale getirme sürecinden geçmek, sadece bu amaç için çok paternalist ve can sıkıcıdır. Uyarılar ile ekstra bir iletişim yeterli olurdu.
Mars,

2
Daha az müdahaleci yol SIP'yi devre dışı bırakıyor gibi görünüyor, ana dosyayı yalnızca gerçekten değiştirmek istediğiniz ikililerin üzerindeki kısıtlamaları kaldırmak için düzenleyin ve SIP'i yeniden etkinleştirin.
Joshua

93

Benim için DTrace artık çalışmıyor demektir.

DTrace, Linux'ta ptrace / strace'e benzer, çünkü bir sürecin çekirdeğe ne dediğini görmenize izin verir. Bir işlem bir dosyayı açmak, bir dosyayı yazmak veya bir portu açmak vb. İstediğinde, çekirdeğe sorması gerekir. Linux'ta, bu izleme işlemi "userland" deki çekirdeğin dışında gerçekleşir ve bu nedenle izinler oldukça iyi tanelidir. Bir kullanıcı kendi uygulamalarını izleyebilir (hataları düzeltmek, bellek sızıntılarını bulmak, vb.) Ancak başka bir kullanıcının işlemlerini izlemek için root olması gerekir.

Bununla birlikte, OSX'teki DTrace, çekirdek düzeyinde çalışır, çok daha performanslı ve güçlü olur, ancak problarını çekirdeğe eklemek ve böylece her şeyi yapmak için kök erişimi gerektirir. Bir kullanıcı kendi süreçlerini kök olmadan izleyemez, ancak kök olarak sadece kendi süreçlerini izleyemezler, aslında sistemdeki ALL süreçlerini aynı anda izleyebilirler. Örneğin, bir dosyayı (iosnoop ile) izleyebilir ve hangi işlemin onu okuduğunu görebilirsiniz. Bu, kötü amaçlı yazılımları tespit etmek için şimdiye kadarki en kullanışlı özelliklerden biridir. Çekirdek ağ IO ile de ilgilendiği için aynı şey orada geçerlidir. Wireshark, olağandışı ağ etkinliklerini algılar, DTrace, çekirdeğin kendisi gibi sisteme gömülü olsa bile verileri gönderme işlemini size söyler.

Bununla birlikte, El Capitan'dan itibaren Apple, DTrace'in çalışmasını bilinçli bir şekilde önledi - tıpkı SIP'in kısıtladığı gibi, özellikle hedeflendi ve seçildi. Bunu neden yaptılar? Eh, daha önce Apple bazı işlemlerin DTrace ile izlenmesini engellemek için bazı çekirdeği ve DTrace'i değiştirdi (bazı süreçler şu anda çok sayıda güvenlik araştırmacısını kötüye götüren kötü amaçlı yazılımlar bile olsa sınırsızdı). Bunun nedeni, DRM'yi iTunes gibi uygulamalarda korumaktı; çünkü teorik olarak biri DR-DRM'd verilerini işlem belleğinin DTrace edip tutabiliyordu.

Ancak, araştırmacıların işlerini yapmaya devam etmelerine izin veren önemli bir çalışma vardı ve çekirdeği bu vazgeçme bayrağını yoksayması için değiştirdi, bu nedenle DTrace hala bu süreçlerde kullanılabiliyordu. Bu gerçekten de harikaydı çünkü programlar bu DTrace olmayan bayrakla aydınlatılan yerlerde algılamadan kaçmaya çalışıyor. Apple ya da kötü adamların saklamak istediği her şey, doğrudan görüşündeydi ...

Ama şimdi çalışmıyor, peki bu sizi nasıl etkiler? Bu sizi hem doğrudan hem de dolaylı olarak etkileyecektir. Doğrudan, sisteminizi izleme yeteneğinizi sınırlar. Çok sayıda düşük seviyeli sistem yönetimi ve izleme araçları (daha yüksek seviyeli araçların üzerine inşa edildiği) çalışmayacaktır. Ancak dolaylı etki daha büyük olacaktır - güvenlik uzmanları en kötü tehdit türlerini tespit etmek için derin sistem erişimine güveniyorlar. Bunu daha fazla yapamayız. Kötü amaçlı yazılımları analiz ederken hata ayıklayıcı veya bal küpünde çalıştığını bilmediği için kritik öneme sahiptir. SIP'yi devre dışı bırakmak, tüm yazılımlara (hem kötü adamlardan hem de Apple'dan) bu sistemin izlendiğini söyler. Artık gözlemcileri izlemek yok. SIP güvenlik konusunda olsaydı, kullanıcıları kök hakkında eğitmiş olabilirler - bunun yerine kaldırdılar. Nihayetinde bu, Apple’ın kök şifrenin “hepsi ve tümü” güvenlik bariyerinin yerini aldı, “hepsi ve sonu” SIP koruma mekanizması. Ya da sosyal mühendislikteki herhangi bir iyiliğiniz varsa, yeniden başlatılan bir kök parola ...

Bu da var: görüntü tanımını buraya girin


3
Ayrıca, bu cevabı, soruyu cevaplamadığı için reddettim, yani: El Capitan'ın teknik düzeyde "Rootless" özelliği nedir? Sudo-s hala çalışacak mı ve öyleyse, bir kabuğun kök değişikliği olarak kullanma deneyimi nasıl olacak? . Bu cevap sadece DTrace hakkında konuşuyor gibi görünüyor
Josh

24
Bence cevabın sorunun net ve kesin bir şekilde konuştuğunu düşünüyorum; bu, bir kabuğun kök olarak kullanılması deneyiminin nasıl değişeceğini ifade eder. Sudo şimdi sahte sudo. Aslında, bir mimari katman eklenmiştir. Benimle alakalı görünüyor. Ve bu adamın geçim kaynağı. Neden aşağı oy verdin?
sas08

5
@ patrix Epistemolojik ayrımı anlamıyorum. Ne işleri, ne yaptıkları ve neden var olduklarıyla yakından ilgilidir. Bu yayının, ortamlarda bir özellik hakkında konuşmaya başladığından emin olun , ancak kapsam dışındadır. "Bu, geliştirici deneyimini nasıl değiştirir?" Aslında, geliştiricilerin deneyimleri hakkında konuşmaları için açık uçlu ve öznel bir davetiye. Bu soruları yan yana koyma, belirsiz ve abartılı bir itiraza itiraz etmek, "dünya sona erecek, çünkü kökünüz", zarar verme fikrini reddetmiş görünüyor; bu dev deneyime zarar verir.
sas08

4
Daha fazla bilgi eklemeyeceğim Josh, çünkü diğer cevapların söylediklerini kopyalayacağım ve sayfaya gerçekten bir şey ekleyemeyeceğim. Artık en iyi cevap DTrace hakkında artık daha fazla bilgi içermiyorsa daha iyi bir bilgi içeriyorsa daha iyi olurdu, ve sonra bu cevabı gereksiz olarak kaldıracağım :) Diğer cevap arstechnica.com/apple/2015/09/ os-x-10-11-el-capitan-ars-technica-inceleme / 9 / üst yorumda bağlantılı, o da gidebilir. Fakat bu cevabın içindeki bazı şeyler, DTrace’in sudo olarak SIP ile çalışmamasına rağmen, internette başka hiçbir yerde değil ama burada
JJ

3
Şimdiye dek tespit ettiğim tek şey, DTrace için SIP'yi devre dışı bırakırsanız, El Cap'ten sistemle gelen her şey (Safari gibi) olduğundan, kısıtlayıcı haklara tabi olmayan işlemlere ekleyebilirsiniz. Tüm sistem ikili dosyalarını / rootless (aynı dizin yapısına sahip) gibi yeni bir dizine kopyalamak, sonra da / rootless için chroot yapmak için "aptal" bir yol var. Artık her şey haksız olarak çalıştırılıyor ve eklenebilir. En akıllı yol dosya sisteminizi yeniden monte etmektir, ancak Apple'ın neden bu boşluğu kilitleyeceğinden şüphelenmeyeceğinden nasıl / neden olduğunu söylemekten korkuyorum ...
JJ

49

Sistem Bütünlüğü Koruması (SIP), sistem dosyalarının ve işlemlerin üçüncü taraflarca değiştirilmesini önlemek amacıyla genel bir güvenlik politikasıdır. Bunu başarmak için aşağıdaki kavramlara sahiptir:

  • Dosya sistemi koruması
  • Çekirdek uzatma koruması
  • Çalışma zamanı koruması

Dosya sistemi koruması

SIP, Apple dışındaki tarafların belirli dizinlerde depolanan dizinleri ve dosyaları eklemelerini, silmelerini veya değiştirmelerini önler:

/bin
/sbin
/usr
/System

Apple, aşağıdaki dizinlerin geliştiricilerin erişebilmesi için uygun olduğunu belirtti:

/usr/local
/Applications
/Library
~/Library

Tüm dizinleri /usrhariç /usr/localSIP tarafından korunmaktadır.

SIP korumalı dosyaları ve dizinleri, Apple'ın kendi sertifika yetkilisi tarafından imzalanan bir yükleyici paket aracılığıyla eklemek, kaldırmak veya değiştirmek mümkündür. Bu, Apple'ın mevcut SIP korumalarını değiştirmeye gerek kalmadan OS'nin SIP korumalı kısımlarında değişiklik yapmasını sağlar.

Söz konusu sertifika yetkilisi, Apple tarafından kendi kullanımları için ayrılmıştır; Geliştirici Kimliği imzalı yükleyici paketleri, SIP korumalı dosyaları veya dizinleri değiştiremez.

Hangi dizinlerin korunduğunu tanımlamak için, Apple şu anda dosya sisteminde iki yapılandırma dosyası tanımlamıştır. Birincisi aşağıdaki yerde bulunur:

/System/Library/Sandbox/rootless.conf

burada rootless.conftüm uygulamaları ve SIP koruyucu dizinlerin üst düzey listeler.

görüntü tanımını buraya girin

Uygulamalar

SIP, OS X'in Uygulamalar ve Uygulamalar Yardımcı Programları'na yüklediği temel uygulamaları koruyor. Bu, kök ayrıcalıkları kullanırken bile komut satırından bile OS X'in yüklediği uygulamaları silmek mümkün olmayacağı anlamına gelir.

görüntü tanımını buraya girin

görüntü tanımını buraya girin

Dizinler

SIP ayrıca, dışında bir takım dizinleri ve sembolik bağları koruyor /Applicationsve bu dizinlerin üst seviyesi de listeleniyor rootless.conf.

görüntü tanımını buraya girin

Korumalara ek olarak, Apple ayrıca rootless.conf dosyasında SIP'in korunmasına ilişkin bazı istisnalar da tanımlamıştır ve bu istisnalar yıldız işaretleriyle işaretlenmiştir. SIP'in korumasından muaf olan bu istisnalar, bu konumlara dosya ve dizin eklemenin, kaldırmanın veya değiştirmenin mümkün olduğu anlamına gelir.

görüntü tanımını buraya girin

Bu istisnalar arasında aşağıdakiler yer almaktadır:

  • /System/Library/User Template - burada OS X, yeni hesaplar için giriş klasörleri oluştururken kullandığı şablon dizinlerini saklar.
  • /usr/libexec/cups - OS X'in yazıcı yapılandırma bilgilerini sakladığı yer

Apple, bu dosyanın kendisine ait olduğunu ve üçüncü tarafların üzerinde yapılan değişikliklerin Apple tarafından değiştirileceğini düşünmektedir.

Hangi dosyaların SIP tarafından korunduğunu görmek için Terminal'de "tire" harfiyle O lskomutunu kullanın :

ls -O

SIP korumalı dosyalar sınırlı olarak etiketlenir .

görüntü tanımını buraya girin

Bilmenin önemli bir düşüncesi, bir bağlantı linki SIP tarafından korunsa bile, bunun mutlaka bağlandıkları dizinin SIP tarafından korunmakta olduğu anlamına gelmez. Bir OS X El Capitan önyükleme sürücüsünün kök düzeyinde, adlandırılmış kök düzeyi dizininde depolanan dizinleri gösteren birkaç SIP korumalı sembolik bağlantı vardır private.

Ancak, privatedizinin içeriği incelendiğinde, bu sembolik bağların gösterdiği dizinler SIP tarafından korunmaz ve her ikisi ve içerikleri, kök ayrıcalıkları kullanılarak işlemler tarafından taşınabilir, düzenlenebilir veya değiştirilebilir.

görüntü tanımını buraya girin

Apple'ın belirlediği SIP istisnaları listesine ek olarak, rootless.confikinci bir SIP istisnaları listesi vardır. Bu liste, üçüncü taraf ürünleri için bir dizi dizin ve uygulama adı içerir. Benzer şekilde rootless.conf, bu dışlama listesi Apple'ındır ve herhangi bir üçüncü tarafın bu değişikliklerinde Apple tarafından yazılacaktır.

/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths

Çalışma zamanı koruması

SIP korumaları, sistemi dosya sistemi değişikliklerinden korumakla sınırlı değildir. Ayrıca artık işlevlerinde kısıtlı olan sistem çağrıları da var.

  • task_for_pid () / processor_set_tasks () EPERM ile başarısız
  • Mach özel portları çalıştırmada sıfırlandı (2)
  • dyld ortam değişkenleri göz ardı edilir
  • DTrace probları kullanılamıyor

Bununla birlikte, SIP geliştirici tarafından geliştirilirken kendi uygulamalarının denetimini engellemez. Xcode'ın araçları, geliştirme sürecinde uygulamaların denetlenmesine ve hata ayıklanmasına izin vermeye devam edecek.

Bununla ilgili daha fazla ayrıntı için, Apple'ın SIP geliştiricisinin belgelerine bir göz atmanızı tavsiye ederim .

Çekirdek uzatma koruması

SIP, imzalanmamış çekirdek uzantılarının yüklenmesini engeller. SIP etkinleştirilmiş OS X El Capitan'a bir çekirdek uzantısı yüklemek için, bir çekirdek uzantısı şunları yapmalıdır:

  1. Kexts sertifikasını imzalamak için bir Geliştirici Kimliği ile imzalanma
  2. / Library / Extensions içine yükleyin

İmzasız bir çekirdek uzantısı yüklüyse, önce SIP'nin devre dışı bırakılması gerekir.

SIP yönetimi hakkında daha fazla bilgi için, lütfen aşağıdaki bağlantıya göz atın:

Sistem Bütünlüğü Koruması - Apple'ın güvenlik modeline başka bir katman ekleme


4
Ekran görüntülerinin düz metinle değiştirilebilmesi harika olurdu, bakınız: Kod ve / veya hataların ekran görüntülerinden vazgeç .
kenorb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.