Apa sebenarnya fitur "tak menentu" di El Capitan?

242

Saya baru saja belajar tentang fitur "Rootless" di El Capitan, dan saya mendengar hal-hal seperti "Tidak ada pengguna root", "Tidak ada yang bisa memodifikasi /System" dan "Dunia akan berakhir karena kita tidak bisa mendapatkan root".

Apa fitur "Rootless" dari El Capitan di tingkat teknis? Apa arti sebenarnya dari pengalaman pengguna dan pengalaman pengembang? sudo -sMasih akan bekerja, dan, jika demikian, bagaimana pengalaman menggunakan shell sebagai rootperubahan?

Josh
sumber
8
"Apa artinya sebenarnya bagi pengalaman pengguna dan pengalaman pengembang?" Saya sudah menjalankan versi beta sejak tersedia, dan ini adalah yang pertama saya dengar. sudodan prompt kata sandi telah berfungsi seperti biasa / sebelumnya / diharapkan. Jadi, mungkin jawabannya adalah "sebagian besar waktu Anda tidak akan melihat; ketika Anda melakukannya, Anda akan melihat keras."
OJFord
3
Sederhana - ini meniru bug untuk menjadi fitur.
Wolfgang Fahl
Jika seseorang secara tidak sengaja menghapus /usr/localdan menemukan dirinya tidak dapat membuatnya kembali, lihat jawaban ini di sini .
Lloeki

Jawaban:

280

Pertama: nama "rootless" menyesatkan, karena masih ada akun root, dan Anda masih dapat mengaksesnya (nama resmi, "Perlindungan Integritas Sistem", lebih akurat). Yang benar-benar dilakukannya adalah membatasi kekuatan akun root, sehingga meskipun Anda menjadi root, Anda tidak memiliki kendali penuh atas sistem. Intinya, idenya adalah bahwa terlalu mudah bagi malware untuk mendapatkan akses root (mis. Dengan menghadirkan dialog auth kepada pengguna, yang akan menyebabkan pengguna secara refleks memasukkan kata sandi admin). SIP menambahkan lapisan perlindungan lain, yang tidak dapat ditembus malware meskipun sudah di-root. Bagian buruk dari ini, tentu saja, itu juga harus berlaku untuk hal-hal yang Anda lakukan dengan sengaja. Tetapi pembatasan yang dilakukan root tidak terlalu buruk; mereka tidak mencegah sebagian besar "normal"

Inilah yang membatasi, bahkan dari root:

  • Anda tidak dapat mengubah apa pun di /System, /bin, /sbin, atau /usr(kecuali /usr/local); atau aplikasi dan utilitas bawaan apa pun. Hanya Penginstal dan pembaruan perangkat lunak yang dapat memodifikasi area ini, dan bahkan mereka hanya melakukannya saat menginstal paket yang ditandatangani Apple. Tetapi karena kustomisasi OS-X gaya biasa masuk /Library(atau ~/Library, atau /Applications), dan kustomisasi unix-style (misalnya Homebrew) masuk /usr/local(atau kadang /etc- kadang atau /opt), ini seharusnya tidak menjadi masalah besar. Ini juga mencegah penulisan tingkat blok ke disk startup, jadi Anda tidak dapat mem-bypassnya.

    Daftar lengkap direktori terbatas (dan pengecualian suka /usr/localdan beberapa lainnya) ada di /System/Library/Sandbox/rootless.conf. Tentu saja, file ini sendiri berada di area terbatas.

    Ketika Anda memutakhirkan ke El Capitan, itu memindahkan semua file "tidak sah" dari area terbatas ke /Library/SystemMigration/History/Migration-(some UUID)/QuarantineRoot/.

  • Anda tidak dapat melampirkan ke proses sistem (misalnya yang berjalan dari lokasi sistem itu) untuk hal-hal seperti debugging (atau mengubah perpustakaan dinamis apa yang mereka muat, atau beberapa hal lain). Sekali lagi, tidak terlalu penting; pengembang masih dapat men-debug program mereka sendiri.

    Ini memang memblokir beberapa hal penting seperti menyuntikkan kode ke aplikasi Apple bawaan (terutama Finder). Ini juga berarti bahwa dtracealat berbasiskan untuk pemantauan sistem (mis. opensnoop) Tidak akan dapat memonitor & melaporkan banyak proses sistem.

  • Anda tidak dapat memuat ekstensi kernel (kexts) kecuali ditandatangani dengan benar (yaitu oleh Apple atau pengembang yang disetujui Apple). Perhatikan bahwa ini menggantikan sistem lama untuk menegakkan penandatanganan kext (dan cara lama untuk mem-bypassnya). Tetapi sejak v10.10.4 Apple telah memiliki cara untuk memungkinkan dukungan trim untuk SSD pihak ketiga , alasan # 1 untuk menggunakan kex yang tidak ditandatangani telah hilang.

  • Mulai dari Sierra (10.12), beberapa pengaturan konfigurasi launchd tidak dapat diubah (misalnya, beberapa daemon peluncuran tidak dapat diturunkan).

  • Mulai di Mojave (10.14), akses ke informasi pribadi pengguna (email, kontak, dll) dibatasi untuk aplikasi yang telah disetujui pengguna untuk mengakses info itu. Ini umumnya dianggap sebagai fitur terpisah (disebut Personal Information Protection, atau TCC), tetapi didasarkan pada SIP dan menonaktifkan SIP juga menonaktifkannya. Lihat: "Apa dan bagaimana macOS Mojave menerapkan untuk membatasi akses aplikasi ke data pribadi?"

Jika Anda tidak ingin pembatasan ini - baik karena Anda ingin memodifikasi sistem Anda di luar apa yang diizinkan, atau karena Anda mengembangkan & men-debug sesuatu seperti kexts yang tidak praktis di bawah pembatasan ini, Anda dapat mematikan SIP. Saat ini ini membutuhkan reboot ke mode pemulihan dan menjalankan perintah csrutil disable(dan Anda juga dapat mengaktifkannya kembali csrutil enable).

Anda juga dapat menonaktifkan bagian SIP secara selektif . Sebagai contoh, csrutil enable --without kextakan menonaktifkan pembatasan ekstensi kernel SIP, tetapi meninggalkan perlindungan lainnya di tempatnya.

Tetapi tolong berhenti dan pikirkan sebelum menonaktifkan SIP, bahkan untuk sementara atau sebagian: apakah Anda benar-benar perlu menonaktifkannya, atau adakah cara yang lebih baik (sesuai SIP) untuk melakukan apa yang Anda inginkan? Apakah Anda benar-benar perlu memodifikasi sesuatu di /System/Libraryatau /binatau apa pun, atau bisakah itu pergi di tempat yang lebih baik seperti /Libraryatau /usr/local/binlain - lain? SIP mungkin "merasa" membatasi jika Anda tidak terbiasa, dan ada beberapa alasan yang sah untuk menonaktifkannya, tetapi banyak dari apa yang ditegakkan itu sebenarnya hanya praktik terbaik.

Untuk menggarisbawahi pentingnya meninggalkan sebanyak mungkin SIP diaktifkan sebanyak mungkin, pertimbangkan peristiwa 23 September 2019. Google merilis pembaruan ke Chrome yang mencoba mengganti tautan simbolis dari /varke /private/var. Pada kebanyakan sistem, SIP memblokir ini dan tidak ada efek buruk. Pada sistem dengan SIP dinonaktifkan, itu membuat macOS rusak dan tidak bisa di-boot. Alasan paling umum untuk menonaktifkan SIP adalah untuk memuat ekstensi kernel yang tidak disetujui (/ ditandatangani secara tidak benar) (khususnya driver video); jika mereka hanya menonaktifkan pembatasan kext, mereka tidak akan terpengaruh. Lihat utas dukungan resmi Google , tanya jawab pengguna super , dan artikel Ars Technica .

