Spurenarm kommunizieren

Tuesday, July 31. 2012

 Die Zeit hat einen "digitalen Briefkasten" für Hinweisgeber entwickelt und online gestellt, auf Neudeutsch nennt man das Whistleblower. Quellenschutz im Zeitalter der Vorratsdatenspeicherung. Programmiert in Python, opensource und zum Download.

Aus dem overview zum Projekt:

briefkasten is a reasonably secure web application for submitting content anonymously. It allows to upload attachments which are then sanitized of a number of meta-data which could compromise the submitters identity. Next, the sanitized files are encrypted via GPG and sent via email to a pre-configured list of recipients. The original (potentially 'dirty') files are then deleted from the file system of the server. Thus, neither should admins with access to the server be able to access any submissions, nor should any of the recipients have access to the unsanitized raw material.

Upon successful upload the submitter receives a unique URL with a token that he or she can use to access any replies the recipients may post. 

 

Die Intention der Redaktion ist natürlich, an gute Info zu kommen und guten Geschichten auf die Spur.  Was mit den gespendeten Daten geschieht
Lesenswert sind aber auch die Verhaltensregeln für Tippgeber:

  • nicht vom Firmenrechner oder zuhause, sondern aus einem Internetcafe oder Bibliothek
  • Daten nicht auf einen eigenen Rechner ziehen sondern via DVD, Stick oder mp3-Player transportieren
  • bei den weitergegebenen Daten darauf achten, dass der Kreis der Eingeweihten nicht zu klein ist (und der Rückschluss auf die Quelle deshalb zu einfach.) Notfalls dafür sorgen, dass der Kreis größer wird 
  • Telefonate allenfalls über anonyme Prepaidkarte in gebraucht gekauftem Handy. (Polen oder Technik-Trödel.)
  • email über fake accounts bei Freemailern, und diesen Account nie in der Firma oder zuhause aufrufen, sondern auch nur im Internetcafe.
  • Mails mit PGP verschlüsseln.
  • Tor allein genügt nicht.
  • Geduld und kaltes Blut.

 Und vorsichtig mit den Gewohnheiten sein, nicht immer in's selbe Cafe gehen und nicht immer zur gleichen Zeit. Denn totz aller Umsicht und dem Entfernen der Metadaten aus bestimmten Dateitypen: die Zeiten der Übermittlung bleiben sichtbar...

Ad-Kosten für jmd generieren

Tuesday, July 31. 2012

Das ist ein vergifteter Pfeil in einem dreckigen Köcher. Gemünzt auf facebook - Anzeigen. (Quelle und Kontext)
Nochmal deutlich: Keine Handlungsanleitung, sondern eine Problembeschreibung. :

"you've never used wget have you?

1. Download the page the ad appears in
2. Download the javascripts using the referral page
3. grep the javascripts for links
4. hit all the links
Repeat.

So if you want to burn a specific company, you only click their ads. Since Facebook is the beneficiary of the ads, this is clearly facebook's problem. Go back in time to the ad scam eFront ran
http://www.echostation.com/efront/
http://news.cnet.com/A-question-of-numbers/2009-1023_3-255030.html

"

 

 

 

fonera, openwrt und IPv6

Friday, July 20. 2012

Kann man mit einem Passwort einen WLAN-Router hinrichten? Kommt drauf an, was man als nächstes macht, so die nahe liegende Antwort - aber ich habe doch gar nichts gemacht.... - wie aus dem Support-Bilderbuch.
Das Opfer war mein altgedienter Linksys WRT54GS, mit openwrt White Russian an Bord seit Jahren stabil. Für einen Flachmann, der es nicht anders konnte, lief das Funknetz immer noch mit WEP. Jetzt umgestellt auf WPA, ein richtig schön langes Passwort vergeben - und drei Tage später stirbt das WLAN im laufenden Betrieb, der Linksys lässt sich auch nicht mehr über das Webinterface ansprechen und macht seltsame Spratzeltöne. Alles neu booten und resetten hilft nichts: das Ding ist hin.

In der Tüte kramend taucht ein alter fonera (fonera 2100A, wirklich alt) auf, der sich, eingestöpselt, gleich ein firmware-update zieht. Passwörter und alles sind verschollen, eine Büroklammer auf den winzigen Resetknopf an der Unterseite, langes Halten, Strom aus, an und mit weiter gedrücktem Reset booten lassen: jetzt ist die firmware wieder Version 0.7.0 r4, die Passwörter sind fonera-default admin/admin bzw. root/admin und ich kann mich ans rooten machen.

Zunächst mal auf einem WLAN-Client ein passendes subnet fuer den Zugriff auf's webinterface:  
ifconfig eth1:1 192.168.10.20

Dann ssh aufmachen, hier funzt es mühelos mit BingoBommels step1.html/step2.html - Lösung:
zwei kleine HTML-docs auf dem Rechner anlegen, step1.html: 

<html>
<head>
</head>
<body>
<center>
<form method="post" action="http://192.168.10.1/cgi-bin/webif/adv_wifi.sh" enctype="multipart/form-data">
<input name="wifimode" value="/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT" size="68" >
<input type="submit" name="submit" value="Submit" onClick="{this.form.wifimode.value='&quot;;' + this.form.wifimode.value +';&quot;'}" />
</form>
</body>
</html>
 
und step2.html:
 
<html>
<head>
</head>
<body>
<center>
<form method="post" action="http://192.168.10.1/cgi-bin/webif/adv_wifi.sh" enctype="multipart/form-data">
<input name="wifimode" value="/etc/init.d/dropbear" size="68" >
<input type="submit" name="submit" value="Submit" onClick="{this.form.wifimode.value='&quot;;' + this.form.wifimode.value +';&quot;'}" />
</form>
</body>
</html>
erst das eine, dann das andere doc im Browser oeffnen, je auf den submit-Button klicken und fertig.
Jetzt geht ssh root@192.168.10.1, user root, Passwort admin.

Und um das permanent zu machen, jetzt in der ssh-shell:

mv /etc/init.d/dropbear /etc/init.d/S50dropbear
vi /etc/firewall.user

da gibt es, unter der Überschrift ### Open port to WAN zwei auskommentierte Zeilen, da je die Kommentar-Hashes löschen. ("i" aktiviert den edit-Modus, ESC :wq speichert und beendet vi. Mehr vi-commands googlen)
Schliesslich wollen wir der Kiste noch abgewöhnen, sich irgendwelchen code von "zu hause" herunterzuladen und auszuführen, dazu:
 
vi /bin/thinclient
und dort eine  Zeile auskommentieren, eine Zeile ergänzen, so dass dort steht:
# . /tmp/.thenclient.sh
cp /tmp/.thinclient.sh /tmp/thinclient-$(date '+%Y%m%d-%H%M') 
 
Speichern, und die Kiste ist gerootet. 
Weiter geht's mit telnet, ich habe mich da an diese Anleitung gehalten, Varianten zum Vergleich. Und auf deutsch.
Es wird jetzt ein spezieller Kernel installiert, um Schreibschutz aufzuhaben, und im zweiten Schritt der Redboot Boot Loader der Kiste neu konfiguriert. Diese Schritte müssen ungestört ablaufen, sonst ist die Kiste hin.
 
root@OpenWrt:~# cd /tmp
root@OpenWrt:~# wget http://ipkg.k1k2.de/hack/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
root@OpenWrt:~# Connecting to ipkg.k1k2.de[85.10.200.90]:80
openwrt-ar531x-2.4-v 100% |**************************|   512 KB    00:00 ETA
root@OpenWrt:~# mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
Unlocking vmlinux.bin.l7 ...
Erasing vmlinux.bin.l7 ...
Writing from openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma to vmlinux.bin.l7 ... [w]
root@OpenWrt:~# reboot
 
