_opName`**.
+
+L'objet est l'un des suivants : `bpfdesc`, `cred`, `file`, `proc`, `vnode`, `mount`, `devfs`, `ifnet`, `inpcb`, `mbuf`, `ipq`, `pipe`, `sysv[msg/msq/shm/sem]`, `posix[shm/sem]`, `socket`, `kext`.\
+Le `opType` est généralement check qui sera utilisé pour autoriser ou refuser l'action. Cependant, il est également possible de trouver `notify`, ce qui permettra au kext de réagir à l'action donnée.
+
+Vous pouvez trouver un exemple dans [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):
+
+int
+mmap(proc_t p, struct mmap_args *uap, user_addr_t *retval)
+{
+[...]
+#if CONFIG_MACF
+ error = mac_file_check_mmap(vfs_context_ucred(ctx),
+ fp->fp_glob, prot, flags, file_pos + pageoff,
+&maxprot);
+if (error) {
+(void)vnode_put(vp);
+goto bad;
+}
+#endif /* MAC */
+[...]
+
+
+Ensuite, il est possible de trouver le code de `mac_file_check_mmap` dans [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;
+}
+```
+Qui appelle le macro `MAC_CHECK`, dont le code peut être trouvé dans [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)
+```
+Qui passera en revue toutes les politiques mac enregistrées en appelant leurs fonctions et en stockant la sortie dans la variable d'erreur, qui ne pourra être remplacée que par `mac_error_select` par des codes de succès, donc si un contrôle échoue, le contrôle complet échouera et l'action ne sera pas autorisée.
+
+{% hint style="success" %}
+Cependant, rappelez-vous que tous les appels MACF ne sont pas utilisés uniquement pour refuser des actions. Par exemple, `mac_priv_grant` appelle le macro [**MAC\_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L274), qui accordera le privilège demandé si une politique répond avec un 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
+
+Ces appels sont destinés à vérifier et à fournir (des dizaines de) **privileges** définis dans [**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h).\
+Certaines parties du code du noyau appelleraient `priv_check_cred()` depuis [**bsd/kern/kern\_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_priv.c) avec les informations d'identification KAuth du processus et l'un des codes de privilège, ce qui appellera `mac_priv_check` pour voir si une politique **refuse** de donner le privilège, puis il appelle `mac_priv_grant` pour voir si une politique accorde le `privilege`.
+
+### proc\_check\_syscall\_unix
+
+Ce hook permet d'intercepter tous les appels système. Dans `bsd/dev/[i386|arm]/systemcalls.c`, il est possible de voir la fonction déclarée [`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25), qui contient ce code :
+```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 */
+```
+Qui vérifiera dans le **bitmask** du processus appelant si l'appel système actuel doit appeler `mac_proc_check_syscall_unix`. Cela est dû au fait que les appels système sont effectués si fréquemment qu'il est intéressant d'éviter d'appeler `mac_proc_check_syscall_unix` à chaque fois.
+
+Notez que la fonction `proc_set_syscall_filter_mask()`, qui définit le bitmask des appels système dans un processus, est appelée par Sandbox pour définir des masques sur les processus isolés.
+
+## Appels système MACF exposés
+
+Il est possible d'interagir avec MACF via certains appels système définis dans [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*/
+```
+## Références
+
+* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
+
+{% hint style="success" %}
+Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
+
+
+Soutenir HackTricks
+
+* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
+* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
+* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
+
+
+{% endhint %}
diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-users.md b/macos-hardening/macos-security-and-privilege-escalation/macos-users.md
index 59c18274b..523d6d221 100644
--- a/macos-hardening/macos-security-and-privilege-escalation/macos-users.md
+++ b/macos-hardening/macos-security-and-privilege-escalation/macos-users.md
@@ -1,8 +1,8 @@
-# Utilisateurs macOS
+# Utilisateurs macOS & Comptes Externes
{% hint style="success" %}
-Apprenez et pratiquez le Hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
-Apprenez et pratiquez le Hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+Apprenez et pratiquez le Hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Apprenez et pratiquez le Hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -10,13 +10,12 @@ Apprenez et pratiquez le Hacking GCP :
{% endhint %}
-
-### Utilisateurs communs
+## Utilisateurs Communs
* **Daemon** : Utilisateur réservé aux démons système. Les noms de compte de démon par défaut commencent généralement par un "\_":
@@ -33,16 +32,21 @@ for i in "${state[@]}"; do sysadminctl -"${i}" status; done;
* **Personne** : Les processus sont exécutés avec cet utilisateur lorsque des permissions minimales sont requises
* **Root**
-### Privilèges Utilisateur
+## Privilèges Utilisateur
* **Utilisateur Standard :** L'utilisateur le plus basique. Cet utilisateur a besoin de permissions accordées par un utilisateur admin lorsqu'il tente d'installer des logiciels ou d'effectuer d'autres tâches avancées. Il ne peut pas le faire seul.
* **Utilisateur Admin** : Un utilisateur qui opère la plupart du temps en tant qu'utilisateur standard mais qui est également autorisé à effectuer des actions root telles que l'installation de logiciels et d'autres tâches administratives. Tous les utilisateurs appartenant au groupe admin ont **accès à root via le fichier sudoers**.
-* **Root** : Root est un utilisateur autorisé à effectuer presque n'importe quelle action (il existe des limitations imposées par des protections comme la Protection de l'Intégrité du Système).
+* **Root** : Root est un utilisateur autorisé à effectuer presque n'importe quelle action (il y a des limitations imposées par des protections comme la Protection de l'Intégrité du Système).
* Par exemple, root ne pourra pas placer un fichier dans `/System`
+## Comptes Externes
+
+MacOS prend également en charge la connexion via des fournisseurs d'identité externes tels que FaceBook, Google... Le principal démon effectuant ce travail est `accountsd` (`/System/Library/Frameworks/Accounts.framework//Versions/A/Support/accountsd`) et il est possible de trouver des plugins utilisés pour l'authentification externe dans le dossier `/System/Library/Accounts/Authentication/`.\
+De plus, `accountsd` obtient la liste des types de comptes à partir de `/Library/Preferences/SystemConfiguration/com.apple.accounts.exists.plist`.
+
{% hint style="success" %}
-Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
-Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)