Transport Agent Malevoli: Server Application Component - Transport Agent (T1505.002)
La tecnica T1505.002 descrive l'abuso dei transport agent di Microsoft Exchange come meccanismo di persistenza all'interno di un'infrastruttura di posta compromessa. Un transport agent è un componente .NET registrato sul server Exchange che intercetta i messaggi durante il loro passaggio nella transport pipeline, tipicamente per applicare filtri antispam, firme aziendali o policy di journaling.
Un attore ostile che riesce a compilare e registrare un proprio assembly malevolo ottiene un punto di controllo estremamente potente: il codice viene eseguito nel contesto del servizio Exchange Transport, sopravvive ai riavvii ed è invocato automaticamente per ogni email che transita, senza necessità di task pianificati o servizi aggiuntivi che potrebbero destare sospetto.
La tecnica ricade sotto la tattica TA0003 (Persistence) e si colloca nella fase post-exploitation della kill chain, tipicamente dopo l'ottenimento di privilegi amministrativi sul server Exchange. Le implementazioni osservate mostrano come il transport agent possa essere configurato con logica selettiva — ad esempio agire solo su destinatari specifici presenti in una lista fornita dall'attaccante — per esfiltrare allegati o modificare contenuti senza generare rumore di rilevamento.
L'impatto è duplice: da un lato garantisce persistenza silenziosa su un asset critico dell'organizzazione, dall'altro fornisce un canale di intercettazione e manipolazione della corrispondenza aziendale difficilmente distinguibile dal normale funzionamento del server di posta. Il caso più documentato è quello del malware LightNeuron, che ha impiegato proprio questa tecnica per anni prima di essere identificato.
La simulazione di T1505.002 richiede un laboratorio con Microsoft Exchange Server (le versioni 2013, 2016 e 2019 supportano l'architettura dei transport agent basata su .NET). L'operatore red team deve disporre di privilegi equivalenti a Organization Management o comunque della capacità di eseguire cmdlet come Install-TransportAgent dall'Exchange Management Shell.
La catena tipica prevede lo sviluppo di un assembly .NET che erediti da una delle classi base disponibili nel namespace Microsoft.Exchange.Data.Transport, come RoutingAgent o SmtpReceiveAgent. Il codice sovrascrive gli handler degli eventi rilevanti — ad esempio OnSubmittedMessage o OnEndOfData — per accedere all'oggetto EmailMessage in transito. Da qui è possibile ispezionare mittente, destinatario, header e allegati, e implementare la logica di trigger desiderata (ad esempio duplicare gli allegati in una directory locale solo se il destinatario appartiene a una watchlist).
Una volta compilata la DLL, il deployment si articola in tre passaggi eseguiti dall'Exchange Management Shell:
Install-TransportAgent -Name "CustomAgent" -TransportAgentFactory "Namespace.ClassFactory" -AssemblyPath "C:\Program Files\CustomAgent\Agent.dll"
Enable-TransportAgent -Identity "CustomAgent"
Restart-Service MSExchangeTransport
È importante notare che l'assembly viene caricato dal processo EdgeTransport.exe e, una volta in memoria, il file DLL su disco risulta lockato — un dettaglio operativo che influenza sia il deployment sia la rimozione durante gli esercizi.
Per la fase di sviluppo, il Microsoft Exchange Server SDK (gratuito) fornisce le librerie di riferimento necessarie. Un progetto in Visual Studio Community (gratuito) con target .NET Framework 4.7.2+ è sufficiente per produrre l'assembly. Per esercizi più realistici, il framework Covenant (open source) e Nighthawk (a pagamento) possono essere usati come C2 per orchestrare l'installazione remota dopo l'ottenimento delle credenziali admin.
Sul fronte Linux, un esercizio analogo può essere condotto contro Postfix utilizzando un milter custom scritto in Python con la libreria pymilter (open source), oppure contro Exim manipolando le direttive transport_filter nel file di configurazione. In entrambi i casi la logica è simile: intercettare il flusso SMTP a livello di daemon per esfiltrare o alterare contenuti.
Durante l'engagement, documentare accuratamente path della DLL, factory class name e cmdlet invocate consente al blue team di validare le proprie regole di detection e di ripulire l'ambiente al termine del test.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo