Archive for August, 2008

Wer kennt nicht noch die Zeiten, wo Microsoft nicht gerade der Inbegriff für Sicherheit war.

Aber dies hat sich enorm geändert. Microsoft hat viel getan in dieser Hinsicht und hat noch viel mehr vor.

Jetzt haben die Jungs vom Internet Explorer Team eine weitere feine Sache in den IE8 implementiert.

Und zwar das sogenannte “InPrivate”.

Laut dem Blogbeitrag unter IE8 and Privacy speichert der IE8 keinerlei Daten auf der Festplatte.

Das macht Forensikern das Leben so richtig schwer, den Werbetreibenden aber auch.

Keine Tracking Cookies, keine versteckten Informationen mehr und auch Viren haben hier ihre Last dann. Da der IE8 nichts mehr auf der Platte speichert, wird sich hier auch ein Virus die Zähne ausbeißen.

So jedenfalls die Theorie!

Bleibt abzuwarten wie die ganze Sache gelöst ist. In der nächsten Beta des IE8 soll dieses Feature enthalten sein und ich werde es mir auf jeden Fall ansehen.

*Aktualisierung*

Hier ein Auszug aus dem Blogbeitrag vom IE8 Team:

    New temporary Internet files will be deleted after the Private Browsing window is closed

:D Merci… Solange Daten auf der Platte landen, kommt man später auch wieder ran. Auch wenn sie gelöscht sind.

Schade… Hätte ja sein können, dass hier mal mitgedacht wird. ;)

Unittests sind oftmals das letzte, was vor dem Codechaos schützt.

Aber wehe man muß bei den Unittests eine Datenbank berücksichtigen.

Da kommt man schnell ins Fummeln. Hier mal ein Hilfsscript, dort ein Backup, hier ein Restore und weil es Spaß macht, muß man alles wieder von vorne machen, sobald sich nur eine kleine Sache in der Datenbank geändert hat.

Und hier kommt dann NDbUnit ins Spiel.

NDbUnit ist aber nicht wie NUnit eine Unittestlösung mit Oberfläche, sondern wird direkt in den Source integriert.

Bleibt abzuwarten, ob sich hier in Zukunft noch was ändert. So wirklich glücklich bin ich über diese Lösung nicht… :(

Wer nur einen kurzen Blick drauf werfen will, der findet hier ein kleines Videobeispiel von NDbUnit.

Für mich selbst ist es im Moment nicht sinnvoll einsetzbar, da ich mit dem Dynamic Data Cache auf eine eigene Datenbankfremde Lösung setze.

Heute habe ich ein paar Stunden damit verbracht, einen alten Source wieder zum laufen zu bringen.

Der Source stellt eine Implementierung des HttpListener als kleinen Webserver dar.

Bei den Unittests der einzelnen Module lief alles sauber durch. Aber dann beim Aufruf der Testseiten kamen seltsame Reaktionen vom Servermodul.

Das ging von sporadischem Aussteigen, sofortigem beenden und nur teilweisem senden der angeforderten Dateien.

Die Exceptions selbst waren erst einmal eindeutig:

    Objekt: System.Net.HttpListenerResponse
    
    Meldung:
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Auf das verworfene Objekt kann nicht zugegriffen werden.
    

Ein Tip von TheUndeadable brachte mich auf die Suche nach einem verfrühten, sprich manuellem, Dispose des Objektes.

Nada… Es war nichts zu finden. Auch ein Hochdrehen des Loglevels brachte nichts.

Ok, abgesehen von einem blöden Fehler im Caching, welcher mit diesem Problem aber nichts zu tun hatte, aber auch gleich gefixt wurde.

Beim stöbern in der MSDN, bin ich dann über einen Querlink auf diese Seite gestossen:

Configuring HTTP and HTTPS

Und hier haute die Erinnerung mit einem mächtigen DU DEPP zu.

Klar… beim Einsatz des HttpListener muß man Windows das erstmal mitteilen, dass der Port und die IP-Adresse gebunden werden soll und das ein Listener drauf läuft.

Also flink ein

    netsh http add iplisten ipaddress=0.0.0.0:80

gemacht und siehe da… es funktioniert wieder wie es soll.

Aber wieso Vista dann trotzdem einen Teil der Anfragen weiter geleitet hat… hier bin ich echt ratlos. Theoretisch hätte gar nichts passieren dürfen, oder wenigstens eine Exception geworfen werden müßte nach dem Motto “Access denied” o.ä.

Naja… Windows live ;)

SQL Injections… die Grundlage alles Bösen denken viele…

Nein, dass stimmt so nicht!

Dieses Problem war schon immer vorhanden und liegt oftmals im blanken Unwissen der Programmierer und noch häufiger in der Unbrauchbarkeit einer Programmiersprache begründet.

Unbrauchbarkeit?

Ja! Programmiersprachen mit Typsicherheit haben hier Unmengen an Vorteilen. Viele SQL-Injections gehen nur, wenn man aus dem SQL String ausbrechen kann.

Sprachen wie PHP und Perl sind hier aufgrund ihres Aufbaus schon per Definition ein Sicherheitsrisiko.

Zwar hat man bei PHP mit PDO und den Prepared Statements und Stored Procedures einen großen Schritt in Richtung höherer Sicherheit gemacht, aber dies stellt in meinen Augen auch nur eine Hilfslösung da.

Es gibt immer noch genügend SQL Injections, welche Besonderheiten des jeweiligen Datenbankservers ausnutzen und nicht zwingend auf das Ausbrechen aus dem SQL String angewiesen sind.

Ich will hier aus verschiedenen Gründen keine Beispiele bringen, aber es gibt sie. :(

Denkt einfach an Dinge wie automatische Zeichenumwandlung, nicht dokumentierte Befehle und Funktionen aus Datenbankfremden Treiberschichten, welche von dieser angesprochen werden können.

All data are evil !

Grundsätzlich kann man nur empfehlen bei wichtigen Dingen auf Typsichere Sprachen wie JAVA oder .NET auszuweichen.

PHP und Co. mögen ja für Hobbyprogrammierer langen, aber bei kommerziellen Projekten oder Projekten mit Fremddaten (z.B. Browsergames) kann man jedem nur empfehlen den sicheren Weg zu gehen.

Im Moment sind schon genügend Daten von uns allen unterwegs und außer Kontrolle. Man muß nicht noch selbst dazu beitragen diese Datenmenge zu vergrößern.

Mehr über das Thema SQL Injections kann man unter den folgenden Links nachlesen:

Auch wer mögliche Fehlermeldungen unterdrückt und eine Standardisierte Fehlerseite anzeigt, ist nicht sicher gegen SQL Injections. Man macht es dem Angreifer nur schwerer, aber nicht unmöglich.

Es gibt genügend Möglichkeiten um anhand des Verhaltens der verschiedenen Anzeigeseiten den groben internen Aufbau und sogar die Datentypen der einzelnen Spalten ermitteln zu können.

Glaube nicht, weil du es nicht kannst, dass andere es auch nicht können!

Es gibt genügend Scriptkiddis, welche sich solcher Tools bedienen:

Blind SQL Injection Brute Forcer

Und wem das nicht langt…

Top 15 free sql injection scanners

Ok… Scanner… aber wo ein Wille ist, da ist auch ein Weg daraus mehr zu machen.

Klar ist das Tool primär auf Datenübergabe per URL ausgelegt, aber ein halbwegs fähiger Programmierer hat das in wenigen Minuten von URL/GET auf POST geändert und an das Zielsystem angepaßt.

Ach und weil man es nicht oft genug sagen kann:

All data are evil !

Webauditing ist eine ziemliche aufwändige Tätigkeit.

Um so mehr freut man sich über Hilfsmittel, welche standardisierbare Handgriffe übernehmen können.

W3AF: Metasploit for Web applications

WA3F ist so eines. Man bekommt es hier:

W3AF

W3AF selbst ist eine Art Metasploit für Webbasierende Anwendungen und prüft Dinge wie SQL Injections, XSS und einige andere Dinge ab.

Hier ein kleines Beispielvideo direkt vom Hersteller:

OS commanding detection and exploit (pyGTK user interface) – Video

Sieht fein aus und dummerweise funktioniert es auch so einfach ;)

