Archive for September, 2008

Captchas

by apoc · september 27 2008 · 2 comments

Captchas, diese kleinen Bilder als Zugriffsbeschränkung, die verunstaltete Buchstaben mit teils zufälligen Hintergründen darstellen. Erst nach abtippen der Richtigen Buchstaben wird man als Mensch klassifiziert und man darf Formulare Senden oder den vor Software-Robotern(Bots) geschützten Bereich betreten. CAPTCHAS: Completely Automated Public Turing test to tell Computers and Humans Apart. Ein verdrehter Turing Test, ein Mechanismus der Voraussetzt das Menschen den Text lesen können und Computer nicht.

Doch Captchas sind lohnend. Es existiert ein richter Markt für das Erkennen von Captchas, die Spammer und andere zweifelhafte Gestalten zahlen zwischen $0.70 und $1.00 je 1000 erkannten Captcha. Doch längst gibt es nicht mehr nur Text-based-Captchas, von Audio-Captchas die verrauscht einzelne Buchstaben aufsagen, bis hin zu Rechenaufgaben die es zu lösen gilt oder das finden der Frau/Mann auf einem Bild:

Kreativer-Captcha: Wie heisst der Mann auf dem Bild?

Kreativer-Captcha: Wie heißt der Mann auf dem Bild?

Rechenaufgaben als Captcha

Rechenaufgaben als Captcha

Diese kreativen Captchas haben den Vorteil das erst jemand ein gezielten Angriff schreiben müsste, dann jedoch offenbart sich nach kurzen überlegen die Schwachstellen, die Rechenaufgabe ist einfach per OCR zu erkennen, und war nicht Google ein hervorragender Taschenrechner? Auch die Bilder der Personen-Konturen offenbaren dummerweise nach einigen Reloaden immerwieder die exakt gleichen Konturen, und auch hier ist die Schrift einfach zu erkennen. Die Frage ob ein Captcha sicher ist oder nicht kann nicht so leicht beantwortet werden. Mit genügend Motivation und Technischer Finesse kann sogut wie alles gelöst werden. Dabei reicht eine Erkennungsrate von 10% völlig aus, bei 1000 abgesetzten Spam-Versuchen kommen so immer noch 100 durch. Klassisch läuft ein Angriff auf ein Captcha in 3 Phasen:

  1. Vorverarbeiten des Bildes, entfernen von Hintergrundbilder, Kontrast erhöhen, etc.

  2. Segmentation: Die Buchstaben werden voneinander getrennt.

  3. Recognizion: Jeder Buchstabe wird per OCR erkannt.

Mittlerweile haben wir überaus fortschrittliche OCR-Software zur Verfügung, die freie alternative gocr usw. Einige wie z.B. Finereader erlauben zudem das antrainieren einer bestimmten Schriftsorte, perfekt für ein erkennen von Captchas. Moderne Captchas setzen deshalb bereits eine Stufe früher an. Das Schwierigste ist nämlich die Segementation, wo ein Mensch nicht die geringsten Probleme hat Buchstaben voneinander zutrennen, ist diese Aufgabe für den Computer fast unmöglich. Deshalb setzen gute Captchas daran das Segementieren möglichst Schwierig zu gestalten:

Segmentierung fast unmöglich

Segmentierung fast unmöglich

Der Strich verbindet die Buchstaben und macht Segementierung sogut wie unmöglich

Ein Strich verbindet die Buchstaben und macht die Segmentierung schwer

Teilweise werden auch neue Schriftarten kreiert die nur dem Captcha Generator zur Verfügung stehen um OCR-Software zu überfordern. Captchas sind seit langem Forschungsgegenstand, es gibt einige Papers die neue Algorthmen und Möglichkeiten beschreiben Captchas zu entschlüsseln oder die Zeichen zu segmentieren. Genauso wie es Aufsätze über das Erstellen von besonders sicheren Captchas gibt.

Eine weitere Möglichkeit Captchas zu entschlüsseln ist sie auf eigenen Seiten unterzubringen. Diese Relay-Attacke bindet das Captcha einer Fremden Seite auf einer eigenen Seite ein wo Besucher das entschlüsseln des Captchas übernehmen. Es gibt keine Möglichkeit diesen Angriff wirkungsvoll zu verhindern.

Tagged: , , ,

opengl-background unter compiz

by nks · september 19 2008 · 3 comments

Eine weitere nette Spielerei für Leute mit zu viel Ressourcen :D

Ich hab sie nicht aber das ganze läuft auch auf einem 700Mhz Duron flüssig.

Ihr benötigt “xscreensaver” (und auch das Paket “fireflies” falls ihr es wie auf den Screenshots haben wollt, wobei sich “pong” auch ganz gut macht) und “xwinwrap” (xwinwrap does teh magic)

