Newsletter

Email:


Name (optional):


Archiv (ab 2010)

Nächste Veranstaltung

Resilience – die Geheimnisse guten Softwaredesigns (Uwe Friedrichsen)

Thu, 11. June 2015

18:30 - Türen auf
19:00 - Vortrag

Anmeldung

Anmeldung mit Xing

Anmeldung ohne Xing

Alle Veranstaltungen kostenlos

Verlosung nur an angemeldete Gäste

Silber-Sponsoren

Don't get lost in data, get information

ABIT GmbH - Beratung - Software -  Seminare - Veranstaltungen - News

Creating digital success. | ecx.io

Veranstaltungen

Resilience – die Geheimnisse guten Softwaredesigns (Uwe Friedrichsen)

Thu, 11. June 2015

Kalender als XML und iCal

Wir unterstützen...

Elterninitiative Kinderkrebsklinik e.V

Kinderkrebsklinik e.V

Sponsoren

Wir danken unseren Sponsoren:

Permanente Sponsoren

Uni Düsseldorf
(Raum und Beamer)


(Preise)


(Organisation und Marketing)


(Preise)


(Preise)

Mitgliedschaften

java.net Member

Events

Nachlese: Sicherheitslücken in Webanwendungen
Written by Philip Höfges   
Monday, 23 March 2015 11:00

Nachdem der letzte Vortrag krankheitsbedingt abgesagt werden musste, nimmt Philipp Hagemeister einen neuen Anlauf. Zu seinem Vortrag zum Thema „Sicherheitslücken in Webanwendungen“ finden sich etwa 100 interessierte Menschen im Hörsaal 5C ein. Philipp Hagemeister ist Promotionsstudent an der HHU und beschäftigt sich vorrangig mit Netzwerksicherheit.

Philipp beginnt seinen Vortrag mit einigen rechtlichen Hinweisen. Schließlich sollen wir das wissen ja dafür verwenden, uns gegen Angriffe zu schützen und nicht, um Angriffe zu starten. Der Redner nennt zunächst eine Liste möglicher Angriffsziele. Man ist erstaunt, wie vielfältig so ein Angriff auf die Webanwendung doch sein kann: Sicherheit des Passworts, Sicherheit der Firewall, Vertrauenswürdigkeit usw.

Für die Demonstration zeigt Philipp eine kleine, selbst geschriebene Anwendung einer Bank mit dem Namen „Ganz&Sicher“. Diese soll nachher auch dem Publikum für eigene Tests und Experimente zur Verfügung gestellt werden.

Zunächst zeigt Philipp, wie leicht man eine URL manipulieren kann, wenn nicht korrekt damit gearbeitet wird. Bei Datenübertragung mit GET werden die Parameter im Klartext mit übertragen. Leichte Angriffsfläche. Um dies zu vermeiden, sollte POST verwendet werden, sobald Daten im Spiel sind. Ist das alleine schon sicher? Nein, natürlich nicht!

Viele Webanwendungen stützen sich auf Datenbanken. Warum auch nicht? Ist ja sicher. Falsch! Die sogenannte „SQL Injection“ erlaubt es, beispielsweise in Textfelder auch schädliche Befehle einzugeben, die dann von der Anwendung ausgeführt werden. Im Extremfall können solche Befehle sogar Auswirkungen auf das System haben. Man kann damit Daten ohne Kenntnis des Admins verändern, hinzufügen oder löschen. Sehr schlecht! Als mögliche Gegenmaßnahme rät Philipp Hagemeister dazu, die Felder genau vorzugeben und zufällige Ids zu verwenden.

Moderne Browser nutzen alle die sogenannte „Same Origin Policy“. Dies bedeutet, dass nur Inhalten vertraut wird, die direkt von jeder jeweiligen Webseite stammen. Inhalte anderer Webseiten werden sofort ausgeschlossen. Dieses Konzept sei ein guter Anfang, meint der Redner, aber noch nicht der Weisheit letzter Schluss.

Weiterhin nennt Philipp Enkodierung als mögliche Schwachstelle. Man muss in der Anwendung durchgehend darauf achten, die Enkodierung zu überprüfen. Einmal vergessen, erlaubt dies bereits Vollzugriff auf die Webanwendung durch den Angreifer. Als Lösung rät der Redner dazu, eine Template-Sprache zu verwenden.

Außerdem gibt es ein Problem mit XSS: Es ist nicht wirklich zuverlässig, XSS zu filtern und kann sogar Schwachstellen verursachen.

