Archive for Januar, 2009

Google Fail

by apoc · januar 31 2009 · leave a comment

Jede Seite wird zurzeit von Google als Malware erkannt. Habe es auch von den USA aus(ivacy) getestet, das selbe Ergebnis. Updates soon ;)

Update: Es geht wieder, dauerte ca. 40minuten nach meiner Einschätzung.
Update: Weitere Links eingefügt.

  • http://digg.com/tech_news/Someone_is_about_to_get_fired_at_Google
  • http://www.lookpic.com/files/googowned.png
  • http://www.heise.de/newsticker/Google-warnt-bei-allen-Suchtreffern-vor-Malware–/meldung/126681
  • http://blog.stopbadware.org/2009/01/31/google-glitch-causes-confusion:

    “This morning, an apparent glitch at Google caused nearly every [update 11:44 am] search listing to carry the “Warning! This site may harm your computer” message. Users who attempted to click through the results saw the “interstitial” warning page that mentions the possibility of badware and refers people to StopBadware.org for more information. This led to a denial of service of our website, as millions of Google users attempted to visit our site for more information. We are working now to bring the site back up. We are also awaiting word from Google about what happened to cause the false warnings.”

  • Offizielle Erklärung: http://googleblog.blogspot.com/2009/01/this-site-may-harm-your-computer-on.html:

    “What happened? Very simply, human error. Google flags search results with the message “This site may harm your computer” if the site is known to install malicious software in the background or otherwise surreptitiously. We do this to protect our users against visiting sites that could harm their computers. We maintain a list of such sites through both manual and automated methods. We work with a non-profit called StopBadware.org to come up with criteria for maintaining this list, and to provide simple processes for webmasters to remove their site from the list.

    We periodically update that list and released one such update to the site this morning. Unfortunately (and here’s the human error), the URL of ‘/’ was mistakenly checked in as a value to the file and ‘/’ expands to all URLs. Fortunately, our on-call site reliability team found the problem quickly and reverted the file. Since we push these updates in a staggered and rolling fashion, the errors began appearing between 6:27 a.m. and 6:40 a.m. and began disappearing between 7:10 and 7:25 a.m., so the duration of the problem for any particular user was approximately 40 minutes.”

Tagged:

vBrowseFile: development

by apoc · januar 27 2009 · one comment

vbrowsefile0005-devscr1vbrowsefile0005-devscr2vbrowsefile0005-devscr3
vbrowsefile0005-devscr4vbrowsefile0005-devscr5vbrowsefile0005-devscr6

Ich bin gerade dabei einen kleinen “Filebrowser” zu entwickeln. Dieser zeigt nicht zwangsläufig das reale Dateisystem an, sondern ist in der Lage mehrere real existierende Ordner zu einem virtuellen Ordner zusammen zu legen. Er ist nur zum einfachen herunterladen von Dateien gedacht, eine Upload-Funktion ist nicht geplant, eben sowenig wie das Umbenennen oder Löschen von Dateien. Zum Einsatz kommt PHP5, Smarty und das Pear-Paket HTML_Downloader.

siyb von Geekosphere(danke nochmal!) hat mir ein Redmine und Subversion eingerichtet.

Alles weitere wird es dann dort geben.

For our english speaking visitors:

Recently i began to develop a small Filebrowser. It does not necessarily show the real Filesystem but it can combine several directories to one virtual. The purpose is just to realise an easy way of downloading files, other features used in a common filemanager like the renaming or deleting of files are not planned. I use PHP5, Smarty and the Pear-Package HTTP_Download.

Thanks to siyb, now i can provide more informations at geekosphere wootcenter(redmine).

Tagged: , ,

sixserv.org Tuning

by apoc · januar 26 2009 · leave a comment

Gelegentlich fällt der Server aufgrund von vollem RAM-Speicher aus. Ich habe deshalb ein paar Werte der Apache und MySQL Installation verändert. Ggf. werde ich auch später noch ein paar Werte verändern. Falls jemand Probleme mit den auf sixserv.org laufenden Diensten hat, bitte mir sofort bescheid geben.

Tagged: , , ,

Der futurologische Kongreß

by apoc · januar 25 2009 · leave a comment

“Wir schreiben das Jahr 2098″ – sagte er. “69 Milliarden amtlich bescheinigter Menschen und sicherlich rund 26 Milliarden Illegale. Die mittlere Jahrestemperatur ist um vier Grad gesunken. In fünfzehn, zwanzig Jahren wird hier ein Gletscher sein. Wir können die Vereisung nicht vorbeugen, wir können sie nicht hindern, wir können sie nur verbergen.”

Aus den Erinnerungen des berühmten Weltraumfahrers Ijon Tichy, der am achten futurologischen Weltkongreß teilnimmt und einen Trip in eine entfernte, von Psychemie bestimmten Zukunft unternimmt. Ein Klassiker der Science Fiction von Stanislaw Lem. Ich erwähne dieses Buch deshalb hier da Ari Folman(Waltz With Bashir) die Inszenierung als Mischung von Real- und Animationfilm plant und ich es deshalb mal gelesen habe(ich kannte nur die Sternentagebücher).