Logischerweise sollte man schon wissen was welches Modul macht und sowas auch schon selbst gemacht haben.

Sich blind auf Tools zu verlassen kann ziemlich schnell ins Augen gehen. Es wäre nicht der erste Server, der Datenverlust hat oder offline geht, weil jemand ohne Ahnung rumgefummelt hat.

Basteltag! :)

Man nehme Windows Server 2008 und Windows SQL Server 2008 und installiere dies auf einer Maschine…

Windows Server 2008

Windows Server 2008 ist einfach nur Creme :) Die Jungs von Microsoft haben verdammt viel gelernt und Sicherheit steht hier an sehr vielen Stellen an erster Position.

Lieber eine Sache zu viel per Default verbieten, als eine zu übersehen.

Per Default sind auch nicht viele Ports offen:

C:\Users\Administrator>netstat -a

Aktive Verbindungen

  Proto  Lokale Adresse         Remoteadresse          Status
  TCP    0.0.0.0:135            WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:445            WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:1433           WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:49152          WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:49153          WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:49154          WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:49155          WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    0.0.0.0:49156          WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    127.0.0.1:1434         WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    169.254.33.190:139     WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:135               WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:445               WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:1433              WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:49152             WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:49153             WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:49154             WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:49155             WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::]:49156             WIN-OZI5BOZ5IEJ:0      ABHÖREN
  TCP    [::1]:1434             WIN-OZI5BOZ5IEJ:0      ABHÖREN
  UDP    0.0.0.0:123            *:*
  UDP    0.0.0.0:500            *:*
  UDP    0.0.0.0:4500           *:*
  UDP    0.0.0.0:5355           *:*
  UDP    169.254.33.190:137     *:*
  UDP    169.254.33.190:138     *:*
  UDP    [::]:123               *:*
  UDP    [::]:500               *:*
  UDP    [::]:5355              *:*

Der eine oder andere Port dürfte eh aufgrund der VMWare Tools vorhanden sein, aber grundsätzlich gesehen schonmal ok.

Der IIS 7 selbst wird als eine Rolle installiert. Das absolut coole dabei ist, dass man nicht nur dann per Hand alle möglichen Optionen einstellen kann, sondern diese auch erklärt bekommt.

Dazu gehören Server Side Includes, ASP.NET, .NET Erweiterbarkeit, CGI, Authentifizierungsmodule… zu viel zum Aufzählen.

Nur die Warnmeldung nach der Installation irritiert ein wenig… ich konnte sie nicht finden…

Server 2008 Installationsdialog

Ich habe als Beispiel ein paar Optionale Module ausgewählt gehabt, welche man im Screenshot aufgelistet sehen kann. Insgesamt gesehen ist der IIS 7 auf den ersten Blick eine Runde Sache.

Der IIS 7 hinterläßt bei mir einen guten Eindruck und ich freue mich schon auf die ersten tiefergehenden Tests. :D

SQL Server 2008

Der SQL Server 2008 ist auf den ersten Blick auch leicht zu installieren. Schnell vergißt man aber das Database Engine Modul und wundert sich ein paar Minuten später, wieso kein SQL Server installiert ist.

Microsoft hat den SQL Server 2008 in viele kleine und oftmals getrennt installierbare Module zerlegt. Auf den ersten Blick seltsam, aber meiner Meinung nach sehr sinnvoll.

So kann man sich gezielt nur das Installieren, was man definitiv braucht.

Auch ansonsten ist die Installation sehr zügig, aufgeräumt und verständlich. Nur wieso er .NET 3.5 SP 1 braucht vor der Installation entzieht sich meiner Kenntnis.

Bisher bin ich erst auf zwei Warnmeldungen gestoßen, welche mir ein wenig seltsam anmuteten:

SQL Server 2008 Installationsdialog

SQL Server 2008 Warnmeldung

Ähm… ja… das als Warnmeldung zu deklarieren… naja… eine Information hätte es auch getan ;)

Ich bin ganz froh wenn .NET nicht so viel nach außen plaudern kann…

Scheinbar braucht der Reportingservice, welcher ein eigenständiges Modul ist, .NET 3.5 und setzt neuere Objekte/Methoden ein, welche erst mit SP1 dazugekommen sind.

