Schadhafter Code im Hauptspeicher

Hallo,

ich bin mir eigentlich ziemlich sicher, dass man trotz Firewall und Antivieren-Software nicht sicher sein kann, dass nicht doch schadhafter Code "auf dem Rechner" aktiv ist. Ich schätze mal da werden mir alle soweit zustimmen. Frage jetzt, wie kann man das herausfinden?

Kurz vorweg: Mit schadhaftem Code meine ich jegliche Art von Code (sagen wir mal Programme), den ich nicht bewusst auf dem Rechner installiert habe. Also eben alles was da nix zu suchen hat.

Ein paar Annahmen:

Wenn sich schadhafter Code auf meinem Rechner befindet und ausgeführt wird, dann muss dieser auch im Arbeitsspeicher meines Rechners aktiv sein oder?

Es gibt Techniken, API-Hooking oder was sonst noch, mit dem man im RAM aktiven Code vor dem Benutzer verbergen kann. Sich also einfach mal den Prozessmanager anzusehen und nach exen zu suchen, von denen man nichts weiß, wird nicht ausreichen um Schädlichen zu entdecken nehme ich an ;)

Wenn das so ist, gibt es vielleicht die Möglichkeit einem geschulten Auge einmal ein Speicherabbild in einer passenden Form zu zeigen, so dass derjenige einmal herausfinden kann, ob da etwas auffälliges zu entdecken ist?

Das nun ein "Speicherabbild" also solches, wie es von Betriebssystemen beim Herunterfahren angelegt wird, sicher nicht sonderlich hilfreich sein dürfte ist mir klar. Aber vielleicht gibt es ja auch Programme die auf einer Ebene ansetzen, die so tief liegt, dass tatsächlich sämtliche aktiven Prozesse aufgelistet werden können, ohne das jemand die Möglichkeit hätte einen bestimmten Prozess zu verstecken?

Oder meint ihr dass das so nicht geht, weil man Code tatsächlich so im Speicher verstecken kann, dass er einfach nicht auffindbar ist?

Oder ist es darüber hinaus möglich Code zur Ausführung zu bringen, der den RAM überhaupt nicht zur Ausführung benötigt?! (Kann ich mir nicht vorstellen, aber bin mir da nicht sicher)

Gruß, IceRage
 
Wenn sich schadhafter Code auf meinem Rechner befindet und ausgeführt wird, dann muss dieser auch im Arbeitsspeicher meines Rechners aktiv sein oder?
Ja.

Es gibt Techniken, API-Hooking oder was sonst noch, mit dem man im RAM aktiven Code vor dem Benutzer verbergen kann. Sich also einfach mal den Prozessmanager anzusehen und nach exen zu suchen, von denen man nichts weiß, wird nicht ausreichen um Schädlichen zu entdecken nehme ich an ;)
Ja.

Wenn das so ist, gibt es vielleicht die Möglichkeit einem geschulten Auge einmal ein Speicherabbild in einer passenden Form zu zeigen, so dass derjenige einmal herausfinden kann, ob da etwas auffälliges zu entdecken ist?
Es gibt Tools, die auch versteckt laufende Programme anzeigen können. Jeder brauchbare Antivirus kann seine heuristische Suche auch auf den RAM anwenden.

Das nun ein "Speicherabbild" also solches, wie es von Betriebssystemen beim Herunterfahren angelegt wird, sicher nicht sonderlich hilfreich sein dürfte ist mir klar. Aber vielleicht gibt es ja auch Programme die auf einer Ebene ansetzen, die so tief liegt, dass tatsächlich sämtliche aktiven Prozesse aufgelistet werden können, ohne das jemand die Möglichkeit hätte einen bestimmten Prozess zu verstecken?
Ja, alles was innerhalb des Kernels läuft oder auf seine Funktionen zum Speicher-Handling Zugriff hat, kann den Speicher auch vollständig durchsuchen.

Oder ist es darüber hinaus möglich Code zur Ausführung zu bringen, der den RAM überhaupt nicht zur Ausführung benötigt?! (Kann ich mir nicht vorstellen, aber bin mir da nicht sicher)
Theoretisch ja, indem man ausschliesslich Caches und CPU-Register als Speicherort verwendet. Diesen Aufwand betreibt aber kaum jemand bei der Entwicklung einer Schadsoftware, da es schwierig wäre sie "Non-Blocking" zu machen, d.h. sie so zu bauen, dass sie trotz Belegung bestimmter CPU-Register oder Caches nicht den anderen Programmen im Weg ist.
 
Theoretisch ja, indem man ausschliesslich Caches und CPU-Register als Speicherort verwendet. Diesen Aufwand betreibt aber kaum jemand bei der Entwicklung einer Schadsoftware, da es schwierig wäre sie "Non-Blocking" zu machen, d.h. sie so zu bauen, dass sie trotz Belegung bestimmter CPU-Register oder Caches nicht den anderen Programmen im Weg ist.

Jetzt wird es interessant: Wie kannst du erzwingen nur im Cache zu liegen? Weil an und für sich hast du auch auf Assembler-Ebene nur die Möglichkeit Speicheradressen zu befüllen, lesen, anzuspringen ... etc. Aber ob eine Zeile im Cache liegt oder nicht ist doch voll und ganz der CPU überlassen?

mfg benediktibk
 
Ich bin auf Hardware-Ebene nicht gerade der x86-Experte, aber irgendwie kann ich mir nicht vorstellen, dass ein BIOS, das volle Kontrolle über die Caches hat (und das ist bei den meisten Laptops und PCs der Fall) nicht dazu genutzt werden kann die Caches direkt zu beschreiben. Ob x86-Caches allerdings Lockdowns unterstützen würde ich nicht beschwören wollen.

Bei ARM weiss ich aber ziemlich sicher, dass ich einen Lockdown eines Caches erzwingen, dann darin einen Force-Write machen und danach die Daten im Cache locken kann. Und ab da wird's dann aber auch für die Schadsoftware kompliziert. Will sie mehrere Zeilen an Daten irgendwo im Cache ablegen, ist das nur über einen Software-Loop realisierbar, der wiederum im RAM erkannt werden könnte.
 
Es geht ja nur darum den Schadcode im RAM zu verbergen. Es spricht nichts dagegen, dass Teile davon im RAM laufen sofern diese nicht als Schadcode erkennbar sind, weil die relevanten Strukturen in den Caches liegen.

Aber deswegen schrieb ich auch, dass es theoretisch möglich ist. Ich wage zu bezweifeln, dass sich irgendwer den Aufwand macht so was zu coden, solange Virenscanner nur Signatur-Scanner sind. Da ist es wesentlich einfacher einen Code zu entwickeln, dessen Signatur noch nicht bekannt ist.
 
Sehr interessant das alles ;)

... dessen Signatur noch nicht bekannt ist.

Wenn ich mir überlege was es so für Kapazitäten im Bereich Informatik gibt, dann habe ich also mit so einem Signatur-Scanner praktisch keine Chance, da jemand der es drauf hat wahrscheinlich unendlich viel schadhaften Code produzieren kann, der so lange nicht von einem Signatur-Scanner entdeckt wird, bis man die entsprechende Signatur der Datenbank des Scanners hinzufügt.

Dann müsste es also einen mindestens ebenso fähigen Fachmann bedürfen ein entsprechendes Speicherabbild angemessen zu analysieren.

Wenn man im Zuge der jüngsten Abhörgeschichte mal überlegt: Bringen die auch schadhaften auf Anwenderrechnern zur Ausführung? Also hat das vielleicht schon einmal jemand beobachtet? Sicher wird schadhafter Code von staatlicher Seite aus nicht als Virus von Virenscannern erkannt oder?
 
Nunja, Geschichten wie den Bundestrojaner kennst du ja vermutlich. Auch Stuxnet war eine Schadsoftware, die "staatlich entwickelt" wurde. Früher oder später fliegt jede Software dieser Art auf, da sie in irgendeiner Form nach Hause telefoniert. Und eine Datenübertragung kann man nicht so einfach verstecken. Daher ist der sinnvollste Weg zum Auffinden von unbekannter Schadsoftware das Tracking der aufgebauten Verbindungen.
 
Passive Covert Channels halten einer tieferen Analyse des Traffics auch nicht stand und sind höchstens gegen "Standard-Scans" und Firewalls/Paketfilter erfolgreich. Entweder hast du einen Storage-Channel (wie der in deinem Beispiel beschreibene), der Header-Informationen manipuliert. Dieser ist durch ein IDS zumeist schon durch simple Protokoll-Validierung erkennbar. Oder du hast einen Timing-Channel. Auch (oder gerade) dieser ist erkennbar, wenn du ein IDS verwendest, das die Reihenfolge und Sendezeitpunkte der Pakete überwacht. Üblicherweise hält das System Pakete nur zurück, wenn der Netzwerk-Buffer voll ist oder wenn ein zuvor notwendiger Handshake noch nicht abgeschlossen ist. Künstlich zurückgehaltene Pakete sind somit leicht zu identifizieren.

