hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse
2024-02-10 13:03:23 +00:00
..
macos-ipc-inter-process-communication Translated to Italian 2024-02-10 13:03:23 +00:00
macos-library-injection Translated to Italian 2024-02-10 13:03:23 +00:00
macos-.net-applications-injection.md Translated to Italian 2024-02-10 13:03:23 +00:00
macos-dirty-nib.md Translated to Italian 2024-02-10 13:03:23 +00:00
macos-electron-applications-injection.md Translated to Italian 2024-02-10 13:03:23 +00:00
macos-java-apps-injection.md Translated to Italian 2024-02-10 13:03:23 +00:00
macos-perl-applications-injection.md Translated to Italian 2024-02-10 13:03:23 +00:00
macos-ruby-applications-injection.md Translated to Italian 2024-02-10 13:03:23 +00:00
README.md Translated to Italian 2024-02-10 13:03:23 +00:00

Abuso dei processi su macOS

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Abuso dei processi su macOS

macOS, come qualsiasi altro sistema operativo, fornisce una varietà di metodi e meccanismi per l'interazione, la comunicazione e la condivisione dei dati tra i processi. Sebbene queste tecniche siano essenziali per il corretto funzionamento del sistema, possono anche essere sfruttate dagli attori minacciosi per eseguire attività malevole.

Iniezione di librerie

L'iniezione di librerie è una tecnica in cui un attaccante costringe un processo a caricare una libreria malevola. Una volta iniettata, la libreria viene eseguita nel contesto del processo di destinazione, fornendo all'attaccante gli stessi permessi e accessi del processo.

{% content-ref url="macos-library-injection/" %} macos-library-injection {% endcontent-ref %}

Hooking di funzioni

L'hooking di funzioni consiste nell'intercettare le chiamate alle funzioni o i messaggi all'interno del codice di un software. Attraverso l'hooking delle funzioni, un attaccante può modificare il comportamento di un processo, osservare dati sensibili o addirittura ottenere il controllo del flusso di esecuzione.

{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %} macos-function-hooking.md {% endcontent-ref %}

Comunicazione tra processi

La comunicazione tra processi (IPC) si riferisce a diversi metodi con cui i processi separati condividono e scambiano dati. Sebbene l'IPC sia fondamentale per molte applicazioni legittime, può anche essere utilizzato impropriamente per eludere l'isolamento dei processi, divulgare informazioni sensibili o eseguire azioni non autorizzate.

{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %} macos-ipc-inter-process-communication {% endcontent-ref %}

Iniezione nelle applicazioni Electron

Le applicazioni Electron eseguite con specifiche variabili d'ambiente potrebbero essere vulnerabili all'iniezione di processi:

{% content-ref url="macos-electron-applications-injection.md" %} macos-electron-applications-injection.md {% endcontent-ref %}

Dirty NIB

I file NIB definiscono gli elementi dell'interfaccia utente (UI) e le loro interazioni all'interno di un'applicazione. Tuttavia, possono eseguire comandi arbitrari e Gatekeeper non impedisce l'esecuzione di un'applicazione già eseguita se un file NIB viene modificato. Pertanto, potrebbero essere utilizzati per far eseguire programmi arbitrari:

{% content-ref url="macos-dirty-nib.md" %} macos-dirty-nib.md {% endcontent-ref %}

Iniezione nelle applicazioni Java

È possibile sfruttare determinate capacità di Java (come la variabile d'ambiente _JAVA_OPTS) per far eseguire a un'applicazione Java codice/comandi arbitrari.

{% content-ref url="macos-java-apps-injection.md" %} macos-java-apps-injection.md {% endcontent-ref %}

Iniezione nelle applicazioni .Net

È possibile iniettare codice nelle applicazioni .Net sfruttando la funzionalità di debug di .Net (non protetta dalle protezioni di macOS come l'indurimento in esecuzione).

{% content-ref url="macos-.net-applications-injection.md" %} macos-.net-applications-injection.md {% endcontent-ref %}

Iniezione in Perl

Verifica le diverse opzioni per far eseguire a uno script Perl codice arbitrario in:

{% content-ref url="macos-perl-applications-injection.md" %} macos-perl-applications-injection.md {% endcontent-ref %}

Iniezione in Ruby

È anche possibile sfruttare le variabili d'ambiente di Ruby per far eseguire script arbitrari:

{% content-ref url="macos-ruby-applications-injection.md" %} macos-ruby-applications-injection.md {% endcontent-ref %}

Iniezione in Python

Se la variabile d'ambiente PYTHONINSPECT è impostata, il processo Python passerà a una CLI Python una volta terminato. È anche possibile utilizzare PYTHONSTARTUP per indicare uno script Python da eseguire all'inizio di una sessione interattiva.
Tuttavia, nota che lo script PYTHONSTARTUP non verrà eseguito quando PYTHONINSPECT crea la sessione interattiva.

Altre variabili d'ambiente come PYTHONPATH e PYTHONHOME potrebbero essere utili per far eseguire un comando Python codice arbitrario.

Tieni presente che gli eseguibili compilati con pyinstaller non utilizzeranno queste variabili d'ambiente anche se vengono eseguiti utilizzando un Python integrato.

{% hint style="danger" %} In generale, non sono riuscito a trovare un modo per far eseguire a Python codice arbitrario sfruttando le variabili d'ambiente.
Tuttavia, la maggior parte delle persone installa Python utilizzando Homebrew, che installerà Python in una posizione scrivibile per l'utente amministratore predefinito. Puoi dirottarlo con qualcosa del genere:

mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
cat > /opt/homebrew/bin/python3 <<EOF
#!/bin/bash
# Extra hijack code
/opt/homebrew/bin/python3.old "$@"
EOF
chmod +x /opt/homebrew/bin/python3

Anche root eseguirà questo codice quando si esegue python. {% endhint %}

Rilevamento

Shield

Shield (Github) è un'applicazione open source che può rilevare e bloccare le azioni di iniezione di processo:

  • Utilizzando Variabili Ambientali: Monitorerà la presenza di una qualsiasi delle seguenti variabili ambientali: DYLD_INSERT_LIBRARIES, CFNETWORK_LIBRARY_PATH, RAWCAMERA_BUNDLE_PATH e ELECTRON_RUN_AS_NODE
  • Utilizzando chiamate task_for_pid: Per trovare quando un processo vuole ottenere la porta del task di un altro che consente di iniettare codice nel processo.
  • Parametri delle app Electron: Qualcuno può utilizzare gli argomenti della riga di comando --inspect, --inspect-brk e --remote-debugging-port per avviare un'app Electron in modalità di debug e quindi iniettare codice in essa.
  • Utilizzando symlink o hardlink: Tipicamente l'abuso più comune è quello di posizionare un link con i privilegi dell'utente, e puntarlo a una posizione con privilegi superiori. La rilevazione è molto semplice sia per gli hardlink che per i symlink. Se il processo che crea il link ha un livello di privilegio diverso rispetto al file di destinazione, creiamo un avviso. Purtroppo, nel caso dei symlink, il blocco non è possibile, poiché non abbiamo informazioni sulla destinazione del link prima della creazione. Questa è una limitazione del framework EndpointSecuriy di Apple.

Chiamate effettuate da altri processi

In questo post del blog puoi trovare come è possibile utilizzare la funzione task_name_for_pid per ottenere informazioni su altri processi che iniettano codice in un processo e quindi ottenere informazioni su quell'altro processo.

Nota che per chiamare quella funzione devi essere lo stesso uid di quello che esegue il processo o root (e restituisce informazioni sul processo, non un modo per iniettare codice).

Riferimenti

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: