tl;dr: Die Tagebuch-App Day One speichert trotz Passwortschutz Tagebucheinträge unverschlüsselt ab. Daher sollte man von der Synchronisierung über iCloud oder Dropbox die Finger lassen. Der integrierte User Tracker schickt die Trackingdaten unverschlüsselt durchs Netz, ein abolutes No-go!

Bis vor wenigen Monaten war ich noch selbst fleißiger Nutzer der App Day One. Eine wirklich fantastische App, mit der es Spaß macht, ein Tagebuch zu führen. Die Oberfläche ist chic, die Benutzerführung gut durchdacht und die Synchronisation zwischen Mac und iOS-Geräten problemlos. Ein Passwortschutz sorgt dafür, dass kein Dritter ungewollt im Tagebuch schmökert. Schließlich gibt es ja nichts persönlicheres als ein Tagebuch. Alles bestens also, sollte man meinen.

Dass der Passwortschutz nicht wirklich hilft, war bereits von Anfang an klar. Dieser schützt zwar die Anwendung vor einem unbefugten Zugriff, allerdings nicht die Daten. Wer sich ein wenig auf Mac OS X auskennt, wird schnell fündig, etwa im lokalen iCloud-Order:

$ cd ~/Library/Mobile\ Documents
$ cd `find . -name Journal_dayone`
$ ls
entries    photos    secure.plist
$ ls entries

Im Verzeichnis entries findet man für jeden Tagebuch-Eintrag eine entsprechende Datei mit der Endung .doentry. Dahinter steckt nichts weiter als eine Property List im XML-Format, die den Eintrag im Klartext enthält.

Wer sein Tagebuch entsprechend auf einer verschlüsselten Platte speichert, für den sollte dies nicht unbedingt ein Problem darstellen. Wer aber über iCloud oder Dropbox synchronisiert, dem sollte klar sein, dass auch hier die Daten unverschlüsselt vorliegen. Was genau das Problem daran ist, hat ja Frank Rieger im Gespräch mit René Obermann genau auf den Punkt gebracht:

hre Daten sind woanders, und Sie wissen nicht, wo. Davon halte ich prinzipiell nichts.

Ich auch nicht. Doch bisher konnte ich mit diesem Problem leben, die Platte auf dem Mac ist verschlüsselt, die Daten auf dem iPhone ebenfalls und eine Synchronisierung ist auch ohne iCloud möglich, wenn auch ein wenig unbequemer. Und so reihte ich mich in die lange Schlange der Benutzer ein, die auf den Tag warten, an dem die Einträge endlich verschlüsselt abgespeichert werden. In der Knowledge Base von Day One heißt es dazu:

We are serious about privacy and protection, but creating user-stored keys is a difficult task to do well with proper syncing, conflict resolution and offline support. Although we plan to offer a user-stored encryption key at some point in the future, we have no information to announce on when that will become available.

Was mir allerdings endgültig den Spaß an der App verdorben hat, war die Tatsache, dass Day One offensichtlich User Tracker einsetzt.

Bisher ist mir nicht bekannt, dass Bloom Built, die Firma hinter Day One, auch nur ein Sterbenswörtchen darüber verloren hat.

Die Auswertung des TCP-Dumps meines iPhones mit Wireshark bringt folgendes ans Licht:

143 8.208297 192.168.1.22 216.52.203.13 HTTP 349 POST /aas.do HTTP/1.1  (application/octet-stream)
331 177.033033 192.168.1.22 216.52.203.13 HTTP 441 POST /aas.do HTTP/1.1  (application/octet-stream)
420 233.366234 192.168.1.22 216.52.203.13 HTTP 441 POST /aas.do HTTP/1.1  (application/octet-stream)
479 237.015187 192.168.1.22 216.52.203.13 HTTP 942 POST /aas.do HTTP/1.1  (application/octet-stream)

Die App schickt also fleißig Daten an die IP 216.52.203.13 über HTTP POST. Die IP gehört zu Flurry, einer Firma, die über Flurry Analytics das Verhalten von Benutzern einer App auswertet.

Der erste HTTP POST-Aufruf beinhaltet:

0000 50 4f 53 54 20 2f 61 61 73 2e 64 6f 20 48 54 54 POST /aas.do HTT
0010 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 64 61 74 P/1.1..Host: dat
0020 61 2e 66 6c 75 72 72 79 2e 63 6f 6d 0d 0a 41 63 a.flurry.com..Ac
0030 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 cept-Encoding: g
0040 7a 69 70 2c 20 64 65 66 6c 61 74 65 0d 0a 43 6f zip, deflate..Co
0050 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c ntent-Type: appl
0060 69 63 61 74 69 6f 6e 2f 6f 63 74 65 74 2d 73 74 ication/octet-st
0070 72 65 61 6d 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65 ream..Content-Le
0080 6e 67 74 68 3a 20 32 39 35 0d 0a 41 63 63 65 70 ngth: 295..Accep
0090 74 2d 4c 61 6e 67 75 61 67 65 3a 20 64 65 2d 64 t-Language: de-d
00a0 65 0d 0a 41 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a e..Accept: */*..
00b0 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 Connection: keep
00c0 2d 61 6c 69 76 65 0d 0a 55 73 65 72 2d 41 67 65 -alive..User-Age
00d0 6e 74 3a 20 44 61 79 25 32 30 4f 6e 65 2f 37 38 nt: Day%20One/78
00e0 20 43 46 4e 65 74 77 6f 72 6b 2f 36 37 32 2e 30 CFNetwork/672.0
00f0 2e 38 20 44 61 72 77 69 6e 2f 31 34 2e 30 2e 30 .8 Darwin/14.0.0
0100 0d 0a 0d 0a 00 1b 00 00 00 00 00 00 00 00 00 00 ................
0110 00 00 00 02 00 79 00 00 01 43 e2 02 f1 41 00 14 .....y...C...A..
0120 38 47 5a 36 5a 39 38 32 4b 34 39 46 42 53 4d 37 8GZ6Z982K49FBSM7
0130 5a 58 38 53 00 02 37 38 00 03 00 07 00 24 38 31 ZX8S..78.....$81
0140 43 38 32 42 31 36 2d 39 36 37 44 2d 34 33 36 34 C82B16-967D-4364
0150 2d 42 43 42 42 2d 39 37 38 39 31 45 39 41 33 41 -BCBB-97891E9A3A
0160 39 45 00 06 00 24 42 44 35 46 41 46 34 36 2d 45 9E...$BD5FAF46-E
0170 31 31 43 2d 34 37 45 38 2d 42 42 44 46 2d 46 39 11C-47E8-BBDF-F9
0180 34 32 33 43 46 42 31 42 41 44 00 04 00 14 c1 97 423CFB1BAD......
0190 64 29 36 9b fe 06 3e d8 b3 40 9d b7 c7 e7 d8 71 d)6...>..@.....q
01a0 96 d9 00 01 00 00 01 3a 73 be ab 05 00 00 01 43 .......:s......C
01b0 e2 02 f0 af 00 05 00 0a 73 63 72 2e 68 65 69 67 ........scr.heig
01c0 68 74 00 03 34 38 30 00 0b 64 65 76 69 63 65 2e ht..480..device.
01d0 61 72 63 68 00 05 61 72 6d 33 32 00 11 64 65 76 arch..arm32..dev
01e0 69 63 65 2e 6f 73 2e 76 65 72 73 69 6f 6e 00 05 ice.os.version..
01f0 37 2e 30 2e 34 00 0e 64 65 76 69 63 65 2e 6d 6f 7.0.4..device.mo
0200 64 65 6c 2e 31 00 09 69 50 68 6f 6e 65 33 2c 31 del.1..iPhone3,1
0210 00 09 73 63 72 2e 77 69 64 74 68 00 03 33 32 30 ..scr.width..320
0220 00 00 00 00 00 00 00 ff 32 de ce ........2..

Interessant: schickt also Day One schon mal die Model ID des iPhones (iPhone3,1), die Prozessor-Architektur und die iOS-Version an Flurry.

Das zweite HTTP POST ist bereits etwas gesprächiger (hier nur der Text des Dumps):

yC8GZ6Z982K49FBSM7ZX8S78$81C82B16-967D-4364-BCBB-97891E9A3A9E$BD5FAF46-E11C-47E8-BBDF-F9423CFB1BADd)6>@q:sC
scr.height480device.archarm32device.os.version7.0.4device.model.1 iPhone3,1 scr.width32078Cmemory.total 189845504disk.size.used18960097280memory.used.inactive.start34762752cpu.load.start 39.700001memory.used.inactive.end34742272battery.remaining.start 95.000000memory.used.wired.end78897152memory.used.wired.start89812992memory.used.active.start63520768battery.charging.start0disk.size.total30384447488battery.charging.end0 boot.time
1384682899memory.used.active.end67571712cpu.load.end4.700000battery.remaining.end 95.000000de_DEEurope/BerlinEntry CountsLaunch With iCloudOpen TimelineMain Menu > New Entry
Entry EditLaunch With iCloudEntry CountsTag Count Bucket1Published Entry Count Bucket0Photo Entry Count Bucket0-100Average Entries Per Day1Photo Percentage Bucket10-20%Entry Count Bucket0-100Starred Entry Count Bucket0-100Open Timeline%BMain Menu > New Entry
Entry EditHas FoursquareNoHas LocationNoPhoto Count0Char Count Bucket0-10 Tag Count0Has WeatherNoWord Count Bucket0-1
Entry EditHas FoursquareNoHas LocationNoPhoto Count0Char Count Bucket0-10 Tag Count0Has WeatherNoWord Count Bucket0-1
Entry EditHas FoursquareNoHas LocationNoPhoto Count0Char Count Bucket0 Tag Count0Has WeatherNoWord Count Bucket03:q at

Hier werden Daten über die Auslastung des iPhones und die Benutzerinteraktion (Main Menu > New Entry) übertragen.

Die HTTP POST-Anfragen Nummer drei und vier haben ähnlichem Charakter.

Mag sein, dass Flurry Analytics ein hilfreiches Tool für die Entwicklung von Apps ist. Mag auch sein, dass die Tracking-Daten keine „sensitiven Daten“ beinhalten. Bei dem Gedanken daran, dass Interaktionen mit einer App unverschlüsselt per HTTP übertragen werden, hört für mich der Spaß allerdings auf. Wie einfach es einer gewissen Behörde damit gemacht wird, ein Profil zu erstellen, braucht an dieser Stelle wohl nicht weiter erklärt werden. Erst Recht nicht, wenn sich Flurry bereits die Mühe gemacht hat.)

Fazit

Die App versäumt es, darauf hinzuweisen, dass ein User Tracker verwendet wird. Wer sein Persönliches geschützt wissen will, sollte selbst für entsprechende Vorsichtsmaßnahmen sorgen, sich andere Alternativen für digitale Tagebücher suchen oder – besser noch – einfach seine Gedanken auf Papier schreiben.

Links zum Artikel