Referensi dan info lebih lanjut: presentasi WWDC tentang "Keamanan dan Aplikasi Anda" , penjelasan yang bagus dari Eldad Eilam di quora.com , ulasan Ars Technica dari El Capitan , dan artikel dukungan Apple tentang SIP , dan penyelaman mendalam oleh Rich Trouton ( yang juga memposting jawaban untuk pertanyaan ini ).

Gordon Davisson
sumber
1
Terima kasih banyak. Saya mengajukan pertanyaan ini karena saya akan menautkan ke artikel kuora itu pada pertanyaan lain tentang Stack Exchange dan kemudian menyadari bahwa itu bukan langkah yang tepat ;-)
Josh
15
... Juga ini benar-benar membuat saya ingin menulis kextatau sesuatu untuk memungkinkan saya membuat biner yang dapat saya jalankan di baris perintah untuk kembali ke akses tidak terbatas!
Josh
1
@Vladimir Maaf, saya tidak memiliki informasi orang dalam tentang rencana Apple. Dugaan saya adalah bahwa itu akan bertahan untuk masa mendatang, meskipun saya tidak akan terkejut jika itu (dan SIP sendiri) berubah secara signifikan dalam beberapa versi berikutnya.
Gordon Davisson
5
Ada saat-saat ketika saya membenci Apple. Saya menghargai membuatnya sulit untuk memotret diri sendiri (bertahun-tahun yang lalu saya pernah secara tidak sengaja memasukkan file teks ke MBR saya di Linux), tetapi ada kalanya Anda perlu misalnya memasukkan tautan tambahan di / usr / bin, dan memiliki untuk menjalani proses menonaktifkan perlindungan yang dinyatakan baik hanya untuk tujuan itu terlalu paternalistik dan menjengkelkan. Dialog ekstra dengan peringatan sudah cukup.
Mars
2
Cara yang kurang mengganggu tampaknya menonaktifkan SIP, mengedit file master untuk menghapus pembatasan hanya pada beberapa binari yang benar-benar ingin Anda ganti, dan aktifkan SIP lagi.
Joshua
92

Bagi saya, itu berarti DTrace tidak lagi berfungsi.

DTrace mirip dengan ptrace / strace di Linux, dalam hal ini memungkinkan Anda untuk melihat apa yang dikatakan proses ke kernel. Setiap kali suatu proses ingin membuka file, menulis file, atau membuka port, dll, ia perlu menanyakan kernel. Di Linux, proses pemantauan ini terjadi di luar kernel di "userland", dan dengan demikian izinnya cukup halus. Seorang pengguna dapat memonitor aplikasi mereka sendiri (untuk memperbaiki bug, menemukan kebocoran memori, dll) tetapi perlu di-root untuk memantau proses pengguna lain.

Namun DTrace pada OSX bekerja pada level kernel, membuatnya jauh lebih berkinerja dan kuat, namun itu membutuhkan akses root untuk menambahkan probe ke dalam kernel dan dengan demikian melakukan apa saja. Seorang pengguna tidak dapat melacak proses mereka sendiri tanpa menjadi root, tetapi sebagai root mereka tidak hanya dapat menonton proses mereka sendiri, tetapi pada kenyataannya SEMUA proses pada sistem secara bersamaan. Misalnya, Anda dapat menonton file (dengan iosnoop) dan melihat proses mana yang membacanya. Ini adalah salah satu fitur paling berguna yang pernah ada untuk mendeteksi malware. Karena kernel juga berhubungan dengan jaringan IO, hal yang sama juga berlaku di sana. Wireshark mendeteksi aktivitas jaringan yang tidak biasa, DTrace memberi tahu Anda proses pengiriman data, bahkan jika itu tertanam ke dalam sistem seperti kernel itu sendiri.

