Binäres Netzwerk Protokoll



  • Für die Integrität ->
    HMAC - http://en.wikipedia.org/wiki/Hash-based_message_authentication_code

    Und 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 😃



  • -Infected- schrieb:

    Meine Frage ist also, wie kann ich verhindern (oder es zumindest schwer machen), dass ein Angreifer meinen Server lahmlegt?

    Alle Eingaben (dazu gehört auch ein Datenstrom per TCP), die man sich nicht selbst im Programm erzeugt, muss man prüfen, da sie ggf. manipuliert sind. Wenn Dein Progamm eine unplausible Eingabe erhält (z.B. "Parameterlänge 2Mrd"), dann loggst Du das in deinem Logfile und beendest die Verbindung zur Gegenstelle.

    Was eine unplausible Eingabe ist, musst Du selbst wissen, denn Du bist ja Entwickler deines Protokolls. z.B. könnte man halt in die Protokolldefinition reinschreiben, Parameter können maximal 32Byte lang sein. Dann kannst Du auf genau das prüfen. Wenn Dein Protokoll aber halt potentiell mit 2Mrd Bytes langen Parametern klar kommen soll, dann sind natürlich alle Längen < 2Mrd erlaubte Eingaben und Du darfst damit dann auch nicht auf die Nase fallen.
    Das Dein memcpy schief geht hat damit allerdings nichts zu tun. Das ist ein simpler Programmierfehler. Wenn im Protokoll gestanden hat es kämen noch x Bytes, Du hast aber gerade nur y < x Bytes, musst Du halt so lange warten bis dir die Gegenstelle ausreichend Bytes gesendet hat bevor Du da irgendwas in der Länge x umherkopierst.



  • Es werden Parameterlängen bis zu der maximalen Integerlänge möglich (das is zuviel, aber 2 Bytes (WORD) ist eventuell zu wenig 😃

    Ich hatte einen prinzipiellen Denkfehler drin:

    Wenn Daten ankommen, mit denen ich nix anfangen kann, kommen ja aus demselben Datenstrom nicht auchnoch sinnvolle Daten an -> Ich kann die Verbindung trennen, ich mache auch kein memcpy() ohne das genug Daten da sind (ich bin ja nicht blöd :D)
    Das Problem war anderer Natur, ich habe alle Daten in eine globale Schlange gestellt -> wenn einmal nicht valide Daten ankommen, muss ich den Server runterfahren, da ich nichtmehr zwischen den Befehlen unterscheiden kann 😃 Ich verarbeite die Daten nun direkt nach dem Empfangen im Socket-Thread -> Verbindung trennen (und loggen), wenn das gegenüber Müll sendet

    Problem gelöst 😃

    Danke 😃



  • Aber ob Garbage gesendet wird oder nicht weist du immer noch nicht. Deshalb Integrität Prüfen! Protokoll overhead musst du halt in kauf nehmen.
    Ausser du legst keine Wert darauf...



  • Am besten noch jeden Parameter auf Plausibilität prüfen, denn es könnte noch eine fake-message mit eigenem hash ankommen.



  • Er kann auch jeden Müll annehmen und verarbeiten, das ist ihm überlassen...



  • Doch, Befehle (die bei denen es halt nötig ist) benötigen Authentifizierung (also eine Art Cookie), dass heißt es ist einem Angreifer nicht möglich irgendwas zu machen außer Befehle zu senden die keine "Cookies" brauchen (wobei ich da natürlich nochmal die Parameter checke (und wenn er mir hier nen Integer als String andrehen möchte, dann wird disconnected)) oder unauthentifiziert Befehle zu senden, die ich halt auch entsprechend behandle...

    Mein eigentliches Problem war, das er mir (als ich noch die globale Schlange benutzt habe) natürlich alles durcheinander bringen kann, mehr Probleme gabs nicht 😃



  • ⚠
    Anstatt da jetzt ewig lange rum zu frickeln solltest du einfach mal bei Media Markt nachfragen!


Anmelden zum Antworten