Det följande blogginlägget presenterar konceptet Alternate Data Stream och hur det har använts i det vilda, i det förflutna såväl som i dessa dagar: som en teknik som används för att dölja en skadlig nyttolast i filsystemet. Även om det kan anses vara en gammal teknik är den fortfarande relevant idag och vanlig i naturen.
Vad är Alternate Data Stream?
Alternate Data Stream (ADS) är förmågan hos ett NTFS-filsystem (det huvudsakliga filsystemformatet i Windows) att lagra olika dataströmmar, utöver den standardström som normalt används för en fil. När denna funktion skapades var dess huvudsyfte att ge stöd för macOS Hierarchical File System (HFS).
NTFS-filsystemet innehåller filer med attribut. Det relevanta attributet för vårt tillämpningsområde är attributet $DATA, som används för att lagra dataströmmarna i en fil.
Förr var det vanligt att lagra en skadlig nyttolast i en ADS i en legitim fil. Men idag kommer många säkerhetslösningar att upptäcka och skanna ADSs’. Vi kommer dock att visa dig i det här inlägget att en ADS fortfarande kan användas för att köra nyttolaster samtidigt som den är dold för användaren samt olika säkerhetsprodukter.
För att förenkla de begrepp som presenteras i den här artikeln är alla exempel baserade på inbyggda verktyg i Windows.
Hur man använder ADS
Under den gamla goda tiden med Windows Vista var Alternate Data Streams (ADS) en vanlig metod för utvecklare av skadlig kod att dölja sin skadliga kod. En alternativ dataström användes effektivt för att dölja närvaron av skadliga filer genom att klämma in dem i en legitim fil. Genom att placera skadlig kod i den alternativa dataströmmen skulle Windows-filen innehålla information och anvisningar för de legitima filerna, men även för den skadliga filen. För att kunna köra den skadliga kod som hackaren har placerat i Alternate Data Stream vill han/hon skapa en symbolisk länk med hjälp av kommandot mklink. Men för att göra detta krävs det att man har administratörsrättigheter på maskinen. Med tanke på att det normala beteendet hos en användare inte kräver att man kör som administratör tenderar hackare att närma sig sina mål genom att anta att de landar på en låda utan några administratörsrättigheter.
Nummerering – Huvudströmmen under $DATA är den tomma strängen (alltså: ””, även kallad den namnlösa strömmen). Den här strömmen används för att innehålla den vanliga strömmen i en fil.
Nedan följer ett exempel på uppräkning av dataströmmarna i en fil med PowerShell:
Du kan också använda dir /R eller SysInternals\streams.exe för att räkna upp en ADS i en fil / rekursivt på en katalog
Som du kan se ovan innehåller filen bara den onamnade strömmen.
Hur som helst kan du ibland hitta en ADS i en legitim fil, eftersom det finns flera legitima användningsområden för den här tekniken.
Nedan följer ett exempel på att räkna upp dataströmmar i en fil med en ADS med PowerShell:
Detta är också ett exempel på ett legitimt användningsområde för ADS: The Zone. Identifier. I det här fältet presenteras förtroendenivån för filens källa. Detta är en webbläsares användning för att lagra dess macOS motsvarande är ”karantänsbiten”.
Skapande – Även om det kan finnas legitima användningsområden för ADS kan ADS också användas för att lagra en skadlig nyttolast. Angripare kan föredra denna metod framför att spara nyttolasten i den namnlösa strömmen, eftersom dess närvaro kommer att vara dold för användaren – den är inte åtkomlig från explorer.exe (och den visade storleken på en fil inkluderar inte ADS:s storlek). Dessutom visas den inte som standard med kommandot ”dir” (flaggan /R visar dock ADS och tillämpas från Windows Vista).
Skapa en ADS är ganska enkelt.
Ett exempel på att skapa en ADS med typkommando:
Till och med Windows XP var det möjligt att köra en ADS med kommandot start. Sedan senare versioner av Windows är det dock inte längre möjligt.
Dataåtkomst – Att missbruka ADS är fortfarande ett relevant hot, eftersom det finns flera sätt att läsa och köra ett ADS.
Den första användningen är åtkomst till data. Det är lätt att komma åt innehållet i ADS. Följande är ett exempel med PowerShell:
Exekvering – Förutom att läsa data är det också möjligt att exekvera dem. Även om det inte är möjligt att exekvera en ADS med kommandot ”start” kan den ändå köras från andra program. Till exempel med WMI:
”wmic process call creates” – kör en process med WMI. Den kan också köra en ADS. Exempel:
Det finns ytterligare legitima inhemska verktyg i Windows som kan användas för att direkt köra en ADS. Till exempel kan en DLL sparas i ett ADS och anropas av DllMain genom rundll32.exe; även en HTA kan sparas i ett ADS och anropas genom mshta.exe; och så vidare.
Maliciella kampanjer som missbrukar ADS
Det kan tyckas att Windows har lyckats hantera de hot som finns i ADS. Det finns dock många malware-familjer i naturen som fortfarande missbrukar ADS.
Ett annat exempel från 2017 är BitPaymer, ett utpressningstrojaner som använde sig av två ADS i angreppssekvensen, för att lägga till smygande åtgärder och dölja skadlig aktivitet. Den första ADS:en skapades för att köra kommandot ”net view” för att få fram nätverksandelar, och den andra ADS:en förvränger sedan data på disken och nätverksandelarna.
För att sammanfatta är missbruk av ADS en teknik som fortfarande är relevant nuförtiden. De senaste Windows-versionerna har begränsat och skärpt ADS-funktionerna. Men grundläggande kunskaper om Windows-verktyg som Power-Shell och WMI, eller viss kunskap om Windows kommandorad, gör det möjligt för aktörer som hotar att fortsätta och utnyttja ADS i sina attacker. Intressant nog anses de senaste kampanjerna med ADS vara ganska sofistikerade och tenderar att minimera användningen av persistenta filer på disk.