Mit Hilfe der Token-Generierung versucht Philipp, eine Schwachstelle zu lösen: Schlechte Passwörter der Benutzer. Dabei weist er ausdrücklich darauf hin, dass die Bibliothek java.util.random nicht zu benutzen ist. Sie würde zwei Benutzer, die zur selben Zeit ein zufälliges Passwort anfragen, das Selbe geben. Schlecht! Weiterhin ist es oftmals nicht sonderlich schwer, Passwörter schlicht und ergreifend zu knacken. Es gibt die „Rainbow Tables“. In ihnen werden beliebte Passwort-Hash gespeichert. Das macht es für einen Angreifer sehr viel leichter, viele mögliche Passwörter auszutesten. Schlecht!

Wichtig dabei ist in jedem Fall: Niemals im Klartext speichern! Zu dem sollten Hashs verwendet werden: Passwörter sollten in Kombination mit einem „salt“ gespeichert werden. Dieser salt sollte mit Hilfe von einem der von Philipp vorgeschlagenen Programme erzeugt werden (PBKDF“, bcrypt oder scrypt). Diese Kombination macht es dem Angreifer zumindest sehr schwer, das Passwort zu knacken. Sicher ist so ein Passwort natürlich nie, aber man kommt immerhin sehr nah heran.

Abschließend fordert Philipp das Publikum auf, dass das Publikum die eigenen Anwendungen mit den hier vorgestellten Tricks überprüft. Mit Hilfe diese einfachen Tricks macht man es Angreifern sehr schwer und sorgt dafür, dass die Anwendung nicht so schnell geknackt werden können.

Nach dem Vortrag findet wie immer die abschließende Diskussion statt, bei der angeregt über das Thema diskutiert wird.

 
Software ändern - aber richtig Video online
Written by Lukas Ladenberger   
Thursday, 19 March 2015 16:50
Wir haben nachträglich das Video zum Mai 2014 Vortrag eingestellt (Dr. Gernot Starke, Software ändern - aber richtig): Zum Video.
 
JAX 2015 Freikarte: Der Gewinner steht fest!
Written by Lukas Ladenberger   
Wednesday, 18 February 2015 18:12

Die Freikarte geht an Michael Vitz! Viel Spaß auf der JAX wünscht das ganze rheinjug Team!

Der Software & Support-Verlag hat uns freundlicherweise eine Freikarte für die JAX 2015 (20. bis 24. April in Mainz) gesponsort - ein ganz herzliches Dankeschön dafür! Die Freikarte ist gültig für die 3 Hauptkonferenztage vom 21. - 23. April.

Die JAX bildet gemeinsam mit der W-JAX Europas führende Konferenz-Serie für Enterprise-Technologien, agile Methoden und Software-Architekturen. Mehr als 200 international renommierte Speaker geben in rund 230 Vorträgen ihr Erfahrungswissen an die Teilnehmer weiter. Verständlich, praxisnah und erfolgsorientiert. Dabei thematisiert die JAX eine große Bandbreite aktueller und zukunftsorientierter Technologien von Java über Scala, Android und Web-Technologien bis hin agilen Entwicklungsmodellen und dem modernen, effizienten Betrieb von IT-Systemen (DevOps).

JAX-Anmeldung: www.jax.de/2015/tickets

 
Nachlese: Generatives Testen in Clojure
Written by Philip Höfges   
Tuesday, 24 February 2015 12:26

Auch zum ersten Rheinjug-Vortrag im neuen Jahr haben sich etwa 60 Menschen im Hörsaal eingefunden, trotz eines kurzfristigen Redner- und Themenwechsels. Mit dem neuen Thema „Generatives Testen in Clojure“ stellt der Redner Jens Bendisposto sein persönliches Steckenpferd vor. Er hat am Lehrstuhl für Softwaretechnik und Programmiersprachen an der HHU promoviert und ist begeisterter Clojure-Nutzer.

