Forum: PC-Programmierung Zufällig generiertes OS?


von Bodo Bodenlos (Gast)


Lesenswert?

Hallo,

ist es möglich als Schutz vor backdoors etc ein zufällig generiertes 
operating system einzusetzen?

Mit zufällig ist gemeint, im Quelltext Systemparameter (i.e. 
Einsprungadressen, namen der shared libraries, addressmapping, device 
identifiers etc) der API per Zufallsgenerator zu setzen, und die 
Quelltexte der Anwendungsoftware automatisiert anzupassen. Fremdsoftware 
dürfte es dann schwerfallen das system über die API zu steueren bzw. 
auszuspionieren (Screenshots ziehen). Gibbets da schon eine 
Linux-Baukasten/Distri?

MfG, B.B.

von Lukas K. (carrotindustries)


Lesenswert?

Der Adressraum wird schon bei manchen Systemen verwürfelt: 
http://de.wikipedia.org/wiki/ASLR

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Hallo Bodo,

Die Einsprungaddressen per Zufallsgenerator zu setzen wäre toll.
Aber der Linker wird Dir einen Strich durch die Rechnung machen.
Den Sourcecode zu verwürfeln wird vom Compiler wieder ausgeglichen.
Dieser Ansatz ist also zum Scheitern verurteilt.

Distri-Baukästen gibts wie Sand am Meer.
Ich selber verwende Gentoo und compilier alles selber.
Wenn Du die CFLAGS etwas "unkonventionell" setzt, hast Du von der Seite
nur eine kleine Gefahr.

Es bleibt aber immer noch das Problem, wenn der eingeschleuste Code
eine "NOP-Rutsche" enthält.

Es steht und fällt die Systemsicherheit also mit der Aktualität der
eingesetzten Pakete.

Das ist bei Gentoo aber hervorragend.

Gruß

Olaf

von Peter II (Gast)


Lesenswert?

zum schluss hast du aber einen Interpreter wie Perl laufen und schon 
kann es ein virus in Perl geben.

von pv (Gast)


Lesenswert?

Bodo Bodenlos schrieb:
> ist es möglich als Schutz vor backdoors etc ein zufällig generiertes
> operating system einzusetzen? Mit zufällig ist gemeint, im Quelltext
> Systemparameter (i.e. Einsprungadressen ...

OpenBSD setzt wo imemr möglich zufallsgenerierte Werte im Betrieb ein.

Beispielsweise läßt sich die Einsprungadresse auf dem CPU-Stack nicht 
vorhersagen, weil vor jeder Einsprungadresse ein Stack-Segment von 
zufällig erzeugter Länge liegt.

Das Ausnutzen etwaiger Exploits wird deutlich erschwert.

von Jasch (Gast)


Lesenswert?

Bodo Bodenlos schrieb:
> Hallo,
>
> ist es möglich als Schutz vor backdoors etc ein zufällig generiertes
> operating system einzusetzen?

Na ein zufällig generiertes System wird wohl auch nur zufällig 
funktionieren... ;-)

> Mit zufällig ist gemeint, im Quelltext Systemparameter (i.e.
> Einsprungadressen,

Trivial für die meisten Sachen, z.B. wenn Du Sachen wegkonfigurierst 
ändern sich viele Adressen.

Ausser die natürlich die per Definition bekannt sein müssen - die 
Einsprungadressen eben, die zu ändern ist richtig Arbeit.

> namen der shared libraries,

Sehr schwierig - man müsste sämtliche Software anpassen, in Makefiles 
oder SW die dlopen() etc. benutzt stehen die Namen drin.

Macht auch Bugreports und andere Kommunikation, ähh, interessant, auf 
eine sehr interessante Art und Weise natürlich.

> addressmapping,

Standardfeature moderner OS. Man sollte 64Bit benutzen damit das 
vernünftig funktioniert.

> device identifiers etc)

Kannst Du zumindest bei Linux im Prinzip machen, wäre kein Spass - wenn 
/dev/null auf einmal /dev/discard heisst hast Du eine Menge Probleme zu 
lösen.

Die unterliegenden Device-IDs bleiben aber weitgehend fest.

> der API per Zufallsgenerator zu setzen, und die
> Quelltexte der Anwendungsoftware automatisiert anzupassen.

Ja, nun, das ist genau der wirklich schwere Teil der Aufgabe...

Könntest Du sowas zuverlässig machen würdest Du ziemlich sicher 
Millionär oder Milliardär damit werden.

> Fremdsoftware
> dürfte es dann schwerfallen das system über die API zu steueren bzw.
> auszuspionieren (Screenshots ziehen).

Ähhh, das habe ich jetzt nicht verstanden, Screenshots? Uuhhh, dieses 
Trojanerteil?

Unterschätze nicht die Fähigkeiten eines Angreifers, immerhin stehen ja 
die neuen Devicenamen etc. notwendigerweise in den neuen Binaries (und 
also im Speicher auch) irgendwo drin. Hat der Code Sicherheitslücken 
hilft das alles nicht viel.

> Gibbets da schon eine Linux-Baukasten/Distri?

Schau Dir mal "Linux from Scratch" (LFS) an, ist Linux auf die harte 
Tour.

von Bodo Bodenlos (Gast)


Lesenswert?

>> Fremdsoftware
>> dürfte es dann schwerfallen das system über die API zu steueren bzw.
>> auszuspionieren (Screenshots ziehen).
>
> Ähhh, das habe ich jetzt nicht verstanden, Screenshots? Uuhhh, dieses
> Trojanerteil?

Die Grundidee ist die Programmierschnittstelle des Betriebssystem die 
jede Software benutz automatisiert so zu verändern, das ebenfalls jede 
Software die auf dem system läuft und nicht direkt auf die Hardware 
greift unangepasst nicht aufs Betriebssystem/Treiber zugreifen kann. 
Will die Software also OS oder treiberroutinen nutzenum die 
Bildschirmgröße zu ermittel, und das angezeigte bitmap im Filesystem 
zwischenzuspeichern (screenshot anlegen), funktioniert das nicht da 
diese routinen nicht wie beieinem Standardsystem aufgerufen werden. Ganz 
old school gesprochen, im DOS werden alle Software Intterrupts 
individuell verbogen, (in Quelltext des OS) , dann muss die gesamte 
Anwendungssoftware darauf angepasst werden.

anderes Beispiel als Pfadtrenner wird statt "/"  "%" oder ein anderes 
zufällig gewähltes Zeichen verwendet. (Ich weiss das ist wenig 
praktikabel, soll hier nur als Beispiel dienen)

>
> Unterschätze nicht die Fähigkeiten eines Angreifers, immerhin stehen ja
> die neuen Devicenamen etc. notwendigerweise in den neuen Binaries (und
> also im Speicher auch) irgendwo drin. Hat der Code Sicherheitslücken
> hilft das alles nicht viel.

Der Angreifer muesste aber seine Soft individuell anpassen, kann also 
keine Massenangriffe.

MfG,

von Robert L. (lrlr)


Lesenswert?

natürlich geht das,
nur ist es nicht praktikabel, weil du dann ja erst jahrelang die 
software anpassen müsstest, bis sie überaupt läuft..

und wenn du diese anpassungen irdgendwie automatisierst, hast du dein 
sicherheitskonzept auch schon wieder ausgehebelt..

von oszi40 (Gast)


Lesenswert?

Solange das OS NICHT mit der Außenwelt in Kontakt tritt werden kaum 
Probleme auftauchen. Daher glaubte man z.B. NT ohne Netzwerkkarte 
relativ "sicher" :-)

Sobald jedoch ein Speicherplatz oder Systemordner zur Kommunikation mit 
anderen Programmen oder der Tastatur gebraucht wird, ist die Sache schon 
fraglich.

von Jasch (Gast)


Lesenswert?

Bodo Bodenlos schrieb:
> old school gesprochen, im DOS werden alle Software Intterrupts
> individuell verbogen, (in Quelltext des OS) , dann muss die gesamte
> Anwendungssoftware darauf angepasst werden.

Und genau da ist das Problem.

>> Unterschätze nicht die Fähigkeiten eines Angreifers, immerhin stehen ja
>> die neuen Devicenamen etc. notwendigerweise in den neuen Binaries (und
>> also im Speicher auch) irgendwo drin. Hat der Code Sicherheitslücken
>> hilft das alles nicht viel.
>
> Der Angreifer muesste aber seine Soft individuell anpassen, kann also
> keine Massenangriffe.

Das könnte ein gefährlicher Irrtum sein...

Szenario: original steht irgendwo in einem vorhandenen Standardprogramm, 
sagen wir /bin/bash, der Device-Name "/dev/null" drin, an einer 
bekannten Stelle.

Geändert steht dort jetzt "/foo/ball", aber natürlich an derselben 
Stelle.

Wie schwer ist es also für die Angreifersoftware in /bin/bash 
nachzuschauen wie das Device nun heisst, root oder so braucht sie dafür 
nicht? ;-)

Und natürlich kann der Angreifer da noch wesentlich cleverere Methoden 
benutzen. Hach, vor einer Weile gab es z.B. mal ein Paper das beschrieb 
wie man Crypto-Schlüssel in Binaries findet - weil die sich halt 
statistisch von Normaldaten unterscheiden, cooles Zeug. Usw. usf.

Lies mal über "security by obscurity" und Kerckhoff-Prinzip nach.

von Bodo Bodenlos (Gast)


Lesenswert?

>Das könnte ein gefährlicher Irrtum sein...

>Szenario: original steht irgendwo in einem vorhandenen Standardprogramm,
>sagen wir /bin/bash, der Device-Name "/dev/null" drin, an einer
>bekannten Stelle.

>Geändert steht dort jetzt "/foo/ball", aber natürlich an derselben
>Stelle.

>Wie schwer ist es also für die Angreifersoftware in /bin/bash
>nachzuschauen wie das Device nun heisst, root oder so braucht sie dafür
>nicht? ;-)

Gerade setzt doch gerade die defensiv-maßnahme : individuelles OS an, 
die Angreifersoft benötigt zum nachschauen die Betriebssystenroutinen 
fopen fseek etc.. Die diese software aber nich aufrufen kann, da sie 
nicht für dieses System gelinkt wurde. Die Angreifesoftware wäre in 
einer ähnlichen Situation wie ein Windows-maus nutzer, der plötzlich vor 
einem Amiga/Atari/C64 ohne maus steht und dort eine datei kopieren soll. 
Die Tastatur ist natürlich in Suaheli mit kyrillischen zeichen 
beschriftet.

>Lies mal über "security by obscurity" und Kerckhoff-Prinzip nach.
Das hilft mir nicht weiter beim Entwurf eines übertrieben gesagt 
OS-Baukasten. Ich werde mich wohl eher über Linker und Load/Execute 
systeme schlau machen.


Bodo Bodenlos schrieb:
>> old school gesprochen, im DOS werden alle Software Intterrupts
>> individuell verbogen, (in Quelltext des OS) , dann muss die gesamte
>> Anwendungssoftware darauf angepasst werden.

>Und genau da ist das Problem.
Nein es ist kein Problem beim dem geschilderten beispiel ein paar Zeilen 
zu modifizieren. Tauschen der Interrupt für filelesen und file schreiben 
(AH=0x39 resp. AH=0x40) die Subroutinenummern, ist nur der Quelltext 
(z.B. der vom C-Compiler erzeugte ASM-Code nach dem entsprechenden 
API-Aufruf zu durchsuchen und dort auszutauschen. da es mindestens 
hundert verschiedene Servicenummer gibt, muss der Angreifer alle 
Kombinationen dieser einen Testprogramm schreiben und übersetzen um 
dieses anzugreifen.

ferner muss man eben nicht alle Anwendungen anpassen, sondern nur die 
Stelle (Linker?) bei der die modifizierten OS-Calls angesprochen werden.
Gruß

von Jasch (Gast)


Lesenswert?

Bodo Bodenlos schrieb:
>>Das könnte ein gefährlicher Irrtum sein...
>
>>Szenario: original steht irgendwo in einem vorhandenen Standardprogramm,
>>sagen wir /bin/bash, der Device-Name "/dev/null" drin, an einer
>>bekannten Stelle.
>
>>Geändert steht dort jetzt "/foo/ball", aber natürlich an derselben
>>Stelle.
>
>>Wie schwer ist es also für die Angreifersoftware in /bin/bash
>>nachzuschauen wie das Device nun heisst, root oder so braucht sie dafür
>>nicht? ;-)
>
> Gerade setzt doch gerade die defensiv-maßnahme : individuelles OS an,
> die Angreifersoft benötigt zum nachschauen die Betriebssystenroutinen
> fopen fseek etc.. Die diese software aber nich aufrufen kann, da sie
> nicht für dieses System gelinkt wurde.

