www.fabiankeil.de/blog-surrogat/2006/02/24/anonym-os.html

Anonym.OS kurz vorgestellt

[Screenshot des Anonym.OS-Desktops: Rotes verktorisiertes Hintergrundbild mit drei an getrennten
     Tischen sitzenden Personen, eine maskierte hat einen Laptop vor sich.] Anonym.OS ist eine von vom Projekt kaos.theory herausgegebene Live-CD auf OpenBSD-Basis.

Sie wurde mit dem Ziel entwickelt, sicheres und anonymes Surfen aus unsicheren Netzen zu ermöglichen.

Unverschlüsselter Netzwerkverkehr in Funknetzwerken kann problemlos mitgelesen werden, auch in kabelgebundenen Netzen ist der Verkehr vor einem passend sitzenden Angreifer nicht sicher.

Anonym.OS tunnelt höhere Protokolle daher über Tor. Der Verkehr wird verschlüsselt über regelmäßig wechselnde Rechner geleitet und erst beim Verlassen des Tor-Netzes wieder entschlüsselt. Ein lokaler Angreifer sieht nur noch, dass Anonym.OS Kontakt mit Rechnern aus dem Tor-Netzwerk aufnimmt, kann den Verkehr aber nur noch verschlüsselt lesen.

Status Quo

Tor nutze ich bereits seit einiger Zeit unter FreeBSD, tunnele aber nur den Webverkehr. Mail-Verkehr wird verschlüsselt, geht jedoch über eine direkte Verbindung zum Server. DNS-Abfragen werden sogar unverschlüsselt zum Provider gesendet.

Tor erhöht die Latenz-Zeiten beträchtlich, bei meinen DNS-über-Tor-Experimenten vor einiger Zeit hatte ich regelmäßig Ärger mit den Feeds in Firefox. Wenn Firefox erstmal eine unvollständige DNS-Antwort für einen Feed bekommen hat, gibt es keinen mir bekannten akzeptablen Weg, eine erneute Abfrage zu starten.

Über Reload Live Bookmark läuft es jedenfalls nicht, man muss die Feed-Adresse manuell in Firefox aufrufen, den Fehler abwarten und mit Steuerung+F5 eine neue DNS-Abfrage einleiten.

Wenn man mehr als einen Feed nutzt ist ein Firefox-Neustart die schnellste Lösung. Es kommt leider selten vor, dass alle Feeds gleichzeitig korrekt geladen werden, man kann nur die Ausfälle variieren.

Bei meiner Abwägung von unverschlüsselten DNS-Abfragen mit stabiler Verbindung gegenüber anonymen aber unstabilen DNS-Verkehr habe ich mich für die erste Möglichkeit entschieden. Update: die DNS- und Cache-Probleme werden von den kleineren Privoxy-Verbesserungen behoben, seit einiger Zeit nutze ich Tor daher auf für die DNS-Auflösung.

Hindernisse

Anonym.OS wurde bereits im Januar auf der diesjährigen SchmooCon veröffentlicht; ich hatte es wenig später runtergeladen, jedoch bis gestern nicht getestet.

Ausprobiert habe ich die Live-CD zuerst auf meinem Desktop-Rechner Africanqueen, anschließend auf dem Laptop unter QEMU.

Die QEMU-Benutzung hat den Test etwas verzögert, da ich Probleme mit dem Netzwerk hatte: QEMU benutzt das virtuelle Netzwerkinterface tap0, die Verbindung nach draußen wollte ich mit if_bridge über ndis0 rauslassen. Orientiert habe ich mich dabei grob an einer für bridge ausgelegten QEMU-Anleitung.

Mit tcpdump konnte ich beobachten, dass der von tap0 kommende Verkehr auch auf ndis0 erschien, es kamen aber keine Antworten. Nach einigen frustrierenden Versuchen habe ich den Laptop in den Keller getragen und die Brücke über em0 aufgebaut, das Problem verschwand, aber ich war ans Kabel gebunden – inakzeptabel.

Die Problem-Ursache habe ich noch nicht sicher festgestellt, es könnte an ndis gelegen haben, aber auch an der Bug-Sammlung DG632B, die von Netgear als Router verkauft wird.

PF rockt das Haus

