Sieben Meter Licht

Veröffentlicht unter Musik | Schreib einen Kommentar

Computersicherheitsbullshit

Erstaunlich oft erlebe ich es, dass Menschen ohne besondere Kompetenz inzwischen damit anfangen, wiederzukäuen, was die Journalisten ihnen bei jeder Gelegenheit vorkäuen. Und dann sagen diese Menschen mir, dass Flash ja völlig unsicher sei und unbedingt verschwinden müsse.

Kurz darauf holen sie ihr Smartphone aus der Tasche, weil sie es regelmäßig tun, denn auf dem Smartphone tut sich ja regelmäßig etwas.

Und sie bemerken nicht eine einzige Sekunde lang, dass Flash wesentlich sicherer als Android ist, denn Flash bekommt wenigstens Updates bei schweren Sicherheitsproblemen – während die meisten Hersteller der Wischofone kein Problem damit haben, ihre Kunden mit ungepatchten, schweren Sicherheitslücken leben zu lassen. Sollen sie sich doch ein neues Wischofon kaufen…

Wenns Internet im Handy ist, ists Gehirn im Arsch.

Veröffentlicht unter Technisches | Verschlagwortet mit , , , | Schreib einen Kommentar

Nützliches für die .bashrc

Im Laufe der Jahre habe ich einige nützliche Dinge angesammelt, die ich in jede .bashrc übernehme, wenn ich auf einem Computer mehr als nur gelegentlich arbeite.

Einige davon sind vielleicht auch für andere Menschen von Nutzen.

(Wer es nicht sofort bemerkt: Nein, das hier ist kein Tutorial, wie man die Shell bedient. Es gibt nur sehr knappe Erläuterungen.)

Standardausgabe in das Clipboard kopieren

Hierfür muss xsel installiert sein. Die meisten »modernen« Linux-Distributionen installieren die alten Kommandozeilen-Tools für XWindows nicht mehr standardmäßig, so dass man es gegebenenfalls nachinstallieren muss.

Mit xsel könnte man sogar schon auskommen, aber als tippfauler Mensch mache ich meine eigene Funktion, die einerseits die Ausgabe auf die Konsole ausgibt, damit ich sie direkt lesen kann, und die sie andererseits in das Clipboard kopiert:

clip() {
    cat "$@" | tee /dev/tty | xsel -bi
}

Beispiel: ls -l | clip gibt das Verzeichnislisting aus und kopiert es gleichzeitig in die Zwischenablage.

HTML-Entitäten

Es kommt bei mir erstaunlich häufig vor, dass ich Texte auf die eben beschriebene Weise in die Zwischenablage kopiere, die ich anschließend in ein HTML-Dokument einfüge. Wenn dabei nur ein bis drei reservierte Zeichen von Hand durch die jeweilige Entität ersetzt werden müssen, geht das ja noch, obwohl ich es immer wieder einmal vergesse. Besser ist es für mich, dafür eine Funktion in der Shell zu haben:

htmlentities () {
    sed -e 's/&/\&/g' -e 's/"/\"/g' \
        -e 's/</\&lt;/g' -e 's/>/\&gt;/g' "$@"
}

Beispiel: Vermutlich kann sich jeder vorstellen, wie sehr es hirnt, so eine Zeile in HTML zu tippen. Gut, dass ich diese Funktion schon fertig in meiner .bashrc hatte, so dass ich sie folgendermaßen in die Zwischenablage bekam, um sie direkt in das Editorfenster einfügen zu können, in dem ich diesen Text schreibe:

$ sed -n '/^htmlentities/,/}/p' .bashrc | htmlentities | clip

🙂

Wer nicht sofort versteht, wie ich mit sed die Funktionsdefiniton aus der .bashrc extrahiert habe: Dieses olle Programm sed ist unendlich praktisch und kann einem leicht viel Arbeit sparen. Meiner Meinung nach sollte jeder Mensch, der öfter an einem Computer mit einem unixoiden Betriebssystem arbeitet, damit ein bisschen umgehen können. Leider ist die man-page (auf GNU-Systemen) sehr kurz angebunden und überhaupt nicht hilfreich. Wer gewohnheitsmäßig mit dem hervorragend dokumentierten vim editiert, hat es dafür aber leicht, sed zu erlernen, weil es der vim-Befehlszeile sehr ähnlich ist.

Besserer Prompt

Die eben angegebenen Funktionen werden auch mit anderen Shells funktionieren, insbesondere mit der ksh¹. Das gilt nicht für diesen Tipp, er geht in dieser Form nur mit der bash.

Grundsätzlich finde ich es ja gut, wenn mein aktuelles Verzeichnis im Prompt angezeigt wird – aber da ich sehr häufig tief verschachtelte Unterverzeichnisse mit zum Teil sehr langen Namen habe, ist es beim Arbeiten für mich eher verwirrend, dass mir der gesamte Pfad angezeigt wird. Wenn ich den genauen Pfad des Verzeichnisses wissen möchte, in dem ich mich befinde, kann ich immer noch pwd tippen. Deshalb schreibe ich in meine .bashrc immer folgendes:

export PS1='\u@\h [\W] \$ '

Das führt zu einer in meinen Augen wesentlich angenehmeren Darstellung des aktuellen Arbeitsverzeichnisses im Prompt:

elias@porz [~] $ pwd
/home/elias
elias@porz [~] $ cd /usr/local/share/games/mame/roms/
elias@porz [roms] $ du -hs .
42G     .
elias@porz [roms] $ pwd
/usr/local/share/games/mame/roms
elias@porz [roms] $ cd
elias@porz [~] $ _

Die Darstellung des Verzeichnisses in eckigen Klammern ist nur mein schlechter Geschmack, hier kann jeder machen, was er will. Zum Beispiel eine farbige Ausgabe mit ANSI-Sequenzen (finde ich persönlich schrecklich).

Wer nicht häufiger in ssh-Sitzungen auf anderen Rechnern arbeitet, kann natürlich die Angabe \u@\h weglassen, weil ja immer klar ist, an welchem Rechner man arbeitet. Ich hingegen würde neben dem bekannten who am i auch ein where am i benötigen… und die Verpeiltheit kommt manchmal dazu…

¹Weil die ksh die eigentlich POSIX-konforme Shell ist, die bash des GNU-Projektes hingegen in einigen Dingen (insbesondere in der Behandlung von Pipes in Kontrollstrukturen) inkompatible Wege geht, versuche ich immer ein bisschen an die ksh zu denken. Vielleicht muss ich einige meiner Skripten ja mal auf einem richtigen Unix laufen lassen…

Veröffentlicht unter Technisches | Verschlagwortet mit , | Schreib einen Kommentar

Aber es war immerhin keine SQL-Injection

Vor ein paar Jahren habe ich immer wieder die folgende Security-Dummaussage von Ahnungslosen gehört: »SQL-Injections sind ein häufiger und gefährlicher Angriff«. Und dann haben die Dummen und Ahnungslosen nicht etwa gesagt, dass man deshalb niemals unvorsichtig eine Benutzereingabe in einem SQL-Statement verwenden darf, dass man immer auf korrektes Quoting achten muss, dass man nach Möglichkeit bewährten Bibliothekscode verwenden sollte, der einem in dieser elementaren Sicherheitsangelegenheit unterstützt… sondern so etwas unsäglich Dummes wie »Mit eine NoSQL-Datenbank kann das nicht passieren«.

In der Tat, Herr Hirnamputiert, eine SQL-Injection ist damit nicht möglich.

Eine Security-Unfähigkeit der Größenordung »Die Datenbank nicht durch ein Passwort absichern, sondern quasi offen für jeden zugreifbar ins Internet stellen« kann dann aber immer noch dazu führen, dass die für einen Identitätsmissbrauch völlig hinreichenden Daten von 93 Millionen Wahlberechtigten in Mexiko veröffentlicht werden.

Dumme Antworten auf Probleme der Datensicherheit sind nämlich vor allem eines: Sie sind dumm.

Und dumme Antworten auf Probleme der Datensicherheit werden auch heute noch oft und gern gegeben, zum Beispiel vom Bundesamt für Sicherheit in der Informationstechnik (die Hervorhebung im folgenden Zitat ist von mir):

Das Bundesamt für Sicherheit in der Informationstechnik (BSI) hat im Rahmen der Hannover Messe eine Sicherheitsanalyse des Kommunikationsprotokolls OPC UA veröffentlicht. Dieser Industriestandard gilt als essenziell für eine sichere Kommunikation zwischen Maschinen (M2M). Laut BSI hat OPC UA keine systematischen Sicherheitslücken – zumindest auf dem Papier

Mit Verlaub, aber eine technische Spezifikation ist deutlich einfacher frei von Sicherheitslücken zu halten als ihre Implementation in Form von Software – es ist doch schön, dass das BSI uns einmal allen diese triviale Wahrheit erzählt hat, wenn auch auf eine Weise, die das Potenzial in sich trägt, einige Satiriker arbeitslos zu machen. Zu den Spätfolgen dieser Erzählweise empfehle ich, in den nächsten fünf Jahren die Nachrichten von »gehackten« Industrieanlagen in der Bundesrepublik Deutschland zu verfolgen.

Veröffentlicht unter Technisches | Verschlagwortet mit , , , , , | Schreib einen Kommentar

Unwichtige Fakten über die Türkei

Achtung, dieser Post enthält ein paar Datenbankabfragen in SQL. Allergiker mögen bitte genau jetzt mit dem Lesen aufhören.

$ psql mernis
psql (9.3.11)
Type "help" for help.

mernis=# select count(*) from citizen;
  count   
----------
 49611709
(1 row)

Die Türkei hat 49.611.709 gemeldete Einwohner.

mernis=# select address_city, count(*) 
mernis=#   from citizen 
mernis=#   group by 1 
mernis=#     having count(*) > 1000000
mernis=#   order by 2 desc;

 address_city |  count  
--------------+---------
 ISTANBUL     | 8829584
 ANKARA       | 3081443
 IZMIR        | 2791399
 BURSA        | 1784471
 AYDIN        | 1411630
 ADANA        | 1390497
 KONYA        | 1332240
 ANTALYA      | 1289687
 MERSIN       | 1098963
 KOCAELI      | 1018557
(10 rows)

Es gibt in der Türkei 10 Städte mit mehr als einer Million gemeldeter Einwohner. Übrigens hat die türkische Meldedatenbank folgende, für mich überraschende Eigenschaften:

  • Alle Daten sind in Großbuchstaben hinterlegt.
  • Es gibt keine türkischen Sonderzeichen. (Wenn Mustafa Kemal Atatürk, der Vater der Türken, wüsste, dass er in der Meldedatenbank zum »Vater der Turken« gemacht wird! Nein, diese Verunstaltung ist nicht von mir, sondern eine Eigenschaft der staatlichen Datenbank, die an vielen nach Atatürk benannten Straßen und Plätzen sichtbar wird.)

Ich wäre nicht überrascht, wenn Teile des Datenbestandes auf eine frühere Lochkarten-Lösung zurückgingen und sich von daher die Einschränkungen bis in unser Unicode-Zeitalter gehalten haben.

mernis=# select first, count(*) 
mernis=#   from citizen 
mernis=#   where gender='K' 
mernis=#   group by 1 
mernis=#   order by 2 desc 
mernis=#   limit 20;

  first  |  count  
---------+---------
 FATMA   | 1154707
 AYSE    |  893025
 EMINE   |  756629
 HATICE  |  658979
 ZEYNEP  |  315488
 MERYEM  |  214972
 ELIF    |  203543
 SULTAN  |  173627
 HULYA   |  166646
 SEVIM   |  163928
 SERIFE  |  158777
 FADIME  |  158131
 OZLEM   |  157157
 AYSEL   |  152450
 HANIFE  |  151887
 YASEMIN |  144333
 HACER   |  143326
 DILEK   |  143144
 HAVVA   |  139982
 ZEHRA   |  136409
(20 rows)

Dies sind die zwanzig häufigsten Frauennamen in der Türkei.

mernis=# select first, count(*) 
mernis=#   from citizen 
mernis=#   where gender='E' 
mernis=#   group by 1 
mernis=#   order by 2 desc 
mernis=#   limit 20;

  first   |  count  
----------+---------
 MEHMET   | 1172949
 MUSTAFA  |  898640
 AHMET    |  719375
 ALI      |  663121
 HUSEYIN  |  521223
 HASAN    |  487897
 MURAT    |  403148
 IBRAHIM  |  398216
 ISMAIL   |  382176
 OSMAN    |  282860
 RAMAZAN  |  278833
 OMER     |  237684
 YUSUF    |  230066
 HALIL    |  202444
 SULEYMAN |  201852
 ABDULLAH |  191434
 RECEP    |  154332
 MAHMUT   |  153623
 FATIH    |  153251
 METIN    |  145817
(20 rows)

Dies sind die zwanzig häufigsten Männernamen in der Türkei.

mernis=# select first, count(*) 
mernis=#   from citizen 
mernis=#   where first in ('ELIAS', 'FRANK', 'KEVIN') 
mernis=#   group by 1 
mernis=#   order by 2 desc;

 first | count 
-------+-------
 ELIAS |     4
 FRANK |     3
 KEVIN |     2
(3 rows)

Es gibt natürlich auch ein paar seltene Namen in der Türkei. Die beiden Kevins genießen mein aufrichtiges Beileid – aber immerhin werden sie nicht für Juden gehalten und mit wenig erfreulichen Wörtern beschimpft.

mernis=# select first, 
mernis=#        overlay(last placing '.' from 2 for 30), 
mernis=#        date_of_birth 
mernis=#   from citizen 
mernis=#   limit 10;

     first     | overlay | date_of_birth 
---------------+---------+---------------
 SERPIL        | D.      | 27/4/1969
 YAGMUR        | S.      | 6/11/1987
 SUNA          | Y.      | 8/5/1990
 DENIZ         | K.      | 13/4/1989
 NIHAL         | Z.      | 30/9/1974
 ESIN          | S.      | 25/6/1984
 IBRAHIM CIHAN | D.      | 15/12/1984
 GOKHAN        | G.      | 3/3/1983
 MERYEM        | D.      | 17/4/1961
 ALI           | E.      | 13/6/1977
(10 rows)

(Mit overlay habe ich den Nachnamen auf den ersten Buchstaben runtergekürzt. Die Menschen in der Türkei sind mit diesem Datenleck bereits gestraft genug, da muss ich ihre Namen nicht noch zusätzlich für jene veröffentlichen, die gar nicht dazu imstande sind, einen Datenbankserver aufzusetzen und die Daten zu importieren.)

Die Geburtsdaten sind als Text hinterlegt, was etwas ärgerlich ist, weil es einfache Abfragen erschwert. Tag, Monat und Jahr sind durch Querstriche getrennt. Noch ärgerlicher ist, dass die Angabe des Tages und des Monats in vielen Datensätzen fehlen, so dass ich die Daten nicht mit einer einfachen Funktion in eine verarbeitbare Datumsangabe konvertieren kann.

mernis=# select date_of_birth, count(*) 
mernis=#   from citizen 
mernis=#   where date_of_birth like '//%' 
mernis=#   group by 1 
mernis=#   order by 2 desc;

 date_of_birth | count 