Wenn Du soweit gehen willst/kannst stimmt das (fopen und Freunde sind 
übrigens aus der C RTL und nicht aus dem OS).

Denk dran dass Du auch den Syscall-Mechanismus des OS ändern musst - 
sonst ruft die Malware die Syscalls einfach direkt auf. Unter Linux z.B. 
würde das bedeuten statt INT 80 einen anderen zu nehmen und Sachen wie 
Sysenter (die man nicht umbiegen kann) ganz abzuschalten. Klingt nach 
Spass.

>>Lies mal über "security by obscurity" und Kerckhoff-Prinzip nach.
> Das hilft mir nicht weiter beim Entwurf eines übertrieben gesagt

Hmm, ich denke doch, zumindest konzeptionell.

Die zumindest in der Theorie bessere Lösung wäre ein OS wo der Angreifer 
den Code haben kann und trotzdem nichts machen kann. Man darf ja noch 
träumen... ;-)

> OS-Baukasten. Ich werde mich wohl eher über Linker und Load/Execute
> systeme schlau machen.

Ja, die musst Du natürlich auch verändern, vielleicht sogar zusammen mit 
dem Binärformat.

von Bodo Bodenlos (Gast)


Lesenswert?

Jasch schrieb:
> Die zumindest in der Theorie bessere Lösung wäre ein OS wo der Angreifer
> den Code haben kann und trotzdem nichts machen kann. Man darf ja noch
> träumen... ;-)

Doch, doch das ist mit zufällig generierten OS gemeint. Die Sourcen darf 
er gerne haben, aber eben nicht die Parameter (Header)-Datei in der 
steht wie die sys-Calls neusortiert wurden. Das wäre dann der Schlüssel. 
Bei jeder Installation wird zufällig eines 
Speichermapping/INT-Verteilung/etc Konzept/liste erstellt, in die 
erwähnte header-Datei geschrieben, dann alles kompiliert und die 
headerDatei "fern-gelagert" (Falls Anwendersoft für dieses System 
nachcompiliert werden sollte). Den Compiler etc sollte man natürlich 
auch nicht auf dem System lassen.

MfG,
B.B.

von Jasch (Gast)


Lesenswert?

Bodo Bodenlos schrieb:
> Jasch schrieb:
>> Die zumindest in der Theorie bessere Lösung wäre ein OS wo der Angreifer
>> den Code haben kann und trotzdem nichts machen kann. Man darf ja noch
>> träumen... ;-)
>
> Doch, doch das ist mit zufällig generierten OS gemeint. Die Sourcen darf
> er gerne haben, aber eben nicht die Parameter (Header)-Datei in der
> steht wie die sys-Calls neusortiert wurden. Das wäre dann der Schlüssel.

Hmm, OK, so kann man das sehen.

Wobei ich eher ein OS meinte wo die Sicherheitsmechanismen so stark sind 
dass der Angreifer auch bei Kenntnis der Parameter oben nichts machen 
kann. Keine Bugs ist natürlich zwingende Voraussetzung.

Sehr utopisch, schon klar.

Wobei Deine Variante ein Problem haben müsste: wenn es Sachen wie Buffer 
Overflows gibt könnte der Angreifer Code einschleusen der die Syscalls 
selber nicht mehr wissen muss - weiss ja sein "Gastgeberprozess".

Uuhhhh, funktioniert nicht dieses Staatstrojaner-Ding so ähnlich, halt 
per DLL Preload oder sowas statt Overflow? Unter Linux hiesse das dann 
LD-PRELOAD.

Ich glaube nicht dass man nur mit Syscalls verwürfeln auskommen kann.

von Uhu U. (uhu)


Lesenswert?

Jasch schrieb:
> Ich glaube nicht dass man nur mit Syscalls verwürfeln auskommen kann.

Das sehe ich auch so. Jeder Interpreter bietet die Möglichkeit, die 
Verwürfelung zu umschiffen. Ansonsten müßten sich Eindringlinge nur um 
bekannte Programme als Einfallstor kümmern - die kennen ja die Syscalls.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.