Polymorpher Code
Im Computer, Polymorpher Code ist Code, der a verwendet polymorpher Motor mutieren und das Original halten Algorithmus intakt - das heißt, die Code ändert sich jedes Mal, wenn es läuft, aber die Funktion des Code (ITS Semantik) wird sich überhaupt nicht ändern. Zum Beispiel erzielen die einfachen mathematischen Gleichungen 3+1 und 6-2 beide das gleiche Ergebnis, aber mit unterschiedlichem Lauf Maschinensprache in einem Zentralprozessor. Diese Technik wird manchmal von verwendet von Computer Virus, Shellcodes und Computerwürmer ihre Anwesenheit verbergen.[1]
Verschlüsselung ist die häufigste Methode, um Code zu verbergen. Mit der Verschlüsselung der Hauptteil des Codes (auch als seine genannt Nutzlast) ist verschlüsselt und erscheinen bedeutungslos. Damit der Code wie zuvor funktionieren kann, wird dem Code eine Entschlüsselungsfunktion hinzugefügt. Wenn der Code ist hingerichtetDiese Funktion liest die Nutzlast und entschlüsselt sie, bevor sie sie wiederum ausführen.
Verschlüsselung allein ist kein Polymorphismus. Um ein polymorpisches Verhalten zu erhalten, wird das Verschlüsselungs-/Entschlüsselungs -Paar mit jeder Kopie des Codes mutiert. Dies ermöglicht verschiedene Versionen eines Codes, die alle gleich funktionieren.[2]
Schadcode
Die meisten Antiviren Software und Einbrucherkennungssystem (IDS) Versuchen Sie, böswilligen Code zu finden, indem Sie Computerdateien und Datenpakete durchsuchen, die über a gesendet werden Computernetzwerk. Wenn die Sicherheitssoftware Muster findet, die bekannten Computerviren oder Würmern entsprechen, unternimmt sie geeignete Schritte, um die Bedrohung zu neutralisieren. Polymorphe Algorithmen erschweren es solchen Software, den beleidigenden Code zu erkennen, da er ständig mutiert.
Bösartig Programmierer haben versucht, ihren verschlüsselten Code vor dieser Virus-Scanning-Strategie zu schützen, indem sie die unverschlüsselte Entschlüsselungsmaschine (und die daraus resultierende verschlüsselte Nutzlast) jedes Mal neu schreiben, wenn das Virus oder Wurm verbreitet wird. Die Anti-Virus-Software verwendet eine ausgefeilte Musteranalyse, um zugrunde liegende Muster innerhalb der verschiedenen Mutationen der Entschlüsselungsmaschine zu finden, in der Hoffnung, solche zuverlässig zu erkennen Malware.
Die Emulation kann verwendet werden, um die polymorphe Verschleierung zu besiegen, indem sich die Malware in einer virtuellen Umgebung entfaltet, bevor andere Methoden wie das herkömmliche Signatur -Scannen verwendet werden. Eine solche virtuelle Umgebung wird manchmal als als genannt Sandkasten. Der Polymorphismus schützt das Virus nicht vor einer solchen Emulation, wenn die entschlüsselte Nutzlast unabhängig von der Variation des Entschlüsselungsalgorithmus gleich bleibt. Metamorpher Code Techniken können verwendet werden, um die Erkennung weiter zu komplizieren, da das Virus möglicherweise ausgeführt wird, ohne jemals identifizierbare Codeblöcke im Speicher zu haben, die von der Infektion bis zur Infektion konstant bleiben.
Das erste bekannte polymorphe Virus wurde von Mark Washburn geschrieben. Das Virus, genannt 1260, wurde 1990 geschrieben. 1992 wurde ein bekannteren polymorpher Virus vom Hacker erstellt Dunkler Rächer als Mittel zur Vermeidung von Mustererkennung durch Antivirensoftware. Ein häufiges und sehr virulentes polymorphes Virus ist die Datei Infection Virut.
Beispiel
Dieses Beispiel ist nicht wirklich ein polymorpher Code, sondern dient als Einführung in die Welt der Verschlüsselung über die Xor Operator. Zum Beispiel könnte in einem Algorithmus mit den Variablen A und B, aber nicht der Variablen C eine große Menge an Code bestehen, die C ändert, und es hätte keinen Einfluss auf den Algorithmus selbst, sodass es endlos und ohne Beachtung geändert werden kann Was das Endprodukt sein wird.
Start: Goto decryption_code verschlüsselt: ... viel verschlüsselter Code ... decryption_code: c = c + 1 a = verschlüsselte Schleife: b = *a c = 3214 *a b = b xor Cryptoy *a = b c = 1 c = a + B a = a + 1 goto loop Wenn nicht a = decryption_code c = c^2 Goto verschlüsselt Cryptoy: SOLE_RANDOM_NUMBER
Der verschlüsselte Code ist die Nutzlast. Um verschiedene Versionen des Codes zu erstellen, kopieren Sie in jeder Kopie die Müllzeilen, die C manipulieren, und ändern sich. Der Code in "verschlüsselt" ("Viel verschlüsseltes Code") kann den Code zwischen decryption_code und kryptoptisch und jedem Algorithmus nach neuem Code durchsuchen, der dasselbe tut. Normalerweise verwendet der Codierer einen Null -Schlüssel (zum Beispiel; a; xor 0 = a) Für die erste Generation des Virus erleichtert es dem Codierer, da der Code mit diesem Schlüssel nicht verschlüsselt wird. Der Codierer implementiert dann einen inkrementellen Schlüsselalgorithmus oder einen zufälligen.
Polymorphe Verschlüsselung
Der polymorphe Code kann auch verwendet werden, um einen Verschlüsselungsalgorithmus zu generieren. Dieser Code wurde vom Online -Service StringenCrypt generiert.[3] Es nimmt die Zeichenfolge oder einen Dateiinhalt auf und verschlüsselt sie mit zufälligen Verschlüsselungsbefehlen und generiert polymorphe Entschlüsselungscode in einer der vielen unterstützten Programmiersprachen:
// verschlüsselt mit https://www.stringencrypt.com (v1.1.0) [C/C ++] // Szlabel = "Wikipedia" wchar_t Szlabel[10] = { 0xb1a8, 0xb12e, 0xb0b4, 0xb03c, 0x33b9, 0xb30c, 0x3295, 0xb260, 0xb5e5, 0x35a2 }; zum (ohne Vorzeichen Tutuj = 0, KRSPK = 0; Tutuj < 10; Tutuj++) { KRSPK = Szlabel[Tutuj]; KRSPK ^= 0x2622; KRSPK = ~KRSPK; KRSPK --; KRSPK += Tutuj; KRSPK = ((((KRSPK & 0xffff) >> 3) | (KRSPK << 13)) & 0xffff; KRSPK += Tutuj; KRSPK --; KRSPK = ((KRSPK << 8) | ( (KRSPK & 0xffff) >> 8)) & 0xffff; KRSPK ^= 0xe702; KRSPK = ((KRSPK << 4) | ( (KRSPK & 0xffff) >> 12)) & 0xffff; KRSPK ^= Tutuj; KRSPK ++; KRSPK = ((((KRSPK & 0xffff) >> 8) | (KRSPK << 8)) & 0xffff; KRSPK = ~KRSPK; Szlabel[Tutuj] = KRSPK; } Wprintf(Szlabel);
Wie Sie in diesem C ++ - Beispiel sehen können, wurde die Zeichenfolge verschlüsselt und jedes Zeichen wurde in verschlüsselter Form verwendet. Unicode Widechar -Format. Unterschiedliche Verschlüsselungsbefehle wurden wie bitweise verwendet Xor, NICHT, Addition, Subtraktion, Bitrotationen. Alles ist randomisiert, Verschlüsselungsschlüssel, Bit -Rotation -Zähler und Verschlüsselungsbefehle. Ausgabecode kann in generiert werden in C/C ++, C#, Java, JavaScript, Python, Rubin, Haskell, Masm, Fasm und Autoit. Dank der Randomisierung ist der generierte Algorithmus jedes Mal anders. Es ist nicht möglich, generische Entschlüsselungswerkzeuge zu schreiben, und der kompilierte Code mit polymorpher Verschlüsselungscode muss jedes Mal analysiert werden, wenn er neu verkrümt wird.
Siehe auch
- Zeitleiste bemerkenswerter Computerviren und Würmer
- Metamorpher Code
- Selbstmodifizierender Code
- Alphanumerischer Shellcode
- Shellcode
- Software Cracking
- Sicherheitsrisse
- Verschleierter Code
- Oligomorpher Code
Verweise
- ^ Raghunathan, Srinivasan (2007). Schutz der Antivirensoftware unter viralen Angriffen (M.Sc.).Universität von Arizona. Citeseerx 10.1.1.93.796.
- ^ Wong, Flügel;Stamp, M. (2006)."Jagd nach metamorphen Motoren". Journal in Computervirologie. 2 (3): 211–229. Citeseerx 10.1.1.108.3878. doi:10.1007/s11416-006-0028-7. S2CID 8116065.
- ^ Wójcik, Bartosz (2015). String & Dateiverschlüsselung
- Spinellis, Diomidis (Januar 2003). "Die zuverlässige Identifizierung von Viren mit begrenzter Länge ist NP-Vervollständigung". IEEE -Transaktionen zur Informationstheorie. 49 (1): 280–4. doi:10.1109/tit.2002.806137.