root@OpenWrt:~# cd /tmp
root@OpenWrt:~# wget http://ipkg.k1k2.de/hack/out.hex
root@OpenWrt:~# Connecting to ipkg.k1k2.de[85.10.200.90]:80
out.hex 100% |*******************************| 4096 00:00 ETA
root@OpenWrt:~# mtd -e "RedBoot config" write out.hex "RedBoot config"
Unlocking RedBoot config ...
Erasing RedBoot config ...
Writing from out.hex to RedBoot config ... [w]
root@OpenWrt:~# reboot
 
Die fonera bootet jetzt nicht mehr vollstaendig, sie hört auf die IP 192.168.1.254 und lauscht auf port 9000 auf eine telnet-Verbindung. In der Beschreibung stand, dies tue sie nur für 10 Sekunden, aber bei mir hielt es länger vor.
So, Ethernet-Kabel direkt von der Fonera zum Rechner, dem auch eine route in das subnet legen und dann:
telnet 192.168.1.254 9000
 
Für den nächsten Schritt, ein normales Openwrt auf der Fonera zu installieren, brauchen wir auf dem Rechner einen tftp - Server, der den Kernel und das root.squashfs serviert. Der Rechner war in diesem Fall ein Linux Mint Maya und nach etwas Probieren habe ich den atftpd installiert, wobei ich ihn für seinen kurzen Einsatz direkt aus der cli als daemon gestartet habe. Das ging nicht gleich auf Anhieb, Konfigurationshilfe war nützlich und zusätzlich war dieser Bug zu umschiffen. Es ist ratsam, mit dem atftp - client die korrekte Funktion des Servers zu testen...
Und Openwrt - Kamikaze 8.09 und Backfire 10.03 sollen beide gehen, ich habe es dann nach etwas Schwanken mit backfire 10.03.1 versucht, was letztlich auch geht. (Vielleicht haette ich dann besser gleich trunk genommen, denn mit IPv6 holperte es etwas) Die Versionen stehen nebeneinander unter http://downloads.openwrt.org/ - ich habe  openwrt-atheros-vmlinux.lzma und openwrt-atheros-root.squashfs gezogen und in das Ausliefer-Verzeichnis des atftpd, bei mir /srv/atftpd, gelegt.

So, wenn der tftp-Server läuft, geht es zurueck in die telnet-Shell der fonera und zum RedBoot -Prompt. Da wird jetzt erst mal die Verbindung gesetzt, -h ist die IP des Rechners mit dem tftpd-Server, -l (ein kleines L) die IP der kleinen Kiste. 

RedBoot> ip_address -h <192.168.1.20> -l <192.168.1.254>/24

Also das kernel image laden, memory wipen, kernel flashen. Dauert etwas:

load -r -b %{FREEMEMLO} openwrt-atheros-vmlinux.lzma
fis init
fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.l7

Und anschliessend das root-file system:

load -r -b %{FREEMEMLO} openwrt-atheros-root.squashfs
fis create rootfs

So, das dauert nun nochmal einiges länger, nicht ans Kabel kommen, stattdessen Kaffe kochen oder ein bad nehmen oder so.

 

Irgendwann ist er fertig und man sieht wieder den RedBoot> - Prompt, jetzt kann man sich überzeugen, dass auch wirklich der neue kernel zum booten konfiguriert ist:

fconfig -l -n

Yo, reboot und rein in's Vergnügen:

reset

OpenWrt meldet sich, immer noch unter 192.168.1.254 mit der WebOberfläche, man wird aufgefordert, ein root-Passwort zu setzen und kann sich dann durch die Konfig-Optionen bewegen. Mit Lan und Wifi in einer Bridge vereint ist der Nutzen einer Firewall auf dem Geraet eh fraglich, bei mir schien sie vorrangig damit befasst, alle durchgehenden Pakete wegzufressen. Input, output forward auf accept zu setzen und ausser lan: alle zonen (sprich: die leere wan-zone) zu löschen scheint geholfen zu haben.

IPv6 ging anfangs auch nicht, hier half nach

opkg update
opkg install kmod-ipv6  ip 
/etc/init.d/network restart

noch das Anlegen einer route mit

ip -6 route add 2000::/3 via 2001:db8::dead:c0de metric 256

