Operation TA505, vierter Teil. Zwillinge



Wir sprechen weiterhin über die Aktivitäten der Hacker-Gruppe TA505. Der bekannte Satz „Das Neue ist das Vergessene Alte“ eignet sich am besten als Inschrift für das nächste Kapitel der Geschichte über die Gruppe TA505. Diesmal ist das "Alte" zwar nicht so sehr "vergessen", sondern es wurde überarbeitet und verbessert.

Anfang September entdeckten wir mehrere böswillige Downloader, die mit dem speziellen PE-Packer der Gruppe gepackt waren, über die wir zuvor geschrieben haben . Auf den ersten Blick sahen sie aus wie die bekannten Backdoor-Stager von FlawedAmmyy. Eine tiefere Analyse ergab jedoch, dass dies nicht der Fall ist. Nicht die fortschrittlichsten Techniken zum Schreiben von Code haben uns zu radikal entgegengesetzten Nutzlasten in Bezug auf die Ausführungsqualität geführt.

In diesem Artikel werden wir uns die gefundenen Werkzeuge genauer ansehen und Parallelen zu dem zeichnen, was bereits bekannt ist.

Bootloader Twein


Zuallererst ist Folgendes merkwürdig: Von den Bootloader-Beispielen, die wir gesammelt haben, hat nur eines eine digitale Signatur:



Abb. 1. Digitale Signatur des Bootloaders

Zertifikat ausgestellt auf den Namen von PEAR SOLUTIONS LTD. Übrigens ist es nicht das erste Mal, dass eine Gruppe ihre Tools signiert und sie als legitime Software fiktiver Organisationen weitergibt. Im Folgenden sind einige andere Namen aufgeführt, die den TA505 für andere Malware-Familien verwendet haben:

  • ET HOMES LTD,
  • FIT UND FLEX LIMITED,
  • MISHA LONDON LTD,
  • SATOJI KAIDA MB,
  • SEHR TELE BEGRENZT.

Da sich die erkannten Bootloader nicht voneinander unterscheiden, wählen wir den oben genannten signierten aus und gehen näher darauf ein.

Während der Arbeit mit Malware wird fast jede Aktion durch Schreiben in die Protokolldatei und Debug-Ausgabe von allem, was passiert, begleitet:



Abb. 2. Debuggen Sie die Ausgabe und Protokollierung

Eine solche Nachverfolgung vereinfacht nicht nur die statische Analyse der Datei, sondern hilft auch dabei, herauszufinden, was in dynamischen Analysesystemen falsch ist:



Abb. 3. Debuggen Sie die Ausgabe im ANY.RUN Online Analyzer

Troyan überprüft das Sprachlayout der Tastatur - und funktioniert in Russland und den Nachbarländern nicht:



Abb. 4. Überprüfen Sie das Sprachlayout der Tastatur
Anschließend wird der Mutex Global\system32_mutant_service und die Internetverfügbarkeit mithilfe einer HTTP-GET-Anforderung an google.com überprüft. Danach bestimmt es die Art des Zugriffs auf das Netzwerk (eine dedizierte Adresse oder NAT ), indem es die externe IP-Adresse durch die Dienste myexternalip.com, ipecho.net und ifconfig.me ermittelt und den empfangenen Wert mit den in den Netzwerkparametern des Systems angegebenen Werten vergleicht:



Abb. 5. Vergleich von internen und externen IP-Adressen

Anschließend ermittelt die Malware die Version der Bibliothek %SystemRoot%\system32\crypt32.dll . Wenn die Build-Nummer und die Versionsnummer kleiner als 7601 bzw. 18741 wird das Update KB3033929 entsprechend der Betriebssystemversion heruntergeladen und installiert:



Abb. 6. Laden Sie Systemupdates herunter und installieren Sie sie

TA505-Angreifer kümmern sich um das Opfer und patchen das System nach Bedarf? Gar nicht. Die Installation des Updates ist mit der Beendigung der Unterstützung für Codesicherheitszertifikate, die mit SHA-1 signiert wurden, und der Aufgabe des Updates zugunsten des SHA-2-Algorithmus verbunden. Wahrscheinlich hatten Hacker bereits Schwierigkeiten, signierte Payloads auf nicht aktualisierten Systemen auszuführen. Interessanterweise sendet der Trojaner nach der Installation des Updates das generierte Aktionsprotokoll an den Verwaltungsserver, beendet seine Arbeit und löscht sich selbst, wobei die verbleibenden Spuren gelöscht werden.



