www.fabiankeil.de/blog-surrogat/2006/02/24/anonym-os.html
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.
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.
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.
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.
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.
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.
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.
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.
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
.
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
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.
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.
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.