Passwörter im Speicher schützen



  • INTER ESSANT schrieb:

    Christoph schrieb:

    ~john schrieb:

    Da sonst es theoretisch möglich ist, daß jemand das Paßwort via RAM-Anforderung lesen könnte (Speicher wird dabei meist nicht gelöscht sondern einfach nur neu zugeteilt)

    Soweit ich weiß, füllen alle aktuellen Linux- und Windows-Versionen angeforderte Speicherseiten mit 0en, bevor ein Programm sie bekommt. Nicht initialisierte Seiten zu liefern wäre auch nicht akzeptabel bei modernen Multi-User-Betriebssystemen, denn es könnten ja auch private Daten von anderen Usern in der Seite stehen.

    Source pls

    Zum Beispiel http://stackoverflow.com/questions/1327261/is-memory-cleared-by-the-linux-kernel-when-brk-is-reduced-then-increased-again , mit Link zum Kernel-Source.

    In der manpage von mmap steht sogar explizit, was passiert, wenn man ein "anonymes" mapping anfordert, d.h. ein mapping ohne Datei dahinter:

    man mmap schrieb:

    MAP_ANONYMOUS
    The mapping is not backed by any file; its contents are initialized to zero.



  • Christoph schrieb:

    MisterX schrieb:

    Idee 2:
    So lange der Hashwert nicht fürs Ent- und Verschlüsseln nicht gebraucht wird, diesen leicht verändert im Speicher halten. (z.B x abziehen).

    Das ist security through obscurity, denn es hängt davon ab, dass der Algorithmus geheim bleibt. Vermittelt ein falsches Gefühl von Sicherheit.

    Da gebe ich dir recht, aber für das 08/15 Scriptkid dürfte es doch reichen oder nicht? Zumal man diesen Wert der abgezogen wird auch bei jedem Programmstart random erzeugen könnte.
    Und im Klartext würde ich das PW eh nicht im Speicher halten, sondern nur als SHA1 Hash.
    100% sicher wirds eh nicht, am Ende kommt einer mit nem Keylogger und der ganze Käse ist ausgehebelt.



  • Sehe ich das richtig, daß es im Prinzip keine weitere Möglichkeit gibt, als zu schauen, daß das PW nach dem Beenden des Programms im Speicher auf jeden Fall überschrieben und auch nicht ausgelagert wird, und daß man sonst auf die Fähigkeiten des OS vertrauen muss, daß niemand anders den Speicher auslesen kann [der dazu nicht qua seines Statuses als root befugt ist]?



  • Wenn jemand admin Rechte hat dann kann er auf dem PC alles tun. Auch im Speicher anderer Prozesse rummachen. Wäre auch irgendwie blöd wenn das nicht ginge, würd mich persönlich ziemlich ärgern wenn ich auf meinem PC nicht tun könnte was ich will. Zu versuchen sich gegen einen Amin zu schützen ist imo der falsche Weg. Besser wäre es zu verhindern dass jemand der nicht soll überhaupt erst solche Rechte bekommt. Aber das wurde hier eh schon mehrmals gesagt...



  • Scorcher24 schrieb:

    Christoph schrieb:

    MisterX schrieb:

    Idee 2:
    So lange der Hashwert nicht fürs Ent- und Verschlüsseln nicht gebraucht wird, diesen leicht verändert im Speicher halten. (z.B x abziehen).

    Das ist security through obscurity, denn es hängt davon ab, dass der Algorithmus geheim bleibt. Vermittelt ein falsches Gefühl von Sicherheit.

    Da gebe ich dir recht, aber für das 08/15 Scriptkid dürfte es doch reichen oder nicht? Zumal man diesen Wert der abgezogen wird auch bei jedem Programmstart random erzeugen könnte.

    Ja, aber genau das ist security through obscurity: Du musst den Algorithmus geheimhalten. Wenn du das Programm open source stellst, was bei Verschlüsselungsprogrammen gar nicht verkehrt ist, wenn man Vertrauen schaffen möchte, dann wird sich jeder fragen "was macht der da für unnötige Berechnungen?".

    Scorcher24 schrieb:

    Und im Klartext würde ich das PW eh nicht im Speicher halten, sondern nur als SHA1 Hash.

    Das geht hier nicht, weil man zum Entschlüsseln von Daten normalerweise das Passwort (bzw. den daraus abgeleiteten Key) im Klartext benötigt.



  • Christoph schrieb:

    Scorcher24 schrieb:

    Und im Klartext würde ich das PW eh nicht im Speicher halten, sondern nur als SHA1 Hash.

    Das geht hier nicht, weil man zum Entschlüsseln von Daten normalerweise das Passwort (bzw. den daraus abgeleiteten Key) im Klartext benötigt.

    Ja genau das ist mein Problem. Und irgendwie frage ich mich wie ich diese Sicherheitslücke "stopfen" kann, da ja sonst das Passwort mit besten Hash-Alogirthmen gesichert wird, aber dann letztlich die ganze Verwendung über "offen" im Speicher liegt.
    Und klar, root kann ein Speicherabbild ziehen, aber warum soll er damit das PW auch sehen dürfen, wenn er ein Fetplattenabbild zieht, sieht er ja irgendwie auch nur den Hash? Oder ist das einfach nicht vergleichbar?



  • Wenn du mit dem Passwort arbeiten willst dann muss es spätestens zum gegebenen Zeitpunkt irgendwann zwangsweise im Speicher liegen, auch wenn das vielleicht nur ganz kurz ist und ganz egal was du sonst alles damit anstellst, ich wüsste nicht wie man das prinzipiell verhindern sollte. Selbst wenn dus mit Assembler oder sonst wie so hinbiegst dass das Passwort nur in den Registern der CPU liegt werden diese ja vom OS bei einem Context Switch irgendwo in den Speicher gesichert. Vielleicht kann man irgendwas machen damit es nur einmalig im Cache liegt und da dann irgendwelche kranken Tricks von wegen Cacheprotokoll oder was weiß Gott was abziehen...rein prinzipiell wüsste ich aber auch da nicht was man da groß machen kann außer Obfuscation. Und am Ende muss zumindest der Maschinencode in die CPU rein und dann komm ich an den ran und kann einfach deinen Algorithmus analysieren und von mir aus zurückrechnen oder was auch immer. 100% Sicherheit gibts da einfach nicht. Wenn der Angreifer physikalisch Zugang zum Rechner hat dann gibt es keinen absoluten Schutz. Selbst wenn du noch soviel Zeit investierst, zumindest irgendeine Seitenkanalattacke wird es immer geben. Und wenn ein Angreifer, wie auch immer, an ein Speicherabbild kommt dann ist es nur eine Frage von Zeit, Geduld, Wissen, Intelligenz, Motivation, usw. des Angreifers und keine Frage der prinzipellen Machbarkeit mehr.



  • Es sei denn du greifst auf solcherlei Technologie zurück: http://en.wikipedia.org/wiki/Trusted_Computing

    MfG SideWinder



  • Auch da kann ein Angreifer die entsprechenden Hardwarekomponenten unter ein Elekronenmikroskop legen und die Ströme messen und was weiß ich. Auch wenn das natürlich kaum wer machen wird, 100%ige Sicherheit ist rein Prinzipiell nicht Möglich.



  • Hmm, naja mal dumm gefragt: Wie machen es Multiplayer Spiele? Da muss ja auch eine gewisse Sicherheit herrschen, vor allem im Bereich MMORPG. Und Blizzard demonstriert ja schön, wie man entgegenwirken kann, wie dem Authenticator der einen Zusatz Key generiert der nur kurz gültig ist. Aber auch hier gibts "Man in the Middle" Angriffe.



  • dot schrieb:

    Auch da kann ein Angreifer die entsprechenden Hardwarekomponenten unter ein Elekronenmikroskop legen und die Ströme messen und was weiß ich. Auch wenn das natürlich kaum wer machen wird, 100%ige Sicherheit ist rein Prinzipiell nicht Möglich.

    Dort geht die Sicherheit - zumindest laut Hersteller - aber soweit, dass eine Attacke länger dauert und kostspieliger ist als die gewonnene Information. Auch RSA-Verschlüsselung ist ja nur solange sicher, solange man nicht genügend Mittel und Zeit hat um die Primfaktorenzerlegung durchzuführen.

    MfG SideWinder



  • Scorcher24 schrieb:

    Hmm, naja mal dumm gefragt: Wie machen es Multiplayer Spiele?

    Ganz einfach: Multiplayer Spiele laufen auf Servern die der absoluten Kontrolle des Hersteller unterliegen. Was auch immer dein Client lokal für Schweinereien macht, für das Spiel zählt das was der Server sagt und der sagt ganz einfach nein wenn dein Client vorgibt mit 1000000 Lebenspunkten und mit 4facher Lichtgeschwindigkeit durch die Gegend zu laufen...



  • sud schrieb:

    Und klar, root kann ein Speicherabbild ziehen, aber warum soll er damit das PW auch sehen dürfen

    Darf er, denn genau das bedeutet "root" bei Linux: root darf alles.

    root könnte z.B. auch einfach alle Tastatureingaben abfangen, die ein normaler User vornimmt. Wenn root das geschickt genug macht, merkt der User davon gar nichts. Auch das ist ein Recht von root. Fazit ist, als User muss man root vertrauen.



  • dot schrieb:

    Scorcher24 schrieb:

    Hmm, naja mal dumm gefragt: Wie machen es Multiplayer Spiele?

    Ganz einfach: Multiplayer Spiele laufen auf Servern die der absoluten Kontrolle des Hersteller unterliegen. Was auch immer dein Client lokal für Schweinereien macht, für das Spiel zählt das was der Server sagt und der sagt ganz einfach nein wenn dein Client vorgibt mit 1000000 Lebenspunkten und mit 4facher Lichtgeschwindigkeit durch die Gegend zu laufen...

    Ich meinte jetzt nur den Passwortschutz. Die anderen Mechaniken sind mir rudimentär bekannt :). Die müssen ja auch sowas wie Sessions implementiert haben bzw das passwort irgendwie abfragen etc.



  • Naja die schicken halt einen Hash des PW zum Server und der prüft ob das PW korrekt ist und fertig. Wenn der Benutzer lokal auf seinem Computer irgendwelche Programme laufen hat die sein PW klauen dann kann ja grundsätzlich mal der Hersteller des Spiels nix dafür. Aber Accountdiebstahl ist ja auch ein Problem in Onlinespielen heutzutage, wobei der Großteil da afaik über Phishing lauft.



  • @Scrocher24: Das Passwort muss nicht während der Gesamten Spielzeit im Speicher liegen, du bekommst bei gültigem Passwort vom Server wahrscheinlich eine Art Session-ID die gültig ist bis du dich wieder ausloggst.

    MfG SideWinder



  • Christoph schrieb:

    sud schrieb:

    Und klar, root kann ein Speicherabbild ziehen, aber warum soll er damit das PW auch sehen dürfen

    Darf er, denn genau das bedeutet "root" bei Linux: root darf alles.

    root könnte z.B. auch einfach alle Tastatureingaben abfangen, die ein normaler User vornimmt. Wenn root das geschickt genug macht, merkt der User davon gar nichts. Auch das ist ein Recht von root. Fazit ist, als User muss man root vertrauen.

    So ein schwachsinn. Seit wann darf "root" alles. Er kann fast ohne einschränkung alles machen. Aber das heißt nicht das er das auch darf!!!!

    Der gesetzesabschnitt dazu ist iwo in meinem Skript. finde ihn grade nicht, aber ich such mal weiter...

    Du darfst ja auch nicht einfach mit WireShark in deinem Firmennetz machen was du willst, nur weil du kannst. Also "root" bist...

    EDIT:
    Hast mal versucht bei unix zurichtigen Zeit ein speicherabbild zu ziehen.
    Wenn dein PW stundenlang im Klartext drin steht bist selber schuld.
    Heißt, wenn wir schon den elegalen weg ansprechen: Root wäre äußert dämlich wenn versucht auf gut glück speicherabbilder zu ziehen wenn er auch einfach nen keylogger nutzen kann. Wenn root grade am pc sitzt wäre es noch dämlicher... Weil dann gibt er das pw ja ein ...



  • Vermutlich sollte ein Kerberos Auth das Problem lösen ?


  • Mod

    @Sqwan: Also ein Stoppschild vor das Passwort setzen und alles ist gut?



  • Nein, aber man muss es nicht unnötig schwer machen. eine gewisse standartsicherheit sollte reichen.

    Passwort halt nur in der benötigten zeit nutzen und sonst nicht. Und den rest der Zeit als hash. Am speicher rum zu pfuschen halte ich nicht für notwendig.
    Ehe ein root den speicher analysiert nutzt er nen keylogger.


Anmelden zum Antworten