Egal… es wird neben .NET 3.5 SP 1 noch ein weiterer Hotfix installiert, welcher aber auch auf der Installations-DVD enthalten ist.

SQL Server 2008 Warnmeldung

*Hust*

Auch hier eher eine Informationsmeldung. Klar muß man hier gezielt darauf achten wenn man Clustern will, Replikationen benötigt oder einen Reportingserver einsetzen will.

Insgesamt gesehen bin ich erstaunt wie dicht Windows 2008 Server ist und wir aufgeräumt der SQL Server 2008 erscheint.

In den nächsten Tagen werde ich mal schaun was so mit dem SQL Server 2008 geht.

Bruce hat mal wieder einen Hirst Arts Design Wettbewerb gestartet und beim durchsehen der schon vorhandenen Beiträgen bin ich auf eines gestoßen, welches mir so sehr gefallen hat, daß ich beschlossen habe etwas ähnliches zu machen.

Hier erst einmal der Link auf das Original.

Ruined Watchtower

Und hier mein aktueller Stand…

Towerruin 1Towerruin 2Towerruin 3

Towerruin 4Towerruin 5Towerruin 6

Rechts und Links im oberen Drittel der Bilder ist ein Navigationslink versteckt, welche erscheint, sobald die Maus drüber ist. Damit könnt ihr Vorwärts und Rückwärts in der Bilderserie blättern.

Ich muß morgen zuerst einmal noch ein paar Läden aufsuchen. Mir fehlt noch einiges an Arbeitsmaterial um fertig zu werden.

Wer Lust und Zeit hat, oder es Beruflich eh macht, der kann sich ja mal diese leider schon beendete Reverse Engineering Challenge ansehen:

F-Secure Reverse Engineering Challenge

Level 1 hatte ich in ca. drei Stunden beendet. Ich hatte mich dummerweise an der Dokumentation meiner Schritte festgekrallt, anstatt einfach die Lösung zu erarbeiten.

Level 2 hat mich bisher erst zwei Stunden gekostet und ich habe im Moment schon ein paar Ansatzpunkte.

Wer auch immer das vorbereitet hat… Respekt !

Es dürfte nicht mehr viele Programmierer geben, welche direkt in Assembler programmieren können.

Lange war es ruhig und es gab nur kleinere Updates, heute hat Microsoft mal wieder die große Keule rausgeholt und uns Programmierern wieder viel neues zum Lernen gegeben…

.NET Framework 3.5 SP1 und Visual Studio 2008 SP1 jetzt verfügbar!

Zusammenfassung:

  • .NET 3.5 Download wird kleiner
  • Optimierungen in der CLR, wodurch die Programme zwischen 20-45% schneller starten
  • Programmausführung dadurch um ca. 10% ingesamt schneller
  • WPF wurde erweitert, Probleme behoben
  • Einführung von ASP.NET Dynamic Data um Webseiten noch Dynamischer zu machen (noch mehr zum lernen…)
  • Damit Datenbankprogrammierer sich nicht langweilen, wurde mal eben noch ADO.NET Data Services und DO.NET Entity Framework eingeführt…
  • Was fehlt? Genau… WCF hat natürlich auch neue Features bekommen…

Manchmal frage ich mich, ob Microsoft überhaupt weiß wohin sie wollen. Laufend neue Features, die Autoren der Bücher kommen nicht mehr hinterher und von uns Programmierern rede ich mal gar nicht.

Man kommt nicht umhin, sich bei .NET zu spezialisieren. Die wenigsten dürften ein tiefes Wissen in den gesamten .NET Bereichen haben.

Also dann…

Möge das pauken beginnen ;)

Grillmeister :)

Es geht doch nichts über das Grillen :)

Ein guter Freund von mir würde zwar jetzt sagen, daß ich Fleisch verbrenne und nicht Grille.

Für ihn grillt man erst, wenn man sowas hier benutzt: Weber Grill

Und da natürlich NICHT den mit Gas, sondern den mit Kohle :)

Was das Posting soll? Nix… mir geht es gut und ich will mal Spam erzeugen im Blog :D