mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['macos-hardening/macos-auto-start-locations.md', 'macos-hard
This commit is contained in:
parent
8416cfb970
commit
d8b040a236
5 changed files with 745 additions and 445 deletions
|
@ -196,9 +196,10 @@
|
|||
* [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md)
|
||||
* [macOS TCC Payloads](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md)
|
||||
* [macOS Dangerous Entitlements & TCC perms](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md)
|
||||
* [macOS MACF](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md)
|
||||
* [macOS FS Tricks](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md)
|
||||
* [macOS xattr-acls extra stuff](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/macos-xattr-acls-extra-stuff.md)
|
||||
* [macOS Users](macos-hardening/macos-security-and-privilege-escalation/macos-users.md)
|
||||
* [macOS Users & External Accounts](macos-hardening/macos-security-and-privilege-escalation/macos-users.md)
|
||||
* [macOS Red Teaming](macos-hardening/macos-red-teaming/README.md)
|
||||
* [macOS MDM](macos-hardening/macos-red-teaming/macos-mdm/README.md)
|
||||
* [Enrolling Devices in Other Organisations](macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,8 @@
|
|||
# macOS Sensitive Locations & Interesting Daemons
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -38,9 +38,15 @@ sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Još jedan način da se dobije `ShadowHashData` korisnika je korišćenjem `dscl`: ``sudo dscl . -read /Users/`whoami` ShadowHashData``
|
||||
|
||||
### /etc/master.passwd
|
||||
|
||||
Ova datoteka se **koristi samo** kada sistem radi u **jedno-korisničkom režimu** (dakle, ne vrlo često).
|
||||
|
||||
### Keychain Dump
|
||||
|
||||
Napomena da prilikom korišćenja security binarnog fajla za **izvlačenje dekriptovanih lozinki**, nekoliko prompteva će tražiti od korisnika da dozvoli ovu operaciju.
|
||||
Imajte na umu da prilikom korišćenja sigurnosne binarne datoteke za **izvlačenje dekriptovanih lozinki**, nekoliko upita će tražiti od korisnika da dozvoli ovu operaciju.
|
||||
```bash
|
||||
#security
|
||||
security dump-trust-settings [-s] [-d] #List certificates
|
||||
|
@ -57,7 +63,7 @@ Na osnovu ovog komentara [juuso/keychaindump#10 (comment)](https://github.com/ju
|
|||
|
||||
### Pregled Keychaindump-a
|
||||
|
||||
Alat pod nazivom **keychaindump** razvijen je za ekstrakciju lozinki iz macOS ključanika, ali se suočava sa ograničenjima na novijim verzijama macOS-a kao što je Big Sur, kako je naznačeno u [diskusiji](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Korišćenje **keychaindump** zahteva od napadača da dobije pristup i eskalira privilegije na **root**. Alat koristi činjenicu da je ključanik po defaultu otključan prilikom prijave korisnika radi pogodnosti, omogućavajući aplikacijama da mu pristupaju bez ponovnog traženja lozinke korisnika. Međutim, ako korisnik odluči da zaključa svoj ključanik nakon svake upotrebe, **keychaindump** postaje neefikasan.
|
||||
Alat pod nazivom **keychaindump** razvijen je za ekstrakciju lozinki iz macOS ključanika, ali se suočava sa ograničenjima na novijim verzijama macOS-a kao što je Big Sur, kako je naznačeno u [diskusiji](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Korišćenje **keychaindump** zahteva od napadača da dobije pristup i eskalira privilegije na **root**. Alat koristi činjenicu da je ključanik po defaultu otključan prilikom prijave korisnika radi pogodnosti, omogućavajući aplikacijama da mu pristupe bez ponovnog traženja lozinke korisnika. Međutim, ako korisnik odluči da zaključa svoj ključanik nakon svake upotrebe, **keychaindump** postaje neefikasan.
|
||||
|
||||
**Keychaindump** funkcioniše tako što cilja specifičan proces nazvan **securityd**, koji Apple opisuje kao demon za autorizaciju i kriptografske operacije, što je ključno za pristup ključaniku. Proces ekstrakcije uključuje identifikaciju **Master Key**-a izvedenog iz lozinke za prijavu korisnika. Ovaj ključ je neophodan za čitanje datoteke ključanika. Da bi locirao **Master Key**, **keychaindump** skenira memorijski heap **securityd** koristeći komandu `vmmap`, tražeći potencijalne ključeve unutar oblasti označenih kao `MALLOC_TINY`. Sledeća komanda se koristi za inspekciju ovih memorijskih lokacija:
|
||||
```bash
|
||||
|
@ -169,19 +175,55 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s
|
|||
|
||||
## Preferences
|
||||
|
||||
U macOS aplikacijama, podešavanja se nalaze u **`$HOME/Library/Preferences`**, a u iOS-u su u `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences`. 
|
||||
U macOS aplikacijama, podešavanja se nalaze u **`$HOME/Library/Preferences`**, a u iOS-u su u `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences`.
|
||||
|
||||
U macOS-u, cli alat **`defaults`** može se koristiti za **modifikaciju datoteke sa podešavanjima**.
|
||||
U macOS-u, cli alat **`defaults`** može se koristiti za **modifikovanje Preferences datoteke**.
|
||||
|
||||
**`/usr/sbin/cfprefsd`** preuzima XPC usluge `com.apple.cfprefsd.daemon` i `com.apple.cfprefsd.agent` i može se pozvati da izvrši radnje kao što je modifikacija podešavanja.
|
||||
**`/usr/sbin/cfprefsd`** zahteva XPC usluge `com.apple.cfprefsd.daemon` i `com.apple.cfprefsd.agent` i može se pozvati da izvrši radnje kao što je modifikovanje podešavanja.
|
||||
|
||||
## System Notifications
|
||||
## OpenDirectory permissions.plist
|
||||
|
||||
### Darwin Notifications
|
||||
Datoteka `/System/Library/OpenDirectory/permissions.plist` sadrži dozvole primenjene na atribute čvora i zaštićena je SIP-om.\
|
||||
Ova datoteka dodeljuje dozvole specifičnim korisnicima po UUID-u (a ne uid-u) kako bi mogli da pristupe specifičnim osetljivim informacijama kao što su `ShadowHashData`, `HeimdalSRPKey` i `KerberosKeys` među ostalima:
|
||||
```xml
|
||||
[...]
|
||||
<key>dsRecTypeStandard:Computers</key>
|
||||
<dict>
|
||||
<key>dsAttrTypeNative:ShadowHashData</key>
|
||||
<array>
|
||||
<dict>
|
||||
<!-- allow wheel even though it's implicit -->
|
||||
<key>uuid</key>
|
||||
<string>ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000</string>
|
||||
<key>permissions</key>
|
||||
<array>
|
||||
<string>readattr</string>
|
||||
<string>writeattr</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>dsAttrTypeNative:KerberosKeys</key>
|
||||
<array>
|
||||
<dict>
|
||||
<!-- allow wheel even though it's implicit -->
|
||||
<key>uuid</key>
|
||||
<string>ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000000</string>
|
||||
<key>permissions</key>
|
||||
<array>
|
||||
<string>readattr</string>
|
||||
<string>writeattr</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
[...]
|
||||
```
|
||||
## Sistemske Notifikacije
|
||||
|
||||
Glavni daemon za obaveštenja je **`/usr/sbin/notifyd`**. Da bi primali obaveštenja, klijenti moraju da se registruju putem Mach porta `com.apple.system.notification_center` (proverite ih sa `sudo lsmp -p <pid notifyd>`). Daemon se može konfigurisati datotekom `/etc/notify.conf`.
|
||||
### Darwin Notifikacije
|
||||
|
||||
Imena koja se koriste za obaveštenja su jedinstvene obrnute DNS notacije i kada se obaveštenje pošalje jednom od njih, klijent(i) koji su naznačili da mogu da ga obrade će ga primiti.
|
||||
Glavni daemon za notifikacije je **`/usr/sbin/notifyd`**. Da bi primali notifikacije, klijenti moraju da se registruju preko `com.apple.system.notification_center` Mach porta (proverite ih sa `sudo lsmp -p <pid notifyd>`). Daemon se može konfigurisati sa datotekom `/etc/notify.conf`.
|
||||
|
||||
Imena koja se koriste za notifikacije su jedinstvene obrnute DNS notacije i kada se notifikacija pošalje jednom od njih, klijent(i) koji su naznačili da mogu da je obrade će je primiti.
|
||||
|
||||
Moguće je dumpovati trenutni status (i videti sva imena) slanjem signala SIGUSR2 procesu notifyd i čitanjem generisane datoteke: `/var/run/notifyd_<pid>.status`:
|
||||
```bash
|
||||
|
@ -222,21 +264,21 @@ Takođe je moguće dobiti informacije o daemonu i vezama koristeći:
|
|||
|
||||
Ovo su obaveštenja koja korisnik treba da vidi na ekranu:
|
||||
|
||||
* **`CFUserNotification`**: Ovaj API pruža način da se na ekranu prikaže iskačuće obaveštenje sa porukom.
|
||||
* **`CFUserNotification`**: Ovaj API pruža način da se na ekranu prikaže iskačuća poruka.
|
||||
* **Oglasna tabla**: Ovo prikazuje u iOS-u baner koji nestaje i biće sačuvan u Centru za obaveštenja.
|
||||
* **`NSUserNotificationCenter`**: Ovo je oglasna tabla iOS-a u MacOS-u. Baza podataka sa obaveštenjima se nalazi u `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db`
|
||||
* **`NSUserNotificationCenter`**: Ovo je oglasna tabla u iOS-u na MacOS-u. Baza podataka sa obaveštenjima se nalazi u `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db`
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Podrška HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -0,0 +1,268 @@
|
|||
# macOS MACF
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Basic Information
|
||||
|
||||
**MACF** označava **Mandatory Access Control Framework**, što je bezbednosni sistem ugrađen u operativni sistem kako bi pomogao u zaštiti vašeg računara. Funkcioniše tako što postavlja **stroga pravila o tome ko ili šta može pristupiti određenim delovima sistema**, kao što su datoteke, aplikacije i sistemski resursi. Sprovodeći ova pravila automatski, MACF osigurava da samo ovlašćeni korisnici i procesi mogu izvršavati određene radnje, smanjujući rizik od neovlašćenog pristupa ili zlonamernih aktivnosti.
|
||||
|
||||
Napomena: MACF zapravo ne donosi nikakve odluke, već samo **presreće** radnje, ostavljajući odluke **modulima politike** (kernel ekstenzijama) koje poziva kao što su `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` i `mcxalr.kext`.
|
||||
|
||||
### Flow
|
||||
|
||||
1. Proces izvršava syscall/mach trap
|
||||
2. Relevantna funkcija se poziva unutar kernela
|
||||
3. Funkcija poziva MACF
|
||||
4. MACF proverava module politike koji su zatražili da se ta funkcija poveže u svojoj politici
|
||||
5. MACF poziva relevantne politike
|
||||
6. Politike označavaju da li dozvoljavaju ili odbacuju radnju
|
||||
|
||||
{% hint style="danger" %}
|
||||
Apple je jedini koji može koristiti MAC Framework KPI.
|
||||
{% endhint %}
|
||||
|
||||
### Labels
|
||||
|
||||
MACF koristi **oznake** koje zatim politike koriste da provere da li treba da odobre neki pristup ili ne. Kod deklaracije strukture oznaka može se [pronaći ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), koja se zatim koristi unutar **`struct ucred`** u [**ovde**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) u delu **`cr_label`**. Oznaka sadrži zastavice i broj **slotova** koji se mogu koristiti od strane **MACF politika za dodeljivanje pokazivača**. Na primer, Sanbox će ukazivati na profil kontejnera.
|
||||
|
||||
## MACF Policies
|
||||
|
||||
MACF politika definiše **pravila i uslove koji se primenjuju u određenim kernel operacijama**. 
|
||||
|
||||
Kernel ekstenzija može konfigurisati `mac_policy_conf` strukturu i zatim je registrovati pozivajući `mac_policy_register`. Iz [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html):
|
||||
```c
|
||||
#define mpc_t struct mac_policy_conf *
|
||||
|
||||
/**
|
||||
@brief Mac policy configuration
|
||||
|
||||
This structure specifies the configuration information for a
|
||||
MAC policy module. A policy module developer must supply
|
||||
a short unique policy name, a more descriptive full name, a list of label
|
||||
namespaces and count, a pointer to the registered enty point operations,
|
||||
any load time flags, and optionally, a pointer to a label slot identifier.
|
||||
|
||||
The Framework will update the runtime flags (mpc_runtime_flags) to
|
||||
indicate that the module has been registered.
|
||||
|
||||
If the label slot identifier (mpc_field_off) is NULL, the Framework
|
||||
will not provide label storage for the policy. Otherwise, the
|
||||
Framework will store the label location (slot) in this field.
|
||||
|
||||
The mpc_list field is used by the Framework and should not be
|
||||
modified by policies.
|
||||
*/
|
||||
/* XXX - reorder these for better aligment on 64bit platforms */
|
||||
struct mac_policy_conf {
|
||||
const char *mpc_name; /** policy name */
|
||||
const char *mpc_fullname; /** full name */
|
||||
const char **mpc_labelnames; /** managed label namespaces */
|
||||
unsigned int mpc_labelname_count; /** number of managed label namespaces */
|
||||
struct mac_policy_ops *mpc_ops; /** operation vector */
|
||||
int mpc_loadtime_flags; /** load time flags */
|
||||
int *mpc_field_off; /** label slot */
|
||||
int mpc_runtime_flags; /** run time flags */
|
||||
mpc_t mpc_list; /** List reference */
|
||||
void *mpc_data; /** module data */
|
||||
};
|
||||
```
|
||||
Lako je identifikovati kernel ekstenzije koje konfigurišu ove politike proverom poziva na `mac_policy_register`. Štaviše, proverom disasembla ekstenzije takođe je moguće pronaći korišćenu `mac_policy_conf` strukturu.
|
||||
|
||||
Napomena da se MACF politike mogu registrovati i deregistrovati takođe **dinamički**.
|
||||
|
||||
Jedno od glavnih polja `mac_policy_conf` je **`mpc_ops`**. Ovo polje specificira koje operacije politika zanima. Napomena da ih ima stotine, tako da je moguće postaviti sve na nulu, a zatim izabrati samo one koje su politici zanimljive. Od [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac\_policy.h.auto.html):
|
||||
```c
|
||||
struct mac_policy_ops {
|
||||
mpo_audit_check_postselect_t *mpo_audit_check_postselect;
|
||||
mpo_audit_check_preselect_t *mpo_audit_check_preselect;
|
||||
mpo_bpfdesc_label_associate_t *mpo_bpfdesc_label_associate;
|
||||
mpo_bpfdesc_label_destroy_t *mpo_bpfdesc_label_destroy;
|
||||
mpo_bpfdesc_label_init_t *mpo_bpfdesc_label_init;
|
||||
mpo_bpfdesc_check_receive_t *mpo_bpfdesc_check_receive;
|
||||
mpo_cred_check_label_update_execve_t *mpo_cred_check_label_update_execve;
|
||||
mpo_cred_check_label_update_t *mpo_cred_check_label_update;
|
||||
[...]
|
||||
```
|
||||
Almost all the hooks will be called back by MACF when one of those operations are intercepted. However, **`mpo_policy_*`** hooks are an exception because `mpo_hook_policy_init()` is a callback called upon registration (so after `mac_policy_register()`) and `mpo_hook_policy_initbsd()` is called during late registration once the BSD subsystem has initialised properly.
|
||||
|
||||
Moreover, the **`mpo_policy_syscall`** hook can be registered by any kext to expose a private **ioctl** style call **interface**. Then, a user client will be able to call `mac_syscall` (#381) specifying as parameters the **policy name** with an integer **code** and optional **arguments**.\
|
||||
For example, the **`Sandbox.kext`** uses this a lot.
|
||||
|
||||
Checking the kext's **`__DATA.__const*`** is possible to identify the `mac_policy_ops` structure used when registering the policy. It's possible to find it because its pointer is at an offset inside `mpo_policy_conf` and also because the amount of NULL pointers that will be in that area.
|
||||
|
||||
Moreover, it's also possible to get the list of kexts that have configured a policy by dumping from memory the struct **`_mac_policy_list`** which is updated with every policy that is registered.
|
||||
|
||||
## MACF Initialization
|
||||
|
||||
MACF se inicijalizuje vrlo brzo. Postavlja se u XNU-ovom `bootstrap_thread`: nakon `ipc_bootstrap` poziva `mac_policy_init()` koji inicijalizuje `mac_policy_list`, a trenutak kasnije se poziva `mac_policy_initmach()`. Između ostalog, ova funkcija će dobiti sve Apple kext-ove sa `AppleSecurityExtension` ključem u njihovom Info.plist kao što su `ALF.kext`, `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext` i `TMSafetyNet.kext` i učitati ih.
|
||||
|
||||
## MACF Callouts
|
||||
|
||||
Uobičajeno je pronaći pozive ka MACF definisane u kodu kao: **`#if CONFIG_MAC`** uslovni blokovi. Štaviše, unutar ovih blokova je moguće pronaći pozive ka `mac_proc_check*` koji poziva MACF da **proveri dozvole** za izvršavanje određenih akcija. Takođe, format MACF poziva je: **`mac_<object>_<opType>_opName`**.
|
||||
|
||||
Objekat je jedan od sledećih: `bpfdesc`, `cred`, `file`, `proc`, `vnode`, `mount`, `devfs`, `ifnet`, `inpcb`, `mbuf`, `ipq`, `pipe`, `sysv[msg/msq/shm/sem]`, `posix[shm/sem]`, `socket`, `kext`.\
|
||||
`opType` je obično check koji će se koristiti za dozvoljavanje ili odbijanje akcije. Međutim, takođe je moguće pronaći `notify`, koji će omogućiti kext-u da reaguje na datu akciju.
|
||||
|
||||
Možete pronaći primer u [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621):
|
||||
|
||||
<pre class="language-c"><code class="lang-c">int
|
||||
mmap(proc_t p, struct mmap_args *uap, user_addr_t *retval)
|
||||
{
|
||||
[...]
|
||||
#if CONFIG_MACF
|
||||
<strong> error = mac_file_check_mmap(vfs_context_ucred(ctx),
|
||||
</strong> fp->fp_glob, prot, flags, file_pos + pageoff,
|
||||
&maxprot);
|
||||
if (error) {
|
||||
(void)vnode_put(vp);
|
||||
goto bad;
|
||||
}
|
||||
#endif /* MAC */
|
||||
[...]
|
||||
</code></pre>
|
||||
|
||||
Then, it's possible to find the code of `mac_file_check_mmap` in [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174)
|
||||
```c
|
||||
mac_file_check_mmap(struct ucred *cred, struct fileglob *fg, int prot,
|
||||
int flags, uint64_t offset, int *maxprot)
|
||||
{
|
||||
int error;
|
||||
int maxp;
|
||||
|
||||
maxp = *maxprot;
|
||||
MAC_CHECK(file_check_mmap, cred, fg, NULL, prot, flags, offset, &maxp);
|
||||
if ((maxp | *maxprot) != *maxprot) {
|
||||
panic("file_check_mmap increased max protections");
|
||||
}
|
||||
*maxprot = maxp;
|
||||
return error;
|
||||
}
|
||||
```
|
||||
Koji poziva `MAC_CHECK` makro, čiji se kod može naći na [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L261](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L261)
|
||||
```c
|
||||
/*
|
||||
* MAC_CHECK performs the designated check by walking the policy
|
||||
* module list and checking with each as to how it feels about the
|
||||
* request. Note that it returns its value via 'error' in the scope
|
||||
* of the caller.
|
||||
*/
|
||||
#define MAC_CHECK(check, args...) do { \
|
||||
error = 0; \
|
||||
MAC_POLICY_ITERATE({ \
|
||||
if (mpc->mpc_ops->mpo_ ## check != NULL) { \
|
||||
DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_CHECK); \
|
||||
int __step_err = mpc->mpc_ops->mpo_ ## check (args); \
|
||||
DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_err); \
|
||||
error = mac_error_select(__step_err, error); \
|
||||
} \
|
||||
}); \
|
||||
} while (0)
|
||||
```
|
||||
Koji će proći kroz sve registrovane mac politike pozivajući njihove funkcije i čuvajući izlaz unutar promenljive greške, koja će biti prepisiva samo od strane `mac_error_select` pomoću kodova uspeha, tako da ako bilo koja provera ne uspe, cela provera će propasti i akcija neće biti dozvoljena.
|
||||
|
||||
{% hint style="success" %}
|
||||
Međutim, zapamtite da nisu svi MACF pozivi korišćeni samo za odbijanje akcija. Na primer, `mac_priv_grant` poziva makro [**MAC\_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L274), koji će odobriti traženu privilegiju ako bilo koja politika odgovori sa 0:
|
||||
```c
|
||||
/*
|
||||
* MAC_GRANT performs the designated check by walking the policy
|
||||
* module list and checking with each as to how it feels about the
|
||||
* request. Unlike MAC_CHECK, it grants if any policies return '0',
|
||||
* and otherwise returns EPERM. Note that it returns its value via
|
||||
* 'error' in the scope of the caller.
|
||||
*/
|
||||
#define MAC_GRANT(check, args...) do { \
|
||||
error = EPERM; \
|
||||
MAC_POLICY_ITERATE({ \
|
||||
if (mpc->mpc_ops->mpo_ ## check != NULL) { \
|
||||
DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_GRANT); \
|
||||
int __step_res = mpc->mpc_ops->mpo_ ## check (args); \
|
||||
if (__step_res == 0) { \
|
||||
error = 0; \
|
||||
} \
|
||||
DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_res); \
|
||||
} \
|
||||
}); \
|
||||
} while (0)
|
||||
```
|
||||
{% endhint %}
|
||||
|
||||
### priv\_check & priv\_grant
|
||||
|
||||
Ove funkcije su namenjene za proveru i dodeljivanje (desetina) **privilegija** definisanih u [**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h).\
|
||||
Neki kernel kod bi pozvao `priv_check_cred()` iz [**bsd/kern/kern\_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_priv.c) sa KAuth kredencijalima procesa i jednim od privilegija koda koji će pozvati `mac_priv_check` da vidi da li neka politika **odbija** dodeljivanje privilegije, a zatim poziva `mac_priv_grant` da vidi da li neka politika dodeljuje `privilegiju`.
|
||||
|
||||
### proc\_check\_syscall\_unix
|
||||
|
||||
Ova funkcija omogućava presretanje svih sistemskih poziva. U `bsd/dev/[i386|arm]/systemcalls.c` moguće je videti deklarisanu funkciju [`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25), koja sadrži ovaj kod:
|
||||
```c
|
||||
#if CONFIG_MACF
|
||||
if (__improbable(proc_syscall_filter_mask(proc) != NULL && !bitstr_test(proc_syscall_filter_mask(proc), syscode))) {
|
||||
error = mac_proc_check_syscall_unix(proc, syscode);
|
||||
if (error) {
|
||||
goto skip_syscall;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_MACF */
|
||||
```
|
||||
Koji će proveriti u pozivnom procesu **bitmasku** da li trenutni syscall treba da pozove `mac_proc_check_syscall_unix`. To je zato što se syscalls pozivaju tako često da je zanimljivo izbeći pozivanje `mac_proc_check_syscall_unix` svaki put.
|
||||
|
||||
Napomena da funkcija `proc_set_syscall_filter_mask()`, koja postavlja bitmasku syscalls u procesu, se poziva od strane Sandbox-a da postavi maske na sandboxed procesima.
|
||||
|
||||
## Izloženi MACF syscalls
|
||||
|
||||
Moguće je interagovati sa MACF kroz neke syscalls definisane u [security/mac.h](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac.h#L151):
|
||||
```c
|
||||
/*
|
||||
* Extended non-POSIX.1e interfaces that offer additional services
|
||||
* available from the userland and kernel MAC frameworks.
|
||||
*/
|
||||
#ifdef __APPLE_API_PRIVATE
|
||||
__BEGIN_DECLS
|
||||
int __mac_execve(char *fname, char **argv, char **envv, mac_t _label);
|
||||
int __mac_get_fd(int _fd, mac_t _label);
|
||||
int __mac_get_file(const char *_path, mac_t _label);
|
||||
int __mac_get_link(const char *_path, mac_t _label);
|
||||
int __mac_get_pid(pid_t _pid, mac_t _label);
|
||||
int __mac_get_proc(mac_t _label);
|
||||
int __mac_set_fd(int _fildes, const mac_t _label);
|
||||
int __mac_set_file(const char *_path, mac_t _label);
|
||||
int __mac_set_link(const char *_path, mac_t _label);
|
||||
int __mac_mount(const char *type, const char *path, int flags, void *data,
|
||||
struct mac *label);
|
||||
int __mac_get_mount(const char *path, struct mac *label);
|
||||
int __mac_set_proc(const mac_t _label);
|
||||
int __mac_syscall(const char *_policyname, int _call, void *_arg);
|
||||
__END_DECLS
|
||||
#endif /*__APPLE_API_PRIVATE*/
|
||||
```
|
||||
## Reference
|
||||
|
||||
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||
|
||||
{% hint style="success" %}
|
||||
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Podrška HackTricks</summary>
|
||||
|
||||
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
|
||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
|
@ -1,8 +1,8 @@
|
|||
# macOS Korisnici
|
||||
# macOS Korisnici i Eksterni Računi
|
||||
|
||||
{% hint style="success" %}
|
||||
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,17 +15,14 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Uobičajeni Korisnici
|
||||
|
||||
### Zajednički Korisnici
|
||||
|
||||
* **Daemon**: Korisnik rezervisan za sistemske demone. Podrazumevani nazivi naloga demona obično počinju sa "\_":
|
||||
* **Daemon**: Korisnik rezervisan za sistemske demone. Podrazumevana imena naloga demona obično počinju sa "\_":
|
||||
|
||||
```bash
|
||||
_amavisd, _analyticsd, _appinstalld, _appleevents, _applepay, _appowner, _appserver, _appstore, _ard, _assetcache, _astris, _atsserver, _avbdeviced, _calendar, _captiveagent, _ces, _clamav, _cmiodalassistants, _coreaudiod, _coremediaiod, _coreml, _ctkd, _cvmsroot, _cvs, _cyrus, _datadetectors, _demod, _devdocs, _devicemgr, _diskimagesiod, _displaypolicyd, _distnote, _dovecot, _dovenull, _dpaudio, _driverkit, _eppc, _findmydevice, _fpsd, _ftp, _fud, _gamecontrollerd, _geod, _hidd, _iconservices, _installassistant, _installcoordinationd, _installer, _jabber, _kadmin_admin, _kadmin_changepw, _knowledgegraphd, _krb_anonymous, _krb_changepw, _krb_kadmin, _krb_kerberos, _krb_krbtgt, _krbfast, _krbtgt, _launchservicesd, _lda, _locationd, _logd, _lp, _mailman, _mbsetupuser, _mcxalr, _mdnsresponder, _mobileasset, _mysql, _nearbyd, _netbios, _netstatistics, _networkd, _nsurlsessiond, _nsurlstoraged, _oahd, _ondemand, _postfix, _postgres, _qtss, _reportmemoryexception, _rmd, _sandbox, _screensaver, _scsd, _securityagent, _softwareupdate, _spotlight, _sshd, _svn, _taskgated, _teamsserver, _timed, _timezone, _tokend, _trustd, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _warmd, _webauthserver, _windowserver, _www, _wwwproxy, _xserverdocs
|
||||
```
|
||||
* **Gost**: Nalog za goste sa veoma strogim dozvolama
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
* **Gost**: Račun za goste sa veoma strogim dozvolama
|
||||
```bash
|
||||
state=("automaticTime" "afpGuestAccess" "filesystem" "guestAccount" "smbGuestAccess")
|
||||
for i in "${state[@]}"; do sysadminctl -"${i}" status; done;
|
||||
|
@ -35,16 +32,21 @@ for i in "${state[@]}"; do sysadminctl -"${i}" status; done;
|
|||
* **Niko**: Procesi se izvršavaju sa ovim korisnikom kada su potrebne minimalne dozvole
|
||||
* **Root**
|
||||
|
||||
### Korisničke privilegije
|
||||
## Korisničke privilegije
|
||||
|
||||
* **Standardni korisnik:** Najosnovniji korisnik. Ovaj korisnik treba dozvole koje dodeljuje admin korisnik kada pokušava da instalira softver ili izvrši druge napredne zadatke. Ne može to učiniti sam.
|
||||
* **Admin korisnik**: Korisnik koji većinu vremena radi kao standardni korisnik, ali mu je takođe dozvoljeno da izvršava root akcije kao što su instalacija softvera i drugi administrativni zadaci. Svi korisnici koji pripadaju admin grupi su **dodeljeni pristup root-u putem sudoers datoteke**.
|
||||
* **Root**: Root je korisnik kojem je dozvoljeno da izvrši gotovo svaku akciju (postoje ograničenja koja nameću zaštite poput System Integrity Protection).
|
||||
* Na primer, root neće moći da postavi datoteku unutar `/System`
|
||||
|
||||
## Eksterni nalozi
|
||||
|
||||
MacOS takođe podržava prijavu putem eksternih provajdera identiteta kao što su FaceBook, Google... Glavni demon koji obavlja ovaj posao je `accountsd` (`/System/Library/Frameworks/Accounts.framework//Versions/A/Support/accountsd`) i moguće je pronaći dodatke koji se koriste za eksternu autentifikaciju unutar fascikle `/System/Library/Accounts/Authentication/`.\
|
||||
Pored toga, `accountsd` dobija listu tipova naloga iz `/Library/Preferences/SystemConfiguration/com.apple.accounts.exists.plist`.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
Loading…
Reference in a new issue