Binäres Netzwerk Protokoll
-
Leider bietet auch das keinen wirklichen Schutz:
Ich kann nicht die gesammte Nachricht verschlüsseln (weil mein Programm nicht weiß, wieviel vom Bytesstrom noch zu meiner Nachricht gehört (unverschlüsselt könnte man es aus dem Header auslesen)) und alle sinnvollen Verschlüsselungen Blockverschlüsselungen sind, bei denen ich die gesammte Nachricht übergeben muss... nochdazu ist dem Angreifer der Schlüssel bekannt (er kann ihn aus der Exe auslesen).
Ich vermute, dass es leider keinen wirklichen Schutz gibt... Aber weshalb kann ich dann dem Skype Server, der auch ein Binärprotokoll verwendet so nicht zum Absturz bewegen? (Nein ich habe das nicht ausprobiert, aber ich vermute das haben schon genug Leute mit mehr Ahnung als ich versucht)
Danke an alle Antwortenden
-
Du kannst die Nachrichten signieren. Das hat aber einigen Overhead.
Aber das Problem scheint mir eher zu sein, dass dein Programm ein falsches memcpy macht. Wenn die Nachricht sagt "Jetzt kommt ein 100 Bytes Parameter" aber du nur 20 Bytes hast, dann musst du halt warten und nicht memcpy mit 100 Bytes aufrufen. Ich wüsste nicht, warum dein Programm bei falscher Eingabe und korrekter Implementierung abstürzen sollte.
-
Jetzt kommt ein Parameter mit 2 Mrd. Bytes. Loesung maximale Laenge festlegen. Problem: Wie auf Pakete aufteilen falls doch mehr erwartet werden?
Ich vermute, dass es leider keinen wirklichen Schutz gibt...
Doch gibt es, aber das erfordert mehr Wissen. ssh bzw. openssl sind beste Beispiele.
-
Für mein Programm kommen da halt einfach sagen wir mal 100 Bytes rein:
Sagen wir das sind 2 Befehle a 50 Bytes:
Mein Programm liest aus dem Header der ersten Nachricht die Anzahl der Parameter der ersten Nachricht. Dann liest sie die nächsten 4 Bytes ein und interpretiert diese als Länge des Parameters, dann kopiert sie soviele Bytes weiter in einen Buffer, dann liest sie die nächsten 4 Bytes ein (also die ersten 4 nach dem Parameter) und interpretiert diese wieder als Länge des Parameters:(00 00 00 05) [12 34 56 78 90] (00 00 00 01) [FE] ... (Die Längen habe ich in runde , die Daten in echicke Klammern gesetzt
Nach dem alle Parameter ausgelesn sind (ich habe ja die Anzahl) weiß mein Programm: "Die nächsten Bytes sind ein neuer Befehl!" und liest wieder den Header ein. Ich kann leider nicht überprüfen, ob die Nachricht wirklich so lang ist (ich habe nur die Anzahl der Parameter und selbst die kann ein Angreifer einfach im Header ändern)....
Danke an Alle
-
Oder einfach ausgedrueckt, dein gewaehltes Protokoll ist nicht fuer diese Art der Anwendung geeignet.
-
Darum frage ich ja: Es muss doch eine Möglichkeit geben, ohne gleich auf ein (aus meiner Sicht unpraktisches und schlechtes) Terminatorzeichen-Protokoll umzusteigen
Danke an alle
-
Kauf dir einfach bei Media Markt einen Computer mit Windows da ist auch schon ein Netzwerk Protokoll (TCP,UDP, und noch andere) mit dabei.
-
Für die Integrität ->
HMAC - http://en.wikipedia.org/wiki/Hash-based_message_authentication_codeUnd denn ganzen Datenstrom natürlich verschlüsseln.
-
knivil schrieb:
Oder einfach ausgedrueckt, dein gewaehltes Protokoll ist nicht fuer diese Art der Anwendung geeignet.
-
-Uninfected- schrieb:
Kauf dir einfach bei Media Markt einen Computer mit Windows da ist auch schon ein Netzwerk Protokoll (TCP,UDP, und noch andere) mit dabei.
Also beim besten Willen: Du hast nicht den Hauch einer Ahnung! Ich meinte kein Transportschicht-Protokoll sondern ein Anwendungsschicht-Protokoll, das übrigens auf TCP aufbaut. Da du aber vermutlich nicht weißt was ich meine: http://de.wikipedia.org/wiki/Internetprotokollfamilie#Anwendungsschicht_.28entspricht_OSI-Layer_5.E2.80.937.29
Danke an alle
-
Frag einfach bei Media Markt in der Software Abteilung die haben ganz viel Software da. Ich finde da immer alles was ich brauche.
-
Im Gegensatz zu dir habe ich wenigstens den Hauch einer Ahnung, was Computer sind, bevor du hier mit WIRKLICH unqualifizierten Kommentaren nervst, lernst du besser mal was ein Computer überhaupt ist!
An alle anderen, was für ein Protokoll wäre den geschickter?
-
Ich verweise auf mein ersten Post.
-
-Infected- schrieb:
Im Gegensatz zu dir habe ich wenigstens den Hauch einer Ahnung, was Computer sind, bevor du hier mit WIRKLICH unqualifizierten Kommentaren nervst, lernst du besser mal was ein Computer überhaupt ist!
Ich weiss was ein Computer ist!
Ich habe auch einen Computer zuhause damit surfe ich immer im Internet ich hab nämlich eine DSL Flatrate und einen Router besser gesagt eine FritzBox!
Mein Computer hat einen Intel i5 Prozessor, 2GB-RAM und eine 512MB Grafikkarte sowie eine 500GB große Festplatte. Als Betriebssystem verwende ich Windows 7 64 Bit!
Den Computer habe ich übrigens bei Media Markt gekauft!
Jetzt guckste was?! Wenn ich mal etwas ins detail gehe dann hast du da keine Schnitte!
-
Btw. du solltest auch mal nach Media Markt gehen die können dir da bestimmt bei deinem Problem helfen den die haben höchst qualifiziertes Fachpersonal!
-
Da kann ich nur zustimmen, das Media Markt Team hat mich auch immer sehr gut beraten.
@ -Uninfected-
Den PC den du da hast das ist aber kein Einsteiger Model mehr daher denke ich das du schon ein Computer Vollprofi bist.
-
@ -Uninfected-
Kannst du mir kurz erklären was DDR-Ram ist?
-
Hallo Alfons, ja du hast recht mein Computer ist aus der Profi Serie. Ich selber bin ja auch Computer Profi.
Bei uns im bekannten Kreis da bin ich der Computer Experte. Vor ein paar Tagen hab ich einem Nachbarn bei Word geholfen er wusste nicht wie man die Schrift größer Stellen kann aber für mich war das kein Problem das Problem hatte ich unter einer Minute gelöst.
Ja das mit dem DDR-Ram da hatte mich ein bekannter gefragt ob ich ihm Speicher einbauen kann:
Also ich hab kurz auf Youtube geschaut wie sowas geht und auch sofort verstanden. Ich hatte noch ein Ram-Riegel bei mir rumliegen aber der ließ sich nicht beim ihm einbauen. Der Speicher den ich hatte das war kein Deutscher Speicher sondern der war aus dem Sudan kurz gesagt SD-RAM.
Daher musste ich bei Media Markt Deutschen Ram kaufen kurz gesagt DDR-RAM.
Und jetzt weisst du auch was DDR-Ram ist!
-
@-Infected-
Dein Problem ist, dass du glaubst, dich zwingend auf die Längenangaben in den empfangenen Daten verlassen zu müssen. Doch das stimmt gar nicht.
Wenn in der Nachricht steht, es kommt jetzt ein 100 Byte Parameter, es fehlen jedoch 80 Bytes, dann darfst du natürlich nicht blind ein memcpy 100 machen, sondern immer maximal bis zur Gesamtlänge des Empfangsbuffers.
Dann kann nichts crashen, höchstens die Daten sind dann aus Anwendungssicht invalid, aber da musst du eben validations einbauen.
-
Zudem sollte man beim Versenden von binären Datenblöcken darauf achten, dass unterschiedliche Systeme ( 32Bit, 64Bit ) unterschiedliche Binärblöcke generieren, weil einfach Datentypen unterschiedlich groß sind. Ganz am Anfang, unwissend wie ich war und teilweise noch bin (
), bin ich damit ganz bitterböse auf die Nase gefallen