Articles
Im März durfte ich anlässlich des 2-jährigen Jubiläums einen "Gastvortrag" bei der Cryptoparty Graz halten.
Thema war daher eine Einführung in die Gefahren des Internets und die möglichen Gegenmaßnamen.
Es gibt auch eine Videoaufzeichnung, die nun online ist (siehe Link).
Download: cryptoparty-2015-03-02.pdf (3698 KiB)
Video: Youtube
For English readers: Sorry, this presentation was intended for locals in Graz - therefore it was held in German.
In 2014 I wrote my Master's Thesis on this topic at the IAIK (University of Technology Graz).
Abstract:
Fault injection attacks are physical attacks against electronic devices where physical effects are used to manipulate data or signals.
These attacks can bypass security mechanisms or unveil secret data which is processed by the device.
Hardware- or software-based countermeasures can mitigate these attacks.
While it is hard to modify pre-existing hardware, software-based countermeasures are more flexible.
Software-based countermeasures can be applied to critical parts of the code which leads to less overhead.
Applying software-based countermeasures manually is error-prone and complex.
Hence, it is advantageous to use a compiler to apply these countermeasures automatically.
Source code annotations can be used to distinguish important and unimportant code to keep the performance penalty to a minimum.
This work discusses compiler-assisted countermeasures against fault injection attacks.
Since software-based countermeasures cannot prevent fault injection attacks, the aim is to detect them.
Fault injection attacks can be detected by storing data redundantly and processing the data redundantly.
From a theoretical standpoint, the following five different methods are discussed: checksums, simple duplication, complementary redundancy, masking, and verification of computations.
Simple duplication and complementary redundancy were also practically realized using the LLVM compiler toolchain.
Introducing redundancy to a compiler is a constant fight as the compiler aims at removing redundant code.
To verify the applied countermeasures, the effectiveness of the applied countermeasures was analyzed using a simulator of the ARM Cortex-M0+ which was extended to simulate fault injection attacks.
Performing 829896 different bit-flip attacks to the unprotected test programs results in 64698 successful attacks (7.8 %).
Simple duplication reduces the number of successful attacks to 328 of 1887768 attacks (0.0174%).
Complementary redundancy reduces the number of possible attacks to 32 of 2285016 attacks (0.0014%).
These promising results lay the foundation for further research in the field of compiler-assisted countermeasures against fault injection attacks.
Download Master's Thesis: masterthesis.pdf (768 KiB)
Bibtex: masterthesis.bib (1 KiB)
Upon request, I am providing the patches to the clang, the patches to the llvm, and my llvm passes here.
Please note, that this project was developed as a proof-of-concept.
It was never intended to be integrated into a final product.
This article shows all HTTP request headers.
If you see a super-cookie in red (e.g., "X-UIDH") you should be worried and choose another internet provider.
Orange entries were not set at the time testing it - please notify me to adapt the filter.
For more information see en.wikipedia.org.
Accept-Encoding | br,gzip |
---|
If-Modified-Since | Sun, 16 Jun 2024 22:41:11 GMT |
---|
Accept-Language | en-US,en;q=0.5 |
---|
Accept | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
---|
User-Agent | CCBot/2.0 (https://commoncrawl.org/faq/) |
---|
Connection | close |
---|
X-Accel-Internal | /internal-nginx-static-location |
---|
X-Real-Ip | 35.170.81.33 |
---|
Host | christoph.hillebold.at |
---|
I wrote a small test program using JQuery to show how session cookies or stored browser passwords could be stolen by an external Javascript.
Store the Website locally on your computer to simulate this using an other domain.
Testwebsite
Yesterday, I noticed a small program on fdroid with some strange permission settings:
Dotty [1] is an app to visualize the pressed locations in parallel (multitouch). By common sense, this should not require any permissions. However, to my surprise, it seems to require three permissions:
READ_PHONE_STATE
WRITE_EXTERNAL_STORAGE
READ_EXTERNAL_STORAGE
I thought it would be interesting to find out, what the simple program is up to and I analyzed the source code: the git repository [2] and the tar ball [3]. None of the sources contained the said permissions in the AndroidManifest.xml. For further investigation, I used Androguard [4] which allows insight in a downloaded *.apk-file. Trying the following command unveiled, that no permissions were required by the manifest:
androapkinfo.py -i ./steele.gerry.dotty_2.apk
After further investigation, i noticed that the minimum required android version is set to 1. Apparently these three permissions are automatically added to the permission system, if the minimum android sdk version is three or lower (this equals Android 1.5 or lower). However, the android documentation [5] states, that it requires both, the minimum and the target android sdk version to be three or lower. In case of dotty, the target was set to android apk version 7 (?!).
However, I have to conclude, that thankfully the permission is displayed by my Android (4.4.4) device. Fdroid has (until now) not disappointed me :-)
Um unabhängig von Google und Co zu werden habe ich mich entschlossen mir einen CalDAV- und WebDAV-Server einzurichten.
Der wahrscheinlich berühmteste Vertreter ist wohl Owncloud. Beim ersten Installationsversuch ist mir jedoch aufgefallen, dass die aktuelle Version rund 10.000 Dateien und eine stolze Gesamtgröße von 93 MB auf der Festplatte einnimmt. Ich weiß, Owncloud kann noch mehr, aber 65 MB für "apps", 22MB für "core" und 18 MB für "3rd party" ist einfach zu viel, wenn man nur Kalendereinträge synchronisieren will.
Bei meiner weiteren Recherche stieß ich nun darauf, dass Owncloud die Kalendersynchronisation eh nicht selbst erledigt, sondern dafür externe Libraries verwendet, nämlich sabre/dav, welches man sich auch selbst einrichten kann. Dies ist wohl etwas unpraktisch, da die Entwickler ständig betonen die Bibliothek nicht für "Endkunden" zu entwickeln, aber es ist mit wenig Aufwand realisierbar, wenn man sich an das Tutorial [1] hält.
Da ich keine Shell auf meinem Webserver aufrufen kann, verwendete ich die Webinstallation. Wichtig ist, dass das Tutorial davon ausgeht, dass der Inhalt des Zip-Archivs komplett entpackt wird. Der verwirrende Passus wurde nach kurzer Diskussion im Git-Repo ohnehin gestrichen ;-) Am Besten ihr verwendet die Datei "groupwareserver.php" [2] im Example-Ordner und passt sie entsprechend an. An dieser Stelle möchte ich anmerken, dass die Installation in ein Subverzeichnis nicht funktioniert hat (neue Subdomain anlegen, dann klappts sofort). Der Webserver schien einfach endlos die Seite zu laden, wenn sich das Projekt in einem Unterordner befand (trotz korrekt gesetzten Verzeichnissen in den PHP-Dateien).
Im "examples"-Ordner finden sich noch SQL-Skripts für die jeweiligen Datenbanken die auszuführen sind. Wenn ihr das Passwort des Users ändern wollt (wollt ihr!), müsst ihr den MD5 von username:SabreDAV:password verwenden, in MYSQL z.B. mit MD5('admin:SabreDAV:mysecret'). Na, immerhin wird ein Salt verwendet... (MD5 sollte man nicht mehr verwenden).
Am PC verwende ich zur Synchronisation Icedove (=Thunderbird) mit einem Iceowl-Plugin (Lightening in Thunderbird), welches in Debian über apt-get installiert werden kann :-) Für die Kontakte verwende ich den "Inverse SOGo Connector", ein DAV-Plugin für Addressbücher. Ich muss euch davon abraten die Google Kontakte direkt zu synchronisieren und zu verschieben, da dies sehr schlecht funktioniert. Ich weiß nicht, welches Plugin schuld ist, aber es verschwinden dabei die meisten Kontakte und viele Informationen. Manche Daten werden sogar zwischen Kontakten vermischt. Achtung auch beim SOGo Connector, man sollte das Adressbuch später nochmal löschen und neu importieren, damit man sieht, was wirklich am Server liegt. Vor allem beim Verschieben von Kontakten gibt es da große Probleme. Am Besten die Kontakte gleich händisch übertragen ;-)
Am Handy verwende ich DAVDroid zur Synchronisation von Kalender und Kontakten, was ich aber nicht von Google Play, sondern von FDroid installiert habe. Funktioniert bis jetzt ohne Probleme :-)
Nachdem ich am Samstag, 27.04.2013 und Sonntag 28.04.2013 am Barcamp Graz teilgenommen habe, möchte ich nun auch die Folien meiner Präsentation "Tools for Malware Analysis on Android" veröffentlichen. Darin zeige ich Screenshots/Beispielbefehle, wie ihr eine Android-App (*.apk) auf verschiedene Arten analysieren könnt (Statische und Dynamische Ansätze).
barcamp-2013.pdf (1018 KiB)
A few weeks ago I found an interesting article on Twitter via @h43z. He created a password list where you can "search" for your own password. Probably you would use Strg+F to start the search. Using JavaScript the website will catch your input and block the default process. Instead the website will create a fake search bar, where you may enter your password to see if it is contained in the list. Several fake results are generated, so the user will continue to enter the whole password. The password could then be sent to the server. Here is the link.
I wondered how far this could go and decided to generate a "test website" which catches all input, displays it on the screen and trys to block the default process. Here is the result, where you can try by your own: here.
Result: using Firefox 17 on Linux Mint with xfce:
- Cached and blocked:
- every standard key
- F1, F2, ... F5, ... F11, F12
- Arrow Keys and Navigation keys (Pos1, End, PgUp, PgDown)
- Ctrl, Shift, Capslock, Alt, Esc, Backspace
- Strg+F, Strg+H, Strg+P, Strg+A
- Mouse position and clicks on the page can be monitored
- Alt+Tab, Strg+Alt+Del was NOT cached and NOT blocked
Catched means, that using JavaScript you could fetch the input and send it to a server. Blocked means, that the input can be blocked using JavaScript and the default action will not be executed (e.g. Search).
To interpret this, the website can not only monitor the actions of the user (e.g. where the user moves the mouse, keyboard inputs, ...). The website can also block several actions. The user can not reload the page (F5), escape fullscreen (Esc, F11), start the "real" search (Strg+F) or the real history (Strg+H), cannot go back to the last page (Backspace), block the default help (F1) and do some other stuff instead.
The possibilities are very dangerous, even or especially for computer experts that use shortcuts! Be carefull out there and block JavaScript if you do not need it!
Update (29.12.2012): When the browser is in fullscreen mode, the F11-Key can be blocked, but the Esc key will pass through and exit fullscreen mode. Also using Firefox the user is asked if the user wants to enter fullscreen mode if you do this automatically.
In 2012 I wrote my Bachelor Thesis on this topic. The source code is published on github as open source. Further, a paper was published in 2013 IEEE 10th International Converence on e-Business Engeneering (CEBE): 10.1109/ICEBE.2013.74
Abstract:
Liquid Democracy is a method of decision-making which allows participants to
delegate their voting power to others. Liquid Democracy includes discussions, finding election issues and holding elections.
Proxy Voting is the voting part of Liquid
Democracy. This work focuses on software for Proxy Voting as an electronic voting
system. Voters can either vote directly on a topic or delegate their voting power
to another voter called proxy. In this thesis requirements regarding functionality
and security for such a software are discussed. Further a model that meets these
requirements using XML Signatures and asymmetric XML Encryption is provided.
Compared to existing models anonymity, verifiability and integrity are significantly
improved. A basic concept is the separation of the system into multiple servers.
As a proof of concept, the system has been implemented using Java web services technology.
Further, the risks of this model against possible attacks have been analyzed.
Download Bachelor Thesis: liquid-democracy.pdf (920 KiB)
Anlässlich der erfolgreichen Reparatur meines Monitors "Samsung SyncMaster 226BW" möchte ich meine daraus gewonnenen Erkenntnisse und Erfahrungen auch an euch weitergeben. Aber erst von vorne: Angefangen hat das Problem, indem der Monitor im Standby immer gefiept hat, während die blaue LED am Einschaltknopf aus war. Irgendwann brauchte der Monitor immer länger und länger bis nach dem Einschalten endlich ein Bild sichtbar wurde. Als es schließlich schon 15-20min brauchte, habe ich im Internet recherchiert und tatsächlich einige Websites gefunden - alle gaben dasselbe Ergebnis: defekte Elkos (Elektrolytkondensator).
Unbedingt alle Kabel vom Monitor abstecken, bevor daran herumgebastelt wird!
Weiters solltet ihr den Monitor abkühlen lassen und die Kondensatoren z.b. mit einem billigen Multimeter durch Spannungsmessung an den Kondensatoren langsam entladen!
Zum Öffnen des Monitors muss zuerst das Standbein abgenommen werden: drei zentral gelegene Schrauben an der Rückseite des Monitors. Darunter verbirgt sich nämlich eine von 3 kleineren Schrauben, die alle am unteren Rand des Monitors zu finden sind. Nachdem all diese Schrauben entfernt wurden kann man die vordere Seite des Monitors abnehmen - dazu einen flachen Schraubenzieher dazwischengeben und schrittweise "öffnen". Dann kann man schon das innere Gehäuse aus dem Monitor nehmen, dabei ist nur darauf zu achten, dass der innere Teil noch am vorderen Monitor (Standbyknopf) angeschlossen ist. Man steckt im nächsten Schritt dieses Kabel ab. Anschließend findet sich eine Blende unter der 4 Kabel liegen - am Besten ein Foto machen, wie diese angeschlossen sind und dann abstecken. Nun findet ihr 2 Platinen im Gehäuse: eine davon ist für die Grafik zuständig, die andere für die Spannungsversorgung. Man erkennt sie leicht daran, weil von außen der Stromstecker daran angeschlossen wird. Diese könnt ihr nun aus dem Rahmen lösen indem ihr 3-4 Schrauben öffnet. Wenn ihr die Platine dann herausnehmt, könnt ihr die Kondensatoren überprüfen. An dieser Stelle würde ich euch empfehlen die Kondensatoren zu entladen, indem ihr ein (billiges) Multimeter als Voltmeter verwendet und damit die Spannung an den Elkos messt. Dann solltet ihr euch aufschreiben, welche Kondensatoren defekt sind (oben nach außen gewölbt) bzw. welche ihr austauschen wollt. In manchen Foren wird empfohlen gleich alle Kondensatoren zu tauschen - ich habe die offensichtlich in Mitleidenschaft gezogenen sowie alle Kondensatoren in deren Nähe und alle Kondensatoren gleichen Typs auf der Platine ausgetauscht - funktioniert wieder wunderbar :-)
Folgende Kondensatoren waren bei mir eingebaut. Die Ersatzkondensatoren sind dabei alle von der Marke "Yageo Standard-Kondensator Radial" und die angegebenen Preise galten zum Zeitpunkt der Reparatur bei Conrad. In Summe kommt man also auf ca. 2.11&eur; und zahlt keinen Versand wenn man selber hingeht. Eine derart günstige Monitorreparatur gibt es selten ;-)
- 1x 50V, 47μF -> (Ersatz: 63V, 47μF) zu je 0.09€
- 1x 50V, 2.2μF -> (Ersatz: 100V, 2.2μF) zu je 0.06€
- 1x 50V, 22μF -> (Ersatz: 63V, 22μF) zu je 0.09€
- 1x 25V, 330μF -> (Ersatz: 25V, 330μF) zu je 0.12€
- 5x 25V, 820μF -> (Ersatz: 25V, 1000μF) zu je 0.35€
Die Kapazität der Ersatzkondensatoren sollte ungefähr gleich sein - amsonsten kann man auch ein wenig größere verwenden. Für die Spannungsfestigkeit gilt ungefähr dasselbe - größer ist ok, kleiner ist nicht ok. Natürlich - man braucht auch Lötzinn, einen Lötkolben, verschiedene Schraubenzieher, ... aber das gibts auch um ein paar Euro und ist allemal günstiger als gleich einen neuen Monitor zu kaufen.
Wie man lötet, kann ich euch leider nicht gut erklären - am Besten ihr lasst es euch zeigen oder schaut euch ein paar Youtube-Videos an. Wichtig ist, dass ihr keine Brücken (Kurzschlüsse) baut und dass ihr die Elkos richtig einbaut. Dazu am Besten auf der Platine mit wasserfesten Stift oder CD-Marker bei jedem Kondensator den Minuspol kennzeichnen bevor ihr den Kondensator auslötet...
In den folgenden Bildern erkennt man die Platine der Spannungsversorgung (von beiden Seiten), einen defekten Kondensator (blau) und einen scheinbar noch brauchbaren Kondensator (schwarz).
Anbei noch ein paar Links die mich sehr ermutigt haben, die Reparatur zu wagen. Die Bestellungen dort kosten etwas mehr >10€, aber vielleicht will jemand die Aufklärungsarbeit belohnen?
Pages: 0