Willst du einen "undetectable covert channel" implementieren, müsstest du den Traffic so codieren, dass er für ein untersuchendes Programm noch immer genau so aussieht wie valider Traffic von einem gerade laufenden Programm. Das heisst du musst den Rechner deines Opfers relativ gut kennen und wissen welche Programme dort laufen, so dass du deine Malware entsprechend gezielt einsetzen kannst. Oder du hast eine Malware, die in der Lage ist ihren Channel anhand der aktuell laufenden Prozesse dynamisch anzupassen.

Ich denke da ist es einfacher eine Malware zu entwickeln, die entdeckt, wenn z.B. die Netzwerk-Karte dauerhaft in den Promiscuous Mode geschaltet wird. Das ist ein ziemlich untrügliches Anzeichen dafür, dass ein Sniffer/IDS eingeschaltet wird. ;) Oder man nutzt ein pseudo-intelligentes Botnet, das die Timings innerhalb seiner Kommunikation über ein Message-Bus-System austauscht, so dass Timing-Verschiebungen, die bei einem Scan naturbedingt immer auftreten, erkannt werden und der Bot sofort aus dem Netz ausgeschlossen und ggf. terminiert oder auch einfach temporär deaktiviert wird. Auf die Probleme der temporären Deaktivierung gehe ich hier nicht weiter ein. Ich denke, dass sich jeder denken kann wie hoch das Risiko, bei einer Reaktivierung entdeckt zu werden, ist.
 
Auch eine ISN-Manipulation ist erkennbar indem man eine statistische Auswertung des vom System verwendeten ISN-Generierungsmodels macht. Dadurch können Anomalien bei der ISN-Wahl erkannt werden.
 
Man nehme eine Software, die dafür entwickelt wurde Traffic zu analysieren und Anomalien darin zu erkennen. Nennen wir sie einfach IDS, auch wenn wir sie vielleicht treffenderweise "PRSM-Mod2" oder so nennen sollten. ;) Diese Software ist in der Lage die vom System tatsächlich verwendeten ISN zu erfassen und gleichzeitig auf Basis des gleichen Algorithmus wie das System eine eigene ISN zu generieren. Durch Erfassung der Abstände zwischen der tatsächlich verwendeten und der vom IDS generierten ISN kann das IDS nach einer Weile relativ genau ermitteln in welchem Rahmen sich die nächste ISN des Systems bewegen wird und diese Näherungswerte verwenden um eine "expected ISN" zu erstellen. Eine zu starke Abweichung von diesem Wert deutet auf einen anderen Zufallszahlengenerator hin. Und eine solche Abweichung entsteht immer sobald ein anderer Zufallszahlengenerator verwendet wird.

Würdest du nämlich die beiden Werte (generierte und erfasste ISN) in einem Koordinatensystem darstellen, erhälst du nach einer Weile eine Linie, die sich relativ klar darin abzeichnet. Wird die Software nun noch einfach in die Lage versetzt ihre generierte ISN automatisch der erwarteten ISN anzunähern, generiert sie dir relativ bald ISN, die nur noch minimal von der tatsächlich verwendeten abweichen. Die Linie im Koordinatensystem wird dadurch umso deutlicher.

Traffic-Analyse ist heutzutage nicht mehr so dumm und statisch, wie sie mal war. In der Praxis verwendet man einfach 4 RRDs. Auf der einen werden die tatsächlich verwendeten ISN abgelegt (used ISN = UISN) (neben diversen anderen relevanten Daten wie Bit-Stati etc.), auf der nächsten die generierte ISN (generated ISN = GISN) und auf der dritten RRD legt man eine erwartete ISN ab (expected ISN = EISN). Die EISN ist aber eine Range und keine eindeutige Zahl. Eine Software vergleicht nun einfach die UISN mit der GISN und ermittelt die Abstände (die kommen auf die 4. RRD) zwischen den Zahlen. Die Abstände lassen Rückschlüsse darauf zu welche ISN als nächstes verwendet wird, so dass eine EISN erstellt werden kann (GISN +/- mittlerer Abstand der bisherigen Vergleichsdaten). Mit Anzahl der Datensätze wird die EISN immer genauer, so dass man schon nach relativ kurzer Zeit ein Zufallszahlen-Generierungsmodell des Systems aufstellen kann. Und damit sind auch Abweichungen von diesem Modell ermittelbar.