Abb. 7. Fahren Sie das System nach der Installation eines Systemupdates herunter

Wenn die Update-Installation nicht erforderlich ist, erfasst der Bootloader die folgenden Informationen und sendet sie an den Verwaltungsserver:

  • Systeminformationen
  • Informationen zu installierter Software,
  • Informationen zu signierter Software in den Verzeichnissen% ProgramFiles% und% ProgramFiles (x86)% (falls vorhanden),
  • Informationen zu signierten Treibern im Verzeichnis% SystemRoot% \ drivers.

Beachten Sie, dass ein legitimer Code verwendet wurde, um Informationen zu Signaturen abzurufen.



Abb. 8. Abrufen von Zertifikatinformationen

Danach erstellt der Bootloader das Verzeichnis C:\Windows\Logs\diag und startet einen Thread, in dem er Änderungen im Verzeichnis C:\Windows\Logs\diag und Benachrichtigungen an den Verwaltungsserver sendet:



Abb. 9. Verzeichnisänderungen überwachen

Anschließend werden vorhandene und fehlende Informationen zum System (Benutzername, Systemversion, Domäne, IP-Adresse, Grafikkarteninformationen, Netzwerkverbindung - NAT oder nicht NAT) aufbereitet und eine JSON-Datei dieses Typs generiert:

 { "adm": "0", "bid": "M3xwwhqLH/AUOhmU2+W55A==", "bit": "1", "bnet": "ldr", "cam": "0", "cis": "0", "dmn": "WORKGROUP", "hash_r": "0", "lip": "192.168.100.153", "lvl": "0", "nat": "1", "osb": "0", "osv": "Windows 7 Professional", "pc": "USER-PC", "proc_c": "0", "proc_n": "cpu", "rep": 0, "tmt": "0", "ver": "163", "video": "Standard VGA Graphics Adapter," } 

Diese Daten werden später mit RC4 verschlüsselt (der Verschlüsselungsschlüssel gJypA9RWUlYpnBbzujVqE6fDcEAk0zoz wird im gJypA9RWUlYpnBbzujVqE6fDcEAk0zoz des Trojaners verschlüsselt), mit Base64 verschlüsselt und durch eine HTTP-POST-Anforderung an den Verwaltungsserver gesendet:



Abb. 10. HTTP-POST-Anforderung an den Verwaltungsserver



Abb. 11. Die Liste der Steuerungsserver im Bootloader

Die Antwort vom Server wird von RC4 entschlüsselt (der Verschlüsselungsschlüssel ist der gleiche wie der zum Senden der Daten verwendete) und überprüft: Die ersten beiden Bytes müssen der MZ-Zeile entsprechen, die ein Zeichen der PE-Datei ist. Wir haben diese Sequenz bereits früher getroffen, als wir einen anderen Group Loader analysierten, der FlawedAmmyy RAT lieferte:



Abb. 12. Ein ähnlicher Code zum Entschlüsseln und Überprüfen der heruntergeladenen Datei für den betreffenden Bootloader (links) und den FlawedAmmyy RAT-Bootloader (rechts)

Das Laden von Nutzdaten erfolgt nicht nur im Haupt-Thread, sondern auch in einem separat erstellten. Mit anderen Worten, es gibt zwei Nutzlasten. In einem Fall wird der Mutex "Global \ system32_host_service" vorab überprüft, und wenn er nicht vorhanden ist, wird die Komponente geladen, die in den Debuginformationen als Nutzdaten oder Bot bezeichnet wird. Interessanterweise wird die PE-Datei nach dem Empfang einer Antwort vom Server in keiner Weise gestartet. Stattdessen wird sein Körper in die Registrierung im Abschnitt HKEY_LOCAL_MACHINE\SYSTEM im Schlüssel 0x228028 . Anschließend deaktiviert der Bootloader die Umleitung des WoW64-Dateisystems für 32-Bit-Anwendungen mithilfe von Wow64DisableWow64FsRedirection und startet den Prozess %SystemRoot%\System32\services.exe mit dem Parameter -ww. Die Verwendung dieses Parameters ist nicht sinnvoll, schließt jedoch die Installationskette der resultierenden Nutzdaten ab.



Abb. 13. Einstellen der Nutzlast

Wir werden später über die zweite Nutzlast sprechen.

Twein Plugins


Bei der Untersuchung des oben beschriebenen Trojaners haben wir eine Funktion festgestellt, mit der zwei Dateien aus dem Verzeichnis %SystemRoot% - twein_32.dll und twein_64.dll :



Abb. 14. Entfernen der Dateien twein_32.dll und twein_64.dll

Diese Dateien werden nirgendwo anders gefunden und erscheinen nicht in der Logik des Bootloaders. Die Namen der Bibliotheken erinnerten uns jedoch an eine andere Gruppe von Malware, die wir nun betrachten werden.
Zwei Monate zuvor haben wir einen TA505-Trojaner entdeckt, der ungefähr 9 MB groß ist. Die Datei wird von UPX gepackt . Der Trojaner wird als WMDICToss Dienst im System installiert. Die Ressourcen enthalten drei Dateien: systemdiron.bat , twein__32.dll und twein__64.dll , die mit linearem XOR verschlüsselt sind.



Abb. 15. Entschlüsselung einer der Ressourcen der Pipette

Beachten Sie, dass die Namen der beiden Dateien fast mit denen übereinstimmen, die bereits erwähnt wurden: Der Unterschied besteht nur in der Anzahl der Unterstriche.

Bei einer der entschlüsselten Ressourcen mit dem Namen systemdiron.bat voraussichtlich um ein Befehlsskript, mit dem abhängig von der Systemkapazität andere Komponenten gestartet werden können:

 @echo off if defined PROCESSOR_ARCHITEW6432 (goto LABEL_X64) if %PROCESSOR_ARCHITECTURE%==IA64 (goto LABEL_X64) if %PROCESSOR_ARCHITECTURE%==AMD64 (goto LABEL_X64) if %PROCESSOR_ARCHITECTURE%==x86 (goto LABEL_X86) goto LABEL_NON :LABEL_X64 echo OS type: x64 copy c:\temp\tmp.log c:\i.txt rundll32.exe C:\Windows\twein__64.dll,Install copy c:\temp\tmp.log c:\i.txt rundll32.exe C:\Windows\twein__32.dll,Install del c:\temp\tmp.log del c:\i.txt shutdown.exe -r -t 00 goto LABEL_END :LABEL_X86 echo OS type: x86 copy c:\temp\tmp.log c:\i.txt rundll32.exe C:\Windows\twein__32.dll,Install del c:\temp\tmp.log del c:\i.txt shutdown.exe -r -t 00 goto LABEL_END :LABEL_NON echo OS type: undefined goto LABEL_END :LABEL_END pause 

Beide Zwillingsbibliotheken verhalten sich ähnlich. Verpackt mit dem charakteristischen Packer der Gruppe TA505. Ursprüngliche Bibliotheksnamen: av_block.dll . Die Analyse wird durch die Verwendung eines Verschleierungsmittels erheblich erschwert, und der Anteil des verschleierten Codes beträgt etwa 80%. Infolgedessen ist die Programmausführung mit zahlreichen Übergängen, dem Decodieren der nächsten Codeschritte und nichtlinearen Funktionsaufrufen gesättigt.

Bibliotheken enthalten eine beeindruckende Liste von Base64-ähnlichen Zeichenfolgen, die wie folgt entschlüsselt werden:

1. Die Eingabezeichenfolge ist in 4-Byte-Blöcke unterteilt.
2. Jeder Block wird mit dem Ersetzungs- und Verschiebungsalgorithmus decodiert:

 import binascii def block_decode(input_str, len_of_block): alphabet = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x00\x00\x3F\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x00\x00\x00\x00\x00\x00\x1A\x1B\x1C\x1D\x1E\x1F\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F\x30\x31\x32\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' int_result = 0 for i in range(len_of_block): alph = ord(alphabet[ord(input_str[i])]) alph <<= 0x6 * i int_result += alph str_result = hex(int_result)[2:] if len(str_result) % 2 != 0: str_result = '0' + str_result return binascii.unhexlify(str_result).decode('latin1')[::-1] 