Anstatt über if_bridge sind tap0 und ndis0 nun über NAT verbunden, mit PF eine Sache von drei Zeilen:

nat on $ext_if from tap0:network to any -> $ext_if
pass quick on tap0
pass quick on $ext_if from any to tap0:network

Zuzüglich sysctl net.inet.ip.forwarding=1.

Merke: PF ist Grund genug für einen Betriebssystem-Wechsel.

Boot-Schwierigkeiten

Der erste Test lief auf einem realen System: Africanqueen.

Africanqueen verfügt über drei optische Laufwerke, normalerweise einen Plextor PlexWriter Premium, einen LiteOn LTR-48125W und einen LiteOn SOHW-1693S. Vorgestern bin ich allerdings auf eine neue Form von beabsichtigten Fehlern auf Videotheken-DVDs gestoßen und habe zum Testen die reinen CD-Laufwerke durch DVD-Laufwerke ersetzt.

[Foto: OpenBSD-Panic mit anschließendem ps und trace] In Africanqueen befanden sich zum Testzeitpunkt daher ein LiteOn LDW-811S, ein NEC DV-5700B und der bereits erwähnte LiteOn SOHW-1693S.

Beim ersten Versuch lag der Anonym.OS-Rohling im LiteOn LDW-811S, der Bootvorgang endete reproduzierbar mit einer Panik. Im recht alten NEC DV-5700B wird der wiederbeschreibbare Rohling nicht erkannt, übrig blieb der LiteOn SOHW-1693S, von dem Anonym.OS Panik-frei startete.

Am Rohling wird das Versagen im LiteOn LDW-811S nicht gelegen haben, er wird von readcd mit dem selben Laufwerk fehlerfrei gelesen. Möglicherweise lag es an der Laufwerks-Position: Anonym.OS wird über eine Boot-Disketten-Emulation gestartet, eventuell werden die restlichen Daten anschließend nur vom ersten optischen Laufwerk geladen, der LiteOn LDW-811S kommt erst an zweiter Stelle.

Zur Überprüfung dieser These müsste ich die Laufwerke umstecken, dazu fehlte die Motivation.

Kommunikations-Probleme

Als nächste Hürde für Anonym.OS kamen die Netzwerkkarten, Africanqueen hat derer zwei: rl0 für den Internet-Zugang und re0 für schnellen Datenverkehr mit dem Laptop. Dauerhaften Netzanschluss hat nur rl0, re0 wird jedoch zuerst erkannt.

Bei der Netzwerkkonfiguration kann man während des Anonym.OS-Startvorgangs die Netzwerkkarte nicht wählen, die Einstellungen beziehen sich immer auf die erste, das gilt auch für die optional mögliche Zufalls-Ethernet-Adresse.

Wie zu erwarten hat es mit dem Netzwerk nicht so ganz hingehauen, rl0 blieb unkonfiguriert und das Internet war kaputt. Die IP-Nummer der ersten Netzwerkkarte wird auch von Anonym.OS' PF benötigt, das Laden der PF-Regeln schlug folglich ebenfalls fehl.

Alles kein Beinbruch, nachdem Anonym.OS gestartet ist, kann die Netzwerkkonfiguration manuell nachgeholt werden: dhclient ist vorhanden, ifconfig und route ebenfalls. netstat fehlt, wird für die Konfiguration allerdings auch nicht benötigt und erleichtert nur die Diagnostik.

Die Kommunikation würde anschließend theoretisch klappen, scheitert aber noch an den nicht geladenen PF-Regeln: standardmäßig werden alle Pakete fallen gelassen.

Als Editoren bietet Anonym.OS vi und xedit, nachdem mit xedit in /etc/pf.conf die erste Zeile von ext_if="re0" nach ext_if="rl0" geändert worden war, konnte auch die PF-Konfiguration nachgeholt werden:

#pfctl -f /etc/pf.conf

Der Weg ins Internet stand offen.

Deutsche Tastatur-Belegung

Anonym.OS erwartet eine englische Tastaturbelegung und auch wenn ich mir noch merken kann, dass y und z vertauscht sind, brauche ich für die Eingabe von Sonderzeichen stets mehrere Versuche. Weitesgehend für Abhilfe sorgt die Eingabe von:

#setxkbmap de

