Speicher vor anderen Programmen schützen
-
Linux:
Wie kann ich den Speicher meines Programmes (Stack & Heap) vor anderen Programmzugriffen schützen (Speicher auslesen) bzw. geht das überhaupt?
Denn mein Programm verwaltet sensible Daten und diese sollen geschützt sein.mlockall ist schon mal ein guter Ansatz (Damit der Speicher nicht geswapped wird).
Mir ist nur wichtig, dass non-root-Programme den Speicher nicht auslesen können.
(Falls es eine Lösung auch für root-Programme gibt, dann wäre ich auch daran interessiert.)Ich habe gelesen, dass wenn ein Programm als root rennt, können keine non-root-Programme den Speicher vom root-Programm auslesen.
Aber was ist wenn das root-Programm mittels setuid die Rechte freigibt?
-
Wenn du root nicht trauen kannst, dann kannst du sicherheitstechnisch nichts machen.
-
SeppJ schrieb:
Wenn du root nicht trauen kannst, dann kannst du sicherheitstechnisch nichts machen.
Stimmt.
- Was ist mit non-root-Programmen? Können die den Speicher von root-Programmen auslesen?
- Was ist wenn ein root-Programm seine Rechte kurzfristig abgibt (seteuid). Können hier dann non-root-Programme das Zeitfenster ausnutzen und den Speicher auslesen?
-
Also, was nicht geht:
- Dich gegen root schützen
- Etwas was als root läuft als non-root auslesenWas geht:
- Dich gegen andere Prozesse des gleichen Nutzers schützenWas ist wenn ein root-Programm seine Rechte kurzfristig abgibt (seteuid). Können hier dann non-root-Programme das Zeitfenster ausnutzen und den Speicher auslesen?
Wenn ein Prozess Privilegien gewährt bekommt, dann hat er diese Privilegien. Und dann gelten die Regeln von oben.
Guck dir mal an, wie andere sicherheitsrelevante Programme das handhaben, z.B. der ssh-agent.
-
be||!be schrieb:
Was ist wenn ein root-Programm seine Rechte kurzfristig abgibt (seteuid). Können hier dann non-root-Programme das Zeitfenster ausnutzen und den Speicher auslesen?
Mag albern klingen, aber probier's doch einfach mal aus
-
Unter Windows ist "root" durch "SYSTEM" zu ersetzen. Und Administratoren können (über Umwege) Code als "SYSTEM" laufen lassen.
(BTW: ist "root" wirklich der "mächtigste" Account unter Linux? Gibt's da keinen System-Account der mächtiger ist?)
-
hustbaer schrieb:
(BTW: ist "root" wirklich der "mächtigste" Account unter Linux? Gibt's da keinen System-Account der mächtiger ist?)
Die Antwort auf
who is god
ist nicht umsonst, was sie ist. Was hätte das für einen Sinn, wenn root doch das System selbst ändern kann?
-
SeppJ schrieb:
hustbaer schrieb:
(BTW: ist "root" wirklich der "mächtigste" Account unter Linux? Gibt's da keinen System-Account der mächtiger ist?)
Die Antwort auf
who is god
ist nicht umsonst, was sie ist. Was hätte das für einen Sinn, wenn root doch das System selbst ändern kann?Nur dass etwas (deiner Meinung nach) keinen Sinn hätte, heisst ja nicht, dass es nicht trotzdem so ist.
Auf Windows ist es z.B. so.
-
hustbaer schrieb:
SeppJ schrieb:
hustbaer schrieb:
(BTW: ist "root" wirklich der "mächtigste" Account unter Linux? Gibt's da keinen System-Account der mächtiger ist?)
Die Antwort auf
who is god
ist nicht umsonst, was sie ist. Was hätte das für einen Sinn, wenn root doch das System selbst ändern kann?Nur dass etwas (deiner Meinung nach) keinen Sinn hätte, heisst ja nicht, dass es nicht trotzdem so ist.
Auf Windows ist es z.B. so.Nein, auf Windows ist es auch nicht so.
-
Wie kann ich den Speicher meines Programmes (Stack & Heap) vor anderen Programmzugriffen schützen (Speicher auslesen) bzw. geht das überhaupt?
Denn mein Programm verwaltet sensible Daten und diese sollen geschützt sein.Ist der Speicher nicht dank virtuellen Speichermanagements automatisch geschützt?
-
Ist der Speicher nicht dank virtuellen Speichermanagements automatisch geschützt?
nein, von einem Prozess auf dem Du entsprechende Rechte hasst, kannst du den Speicher auslesen und sogar manipulieren.
Geht natuerlich nicht so einfach als wie mit eigenem Speicher und den Sprachmitteln deiner verwendeten HochspracheIst unter windows so, linux/unix sollt aehnlich sein ...
Ciao ...
-
RHBaum schrieb:
Ist der Speicher nicht dank virtuellen Speichermanagements automatisch geschützt?
nein, von einem Prozess auf dem Du entsprechende Rechte hasst, kannst du den Speicher auslesen und sogar manipulieren.
Geht natuerlich nicht so einfach als wie mit eigenem Speicher und den Sprachmitteln deiner verwendeten HochspracheIst unter windows so, linux/unix sollt aehnlich sein ...
Ciao ...
Hab gerade erfahren es gibt /dev/mem! Einfach als root öffnen, zur physikalischen Adresse seeken und losschreiben. Wer braucht sowas? Sieht für mich irgendwie aus wie ein Hack der übelsten Sorte.
-
mmazal schrieb:
Hab gerade erfahren es gibt /dev/mem! Einfach als root öffnen, zur physikalischen Adresse seeken und losschreiben. Wer braucht sowas? Sieht für mich irgendwie aus wie ein Hack der übelsten Sorte.
das ist ein Grundprinzip von Linux: alles ist eine Datei
Irrsinnig praktisch, weil du dich nicht durch irgendwelche Dokus auf der Suche nach einer passenden Systemschnittstelle durchforsten musst. So kannst du einfach mit den bekannten Tools deine Festplatte 1:1 sichern, Hardwareparameter ändern oder Speicher auslesen
-
zwutz schrieb:
mmazal schrieb:
Hab gerade erfahren es gibt /dev/mem! Einfach als root öffnen, zur physikalischen Adresse seeken und losschreiben. Wer braucht sowas? Sieht für mich irgendwie aus wie ein Hack der übelsten Sorte.
das ist ein Grundprinzip von Linux: alles ist eine Datei
Irrsinnig praktisch, weil du dich nicht durch irgendwelche Dokus auf der Suche nach einer passenden Systemschnittstelle durchforsten musst. So kannst du einfach mit den bekannten Tools deine Festplatte 1:1 sichern, Hardwareparameter ändern oder Speicher auslesen
Ja das mir dem alles-ist-eine-datei kenne ich. Ich kannte nur bis vor kurzem /dev/mem nicht.
Ich versteh nur nicht, wieso man direkt auf den Speicher and zwar auf alles und mit Schreibrechten und _gesamten_ Adressbereich zugreifen will? Geht mir nicht in den Kopf. Kann mir kein sinnvolles Stück nicht-schädlicher-Software vorstellen, was sowas benutzt. Für irgendwelche DMA Sachen kann man doch spezielle Device-Dateien zur Verfügung stellen, mit denen man nur auf nen bestimmten Adressbereich zugreifen kann.
-
be||!be schrieb:
Wie kann ich den Speicher meines Programmes (Stack & Heap) vor anderen Programmzugriffen schützen (Speicher auslesen) bzw. geht das überhaupt?
Nein, ich glaube nicht das dies möglich ist.
-
Ich versteh nur nicht, wieso man direkt auf den Speicher and zwar auf alles und mit Schreibrechten und _gesamten_ Adressbereich zugreifen will?
Jemand ist in dein System eingebrochen, das RootKit versteckt sich erfolgreich und kann nicht ueber die die normalen Systemaufrufe ausfindig gemacht werden. Fuer Spurensicherung oder zur Analyse kann der Hauptspeicher so einfach in eine Datei geschrieben werden.
-
Wie kann ich den Speicher meines Programmes (Stack & Heap) vor anderen Programmzugriffen schützen (Speicher auslesen) bzw. geht das überhaupt?
Nein, ich glaube nicht das dies möglich ist.
Sagen wir mal so: nicht direkt.
Wenn Du deinen Kritischen Anteil aber in ein externen Prozess auslagerst, den mit entsprechenden Privilegien laufen laesst, das der Normale user nicht draufkann ... erledigt halt das BS dann fuer dich.
Problem ist der Datenaustausch zwischen dem Programm im User bereich und dem im Ausgelagerten, das muss dann alles ueber IPC gehen -> aufwendiger.
Du brauchst dann aber auch immer hoeher priviligerte rechte, also zum installieren, und den Prozess starten zu lassen. Unter Linux und Windows geht das mit den Diensten / daemons ...
Meist, wenn ein Programm nen Dienst irgendwo installiert, obwohl ned offensichtlich ist, wozu es den braucht ... will es sich vor eben so speicherzugriffen schützen, oder selber Zugriff auf anderer Programme ressourcen (Speicher) haben, ohne das du es immer expliziet als Admin / root starten musst.
Nicht nur nützliche software nutzt das ...
Ciao ...
-
knivil schrieb:
Ich versteh nur nicht, wieso man direkt auf den Speicher and zwar auf alles und mit Schreibrechten und _gesamten_ Adressbereich zugreifen will?
Jemand ist in dein System eingebrochen, das RootKit versteckt sich erfolgreich und kann nicht ueber die die normalen Systemaufrufe ausfindig gemacht werden. Fuer Spurensicherung oder zur Analyse kann der Hauptspeicher so einfach in eine Datei geschrieben werden.
Dann reicht doch readonly, oder ein syscall á la write_ram_to_disk().
-
mmazal schrieb:
Dann reicht doch readonly, oder ein syscall á la write_ram_to_disk().
Deine Moeglichkeiten kuenstlich zu limitieren ist dumm. Man kann ja ueber Umwege immer direkt auf den Physikalischen RAM zugreifen wenn man die noetigen Rechte hat. Was genau spricht gegen ein Standardisiertes Interface dafuer?
-
Und wie planst du im Usermode eine virtuelle in eine physikalische Addresse umzurechnen?
Und was wenn der Speicher geswappt ist?