3) Blöcke werden in einer einzigen Zeile gesammelt;
4) Das Ergebnis wird vom eexec- Algorithmus mit einem Doppelbyte -Schlüssel entschlüsselt, der als Parameter übergeben wird:



Abb. 16. Implementierung des eexec-Algorithmus

Bei den meisten Zeilen handelt es sich um die Namen und Pfade der Dateien von Antivirenprodukten. Einige gehören jedoch überhaupt nicht zu den Sicherheitstools: MS Exchange Server, MySQL Server, SAP, Apache, PostgreSQL, Elasticsearch usw. Es gab sogar solche eindeutigen Pfade:

  • C: \ Benutzer \ tislam \ Desktop \ salik app \ Aye_salik_data \ Aye_salik_data \ bin \ Debug \ Aye_salik_data.exe
  • C: \ oem13c \ agent13c \ agent_13.2.0.0.0 \ perl \ bin \ perl.exe
  • C: \ Users \ adadmin \ Ubiquiti UniFi \ bin \ mongod.exe
  • C: \ Benutzer \ sakella \ AppData \ Local \ Microsoft \ OneDrive \ OneDrive.exe
  • D: \ Add-ons \ IMI_CREDIT_POLICY Test v 02.01 \ IMI_CREDIT_POLICY.exe

Wenn in der Liste Software im System gefunden wird, werden Dateien und Verzeichnisse gelöscht.

Um sich im System abzusichern, legen die Bibliotheken sich selbst als SPI-Schnittstelle ( Windows Sockets Service Provider) fest, die als Intel und IntelFiltr bezeichnet wird. Darüber hinaus ändern sie die Reihenfolge der Handler in der Protokollkette, um das erste SPI zu sein, das die Clientanforderung verarbeitet.

Im Jahr 2015 haben unsere FireEye-Kollegen die LatentBot- Bot- Analyse eingeführt . Es ist merkwürdig, dass der String-Verschlüsselungsalgorithmus in LatentBot und den untersuchten Twein-Bibliotheken völlig identisch ist. Darüber hinaus verwendet LatentBot ein Sicherheitsmodul als eines der Plug-Ins, das anhand der angegebenen Pfade und Produktnamen nach Sicherheitstools im System sucht, wobei jedoch nur die Verfügbarkeit überprüft wird.

Rootkit-Twein


Zurück zum Bootloader, nämlich der zweiten Payload. Aus den Debug-Zeilen von try to open rootkit ... und Driver% S können Sie leicht das Format der nächsten Payload erraten. Nach dem erfolgreichen Laden wird der Treiber in das Verzeichnis %SystemRoot%\System32\drivers geschrieben, wobei der Name pseudozufällig aus den Namen anderer legitimer Dateien gebildet wird. Dann wird der Dienst erstellt und gestartet:



Abb. 17. Installieren und Starten des Dienstes

In der letzten Phase seiner Arbeit konfiguriert der Loader den Treiber so, dass er in Registrierungsschlüsseln auf die schwarze Liste gesetzt wird: Die Namen der Antiviren-Prozesse, Analysetools und Schutzanbieter in digitalen Dateisignaturen werden in die angegebenen numerischen Werte der Schlüssel des Zweigs HKEY_LOCAL_MACHINE\SYSTEM eingegeben:



Abb. 18. Treiberkonfiguration auf der schwarzen Liste

Bei der Untersuchung des Bootloaders konnte kein Treiberbeispiel vom Verwaltungsserver abgerufen werden. Wir fanden jedoch Erwähnung eines Rootkits , das von einem anderen ähnlichen Bootloader gepumpt wurde.

Der Fahrer ist im Namen von Lizas Limited mit der E-Mail- Lizas Limited administrator@lizaslimited.site digital signiert:



Abb. 19. Digital signierter Treiber

Während der Recherche haben wir viele Gemeinsamkeiten mit dem bekannten Rootkit des Necurs-Botnetzes festgestellt, das von der TA505-Gruppe aktiv zum Versenden von Spam und zur Verbreitung von Malware verwendet wurde. Lassen Sie uns die interessantesten Merkmale seiner Arbeit genauer betrachten.

