Exploits via JPG Bilder im Umlauf

Manchmal machen es einem den Verbrecher besonders einfach, nicht auf Ihre Masche hereinzufallen. Wer als Deutscher sowas in der Email hat:

Chinesische Emailklickt gar nicht erst auf die Grafik, die im Anhang drin ist drauf, sondern löscht die Mail gleich.

Trotzdem sollten alle Leser auf der Hut sein, denn im JPEG2000 Decoder diverser Anwendungen und Betriebssysteme steckt ein schwerer Fehler, der es dem Angreifer erlaubt, Code auf dem PC des Opfers auszuführen, alleine durch das Ansehen von veränderten Bildern.

Wer im obigen Bild genau hingesehen hat, der hat unten das Attachement gesehen: „…. .jpg“

Ausschnittvergrößerung

Inhaltlich hatte die Spam nichts zu bieten, spaßeshalber habe ich den Text mal übersetzen lassen:

您好:

敝司為保健食品品牌商,敝司優秀的研發團隊研發出一支百億活性益生菌粉劑,且與擁有HACCP/ISO22000雙項國際食品安全管理系統以及國內首批通過TQF之生技大廠配合,不論是產品原料,配方,生產品質均優良

Hallo:

Geräumige Sekretär für Gesundheit Lebensmittel-Marken, geräumige Sekretär hervorragende F & E-Team entwickelte eine zehn Milliarden aktiven Probiotika, und mit dem Besitz von HACCP / ISO22000 Dual internationalen und nationalen Lebensmittelsicherheit-Management-System durch die erste Charge von komplexen Biotech-Riese TQF , ob Rohstoffe, Formulierungen, die Produktionsqualität sind ausgezeichnet

Kommt nur Gebrabbel raus. Kein Wunder daß übersetzte Spams so leicht zu erkennen sind 😉

Also, wie immer, nicht Lesen, sondern ab in die Tonne damit.

CVE-2016-7543: gravierende Schwachstelle in Bash < 4.4

Durch eine fehlerhafte Auswertung von Umgebungsvariablen, kann ein lokaler Angreifer beliebigen Code als Root ausführen.

Wichtig sind zwei Parameter:

A) Er muß die Umgebungsvariablen beeinflussen aka. setzen können.

B) Er muß ein Programm starten können, daß Root gehört und das „+s“ (SetUID) Flag hat.

Mehr Infos Link: http://seclists.org/oss-sec/2016/q3/617

Wer ist betroffen ?

Betroffen ist u.a. die gesamte Fedora Palette:

Red Hat Fedora 23
Red Hat Fedora 24
Red Hat Fedora 25

Es dürften aber alle, die Bash < 4.4 einsetzen von dem Problem betroffen sein und betrifft wohl jeden Desktopnutzer.

Warum melde ich das heute, ist doch nur eine Sicherheitslücke unter vielen ?

Ohne Bashing betreiben zu wollen, aber im OSBN tauchte heute folgender Beitrag auf :  Defektes Piwik nach Update auf 2.16.3

Kurzfassung: Weil Piwik (Webanalysesoftware wie Google Analytics) plötzlich nach einem Update  500er Fehler geworfen hat, entfernte der Serverbetreiber einfach Kurzerhand die paar Restsicherheitsmaßnahmen des Apachewebservers und erlaubte es dem Piwik unnötige und sehr gefährliche Apache-Directiven in der .htaccess  auszuführen. (Wie ich grade gesehen habe, ist mein Protest auf fruchtbaren Boden gefallen und er hat es korregiert 😀 )

Hintergrund des Protestes ist, daß mit der Anweisung „AllowOverride All“ in einer Htaccess auch AddHandler und Action Anweisungen erlaubt sind.  Mit denen kann u.a. das machen :

AddHandler php-script .php .pl .rb .py .exe .cgi .sh 
Action php-script /cgi-sys/cgiwrap

Mit „/cgi-sys/cgiwrap“, was ein CGIWrapper wie FastCGI oder ein Eigenbau wie bei uns sein kann, sorgt der Webserverbetreiber normalerweise dafür, daß Prozesse als User und in einer Chroot ausgeführt werden, statt als Apachebenutzer und mit Zugriff auf “ / „. Kann ich die Optionen als Angreifer frei setzen, kann ich eigene Kommandos statt des Cgiwrappers ausführen und damit auch außerhalb der Chrootumgebung. ( Klar das Ausführen von Programmen geht beim Webangriff auch anders, gehen wir mal davon aus, daß das der einzige Weg wäre).

Wenn ich eigene Kommandos ausführen kann, kann ich obige Schwachstelle ausnutzen und Root werden. Da die obige Schwachstelle der Bash darauf beruht, daß man eine SETUID Programm ausführen muß und in einer CHROOT keine SetUID Programme von Root sind, weil es keinen Root User gibt(der ist da prinzipbedingt unnötig), kann man trotz verwundbarer Version von Bash, den Angriff nicht durchführen.  Kann ich aber den Wrapper umgehen und im Realsystem arbeiten, finde ich auch Root-SetUID Programme und der Hack gelingt.

Und deswegen trägt man in seinen Vhost das hier ein : „AllowOverride AuthConfig Indexes Limit FileInfo“ und nichts anderes.

