Introductie
In het cybersecurity landschap merken wij bij Rootsec dat Advanced Persistent Threats (APTs) veel gebruik maken van Remote Procedure Calls (RPC) tijdens aanvallen. Deze RPC-gebaseerde aanvallen maken het mogelijk voor aanvallers om lateraal door het netwerk heen te bewegen, verhoogde rechten te krijgen en post-exploitatie activiteiten uit te voeren zoals bijvoorbeeld OS Credential Dumping.
Wat is RPC?
RPC ook wel bekend als Remote Procedure Call is een protocol dat het voor een client process mogelijk maakt om een functie aan te roepen dat draait in een server process. Deze server kan op dezelfde host zijn, maar ook op een remote host. Wanneer het server process op een remote host draait noemen we dit een RPC-call.
Een RPC-client kan met de server communiceren op basis van een UUID (Universal Unique Identifier) en een Endpoint waarop de server luistert naar binnenkomende verbindingen. Wanneer de client een verbinding maakt naar de server kan deze client de verschillende functies aanroepen op basis van hun Opnum (Operation number). Dit verwijst naar een uniek identificatienummer dat wordt toegekend aan specifieke operaties binnen een protocol, in dit geval het RPC-protocol.
RPC-aanvallen in de praktijk
Een aanval die veel wordt gebruikt door aanvallers (en ook door ons ????) voor post-exploitatie is een DCSync-aanval. Bij een DCSync-aanval wordt er een Domain Controller ‘gesimuleerd’, wat resulteert in replicatie naar ons als aanvaller. Het gevaar van de aanval is dat Domain Replication ook voor legitieme doeleinden binnen Active Directory (AD) gebruikt wordt. Dit komt omdat Domain Controllers in synchronisatie met elkaar moeten zijn en doormiddel van replicatie deze informatie met elkaar uitwisselen. Deze legitieme functionaliteit wordt tijdens een DCSync dus misbruikt om toegang te krijgen tot wachtwoordhashes van gebruikersaccounts en computeraccounts.
Daarbij krijgen we ook toegang tot de krbtgt-hash, die gebruikt kan worden om eigen Kerberos TGS-tickets te maken en deze zelf te ondertekenen. Specifiek wordt er tijdens een DCSync-aanval gebruik gemaakt van het Directory Replication Service Remote Protocol (MS-DRSR). Waarbij de ‘DSGetNCChange’functie, gebruikt wordt om binnen dit protocol de ‘IDL_DRSGetNCChange’ RPC-functie aan te roepen. Hiermee wordt er een verzoek gedaan naar de Domain Controller om wijzigingen in de Active Directory-database op te halen.
In de onderstaande afbeelding wordt er een DCSync aanval uitgevoerd. Hierin is te zien dat wij alle gebruikers en computer hashes van ons lab-omgeving genaamd “SUPERSTROOM.local” ontvangen.
Naast de DCSync aanval zijn er nog andere talloze aanvallen en tools die gebruik maken van RPC:
- Remote Scheduled Task voor laterale beweging en Remote Code Execution (RCE)
- Remote Service Creation (bijvoorbeeld PsExec.exe) voor laterale beweging en RCE
- Remote Registry Modification voor laterale beweging en RCE
- Remote WMI via WMIC voor laterale beweging en RCE
- BloodHound voor interne AD verkenning
- PetitPotam voor Authentication Coercion
Het blokkeren van RPC-aanvallen
Zero Networks heeft een project genaamd RPC Firewall gemaakt welke het blokkeren van malafide RPC-calls eenvoudig maakt. We hebben de firewall geïnstalleerd in onze lab omgeving en hebben de standaard configuratie template gebruikt welke een groot deel van de bekende RPC aanvallen zal blokkeren:
Als we nu proberen om opnieuw een DCSync aanval uit te voeren zien we dat het malafide verzoek geblokkeerd wordt en we de error “rpc_s_access_denied” krijgen.
Conclusie
RPC-gebaseerde aanvallen vormen een bedreiging voor organisaties. Ze worden gebruikt om lateraal te bewegen, verhoogde rechten te verkrijgen en post-exploitatie aanvallen uit te voeren. Een effectieve manier om deze aanvallen te blokkeren is door de implementatie van een RPC Firewall.
Het is belangrijk om te benadrukken dat het essentieel is om eerst onderzoek te doen voordat alle RPC-filters blindelings worden geïmplementeerd. Dit komt doordat onjuiste configuratie mogelijk functionaliteit kan breken. Daarnaast moet de RPC Firewall met verhoogde rechten worden gedraaid, omdat anders de services niet beschermd kunnen worden vanwege onvoldoende rechten.
Al met al kunnen organisaties de RPC Firewall gebruiken om verdachte RPC-calls te blokkeren. Een goed geïmplementeerde firewall biedt een krachtige verdediging tegen RPC-gebaseerde aanvallen en verhoogt de beveiliging van de organisatie.