Akan tetapi pada El Capitan, Apple sengaja mencegah DTrace bekerja - karena di dalamnya telah ditargetkan secara khusus dan dipilih sebagai sesuatu yang dibatasi oleh SIP. Mengapa mereka melakukan ini? Nah, sebelumnya Apple memodifikasi kernel dan DTrace mereka untuk memungkinkan beberapa proses untuk tidak dipantau melalui DTrace (yang mengganggu banyak peneliti keamanan pada saat itu karena beberapa proses sekarang terlarang bahkan sebagai root - termasuk malware). Alasan mereka untuk ini adalah untuk melindungi DRM di aplikasi seperti iTunes karena secara teoritis seseorang dapat DTrace dan mengambil data yang tidak-DRM keluar dari memori proses.

Namun, ada solusi penting yang memungkinkan para peneliti untuk terus melakukan pekerjaan mereka, dan itu adalah memodifikasi kernel untuk mengabaikan flag opt-out ini, sehingga DTrace masih dapat digunakan pada proses ini. Ini sebenarnya sangat bagus karena program mencoba menghindari deteksi di mana sekarang menyala dengan flag no-DTrace ini. Apa pun yang ingin disembunyikan Apple atau orang jahat sekarang ada di depan mata ...

Tapi itu tidak berfungsi sekarang, jadi bagaimana ini memengaruhi Anda? Nah, itu akan mempengaruhi Anda baik secara langsung maupun tidak langsung. Secara langsung, itu akan membatasi kemampuan Anda untuk memonitor sistem Anda. Sejumlah besar alat administrasi sistem dan pemantauan tingkat rendah (yang dibangun di atas alat tingkat tinggi) tidak lagi berfungsi. Efek tidak langsung akan jauh lebih besar - para profesional keamanan bergantung pada akses sistem yang dalam untuk mendeteksi jenis ancaman terburuk. Kami tidak bisa melakukan itu lagi. Sangat penting ketika menganalisis malware yang tidak tahu itu berjalan di debugger atau honeypot. Menonaktifkan SIP memberi tahu semua perangkat lunak, baik dari orang jahat dan Apple, bahwa sistem ini sedang diawasi. Tidak ada lagi yang menonton para penonton. Jika SIP adalah tentang keamanan mereka bisa mendidik pengguna tentang root - alih-alih mereka menghapusnya. Pada akhirnya ini berarti bahwa Apple telah menggantikan penghalang keamanan kata sandi root 'menjadi segalanya dan akhiri semua', dengan mekanisme perlindungan SIP 'menjadi segalanya dan akhiri semua'. Atau jika Anda mahir dalam rekayasa sosial, kata sandi root dengan reboot ...

Ada juga ini: masukkan deskripsi gambar di sini

JJ
sumber
3
Juga, saya telah menurunkan suara jawaban ini karena tidak menjawab pertanyaan, yaitu: Apa fitur "Tidak Berakar" dari El Capitan pada tingkat teknis? Akankah sudo -s masih berfungsi, dan, jika demikian, bagaimana pengalaman menggunakan shell sebagai root berubah? . Jawaban ini tampaknya hanya berbicara tentang DTrace
Josh
24
Saya pikir jawabannya berbicara dengan jelas dan tepat ke bagian yang baik dari pertanyaan, yaitu bagaimana pengalaman menggunakan shell sebagai root akan berubah. Sudo sekarang adalah sudo semu. Lapisan arsitektur sebenarnya telah ditambahkan. Tampaknya relevan bagi saya. Dan untuk mata pencaharian pria ini. Mengapa memilih itu?
sas08
5
@ patrix Saya tidak mengerti perbedaan epistemologis. Hal-hal apa dan apa yang mereka lakukan, dan mengapa mereka ada saling terkait erat. Tentu posting ini dimulai dan media berbicara tentang satu fitur, tetapi itu lingkup dengan baik. Bertanya "bagaimana ini mengubah pengalaman pengembang?" dll sebenarnya adalah undangan terbuka dan subyektif untuk membuat pengembang berbicara tentang pengalaman mereka. Mengajukan pertanyaan-pertanyaan ini bersamaan dengan keberatan yang samar dan berlebihan "dunia akan berakhir karena kita tidak dapat membasmi" tampaknya menolak gagasan bahaya; ini menunjukkan bahaya pada pengalaman dev.
sas08
4
Saya tidak akan menambahkan info lagi Josh, karena saya hanya akan menyalin apa yang dikatakan jawaban lain dan tidak benar-benar menambahkan apa pun ke halaman. Mungkin akan lebih baik jika jawaban teratas menyertakan beberapa info lebih lanjut tentang DTrace tidak lagi berfungsi, dan kemudian saya akan menghapus jawaban ini sebagai redundan :) Jawaban lain hanyalah salinan karbon dari arstechnica.com/apple/2015/09/ os-x-10-11-el-capitan-the-ars-technica-review / 9 / ditautkan di komentar teratas, sehingga bisa juga. Tetapi beberapa hal dalam jawaban ini, seperti DTrace tidak bekerja bahkan dengan SIP off sebagai sudo, tidak ada tempat lain di internet tetapi di sini
JJ
3
Satu-satunya hal yang saya ketahui sejauh ini adalah bahwa jika Anda menonaktifkan SIP untuk DTrace, Anda dapat melampirkan ke proses yang tidak berada di bawah hak terbatas, yang karena El Cap adalah segalanya yang datang dengan sistem (seperti Safari). Ada cara "bodoh", yaitu menyalin semua binari sistem ke direktori baru seperti / rootless (dengan struktur direktori yang sama), lalu buat chroot untuk / rootless. Sekarang semuanya berjalan bebas hak dan dapat dilampirkan juga. Cara yang lebih cerdas adalah memasang kembali sistem file Anda, tetapi saya takut untuk mengatakan bagaimana / mengapa karena Apple tidak diragukan lagi akan mengunci celah itu ...
JJ
49

System Integrity Protection (SIP) adalah kebijakan keamanan keseluruhan dengan tujuan mencegah file sistem dan proses dari dimodifikasi oleh pihak ketiga. Untuk mencapai ini, ia memiliki konsep berikut:

  • Perlindungan sistem file
  • Perlindungan ekstensi kernel
  • Perlindungan runtime

Perlindungan sistem file

SIP mencegah pihak selain Apple dari menambah, menghapus atau memodifikasi direktori dan file yang disimpan dalam direktori tertentu:

/bin
/sbin
/usr
/System

Apple telah mengindikasikan bahwa direktori berikut tersedia untuk diakses oleh pengembang:

/usr/local
/Applications
/Library
~/Library

Semua direktori /usrkecuali /usr/localdilindungi oleh SIP.

Dimungkinkan untuk menambah, menghapus atau mengubah file dan direktori yang dilindungi SIP melalui paket installer yang ditandatangani oleh otoritas sertifikat Apple sendiri. Ini memungkinkan Apple untuk membuat perubahan pada bagian OS yang dilindungi SIP tanpa perlu mengubah perlindungan SIP yang ada.

Otoritas sertifikat yang dimaksud disediakan oleh Apple untuk penggunaan mereka sendiri; Paket penginstal yang ditandatangani ID pengembang tidak dapat mengubah file atau direktori yang dilindungi SIP.

Untuk menentukan direktori mana yang dilindungi, Apple saat ini telah menetapkan dua file konfigurasi pada sistem file. Yang utama ditemukan di lokasi di bawah ini:

/System/Library/Sandbox/rootless.conf

di mana rootless.confdaftar semua aplikasi dan direktori tingkat atas yang dilindungi SIP.

masukkan deskripsi gambar di sini

Aplikasi

SIP melindungi aplikasi inti yang diinstal OS X ke dalam Aplikasi dan Utilitas Aplikasi. Ini berarti tidak mungkin lagi menghapus aplikasi yang diinstal OS X, bahkan dari baris perintah saat menggunakan hak akses root.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Direktori

SIP juga melindungi sejumlah direktori dan symlink di luar /Applicationsdan tingkat teratas dari direktori tersebut juga terdaftar di rootless.conf.