Der Treiber registriert Ereignishandler zum Starten von Prozessen und Laden von PE-Images mithilfe von PsSetCreateProcessNotifyRoutine und PsSetLoadImageNotifyRoutine . Mit anderen Worten, dies ermöglicht es dem Fahrer, den Start aller neuen Prozesse und Dienste zu steuern. Unter Verwendung der zuvor erwähnten Blacklists beendet das Rootkit unerwünschte Prozesse mit ZwTerminateProcess und verhindert, dass andere potenziell gefährliche Treiber geladen werden. Dabei wird der Einstiegspunktwert in den Anweisungen überschrieben:

 mov eax, 0C0000001 retn 8 

Infolgedessen wird der Dienst mit dem Fehler STATUS_UNSUCCESSFULL entladen.



Abb. 20. Prozessabschluss



Abb. 21. Treiber-Einstiegspunkte überschreiben

Mit CmRegisterCallback fängt der Treiber Zugriffsereignisse auf die Systemregistrierung ab. Insbesondere wird seine weitere Arbeit durch die numerischen Werte der Tasten parametrisiert, auf die bei abgefangenen Ereignissen zugegriffen wird.



Abb. 22. Rootkit-Verwaltung von Registrierungsschlüsselzugriffen

Interessanterweise wurden in einigen Versionen des Necurs-Rootkits dieselben numerischen Werte wie bei ioctl-Anforderungscodes verwendet.



Abb. 23. Verwalten eines Necurs-Rootkits mit ioctl-Abfragen

Dieser Trick kann als ein Schritt in Richtung größerer Geheimhaltung angesehen werden: Der Zugriff auf die Registrierung verursacht weniger Verdacht als ioctl-Anforderungen an DeviceObject.

Der Hauptteil des Rootkits enthält eine mit Single-Byte-XOR verschlüsselte DLL-Hilfsbibliothek. Beim Erstellen eines neuen Prozesses fügt der Treiber die Bibliothek zusammen mit einer anderen PE-Datei ein, die aus der Registrierung extrahiert und erneut mit einem Einzelbyte-XOR entschlüsselt wird.



Abb. 24. Entschlüsselung und Einfügung der Hilfsbibliothek in den erstellten Prozess

Bei der Hilfskomponente handelt es sich um einen benutzerdefinierten Reflective Loader , der die zweite PE-Datei korrekt im Speicher ablegt, der als Nutzlast fungiert, und die Steuerung darauf überträgt. Jetzt wird klar, wie genau die Payload funktioniert, die vom Bootloader aus dem ersten Teil des Artikels in die Registrierung geschrieben wurde.



Abb. 25. Füllen der Importtabelle mit einer Hilfsbibliothek

Fazit


In dem Artikel haben wir die Merkmale der Arbeit vieler Zwillingstrojaner kennengelernt. Warum Zwillinge? Der böswillige Bootloader, mit dem wir unsere Forschungen begonnen haben, ist dem bekannten FlawedAmmyy-Backdoor-Bootloader in Bezug auf die Qualität der Code-Schreib- und Implementierungsnuancen sehr ähnlich. Die beiden Bibliotheken, die er aus dem System zu entfernen versucht, sind höchstwahrscheinlich die, die wir als nächstes betrachten. Bibliotheken sind dem LatentBot-Sicherheits-Plugin sehr ähnlich. Eine der Bootloader-Nutzdaten ist ein Treiber, der vom beliebten Necurs-Rootkit abgeleitet ist.

Einige Malware-Familien sind über 5 Jahre alt. Angreifer aktualisieren und verbessern sie jedoch weiterhin, unter Berücksichtigung der Entwicklung von Betriebssystemen und Sicherheitstools.

Autoren : Alexey Vishnyakov und Daniil Koloskov, Positive Technologies

IOCs
a28a54abc30805cc6ea2ce0732989287 - Twein-Bootloader
f6b6526b8d494dce14568e3703368432 - Twein Plugin Dropper
983dd279722154a12093410067fe070e - Rootkit Twein

Vorherige Artikel in der Reihe:


Source: https://habr.com/ru/post/de475328/


All Articles