---------------+-------
 //1934        |  5688
 //1926        |  4145
 //1930        |  3446
 //1933        |  2988
 //1929        |  2981
 //1931        |  2921
 //1928        |  2858
 //1932        |  2768
 //1936        |  2533
 //1927        |  2490
 //1937        |  2374
 //1935        |  2243
 //1938        |  1977
 //1939        |  1663
 //1944        |  1581
 //1925        |  1580
 //1924        |  1191
 //1923        |  1095
 //1940        |  1083
 //1956        |   957
 //1941        |   942
 //1946        |   838
 //1922        |   815
 //1942        |   774
 //1943        |   763
 //1945        |   697
 //1947        |   626
 //1921        |   603
 //1920        |   532
 //1950        |   501
 //1919        |   433
 //1917        |   381
 //1918        |   349
 //1916        |   348
 //1948        |   337
 //1949        |   330
 //1951        |   311
 //1914        |   266
 //1954        |   265
 //1952        |   263
 //1915        |   260
 //1953        |   240
 //1913        |   193
 //1912        |   174
 //1955        |   171
 //1960        |   153
 //1957        |   129
 //1911        |   115
 //1343        |   113
 //1910        |   106
 //1958        |    69
 //1909        |    64
 //1959        |    60
 //1342        |    45
 //1961        |    42
 //1969        |    33
 //1908        |    33
 //1962        |    31
 //1963        |    30
 //1906        |    28
 //1344        |    24
 //1973        |    23
 //1966        |    23
 //1967        |    22
 //1964        |    21
 //1965        |    20
 //1970        |    18
 //1968        |    15
 //1976        |    15
 //1978        |    15
 //1971        |    14
 //1975        |    12
 //1974        |    11
 //1972        |    10
 //1907        |    10
 //1905        |     9
 //1904        |     8
 //1980        |     8
 //1981        |     6
 //1340        |     5
 //1979        |     5
 //1977        |     5
 //1985        |     5
 //1894        |     4
 //1346        |     4
 //1341        |     4
 //1338        |     3
 //1901        |     3
 //1345        |     3
 //1899        |     3
 //1902        |     3
 //1898        |     3
 //1339        |     2
 //1900        |     2
 //1984        |     2
 //1903        |     2
 //1348        |     1
 //1896        |     1
 //1354        |     1
 //1982        |     1
 //1983        |     1
 //1355        |     1
 //1333        |     1
 //1353        |     1
 //1989        |     1
 //1352        |     1
 //1335        |     1
 //1330        |     1
 //1990        |     1
 //1991        |     1
(110 rows)

Dieses Fehlen des genauen Geburtsdatums betrifft vor allem ältere Datensätze, kommt aber auch in jüngerer Zeit ab und an mal vor. Ich gratuliere den Menschen, die bei ihrer Anmeldung ein Geburtsjahr 1330, 1335, 1352, 1354, 1333, 1354, 1348, 1339, 1345 etc. angegeben haben, übrigens zu ihrem gesegneten Alter! (Vermutlich handelt es sich nicht um ein gregorianisches Datum.)

mernis=# select birth_city, count(*) 
mernis=#   from citizen 
mernis=#   where date_of_birth='//1342' 
mernis=#   group by 1 
mernis=#   order by 2 desc;

   birth_city    | count 
-----------------+-------
 AKCAKOY         |     5
 GUNEY           |     4
 BURSA           |     4
 USAK            |     3
 KARAHUYUKAFSARI |     2
 ULUPINAR        |     2
 AKHISAR         |     2
 GAZIANTEP       |     1
 ALANKOY         |     1
 KARAABDULBAKI   |     1
 HIVRIS          |     1
 KIRLI           |     1
 DOMANIC         |     1
 BEYTUSSEBAP     |     1
 SARIKAMIS       |     1
 CAPAKCUR        |     1
 YAKA            |     1
 SEBINKARAHISAR  |     1
 MURUDU          |     1
 DENIZLI         |     1
 ZIRZANOS        |     1
 ORHANGAZI       |     1
 ALANKOY         |     1
 KARAABDULBAKI   |     1
 HIVRIS          |     1
 KIRLI           |     1
 DOMANIC         |     1
 BEYTUSSEBAP     |     1
 SARIKAMIS       |     1
 CAPAKCUR        |     1
 YAKA            |     1
 SEBINKARAHISAR  |     1
 MURUDU          |     1
 DENIZLI         |     1
 ZIRZANOS        |     1
 ORHANGAZI       |     1
 SALDA           |     1
 VERAS           |     1
 SINEK           |     1
 REFAHIYE        |     1
 SINCAN          |     1
 DUDEN           |     1
 REFIK           |     1
 PASINLER        |     1