masukkan deskripsi gambar di sini

Selain perlindungan, Apple juga mendefinisikan beberapa pengecualian untuk perlindungan SIP dalam file rootless.conf, dan pengecualian itu ditandai dengan asterix. Pengecualian dari perlindungan SIP ini berarti bahwa dimungkinkan untuk menambah, menghapus, atau mengubah file dan direktori di dalam lokasi tersebut.

masukkan deskripsi gambar di sini

Di antara pengecualian itu adalah sebagai berikut:

  • /System/Library/User Template - tempat OS X menyimpan direktori templat yang digunakan saat membuat folder rumah untuk akun baru.
  • /usr/libexec/cups - tempat OS X menyimpan informasi konfigurasi printer

Apple menganggap file ini milik mereka dan bahwa perubahan pihak ketiga apa pun akan ditimpa oleh Apple.

Untuk melihat file mana yang telah dilindungi oleh SIP, gunakan lsperintah dengan huruf kapital O di Terminal:

ls -O

File yang dilindungi SIP akan diberi label sebagai dibatasi .

masukkan deskripsi gambar di sini

Satu pemikiran penting yang perlu diketahui adalah bahwa meskipun symlink dilindungi oleh SIP, itu tidak berarti bahwa direktori yang mereka tautkan sedang dilindungi oleh SIP. Pada level root dari boot drive OS X El Capitan, ada beberapa symlink yang dilindungi SIP yang menunjuk ke direktori yang disimpan di dalam direktori level root bernama private.

Namun, ketika isi privatedirektori diperiksa, direktori yang ditunjuk oleh symlinks tidak dilindungi oleh SIP dan keduanya beserta isinya dapat dipindahkan, diedit atau diubah dengan proses menggunakan hak akses root.

masukkan deskripsi gambar di sini

Selain daftar pengecualian SIP yang telah ditetapkan Apple rootless.conf, ada daftar pengecualian SIP kedua. Daftar ini mencakup sejumlah direktori dan nama aplikasi untuk produk pihak ketiga. Serupa dengan rootless.conf, daftar pengecualian ini adalah perubahan Apple dan pihak ketiga mana pun akan ditimpa oleh Apple.

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

Perlindungan runtime

Perlindungan SIP tidak terbatas untuk melindungi sistem dari perubahan sistem file. Ada juga panggilan sistem yang sekarang dibatasi fungsinya.

  • task_for_pid () / processor_set_tasks () gagal dengan EPERM
  • Port khusus Mach diatur ulang pada exec (2)
  • variabel lingkungan dyld diabaikan
  • Probe DTrace tidak tersedia

Namun, SIP tidak memblokir inspeksi oleh pengembang aplikasi mereka sendiri saat sedang dikembangkan. Alat Xcode akan terus memungkinkan aplikasi untuk diperiksa dan didebug selama proses pengembangan.

Untuk detail lebih lanjut tentang ini, saya akan merekomendasikan untuk melihat dokumentasi pengembang Apple untuk SIP .

Perlindungan ekstensi kernel

SIP memblokir pemasangan ekstensi kernel yang tidak ditandatangani. Untuk menginstal ekstensi kernel pada OS X El Capitan dengan SIP diaktifkan, ekstensi kernel harus:

  1. Ditandatangani dengan ID Pengembang untuk menandatangani sertifikat Kexts
  2. Instal ke / Library / Extensions

Jika menginstal ekstensi kernel yang tidak ditandatangani, SIP harus dinonaktifkan terlebih dahulu.

Untuk informasi lebih lanjut tentang mengelola SIP, silakan lihat tautan di bawah ini:

Perlindungan Integritas Sistem - Menambahkan lapisan lain ke model keamanan Apple

Trouton Kaya
sumber
4
Akan lebih bagus ketika tangkapan layar dapat diganti dengan teks biasa, lihat: Mencegah tangkapan layar kode dan / atau kesalahan .
kenorb