Stanislaw Lem: Der futurologische Kongreß – Aus Ijon Tichys Erinnerungen(1972)

Tagged: , , ,

Ivacy VPN unter Linux: PPTP/OpenVPN und Socks5-Gateway

by apoc · januar 24 2009 · 31 comments

Die VPN Provider sprießen, dank der “Sicherheits-Politik” in Europa und den USA, wie Pilze aus dem Boden. Seit Juli 2008 gibt es Ivacy, einem durchaus interessanten VPN-Anbieter über den es möglich ist sich der Vorratsdatenspeicherung Europas zu entziehen. Hier geht es mir darum zu zeigen wie man Ivacy unter Linux nutzen kann, genauer gesagt wie man OpenVPN und PPTP unter Linux einrichtet, die Country-Selection Funktion von Ivacy nutzt und wie man einen Socks5 Proxy einrichtet der Verbindungen über Ivacy weiterleitet, dazu später mehr. Diese Anleitung sollte nicht nur mit Ivacy funktionieren, alle VPN-Anbieter bieten OpenVPN oder PPTP(das proprietäre VPN Protokoll von Microsoft).
Update: Habe einen OpenVPN-Abschnitt eingefügt.
Update 4.2.09@20:50: OpenVPN-Abschnitt überarbeitet.
Update 8.2.09@22:15: Artikel nochmals überarbeitet.
Update 21.4.09@22:00: Privoxy-Abschnitt eingefügt.

Bevor es losgeht sollte ich vielleicht noch erwähnen das es sich hierbei um keine Anleitung für Linux-Anfänger oder Ubuntu/Suse-”Profis” handelt. *g* Read the rest of this entry »

Tagged: , , , , , , ,

implementing bittorrent

by nks · januar 22 2009 · leave a comment

Mal wieder was technisches. Ich geh mal ein bisschen ins Detail des BitTorrent Protokolls.
Ich werde das ganze in mehrere Teile aufteilen.

In den ersten Teilen wird es sehr Theoretisch.
In Teil 1 möchte ich auf das BEncoding eingehen und auf Metafile die euch sicherlich als “.torrent”-Datei bekannt ist.

Im nächstem Teil gehe ich dann auf grundsätzliches zur Aufgabe eines Trackers ein. Und danach wird es richtig interessant :D
Aber erstmal zum BEncoding und der Metafile, ohne die BitTorrent nicht funktioniert -
das BEncoding und die Metafile sind Essentiell!

Bevor ich auf das BEncoding eingehe spreche ich erstmal die MetaFile an, da dies die erste
Stelle (und auch wichtigste) ist an der das BEncoding im Protokoll vorgesehen ist.

Metafile

Die Metafile oder wie es die meisten von euch kennen die “.torrent”-Datei.
In ihr sind alle Informationen (und auch ein paar unwichtige :D ) die ein Client/Peer benötigt
gespeichert.
Also gehen wir mal näher auf den Inhalt der “.torrent”-Datei ein (optionale Teile sind mit *
gekennzeichnet):

  • announce: Die Announce-URL des Trackers
  • creation date*: Erstellungsdatum
  • comment*: Platz für einen Kommentar zum Torrent oder andere Informationen
  • created by*: der Name des Erstellers
  • info: das info-Dictionary – der “kern” einer Metafile!(darauf gehe ich weiter unten ein)

Jetzt werden sich sicher einige denken “whuuut?! wtf? dictionary?!”
Ein Dictionary ist die Abbildunge einer Map, oder eines Arrays mit Schlüssel als Index
(ArrayList in Java) auf einen String (bzw. eine ByteFolge xD).

Das Info-Dictionary

Diese Keys enthält ein “info” Dictionary:

  • piece length: Die Anzahl der Bytes pro Piece (BitTorrent-Peers tauschen die Daten in Pieces)
  • pieces: Enthält die Hashes der Pieces
  • info**: Das info-Dictionary für die Spezifizierung der im Torrent enthaltenen Datei/en. (wenn dieses info-Dictionary gemeint ist werde ich es mit ** markieren)

Es gibt 2 verschiedene Modi des Info-Dictionary** den Single-File und den Multifile-Mode,
dementsprechend gibt es auch
2 verschiedene Arten die Datei bzw. die Dateien näher zu Spezifizieren:

“info” im Single-File Mode

  • name: Der Dateiname
  • length: Länge der Datei in Bytes

“info” im Multi-File Mode

  • name: Der Ordnername in dem sich die Dateien befinden
  • files: Ein Dictionary das für jede Datei ein weiteres Dictionary enthält

Die Keys des “files”-Dictionaries:

  • length: Die grösse der Datei in Bytes
  • path: Der Pfad der Datei

Damit waren die wichtigsten Elemente des .torrent-Files erklärt und wir können uns mit de
Kodierung der entsprechenden Elemente/Einträge befassen – dem BEncoding.

BEncoding

Das BEncoding ist so genial wie einfach.

BitTorrent nutzt BEncoding für:

  • Strings
  • Integer
  • Dictionaries
  • Listen