nks@hydra ~ $ nice -n 15 /usr/bin/xwinwrap -ni -argb -fs -s -st -sp -b -nf -- /usr/lib/misc/xscreensaver/fireflies -window-id WID

Das ganze sieht dann so aus:

Für mehr Infos:

Man kann neben xscreensaver auch Videos als Hintergrund laufen lassen

nks

Tagged: , , , , , ,

software-kvm mit synergy

by nks · september 19 2008 · leave a comment

Mir ist gestern die Fernbedienung meiner Sourround-Anlage auf den Boden gefallen – jetzt ist sie unbrauchbar. Also dachte ich mir: “Hey, mach doch den eee-pc zu deiner neuen Fernbedienung!”.

Also wenn ich im bett liege und die lautstärke regeln will, schnell per ssh auf den Rechner verbinden und alsamixer nutzen. Aber dafür is der eee ja schon bisl overkill. Dann erinnerte ich mich an meine Experimente vor einem Jahr die beiden desktop-pcs miteinander zu verbinden.

Ich hatte es auch mit synergy versucht, aber es war ziemlich buggy. Aber die neue Version läuft wesentlich stabiler. Also schnell auf allen 3 boxen synergy gemerged und ab an die config:

# nks's synergy configuration file
# eeerr0r is the synergy-server
# infected and hydra are the clients
 
section: screens
infected:
hydra:
eeerr0r:
end
 
section: links
# larry is to the right of moe and curly is above moe
infected:
right = eeerr0r
eeerr0r:
left = infected
right = hydra
hydra:
left = eeerr0r
end
section: aliases
infected:
192.168.178.30
hydra:
192.168.178.32
eeerr0r:
192.168.178.25
end

Das ganze dann auf dem System welches Tastatur und Maus bereitstellen soll unter “/etc/synergy.conf”
und dann ab in die shell:

nks@eeerr0r ~ $ synergys -f --config /etc/synergy.conf
nks@infected ~ $ synergyc -f eeerr0r
nks@hydra ~ $ synergyc -f eeerr0r

Und schon kann ich vom eee-pc aus beide Rechner kvm-style fernsteuern :D
das ganze funktioniert auch unter windows und mac os.

Besonders schön is das ganze in Kombination mit compiz weil man dann vom Bett/anywhere aus ranzoomen kann :D

Informationen & links:

ps: chase & status releasen demnächst ihr neues Album, zwar ziemlich die uk-kommerz schiene, aber “hurt you” und “pieces” laufen atm ja fast in jedem set, also man kann gespannt sein (wobei “hurt you” auch auf dem neuem Album ist)

pps:Ich hatte damals auch mit xdmx ruexperimentiert, hehe.. vll. probier ich demnächst auch wieder etwas damit rum, allerdings mit compiz etwas zu lahm, in Kombination mit chromium funktioniert es vll besser.

nks

Tagged: , , , , , ,

Rbot Remote

by apoc · september 15 2008 · leave a comment

Ich setze schon lange den grandiosen IRC-Bot “rbot” ein. Ein überaus vielseitiger und einfach zu erweiternder Bot, der dazu auch noch in meiner Lieblings Script-Sprache Ruby geschrieben ist. Vielleicht komme ich dazu einige meiner Plugins, die ich für ihn geschrieben habe, hier zu Veröffentlichen.

Eines der Features von rbot welches ich erst kürzlich entdeckt habe und was absolut genial ist, ist das Rbot Remote Interface. Per Default hört der Bot nämlich auf Port 7268(127.0.0.1) und stellt dort ein DRb(Distributed Ruby) Interface zur Verfügung. Dieses erlaubt es von Außen den Bot zu steuern und beispielsweise Funktionen eines Plugins auszuführen. RbotRemote kann z.B. dazu genutzt werden bei neuen SVN-Commits im RSS Plugin das Updaten eines Commit-Feeds zu starten. Denkbar ist dies natürlich auch für neue Blog-Posts innerhalb von Wordpress etc.

Da DRb logischerweise nur für Ruby zur Verfügung steht muss bspw. eine PHP-Webapplikation ein Ruby-Skript starten welches die gewünschte Aktionen am rbot auslöst. Hier als Beispiel-Skript wird eine Nachricht an #sixserv(btw: im Freenode) gesendet:

#!/usr/bin/ruby
 
require 'drb'
 
rbot = DRbObject.new_with_uri("druby://localhost:7268")
id = rbot.delegate(nil, "remote login owner [Owner/Auth Passwort]")[:return]
rbot.delegate(id, "dispatch say #sixserv Hallo Welt!")

In /bin/rbot-remote gibt es ein ähnliches, etwas komplexeres Beispiel welches die Eingaben von stdin erwartet.

Eine weitere Möglichkeit ist wie schon erwähnt eine Methode eines Plugins zu starten. Hier ein ganz einfaches rbot-(Remote)Plugin:

class SimplePlugin < Plugin
  include RemotePlugin
  def sayfoo(m, params)
    @bot.say '#sixserv', 'foo'
    if params.has_key?(:bar) then
      @bot.say '#sixserv', params[:bar]
    end
  end
end
 
plugin = SimplePlugin.new
plugin.remote_map 'sayfoo'
plugin.remote_map 'sayfoo :bar'

Wird die Methode extern aufgerufen kann man natürlich kein m.reply verwenden, wenn die Nachricht im Channel landen soll, ich habe das hier ganz einfach gelöst indem ich den Channel fest eingebunden habe. Hier noch das Skript welches sayfoo mit Parameter aufruft:

#!/usr/bin/ruby
 
require 'drb'
 
rbot = DRbObject.new_with_uri("druby://localhost:7268")
id = rbot.delegate(nil, "remote login owner [Owner/Auth Passwort]")[:return]
rbot.delegate(id, "sayfoo bar")

Update: Das Plugin auf remote_map geändert, thanks for the hint tango!

Tagged: , , , , ,

Corporate Blogging mit User-Subdomains

by apoc · september 2 2008 · one comment

Das Sixserv Blog ist ein Multiuser-Blog(d.h. Mehrere Autoren verfassen Artikel), unter der Hauptdomain(sixserv.org) sollten alle Artikel angezeigt werden. Wir wollten allerdings zusätzliche Subdomains(z.B. apoc.sixserv.org) die die Artikel des jeweiligen Autors anzeigt. Besonders wichtig dabei war das es möglich ist pro Subdomain unterschiedliche Themes zu verwenden.
Als Grundlage für dieses Vorhaben verwendete ich das Wordpress-Plugin Domain-Mirror von Dave McAleavy. Ich ergänzte es um die Möglichkeit pro Domain einen Benutzer sowie Theme eingeben zu können:

Zeigt die neuen Einstellungsmöglichkeiten von Domain Mirror.

Zeigt die neuen Einstellungsmöglichkeiten von Domain Mirror.

In der Apache Konfiguration des jeweiligen vHost der Subdomain genügt ein:

Alias /blog "<Wordpress-Pfad>"

Sofern kein Unterorder verwendet werden soll, äquivalent ein DocumentRoot mit Installations-Pfad. Dann kann man sich ebenfalls das anpassen der Rewrite Regeln in der .htaccess-Datei im Wordpress-Ordner sparen. Standardmäsig werden die Permalinks nämlich auf /index.php geroutet, was bei den Subdomains in unserem Fall nicht funktioniert, und entsprechend angepasst werden muss:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Wenn ohne Subdomain dann Standard Rewrite...
RewriteCond %{HTTP_HOST} ^sixserv.org$
RewriteRule . /index.php [L]

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Hier mit Subdomain also mit /blog
RewriteCond %{HTTP_HOST} ^(^.*)\.sixserv.org$
RewriteRule . /blog/index.php [L]

Ihr könnt die erweiterte Version von Domain-Mirror hier herunterladen: domain-mirror1.1_patched1.zip [Patch-File für 1.1]

/
This is a customized Version of Domain-Mirror. I added the Feature to specifies the Theme and User per Domain-Entry. You can download the Patched Version of Domain Mirror 1.1 here: domain-mirror1.1_patched1.zip [Patch-File for 1.1]
\

Tagged: , , ,

WPA_Supplicant für Windows

by apoc · september 1 2008 · leave a comment

Gestern stand ich vor dem Problem ein neues WLAN-Netzwerk unter Windows XP einzurichten, soweit ja kein Problem werdet ihr sagen, allerdings wurde vorher das unsichere WEP eingesetzt und eine der verwendeten WLAN-PCMCIA Karten unterstützt kein WPA. Dazu kommt noch das der letzte Treiber von 2004 ist. Es handelt sich um eine “Acer WLAN 11g PCMCIA(wlan-g-pc2)”.

Gelöst habe ich das Problem letztendlich mit wpa_supplicant für Windows, welches nach einigen Testen auch durchaus stabil läuft. Das ganze wirkt schon ein wenig abenteuerlich(Winpcap wird z.B. benötigt um an die Pakete und das Interface zu gelangen), allerdings ist es schnell eingerichtet(läuft über die gleiche wpa_supplicant.conf wie unter Linux) und unterstützt dann auch tatsächlich alle Protokolle die Supplicant unterstützt.
Zusätzlich gibt es eine spezielle Version(wpasvc.exe) die man als Dienst(Service) registrieren kann. Nachteil ist allerdings das sie ihre Konfiguration aus der Registry bezieht, was wie bekannt ein wenig umständlich ist.

Trotzdem ist es eine wunderbare Möglichkeit ältere WLAN-Adapter unter Windows für WPA Fit zu machen.

Tagged: , , , ,