Wie sicher ist ein Passwort im Quellcode



  • Bei verschlüsselten Daten, etc. verstehe ich ja, dass man diese entschlüsseln möchten. 😃

    Aber wieso möchte man das bei Passwörtern? AFAIK werden Passwörter nur verschlüsselt und zum Vergleich wird das eingegebene Passwort ebenfalls verschlüsselt und die verschlüsselten Strings miteinander verglichen.

    Oder habe ich jetzt das Problem missverstanden?



  • Ich glaub, er meint sowas wie 'nen Passwort-Safe. Da packt man seine saemtlichen Passwoerter rein, und verschluesselt die dann alle zusammen, so dass man sich nur noch dieses eine Passwort merken muss.



  • mantiz schrieb:

    Bei verschlüsselten Daten, etc. verstehe ich ja, dass man diese entschlüsseln möchten. 😃

    Aber wieso möchte man das bei Passwörtern? AFAIK werden Passwörter nur verschlüsselt und zum Vergleich wird das eingegebene Passwort ebenfalls verschlüsselt und die verschlüsselten Strings miteinander verglichen.

    Oder habe ich jetzt das Problem missverstanden?

    fast, die passwörter werden nicht verschlüsselt abgelegt, sondern nur der hashwert des pw. diese werden dann verglichen. und vom hashwert gibt es keinen weg zurück zum pw



  • Webster schrieb:

    mikey schrieb:

    wie kann man es dann verhindern, dass das Passwort nicht in Blankform im Speicher liegt ?

    Ich denke mal gar nicht.
    Mann muss ja irgendwie Abfragen ob das PW mit der Eingabe übereinstimmt - dazu muss es ja im Speicher sein.

    Hier könnte man evtl. einen Hash speichern und schauen ob der hash des eingegebenen passwortes übereinstimmt...



  • Echo???



  • Aber wieso möchte man das bei Passwörtern? AFAIK werden Passwörter nur verschlüsselt und zum Vergleich wird das eingegebene Passwort ebenfalls verschlüsselt und die verschlüsselten Strings miteinander verglichen.

    Das ist schon richtig. Aber ich habe absichtlich von einem mathematisch durch Umkehrrechnungen aufzulösenden Algorithmus gesprochen. Wäre es ein Hash, dann ist es natürlich viel sicherer.



  • Der Thread ist schon etwas älter, hätte trotzdem ne Frage und wollte keinen neuen Aufmachen....

    Ich würde das Password jetzt z.B. als Hash Code oder dergleichen aspeicher, ABER wie umgehe ich die Sache mit der If Abfrage ? Das mit den Arraygrenzen ist ne gute Idee, allerdings wie setzte ich sowas am besten um ?

    Wie würdet Ihr die If Abfrage ala :

    If (input == pwd){...} gestalten um das ein bisschen sicherer zu machen ?

    Ich muss nur vor ein paar neugierigen Kiddies schüzten, da ist keiner "echter" Hacker dabei, da fehlt das "Hirnschmalz" dafür 🙂



  • pwd_question schrieb:

    Der Thread ist schon etwas älter, hätte trotzdem ne Frage und wollte keinen neuen Aufmachen....

    Ich würde das Password jetzt z.B. als Hash Code oder dergleichen aspeicher, ABER wie umgehe ich die Sache mit der If Abfrage ? Das mit den Arraygrenzen ist ne gute Idee, allerdings wie setzte ich sowas am besten um ?

    Wie würdet Ihr die If Abfrage ala :

    If (input == pwd){...} gestalten um das ein bisschen sicherer zu machen ?

    Ich muss nur vor ein paar neugierigen Kiddies schüzten, da ist keiner "echter" Hacker dabei, da fehlt das "Hirnschmalz" dafür 🙂

    Du möchtest kein if haben? Dann nimm Function Pointer.

    Beispiel:

    #include <stdio.h>
    #include <stddef.h>
    
    // der gespeicherte hashwert
    ptrdiff_t PWDHASH = 0x12345678;
    
    // hier ist das eigentliche programm
    void program (void)
    {
        printf ("hier gehts weiter ...");
    }
    
    // Passworteingabe des Benutzers als hashwert zurückliefern
    ptrdiff_t get_input_hash()
    {
        return 0x12345678;
    }
    
    // ...
    void main()
    {
        ptrdiff_t goodval = ((ptrdiff_t)program) ^ PWDHASH;
        void (*func)(void);
        goodval ^= get_input_hash();
        func = (void (*)(void))goodval;
        func();
    }
    

    Ändere jetzt mal den Rückgabewert von get_input_hash(), dann stürzt es ab.
    get_input_hash() nimmt die Passworteingabe des Users entgegen und liefert einen Hashwert daraus zurück.

    Es wird keine if-Verzweigung benötigt.
    Prinzip verstanden?



  • Leprechaun schrieb:

    Ändere jetzt mal den Rückgabewert von get_input_hash(), dann stürzt es ab.

    lol? Das ist ja viel einfacher zu Hacken als ein if. Musst nur das 0x12345678 mit einem dir bekannten Hash ersetzen.



  • pwd_question schrieb:

    Ich muss nur vor ein paar neugierigen Kiddies schüzten, da ist keiner "echter" Hacker dabei, da fehlt das "Hirnschmalz" dafür 🙂

    Dann reicht doch ne simple Abfrage. 🙂
    Es ist immer die Frage was genau du erreichen willst. Wenn du z.B. einen teil des Programms nur ausführen willst wenn ein Passwort eingegeben wird, wirst du nicht drum rumkommen diesen Programmteil zu verschlüsseln. Egal wie komplex die Abfrage ist, man wird sie immer irgendwie knacken können. 😉

    @Leprechaun
    Ein Sprung in einen unbekannten Codeteil wenn man ein falsches Passwort eingibt? Klingt gefährlich. Sowas ist nur für ein CrackMe gut, sowas sollte man nicht machen. 😮



  • lepra-coder schrieb:

    Leprechaun schrieb:

    Ändere jetzt mal den Rückgabewert von get_input_hash(), dann stürzt es ab.

    lol? Das ist ja viel einfacher zu Hacken als ein if. Musst nur das 0x12345678 mit einem dir bekannten Hash ersetzen.

    aber nicht für die Kiddies die nach einer Verzweigung suchen.



  • Die sache mit dem funktionspointer ist klasse!
    Bin aber leider mit c# unterwegs, da kann ich das so nicht umsetzen..
    Hat jmd. Tipps fúr ne c# "umsetzung "



  • Du weißt schon dass man C# ganz easy-peasy dekompilieren kann, ja?
    Nimm die C# AES Klassen, pack Code den keiner sehen soll in eine DLL. Dann fragst du ein Passwort ab und versuchst die DLL zu entschlüsseln, wenn das klappt lädst du sie und verwendest sie. 🙂
    Sollte praktisch unknackbar sein. Aber sag doch mal was genau du machen willst.



  • Ja, ich habs gelesen das C# nicht dieee Hürde ist 🙂
    Also ich hab mich mit Passwort und so Sachen noch nie groß befasst weil ich meine kleinen Programme meist nur für mich gemacht habe.

    Jetzt habe ich ein kleines Tool für meine Kollegen auf Arbeit gemacht. Aber nicht jeder soll es nutzen können. Darum wird am Anfang die Windowsanmeldung abgefragt und mit einer Liste verglichen. Tja if( ! act_user == res_user ) {Application.Exit(1) } usw.

    HAb aber einen Kollegen dabei, der angeblich schon mal bisschen was gecrackt hat.
    Also ich traue es Ihm nicht zu, und zuviel Aufwand will ich eigentlich auch nicht treiben, aber nebenbei ist es evtl. noch ne nette Übung.

    Momentan ist einfach eine "Liste" mit restricted users im Quellcode hinterlegt. Wenn ich das jetzt hashe ist ja schön und gut, es bleibt aber bei dem einen Bit für die If-Abfrage das über To Be or Not to Be entscheidet 😞



  • Pass lieber auf dass du dir keinen Ärger mit der GF einhandelst, das sind immerhin Firmenrechner.



  • Kannst du die Applikation nicht dadurch schützen dass nur berechtigte User zugriff auf irgendwas haben was die Applikation benötigt?
    Also ne SQL Datenbank, irgendwelche Files die die Applikation modifiziert etc.?
    Oder wenn sonst nix geht auch einfach das .exe File der Applikation selbst?

    Da selbst was zu kochen ist fast immer suboptimal.

    Ein if (username == berechtigterUsername) ist halt schon SEHR einfach auszuhebeln.
    Dazu muss er bloss lokal einen User mit dem entsprechenden Namen anlegen und *schwupp* schon kann er deine Applikation verwenden.
    Und in einem C# Programm ist der Code auch in 5 Minuten gefunden. Das Programm dann ohne den entsprechenden Check neu zu übersetzen ist auch kein Problem. ILSpy kann dir z.B. ein fix & fertiges Project-File ausspucken. Das muss man nur noch in VS aufmachen, die eine Zeile auskommentieren, neu übersetzen => fertig. Wenn man sich ein wenig damit auskennt ist das eine Sache von 5 Minuten.

    @deejey
    GF? Meinst du vielleicht GL?



  • Oder wenn sonst nix geht auch einfach das .exe File der Applikation selbst?

    Du meinst mit einem "externen Programm" oder hab ich das jetzt falsch verstanden?

    Ich habs jetzt verübergehend mal so gelöst, das bei einem falschen Benutzer Array Grenzen nicht mehr passen und das Prog dann abschmiert. Ja, nicht das gelbe vom Ei, aber naja...



  • Ich meine dass du das Tool auf einem Netzlaufwerk ablegst wo nicht jeder Zugriff darauf hat.
    Klar kann dann einer der Zugriff hat einem anderen das Tool kopieren. Genau so gut kann der berechtigte Jemand aber auch sein Passwort weitergeben.

    Vorteil bei der Netzlaufwerk Sache sind allerdings:
    * Du musst weniger Programmieren.
    * Du verwendest Standardmittel statt selbstgebackenem Zeugs.
    * Wer berechtigt ist kann leicht ohne dein Zutun geändert werden (vom Chef, Admin, ... -- wer auch immer die Berechtigungen ändern kann).
    * Du hast keinen unsicheren Mist in deinem Programm der vorgibt etwas zu tun was er nicht (ordentlich) tun kann.
    * Jedem Admin sollte klar sein wie sicher oder unsicher deine Lösung ist.


Anmelden zum Antworten