In der Shell bleiben die Umlaute tot, die restlichen Sonderzeichen sind jedoch dort, wo sie auf einer deutschen Tastatur sein sollen. In der Shell komme ich ohne Umlaute aus und da sie in Firefox wie erwartet funktionieren, habe ich mir die weitere Suche erspart.

sshd-Konfiguration

Anonym.OS bringt sshd bereits mit, startet ihn jedoch nicht automatisch und generiert auch keine Host-Schlüssel. Bei einer Live-CD für den außerhäuslichen Einsatz nachvollziehbar, im eigenen Netz eher lästig.

Unter FreeBSD habe ich noch nie Host-Schlüssel von Hand generiert und hatte die Befehle nicht im Kopf, das Gentoo-Wiki half mir etwas auf die Sprünge. Nach Eingabe von:

/usr/bin/ssh-keygen -t rsa1 -b 1024 -f /etc/ssh/ssh_host_key -N ''
/usr/bin/ssh-keygen -d -f /etc/ssh/ssh_host_dsa_key -N ''
/usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''

Kann /usr/sbin/sshd gestartet werden, den absoluten Pfad hält sshd für erforderlich.

Der Versuch, von außen eine Verbindung aufzubauen, endet trotz laufendem sshd mit einem Timeout:

fk@TP51 ~ $ssh anon@192.168.1.50
ssh: connect to host 192.168.1.50 port 22: Operation timed out

Der Client-Rechner muss erst noch in der Firewall freigeschaltet werden, dazu fügt man seine Adresse in die bereits vorhandene Tabelle good-guys ein:

# pfctl -t good-guys -T add 192.168.1.49
1/1 addresses added.

Zusätzlich braucht man das Benutzer-Passwort, man erhält es, indem man mit mit root-Rechten passwd anon aufruft und ein neues anlegt. Anschließend ist der Weg nach innen frei:

fk@TP51 ~ $ssh anon@192.168.1.50
The authenticity of host '192.168.1.50 (192.168.1.50)' can't be established.
DSA key fingerprint is 67:c5:81:68:59:23:d2:67:13:3d:ba:56:7f:70:23:76.
Are you sure you want to continue connecting (yes/no)?  yes
Warning: Permanently added '192.168.1.50' (DSA) to the list of known hosts.
anon@192.168.1.50's password: 

Welcome to Anonym.OS: ShmooCon 2006 Release
    (all your moose are belong to us!) 

anon ~

Der Weg nach draußen in das lokale Netzwerk bleibt versperrt:

anon ~ ssh fk@192.168.1.49
ERROR: Got error response from SOCKS server: 1 (general SOCKS server failure).
FATAL: failed to begin relaying via SOCKS.
ssh_exchange_identification: Connection closed by remote host

Auch ssh wird über das Tor-Netzwerk getunnelt, lokale Adressen sind über das Internet natürlich nicht zugängig – Mediaways und Netgear-Scheunentore bilden die Ausnahme.

Da ich keinen wichtigen Grund hatte, mich von Anonym.OS aus mit einem anderen Rechner im lokalen Netz anzumelden, habe ich mich mit der ssh-SOCKS-Konfiguration nicht weiter auseinander gesetzt.

Konfigurations-Kritik

[Anonym.OS-Screenshot: Firefox-Info und Privoxy-Konfiguration] Von Anonym.OS hatte ich im Vorfeld viel interessantes gehört, unter anderem, dass es sich als Windows tarnen würde. [T]he system is designed to look like Windows XP SP1 schrieb Wired. Klingt gut, ist aber falsch.

Kleine Anmerkung: Die Behauptung kommt vom Wired-Autor und wurde von anderen Seiten ungeprüft übernommen, in seinem Vortrag auf der Shmoo 2006 gab das Anonym.OS-Team die Windows-Tarnung lediglich als späteres Ziel an, das aber noch nicht erreicht sei.

Für nmap sieht Anonym.OS nicht wie Windows aus, sondern wie ein unbekanntes Betriebssystem bei dem alle Ports gefiltert werden.

Anonym.OS verändert zwar die Time-To-Live und die Fenstergröße, wird damit jedoch niemanden täuschen. Im lokalen Netz spricht schon die verschlüsselte Kommunikation gegen ein normal konfiguriertes Windows; Webserver-Betreiber werden sich gar nicht die Mühe machen, Paket-Eigenschaften zur Betriebssystem-Erkennung zu benutzen.

Anonym.OS bringt Firefox und Links als Browser mit, der User-Agent wird von Privoxy gefälscht, die Idee wurde aber nicht zu Ende gedacht. JavaScript ist in Firefox aktiviert, es ist also möglich, den einkompilierten User-Agent abzufragen, der das System als Anonym.OS zu erkennen gibt.

Die Tarnung des Browsers als Internet Explorer wäre auch sonst nicht mit der Fälschung des User-Agents abgeschlossen, Internet Explorer und Firefox verhalten sich zu unterschiedlich.

Firefox behandelt Kommentare als solche, der Internet Explorer wertet eine nichtstandardisierte Erweiterung aus. Wenn der Server-Betreiber in seine Seiten etwas wie:

<!--[if IE]>
<img src="echter-ie.png">
<![endif]-->

einbindet, kann er echte Internet Explorer von maskierten anderen Browsern unterscheiden. Der Internet Explorer würde das Bild anfordern, Firefox nicht.

Diese Besonderheit könnte man noch mit Privoxy nachstellen, wird aber spätestens an browserspezifischen Style-Sheet-Hacks scheitern. Da Privoxy keine Dokumente bearbeitet, die als text/css deklariert sind, kann dieser Unterschied auch nicht mal eben weg gefiltert werden.

Nach wie vor scheint mir die automatisierte Fälschung eines Firefox-User-Agents die sauberste Lösung zu sein.

Auch sonst ist Anonym.OS' Privoxy-Konfiguration verbesserungsfähig. Sie basiert auf den Adventuresome-Grundeinstellungen, die nicht nur einen eigenen Header (X-User-Tracking=sucks) setzen sondern auch den Fun-Filter aktivieren, der subversive browsing fun verspricht.

Am Fantasie-Header kann der interessierte Server-Betreiber Privoxy erkennen, der Fun-Filter schreibt Microsoft nach MicroSuck um (harhar) und wird durch Buzzword-Bingo vervollständigt: Marketing-Schwachmaten-Vokabular wird nach Erkennung Bingo! angehängt.

Wenn man das nicht weiß, erscheinen auch weniger unseriöse Informationsquellen als komisch.

Weitere erwähnenswerte Programme

Anonym.OS bringt Fluxbox als Window-Manager mit, nicht so elegant wie Enlightenment, aber sicher eine gute Wahl.

Als Instant-Messenger kommt Gaim zum Einsatz, zum Mailen werden Mutt und Thunderbird mitgeliefert, zum Verschlüsseln und Signieren GnuPG. Als Shell dienen Bash und Korn-Shell, wahlweise in eterm oder xterm.

Sicher ist Sicher

Bei der Anonym.OS-Benutzung in QEMU habe ich eine Weile mit tcpdump zu geschaut, wie zu erwarten war nur der Tor-Tunnel, nicht aber der Inhalt erkennbar:

root@TP51 ~ #tcpdump -vv -A -Z fk -i tap0
tcpdump: listening on tap0, link-type EN10MB (Ethernet), capture size 68 bytes
17:47:12.041548 IP (tos 0x0, ttl  47, id 61710, offset 0, flags [DF], proto: TCP (6), length: 52) host2.gigabytenet.com.9001 > 192.168.1.50.37651: ., cksum 0xa42c (correct), 759380488:759380488(0) ack 82487043 win 33120 <nop,nop,timestamp 126800033 2855256144>
        0x0000:  4500 0034 f10e 4000 2f06 15ab cf2c b403
        0x0010:  c0a8 0132 2329 9313 2d43 3a08 04ea a703
        0x0020:  8010 8160 a42c 0000 0101 080a 078e d0a1
        0x0030:  aa2f c050
17:47:12.434773 IP (tos 0x0, ttl 142, id 14690, offset 0, flags [DF], proto: TCP (6), length: 638) 192.168.1.50.37651 > host2.gigabytenet.com.9001: P 1:587(586) ack 0 win 32767 <nop,nop,timestamp 2855256147 126800033>
        0x0000:  4500 027e 3962 4000 8e06 6c0d c0a8 0132
        0x0010:  cf2c b403 9313 2329 04ea a703 2d43 3a08
        0x0020:  8018 7fff 466b 0000 0101 080a aa2f c053
        0x0030:  078e d0a1 1703
