HTTP Header auslesen

Bei einem Penetration Tests eines Web Servers gehört das Auslesen des HTTP Headers zur Standard-Prozedur. Natürlich geht es mit netcat – oder schlimmer noch: telnet, z.B:

# nc www.domain.com 80
GET / HTTP/1.1
Host: www.domain.com

Die bequemere Variante
Für einzelne Abfragen ist das eigentlich okay, wenn Du jedoch viele Hosts so abklappern musst, dann geht das natürlich einfacher:

# curl -v http://www.domain.com/ | head

Curl unterstützt übrigens auch die HTTP HEAD Methode:

# curl --head http://www.domain.com/

Dies funktioniert natürlich auch mit ssl, so dass man nicht auf den umständlichen openssl s_client zurückgreifen muss. Trotzdem hier nochmals der Syntax, um sich manuell mit einem SSL Dienst zu verbinden:

openssl s_client -connect www.domain.com:443

Bessere Zufallszahlen mit Ruby

Die meisten Pseudo-Zufallszahl-Generatoren arbeiten mit einem Seed, der auf der Systemzeit basiert. Oft reicht dies auch aus, wer aber sehr viele Zufallszahlen innert Millisekunden generieren muss (z.B. über Unit Tests), dem wird die Standard-Methode nicht ausreichen. “Bessere Zufallszahlen mit Ruby” weiterlesen

Fehlender Public Key bei apt-get

Heute wollte ich ein Ubuntu System aktualisieren, das Update schlug allerdings mit folgender Fehlermeldung fehl:

# apt-get update
[...]
W: GPG error: http://ppa.launchpad.net lucid Release:
The following signatures couldn't be verified because
the public key is not available: NO_PUBKEY 00A6F0A3C300EE8C

Und so kann man den den fehlenden Key importieren:

# missing=00A6F0A3C300EE8C
# gpg --keyserver keyserver.ubuntu.com --recv $missing
# gpg --export --armor $missing | sudo apt-key add -

E-Mail-Adresse mit CSS schützen

Ich wurde öfters angesprochen, wie ich E-Mail Adressen auf Websites schütze. Ich finde die folgende Methode sehr effizient:

Ich verwende ich hierfür eine eigene CSS Klasse, die den Text rückwärts ausgibt. Im Source Code wird die E-Mail Adresse von rechts nach links eingegeben, hier der HTML-Code:

<span class="email">hc.esnesten@ofni</span>

Im Stylesheet ist die Klasse wie folgt definiert:

.email {
  unicode-bidi:bidi-override;
  direction:rtl;
}

Crawler erkennen hier kein Pattern, die E-Mail Adresse wird für den User aber korrekt dargestellt.

Ruby on Rails Cookies und Sicherheit

Die Standard-Cookie-Einstellungen von Rails sind aus der Security-Perspektive nicht ideal und sollten bei sensitiven Systemen etwas angepasst werden. Dies geschieht in der config/initializers/session_store.rb

MyApp::Application.config.session_store :active_record_store,
        :secure => Rails.env == 'production',
        :http_only => true,
        :expire_after => 60.minutes

Zeile 1: Session infos in der DB speichern (nicht im cookie). Hierbei nicht vergessen, die notwendige Tabelle zu erstellen:

 # rake db:sessions:create

Zeile 2: Secure flag setzen wenn die Produktion mit https läuft
Zeile 3: JavaScript Access auf Cookies verbieten
Zeile 4: Expiration Time setzen

Rails: Hardening Authlogic

Authlogic verwendet ein eigenes Cookie zur Identifizierung der User Session. Da wir diese Info aber sowieso schon in der Session haben, ist es unnötig. Ausserdem wollen wir, dass der Token neu generiert wird, ansonsten funktioniert nämlich der CSRF Schutz nicht mehr.

Folgende Änderung im UserSession Model schafft Abhilfe:

class UserSession < Authlogic::Session::Base

  # kein eigenes cookie anlegen
  skip_callback :after_save, :save_cookie

  # persistence token nach logout neu generieren
  before_destroy do
    record.reset_persistence_token
  end

end