, die Seiten der OpenWrt-Docu und, als alles zu hängen schien, ein reboot nicht nur der fonera sondern auch des Lan-seitigen Rechners...

Und als Treppenwitz, der auch das anfangs angesprochene Thema, wann Sachen so kaputtgehen, aufnimmt:
als nun mit der fonera und IPv6 alles klappte, jedenfalls im Lan, war plötzlich nach aussen kein IPv6 mehr erreichbar. Der HE-Tunnel hatte sich verabschiedet, was etwa alle 18 Monate vorkommt und nach einer mail an den Support binnen Minuten gefixt wird.
 

Laptop und LiveCD

Saturday, July 14. 2012

 Es galt, einen alten Laptop wiederzubeleben, ein Acer Travelmate 4062. Er hatte keine Festplatte mehr und, wie ich später feststellte, die Fähigkeit verloren, den Akku aufzuladen.

Linux Mint Maya Mate 32 auf eine CD gebrannt und es ist zäh wie Käse, aber im Prinzip wird alles unterstützt: die Funktionstasten für Helligkeit und Lautstärke zb. Deckel zu und er geht in den Schlummermodus. Anfangs sah es so aus, als müsste für das Centrino-WLAN noch ein Treiber her, aber dann stand sogar im syslog, dass der "killswitch" umgestellt werden muesste, kurzer Blick, Druck auf eine etwas versteckte Taste und das Wlan funzt auch. Da kann man nicht meckern, sondern getrost den Sticker 'Designed for Microft Windows' abpulen.

Ob der wohl auch vom Stick tut... - das BIOS macht mir wenig Hoffnung, USB device ist keine auswählbare Option. Trotzdem ein Versuch mit unetbootin und sieh an: bootet klaglos vom Stick. Immer noch eine Grössenordnung langsamer Zugriffszeit als eine Platte hätte, aber vgl. mit der CD schon merklich besser. Und das in der Praxis wichtigste: auf dem stick hat auch noch eine datei casper-rw mit einem persistenten Dateisystem Platz.

Um mir dies aber nicht mit dem ersten apt-get update && apt-get upgrade zur Hälfte mit updates vollzuschreiben, wäre es ja schick, das Life-System zu aktualisieren. Ich finde auch eine brauchbare Anleitung dazu. 

 

 
# Arbeitsumgebung:
mkdir /home/dp/kaspern
mkdir /home/dp/kaspern/uniso
mkdir /mnt/iso

# ggf. persistente Daten einer vorigen Verion zugänglich machen:
mkdir /mnt/casper-rw
mount /home/dp/kaspern/casper-rw /mnt/casper-rw -o loop

# das Original
mount /home/dp/kaspern/linuxmint-13-mate-dvd-32bit.iso /mnt/iso -o loop

# der Edit-Bereich
rsync --exclude=/casper/filesystem.squashfs -a /mnt/iso/ /home/dp/kaspern/uniso 
unsquashfs /mnt/iso/casper/filesystem.squashfs 
mv squashfs-root edit

# chrooten
mount --bind /dev/ edit/dev
chroot edit

mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts

# hier jetzt konkret Aktualisieren, etwa:
apt-get update && apt-get upgrade && apt-get dist-upgrade

apt-get install joe mc nmap traceroute smbfs winbind lynx wireshark ssh openssh-blacklist openssh-blacklist-extra keepassx acpi ntp

# die Erkennung von samba shares hakte etwas, 
# ich bekam “Failed to retrieve share list from server” ()
# deswegen
joe /etc/samba/smb.conf  # und dort setzen:  name resolve order = bcast host lmhosts wins
joe /etc/nsswitch.conf   # und dort setzen:  hosts: files mdns4_minimal [NOTFOUND=return] wins dns mdns4

# keyboard
dpkg-reconfigure keyboard-configuration
# setupcon --force
update-locale LANG=de_DE.utf8 LANGUAGE= LC_ALL=

# sshd root login disablen
joe /etc/ssh/sshd_config  # und dort setzen:  PermitRootLogin no
 
# WLAN - Verbindungseinstellungen hier einsetzen:
joe /etc/NetworkManager/system-connections/Wireless\ connection\ 1

