
Intercetta la comunicazione tramite Named Pipes di Windows usando Burp o strumenti proxy HTTP simili.
Le named pipe sono molto diffuse per la comunicazione tra processi su Windows. Vengono utilizzate in molte applicazioni, inclusa la chiamata di procedura remota (RPC) di Windows. Lo scopo di questo strumento è consentire a ricercatori di sicurezza e penetration tester di eseguire valutazioni della sicurezza per applicazioni che utilizzano named pipe. Questo progetto è ispirato allo straordinario progetto MITM_Intercept di CyberArk Labs.
Lo strumento crea un proxy client/server per pipe con un bridge client/server WebSocket. Il client WebSocket si connette al server WebSocket tramite un proxy HTTP come Burp.
Nota importante: questo strumento utilizza le API win32 per creare le named pipe, quindi funziona solo su Windows. Attualmente deve essere eseguito sulla stessa macchina del server di pipe di destinazione e del proxy HTTP. Potrei aggiungere un'opzione per utilizzare un proxy remoto e un'opzione per inoltrare a un server di pipe remoto, ma lo strumento dovrà comunque essere eseguito su Windows.
Diagramma di flusso:

È importante capire che questo strumento funziona creando istanze separate del server di pipe, oltre alle istanze create dall'applicazione server di destinazione, inducendo l'applicazione client di destinazione a connettersi a queste istanze proxy. Questo comporta alcune cose:
Come potete vedere dai punti precedenti, l'uso di questo strumento potrebbe modificare il comportamento dell'applicazione di destinazione. Ricordate che questo strumento è principalmente per test di sicurezza: non usatelo in sistemi di produzione.
Lo strumento è stato testato con la versione 3.13.7 di Python. Configurazione:
python -m venv .venv
.venv\Scripts\activate.bat
pip install -r requirements.txt
usage: pipe_intercept.py [-h] --pipe-name PIPE_NAME [--ws-port WS_PORT] [--http-proxy-port HTTP_PROXY_PORT] [--log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}]
options:
-h, --help show this help message and exit
--pipe-name PIPE_NAME
The name of the pipe to be intercepted
--ws-port WS_PORT An available port number for the internal WebSocket server (if not specified, a random port will be used)
--http-proxy-port HTTP_PROXY_PORT
The port number of the HTTP proxy (if not specified, the default is 8080)
--log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}
Log level (if not specified, the default is INFO)
Dalla cartella principale (pipe-intercept):
pytest
Docker su Windows utilizza una named pipe per comunicare tra il client e il servizio docker. Il nome della pipe è "\\.\pipe\docker_engine". Vediamo come possiamo intercettare questa comunicazione. Iniziamo eseguendo lo strumento:
C:\pipe-intercept>python pipe_intercept.py --pipe-name docker_engine
INFO:websockets.server:server listening on 127.0.0.1:12037
Ora possiamo avviare Burp e, da un'altra shell, creare un container Windows:
C:\pipe-intercept>docker run -it --name win mcr.microsoft.com/windows:1809-amd64 cmd
Microsoft Windows [Version 10.0.17763.2803]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\>dir
Volume in drive C has no label.
Volume Serial Number is 5C09-8FFA
Directory of C:\
05/07/2020 06:16 AM 5,510 License.txt
04/04/2022 02:57 PM <DIR> PerfLogs
04/04/2022 04:13 PM <DIR> Program Files
04/04/2022 02:57 PM <DIR> Program Files (x86)
04/04/2022 04:17 PM <DIR> Users
04/04/2022 04:13 PM <DIR> Windows
1 File(s) 5,510 bytes
5 Dir(s) 21,188,812,800 bytes free
C:\>
Ora, se apriamo la scheda WebSocket in Burp, possiamo vedere la comunicazione:

Possiamo anche attivare l'intercettazione e modificare il messaggio:

Microsoft Windows [Version 10.0.17763.2803]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\>dir
Volume in drive C has no label.
Volume Serial Number is 5C09-8FFA
Directory of C:\
05/07/2020 06:16 AM 5,510 License.txt
04/04/2022 02:57 PM <DIR> PerfLogs
04/04/2022 04:13 PM <DIR> Modified Name
04/04/2022 02:57 PM <DIR> Program Files (x86)
04/04/2022 04:17 PM <DIR> Users
04/04/2022 04:13 PM <DIR> Windows
1 File(s) 5,510 bytes
5 Dir(s) 21,188,288,512 bytes free
C:\>