Sicherheit: Gefahrenquelle Quellcode

    • Allgemein

    Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

      Sicherheit: Gefahrenquelle Quellcode

      Hey Leute,

      da aktuell wieder eine Diskussion über Sicherheit im Gange ist, möchte ich auch meinen Beitrag dazu leisten. Den Thread findet ihr hier:

      vb-paradise.de/board/boarddisk…r-anleitungen/#post747578

      Mein Beitrag zur Brisanz dieses Themas ist ein Video, dass ich vor kurzem erstellt habe. Es zeigt, wie gefährlich es ist, Passwörter in den Quellcode zu schreiben oder Passwörter (auch gehashed) der Anwendung mitzuliefern. Es ist vor allem für Neueinsteiger gedacht, die sich der Gefahr, dass .NET-Quellcode dekompiliert werden kann, nicht bewusst sind.

      Ihr müsst euch darüber klar sein, was dies im Ernstfall bedeuten kann. Schreibt ihr fahrlässig Zugangsdaten eures Servers, MailAccounts usw. in den Quellcode, hat ein Angreifer freien Zugriff. Dass ein "gestohlener" Server euch massiv in Schwierigkeiten bringen kann, soll jedem bewusst sein. Ihr haftet, ihr seid als Admin eingetragen.

      Wenn nun jemand denkt: "Ich nutze nen Obfuscator, mir kann das nicht passieren", hat dieser jemand weit gefehlt, auch diese Hürde kann genommen werden.

      NIEMALS PASSWÖRTER IM KLARTEXT IN DEN CODE ODER IN IRGEND EINER FORM DER ANWENDUNG MITLIEFERN!!!

      Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
      Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
      Hab mir das Video eben angeguckt - richtig "cool" wie einfach das geht. Habe noch nie Sachen dekompiliert und mir das schwerer vorgestellt^^
      Das 3. Programm wäre nur vor Scriptkiddys sicher - ein einfaches Passwort kann man aus dem md5-schlüssel bestimmen, dafür gibts auch Seiten. Könnte mir vorstellen, dass es relativ schnell möglich ist irgendeinen schlüssel zu finden der "gleichbedeutend" ist. Oder man verändert die Exe so, dass die Abfrage ausgehebelt wird, den source hat man ja...
      Auch die 3. Methode kannste innerhalb von 2 Minuten aushebeln. Dazu brauch ich nicht mal nen Zusatztool sondern nur VisualStudio.
      ildasm ...
      Il-Source öffnen, nach ldstr "url..." suchen, austauschen
      ilasm ...
      fertig.

      Nur eine von mehreren Möglichkeiten.


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      ihr redet immer das man keine passwörter in de quellcode schreiben soll
      finde ich gut... nein sorgar sehr gut ;)

      ABER jetzt die gegenfrage...
      ich habe zb ein chatserver gebaut...
      jetzt habe ich mir zb gedacht das ich nicht will das sich jeder depp ein client bauen kann und sich einloggen kann

      also sendet der client zuerst eine art password (lassmichverbinden) der server kuckt ob das eingegangen signal das password ist was der server als password hat und wenn ja lässt der server den clienten verbinden und erst dan sendet der cllient sein namen und kann chatten! klappt soweit auch sehr sehr gut ;)

      allerdings kommt mir jetzt die frage... das password was der client ja sendet steht komplett frei im quellcode! wie mache ich das nun sicher? jemand sieht das passwort und kann sich ein eigenen clienten bauen!
      wenn ich das password irgentwo in einer txt datei speichere bringt es ja auch nix!


      und das ist ja nur ein beispiel! wenn ich mal recht überlege kann der ja alles mögliche auslesen? der kann ja dan auch auslesen wie die ip und port von meinem tcpserver is? kann man sich gegen das dekomplieren eig schützen? ich meine... die sehen ja komplett alles vom quellcode?

      soll ich ein neues forum auf machen oder is das hier gut so? sorry

      MVN050 schrieb:

      das password was der client ja sendet steht komplett frei im quellcode!
      Nein, das tut es nicht. Der Benutzer gibt es bei der Anmeldung am Client ein.

      MVN050 schrieb:

      wenn ich das password irgentwo in einer txt datei speichere bringt es ja auch nix!
      Diese Datei liegt auf dem Rechner, der den Server ausführt, und wird vom Chat-Admin verwaltet. Alle, die chatten dürfen, bekommen ein eigenes Passwort, das in der Textdatei steht. Diese Datei darf aber nie in falsche Hände geraten! Vergleiche das z.B. mit Skype - die haben (grob gesagt) keine Textdatei, sondern eine Datenbank. Und hast du schonmal irgendwo ein Programm gesehen, das einen Skype-Server aufmachen kann? Sicher nicht. Also: Halte die Serversoftware geheim und veröffentliche nur den Client.

      MVN050 schrieb:

      kann man sich gegen das dekomplieren eig schützen?
      Nein

      MVN050 schrieb:

      wie die ip und port von meinem tcpserver is?
      Ja und? Je nach Absicherung der Kommunikationsschnittstelle kann man mehr oder weniger manipulieren. Bei ner Textdatei und Klartextübertragung eher mehr, aber für den Anfang reichts. Ansonsten muss die Kommunikation verschlüsselt werden (der Schlüssel wird z.B. aus dem Nutzerpasswort abgeleitet)
      Gruß
      hal2000

      hal2000 schrieb:

      Nein, das tut es nicht. Der Benutzer gibt es bei der Anmeldung am Client ein.
      Ich habe jetzt von dir nichts alles gelesen aber glaube du hast ihn falsch verstanden.
      Es ist nicht das Serverpasswort wie man es eigentlich kennt.
      Es quasi zur Sicherstellung der Identität des Programms das sich auf den Server verbindet. Sprich NUR der Orginalclient soll sich verbinden können.
      Wenn ich jetzt z.B. einen Client nachbilde soll sich dieser nicht verbinden können. Deshalb das Passwort. Ne gute und einfache Lösung fällt mir im Mom. auch nicht ein.


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      @hal2000
      das password was der client ja sendet steht komplett frei im quellcode!

      Nein, das tut es nicht. Der Benutzer gibt es bei der Anmeldung am Client ein.


      ich rede von meinem programm und da ist es nunmal so!
      der client schickt dem server ein passwort (lassmichverbinden) und wenn das password was der server sendet das selbe is was mein chatserver als verbindungspassword hat dan lässt der server den client verbinden...
      wenn also ein häcker das verbindungspasswort nicht hat kann er also nicht auf dne server verbinden und somit kann nur mein programm auf den server verbinden!
      aber jetzt kann er ja einfach das password sehen! und jetzt stelle ich mir eben die frage...
      wie mache ich genau dieses password sicher! wäre das password weg könnte sich jeder depp ein programm bauen (hier isn turtorial) wie man auf ein tcpserver verbinden... sogar auch auf meinen!
      ich kann das password ja auch schlecht auf der homepage speichern oder sonst wo... dan würde der ja anhang vom code alles sehen!
      ...
      das einloggen auf den server mit einem richtigen namen geht natürlich anders aber zurzeit habe ich ja noch ein gastlogin (der auch bleiben sollte)
      es würde ja auch garnix bringen das password in eine mysqldatenbank einzutragen und mit php das password anzeigen... weil genau de weg zur phpdatei würde der hacker ja dan auch sehen?
      ...
      bin jetzt grade am verzweifeln wie man das machen könnte...


      und nein an mein server kommt eig keiner ran :D wäre ja zu schö :wacko: n
      es geht ja darum das man sich nur über mein programm (client)auf den tcpserver verbinden soll und nicht einfach ein hacker sich selber ein client(programm) bauen kann und sich als mein namen ausgeben kann und alles ändern kann bzw blödsinn bauen kann, da ja mein name auch adminrechte hat wäre das sehr blöd!

      aber wenn man ja den gesammten quellcode von jedem programm sehen kann? dan ist es ja eig sinnlos was grosses zu bauen weil man ja eh damit rechnen muss das irgentein pen... sein programm 1zu1 nachbaut und sagt ich hätte sein programm nachgebaut?
      aber man kann ja auch programme als .dll speichern... kann man de auch den quellcode von einer .dll datei sehen? warscheinlich oder?
      kann man sich wirklich absolut garnich gegen ein dekomplieren schützen absolut garnich?

      wenn der hacker ja erfolgreich ein eigenes programm gebaut hat und sich unter meinem namen in meinem tcpserver verbunden hat... dan kann der ja (weil mein name vom server aus adminrechte hat) jeden kicken und bannen ;( jetz hab ich keine lust mehr zu programmieren :thumbdown:

      die wichtigste frage für mich wäre ja... wie soll ich nun das password sicher genug bekommen sodas der hacker da garnich ran kommt? sobald er den quellcode sieht würde er ja auch das password sehen bzw auf welche art und weisse man an das password kommt :S :wacko:

      MVN050 schrieb:

      und sich als mein namen ausgeben kann
      Das kannerja nicht. Zu deinem Namen gehört ja auch das Passwort, mit dem du dich bei deim Server einloggst, und das hat der Hacker ja nicht.

      Also ich fände das i.O., wenn ich einen Chat-Server ans Netz hänge, dass jmd, der einen eigenen Client dafür geschrieben hat, dann mit-chatten kann. Ist ja wie mtte WebSites auch: Du kannst dir einen eigenen Webbrowser machen, und dann darfst du damit natürlich auch VBParadise nutzen ;)
      Dann schreib einfach keine Passwörter in den QuellCode... Wo ists Problem?

      Dein Server ist ja kein Programm, das Du weiter gibst. Dieser läuft in seiner Umgebung und verwaltet die User/Passwörter ebenfalls in einer von der Aussenwelt getrennten Umgebung.

      Was Du da oben geschrieben hast...

      MVN050 schrieb:

      der client schickt dem server ein passwort (lassmichverbinden) und wenn das password was der server sendet das selbe is was mein chatserver als verbindungspassword hat dan lässt der server den client verbinden...


      Ich hoffe nicht, dass der Server irgendwelche Passwörter zum Client schickt, oder? Der Client schickt das Passwort (gehasht) an den Server. Der Server gleicht den Hash aus seiner Quelle ab und gibt OK oder NOT OK für den Client.
      Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
      Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
      ja richtig das password (noch nicht in hash... würde ja auch nix bringen) wird vom client zum server geschickt und der server sagt ok oder eben nicht!
      das einloggen vom benutzer läuft wiederum ganz ganz anders ab :D das ist sicher genug... nur es geht darum mit dem password (das ist ein anderes password als für die user) was ja die verbindung zum server zulassen soll oder eben nicht...

      @SpaceyX
      soweit is mir das klar... nur eben wo den sonst hin?
      in dem video zb wird ja überprüft ob das password falsch oder richtig is!
      klasse wenn er aber das password vom quellcode sehen kann dan kann er es aus dme quellcode kopieren und eintragen... 2. beispiel in dme video war ja der hashcode... ok ich könnte den hashcode vom password direkt ins programm einbauen ABER das kann man auch knacken (das weiss ich) somit is das genau so unsicher!

      was is den jetzt sicher genug?
      nur mal als beispiel... mein bruder is jetz profi in sachen vbdekomplieren... ich habe jetzt mein rechner gesperrt und muss ein password eingeben zum endsperren!
      wie bzw wo sollte ich das password den speichern? im quellcode ja schonmal nicht aber wo sonst? wo verdammte scheisse :cursing: is doch alles unsicher wenn man es genau getrachtet! sieht er den quellcode sieht er auch das password! ;(

      ich glaube das wird hier grösser oder? soll ichn neues forum aufmachen?
      Eine Frage hätte ich zu dem Thema:
      Es gibt ja einige (auch professionelle) Programme, die die Logindaten lokal speichern, damit man sich nicht jedes mal neu einloggen muss. Kann ich das aktivieren oder sollte ich das grundsätzlich als Sicherheitslücke ansehen?
      Ich denke, dass solche diese Programme meistens schon wissen was sie tun.
      Aber wirklich sicher sein kann man sich nicht und von dem her ist das immer mit Vorsicht zu genießen. Muss aber auch sagen ich persönlich hab jetzt nicht so ne Angst, dass mich jemand versucht zu hacken. Sehe auch kein großes Angriffspotential bei mir, da ich mich nur auf legalen Seiten usw. bewege, ein abgesichertes Netzwerk habe und auch nicht cracks und co downloade,... das übliche halt.


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

      Halbwegs sichere Methode:

      ihr überprüft das eingegebene pw in dem ihr es hasht und mit einer Datei(Bspw: pw.txt) auf nem FTP server welche den richtigen inhalt in gehashter form hat, für die die es sicherer haben wollen googlet nach "AES vb.net tutorial" ;)