# Google-chrome mit wget herunterladen und mit dpkg -i installieren
 
# putzen:
apt-get clean
rm -rf /tmp/*

# schliesslich wieder raus aus dem chroot-jail
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo umount edit/dev


sudo chmod +w uniso/casper/filesystem.manifest
sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > uniso/casper/filesystem.manifest
sudo cp uniso/casper/filesystem.manifest uniso/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' uniso/casper/filesystem.manifest-desktop
sudo sed -i '/casper/d' uniso/casper/filesystem.manifest-desktop

sudo rm uniso/casper/filesystem.squashfs
sudo mksquashfs edit uniso/casper/filesystem.squashfs


printf $(sudo du -sx --block-size=1 edit | cut -f1) > uniso/casper/filesystem.size


cd uniso
sudo rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

sudo mkisofs -D -r -V "MINZL" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../minzl.iso .
 
und das so angepasste .iso in einer vm testen und dann mit unetbootin auf einen stick schreiben. 
Ich brauchte schon ein paar Anläufe, bis alles ging (und das Protokoll ist leider nicht ganz vollständig, so fehlen die Schritte nach Kernel-Update und Entfernen des alten Kernels, was etwas umständlich war. Siehe dazu die oben verlinkte Anleitung.)
Aber dann gings. Ein paar Sachen blieben dann doch noch anzupassen, so die Tippen=Mausklick-Funktion des Touchpad, das Einrichten der keys fuer die ssh-Anmeldung, den Desktop-Switcher im Panel anzeigen, 

 

 

Mit IPv6 sind Adressen nun nicht eben knapp und ein Interface kann etliche globale IPs haben - wie kann man Einfluss darauf nehmen, welche davon für ausgehende Verbindungen genutzt wird?

Ich fand ein nützliche Beschreibung der Auswahl, zwei Infos daraus waren mir nützlich:

- Wenn mehrere globale Adressen alle anderen Auswahlkriterien bestanden haben, nimmt Linux die zuletzt hinzugefügte.
- Man kann bestimmte Adressen als "deprecated" markieren, so dass sie bei der Auswahl nicht berücksichtigt werden.
ip -6 addr change 2001:db8:F00::BA2/128 dev eth0 preferred_lft 0
(Hm. So steht's da, aber im Test passiert etwas ganz anderes: die Adresse wird nicht als deprecated markiert, stattdessen steht da nun valid_lft forever preferred_lft forever. Statt dem beabsichtigten 'Mach schnell mal 'ne neue Adresse' ist es ein: 'Nimm jetzt immer diese' geworden, grad das Gegenteil.)

 

Nicht alles geht so, wie ich es erwartet hätte:  eine manuell (in /etc/network/interfaces) vergebene IPV6 und privacy extension. Ich würde halt gern einem Rechner eine 'nette' IPv6 verpassen, was mit dem hex-Zeichensatz und etwas leetspeak ja gut möglich ist. Ein besonders schoenes beispiel sieht man etwa mit host facebook.com  . Und gleichzeitig möchte ich für von dem Rechner ausgehende Verbindungen die privacy extensions aktivieren, also Adressen mit scope global temporary dynamic verwenden. Und das klappt nicht (verlässlich). Nach einem reboot sehe ich zuweilen eine temp Adresse verwandt, aber bald schon ist es doch die manuelle Adresse, die in den Logs auftaucht. 
cat /proc/sys/net/ipv6/conf/eth0/use_tempaddr gibt eine 2 aber ip -6 addr listet nur eine globale Adresse mit valid_lft forever preferred_lft forever.

Ist Autokonfiguration aktiv, dann bleibt die automatische IP, die ja nach einer festen Regel gebildet wird, stabil, solange man nicht mit der MAC herumspielt. (Man erkennt die automatischen IPs daran, dass an der Grenze zum letzten Drittel, also Byte 12 und 13, immer ff:fe steht.) Und dann werden für ausgehende Verbindungen auch die temporären Adressen verwandt. 

 

(Page 1 of 1, totaling 5 entries)