Het Midden-Oosten heeft jarenlang zijn reputatie behouden als een vruchtbare voedingsbodem voor geavanceerde persistente bedreigingen (APT’s). Te midden van het routinematig monitoren van verdachte activiteiten op de systemen van spraakmakende klanten, waarvan sommige in deze regio gevestigd zijn, stuitte ESET Research op een zeer geavanceerde en onbekende achterdeur die we Deadglyph hebben genoemd. We hebben de naam afgeleid van artefacten die in de achterdeur zijn gevonden (zoals 0xDEADB001, ook weergegeven in REF _Ref111452440 u tafel 1
), gekoppeld aan de aanwezigheid van een homoglyph aanval. Voor zover wij weten is dit de eerste publieke analyse van deze voorheen ongedocumenteerde achterdeur, gebruikt door een groep die blijk geeft van een opmerkelijke mate van verfijning en expertise. Op basis van de targeting en aanvullend bewijsmateriaal schrijven we Deadglyph met veel vertrouwen toe aan de Stealth Falcon APT-groep.
De architectuur van Deadglyph is ongebruikelijk omdat deze bestaat uit samenwerkende componenten – de ene is een native x64-binair bestand, de andere een .NET-assembly. Deze combinatie is ongebruikelijk omdat malware doorgaans slechts één programmeertaal gebruikt voor zijn componenten. Dit verschil zou kunnen duiden op een afzonderlijke ontwikkeling van deze twee componenten, terwijl ook wordt geprofiteerd van de unieke kenmerken van de verschillende programmeertalen die ze gebruiken. Er kan ook gebruik worden gemaakt van verschillende talen om de analyse te belemmeren, omdat gemengde code moeilijker te navigeren en te debuggen is.
De traditionele achterdeuropdrachten zijn niet geïmplementeerd in het binaire achterdeurbestand; in plaats daarvan worden ze dynamisch ontvangen van de command and control (C&C)-server in de vorm van extra modules. Deze achterdeur beschikt ook over een aantal mogelijkheden om detectie te voorkomen.
In deze blogpost gaan we dieper in op Deadglyph en geven we een technische analyse van deze achterdeur, het doel ervan en enkele van de aanvullende componenten die we hebben verkregen. We presenteren ook onze bevindingen over Deadglyph op de LABScon 2023 conferentie.
Kernpunten van de blogpost:
- ESET Research ontdekte een verfijnde achterdeur met ongebruikelijke architectuur die we Deadglyph hebben genoemd.
- De hoofdcomponenten worden gecodeerd met een machinespecifieke sleutel.
- Traditionele backdoor-opdrachten worden geïmplementeerd via extra modules die worden ontvangen van de C&C-server.
- We hebben drie van de vele modules verkregen: procesmaker, bestandslezer en informatieverzamelaar.
- We schrijven Deadglyph toe aan de Stealth Falcon-groep.
- Bovendien hebben we een gerelateerde shellcode-downloader gevonden; we veronderstellen dat het mogelijk kan worden gebruikt voor de installatie van Deadglyph.
Het slachtoffer van de geanalyseerde infiltratie is een overheidsinstantie in het Midden-Oosten die is gecompromitteerd voor spionagedoeleinden. Een gerelateerd voorbeeld gevonden op VirusTotal werd ook vanuit deze regio, met name vanuit Qatar, geüpload naar het bestandsscanplatform. Het beoogde gebied wordt weergegeven op de kaart in REF _Ref143614671 u Figuur 1
.
Stealth Falcon (ook bekend als Project Raven of FruityArmor) is een dreigingsgroep die banden heeft met de Verenigde Arabische Emiraten volgens MITER. Het is bekend dat Stealth Falcon actief is sinds 2012 en zich richt op politieke activisten, journalisten en dissidenten in het Midden-Oosten. Het werd voor het eerst ontdekt en beschreven door Citizen Lab, die een publiceerde analyse van een campagne van spyware-aanvallen in 2016.
In januari 2019 publiceerde Reuters een onderzoeksrapport over Project Raven, een initiatief dat naar verluidt voormalige NSA-agenten in dienst heeft en zich op hetzelfde soort doelen richt als Stealth Falcon. Op basis van deze twee rapporten die verwijzen naar dezelfde doelen en aanslagen, heeft Amnesty International heeft geconcludeerd (getoond in REF _Ref144978712 u Figuur 2
) dat Stealth Falcon en Project Raven eigenlijk dezelfde groep zijn.
In september 2019 hebben wij gepubliceerd onderzoek op een achterdeur, toegeschreven aan Stealth Falcon, die een ongebruikelijke techniek gebruikte, Background Intelligent Transfer Service, voor C&C-communicatie. We onthullen nu het resultaat van onze diepgaande analyse van wat vermoedelijk de nieuwste toevoeging is aan de spionagetoolset van Stealth Falcon.
Deadglyph-achterdeur
De laadketen van Deadglyph bestaat uit meerdere componenten, zoals geïllustreerd in REF _Ref144978760 u Figuur 3
. Het initiële onderdeel is een shellcode-lader voor het register, die shellcode uit het register laadt. Deze geëxtraheerde shellcode laadt op zijn beurt het oorspronkelijke x64-gedeelte van de achterdeur: de Executor. De Executor laadt vervolgens het .NET-gedeelte van de backdoor – de Orchestrator. Opvallend is dat de enige component op de systeemschijf als bestand de initiële component is, die de vorm heeft van een Dynamic Link Library (DLL). De overige componenten worden gecodeerd en opgeslagen in een binaire registerwaarde.
Hoewel de precieze methode van de aanvankelijke compromisvector nog niet is vastgesteld, vermoeden we dat een installatiecomponent betrokken is bij het inzetten van verdere componenten en het tot stand brengen van persistentie binnen het systeem.
In de rest van deze sectie analyseren we elk onderdeel.
Registershellcode-lader
Het oorspronkelijke onderdeel van Deadglyph is een kleine DLL met één enkele export, genaamd 1. Dit onderdeel wordt voortgezet met behulp van Gebeurtenisabonnement op Windows Management Instrumentation (WMI). en dient als een shellcode-lader voor het register. Het wordt uitgevoerd via de opdrachtregel rundll32 C:WINDOWSSystem32pbrtl.dll,#1.
De registershellcode-lader begint met het decoderen van het pad naar de gecodeerde shellcode die is opgeslagen in het Windows-register, met behulp van RC4. We vermoeden dat het pad voor elk slachtoffer uniek is; in het hier geanalyseerde geval was het registerpad:
SoftwareClassesCLSID{5abc7f42-1112-5099-b082-ce8d65ba0c47}cAbRGHLg
De rootregistersleutel is een van beide hklm or HKCU, afhankelijk van of het huidige proces met verhoogde rechten wordt uitgevoerd of niet. Dezelfde logica is terug te vinden in andere componenten.
Hierna leidt de lader een machinespecifieke RC4-sleutel af met behulp van de systeem-UUID die is opgehaald uit de onbewerkte SMBIOS-firmwaretabel. Met behulp van deze sleutel wordt de shellcode geladen, gedecodeerd en vervolgens uitgevoerd. Het is belangrijk om te benadrukken dat deze sleutelafleidingsbenadering ervoor zorgt dat de juiste decodering niet plaatsvindt als de lader op een andere computer wordt uitgevoerd.
Interessant is dat de lader ook kan worden geconfigureerd met een vlag in zijn .gegevens sectie om een hardgecodeerde sleutel te gebruiken om de shellcode te decoderen, in plaats van de machinespecifieke sleutel.
We hebben een homoglyph-aanval gezien die Microsoft Corporation nabootst in de VERSIE INFORMATIE bron van deze en andere PE-componenten. Deze methode maakt gebruik van verschillende Unicode-tekens die visueel lijken op, maar in dit geval niet identiek zijn aan de originele tekens, met name de Griekse hoofdletter San (U+03FA, Ϻ) en de Cyrillische kleine letter O (U+043E, о) in ϺICRоsоft Corpоratiоn.
Registershellcode
De registershellcode bestaat uit twee delen en bestaat uit een decoderingsroutine en een gecodeerde hoofdtekst. Ten eerste roteert de decoderingsroutine elke byte van het gecodeerde lichaam met één (ROL 0x01). Vervolgens wordt de controle overgedragen aan dit gedecodeerde lichaam. De gedecodeerde body bestaat uit een PE-lader en een PE-bestand, waarbij de laatste de Executor is, die het oorspronkelijke deel van de achterdeur vertegenwoordigt. Deze lader is verantwoordelijk voor het parseren en laden van het bijbehorende PE-bestand.
executeur
De Executor is het native x64-gedeelte van de Deadglyph-achterdeur, dat het volgende doet:
- laadt de configuratie,
- initialiseert de .NET-runtime,
- laadt het ingebedde .NET-gedeelte van de achterdeur (de Orchestrator), en
- fungeert als bibliotheek voor de Orchestrator.
Ten eerste zijn er twee standaardconfiguraties ingebed in het .gegevens sectie zijn AES-gedecodeerd. De configuraties omvatten verschillende parameters, waaronder coderingssleutels, veiligheids- en ontwijkingsinstellingen en het toegangspunt van het daaropvolgende onderdeel.
Tijdens de eerste uitvoering worden deze twee standaardconfiguraties opgeslagen in het Windows-register, van waaruit ze bij volgende uitvoeringen worden geladen, waardoor de implementatie van updates mogelijk wordt gemaakt. Het registerpad voor elke configuratie wordt gegenereerd met de volgende indeling:
{HKCU|HKLM}SoftwareClassesCLSID{ }(Standaard)
is een gegenereerde GUID, die uniek is voor elk slachtoffer.
Hierna wordt de .NET-runtime geïnitialiseerd, waarna de Executor RC4 het .NET-gedeelte van de achterdeur, bekend als de Orchestrator, decodeert. De Orchestrator bevindt zich in de .rsrc sectie van de executeur. De configuratie specificeert de uitvoeringsmethode van de Orchestrator als toegangspunt. Bovendien is er een aparte structuur voorzien om de toegankelijkheid van de functies van de Executor door de Orchestrator te vergemakkelijken.
Na het starten van de Orchestrator fungeert de Executor als ondersteuningsbibliotheek voor de Orchestrator. De Executor bevat veel interessante functies; we beschrijven er enkele in de volgende sectie, in de context van hun gebruik door de Orchestrator en verder geladen modules.
Orchestrator
De Orchestrator is geschreven in .NET en is het belangrijkste onderdeel van de Deadglyph-achterdeur. De primaire rol van dit onderdeel bestaat uit het tot stand brengen van communicatie met de C&C-server en het uitvoeren van opdrachten, vaak gefaciliteerd door de intermediaire rol van de uitvoerder. In tegenstelling tot de voorgaande componenten is de Orchestrator versluierd en wordt gebruik gemaakt van .NET Reactor. Intern wordt de achterdeur genoemd agent, wat een veel voorkomende naam is voor het clientgedeelte in verschillende post-exploitatieframeworks.
initialisatie
De Orchestrator laadt eerst de configuratie en twee ingebedde modules, elk vergezeld van een eigen set configuraties, uit bronnen. Deze middelen zijn Laat leeglopen gecomprimeerd en AES gecodeerd. Er wordt naar verwezen door een ID die SHA-1 is, gehasht in een resourcenaam. Een overzicht van deze bronnen vindt u in REF _Ref111452440 u tafel 1
.
Tabel 1. Orchestrator-bronnen
Naam van de bron |
ID (decimaal) |
ID (hexadecimaal) |
Omschrijving |
43ed9a3ad74ed7ab74c345a876b6be19039d4c8c |
2570286865 |
0x99337711 |
Orchestrator-configuratie. |
3a215912708eab6f56af953d748fbfc38e3bb468 |
3740250113 |
0xDEEFB001 |
Netwerkmodule. |
42fb165bc9cf614996027a9fcb261d65fd513527 |
3740250369 |
0xDEEFB101 |
Configuratie van netwerkmodules. |
e204cdcf96d9f94f9c19dbe385e635d00caaf49d |
3735924737 |
0xDEADB001 |
Timermodule. |
abd2db754795272c21407efd5080c8a705a7d151 |
3735924993 |
0xDEADB101 |
Configuratie van de timermodule. |
De configuratie van de Orchestrator en embedded modules wordt opgeslagen in XML-formaat. Een voorbeeld van een Orchestrator-configuratie wordt weergegeven in REF _Ref111452611 u
Figuur 4
.
De beschrijving van Orchestrator-configuratiegegevens wordt weergegeven in REF _Ref111452782 u tafel 2
.
Tabel 2. Orchestrator-configuratiegegevens
sleutel |
Omschrijving |
k
|
AES-sleutel die wordt gebruikt voor het behouden van moduleconfiguraties. |
a
|
Naam van de initialisatiemethode van de netwerkmodule. |
b
|
Onbekende netwerkmodule-gerelateerde vlag. |
c
|
Naam van de initialisatiemethode van de timermodule. |
d
|
Vlag die het gebruik van machinespecifieke AES-sleutel (systeem-UUID) voor bronnen mogelijk maakt. |
p
|
Resource-ID van netwerkmodule. |
t
|
Resource-ID van timermodule. |
Nadat de broncomponenten zijn geladen, worden meerdere threads gemaakt om verschillende taken uit te voeren. Eén van deze threads is verantwoordelijk voor het uitvoeren van omgevingscontroles, een functie die is geïmplementeerd binnen de Executor. Een andere draad is gewijd aan het tot stand brengen van periodieke communicatie met de C&C-server, waardoor het ophalen van opdrachten mogelijk wordt. Ten slotte wordt een set van drie threads gebruikt voor het uitvoeren van ontvangen opdrachten en het vervolgens terugsturen van gegenereerde uitvoer naar de C&C-server.
De omgevingscontrolethread controleert lopende processen om ongewenste processen te identificeren. Deze thread werkt met twee verschillende lijsten met procesnamen. Als een proces op de eerste lijst wordt gedetecteerd, wordt de C&C-communicatie en opdrachtuitvoering gepauzeerd totdat het ongewenste proces niet langer bestaat. Als er een match is voor een proces op de tweede lijst, wordt de achterdeur onmiddellijk afgesloten en wordt zichzelf verwijderd.
Geen van beide lijsten is geconfigureerd in het geanalyseerde exemplaar, dus we weten niet op welke processen doorgaans wordt gecontroleerd; wij denken dat het waarschijnlijk bedoeld is om analysetools te omzeilen die verdachte activiteiten kunnen detecteren en tot de ontdekking van de achterdeur kunnen leiden.
Communicatie
De Orchestrator maakt gebruik van twee ingebouwde modules voor C&C-communicatie: Timer en Netwerk. Net als de Orchestrator zijn deze modules versluierd met .NET Reactor. De configuratie voor beide modules wordt geleverd door de Orchestrator. Binnen de Orchestrator is een vooraf ingestelde configuratie voor de modules opgenomen; optioneel kan de Orchestrator ook een bijgewerkte configuratieversie uit het register laden:
{HKCU|HKLM}SoftwareClassesCLSID{ }
De achterdeur bevat een interessante veiligheidsmaatregel op het gebied van communicatie. Als de achterdeur geen communicatie tot stand kan brengen met de C&C-server gedurende een tijdsduur die een vooraf gedefinieerde drempel overschrijdt, geconfigureerd in de Executor, wordt een mechanisme voor automatische verwijdering geactiveerd. Deze tijdsdrempel is gespecificeerd in uren en is in het onderzochte geval vastgesteld op één uur.
Deze aanpak dient een tweeledig doel. Aan de ene kant voorkomt het het genereren van redundante netwerkverzoeken naar een ontoegankelijke server. Aan de andere kant verkleint het de kans op latere detectie als de operators de controle over de achterdeur verliezen.
Timermodule
Deze kleine module voert de gespecificeerde callback uit met een configureerbaar interval. Het wordt door de Orchestrator gebruikt in combinatie met de Netwerkmodule om periodiek met de C&C-server te communiceren. Om te voorkomen dat er detecteerbare patronen in netwerklogboeken worden aangemaakt, is het uitvoeringsinterval onderhevig aan randomisatie, op basis van een percentage dat is opgegeven in de configuratie. In het geanalyseerde geval werd het interval ingesteld op vijf minuten, waarbij een variatie van ± 20% werd geïntroduceerd vanwege willekeur.
Een andere methode om detecteerbare netwerkpatronen in periodieke communicatie te vermijden, kan worden gevonden in het genereren van verzoeken die naar de C&C-server worden verzonden. Dit mechanisme, geïmplementeerd in de Executor, omvat het opnemen van opvulling van verschillende lengte, bestaande uit willekeurige bytes, binnen de verzoeken, wat resulteert in verzoeken van verschillende groottes.
Netwerkmodule
De netwerkmodule implementeert de communicatie met de C&C-servers die in de configuratie zijn gespecificeerd. Het kan gegevens naar een C&C-server sturen met behulp van HTTP(S) POST-verzoeken. Het biedt met name verschillende mechanismen om proxyconfiguratiegegevens te verkrijgen. Deze functie suggereert een potentiële focus op omgevingen waar directe internettoegang niet beschikbaar is.
Een voorbeeld van een gedecodeerde (en verfraaide) configuratie wordt getoond in REF _Ref144978805 u Figuur 5
.
Configuratie-items bevatten details met betrekking tot netwerkcommunicatie – C&C-URL's, HTTP User-Agent en optioneel een proxyconfiguratie.
Bij communicatie met de C&C-server wordt onder HTTPS een aangepast binair protocol met gecodeerde inhoud gebruikt.
commando's
De Orchestrator ontvangt opdrachten van de C&C-server in de vorm van taken, die in de wachtrij worden geplaatst voor uitvoering. Er worden drie soorten taken verwerkt:
- Orchestrator-taken,
- Taken van de uitvoerder, en
- Taken uploaden.
De eerste twee soorten worden ontvangen van de C&C-server en de derde wordt intern aangemaakt om de uitvoer van opdrachten en fouten te uploaden.
Orchestrator-taken
Orchestrator-taken bieden de mogelijkheid om de configuratie van de netwerk- en timermodules te beheren en ook om lopende taken te annuleren. Het overzicht van Orchestrator-taken wordt weergegeven in REF _Ref111101783 u tafel 3
.
Tabel 3. Orchestrator-taken
Type |
Omschrijving |
0x80
|
Configuratie van netwerk- en timermodules instellen. |
0x81
|
Configuratie van netwerk- en timermodules verkrijgen. |
0x82
|
Taak annuleren. |
0x83
|
Annuleer alle taken. |
Uitvoerder taken
Uitvoerdertaken bieden de mogelijkheid om de achterdeur te beheren en extra modules uit te voeren. Het is opmerkelijk dat de traditionele achterdeurfunctionaliteit niet inherent aanwezig is in het binaire bestand zelf. In plaats daarvan worden deze functies van de C&C-server verkregen in de vorm van PE-bestanden of shellcode. De volledige omvang van het potentieel van de achterdeur blijft onbekend zonder deze aanvullende modules, die effectief de ware mogelijkheden ervan ontsluiten. Een overzicht van de moduletaken vindt u in REF _Ref117677179 u tafel 4
, dat details bevat over de weinige geïdentificeerde modules. Op dezelfde manier, REF _Ref117677188 u tafel 5
geeft een overzicht van de beheertaken die bij de Executeur horen.
Tabel 4. Taken van de uitvoerder – modules
Type |
Omschrijving |
0x??–0x63
|
Onbekend |
0x64
|
Bestandslezer |
0x65
|
Onbekend |
0x66
|
Onbekend |
0x67
|
Onbekend |
0x68
|
Onbekend |
0x69
|
Procesmaker |
0x6A
|
Onbekend |
0x6B
|
Onbekend |
0x6C
|
Info-verzamelaar |
0x6D
|
Onbekend |
0x6E
|
Onbekend |
Tabel 5. Taken van de uitvoerder – management
Type |
Omschrijving |
0x6F-0x76 |
Niet geïmplementeerd |
0x77 |
Stel de Executor-configuratie in |
0x78 |
Executor-configuratie ophalen |
0x79-0x7C |
Niet geïmplementeerd |
0x7D |
bijwerken |
0x7E |
Verlaten |
0x7F |
Installatie ongedaan maken |
De opdracht die de Executor-configuratie instelt, kan het volgende wijzigen:
- ongewenste proceslijsten,
- tijdsdrempel van C&C-communicatiefout, en
- tijdslimiet voor de uitvoering van aanvullende modules.
Modules
We zijn erin geslaagd om drie unieke modules van de C&C-server te verkrijgen, die elk overeenkomen met een ander Executor-taaktype, zoals weergegeven in REF _Ref117677179 u tafel 4 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003100310037003600370037003100370039000000
. Op basis van de beschikbare informatie schatten we dat er in totaal negen tot veertien modules zijn. Omdat de modules in feite achterdeuropdrachten zijn, moeten ze één basisbewerking uitvoeren en vervolgens optioneel hun uitvoer retourneren. De modules die we hebben verkregen zijn DLL's met één naamloze export (ordinal 1), waarin ze de noodzakelijke API-functies oplossen en de hoofdfunctie aanroepen.
Wanneer ze worden uitgevoerd, worden de modules voorzien van een API-resolutiefunctie, die Windows API's en aangepaste Executor API's kan omzetten. Er wordt naar de Windows API's verwezen door een DWORD-hash, berekend op basis van de naam van de API en de bijbehorende DLL. Kleine hashwaarden (<41) worden speciaal behandeld, waarbij wordt verwezen naar de Executor API-functie. De Executor API omvat in totaal 39 functies die toegankelijk zijn voor de modules. Deze functies hebben betrekking op een verscheidenheid aan operaties, waaronder:
- bestandsbewerkingen,
- encryptie en hashing,
- compressie,
- PE-belasting,
- toegang tot tokenimitatie, en
- utility.
In de rest van deze sectie beschrijven we de modules die we hebben verkregen.
Procesmaker
Module 0x69 voert de opgegeven opdrachtregel uit als een nieuw proces en levert de resulterende uitvoer terug aan de Orchestrator. Het proces kan onder een andere gebruiker worden aangemaakt en de uitvoeringstijd ervan kan beperkt zijn. Opmerkelijk, een ongebruikelijke Taak-API wordt gebruikt in de functionaliteit van deze module.
Deze module werd bediend via de opdrachtregel cmd.exe /c takenlijst /v.
We gaan ervan uit dat het dient als een inactief commando dat automatisch wordt uitgegeven, terwijl de operators wachten tot er iets interessants gebeurt op de aangetaste computer.
Info-verzamelaar
Module 0x6C verzamelt uitgebreide informatie over de computer via WMI-query's en geeft deze terug aan de Orchestrator. Er wordt informatie verzameld over het volgende:
- besturingssysteem,
- Netwerkadapters,
- geïnstalleerde software,
- schijven,
- diensten
- drivers,
- processen,
- gebruikers,
- omgevingsvariabelen, en
- beveiligingssoftware.
Bestandslezer
Module 0x64 leest het opgegeven bestand en geeft de inhoud terug aan de Orchestrator. Optioneel kan het bestand na het lezen worden verwijderd.
We zagen dat deze module werd gebruikt om het Outlook-gegevensbestand van het slachtoffer op te halen
c:Gebruikers AppDataLocalMicrosoftOutlookoutlook.ost.
Keten met shellcode-downloader
Tijdens het onderzoek naar Deadglyph kwamen we een dubieus CPL-bestand tegen, ondertekend met een verlopen certificaat en zonder medeondertekening met een tijdstempel, dat vanuit Qatar naar VirusTotal was geüpload. Bij nader onderzoek werd het duidelijk dat dit CPL-bestand functioneerde als een meertraps shellcode-downloader, waarbij bepaalde code-overeenkomsten met Deadglyph werden gedeeld. De laadketen wordt geïllustreerd in REF _Ref143693067 u Figuur 6
.
In zijn oorspronkelijke vorm, die als eerste fase dient, verwacht dit bestand een CPL extensie (Configuratieschermbestand) en is bedoeld om te worden uitgevoerd via een dubbelklikactie. Bij uitvoering op deze manier ondergaat de ingebedde shellcode XOR-decodering en worden de lopende processen gecontroleerd om een geschikt hostproces te identificeren voor daaropvolgende injectie.
If avp.exe (een Kaspersky-eindpuntbeveiligingsproces) is actief, %windir%system32UserAccountBroker.exe is gebruikt. Anders wordt de standaardbrowser gebruikt. Vervolgens creëert het het hostproces in een onderbroken toestand, injecteert het de shellcode door de hoofdthread te kapen, en hervat de thread.
De tweede fase, de shellcode, bestaat uit twee delen. Het eerste deel van de shellcode lost API-hashes op, met behulp van dezelfde unieke hash-berekeningstechniek die wordt gebruikt in Deadglyph, en decodeert strings met procesnamen. Het start een zelfverwijderende thread die belast is met het overschrijven en vervolgens wissen van het bestand uit de eerste fase. Hierna gaat de shellcode verder met het inspecteren van de momenteel actieve processen, gericht op een beveiligingsoplossing.
Als een van de gespecificeerde processen wordt gedetecteerd, creëert de shellcode een sleeper-thread met de laagste prioriteit (THREAD_PRIORITY_IDLE) en zorgt ervoor dat deze 60 seconden actief kan blijven voordat de werking wordt beëindigd. Dit interval wordt waarschijnlijk geïmplementeerd als voorzorgsmaatregel om bepaalde detectiemechanismen te omzeilen die door beveiligingsoplossingen worden gebruikt. Ten slotte gaat de shellcode verder met het aanroepen van de uitvoering van het tweede deel van zijn code.
Het tweede deel van de shellcode laadt een ingebed PE-bestand met fase drie en roept de export ervan met volgnummer aan 1.
De derde fase, een DLL, fungeert als een .NET-lader en bevat de payload in zijn .rsrc pagina.
Om de payload te laden, wordt de .NET-runtime geïnitialiseerd. Tijdens de .NET-initialisatie worden twee intrigerende technieken uitgevoerd, schijnbaar bedoeld om Windows te omzeilen Antimalware Scan Interface (AMSI) scannen:
- De .NET-lader haakt tijdelijk het .NET-bestand vast
- Vervolgens wordt het subtiel gepatcht AmsiInitialiseren naamreeks importeren in het .rdata gedeelte van de geladen clr.dll naar amsiinitialiseren.
De vierde fase is een .NET-assembly, versluierd door ConfuserEx, die dient als shellcode-downloader. Ten eerste decodeert het zijn configuratie in XML-formaat met XOR uit zijn bronnen. Een verfraaide versie van de geëxtraheerde configuratie wordt gepresenteerd in REF _Ref143695453 u Figuur 7
. De configuratie-items bevatten details met betrekking tot netwerkcommunicatie en processen op de blokkeerlijst.
Voordat verder wordt gegaan, worden de actieve processen gecontroleerd aan de hand van een lijst met geblokkeerde processen uit de configuratie. Als er een match wordt gedetecteerd, stopt de uitvoering. Het is belangrijk op te merken dat in het geanalyseerde exemplaar deze blokkeerlijst niet was ingesteld.
Vervolgens stuurt het een HTTP GET-verzoek naar de C&C-server om wat shellcode op te halen, met behulp van parameters die zijn opgegeven in de configuratie (URL, User-Agent en optioneel Proxy). Helaas hebben we tijdens ons onderzoek geen shellcode van de C&C-server kunnen verkrijgen. Niettemin veronderstellen we dat de opgehaalde inhoud mogelijk zou kunnen dienen als installatieprogramma voor Deadglyph.
Hierna wordt de opgehaalde shellcode uitgevoerd binnen een nieuw gemaakte thread. Na te hebben gewacht totdat de shellcode-thread is uitgevoerd, verwijdert de shellcode-downloader alle bestanden in de map %WINDIR%ServiceProfilesLocalServiceAppDataLocalTempTfsStoreTfs_DAV.
Ten slotte probeert het zichzelf na een interval van 20 seconden te verwijderen, met behulp van het volgende commando, voordat het de werking beëindigt en afsluit:
cmd.exe keuze /CY /N /DY /T 20 & Del /f /q
Deze zelfverwijdering heeft geen zin in deze keten. Dit komt door het feit dat de shellcode-downloader wordt uitgevoerd binnen een browser of systeemproces nadat hij is geïnjecteerd, in plaats van te werken als een onafhankelijk uitvoerbaar bestand. Bovendien werd het oorspronkelijke bestand al in de tweede fase verwijderd. Deze observatie suggereert dat de shellcode-downloader mogelijk geen exclusieve payload van deze keten is en ook afzonderlijk in andere bewerkingen kan worden gebruikt.
Conclusie
We hebben een geavanceerde achterdeur ontdekt en geanalyseerd die wordt gebruikt door de Stealth Falcon-groep en die we Deadglyph hebben genoemd. Het heeft een ongebruikelijke architectuur en de backdoor-mogelijkheden worden geleverd door C&C in de vorm van extra modules. We zijn erin geslaagd drie van deze modules te bemachtigen, waarmee we een fractie van de volledige mogelijkheden van Deadglyph blootlegden.
Opvallend is dat Deadglyph beschikt over een reeks tegendetectiemechanismen, waaronder continue monitoring van systeemprocessen en de implementatie van gerandomiseerde netwerkpatronen. Bovendien kan de achterdeur zichzelf verwijderen om de kans op detectie in bepaalde gevallen te minimaliseren.
Bovendien heeft ons onderzoek ons geleid tot de ontdekking van een aantrekkelijke meerfasige shellcode-downloaderketen op VirusTotal. We vermoeden dat deze downloaderketen waarschijnlijk wordt gebruikt in het installatieproces van Deadglyph.
Neem voor vragen over ons onderzoek gepubliceerd op WeLiveSecurity contact met ons op via: bedreigingintel@eset.com.
ESET Research biedt privé APT-inlichtingenrapporten en datafeeds. Voor vragen over deze service kunt u terecht op de ESET-bedreigingsinformatie pagina.
IoC's
Bestanden
SHA-1 |
Bestandsnaam |
Opsporing |
Omschrijving |
C40F1F46D230A85F702DAA38CFA18D60481EA6C2 |
pbrtl.dll |
Win64/Deadglyph.A |
Register Shellcode Loader. |
740D308565E215EB9B235CC5B720142428F540DB |
NB |
Win64/Deadglyph.A |
Deadglyph Backdoor – Uitvoerder. |
1805568D8362A379AF09FD70D3406C6B654F189F |
NB |
MSIL/Deadglyph.A |
Deadglyph Backdoor – Orchestrator. |
9CB373B2643C2B7F93862D2682A0D2150C7AEC7E |
NB |
MSIL/Deadglyph.A |
Orchestrator Netwerkmodule. |
F47CB40F6C2B303308D9D705F8CAD707B9C39FA5 |
NB |
MSIL/Deadglyph.A |
Orchestrator-timermodule. |
3D4D9C9F2A5ACEFF9E45538F5EBE723ACAF83E32 |
NB |
Win64/Deadglyph.A.gen |
Module voor het maken van processen. |
3D2ACCEA98DBDF95F0543B7C1E8A055020E74960 |
NB |
Win64/Deadglyph.A |
Module voor het lezen van bestanden. |
4E3018E4FD27587BD1C566930AE24442769D16F0 |
NB |
Win64/Deadglyph.A |
Infocollectormodule. |
7F728D490ED6EA64A7644049914A7F2A0E563969 |
NB |
Win64/Injector.MD |
Eerste fase van de shellcode-downloaderketen. |
Certificaten
Serienummer |
00F0FB1390F5340CD2572451D95DB1D92D |
Vingerafdruk |
DB3614DAF58D041F96A5B916281EA0DC97AA0C29 |
Onderwerp CN |
RHM BEPERKT |
Onderwerp O |
RHM BEPERKT |
Onderwerp L |
St. Albans |
Onderwerp S |
Hertfordshire |
Onderwerp C |
GB |
|
rhm@rhmlimited[.]co.uk |
Geldig vanaf |
2021-03-16 00:00:00 |
Geldig tot |
2022-03-16 23:59:59 |
C&C-servers
IP |
Domein |
Eerst gezien |
Opmerking |
185.25.50[.]60 |
chessandlinkss[.]com |
2021-08-25 |
Deadglyph C&C-server. |
135.125.78[.]187 |
easymathpath[.]com |
2021-09-11 |
Deadglyph C&C-server. |
45.14.227[.]55 |
joinushealth[.]com |
2022-05-29 |
Shellcode-downloader C&C-server. |
MITRE ATT&CK-technieken
Deze tafel is gemaakt met behulp van versie 13 van het MITRE ATT&CK-raamwerk.
Tactiek |
ID |
Naam |
Omschrijving |
Ontwikkeling van hulpbronnen |
Infrastructuur verwerven: domeinen |
Stealth Falcon heeft domeinen geregistreerd voor C&C-servers en om een code-signing-certificaat te verkrijgen. |
|
Infrastructuur verwerven: Virtual Private Server |
Stealth Falcon heeft VPS-hostingproviders gebruikt voor C&C-servers. |
||
Ontwikkelmogelijkheden: Malware |
Stealth Falcon heeft aangepaste malware ontwikkeld, waaronder aangepaste laders en de Deadglyph-achterdeur. |
||
Mogelijkheden verkrijgen: Code Signing-certificaten |
Stealth Falcon heeft een code-signing-certificaat verkregen. |
||
Uitvoering |
Windows Management Instrumentation |
Deadglyph gebruikt WMI om zijn laadketen uit te voeren. |
|
Opdracht- en scriptinterpreter: Windows Command Shell |
Shellcode-downloader gebruikt cmd.exe zichzelf te verwijderen. |
||
Native API |
Een Deadglyph-module gebruikt CreateProcesW en AanmakenProcesAlsGebruikerW API-functies voor uitvoering. |
||
Uitvoering door gebruiker: kwaadaardig bestand |
De shellcode-downloaderketen vereist dat de gebruiker dubbelklikt en deze uitvoert. |
||
Volharding |
Door gebeurtenissen geactiveerde uitvoering: gebeurtenisabonnement op Windows Management Instrumentation |
De initiële Deadglyph-lader wordt gehandhaafd met behulp van een WMI-gebeurtenisabonnement. |
|
verdediging ontduiking |
Verduisterde bestanden of informatie |
Deadglyph-componenten zijn gecodeerd. Deadglyph Orchestrator en ingebedde modules zijn versluierd met .NET Reactor. De shellcode-downloader is versluierd met ConfuserEx. |
|
Indicator verwijderen: verwijderen van bestanden |
Deadglyph kan zichzelf verwijderen. De shellcode-downloaderketen verwijdert zichzelf en verwijdert bestanden in de WebDAV-cache. |
||
Wijzig register |
Deadglyph slaat de configuratie en gecodeerde payload op in het register. |
||
Toegang tokenmanipulatie |
Deadglyph kan zich voordoen als een andere gebruiker. |
||
Deobfuscate/decodeer bestanden of informatie |
Deadglyph decodeert gecodeerde tekenreeksen. De shellcode-downloaderketen decodeert de componenten en configuraties ervan. |
||
Uitvoering van binaire proxy van systeem: Rundll32 |
De initiële Deadglyph-lader wordt uitgevoerd met behulp van rundll32.exe. |
||
Uitvoering Vangrails: omgevingssleutels |
Deadglyph wordt gecodeerd met behulp van een machinespecifieke sleutel die is afgeleid van de systeem-UUID. |
||
Afweer tegengaan: Tools uitschakelen of wijzigen |
De shellcode-downloader vermijdt AMSI-scannen door te patchen clr.dll ter herinnering. |
||
Reflecterende code laden |
Deadglyph laadt zijn modules reflecterend met behulp van een aangepaste PE-lader. |
||
De reis van mijn leven |
Systeemservice detectie |
A Deadglyph-module ontdekt services met behulp van de WMI-query SELECTEER * UIT Win32_Service. |
|
Query register |
De shellcode-downloaderketen vraagt het register naar de standaardbrowser. |
||
Detectie van systeemnetwerkconfiguratie |
Een Deadglyph-module ontdekt netwerkadapters met behulp van WMI-query's SELECTEER * UIT Win32_NetworkAdapter en SELECTEER * UIT Win32_NetworkAdapterConfiguration waarbij InterfaceIndex=%d. |
||
Systeemeigenaar/gebruiker detectie |
Een Deadglyph-module ontdekt gebruikers met de WMI-query SELECTEER * UIT Win32_UserAccount. |
||
Procesopsporing |
Een Deadglyph-module ontdekt processen met behulp van WMI-query SELECTEER * UIT Win32_Process. |
||
Ontdekking van systeeminformatie |
Een Deadglyph-module ontdekt systeeminformatie zoals de versie van het besturingssysteem, schijven, omgevingsvariabelen en stuurprogramma's met behulp van WMI-query's. |
||
Software ontdekken |
Een Deadglyph-module ontdekt geïnstalleerde software met behulp van WMI-query SELECTEER * UIT Win32_Product. |
||
Softwaredetectie: detectie van beveiligingssoftware |
Een Deadglyph-module ontdekt beveiligingssoftware met behulp van WMI-query's SELECTEER * UIT AntiVirusProduct, SELECTEER * UIT AntiSpywareProduct en SELECTEER * UIT FirewallProduct. De shellcode-downloaderketen controleert lopende processen op een beveiligingsoplossing. |
||
Collectie |
Gegevens van lokaal systeem |
Deadglyph heeft een module voor het lezen van bestanden. |
|
Command and Control |
Applicatielaagprotocol: webprotocollen |
Deadglyph en de shellcode-downloader communiceren met de C&C-server via het HTTP-protocol. |
|
volmacht |
Deadglyph en de shellcode-downloader kunnen HTTP-proxy gebruiken voor C&C-communicatie. |
||
Versleuteld kanaal: symmetrische cryptografie |
Deadglyph gebruikt AES om C&C-communicatie te coderen. |
||
exfiltratie |
Exfiltratie via C2-kanaal |
Deadglyph gebruikt het C&C-kanaal voor exfiltratie. |
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- Plato Gezondheid. Intelligentie op het gebied van biotech en klinische proeven. Toegang hier.
- Bron: https://www.welivesecurity.com/en/eset-research/stealth-falcon-preying-middle-eastern-skies-deadglyph/
- : heeft
- :is
- :niet
- :waar
- $UP
- 1
- 10
- 100
- 11
- 125
- 14
- 15%
- 179
- 180
- 20
- 2012
- 2016
- 2019
- 23
- 25
- 321
- 39
- 41
- 60
- 7
- 75
- 8
- 9
- 91
- a
- vermogen
- Over
- toegang
- de toegankelijkheid
- beschikbaar
- vergezeld
- verwerven
- Actie
- actieve
- activisten
- activiteiten
- activiteit
- Handelingen
- werkelijk
- toevoeging
- Extra
- vergevorderd
- Voordeel
- AES
- Na
- tegen
- het richten
- Alles
- naar verluidt
- toestaat
- al
- ook
- an
- analyse
- analyseren
- geanalyseerd
- en
- Nog een
- anticipeert
- elke
- api
- APIs
- verschijnen
- nadering
- APT
- Arabisch
- Arabische Emiraten
- architectuur
- ZIJN
- AS
- bijeenkomst
- geassocieerd
- ervan uitgaan
- At
- aanvallen
- Aanvallen
- webmaster.
- Beschikbaar
- vermijd
- terug
- achterdeur
- gebaseerde
- basis-
- BE
- werd
- omdat
- geweest
- vaardigheden
- wezen
- geloofd wie en wat je bent
- BEST
- schept
- lichaam
- zowel
- browser
- bebouwd
- maar
- by
- cache
- berekend
- berekening
- Bellen
- Dit betekent dat we onszelf en onze geliefden praktisch vergiftigen.
- bellen
- oproepen
- Campagne
- CAN
- mogelijkheden
- in staat
- hoofdstad
- dragen
- geval
- gevallen
- Centreren
- zeker
- certificaat
- keten
- kansen
- verandering
- Kanaal
- tekens
- gecontroleerd
- Controles
- keuze
- klant
- dichterbij
- code
- verzamelaar
- verzamelt
- kleur
- COM
- combinatie van
- Gemeen
- communiceren
- communiceren
- Communicatie
- Communicatie
- dwingende
- bestanddeel
- componenten
- bestaat uit
- omvat
- compromis
- Aangetast
- computer
- uitvoeren
- Conferentie
- vertrouwen
- Configuratie
- geconfigureerd
- gekoppeld blijven
- bestaat uit
- contact
- bevatten
- bevat
- content
- verband
- doorlopend
- contrast
- onder controle te houden
- bedieningspaneel
- BEDRIJF
- Overeenkomend
- kon
- gepaard
- aangemaakt
- creëert
- het aanmaken
- schepper
- Actueel
- Op dit moment
- gewoonte
- Klanten
- donkerder
- gegevens
- decoderen
- Standaard
- Mate
- Afhankelijk
- het inzetten
- Afgeleid
- beschrijven
- beschreven
- beschrijving
- gegevens
- gedetecteerd
- Opsporing
- vastbesloten
- ontwikkelde
- Ontwikkeling
- verschil
- anders
- moeilijk
- directe
- ontdekt
- Ontdekt
- ontdekking
- onderscheiden
- diversen
- doet
- domeinen
- Dont
- chauffeurs
- drives
- twee
- duur
- gedurende
- dynamisch
- dynamisch
- elk
- oosten
- oostelijk
- effectief
- beide
- verhoogd
- ingebed
- emiraten
- loondienst
- telt
- waardoor
- omvatten
- versleutelde
- encryptie
- Endpoint
- Endpoint security
- waarborgt
- entiteit
- toegang
- Milieu
- milieu
- omgevingen
- fouten
- ESET-onderzoek
- spionage
- oprichten
- oprichting
- schatting
- Ether (ETH)
- Event
- bewijzen
- duidelijk
- onderzoek
- voorbeeld
- Nieuwste vermeldingen
- uitvoeren
- uitgevoerd
- Voert uit
- uitvoeren
- uitvoering
- exfiltratie
- vertoont
- bestaat
- Spannend
- expertise
- exporteren
- uitbreiding
- uitgebreid
- omvang
- vergemakkelijken
- vergemakkelijkt
- feit
- Storing
- valk
- Kenmerk
- Voordelen
- weinig
- Figuur
- Dien in
- Bestanden
- Tot slot
- bevindingen
- Voornaam*
- vijf
- Focus
- volgend
- Voor
- formulier
- formaat
- Voormalig
- gevonden
- Vierde
- fractie
- Achtergrond
- frameworks
- oppompen van
- vol
- functie
- functionaliteit
- functies
- verder
- Bovendien
- gegenereerde
- generatie
- krijgen
- regerings-
- Grieks
- Ground
- Groep
- HAD
- hand
- gebeuren
- hachee
- gehashte
- hashing
- Hebben
- met
- hier
- HEX
- Hoge
- spraakmakend
- Markeer
- hinderen
- haken
- gastheer
- Hosting
- uur
- HOURS
- http
- HTTPS
- ID
- identiek
- geïdentificeerd
- identificeren
- Idle
- if
- beeld
- per direct
- uitvoering
- geïmplementeerd
- gereedschap
- importeren
- belangrijk
- in
- Anders
- diepgaande
- ontoegankelijk
- inclusief
- omvat
- Inclusief
- inclusie
- onafhankelijk
- aangeven
- info
- informatie
- Infrastructuur
- inherent
- eerste
- initiatief
- vragen
- installatie
- instantie
- verkrijgen in plaats daarvan
- Intelligentie
- Intelligent
- bestemde
- interessant
- Interface
- tussenpersoon
- inwendig
- Internationale
- Internet
- internet toegang
- in
- intrigerend
- geïntroduceerd
- onderzoek
- betrokken zijn
- gaat
- Uitgegeven
- IT
- HAAR
- zelf
- Januari
- Journalisten
- Kaspersky
- sleutel
- toetsen
- blijven
- kennis
- bekend
- taal
- Talen
- lancering
- lagen
- leiden
- LED
- links
- Lengte
- letter
- benut
- Bibliotheek
- als
- waarschijnlijkheid
- Waarschijnlijk
- LIMIT
- Beperkt
- Lijn
- LINK
- gekoppeld
- Lijst
- lijsten
- laden
- lader
- het laden
- ladingen
- lokaal
- gelegen
- logica
- langer
- Kijk
- verliezen
- laagste
- Hoofd
- maken
- MERKEN
- malware
- beheer
- beheerd
- management
- manier
- veel
- kaart
- Match
- Mei..
- betekende
- maatregel
- mechanisme
- mechanismen
- Geheugen
- methode
- Microsoft
- Midden
- Midden-Oosten
- macht
- minuten
- gemengd
- wijzigen
- module
- Modules
- Grensverkeer
- monitors
- meer
- Bovendien
- meervoudig
- naam
- Genoemd
- namen
- inheemse
- OP DEZE WEBSITE VIND JE
- noodzakelijk
- netto
- netwerk
- New
- Nieuwste
- onlangs
- geen
- opvallend
- in het bijzonder
- nota
- nu
- aantal
- verkrijgen
- verkregen
- zich voordoen
- of
- bieden
- Aanbod
- vaak
- on
- EEN
- degenen
- Slechts
- exploiteert
- werkzaam
- operatie
- Operations
- exploitanten
- or
- origineel
- OS
- Overige
- anders-
- onze
- uit
- Outlook
- uitgang
- over
- overzicht
- het te bezitten.
- P&E
- pagina
- paneel
- parameters
- deel
- onderdelen
- passes
- Patches
- patchen
- pad
- patronen
- in afwachting van
- percentage
- uitgevoerd
- periodiek
- volharding
- platform
- Plato
- Plato gegevensintelligentie
- PlatoData
- dan
- neem dan contact op
- punt
- punten
- politiek
- Post
- potentieel
- mogelijk
- nauwkeurig
- aanwezigheid
- presenteren
- gepresenteerd
- voorkomen
- voorkomt
- die eerder
- primair
- prioriteit
- privaat
- voorrechten
- waarschijnlijk
- opbrengst
- verwerkt
- processen
- Programming
- programmeertalen
- project
- gepast
- protocol
- zorgen voor
- mits
- providers
- biedt
- volmacht
- publiek
- gepubliceerde
- doel
- doeleinden
- Katar
- queries
- willekeurige
- Gerandomiseerd
- willekeurigheid
- reeks
- liever
- reactor
- Lezer
- lezing
- ontvangen
- ontvangt
- vermindert
- referencing
- verwezen
- regio
- geregistreerd
- register
- verwant
- blijven
- resterende
- stoffelijk overschot
- verwijdering
- Rapporten
- vertegenwoordigt
- reputatie
- te vragen
- verzoeken
- vereist
- onderzoek
- Resolutie
- hulpbron
- Resources
- verantwoordelijk
- REST
- resultaat
- verkregen
- terugkeer
- Retourneren
- Reuters
- onthullen
- Rol
- wortel
- routine
- lopend
- loopt
- s
- Veiligheid
- dezelfde
- heilige
- zagen
- aftasten
- het scannen
- Tweede
- seconden
- sectie
- secties
- veiligheid
- Beveiligingssoftware
- sturen
- verzendt
- zin
- verzonden
- apart
- September
- dienen
- server
- bedient
- service
- Diensten
- reeks
- Sets
- settings
- verscheidene
- delen
- getoond
- Gesigneerd
- het ondertekenen van
- gelijk
- evenzo
- sinds
- single
- maten
- luchten
- Klein
- So
- Software
- oplossing
- Oplossingen
- sommige
- iets
- geraffineerd
- verfijning
- speciaal
- specifiek
- gespecificeerd
- spyware
- Stadium
- starts
- Land
- Stealth
- opgeslagen
- winkels
- Draad
- structuur
- onderwerpen
- abonnement
- volgend
- Hierop volgend
- dergelijk
- Stelt voor
- geschikt
- geleverde
- ondersteuning
- overtreffen
- opgeschort
- verdacht
- system
- Systems
- tafel
- Nemen
- het nemen
- doelwit
- doelgerichte
- targeting
- doelen
- Taak
- taken
- Technisch
- Technische Analyse
- technieken
- neem contact
- dat
- De
- hun
- Ze
- harte
- Er.
- Deze
- ze
- Derde
- dit
- die
- bedreiging
- bedreigingen
- drie
- drempel
- Door
- niet de tijd of
- tijdstempel
- Titel
- naar
- teken
- tools
- Totaal
- in de richting van
- traditioneel
- overdracht
- overgedragen
- behandeld
- veroorzaakt
- waar
- BEURT
- twee
- type dan:
- types
- typisch
- niet in staat
- voor
- ondergaat
- unicode
- unieke
- unieke kenmerken
- United
- Verenigde Arabische Emiraten
- onbekend
- openen
- NAAM
- tot
- ongebruikelijk
- ongewenste
- bijgewerkt
- updates
- geüpload
- op
- URL
- us
- Gebruik
- .
- gebruikt
- Gebruiker
- gebruikers
- toepassingen
- gebruik
- gebruik maken van
- maakt gebruik van
- waarde
- Values
- variëteit
- divers
- wisselende
- versie
- zeer
- via
- Slachtoffer
- Virtueel
- Bezoek
- visueel
- wachten
- Het wachten
- was
- we
- web
- waren
- Wat
- wanneer
- of
- welke
- en
- Wikipedia
- ruiten
- Met
- binnen
- zonder
- XML
- jaar
- ja
- nog
- zephyrnet