Aber natürlich ist das auch nicht der einzige Faktor beim Aufdecken von Covert Channels. Es gibt diverse Eigenschaften, die zumeist bei der Implementierung selbiger vergessen werden. Nur mit einer Zufallszahl ist das ja nicht getan. Wer denkt z.B. daran, dass die ISN auch zum Rekey-Counter passen muss? Abweichungen davon lassen sich natürlich problemlos vom IDS berechnen. Welche Covert-Channel-Generator ist in der Lage sein Rekeying-Intervall genau genug an das System anzupassen um das Zurücksetzen des MSB im gleichen Moment zu tun wie das System? Welcher CC-Generator ist in der Lage sein Fragmentierungsverhalten an das des Systems (d.h. an die Geschwindigkeit der Leitung) anzupassen?

Wir sehen: Der Aufwand einen Covert Channel zu verbergen ist weitaus grösser, als es der CCC gern hätte. ;)
 
Alles was ich bis jetzt verstanden habe, ist, dass es wohl für den ambitionierten Hobby-ITler nicht wirklich möglich ist, so eine gecoverte Verbindung zu identifizieren. Nach einer Kochrezept ähnliches Vorgehensweise wird das ja wohl kaum funktionieren oder?

Das einzige was ich bisher gemacht habe, ist, mir einmal mit WireShark ein paar IP Adressen angesehen zu haben, an die mein Rechner Datenpackete verschickt. Zumindst mir ist da nichts ungewöhnliches aufgefallen. Naja wie auch ^^. Ich habe zwar mal einen tracert auf ein paar Adressen versucht, aber woher soll man schon wissen, welche Adressen wirklich mit dem regulären Netzwerkverkehr zu tun haben, und welche möglicherweise in ein BOtnetz oder sonstwo hin verweisen?

Außerde befindet sich die Netzwerkkarte bei der Benutzung mit WireShark ja im promiscuous mode, wie ich eben gelernt habe ^^, was ein Schädling erkennen und für sich nutzen könnte. Ok, ich habe die Argumente gelesen die gegen so eine Technik sprechen, wenn ich auch nicht alles verstanden habe.

Ich will mal so fragen: Was könnte ich denn machen, wenn ich nicht so tiefgreifen mit der Materie vertraut bin wie ihr?
 
Wenn dir Antivirus und Firewall nicht ausreichen, kannst du noch ein HIDS (Host Intrusion Detection System) und ein NIDS (Network Intrusion Detection System) einsetzen. Ersteres überwacht dein System auf Veränderungen, zweiteres informiert dich, wenn ungewöhnlicher Traffic auftritt.

Das sieht dann z.B. so aus:
Code:
  6  123.123.123.123   321.321.321.321     (snort_decoder): Truncated Tcp Options
  5  123.123.123.123   321.321.321.321    BAD-TRAFFIC tcp port 0 traffic
  3  123.123.123.123   321.321.321.321     (snort_decoder) WARNING: TCP Data Offset is less than 5!

In diesem Beispiel informiert das NIDS Snort in einem Alert darüber, dass es Traffic mit ungewöhnlichen TCP-Headern gefunden hat. Der Traffic kommt von der IP 123.123.123.123 und geht zur IP 321.321.321.321. Die erste Zahl in jeder Zeile gibt an wie viele Pakete mit diesen "Fehlern" entdeckt wurden. Die Möglichkeiten eines IDS gehen aber weit über einfaches Prüfen von Paket-Headern hinaus. Sie können genau so auch prüfen ob die Payload eines Pakets den Protokollvorgaben entspricht. Sie können allgemein für die meisten Protokolle die Gültigkeit der übertragenen Daten validieren. Sie sind in der Lage fragmentierte Pakete wieder zusammenzusetzen um ihre Inhalte zu untersuchen, können die statistische Häufigkeit von Fehlern ermitteln und vieles mehr. NIDS sind darauf ausgelegt bekannte Angriffsmuster und sonstige Anomalien im Traffic zu entdecken.

Informationen von einem HIDS hingegen könnten z.B. so aussehen:
Code:
Received From: (honeypot3) 10.2.150.3->/var/log/access.log
Rule: 1003 fired (level 13) -> "Non standard syslog message (size too large)."
In diesem Fall wurde erkannt, dass eine Log-Meldung aufgetreten ist, die grösser als der Durchschnitt der bisherigen Meldungen war. Gleichzeitig wird die "Gefahr" klassifiziert. Auch solche Anomalien können nämlich darauf hinweisen, dass ein Angriff gerade vorbereitet wird, stattfindet oder stattgefunden hat. Ein HIDS kann eigentlich alles überwachen, was auf deinem Rechner vorgeht und diese Vorgänge aufzeichnen. Sei es nun das Laden von Programm-Bibliotheken, das Starten von Programmen, Veränderungen an Dateien oder oder oder. Auf Basis dieser Ereignisse und zuvor definierter Regeln, die festlegen, wie sich das System bei normaler Benutzung verhalten sollte, kann es Alerts generieren, wenn Abweichungen auftreten.
 
