WikiDer > Shell-Code
Innerhalb der Informationssicherheit ist Shell-Code ein kleines Programm oder eine relativ kurze Reihe von Anweisungen, die ein Angreifer auf einem gehackten Computer auszuführen versucht. Der Shell-Code ist Teil von a Ausbeuten, also das automatisierte Knacken eines Systems basierend auf beispielsweise einem Programmierfehler. Ein Exploit besteht neben dem Shell-Code oft auch aus einem Mechanismus, um den Shell-Code auf den zu knackenden Computer anzuwenden, der als Injection bezeichnet wird. Shellcode ist auch regelmäßig Ei erwähnt.
Der Name Shell-Code kommt von der Tatsache, dass Hacker oft versuchen, Schale auf einer Maschine, die interaktive Kontrolle darüber gibt. Auf Windows-Systemen ist die DOS-Box (command.com) oder Windows-Shell (cmd.exe) Shell-Beispiele. Auf Unix- und Linux-Systemen, Systemen Sch, csh und bash Beispiele dafür. Der Begriff Shell-Code ist jedoch allgemeiner, und auch wenn beispielsweise ohne Verwendung einer Shell mit einem so kleinen Programm Informationen aus einem System gestohlen werden können, wird dies als Shell-Code bezeichnet.
Es gibt zwei Arten von Shell-Code, lokaler Shell-Code und Remote-Shell-Code. Mit lokalem Shell-Code hat ein Hacker bereits eingeschränkten Zugriff auf ein System und kann ihm mithilfe des Shell-Codes weitere Privilegien geben oder sogar das gesamte System übernehmen. Mit Remote-Shell-Code hat der Hacker noch keinen Zugriff auf den Computer, den er knacken möchte, und injiziert Shell-Code über ein Netzwerk wie das Internet.
Shell-Code kann von einem erfahrenen Hacker selbst geschrieben werden, oder er kann von Software wie z Metasploit generiert oder einfach aus dem Internet heruntergeladen. Die Art von Programmierfehler, die normalerweise die Ausführung von Shell-Code ermöglicht, ist die Pufferüberlauf (Deutsch: Pufferüberlauf).
Der meiste Shell-Code wird eingefügt Maschinensprache geschrieben, die niedrigste Programmiersprache, die dem Prozessor am nächsten ist. Fachwissen über die Befehlssatz eines bestimmten Prozessors, zum Beispiel der x86 Prozessor, wird für die Entwicklung von Shell-Code benötigt. Der Befehlssatz gibt an, welche Befehle vom Prozessor verstanden und ausgeführt werden können. Eine Programmiersprache, die etwas höher ist als die Maschinensprache Assemblersprache. Das binär Anweisungen in Maschinensprache, auch genannt Opcodes erwähnt, und die oft hexadezimal angezeigt werden kann durch a . eingestellt werden Disassembler werden in Assemblersprache übersetzt. Anstelle der Hexadezimalzahlen der Maschinensprache werden die darin enthaltenen Anweisungen beispielsweise als "xor", "push" und "mov" wiedergegeben, was für die meisten Menschen besser lesbar ist.
Die Shell-Code-Erkennung kann manuell oder automatisiert erfolgen. Die manuelle Erkennung erfordert Erfahrung und kann zeitaufwändig sein. Für den x86-Befehlssatz auf Windows-Rechnern, a Debugger wenn OllyDbg dabei helfen. Auf Unix- und Linux-Systemen kann ein Debugger wie gdb geben einen Einblick in die Aktionen des Shell-Codes während der manuellen Erkennung. Ein Beispiel für eine Software, die eine automatische Shell-Code-Erkennung bietet, z Honigtöpfe, ist libemu.
Datenbanken werden von vorhandenem Shell-Code verwaltet, wie z. B. das Shell-Code-Archiv, das Teil des Metasploit-Projekt. Es gibt Shell-Code, der sich selbst modifiziert, was die Erkennung erheblich erschwert. Dieser sogenannte polymorphe Shell-Code kann mit Programmen wie admutieren hergestellt werden. Darüber hinaus wird oft ein Teil des Shell-Codes verschlüsselt, meist mit XOR-Verschlüsselung.
Wenn Shellcode einen NOP-Schlitten verwendet, wird eine Sequenz NOPs, Anweisungen, bei denen der Prozessor keine Operation ausführen muss, ist dies in der Regel leicht zu erkennen, z. B. durch a Einbruchmeldesystem. Hacker wissen oft, wie man die Verwendung dieser Art von NOP-Schlitten verhindert.