Jens beginnt seinen Vortrag mit einer kurzen Einführung in die Sprache Clojure. Clojure ist ein LISP und gehört in die Kategorie der funktionalen Programmiersprachen. Wie viele andere Programmiersprachen auch, hat Clojure die klassichen Basisdatentypen, Integer und Strings, sowie einige Spezielle, nämlich Keywords und Symbole. Diese fungieren vor allem als Wiedererkennung. Zu dem gibt es in Clojure einige zusammengesetzte Datentypen: Vektoren, Listen, Sets und Maps. Diese unterscheiden sich nur wenig. Sets können beispielsweise keine doppelten Einträge enthalten, während Maps (ähnlich wie die HashMaps in Java) von einem Schlüssel auf einen Wert abbilden. Dabei können hier die Einträge bzw. Schlüssel und Werte jeweils jeder Basisdatentypen sein. Man kann alles frei vermischen und verschachteln. Mehr gibt es zur Grundsyntax nicht zu sagen. Damit kann man bereits alles in Clojure machen, behauptet Jens Bendisposto. Interessanter wird es natürlich bei Funktionen und deren Calls. Ein sehr gutes Feature von Clojure ist die Kompatiblität mit Java. Man kann jede Java-Funktion in Clojure importieren und benutzen. Dabei muss natürlich auf die Infix-Notation geachtet werden. Hier stellt der Redner einen schönen Vergleich an: Es wurde immer behauptet, dass Clojure sehr viele Klammern benutzen würde. Dies stimmt auch, aber Jens Bendisposto zeigt, dass es bei Java noch viel mehr sein können. Mit Hilfe der zwei wichtigten Clojure-Funktionen Map und Reduce zeigt der Redner, wie einfach man auch Funktionen als Parameter und Rückgabewert benutzen kann. Dies macht die Sprache sehr flexibel. Damit beendet Jens die Einführung in die Sprache Clojure.

Im zweiten Teil des Vortrags kommt Jens Bendisposto auf das eigentliche Thema zu sprechen: Testen. Die Basis von Tests in Clojure sind einfache Vergleiche zwischen dem Ergebnis einer Berechnung und deren erwartetes Ergebnis. Dies sind die Unit-Tests. Man kann einzelne Tests durchführen, aber auch mehrere Tests in einen Test-Case integrieren. Dies setzt natürlich voraus, dass das Ergebnis bekannt ist. Man muss sich also für jede einzelne Berechnung das Ergebnis überlegen. Dies ist natürlich sehr umständlich und deckt auch nicht jeden Randfall ab.

Um viele Tests schnell und übersichtlich zu lösen, wurde das generative Testen entwickelt. Dabei erzeugen so genannten „Generatoren“ zufällige Werte, die dann in die Tests integriert werden können. So können kontrolliert Zahlen, String, boolsche Werte uvm. erzeugt werden. Mit diese können dann die Tests bearbeitet werden. Dadurch ist es möglich, eine Vielzahl von Tests durchzuführen, ohne sich im Vorhein viele Gedanke darüber machen zu müssen. Weiterhin bietet diese Art von Tests in Clojure eine sehr übersichtliche Ausgabe, sollten die Tests fehlschlagen. Man sieht genau, welche Tests jeweils das Problem erzeugen. Vor allem interessant ist die Berechnung des Minimums, bei dem der Test nach wie vor fehlschlägt. Das heißt, dass man sehr genau sehen kann, welches Teilbereich das Problem erzeugt und kann diesen damit effizient beheben. Für diese Tests sind Monotonie und Persistenz sehr wichtig. Um dies zu beweisen, zeigt Jens Bendisposto die Arbeitsweise der Funktion apply. Mit ihr können Funktionen auf beispielsweise Listen und Vektoren angewendet werden. Dies gestattet die Benutzung von so genannten „Quick-Checks“. Hier werden die Generatoren dazu genutzt, eine Vielzahl von automatischen Tests zu erzeugen. Hier kann man die Monotonie der Werte jeweils sehr schön sehen. Bleibt noch, die Persistenz zu beweisen. Um die Performance zu verbessern, wird das Schlüsselwort transient benutzt. Dieses Kontrukt ist jedoch veraltet und wird heutzutage kaum noch eingesetzt. Allerdings wird es hier noch benötigt, um die Persistenz zu zeigen. Wenn eine Funktion mit und ohne diese Optimierung das gleiche Ergebnis liefert, sind die Daten immer korrekt.

Zum Abschluss zeigt Jens noch ein bemerkenswertes Beispiel eines Bugs, welcher mit Hilfe des generativen Testens gefunden worden ist. Zwei Berechnung liefern das selbe Ergebnis. Dennoch schlagen die Tests fehl. Wie kommt es? Durch generatives Testen wurde dieser Fehler zufällig gefunden und konnte behoben werden. Diesen per Hand zu finden, erklärt Jens sowohl mit Clojure, als auch mit Java für unmöglich. Findet allgemeine Zustimmung.

Das Fazit des Tages: Generatives Testen in Kombination mit Unit-Tests ist eine sinnvollen und sehr nützliche Sache!

 
More Articles...