17:47:12.821447 IP (tos 0x0, ttl  47, id 62775, offset 0, flags [DF], proto: TCP (6), length: 638) host2.gigabytenet.com.9001 > 192.168.1.50.37651: P 0:586(586) ack 1 win 33120 <nop,nop,timestamp 126800083 2855256144>
        0x0000:  4500 027e f537 4000 2f06 0f38 cf2c b403
        0x0010:  c0a8 0132 2329 9313 2d43 3a08 04ea a703
        0x0020:  8018 8160 f1ea 0000 0101 080a 078e d0d3
        0x0030:  aa2f c050 1703
17:47:12.825668 IP (tos 0x0, ttl  47, id 63208, offset 0, flags [DF], proto: TCP (6), length: 52) host2.gigabytenet.com.9001 > 192.168.1.50.37651: ., cksum 0x9f4f (correct), 586:586(0) ack 587 win 33120 <nop,nop,timestamp 126800103 2855256147>
        0x0000:  4500 0034 f6e8 4000 2f06 0fd1 cf2c b403
        0x0010:  c0a8 0132 2329 9313 2d43 3c52 04ea a94d
        0x0020:  8010 8160 9f4f 0000 0101 080a 078e d0e7
        0x0030:  aa2f c053

Stabilität von Programmen und Verbindung

Auf Africanqueen lief Anonym.OS abgesehen von den Startproblemen stabil, in QEMU starb mir mehrmals der Firefox ohne Fehlermeldung weg, ich nehme aber an, dass der zu knappe Arbeitsspeicher die Ursache war.

Ich hatte Anonym.OS nur 128 Mega Byte zugeteilt, nach dem Start von Firefox sind die fast voll und da es sich um eine Live-CD handelt wird auch nicht geswapt.

Anonym.OS ist kein Performance-Monster, für eine Live-CD liegt die Geschwindigkeit jedoch im Rahmen der Erwartungen. DNS-Probleme gab es während des Tests keine.

Fazit

Anonym.OS basiert auf einem anständigen Betriebsystem und kommt mit ebenso ordentlichen Programmen daher. Wenn alles klappt ist Anonym.OS auch für absolute Anfänger geeignet, bei Problemen ist ein wenig Grundlagen-Wissen jedoch nicht verkehrt.

Bei der nächsten Version könnte die Firefox- und Privoxy-Konfiguration verbessert werden, die Möglichkeit einer Festplatten-Installation und ein bisschen Dokumentation wären auch nicht schlecht, im Normallfall kann allerdings die hervorragende OpenBSD-Dokumentation genutzt werden.

Für eine Erst-Version ist Anonym.OS bereits jetzt eine beeindruckende Live-CD und was Sicherheit und Privatsphäre betrifft, anderen weit überlegen.

Den Anonym.OS-Download kann ich nur empfehlen. Wer die Idee Anonymes und sicheres Surfen unterstützen will, sollte zusätzlich über den T-Shirt-Erwerb bei der EFF nachdenken, OpenBSD-T-Shirts sind ebenfalls sehr kleidsam.

Update (Schleichwerbung)

Für die freeX 4'2006 habe ich einen Artikel über die neue UnionFS-Implementierung für FreeBSD geschrieben. Ein Anwendungs-Beispiel ist die Anonym.OS-Erweiterung mit iwi-Firmware. Die Firmware ist aus Lizenz-Gründen nicht im offiziellen Image enthalten, aber für den iwi-Einsatz auf Notebooks mit den Chipsätzen Intel PRO/Wireless 2200BG, 2225BG und 2915ABG zwingend erforderlich.

UnionFS gibt es auch für einige GNU/Linux-Distributionen, der Artikel könnte daher auch für Anonym.OS-Nutzer ohne FreeBSD von Interesse sein. In besser-sortierten Zeitschriften-Läden ist die Ausgabe im Zeitraum Juni/Juli erhältlich, ansonsten kann sie auch online bestellt werden.

Der Anonym.OS-Abschnitt ist etwa eine Seite lang.