Diese Typen werden alle nach dem selben Schema kodiert:

Strings:

:
Beispiel:
5:w00t!  (für den String "w00t!")

Integer:

ie
 
Beispiel:
i7e (Integer: "7")
i-1e (Integer: "-1")

Dictionaries:

de
 
Beispiel:
d3:nks6:gentoo4:apoc4:arche***
 
*** Steht für folgendes dictionary:
KEY          VALUE
[nks] = gentoo
[apoc] = arch

Listen:

le
 
Beispiel:
l3:nks7:torrente (entspricht den Strings "nks" und "torrent")

Ist recht simpel oder?
Trotzdem muss man bei der Implementierung aufpassen, wenn hier ein Fehler passiert kann es sein
das man manchmal hinterher lange nach dem Fehler suchen muss :D
Das BEncoding verfolgt einen durch das ganze Protokoll hinweg.

Tagged: , , , , ,

xinetd: info script

by apoc · januar 22 2009 · 2 comments

Ich wollte von unterwegs aus den Status meines Heimservers abrufen können. Dabei ging es mir vorallem um die Temperatur von CPU, Mainboard und den Festplatten. Der auf sixserv.org laufende rbot(im Freenode idled der in #sixserv) soll auf Kommando den Status anzeigen. Soweit so gut. Ein kleines Ruby-Skript das auf dem Server zuhause läuft erfasst die Temperaturen per “sensors” und “hddtemp”. Der xinetd-Daemon konfigurierte ich daraufhin so das auf einen Port das Skript gebunden wird. Es erwartet bevor es die Daten übermittelt ein Passwort, einfach zum zusätzlichen Schutz auch wenn das vielleicht gar nicht nötig ist. Jemand der einen Portscan durchführt könnte eben so informationen zum System gelangen, die Passwortabfrage verhindert dies.

Zunächst zu dem Ruby-Script(z.B. /opt/botinfo.rb):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/ruby
 
i = Kernel.gets
if i.chomp != 'DASGEHEIMEPASSWORT' then
	# puts 'Wrong Password'
	exit
end
 
puts `uptime`.lstrip
 
# HDD Temps:
matches = `cat /proc/partitions`.scan /([s|h]d[a-z])/
matches.uniq!
matches.each do |disk|
	print "#{disk}: #{`hddtemp -n /dev/#{disk}`.chomp}.0*C (#{$1}GB) "
end
puts 
 
systemp = `sensors`
 
temp1 = systemp.scan /CPU Temp:    \+([0-9]+)\.0.C/
temp2 = systemp.scan /M\/B Temp:    \+([0-9]+)\.0.C/
 
puts "System: #{temp2[0]}.0*C #{temp2[1]}.0*C | CPUs: #{temp1[0]}.0*C #{temp1[1]}.0*C"

Hier muss natürlich sensors und hddtemp installiert sein, aber dieses Script kann praktisch alles mögliche an Informationen sammeln und ausgeben.
Die Konfiguration von xinetd gestaltet sich sehr einfach, in dem Verzeichnis /etc/xinetd.d einfach eine neue Datei für das Script erstellen(z.B. “botinfo”):

1
2
3
4
5
6
7
8
9
10
11
service botinfo
{
    disable         = no
    port            = 8888
    socket_type     = stream
    protocol        = tcp
    wait            = no
    user            = apoc
    server          = /opt/botinfo.rb
    type            = unlisted
}

Den Port, User und den Skript Pfad entsprechend anpassen und xinetd neu starten. Mit netcat kann es man danach testen:

1
2
3
4
5
$ nc localhost 8888
DASGEHEIMEPASSWORT
18:40:35 up 3 days, 41 min,  4 users,  load average: 0.00, 0.02, 0.20
sda: 30.0*C (10GB) sdb: 29.0*C (10GB)
System: 39.0*C 38.0*C | CPUs: 37.0*C 36.0*C

Der Port muss ggf. vom Router geforwarded werden damit ein Entfernter Server darauf zugreifen kann. Auch ein dyndns ist hilfreich, sofern man über keine statische IP verfügt. Ein einfaches rbot-Plugin um diese Daten vom irc aus abzufragen sieht z.B. so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
require 'socket'
 
class BotinfoPlugin < Plugin
  def help(plugin, topic="")
    'info => return system information'
  end
 
  def info(m, params)
    sock = TCPSocket.new('heimserver.dyndns.org', 8888)
    sock.puts('DASGEHEIMEPASSWORT')
    m.reply sock.recv(1024)
    sock.close
  end
end
plugin = BotinfoPlugin.new
plugin.map 'info'

Die Daten können ebenfalls von einem PHP-Script aus abgefragt werden. Keines Beispiel:

1
2
3
4
5
6
7
8
9
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, "heimserver.dyndns.org", "8888");
 
$pass = "DASGEHEIMEPASSWORT\n\n";
socket_write($socket, $pass, strlen($pass));
 
echo socket_read($socket, 2048);
?>

Vielleicht findet das ja irgendjemand interessant ;)

Tagged: , , , , , , , , ,