(30 rows)

Eine Liste der Orte, in denen die 45 Menschen geboren wurden, die bei der Anmeldung das Geburtsjahr 1342 angegeben haben. (Die Beamten dort akzeptieren offenbar bei der Ausstellung einer Geburtsurkunde ein nicht-gregorianisches Datum.)

mernis=# select street_address, 
mernis=#        door_or_entrance_number as number, 
mernis=#        count(*) 
mernis=#   from citizen 
mernis=#   where address_city='ISTANBUL' 
mernis=#   group by 1, 2 
mernis=#   order by 3 desc 
mernis=#   limit 20;

         street_address         | number  | count 
--------------------------------+---------+-------
 SELAMET SOKAK                  | 5       |  2361
 KUCUKSU CADDESI                | 265     |  1799
 BASIBUYUK YOLU CADDESI         | 36      |  1439
 SABRI ULKER (G/62) SOKAK       | 37      |  1346
 510. SOKAK                     | 6 A /1  |  1214
 GUL SOKAK                      | 7       |  1073
 GUL SOKAK                      | 5       |  1060
 RUMELI FENERI YOLU KUME EVLERI | 1       |  1053
 ITU KUME EVLERI                | 1       |   995
 GUL SOKAK                      | 3       |   989
 GUL SOKAK                      | 8       |   965
 GUL SOKAK                      | 4       |   943
 GUL SOKAK                      | 6       |   899
 GUL SOKAK                      | 10      |   880
 GUL SOKAK                      | 9       |   863
 GUL SOKAK                      | 1       |   860
 LALE SOKAK                     | 3       |   838
 LALE SOKAK                     | 6       |   826
 ESKI HAVAALANI CADDESI         | 13      |   803
 MENEKSE SOKAK                  | 3       |   798
(20 rows)

Unter diesen Anschriften sind in Istanbul die meisten Menschen gemeldet.

Wer immer noch daran glaubt, dass Daten beim Staat sicher sind: Die Meldedatenbank steht zurzeit jedem Menschen auf der Welt zur Verfügung, natürlich auch Kriminellen, die sich nicht mit einer schnellen Demonstration in einer kaum gelesenen Website begnügen. Diesen Kriminellen steht für jeden gemeldeten Bewohner der Türkei der Name, die Meldeadresse, der Geburtsort, das Geschlecht, das Geburtsdatum und der Name von Vater und Mutter zur Verfügung. Das ist genug für einen kriminellen Identitätsmissbrauch oder einen fiesen, personalisierten Betrug.

Ich hoffe, hier in der Bundesrepublik Deutschland freut sich schon jeder so richtig auf die elektronische Gesundheitskarte und staatlich erzwungene Überwachungsdatenbanken (aus der so genannten »Vorratsdatenspeicherung«), die beidesamt deutlich weiter in die Privatsphäre hineinragen als so eine »harmlose« Meldedatenbank, die schon erschreckende kriminelle Nutzungsformen ermöglicht.

Auch beim Staat sind Daten niemals sicher.

Wer trotz der Tatsachen immer noch an den Datenschutz glaubt, ist ein dummer Vollidiot! Wer nicht mehr daran glaubt, sollte damit aufhören, sich wie ein Vollidiot zu verhalten.

Veröffentlicht unter Technisches | Verschlagwortet mit , , , | Schreib einen Kommentar