Was ist ein Shellcode?
Shellcode ist eine Sequenz von Maschinencode oder ausführbaren Anweisungen, die in den Arbeitsspeicher eines Computers eingefügt werden, um die Kontrolle über ein laufendes Programm zu übernehmen. Bei einem solchen Angriff besteht einer der Schritte darin, die Kontrolle über den Programmzähler zu erlangen, der den nächsten auszuführenden Befehl identifiziert. Der Programmablauf kann dann auf den eingegebenen Code umgeleitet werden. Der aufdringliche Maschinencode wird als Nutzlast des Angriffs bezeichnet und ist das Element, auf das üblicherweise mit dem Begriff Shellcode Bezug genommen wird. Diese Methode wurde oft verwendet, um einem Angreifer durch Öffnen einer Betriebssystem-Befehls-Shell Zugriff zu gewähren, sodass Code-Injection-Angriffe im Allgemeinen als Shellcode bekannt wurden.
Die Sicherheitsanfälligkeit, die ausgenutzt wird, besteht in der Regel darin, wie ein Programm Speicher zuweist, die Gültigkeit von Eingabedaten überprüft und Speicherfehler behandelt. Softwareentwickler können diese Bedrohung normalerweise vermeiden, indem sie die Eingabedaten genau definieren und falsche Werte ablehnen. Wenn diese Option nicht aktiviert ist, werden möglicherweise Werte akzeptiert, die mehr Speicherplatz benötigen als der für diesen Wert zugewiesene Speicher. Dies führt zu einer Sicherheitslücke, die als Pufferüberlauf bezeichnet wird und bei der ein Teil der Daten in Speicherorte geschrieben wird, die dem zugewiesenen Speicherplatz des Werts benachbart sind. Diese Anomalie kann bei sorgfältiger Manipulation die Einführung von aufdringlichem Code ermöglichen.
Shellcode wird normalerweise in einer Programmiersprache mit Systemzugriff auf niedriger Ebene wie Assembly, C oder C ++ geschrieben. Abhängig von der Zielanfälligkeit kann dasselbe Ergebnis jedoch erzielt werden, indem Code für eine interpretierte Skriptsprache wie PERL oder Bytecode für eine virtuelle Maschine wie JAVA eingefügt wird. Der Code kann vor, während oder nach dem Hijack des Programmzählers implantiert werden. Somit kann der aufdringliche Code in einer Datei auf dem Zielcomputer enthalten sein oder in Echtzeit über eine Netzwerkverbindung übertragen werden.
Lokale Shellcode-Exploits ermöglichen einem Angreifer die Kontrolle über einen Computer, auf den er physischen Zugriff hat. In diesem Fall kann es beispielsweise ein Ziel sein, ein Konto mit Administratorrechten zu erstellen. In ähnlicher Weise würde ein erfolgreicher Exploit dem Angreifer vorübergehend dieselbe Zugriffsstufe gewähren, wenn ein ausgeführter Prozess eine hohe Berechtigungsstufe aufweist.
Prozesse, die auf einem Remotecomputer ausgeführt werden, können mithilfe von Standardnetzwerkprotokollen für die Kommunikation mit dem Zielcomputer ausgenutzt werden. Der Connect-Back-Shellcode weist den Zielcomputer an, eine Verbindung zum Computer des Eindringlings herzustellen. Wenn der Eindringling die Verbindung initiiert, wird der Code als Bindshell bezeichnet, da er versucht, die Kontrolle über eine Netzwerkverbindung zu übernehmen, die als Port auf dem Remotecomputer bezeichnet wird. Die Rückverbindungsmethode ist weit verbreitet, da Firewalls ausgehende Verbindungen selten verbieten.