So tragen verschiedene Mechanismen dazu bei, daß ansonsten verwundbare Systeme doch nicht geknackt werden. Die Bash braucht man oft auch in der Chroot, außer man hat keine generelle Hostingumgebung, sondern läßt da genau eine Sache drin ablaufen, was auch legitim wäre.

 

Directcopy mit SSH

Für alte SSH Hasen ist es nichts Unbekanntes, daß man von einem dritten PC aus, direkt Files zwischen zwei anderen SSH-Servern hinundher kopieren kann. Dazu muß lediglich zwei vollständige Logins angeben:

scp user@server1:/path/foo user@server2:/path/

Solange man die schwache Passwortauthentifizierung benutzt, bekommt man zwei Abfragen zu den Passwörtern der beiden Zugänge. Nachvollziehbar, weil Server 1 das Passwort für Server 2 nicht kennt.

Was aber, wenn man das nicht mehr benutzen kann, weil man sich nur noch mit Key authentifizieren kann ?

Der erste Server, dem man das Kommando zum Kopieren von Daten gibt, akzeptiert klaglos den Schlüssel den unser SSH-Agent ( das ist der Gnome-Keyring-Manager der bei Euch auf dem Desktop läuft ) zur Verfügung stellt. Damit kann man zwar das Kopieren starten, wird sofort ausgebremst, weil Server 1 das Passwort von Server 2 wissen will.

Wenn Server 2 jetzt auch nur noch Keys akzeptiert, weil die PasswortAuth im SSHD deaktiviert wurden, und das solltet Ihr immer einstellen:

PermitRootLogin without-password

Dann habt Ihr ein Problem, denn den nötigen Key kann man nicht vom heimischen PC zum ersten Server senden und dann zur Auth bei Server 2 nutzen.  Um das zu umschiffen gibt es eine unschöne Lösung, die „mal“ geht, wenn es sich um wenige Daten handelt: die Option “ -3 “ (Minus Drei) .

Diese Option sagt SCP , daß es die Daten erst zum eigenen PC überträgt und dann erst zum Server 2. Man kann also nicht mehr von einem Directcopy reden. Am spart sich so lediglich, daß die Dateien erstmal im Temp-Ordner vom System landen und später von Hand gelöscht werden müssen. So gesehen, macht es den Kopierprozess schon einfacher.

Die Lösung mit den Bauchschmerzen

Das es SSH-Agenten gibt, hatte ich ja schon erwähnt. Auf einem normalen Server kann man das Tool auch mit genau dem Namen starten : ssh-agent . Das Programm installieren wir auf Server 1 und rufen es auf. Es gibt uns einige Umgebungsvariablen aus :

#!/bin/bash
SSH_AUTH_SOCK=/tmp/ssh-tqJtR00AWwOq/agent.2040; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2048; export SSH_AGENT_PID;

Die müssen wir z.B. mit „export“ aktivieren, damit ssh den ssh-agent findet. Das obige Beispiel ist aus einem kleinen Script, daß beim Starten der Root-Shell ausgeführt wird. Damit ist man dann als Root automatisch an den ssh-agenten gebunden und muß sich nicht mehr um diese Details kümmern. Da man dem ssh-agent sagen kann, wie lange die Authentifizierungsdaten gecached werden sollen, kann man z.B. den ganzen Tag ohne Eingabe von Passwörtern für Keys arbeiten.

Auszug aus der /root/.bashrc

# Source ssh user agent
if [ -f /root/.sshagent ]; then
        .  /root/.sshagent
fi

Damit eröffnet sich eine Möglichkeit, die Daten von Server 1 auf Server 2 direkt zu kopieren, ohne schwache Passwörter benutzen zu müssen.  Man aktiviert also auf dem Server 1 den RSA/DSA – Schlüssel/key  für Server 2 im ssh-agent und kann dann mit SCP den ganzen Tag Aufträge verteilen.

ssh-add -i /path/foo/key.rsa

Wenn man Keys nutzt, sollte der jeweilige Key noch mit einem Passwort gesichert sein, damit nicht jeder den Key, so er denn erbeutet wurde, benutzen kann.

Und wieso Bauchschmerzen ?

Wenn man vernünftig Arbeiten will, muß der Agent die Authdaten mal min. für einen Arbeitstag cachen. Je länger desto mehr Bauchschmerzen sollte man bekommen, denn in der Zeit könnte jeder, der auf dem Server root wird, sich ungestört in allen Systemen einloggen oder Daten kopieren, zu denen der Schlüssel Einlass gewährt. Der Vorgang das einer Root wird, ist natürlich schon Horror pur, aber wenn die ganze Serverfarm betroffen ist, also wer bei dem Gedanken keine Bauchschmerzen bekommt, dem kann man nicht mehr helfen.

Wenn so ein Server sicher ist, braucht man natürlich keine Bauchschmerzen haben, aber bei den vielen Bugs die in allem möglichen drin ist…. puhh.. Ein bisschen Angst schwingt immer mit. Das mich keiner falsch versteht, ich liebe meinen ssh-agent, aber ich nutze ihn nur, wenn es unbedingt sein muß 🙂

Der logistische Teil

Der ssh-agent müßte auf allen Servern laufen und dort den Schlüssel aktiviert haben, von dem Daten irgendwohinanders kopiert werden sollen. Das kann im Detail recht aufwendig werden, wenn man nicht überall den gleichen Key benutzt.

Das es keine so gute Idee ist, überall den gleichen Key in jede Richtung zu benutzen, sollte Euch klar sein.