Was würdest du dafür an Software empfehlen, die das kann?

Ich muss zu meiner Schande gestehen, dass nur eine normale Fritz Router Firewall habe und keine Antivierensoftware auf dem Rechner laufen habe ^^.

Ich hatte vor langer Zeit mal Zonealarm auf meinem Rechner. Aber die exe hat nach kurzer Zeit immer das komplette System lahmgelegt. Da stand dann immer exe-soundso 50% Systemauslastung.

Außerdem bin ich immer davon ausgegangen, dass Antivierensoftware nicht mal den Namen Wert ist, den sie trägt. Auch wenn da mit irgendwelchen heuristischen Verfahren geworben wird - eine Technik / Virus muss halt immer erstmal bekannt sein, damit eine Antivierensoftware auch ein Mittel dagegen hat (bisschen wie mit Organismen). Bis dahin kann aber schon ein Schaden entstanden sein.

Kurzum, meinst du das es Software gibt Firewall, Antivierenscanner die du empfehlen kannst? Einen Firewall müsste man doch auch auf einem Raspberry PI laufen lassen können oder? Welche Antivierensoftware würdest du empfehlen?

Auf meinem Notebook benutze ich Ubuntu, da mache ich mir recht wenig Gedanken, weil ich linuxbasierte Systeme generell für sicherer halte als Windows. Auf meinen anderen Rechner benutze ich noch Window$ XP. Wäre da vielleicht ein Umstieg auf Window$ 7 sicherer?

Was HIDS und IDS angeht hast du ja glaube ich auch einiges auf deinen Seiten an Informationen. Ich werde mich da erstmal ein bisschen reinlesen, bevor ich da noch Fragen stelle. Das ist nämlich noch ganz neu für mich.
 
Ja ok. Was wäre denn deine Empfehlung für Ubuntu, was Antivierenprogramme und Firewall angeht? Es muss ja nicht unbedingt Debian sein oder?
 
Bevor du nach Antivirus und Firewall für Ubuntu fragst, setze dich mit diesem System bitte erst einmal auseinander. Dann erübrigt sich diese Frage nämlich ganz von allein. ;)
 
Dann gehe ich mal davon aus, dass du solche Software für Ubuntu nicht für nötigt hältst, da es ohnehin so sicher ist, dass es von außen gar nicht angreifbar ist?

Ich weiß zwar von Benutzerrechten, die man in Linux-Systemen sehr genau setzen kann und die auch sehr restriktiv wirken, aber ich habe wirklich nicht die Kapazitäten in jeglicher Hinsicht, mich so Intesiv mit einen Betriebssystem außeinander zu setzen. Ich bin ja kein Kernelhacker oder sowas. Ich bekomme meine Geräte zum Laufen und wenn mal Fehler auftreten muss ich aber auch schon googlen. Ein bisschen Programmieren geht vielleicht auch noch, aber nichts großes. Deswegen weiß ich wie schwer es ist, sich mit Kernelquellen außeinander zu setzen um das System zu verstehen. Das kann ich einfach nicht.
 
Niemand hat was davon gesagt, dass du dir den Kernel anschauen sollst sondern lediglich, dass du dich einfach mal mit Linux grundlegend beschäftigen solltest, bevor du Fragen dazu stellst. Hättest du bei Google nur ein Mal nach 'firewall linux' gesucht, wärst du ziemlich sicher auf Dokument wie Sicherheitskonzepte gestossen und hättest vermutlich auch bereits mitbekommen, dass Linux per se eine recht gute Firewall mitliefert. Diese kann man dann z.B. um ein NIDS wie Snort oder um ein HIDS wie OSSEC erweitern.

Wer sich allerdings Sorgen um versteckten Traffic von Schadsoftware macht, der sollte sich sowieso mit seinem System etwas intensiver auseinandersetzen oder besser gleich die Finger vom Internet lassen.

Grundlegend kannst du davon ausgehen, dass ein korrekt konfiguriertes System erstmal einigermassen sicher ist. Du kannst genau so davon ausgehen, dass kein System einem gezielten Angriff standhalten kann. Im Worst-Case verschafft man sich unbemerkt physischen Zugriff auf deinen Rechner und installiert die Spionage-Software direkt vor Ort. Und wie immer gilt: PEBKAC ist noch immer das grösste Einfallstor, wenn es um das Einschleusen von Schadsoftware geht.
 
Zurück
Oben