Mit Assemblersprache in Geräte kommen - Gutes Assemblerprogramm?

4 Antworten

Um ein IoT Gerät zu manipulieren benötigt man fast nie Assembler.

Assembler/Maschinensprache ist dann hilfreich, wenn man einen Pufferüberlauf ausnutzen will, um etwas zu hacken. Aber selbst dann arbeitet man grösstenteils mit C. Wie sowas funktioniert wird hier erklärt: https://media.ccc.de/v/35c3chaoswest-47-stack-buffer-overflow-exploits-wie-ein-harmloses-dokument-einen-rechner-infizieren-kann

https://qubit-labs.com/top-iot-programming-languages-tools/

Man muss nicht notwendigerweise mit Assembler programmieren, um IoT Geräte zu steuern. Beherrscht du denn schon eine Programmiersprache? Wenn nicht, dann empfehle ich dir C++ wenn dein Focus auf IoT liegt.

Aber es gibt viele verschiedene APIs für Geräte, die das Steuern von Geräten recht einfach machen.

shoishoi 
Fragesteller
 08.12.2019, 11:25

Ich bin in Java ganz okay. Aber sonst keine. Will ja eigentlich keine API´s benutzen, sondern alles selber programmieren. Aber danke für den Tipp

0

Naja es kommt darauf an was du machen willst.

Assembler sind leichter lesbare und einfacher zu merkende Abkürzungen für Prozessorbefehle. Jeder Assemblerbefehl ist direkt in einen sogenannten Opcode umwandelbar. Ein Opcode ist nichts weiter als die Darstellung der binären Daten die der Prozessor als einen bestimmten Befehl interpretiert in Form einer Zahl.

So steht auf einer 32 bit Intel CPU der Opcode 83 c0 03 für add eax, 0x3. Hierbei ist die hexadezimale Schreibweise deutlich kompakter als zB die binäre Schreibweise und daher wird diese in der Regel verwendet.

Da diese Befehle allerdings für einen bestimmten Prozessortyp spezifisch sind, kann es nicht nur eine Assemblersprache geben! Ein Intel-Prozessor verarbeitet nun mal andere Befehle mit anderen Opcodes als ein RISC- oder ARM-Prozessor oder ein Microcontroller.

Um IoT-Geräte anzugreifen brauchst du allerdings nicht unbedingt Assembler-Kenntnisse. Viele Geräte kann man durch MITM-Angriffe oder klassische Web-Schwachstellen im Web-Frontentd oder auch durch fertige Exploits angreifen.

Assembler wird benötigt um zB C oder C++ Programme zu analysieren und auf noch unbekannte Schwachstellen abzusuchen oder um Dinge wie Buffer Overflows auszunützen.

Willst du also zB die Webseite eines Gerätes (IoT, Router, etc.) angreifen reicht es eventuell aus eine Webschwachstelle (Command-Injection, CSRF, ...) zu nutzen oder man kann die Befehle abfangen und manipulieren. Außerdem bieten sich oftmals Bruteforec-Angriffe auf diverse Protokolle wie Telnet, SSH, etc. an.

Erst wenn du zB das Betriebssystem oder den Webserver an sich angreifen willst wirst du Assembler benötigen. Im Fall von IoT- oder Netzwerk-Geräten kommt dann noch etwas an Hardware dazu um die Daten auch wirklich auslesen zu können.

Diverse andere Programme die zB mit Java, C# oder div. anderen Sprachen geschrieben wurden lassen sich zur Ausgangssprache zurückrechnen und müssen daher auch nicht als Assembler-Code untersucht werden.

Wieder andere Sprachen wie zB Python, etc. (sogenannte Scriptsprachen) liefern Programme als Quellcode aus der von einem Interpreter ausgeführt wird. Hier kann man das Programm direkt öffnen und den Quellcode untersuchen.

Du solltest erst mal gut programmieren können und dann bei diversen anderen Hacking-Techniken sattelfest werden bevor du dich an Reverse-Engeneering und Exploit-Research heranwagen kannst.

Das Beste wäre dann wenn du mit einem Assambler für x86 anfängst weil diese Prozessoren am weitesten verbreitet sind und du auch am meisten Material dazu finden wirst. Beherrscht du dies einmal dann wird es nicht mehr allzu schwer auf RISK, ARM, Microprozessoren, etc. umzulernen.

Du solltest allerdings erstmal gehen lernen bevor du mit Hürdenlauf beginnst!

Hacking spielt sich zu einem großen Teil im Kopf ab - du musst dir die Denkweise eines Hackers angewöhnen um erfolgreich nach Schwachstellen zu suchen. Dies kannst du bei deutlich einfacheren Dingen wie Webhacking bzw. Bug Bounty oder bei Tests mit fertigen Tools durchaus lernen. Wenn du dann geübt darin bist nach Schwachstellen zu suchen und entsprechend analytisch und methodisch vorzugehen wird dir die Exploitsuche auch viel leichter fallen!

Woher ich das weiß:Berufserfahrung – Pentester & Sachverständiger für IT Sicherheit
shoishoi 
Fragesteller
 11.12.2019, 21:00

Danke für den ausführlichen Beitrag, nur weiß ich nicht, wie ich anfangen soll. Ich habe die Grundlagen für Java und C einigermaßen gelernt, nur hilft mir das eigentlich kein Stück weiter, was Hacken angeht :/

Hast du vielleicht einen Tipp wie ich damit anfangen kann das gut zu lernen?

0
Mark Berger  11.12.2019, 21:44
@shoishoi

Wie schon gesagt - du musst erst mal die Denkweise lernen. Programmieren an sich ist schon mal gut aber es hilft nur beschränkt!

Außerdem gehört von viel mehr zum Hacken - du solltest dich mit

  • Betriebssystemen (Userverwaltung, Härten, Sichern, Administration, usw.)
  • Netzwerken (OSI-Modell, Protokolle, Geräte, Konfiguration, ...) und
  • Sererdiensten (Administration, aufsetzen, härten, ...)

auskennen!

Lern erstmal bekannte Angriffe auszuführen - zB wie man MITM, XSS, CSRF, SQLi, usw. durchführt und vor allem wie man auf diese Lücken testet.

0

Es gibt nicht DIE Assembler Sprache, es gibt Entwicklungsumgebungen, die gemäß von Direktiven den Maschinencode erzeugen, der dann auf dem Zielprozessor läuft. Es gibt Hersteller wie Microchip, die bieten solche Software kostenlos an. Damit kannst du ja dann mal spielen.

Eine IoT Lampe hat oft einen embedded Prozessor, den du nicht mit Maschinencode füttern möchtest, da nimmt man gerne c++. Als ein Vertreter davon sei der ESP32 genannt.

So eine Lampe hacken geht, aber da solltest du schon ein Fuchs sein, denn dazu musst den Datenverkehr analysieren.

Selbst wenn du den Maschinencode aus dem Prozessor auslesen kannst, dann musst du ihn zurück in eine für uns Menschen lesbare Form bringen. Das ist durchaus machbar, aber es bedeutet viel Kompetenz und Zeit, die man dazu benötigt.

Wenn der Code geschützt ist, dann hilft auch das nichts.