Fragen? Antworten! Siehe auch: Alternativlos
Eingabevalidierung von Daten, vorzugsweise auf dem ServerJa, äh, wenn du woanders als auf dem Server validierst, validierst du nicht Eingaben sondern Ausgaben.
Einmal mit Profis arbeiten, sage ich euch.
Das ist ein relativ langer Punkt, da steht auch noch:
Für die Entwicklung relevante Informationen/ Kommentare SOLLTEN aus der Produktivversion entfernt werden,Wie meinen? Meine Theorie: Die meinen Javascript-Minify. Ist natürlich absurdes Theater.
Update: Aus PROD.DEV.A.4:
Keine Verwendung von Konstrukten, für die Informationssicherheitsprobleme bekannt bzw. zu erwarten sind,
Tolle Idee! Da bleiben leider keine übrig.
sichere Programmiertechniken,
NEIN!!! Wir müssen einfach sichere Programmiertechniken anwenden, dann haben wir sicherere Produkte?! Scheiße, Bernd! Da hätten wir auch selber drauf kommen können!1!!
I just checked the binary version I downloaded from github, and it is huge. Furthermore, it contains 42181 github.com urls and thousands of long paths.
Antwort des Projektes: Das soll so. Beschwer dich bei den golang-Leuten. Wenn die das fixen, kann ich was machen. Vorher nicht.It appears there are 180 dependencies in the Hugo binary
Ja gut, Hugo ist bestimmt etwas hochkomplexes. Was tut Hugo noch gleich?A fast and flexible static site generator built with love by bep, spf13, and friends in Go.
Zu meiner Zeit was sowas 100k groß und das fand man schon unangemessen bloatig. :-)Fairerweise macht Hugo ne ganze Menge inklusive Bilder-Skalieren und -Filtern, Typescript nach JS übersetzen, JS und CSS minify etc. Alles Sachen, die man früher nicht gebraucht hat, weil man halt die skalierten und gefilterten Bilder aufgehoben hat, anstatt bei jedem Site Build alles nochmal neu zu basteln.
Oh und: Go-Programme sind noch harmlos in Sachen sorglos reingelutschter Dependencies im Vergleich zu selbst einer kleinen, übersichtlichen Javascript-NPM-Teergrube.
Begründung: Die Seite lädt langsamer mit dieser ganzen Javascript-Framework-Scheiße.
Ach. Ach was! Das ist ja unglaublich, Bob!
Das hat bestimmt die CIA herausgefunden. Die finden ja alles heraus. Alles finden die heraus!
Wir brauchen glaube ich mal einen Steelman-Vortrag zum Wasserfall. Ein Vortrag, der dem Publikum ernsthaft zu verkaufen versucht, wieso man das machen sollte.
Ich finde das ja generell sehr abstoßend, wenn Leute alle performativ gegen irgendwas sind, weil alle anderen auch dagegen sind. Am besten etwas, das jahrzehntelang Stand der Technik war, und von den erfolgreichsten Organisationen seiner Zeit verwendet wurde. Eine Methode, ohne die wir keine Mondlandung und keine Computer hätten.
Ich verstehe ja, dass die Entwickler das alle unsexy finden. Das Modell hätte auch versagt, wenn das nicht so wäre. Denn das Wasserfallmodell kommt halt aus dem Management und versucht, Entwickler möglichst austauschbar (und billig!) zu halten. Wasserfall versucht das Fordsche Fließband-Konzept auf Softwareentwicklung anzuwenden.
Die Entwickler sollen möglichst wenig Verantwortung übergeben kriegen, und bitte keine Entscheidungen treffen, die sich später rächen können. KLAR finde ich als Entwickler das scheiße! Ich möchte gerne eine Schneeflocke sein, einzigartig und wertgeschätzt für meine großartigen Fähigkeiten.
Wir sind ja inzwischen sogar noch viel weiter. Softwareentwickler nehmen die Situation regelmäßig so wahr, dass sie nach einem Software-Projekt mehr Domain Knowledge haben als der Kunde, für den sie die Software schreiben!
Softwareentwickler halten sich genau so gerne für Gott wie andere Diziplinen!
Für den Kunden (und für die Firma, die mich angestellt hat!) ist es aber besser, wenn der Entwickler ein Rädchen im Getriebe ist, dessen Fähigkeiten sich darauf beschränken, sich zu drehen. Und zwar so schnell und in die Richtung, die vom Domain Expert vorgegeben wird. Das war damals eine separate Berufsbezeichnung, nannte sich Softwarearchitekt. Heute ist Softwarearchitekt bloß ein Pay Grade in vielen Firmen, wo man halt nach soundsovielen Jahren hinbefördert wird als Entwickler.
Genau wie wir mit Devops die Ops-Leute abgeschafft haben, und mit DevSecOps die Security-Leute, und mit Agile die Tester, genau so gab es bei Wasserfall noch Architekten.
Genau wie es sich bei DevOps herausgestellt hat, dass du nicht einfach die Entwickler nebenher Ops machen lassen kannst, und das dann insgesamt billiger wird, genau wie sich bei DevSecOps herausgestellt hat, dass du nicht einfach Entwickler auch Security machen lassen kannst, und dann wird das billiger oder besser, genauso hat sich nach der Wasserfall-Abschaffung herausgestellt, dass nicht jeder "Entwickler" das Zeug zum Softwarearchitekten hat. Aber die Entwicklergehälter sind halt entsprechend hochgegangen, daher ist das heute normal, dann halt auch Architektur zu erwarten von denen.
Typische Ausreden gegen das Wasserfallmodell sind "Wir haben gar keine Domain Experts". Ich halte das für Bias von Entwicklern, die trotzdem das Projekt machen und Geld verdienen wollen. Klar sagen die dann nicht, was sie sagen sollten, nämlich: Dann können wir diese Software nicht seriös anbieten. Die sagen lieber "pass uff, Atze, wir machen das agile. Die Software ist fertig, wenn ihr kein Geld mehr nachschießen könnt. Wenn ihr immer schön mithelft, wird das vielleicht was. Vielleicht auch nicht."
Das sind Zustände wie beim Berliner Großflughafen! Da schäme ich mich für meine Profession, wenn da solche Marktteilnehmer rumlaufen!
Inzwischen hat sich das aber nicht nur durchgesetzt, sondern es hat die Gesamtsituation, dass Software halt nie fertig ist, immer teurer wird, und das Problem nicht löst, so normalisiert, dass die Leute das für normal halten.
Die Leute haben nicht Wasserfall gemacht, weil sie böse Menschen waren, sondern weil das Modell Dinge versprochen (und zumindest teilweise eingelöst!) hat, die attraktiv waren.
Früher hatte man auch Fachkräftemangel. Die Antwort war: Dann nehmen wir die Leute, die wir kriegen können, für die Architektur und das Pflichtenheft und das Domain Knowledge, und das Eintippen des Codes können halbgeschulte bessere Tippkräfte machen.
Heute haben wir Fachkräftemangel, und die Antwort ist: Wir suchen alle nach "Full Stack Engineers" mit 20 Jahren Kubernetes-Erfahrung, die seit 50 Jahren Java programmieren, aber höchstens 25 Jahre alt sind.
Klar funktioniert das nicht, aber wenigstens machen wir keinen Wasserfall mehr!!1!
Update: Jetzt werde ich gerade unsicher, ob ich Wasserfall vielleicht falsch verstanden habe. Ein Leser meint (mit Verweis auf Wikipedia), dass es da keine Iterationen gibt. Gibt es natürlich trotzdem, auch wenn du die dann "Folgeprojekt" nennst. Den Einwand wische ich also mal eben zur Seite *hust*
Heutzutage geht das schon als Wasserfall durch, wenn du vor dem Loshacken ein Pflichtenheft gemacht hast.
Das Originalpaper von WW Royce aus dem Jahre 1970 ist übrigens ganz witzig. Mit so Krachern wie
Many additional development steps are required, none contribute as directly to the final product as analysis and coding, and all drive up the development costs. Customer personnel typically would rather not pay for them, and development personnel would rather not implement them. The prime function of management is to sell these concepts to both groups and then enforce compliance on the part of development personnel.
Wasserfall war also ursprünglich nicht "so müsst ihr das machen" sondern eher "diese Schritte sind auch noch nötig, sonst wird das nichts". Überhaupt kommt viel der Dogmatik in der Computerei aus neuerer Zeit. Früher war man da deutlich experimentierfreudiger. Deshalb haben die Leute damals ja auch Dinge hingekriegt, während wir heute hauptsächlich heiße Luft und kaputte Software produzieren und nach "KI" schreien, um uns zu retten.
Royce nimmt die Kritik sogar teilweise selbst vorweg, indem er schreibt, dass das Testen erst nach der Implementation eigentlich zu spät ist und ein teures Redesign nach sich ziehen kann. Nicht nur das: Royces Modell sah Feedback entgegen der "Flussrichtung" des Wasserfalls vor (Figure 4), sowie Prototyping, im Gegensatz zum Vorgängermodell von Benington, das da starrer war.
Hier ist noch ein wunderbarer Abschnitt:
At this point it is appropriate to raise the issue of - "how much documentation?" My own view is "quite a lot;" certainly more than most programmers, analysts, or program designers are willing to do if left to their own devices. The first rule of managing software development is ruthless enforcement of documentation requirements.
Das ist kaum der verstaubte Antichrist der Softwareentwicklung, den die Agile-Leute da als Strohmann verbrennen.
After documentation, the second most important criterion for success revolves around whether the product is totally original. If the computer program in question is being developed for the first time, arrange matters so that the version finally delivered to the customer for operational deployment is actually the second version insofar as critical design/operations areas are concerned
Von wegen keine Iterationen!
For some reason what a software design is going to do is subject to wide interpretation even after previous agreement. It is important to involve the customer i n a formal way so that he has committed himself at earlier points before final delivery. To give the contractor free rein between requirement definition and operation is inviting trouble.
Von wegen "der Kunde wird nicht involviert". Wikipedia liegt falsch und die Agile-Leute sind Lügner.
Die Tagesschau hat gerade den Balken höher gehängt :-) (Danke, Björn)
Oder nehmen wir an, ihr kennt euch mit Computer-Architektur aus. Ihr wisst, dass es einen Kernel gibt, und der kann Userspace-Programme laufen lassen, und stellt denen virtuellen Speicher zur Verfügung und Syscalls und so weiter. Natürlich wisst ihr, dass der Kernel grundsätzlich in den Speicher der Prozesse reingucken kann.
Wenn ihr also, sagen wir mal, curl benutzt, und der spricht SSL mit einem Gegenüber, dann kann der Kernel grundsätzlich in den Speicher gucken und die unverschlüsselten Daten sehen. Da wird jetzt niemand wirklich überrascht sein, dass das so ist, hoffe ich.
Aber die Details waren bisher nicht so attraktiv. Das war mit Aufwand verbunden. OK, du kannst gucken, welche SSL-Library der benutzt, und da stattdessen eine Version mit Backdoor einblenden als Kernel. Oder du könntest die Offsets von SSL_read und SSL_write raussuchen und dann da Breakpoints setzen, wie bei den Debugging-APIs, und dann halt reingucken. Du hättest potentiell auch mit Races zu tun. Du müsstest wissen, wie man aus einer Shared Library die Offsets von Funktionen rausholt.
Gut, aber dann denkst du da ein bisschen drüber nach, und plötzlich sieht das gar nicht mehr so schwierig aus. curl lädt openssl als dynamische Library.
$ ldd =curlDa sieht man schon, dass die Adressen irgendwie krumm aussehen. Das ist ASLR. Wenn du nochmal ldd machst, kriegst du andere Adressen. OK aber warte. Die Daten hat der Kernel ja, und exponiert sie sogar an den Userspace:
linux-vdso.so.1 (0x00007ffff7dd2000)
libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007f1df4c66000)
libssl.so.3 => /usr/lib64/libssl.so.3 (0x00007f1df4b6f000)
[...]
$ cat /proc/self/mapsUnd innerhalb des Adressbereichs, an den so eine Library gemappt wird, bleibt das Offset von SSL_write ja konstant. Wie finden wir das? Nun, da gibt es Tooling for:
[...]
7f846a8d2000-7f846aa27000 r-xp 00028000 00:14 5818768 /lib64/libc.so.6
$ nm -D /usr/lib64/libssl.so.3 | grep SSL_writeGut, also grundsätzlich könnte man den Kernel so umbauen, dass er beim Mappen von libssl.so.3 immer bei Offset 35660 einen Breakpoint setzt, und dann könnte man da die Daten abgreifen. Das ist aber eine Menge Gefummel und Kernel-Space-Programmierung ist sehr ungemütlich. Der kleinste Ausrutscher kann gleich die ganze Maschine crashen.
0000000000035660 T SSL_write@@OPENSSL_3.0.0
Warum erzähle ich das alles? Stellt sich raus: Muss man gar nicht. Ist alles schon im Kernel drin. Nennt sich uprobes und ist per Default angeschaltet. Da kann man über ein Config-File im /sys/-Tree dem Kernel sagen, man möchte gerne hier einen Breakpoint haben. Dann kann man per eBPF ein über Kernelversionen portables Kernelmodul hacken, das sich an die uprobe ranhängt und die Daten kopiert. Dann gibt es ein standardisiertes Interface dafür, wie man von dem eBPF-Modul die Daten wieder in den Userspace kopiert, wenn man das möchte.
Was hat man dann? Ein Tool, das in alle SSL-Verbindungen via OpenSSL auf der Maschine reingucken kann. Der Aufwand ist so gering, dass man das im Handumdrehen mit nur ein paar Zeilen Code auch auf gnutls erweitern kann, und auf NSS (die Mozilla-Library). Auch den TLS-Code von Go oder von Java kann man abfangen (Java ist etwas fummelig, da würde man vermutlich einen gemütlicheren Weg nehmen).
Gut, für das Eintragen der uprobe und für das Laden von dem eBPF muss man root sein. Es ist also kein Elevation of Privilege im herkömmlichen Sinne.
Aber es immanentisiert das Problem, das bis dahin bloß theoretisch war. Aus meiner Sicht heißt das, dass man ab jetzt keinem Kernel trauen kann, den man da nicht selbst hingetan hat. Mit anderen Worten: In jemand anderes Container laufen geht nicht.
Das war schon immer klar, aber jetzt ist es immanent. Was sage ich jetzt. Die Tools gibt es sogar schon seit mehreren Jahren. Ein SSL-Abgreif-Tool war das 2. Projekt, das auf diesen Frameworks gebaut wurde. Es sind sogar mehrere Tutorials und Beispielanwendungen online, wie man das macht.
Das nimmt mich gerade mehr mit als es sollte. Wir haben die Vertrauensfrage in der IT auf jeder Ebene verkackt. Der Hardware kann man schon länger nicht mehr trauen. Anderer Leute Software kann man schon länger nicht mehr trauen. Dass man Hypervisoren und Containern nicht trauen kann, ist auch schon immer klar, daher machen die ja dieses Affentheater mit "memory encryption", damit ihr euch in die Tasche lügen könnt, das sei schon nicht so schlimm. Doch. Doch, ist es.
Das könnte mich alles im Moment noch kalt lassen. Ich hacke alle meine Software selber (bis auf den Kernel), OpenSSL ist bei mir statisch reingelinkt (d.h. der Kernel sieht nicht, dass ich da eine Library lade, von der er die Offsets kennt). Man kann mit uprobes und ebpf immer noch meine Anwendungen ausspähen, aber dafür muss man die erstmal reverse engineeren und pro Anwendung die OpenSSL-Offsets raussuchen und eintragen. Das nimmt einem im Moment das Framework noch nicht ab. Aber ihr merkt hoffentlich selber, wie gering die Knautschzone hier ist. Meine Software läuft auf einer physischen Maschine, keinem vserver. Sagt der ISP. Ihr könnt euch mal mal selber fragen, wie sicher ihr euch seid, das selber nachprüfen zu können, wenn euch euer Dienstleister das verspricht.
Ich spoiler mal: Könnt ihr nicht.
Ich glaube, da muss ich mal einen Vortrag zu machen. Das ist alles sehr deprimierend, finde ich.
Es ging um ein Exzellenzzentrum in einem Nationalen Spitzencluster.
Das von Leitner-Institut für verteiltes Echtzeit-Java braucht ein Update, und zwar dringend!
Ab sofort handelt es sich daher um das von Leitner-Exzellenzzentrum für verteiltes Echtzeit-Java im Internationalen Agilitäts-Spitzencluster.
Wer sich schon länger mit Software-Engineering beschäftigt, wird wissen, dass so ein Cluster aus Klassenhierarchien in der Praxis einen Spitzenplatz einnimmt unter den Materialien mit dem stärksten strukturellen Zusammenhalt und der höchsten Intertialkraft.
Selbstverständlich streben wir eine führende Rolle auf der Clusterplattform Deutschland an und werden treibende Kraft bei Cluster4future werden. Wenn sich jemand mit Innovation auskennt, dann ja wohl wir!1!!
(Und wir haben uns immer über die Titelinflation bei den Amis lustig gemacht mit ihren ganzen Principal Senior Vice President for Coffee Machine Maintenance!)
Da haben ein paar Kaspersky-Mitarbeiter auf ihren Telefonen Malware gefunden. Es waren Apple-Telefone. Sie haben die Exploit-Chain mitgeschnitten und bei uns öffentlich verbrannt.
Die Exploit-Chain (und hier müsst ihr möglicherweise meiner professionellen Einschätzung trauen) war insgesamt mindestens 8stellig Dollar wert. Die haben da einmal die aktuelle Toolbox der NSA verbrannt, oder des GCHQ. Das war der Hammer, was die da für 0days hatten.
Es ging los mit einer Memory Corruption im Truetype-Interpreter (bis hier noch nicht so spektakulär). Von da aus hatten sie einen Kernel Exploit, der aus interpretiertem Javascript heraus ging.
Und am Ende schrieben sie dann ein paar magische Werte in eine undokumentierte MMIO-Adresse und dann überschrieb irgendeine Hardware an allen Schutzmechanismen vorbei physischen Speicher ihrer Wahl mit Werten ihrer Wahl.
Der Adressbereich liegt in der Nähe der GPU und ist in älteren Geräten drin, aber auch in M1 Apple Silicon. Das ist ja schon der Hammer, aber um dieses Operation auszulösen, muss man auch einen undokumentierten Hashwert des Requests in ein undokumentiertes MMIO-Register schreiben. Den Hash haben sie jetzt halt reversed und veröffentlicht.
Aber damit scheiden aus meiner Sicht alle gutartigen Erklärungen für diese Funktionalität aus. Für Debug-Funktionanlität braucht man keinen "geheimen Hash".
Sie haben das an Apple gemeldet und Apple hat dann den Adressbereich gesperrt. In der Konfigdatei für gesperrte Bereiche steht normalerweise das Gerät dran, um das es geht. Hier steht: "DENY".
Da werden gerade einige Geheimdienste sehr unglücklich sein.
Also nicht den Wahlrat selbst, sondern deren Software. Klar. Der Hacker stocherte in einer Software namens OSV2020 herum, in Java geschrieben.
Er guckt sich alse in Ruhe den Installer an, findet darin Metadaten … mit Login-Credentials.
Stellt sich raus: funktionierende Login-Credentials. Für das Development-System des Herstellers. Hmm. "JedesJahrWieder" klingt nicht sehr niederländisch. Eher Deutsch. Was geht denn da vor? Dafür muss man das Statement des Wahlrats lesen. Dort steht:
Voor vragen over het programma heeft de leverancier van de software, Elect iT, een helpdesk beschikbaar. De helpdesk is bereikbaar op werkdagen van 09.00 tot 17.00.
Hmm. "Elect iT", ja? Oh gucke mal, das ist ja eine deutsche Firma! Hups!Die aktuelle Generation von elect bildet alle Aspekte einer Wahl auf Ebene des Bundes, der Länder, der Kreise, kreisfreier Städte, Ämter und Kommunen ab.Uiuiuiui. Vielleicht sollte mal jemand gucken, an welchen Stellen deren Software in Deutschland im Einsatz ist.
Update: Der Vollständigkeit halber: "JedesJahrWieder" ist kein gutes Passwort. Das Confluence-Passwort sieht da schon viel besser aus. Aber hilft natürlich nicht, wenn man das dann im Installer ausliefert.
Update: Einem Leser fällt auf, dass elect iT und vote iT praktisch identisch aussehende Homepages haben. Und sie sitzen auch an derselben Adresse in der Ringbahnstraße in Berlin. vote-it könnte euch bekannt vorkommen von dem CCC-Hack von PC-Wahl von vor ein paar Jahren.
Eine der häufigsten Zuschauer-Anfragen an uns ist seit Jahren, nochmal zum Wendelstein 7-X zu fahren. Das haben wir jetzt endlich gemacht, und das Ergebnis sind knapp zweieinhalb Stunden.
Die Gesprächspartner waren sogar dieselben wie bei Sendung 36 damals.
In dem Zimmer, in dem wir aufnahmen, lief eine Klimaanlage, die leider nicht nur ein konstantes Spektrum zugemüllt hat, sondern deren Jamming sich im Spektrum hoch- und runterbewegte. Frank hat in einer heroischen mehrtägigen Aktion das Audio gefiltert. Man hört daher im Endprodukt kaum was davon. Aber ihr könnt uns glauben, dass das viel Arbeit war.
Es gibt noch eine winzige technische Neuerung: Ich habe Vorbis rausgeschmissen. Jeder, der Vorbis kann, kann jetzt auch Opus.
Und dann gibt es noch eine größere technische Neuerung: Ich habe mich mal reingearbeitet, wie man bei HTML5-Audio-Elementen herumspringen kann, damit ich eine Timeline mit Links haben kann. Das ist leider nur per Javascript verfügbar, jedenfalls soweit ich weiß. Wer weiß, wie man das ohne Javascript macht: Bitte bei mir melden.
Inhaltlich wollten wir natürlich vor allem drei Fragen klären: Wo bleibt das Fusionskraftwerk, das uns alle retten wird? Was dauert denn da so lange? Wie teuer wird es?
Die Frage nach dem Geld erscheint in Zeiten, in denen Habeck ohne Baugenehmigung ein LNG-Terminal bauen lässt, eher zweitrangig, aber das will wahrscheinlich der eine oder andere trotzdem wissen.
Hier sind die Antworten:
Frank findet ja, solche Projekte sollte man nicht in Euro sondern in F-35 abrechnen, weil Fußballfelder nicht passen. Kanada zahlt pro F-35 umgerechnet 300 Mio Euro, d.h. wir wären bei 66 F-35 für ein Fusionskraftwerk. Und das wäre der Prototyp, die Nachfolger wären billiger. Der Markt regelt das leider nicht, weil der Markt an Profitmaximierung interessiert ist, und daher erst einsteigt, wenn der Steuerzahler das Risiko übernommen hat. Daher ist hier die eigentliche inhaltliche Botschaft: Wenn wir JETZT 20 Milliarden in die Hand nehmen, und das richtig mit Verve angehen, ist das erste Kraftwerk noch in diesem Jahrzehnt fertig. Allerdings, auch wichtig: Das wird uns nicht retten. Retten wird uns, dass wir die ganze Zeit auch die Erneuerbaren ausbauen und hoffentlich auch mal jemand in Energiespeicher investiert.
Falls aber zufällig einer von euch Bill Gates oder einen russischen Oligarchen kennt, der auf 20 Milliarden sitzt, die er gerne ausgeben würde, dann wäre jetzt die Gelegenheit für das Unterbreiten eines Geschäftsvorschlags.
Oder, ihr wisst schon, wenn ihr Lindner oder Habeck wäret. An der Stelle sind die sich ja sogar mal inhaltlich einig. Müsste nur mal jemand anfangen!
Viel Spaß beim Hören! Wir haben später auch noch ein paar Fotos für euch, und Frank wollte auch noch von unserem Anreiseexperiment berichten, denn wir haben uns einen Tesla gemietet, um diese E-Mobilität mal auszuprobieren, von der man immer hört.
Update: Frank hat einen Blogbeitrag mit Fotos veröffentlicht.
Und was sieht man, wenn man reinguckt? Ich hab mal kurz auf das erste Dokument geguckt, ScanV_4. Auf Seite 15 sehen wir da Java-Code, der eine Datei "verschlüsselt", indem er XOR mit dem Passwort macht.
Da kann ich das ganze Ding direkt zumachen. So macht niemand Verschlüsselung, der mehr als Kindergarten-Niveau Kontakt mit dem Thema hatte.
Ich hab keine Angst vor diesen Leuten. Viel tiefer kann man in Krypto-Fragen nicht ins Klo greifen.
Ich muss euch aber auch sagen, dass ich ansonsten nicht viel Grund sehe, wieso ich diese Dokumente durchgucken sollte. Die Angriffsoberflächen und Risiken unserer Systeme sind wohl untersucht und bekannt. Welche Art von Daten man sehen und korrelieren kann, ist auch bekannt. Was man tun müsste, um weniger angreifbar zu sein, ist auch bekannt.
Was für Überraschungen gibt es denn, an denen ich Interesse hätte? Die könnten neue Angriffsarten gefunden haben, oder sie könnten bisher unbekannte Lücken in Systemen gefunden haben. Das war's. Daran hätte ich Interesse.
Beides ist hier nicht zu erwarten, und nicht nur wegen der "XOR-Verschlüsselung". Die Dokumente da scheinen Handbücher zu sein (das sage ich ganz oberflächlich angesichts des Layouts, ich habe das nicht zu übersetzen versucht). Da würde man keine 0days dokumentieren, denke ich.
Was könnte da noch drinstehen, was andere Leute interessante fänden? Die könnten da ihre C&C-Protokolle dokumentieren. Finde ich absolut uninteressant. Interessiert mich nicht die Bohne. Mich interessiert, wie man verhindern kann, dass die Ransomware überhaupt aufs System kommt, nicht wie das dann nach Hause telefoniert.
Wieso lese ich diese Dokumente jetzt nicht, um nach den Dingen zu suchen? Weil das echten Nachrichtenwert hätte. Davon hätten wir gehört. Oder wir würden davon hören, wenn das jemand noch findet. Die Wahrscheinlichkeit dafür ist zu gering, als dass ich jetzt tausende von Seiten durchgucke.
Bisschen oberflächlich reingucken kann man mal machen, da findet man dann in dem scanv_1.pdf z.B. eine Sektion, wie man bei einem Brand der Appliance den Feuerlöscher auf die Oberfläche und nicht die Flamme in der Luft lenken soll. In dem amezit.pdf sehe ich Compliance-Blablah, was für Tests durchgeführt werden, um festzustellen, ob das System läuft. *gähn*
Das krystalv2.pdf redet darüber, wie sie das Lecken von Staatsgeheimnissen durch organisationellen Aufbau vermeiden wollen. Schon interessanter, aber das ist auch wohlverstanden und untersucht im Westen. Da erwarte ich jetzt keine neuen Einblicke.
In sandworm.pdf geht es offenbar um Protokolle zwischen den Scannern und Backend. Interessiert mich auch überhaupt gar nicht. Mich interessiert, wie ich das System so baue, dass der Scanner nichts findet. Weiter unten sind dann die üblichen Stichwörter. Die machen einen Portscan und gucken nach CVEs. Wenn man bei euch mit einem Port- und Bannerscan CVEs finden kann, dann habt ihr alle Ransomware verdient, die ihr euch einfangt.
Meine Methodologie war, die Dokumente aufzumachen, zufällig auf eine Seite zu springen, einen Absatz in deepl zu pasten, und dann zu gucken, was der übersetzt.
Dass andere Länder solche Programme haben, ist seit Jahren bekannt. Wir haben sowas schließlich auch, minus hoffentlich der Ransomware. Aber unsere Behörden finden auch, dass sie in offensive Security investieren sollten. Was dachtet ihr denn, was das in der Praxis heißen würde?
Nun fällt mir gerade auf, dass das mehr Erkenntnisgewinn haben könnte, wenn ich es mit typischen Architekturen vergleiche.
Dann könnte man mal zeigen, was es so für Optimierungsdimensionen gibt, und was für Vor- und Nachteile die jeweils in anderen Dimensionen haben. Ich glaube, dass die meisten IT-Entscheider überhaupt keine Grundlage für ihre Entscheidungen haben, sondern eher so nach sozialen Gesichtspunkten entscheiden. Wenn es aussieht, als machen das alle anderen, dann machen wir das besser auch.
Daher hier mal eine kleine Umfrage.
Ich suche Leute, die eine IT-Architektur (ich denke hier in so Jungschen Archetypen-Kategorien wie "PHP-Monolith" vs "Rails-App" vs "Enterprise-Java mit Microservices und Message Bus und Kafka") zu verantworten haben und ihre Entscheidungen so gut finden, dass sie das auch anderen gegenüber vertreten würden.
An die jetzt die Frage: Wie sieht eure Architektur aus (ganz grob, höchstens ein-zwei Absätze)? Was sind aus eurer Sicht die Dimensionen des Problemraums? In welche Richtungen davon habt ihr optimiert, und warum? Wieso glaubt ihr, dass euer Ansatz das sinnvolle Optimum herausholt?
Insbesondere bin ich an nicht offensichtlichen Dimensionen (also andere als Performance, Kosten, Security, Zuverlässigkeit, Wartbarkeit, Monitorbarkeit, Skalierbarkeit), die für euch eine Rolle spielten.
The CVE-2022-28219 vulnerability enables malicious actors to easily take over a network for which they already have initial access. Malicious actors could exploit this vulnerability to deploy ransomware, exfiltrate sensitive business data, or disrupt business operations.They could also then go on to exploit XML External Entities (XXE), Java deserialization, and path traversal vulnerabilities to wreak additional havoc, according to an in-depth analysis this week by Horizon3.ai.
Das ist nicht gut, wenn der Bericht nach "da kann jemand alles kopieren und verschlüsseln" noch weiter geht. (Danke, Manuel)
Bei der Gelegenheit habe ich mal versucht, neben der Tastatur weitere Bedienoptionen zu ermöglichen. Man kann jetzt mit dem Mausrad navigieren, und auf einem Smartphone kann man wischen. Leider beißen sich diese beiden, so dass man auf auf einem Touchpad unter Windows sehr erratische Navigation kriegt. Ich weiß im Moment nicht, wie ich das reparieren kann. Dieses Javascript ist eine stinkende Eiterbeule, sage ich euch.
Aber egal. Dafür hab ich jetzt eingebaut, dass auch ein Klick in die linke oder rechte Hälfte navigiert. Das geht auch auf einem Touchpad unter Windows. Ich bevorzuge und empfehle aber immer noch die Tastatur.
Dazu jetzt ein Leserbrief:
reicht ja nicht, dass die Lücke von November 2021 bis vorgestern bei Oracle bekannt war, bis sie gepatcht wurde. Es gibt bis heute auch in kaum einer Distribution eine gepatchte Variante des OpenJDKs.Nehmt Java, haben sie gesagt! Das ist secure by design, haben sie gesagt!OpenJDK Projekt? Listet das geplante 17.0.3 Release Datum als 19.04., das letzte GA Release ist aber immer noch 17.0.2: https://wiki.openjdk.java.net/display/JDKUpdates/JDK+17u
Debian? CentOS? openSUSE? Warten wohl alle noch auf den Upstream Build und verteilen inzwischen weiterhin fleißig 17.0.2.
Adoptium? Hat ein fetzen Banner auf der Homepage, dass man sich hier den Buildzustand anschauen kann: https://github.com/adoptium/adoptium/issues/140
Ein fertiges Release gibts leider noch für keine Version.Die einzige bisher gepatchte OpenJDK Version scheint Arch zu haben: https://archlinux.org/packages/extra/x86_64/jdk17-openjdk/
Vermutlich haben die ihren eigenen Build.
Warum dauert das so lang? Offensichtlich gibts keinen Hotfix Prozess und es fallen Tests um: https://github.com/adoptium/aqa-tests/issues/3594
Da fragt man sich, was passiert eigentlich, wenn in Java ne RCE auftaucht? Warten wir dann auch > 2 Tage darauf, dass der Code Change im Binärpaket landet?
Nicht dass CVE-2022-21449 in irgendeiner Form etwas anderes als kritisch wäre...
Ich möchte an der Stelle darauf hinweisen, dass hier offensichtlich Oracle nicht OpenJDK vorab informiert hat, damit die auch einen Patch fertig haben. Das ist eine Sache, die man häufiger beobachten kann, dass Firmen selbst monatelang auf 0days sitzen, und nicht nur ihre Kunden gefährden, sondern auch absichtlich Open-Source-Komponenten uninformiert lassen, denn wenn du die informierst, dann fixen die das natürlich sofort und nicht erst wie du 6 Monate später. Und dann könnte die Welt ja sehen, was du für eine unzumutbare Patchpolitik fährst, indem du deine Kunden mit scharfen Sprengstoffgürteln durch die Gegend rennen lässt.
Aus meiner Sicht haben wir hier doppelt Oracle zu danken. Und es stellt sich die Frage, wieso die Finder dieser Lücke das überhaupt an Oracle gemeldet haben, und nicht bloß an OpenJDK. Den Oracle-Kram setzt doch eh niemand mehr ein!
Gab es da eine Bug Bounty oder was ist da los?
Update: Können wir an der Stelle bitte auch kurz hervorheben, dass wir von Open Source erwarten, dass es nach zwei Tagen funktionierende Patches für alle Plattformen gibt, während bei Oracle offenbar außer mir niemand ein Problem damit hat, dass die SECHS FUCKING MONATE ihre Kunden mit blutender Wunde unversorgt weiterhumpeln ließen?
Ich frage mich ja, wieso der Bug überhaupt an Oracle gemeldet wurde. Man hätte das an OpenJDK melden können. Oracle hätte dann sagen können: oh, äh, ja, das betrifft uns auch. Der nächste Patchtag ist im Oktober 2023!1!!
Update: Improve ECDSA signature support ist ja auch mal ganz großes Hallentennis als Commit Message.
Ein Leser schlägt vor, dass die Bugfilter ihr Geld damit verdienen, dass Bugs offen bleiben, damit ihre Kunden einen Vorteil davon haben, wenn sie deren Service einkaufen, der sie vor Lücken warnt. Insofern könnte das Vorsatz gewesen sein, nur Oracle zu informieren und nicht OpenJDK.
Update: Zwei Leserbriefe dazu kamen rein, die ich hier erwähnen will. Der erste meinte: Der Bug wurde an OpenJDK gemeldet, nicht an Oracle. Aber die Mannschaft hinter OpenJDK ist halt zum Großteil bei Oracle angestellt, insofern hat das nicht geholfen. Der andere meinte: Der Bug tritt angeblich nur unter Windows auf. Huch, muss ich übersehen haben im Advisory.
Update: Nein, hab ich nicht übersehen. Es gibt mehrere Fußnoten mit der Nummer 1. m(
Stellt sich raus: Der EDCSA-Code im JDK 15 aufwärts wurde von C++ nach Java konvertiert und dabei ist ein relevanter Check hinten runtergefallen. Der Check ist humoristisch wertvoll. Wenn man Java-ECDSA eine Signatur gibt, die nur aus 0-Bytes besteht, dann kommt die durch. Das ist der eine Sonderfall, für den die eine Berechnung Müll liefert, daher ist der Wert als Signatur ungültig.
Den Fall hätte man halt abfangen müssen.
Auf einer Skala von 0 bis 10 hat Oracle das bloß als 7 eingestuft. ECDSA wird u.a. für JWT und Webauthn eingesetzt. Aus meiner Sicht ist das eine 10.0.
Wenn ihr also Java einsetzt, mit einem JDK 15 oder neuer, dann lasst JETZT alles stehen und liegen und spielt den Patch ein. Geht nicht über Los.
Update: Achtet mal auf die Timeline. Im November 2021 hat Oracle den Bug bestätigt und für kritisch befunden. Im APRIL haben sie den Patch veröffentlicht. Oracle hat also von einer apokalyptischen Sicherheitslücke gewusst und ihre Kunden monatelang am langen Arm verhungern lassen.
Update: ECDSA wird auch in Bitcoin verwendet.
Der einmal rumlaufen und überall zlib updaten-Tag!
Fix a deflate bug when using the Z_FIXED strategy that can result in out-of-bound accesses.
Schreibzugriffe. Und das geht auch ohne Z_FIXED.Das betrifft die Kompression mit zlib, nicht die Dekompression. Trotzdem gilt wie immer: Alles updaten. Sofort. Auch wenn ihr glaubt, ihr seid nicht betroffen.
Update: Wenn ihr Software herstellt, dann geht mal bitte in Ruhe durch alles sorgfältig durch. zlib wird gerne mal von wohnmeinenden Pfuschern statisch reinkompiliert. Bei Firefox, der Qualitätssoftware aus dem Hause Mozilla, sind beispielsweise direkt zwei Kopien von deflate.c im Repository. Bei gcc ist auch ein deflate.c dabei. Im Linux-Kernel ist auch ein deflate.c im Tree. Seufz. Das wird ein Blutbad, das alles zu updaten.
Update: zlib ist in Browsern, in allen Programmen, die mit PNG umgehen, in allen Programmen, die mit ZIP-Dateien umgehen, auch versteckt wie Office oder Java, ... zlib ist eine der am häufigsten verwendeten Bibliotheken. Kernelmodule werden gerne mit zlib komprimiert, Man Pages, das ist auch sonst in irgendwelchen Dateiformaten implizit drin. Einmal alle Skriptsprachen. Das ist echt Worst Case in Sachen Abhängigkeitshölle, wenn in zlib was kaputt ist.
Es gab da mal ein grandioses Video, das Sun gemacht hat, als sie ihr Java-Verfahren gegen Microsoft gewonnen hatten. Damals musste Microsoft auch ein paar Fantastilliarden Strafe an Sun zahlen.
Das Video hatte dann die Form: Hmm, wir könnten 100.000 Porsches kaufen. (zeigt einen Stapel Porsche 911). Oder vielleicht 10.000 Einfamilienhäuser. (zeigt einen Stapel Häuser). Oder zwei Space Shuttles. (zeigt zwei Space Shuttles).
Oder einen IBM Support Contract (zeigt einen Staubsauger, der Geld aufsaugt) :-)
Vor der Wahl steht jetzt auch die Bundeswehr.
Ich möchte an der Stelle noch einmal lobend hervorheben, wie effizient McKinsey die Bundeswehr abgerüstet hat. Die Bundeswehr hat ja kein Null-Budget im Moment. Da sind auch 50 Milliarden oder so versickert über die letzten Jahre.
Die moderne Alternative zum IBM Support Contract ist also der McKinsey-Beratervertrag.
Oder man könnte zwei Space Shuttles kaufen, klar. Nee, warte. Nicht Space Shuttles. F-35 Tarnkappenjets.
Gut, die starten nicht, wenn nicht dein freundlicher Kontaktoffizier aus Amerika den Schlüssel umdreht, und Ersatzteile und Wartung kriegt man auch nur von den USA, aber die Amerikaner sind ja auch unser Freund!1!!
Womit bestücken wir das dann, fragt ihr? Na mit amerikanischen Atombomben natürlich!
Wieso sollen wir dann dafür bezahlen, wenn das amerikanische Hardware mit amerikanischen Bomben ist?
Beats me!
Mein Kumpel Kris hat das mal bei Heise ausführlich erklärt.
Und tatsächlich ist die Sache sogar noch verkackter als ich sie zu verstehen geglaubt hatte.
Besonders witzig bei Kris' Ausführungen finde ich, dass er für seine jahrzehntelage Arbeit in der PHP-Community bekannt ist, und dieses verkackte Classloader-Konzept, zur Laufzeit Code nachladen zu wollen, ist auch eine glorreiche PHP-Innovation, die dort allerdings Autoloader heißt.
Dass das möglicherweise grundsätzlich eine völlig verkackte Idee ist, zur Laufzeit Code nachzuladen, ist nicht nur den Founding Fathers von Java nicht gekommen.
Auch in C und C++ gibt es ein API, mit dem man Shared Library nachladen kann, heißt dlopen oder LoadLibrary, und wird für Plugins verwendet. Und auch da haben viele Leute noch nicht verstanden, dass das Plugin dann dieselben Zugriffsrechte hat wie das Programm, in dessen Kontext es ausgeführt wird.
Oh und lasst mich bei der Gelegenheit einen kleinen Schwank erzählen. Kris macht sich in dem Artikel darüber lustig, dass Java-"Anwendungen" heutzutage immer mit der genauen JRE-Version im Paket ausgeliefert werden, die man braucht, um sie auszuführen. Ich hatte mal bei einem Kunde die Gelegenheit, in eine als "Appliance" ausgelieferte Enterprise-Java-"Anwendung" reinzugucken, und die kam mit drei verschiedenen JREs für verschiedene Teile der "Anwendung". Es ist da draußen also noch krasser verkackt als Kris es hier ausspricht.
Ich empfehle ausdrücklich, nicht nur Seite 1 zu lesen. Die ganzen wunderbaren Money-Quotes sind auf Seite 2.
Der wichtigste Punkt an diesem wunderschönen Rant ist jedenfalls, und das sollte ihr auf jeden Fall mit heimnehmen hier: Das war kein Bug im Sinne von "ein Programmierer hat falschen Code hingeschrieben". Der Code war da vorsätzlich, absichtlich, und hat genau das getan, wofür er gedacht war.
Es war, könnte man sagen, einer der seltenen Momente, wo Java-Code genau das getan hat, wofür er gedacht war. Stressarm und flexibel.
Habt ihr schön gepatcht? Oder habt ihr diese eine Konfig-Änderung eingespielt, die rumging?
Nach der Vuln ist vor der Vuln!
It was found that the fix to address CVE-2021-44228 in Apache Log4j 2.15.0 was incomplete in certain non-default configurations. [...] Note that previous mitigations involving configuration such as to set the system property `log4j2.noFormatMsgLookup` to `true` do NOT mitigate this specific vulnerability.
Gutes Zeichen, wenn die Leute, die den Code gerade warten, nicht in der Lage sind, einen weltweit Katastrophenalarme auslösenden Bug im ersten Anlauf zu fixen. Was sagt euch das über die Komplexität und Wartbarkeit des Codes? Seid ihr sicher, dass ihr da nicht lieber komplett drauf verzichten wollt?Oh, ich vergaß. Könnt ihr gar nicht. "Geht gar nicht mehr". Habe ich gehört. Von Java- und Javascript-Leuten. Komischerweise geht das bei anderen Sprachen wunderbar.
Und überhaupt: Diese Art von "den Bug kann man nicht debuggen" kennt man sonst nur von Programmiersprachen mit Speicherkorruption. Ihr wisst schon, die Art von Programmiersprache, über die sich Java-Leute gerne lustig machen.
Die Behörde erhöhte deswegen am Samstag ihre bestehende Cyber-Sicherheitswarnung für die Java-Bibliothek Log4j auf die Warnstufe Rot. Es handelt sich dabei um die höchste Kategorie der vierstufigen BSI-Skala für Cyber-Sicherheitswarnungen und um die gegenwärtig einzige Meldung in dieser Stufe.Seht ihr? Kümmert sich schon jemand. Müssen wir hier nichts mehr tun.
Außerdem ist das ein Softwareproblem. Da kann man eh nichts machen.
Schon wieder hat dieser fiese CCC wertvolle High-Tech-Arbeitsplätze vernichtet!1!!
Update: Ich krieg hier schon wieder Ausschlag von dieser ganzen Java-Ranzkackgüllescheiße da draußen. Die Seite ist jetzt kaputt und zeigt was anderes an. Ich hatte die jsessionid rausgenommen, aber dann kommt eine Null Pointer Dereference-Fehlerseite. Also gehe ich zu insolvenzbekanntmachungen.de und suche nach finfisher* (Achtung: Geht nur mit Sternchen), kriege einen Treffer, aber der Treffer wird nur angezeigt, wenn man von der Suche kam. Ansonsten gibt es eine weiße Seite. Großartige Arbeit, liebe Spezialexperten von justiz.de! Einmal mit Profis arbeiten!
Update: Heise meint, die seien gar nicht tot, bloß umbenannt. Schade. Sehr schade.
Das alleine ist ja schon ein Brüller, aber wartet, geht noch weiter.
Die Datenschutzgrundverordnung räumt in Artikel 16 der betroffenen Person das Recht ein, unverzüglich eine Berichtigung unrichtiger personenbezogener Daten zu verlangen.
Dieser Bankkunde ist also vor Gericht gezogen und hat seine Bank verklagt. Das Gericht gab ihm Recht.
Und jetzt die Punchline: Auf Seite 3 in dem obigen Dokument erklärt die Bank, wieso sie dem nicht nachkommen kann. Weil sie intern noch EBCDIC verwendet.
*Badumm tss*
Jetzt werde ich ein paar Jungsporne unter euch inhaltlich abgehängt haben, daher kurze Erklärung: Wenn du heute im Web etwas eingibst, oder eine Webseite anzeigen lässt, kommt die normalerweise als Unicode (üblicherweise im UTF-8 Encoding). Damit lassen sich einmal alle aktuell geschriebenen Sprachen abbilden und dann noch ein paar ausgestorbene.
Bevor wir Unicode hatten, hatten wir ISO-8859-1, das bildete die Sonderzeichen in Westeuropa ab. Dieser Standard zerbröselte aber bereits, wenn man mit Osteuropa kommunizieren wollte.
Bevor wir ISO-8859-1 hatten, hatten wir ASCII. Das ist ein amerikanischer Standard, der gar keine Umlaute kann. Und bevor sich ASCII durchsetzte, gab es noch EBCDIC, das ist ein lovecraftiger "cosmic horror" von einem Standard, der in den 1960er Jahren von IBM für deren Großrechner festgelegt wurde.
Die Bank da hat also vor Gericht einmal die Hosen runtergelassen und öffentlich erklärt, wie alt ihre Infrastruktur ist. Und sie ist ungefähr so alt, wie es sich nachts auf dem Friedhof an Halloween Horrorfans unter den Nerds gegenseitig zuraunen, was man gehört hat, was für versunkener Horror auf Bankgroßrechnern lauern. (via)
Update: Jetzt kommen hier lauter Leserbriefe zu EBCDIC rein. Oh Mann. Stellt sich raus: Es gibt Code Pages mit Umlauten für EBCDIC. Code Pages war auch das Konzept von ISO-8859-1. Da gab es dann auch ISO-8859-2 und so weiter. Da hätte man dann an jeden String ranschreiben müssen, welche Code Page das ist. Hat natürlich in der Praxis niemand gemacht und so konnte eine Software dann entweder global Umlaute oder Kyrillisch aber nicht beides. Der Ansatz ist gescheitert. Oh und dann gibt es auch sowas wie UTF-8 für EBCDIC, heißt UTF-EBCDIC (*göbel*). Ist halt in der Praxis alles Mist, denn Anwendungen, die noch EBCDIC einsetzen, haben dann auch feste Längen an ihren Feldern, was dann dazu führt, dass ein Umlaut mehrere Stellen im Feld belegt und dann nur kürzere Namen gehen oder so. Leute, die solche Systeme umstellen sollen, sitzen das daher häufig aus und hoffen, dass das mit dem Projekt Alles-Neu-In-Java besser wird.
You had me at "lass uns Krypto in Javascript machen!1!!" (Danke, Felix)
Aber aber aber da haben doch die ganzen superschlauen Google-Ingenieure dran gearbeitet!!1!
Stellt sich raus: Komplexität verursacht Bugs. Völlig überraschend, seit es in den 1970er Jahren herausgefunden wurde.
New hotness: Böses Python-Paket kompromittiert dein Projekt.
Nun, jetzt könnt ihr! Jemand hat node.js per wasm in den Browser gebracht!1!! (Danke, Sascha)
Von Amazon?
Nee, von von Microsoft!
So hat sich Oracle das aber nicht vorgestellt, damals als sie Java gekauft haben. Die dachten, sie haben jetzt den Goldesel gekauft. Alle Welt in der Industrie macht ihre lahmarschige Gammelbloatware mit Java. Was da für Support-Kohle zu machen ist! Und Infrastruktur könnte man anbieten!
Und dann kam raus, dass die Leute gar keinen Support im herkömmlichen Sinne brauchen. Die brauchen bloß regelmäßige Security-Patches. Da kannste ja schlecht Geld für nehmen, wenn es das bei Sun alles kostenlos gab.
Bleibt die Infrastruktur. Stellt sich raus: Den Leuten reicht die Kombination von Lutefisk und Amorphophallus titanum, die der Webserver des Apache-Projektes sekretiert.
Hmm, dachte sich Oracle, dann schrauben wir mal an der Lizenzschraube.
Da haben sich die Leute umgeschaut, und gesehen, dass ein paar Lizenzfanatiker frühzeitig die Open-Source-Version von Sun geforkt hatten, die sie Oracle als Giftpille in den Kaffee getan hatten. Und Oracle, die geldgeilen Kapitalisten, die sie sind, hat natürlich gar nichts in die Java-Entwicklung investiert, sodass ihr Scheiß Schimmel ansetzte und OpenJDK vorbeizog und Fakten schaffte.
Oracle kam dann eines Tages auf die brillante Idee, man könnte doch einfach die Arbeit der GPL-Kommunisten nehmen und dafür "Support" anbieten (LOL!) und dann scheißt der Goldesel doch noch Dukaten. So wurde OpenJDK dann sogar offiziell zur wahren, offiziellen Java-Version.
Aber der Goldesel hatte Verstopfung. Also hat Oracle sich gedacht, wenn sie da Lizenzgeraune machen und Support nur noch kurzzeitig zur Verfügung stellen, wer länger will muss zahlen, dann löst sich die Verstopfung beim Goldesel.
Stattdessen bieten jetzt die ganzen Cloud-Provider Java-Umgebungen mit "Support" (HAHAHA) an. Und Oracle guckt schon wieder in die Röhre.
Aber hey, nicht so schlimm. Solange ihre CIA-Datenbank noch Dukaten scheißt, ist das nicht so schlimm.
Wie, wusstet ihr nicht? Dass der Name Oracle von dem CIA-Projekt kam, für das der Scheiß entwickelt wurde? Hier ist der FOIA-Kram dazu (Achtung: Link geht zur CIA). Steht sogar bei Wikipedia. Dreimal dürft ihr raten, wofür die CIA eine große Datenbank brauchte.
Oracle hat ja Sun gekauft, und damit die Rechte an Java.
Google hat Android gekauft, das war ein kleines Startup, und die haben voll auf Java gesetzt, aber um Oracles Trademarks nicht zu verletzen und keine Lizenzgebühren zahlen zu müssen, haben sie nicht das Sun/Oracle-Java genommen sondern einmal die APIs nachprogrammiert.
Oracle hat dann vor Gericht gemeint, sie besäßen aber "geistiges Eigentum"-Rechte an den APIs und dafür müsse Google Lizenzgebühren zahlen.
Der Supreme Court hat jetzt Google recht gegeben.
Alles andere wäre auch echt furchtbar geworden. Dann könnte auch SCO Linux verklagen, oder Microsoft könnte WINE plätten. Emulatoren wären tot.
Insofern war das auf jeden Fall die richtige Entscheidung.
Allerdings hat das Gericht da (wie üblich) versucht, einer Grundsatzentscheidung aus dem Wege zu gehen, damit sie nicht nochmal einen Klopper wie Citizen United fabrizieren.
Und so haben sie nicht generell entschieden, dass APIs nicht unter Copyright fallen, was meines Erachtens die richtige Ansage gewesen wäre, sondern sie haben bloß entschieden, dass Google hier Fair Use gemacht hat, d.h. eine Ausnahme vom Copyright greift. Damit ist natürlich zukünftigen Verfahren Tür und Tor geöffnet, ab wann ein API-Nachbau nicht mehr unter Fair Use fällt. (Danke, Andreas)
Das ist natürlich Bullshit.
Kann man auch direkt selbst feststellen, denn weiter unten steht:
Vom kommenden Jahr an will Google seinen werbetreibenden Kunden Profile von Nutzergruppen anbieten. Heißt: Es teilt seine User in Kategorien auf. Eine Gruppe, die sich zum Beispiel für Fitnessprodukte interessiert; eine andere, die gerne Urlaub in der Karibik macht.Die Gruppenzugehörigkeit fällt aus Tracking raus. Und selbstverständlich ist Werbung auf Basis von Gruppenzugehörigkeit personalisiert.
Ja aber was passiert denn dann hier tatsächlich? Ein Kumpel formuliert es so:
der richtige Titel heißt: "Google verlagert das Userprofiling in deinen Browser" - das heißt, du zahlst jetzt auch noch die Stromrechnung fürs ProfilingEndlich wird offensichtlich, wieso Google seit Jahrzehnten unschuldigen Webseiten Javascript-Abhängigkeiten reinzudrücken versucht. Analytics, ihre "Effizienz"vorschläge mit dynamischem Bildernachladen, dann "one page apps", dann AMP. Das war alles eine von langer Hand angelegte Strategie, um das Web dahin zu bringen, dass man es mit abgeschaltetem Javascript nicht mehr sinnvoll benutzen kann.
Gut, außer dem einen kleinen gallischen Dorf, das ihr gerade lest. Da wird noch ohne Javascript gekocht.
Übrigens erklärt Google in diesem Blogpost, was sie stattdessen machen wollen: FLoC. Das steht für Federated Learning of Cohorts. Hier gibt es ein Whitepaper dazu.
Update: Die EFF hat eine schöne, für Laien verständliche Erklärung veröffentlicht, was das Konzept hinter FLoC ist.
Ich möchte mal unabhängig von FLoC darauf hinweisen: Selbst wenn es ein perfektes System gäbe, um nur auf Client-Seite die Werbung auszusuchen, an der der Client interessiert ist, selbst dann wäre das immer noch schlecht, weil der Webserver ja sehen kann, welche Werbung du abrufst. Und der Webserver kann Google gehören oder die Daten an Google weiterverkaufen. Es gibt da keine gute Lösung für. Das ganze Web ist notorisch privatsphäreverletzend, sobald es ein Geschäftsmodell gibt, das aus den Daten über das Verhalten der Konsumenten Profit schlagen kann.
Wenn ihr jetzt "nein" sagen wollt, irrt ihr wahrscheinlich. Wenn ihr mit irgendeiner Java-Software interagiert, die irgendwas mit Krypto macht, dann ist da wahrscheinlich Bouncycastle drin.
Bouncycastle ist jetzt nicht komplett kaputt, nur ihre Implementation der bcrypt-Passwort-Crypt-Funktion von OpenBSD ist kaputt. Das betrifft glaube ich so gut wie niemanden.
Ihr solltet aber grundsätzlich immer alle Updates einspielen, auch wenn ihr glaubt, sie beträfen euch nicht.
Es gibt da einige beachtenswerte Details.
Erstens: Die Codequalität und das Design sind auffallend schlecht.
Zweitens: Wenn man einen Bug meldet, mit dem zero-click remote code execution geht, dann stuft das Teams-Team das nicht etwa als critical ein (dafür ist critical gedacht, um genau diesen Fall abzudecken), sondern als … "important, spoofing". Warum "important, spoofing"? Weil das noch in scope ist, um an dem Bug-Bounty-Programm teilzunehmen. Wenn es nicht in scope wäre, wären die Melder juristisch auch nicht an die Teilnahmebedingungen gebunden und könnten direkt 0days an Ransomware-Gangs verkaufen. Das ist also sowas wie der Mittelfinger von Microsoft an die Melder des Bugs.
Drittens:
angular expression filtering can be bypassed by injecting a nullbyte char in unicode \u0000, e.g.{{3*333}\u0000}
Mit dem Nullbyte-Trick haben wir in den 90er Jahren Perl-Webapps aufgemacht. Das ist immer noch ein Problem bei Web-Entwicklern?!Tja und die Remote Code Execution geht dann, weil dieser ranzige Gammelclient in Electron implementiert wurde, das ist im Wesentlichen ein Webbrowser mit Javascript, aber das Javascript hat Zugriff auf Filesystem und Systemresourcen und kann Prozesse starten. WAS FÜR EINE GROSSARTIGE IDEE!! Lasst uns mehr "Anwendungen" mit Electron machen! Wenn es eine Programmierumgebung gibt, in der wir Injection voll im Griff haben, dann ist es ja wohl Javascript!!1! (Danke, Bernd)
Jetzt sind sie vor dem US Supreme Court und Googles Anwalt verkackt das offenbar gerade großflächig. Dabei sind die Richter nicht notwendigerweise völlig unbeleckt. Einer meinte, das sei wie wenn man jemandem ein Copyright für das Tastaturlayout geben würde. Das finde ich eine gute Analogie.
Und wenn KI damit den Fuß in der Tür hat, werden auf einen Schlag sehr viele Programmierer arbeitslos sein. Meine Vermutung ist: Das sind genau die Programmierer, die sich im Moment auf ihrer vermuteten Unersetzbarkeit ausruhen und schwierige Probleme gar nicht erst angehen, weil das in Arbeit ausarten könnte.
Update: Mehrere Leute schreiben mir jetzt, dass sie das ausprobiert haben, und es sei absoluter Schrott und die drei Beispiele im README seien im Wesentlichen das volle Ausmaß der Leistungsfähigkeit dieses Systems. Glaube ich sofort. Ändert an meinen Ausführungen oben aber nichts. :-)
Die haben ja, wie viele andere Zeitungen und Blogs auch, immer Fließtext in ihre URLs gepackt. Das externalisiert Kosten auf alle Verlinker und macht die URLs unnötig unhandlich. Ich habe das schon immer gehasst, daher gibt es das in meinem Blog auch nicht. Der Hintergrund ist, dass sie sich davon ein höheres Google-Ranking erhoffen. Das ist "Suchmaschinenoptimierung". Wenn es nach mir ginge, gehörten alle Suchmaschinenoptimierer direkt aus dem sichtbaren Internet verbannt. Wer gemeinsame Infrastruktur zu bescheißen versucht, um sich gegenüber anderen einen unfairen Vorteil zu verschaffen, sollte nicht mehr mitmachen dürfen.
Das ehemalige Nachrichtenmagazin hat über die Jahre mehrfach ihr URL-Schema geändert. Gemein war den Systemen immer, dass es überflüssigen Fließtext gab, und dann eine ID, mit der der eigentliche Artikel gefunden wurde. Eine Weile gab es auch einen URL-Shortening-Button auf deren Seite, der direkt Kurzlinks ohne Bullshit-Fließtext generiert hat, und das Schema davon war: spiegel.de/artikel.do?id=12345
Das hab ich also im Blog eingebaut. Jetzt haben sie ihre Seite geändert und diese Kurzlinks gehen nicht mehr. Damit sind auch praktisch alle Links auf die in meinem Archiv auf einen Schlag aus dem Verkehr gezogen.
Jetzt wird niemand mehr deren Artikel aus der Anfangszeit meines Blogs sehen, als man noch sowas wie Rudimente eines Nachrichtenmagazins finden konnte.
Tja, so kann man sich in den Fuß schießen. Da haben die als eine der wenigen Sites ein langes Archiv ohne Paywall online, und dann machen sie alle Links darauf kaputt.
Einmal mit Profis arbeiten.
Aber gut, dass DIE keine Profis sind, das merkt man ja schon daran, dass sie ihre potentiellen Kunden mit lästigen Nervpopups verschrecken. Die Kumpels von mir, die die Site noch frequentieren, haben Javascript ausgeschaltet und erzählen mir, die Fotos hätten eh noch nie einen Mehrwert gehabt. Großartige Arbeit, liebe Redaktion! So gewinnt man treue Anhänger!
Kurzes Rüberscrollen über die Selbstdarstellung von Waves Enterprise und ihrer Hybrid-Blockchain-Business-Logik klingt für mich jedenfalls wie ein Haufen Bullshit.
Erinnern wir uns mal gemeinsam an die anderen Firmen und Projekte, die Oracle gekauft hat. Sun. Java. BerkleleyDB. MySQL. Eine Erfolgsgeschichte jagt die nächste! Wenn du etwas wirklich nachhaltig in den Boden rammen willst, dann machst du es Teil von Oracle!
Hier gibt es 1024-Byte-Demos in Javascript. Die Site fühlt sich etwas träge an, als ob das jemand auf seinem DSL zuhause hostet. Aber die Größe pro Demo ist ja schön klein, da ist das nicht so schlimm.
Wer darin jetzt einen schönen Bug findet, kann damit einmal alle Kunden von Avast hopsnehmen.
Damit man beim Bugsuchen nicht so viel Schmerzen hat, hat der gute Tavis das unter Linux lauffähig gekriegt. Viel Spaß!
Dazu kommt, dass viele Entwickler selber dick Internet haben, und es daher nie nötig fanden, ihre externen Modul-Downloads zu cachen oder anderweitig dafür zu sorgen, dass da nicht zu viele Fetches auf einmal aufschlagen und die Infrastruktur plattmachen.
Das ist für viele Open-Source-Projekte ein Problem, die ihren Scheiß selber hosten, und ist einer der Gründe für den Erfolg von github und co. Dann trägt die Kosten der Plattformbetreiber.
Ich spreche das an, weil npm jetzt Rate Limiting eingeführt hat. Das Ergebnis ist genau das, was ihr jetzt vermutet: Den ganzen "viele Dependencies sind ein Zeichen für ausgereiften Code"-Deppen platzen jetzt ihre Buildprozesse wegen mysteriöser "du machst zuviele Zugriffe"-Fehlermeldungen.
Wer also auf einen guten Moment für einen spontanen Ausbruch an Schadenfreude gewartet hat: Hier ist er! :-)
Update: Wir haben ein Bekennerschreiben von ... Cloudflare! MWAHAHAHA
Die vorletzte Bastion des unverseuchten Internets ist gefallen.
Ich muss mich jetzt erstmal hinlegen und den Schmerz mit Spirituosen betäuben.
So ein Gefühl des Verratenwerdens kenne ich sonst nur von der SPD.
ich hänge seit mehr als 20 Jahren als Externer bei verschiedensten Banken herum. Ich habe sie im wesentlichen alle gesehen. Große, kleine mit eigener IT, mit IT von Dienstleistern und die übliche Mischung. Was Du schreibst ist völlig richtig und dem geneigten Leser sei gesagt, es ist noch viel schlimmer als man es sich von außen vorstellt. Eine Bank betreibt hunderte oder gar tausende von verschiedenen Systemen. Eins erstellt Reports für die Aufsicht über das Eigenkapital, andere für den Jahresabschluss, dann gibt es noch welche die verschieden Risikokennzahlen ermitteln, welche die über die Kredite laufen und Gebühren berechnen, welche die Auswertungen für die Kundenansprache erstellen, andere wiederum die Zahlungen verwalten und weiterleiten, Systeme die in der Wertpapierabwicklung Bestätigungen versenden uswusf. Und das war nur das Backoffice. Im Frontoffice Handelssysteme mit denen man an den verschiedensten Wertpapiermärkten handeln kann, Kassensysteme, ach ja und natürlich Verwaltungssysteme für Geldautomaten, die Geldautomaten selbst (sind ja im Prinzip auch nur Windows PCs), Kassensysteme für die Schalter, Systeme für die Kundenberatung für Immobilienkredite, Unternehmenskredite, Anlageberatung und schlussendlich natürlich die üblichen PCs für die Angestellten mit Office, Mail, einem Browser mit denen sie auf die vorher genannten Systeme zugreifen können.Da müsste man ja eigentlich auch mal ein bisschen Grundlagenforschung machen, wie die Fintechs es schaffen, bei so einer unfassbaren Steilvorlage an fossilen Krusten bei der Konkurrent, NOCH schlechter zu sein.Und alles das ist alt. Alt nicht wie das Smartphone von vor zwei Jahren, sondern alt wie das allererste iPhone verglichen mit aktuellen Smartphones. Da sind Systeme die aus einem C++ Kern bestehen um den man Java herumgebaut hat und das jetzt in eine virtualisierte Hadoop Umgebung „integriert“ wurde. Alle Entscheidungen die zu so einem Müll geführt haben sind individuell sinnvoll gewesen. Man konnte kein Blech bestellen (Vorstand hat ausgegeben nur noch virtuelle Server), Java weil man keine anderen Entwickler kurzfristig bekommen hat, hadoop weil ja jetzt alles in der Cloud (private) laufen muss. Oder anderes Beispiel, Man hat einen Dienstleister schuften lassen mit der Karotte vor der Nase dann den ganzen Konzern umzustellen. Das ist dann gescheitert weil Oracle für die Tochter die das Geschäft übernehmen sollte nicht anerkannt hat das die Enterprise Lizenz der Mutter auch da gilt. Kosten in 7 stelliger Höhe, Business Case im Eimer. Alternative und auch zertifiziert wäre SQLServer 2016 gewesen. Das war dann aber 2018 zu neu gewesen für die Bank und man ist beim alten Dienstleister geblieben, frag nicht was der neue der sehr viel umsonst gemacht hat davon hält.
Oder die Desktops der Mitarbeiter. Thin Clients waren der heiße Scheiß. Schade nur das über Citrix o.ä, Video in Skype for Business und Telefonier nicht ganz einfach ist. Wird also abgeschaltet bis man das im Griff hat, dauert üblicherweise Jahre. Oder Lokale PCs aber Applikationen nur über Citrix gestreamt. Alt-Tab funktioniert nur zufällig. Die Applikationen werden aus einem Portal aufgerufen das natürlich nur sauber in IE11 läuft. Dafür gehen immer mehr externe Seiten mit Windows 7 und IE11 nicht mehr weil die Cypher die der Server anfordert schlicht in Win7 nicht existieren. Windows 10 muss man mit viel Aufwand optisch so umbürsten das es Windows 7 möglichst ähnlich sieht weil man kein Geld für Mitarbeiterschulungen ausgeben will und Angst vor den Supportcalls hat. Open Source Software ist grundsätzlich böse, weil man da ja keinen Herstellersupport bekommt, selbst für Tools in der IT und selbst installieren geht ja nicht, Sicherheit und so. Und wenn dann mal ein Tool wie Putty verfügbar ist (ist halt kostenlos) dann ist es üblicherweise Jahre alt. Aktuelle Sicherheitslücken kurzfristig patchen? Da will ja keiner Owner der Applikation sein…
Und das ganze noch gewürzt mit Dienstleistern/Outsourcern/Hostern deren erstes, wichtigstes und in vielen Fällen einziges hervorstechendes Merkmal war der billigste zu sein.
Ja nicht bei jeder Bank trifft alles das zu und in den letzten Jahren hat sich an einigen Stellen etwas getan. Aber tatsächlich ist man dann dort nicht mehr 10 Jahre zurück, sondern nur noch 5. Bis mitte der 2000 Jahre hatte der durchschnittliche Arbeitnehmer am Arbeitsplatz noch die bessere Ausstattung als zu hause. Heute ist der durchschnittliche Anwender privat bei weitem besser ausgestattet als am Arbeitsplatz. Für die meisten Banken wäre Office 365 sowohl was security als auch safety, wie auch Benutzerfreundlichkeit und Effizienz ein Segen. Ich war auch lange dagegen, habe meine Meinung aber aufgrund der bitteren Realität mittlerweile geändert. Die Banken und Ihre Dienstleister können es schlicht nicht, haben nie begriffen das die IT ihre eigentliche Produktion ist und deshalb das Thema vernachlässigt. Heute besteht die einzige Chance fürs Überleben in der Cloud. Bitter aber wahr.
[...] Banken-IT ist ein liederlicher, alter zum Teil uralter Haufen Scheiße der über Jahrzehnte zusammengeflickt wurde und nur weil sich einige Mitarbeiter den Arsch aufreißen noch halbwegs stabil läuft. Ohne Mitarbeiter die manuell eingreifen, würde eine Bank innerhalb weniger Stunden komplett stillstehen.
Der Vergleich mit Fintechs ist unfair, da die erst vor ein paar Jahren auf der grünen Wiese angefangen haben -> keine Altlasten. Die haben andere Probleme
Heise lädt nämlich mit 1 Sekunde Verzögerung, wenn man Adblocker hat. Ich bin ja bei sowas gutwillig und nehme immer erstmal Inkompetenz an. Im Zweifel für den Angeklagten. Aber es stellt sich raus: Das ist nicht Inkompetenz, das ist Bösartigkeit. Das wird von einem Stück Javascript auf deren Webseite künstlich herbeigeführt, den sie über eine dieser windigen Onlinewerbungs-Startups reingelutscht haben. Das Forumsposting erklärt auch, wie man dieses Skript in Firefox wegblockt.
In der IT-Security habe ich schon länger das Problem, dass ich andere Teilnehmer immer nur noch als potentielle Angreifer betrachte und niemandem per Default Vertrauen entgegenbringe. Das ist einfach das Modell in der Security. Ich fand immer, dass das schlecht fürs Gemüt ist, denn die meisten Menschen sind ja nicht böse. Zumindest nicht aktiv.
Aber so langsam zeigt sich ja nach und nach, dass das völlig richtig ist. Jede einzelne Webseite da draußen will dich ans Messer liefern. Heise hat sich ja schon durch Outbrain-Einblendungen ins Abseits katapultiert, wo dann lauter so Scammer inserieren, die dir Bitcoin-Investments und Silbermünzen mit total voll hohem Wiederverkaufswert andrehen wollen. Oder ein Malware, äh, Treiberpaket zum Download anbieten.
Vielleicht bin ich einfach nur ein schlechter Kapitalist, aber da würde ich lieber die Hälfte meiner Mitarbeiter feuern, als mir so den Ruf zu ruinieren. Absolut undiskutabel.
Oh und wo wir gerade bei Scams waren: Es ist ja inzwischen offenbar absolut üblich, sich seine Entwicklung durch Kickstarter finanzieren zu lassen, und dann aber auch nochmal Kohle für das von wohltätigen Spendern finanzierte Ergebnis sehen zu wollen. Hab ich da irgendein Memo nicht gekriegt?
Es gab da mal eine Zeit, da hat das GNU-Projekt echte Anstrengungen auf sich genommen, um die Anzahl an Abhängigkeiten minimal zu halten.
Ich rede hier nicht von "dann geht 'make test' nicht", nein, das configure bricht direkt ab.
Auf der anderen Seite: Was will man von dem GNU Projekt noch erwarten, nachdem sie gcc auf C++ umgestellt haben. Jetzt braucht man zum Bootstrappen von gcc den Nachweis, dass man gcc nicht mehr braucht, weil man eh schon eine halbwegs moderne Entwicklungsumgebung hat. Völlig absurd.
Wie in den Witzen über Banker und Kredite.
Da passt es auch gut ins Bild, wenn man glibc nicht bauen kann, weil man kein Python hat.
Ich finde ja, ihr braucht noch eine Abhängigkeit auf .NET oder Java. Ach was sage ich. .NET und Java!
Das ist kein Nobelpreis. Der Nobelpreis wurde von Alfred Nobel ausgeschrieben. Für Wirtschaft sah er keinen vor.
Der Wirtschaftsnobelpreis wird posthum mit seinem Branding von der schwedischen Reichsbank verliehen. Nobel wollte nur Wissenschaften fördern, nicht Bullshit-Blablah.
Dieser Preis ist ein Affront. Das ist wie wenn nach meinem Tod jemand einen Fefe-Preis für elegante Java-Klassenhierarchien ausschreibt. Ich hoffe, wenn das passieren sollte, dass derjenige einen bedauerlichen Unfall hat, den er nicht überlebt.
Leider ist das keine Ausrede. Leider.Das fällt ganz klar in die Kategorie der Details, die man eigentlich lieber nicht wissen musste...Ich habe vor einigen Jahren mal im Finanzbereich gearbeitet. Zusammenfassend kann man sagen, dass diese Erfahrung Augenöffnend war und ich froh war mein Konto bei einer anderen Bank zu haben. Nicht, dass das dort besser ist, aber ich weiß wenigstens nicht im Detail wie furchtbar alles ist.
Aber jetzt zur Anekdote: Es gibt in der Europäischen Bankenregulation etwas, dass AML heisst. Anti Money Laundering. Details finden sich z.B. hier.
Dies ist letztlich eine Liste von Accounts und Namen mit denen Europäische Banken keine Geschäftsbeziehungen führen dürfen.
Diese Liste wird regelmässig importiert und der Banking Stack prüft z.B. bei Anlegen eines Kontos ob der Name auf der importierten Liste ist.Nun sehe ich ein Ticket dass der Import dieser Liste fehlgeschlagen sei. Die Leute die diese Fehler bearbeiteten wussten nicht, was eigentlich los war. Ich schaute mir das Import-Script an und es war voller sed -e 's/XX//' Aufrufe. XX hierbei war ei Sonderzeichen, dass der Banking Stack nicht mochte und das deshalb entfernt wurde.
Der "Fehler" in diesem Fall war ein russischer Name mit einem kyrillischen Zeichen, dass noch nicht von sed entfernt wurde.Der "Fix" war ein weiterer Patch des Files mit einem weiteren sed Aufruf der dann dieses spezielle Sonderzeichen entfernte. m-(
Aber hey, es wurde noch besser: Ich empfahl dann, dass diese "Problemlösung" eventuell nicht ideal wäre, da ja der Russe sich mit seinem richtigen Namen im (Java) Frontend anmeldet und der (Cobol) Stack die "gereinigte" Liste überprüft, auf der der Name anders ist, da ja Buchstaben entfernt wurden. Ich wies dann darauf hin, dass dieses Verhalten ja eher unerwünscht wäre, kontraproduktiv wäre und eventuell auch rechtliche Auswirkungen hätte, da so ja die Anti-Money-Laundering-Sanction-List ausgehebelt wird und die Bank eventuell mit sanktionierten Personen Geschäftsbeziehungen unterhielt.
Die Antwort des Risk-Managements der Bank war: "We accept the risk!" Die magischen vier Zauberworte im Compliance-Bereich.
Die Besten der Besten der Besten, SIR! Mit Eichenlaub! In Gold! SIR!
Der Kunde war nun eine Bank im nord-westlichen Europäischen Ausland, aber geh mal davon aus, dass die deutschen Banken kein Stück besser sind. Vermutlich noch schlimmer, weil hierzulande immer noch irgendwie die Neuland-Denkweise weiter verbreitet ist. Aber diese Anekdote gibt hoffentlich ein wenig Einblick in die Banking Problematik aufgrund ranziger Software. Und die "Ausrede", dass AML Listen ein Problem darstellen könnten, erscheint so eventuell ein wenig glaubwuerdiger.
Maintainers of the RubyGems package repository have yanked 18 malicious versions of 11 Ruby libraries that contained a backdoor mechanism and were caught inserting code that launched hidden cryptocurrency mining operations inside other people's Ruby projects.
Das ist natürlich nicht die Schuld von Ruby, sondern davon, dass Entwickler heutzutage Libraries aus dem Internet automatisiert runterladen, einbinden und ausliefern. Das ist einfach mal generell eine schlechte Idee, aber gepaart mit der monströsen Komplexitätsexplosion in Code heutzutage ist es ein selbstverstärkendes Problem.Die Leute meckern immer rum, dass C und C++ keine Paketmanager haben. Ich halte das für einen Vorteil. Nicht nur einen Vorteil. Den Hauptvorteil von C und C++ im Moment. Von der Funktionalität her können C und C++ nichts, was nicht auch Rust oder Go könnten, bei einer grob vergleichbaren Performance am Ende. Oder wenn man auf Performance scheißt, dann wie Ruby, Python oder Javascript.
Der Vorteil von C++ im Moment ist, dass es eine Schwelle für das Einbinden von Libraries gibt. Das ist mit Kosten verbunden. Daher gucken Leute eher hin.
Ist nicht alles toll mit dem Modell. Eines der Hauptprobleme von C++-Code in Produktivsystemen ist, dass der Code veraltet ist und veraltete 3rd-Party-Komponenten einsetzt. Da muss mal was geschehen, keine Frage.
Aber habt ihr schonmal von einem C oder C++-Programm mit einem Kryptominer oder einer Backdoorkomponente gehört, wo der Autor auch nur versucht hätte, sich mit Paketen aus dem Internet rauszureden? Oder ein kompromittiertes Github-Paket, das es dann auch tatsächlich in irgendwelche ausgelieferte C++-Software geschafft hat?
Ich beobachte die aktuellen Bemühungen bei C++20 mit größter Sorge, sich da in Richtung NPM zu bewegen, um mehr Hipster anzuziehen. Leute, die auf sowas stehen, sind genau die, die man nicht in seinem Projekt haben will, weil das am Ende Kryptominer drin haben wird und der Verantwortliche wird nicht mal verstehen, wieso das seine Verantwortung gewesen wäre.
Und ich glaube, mit "KI" sehen wir gerade einen ähnlichen Effekt. KI treibt im Moment die Compute-Power und ich würde sagen, dass wir ohne KI keine Prozessoren mit 64 Kernen und 128 Threads gekriegt hätten. Da gab es schlicht keine sinnvollen Anwendungen für. Und wenn dann in winzigen Nischen, die man ordentlich zur Ader lassen konnte als Chiphersteller.
Heute so: Kaspersky-Schlangenöl injected Javascript-Nachladen von ihren Servern in Russland in alle Webseiten.
Der Admin dieser Server sieht damit alle URLs aller User, inklusive URL-Parametern (mit denen bei SSL-Seiten wie Online-Banking gerne weniger besorgt umgegangen wird, weil das ja hinter SSL ist, und SSL soll uns ja gerade davor schützen, dass das auslesbar ist). Ist auch normalerweise nicht auslesbar, außer man hat ein Schlangenöl installiert, das das SSL rechnerweit unsicher macht. Wie bei Kaspersky.
Nun, herzlich willkommen bei RAMBleed. Stellt sich nämlich raus: Man kann auch benachbarte Zellen auslesen.
Klingt jetzt nicht so schlimm, aber man muss bedenken, dass zwischen dem RAM und deinem Prozess eine MMU sitzt, und ein Betriebssystem, das den physischen Speicher wild durch eine Indirektionsschicht umherwürfelt, d.h. nur weil die physikalischen Adressen benachbart sind, heißt das mitnichten, dass die Daten vom selben Prozess sind.
Das ist schon für einen Single-User-Desktop furchtbar, weil das auch ein unprivilegierter Prozess in einer Sandbox machen kann, also z.B. Javascript im Browser.
Aber für Cloud-Umgebungen ist das ein weiterer Totalschaden.
As an example, in our paper we demonstrate an attack against OpenSSH in which we use RAMBleed to leak a 2048 bit RSA key.
Und das funktioniert so:We show in our paper that an attacker, by observing Rowhammer-induced bit flips in her own memory, can deduce the values in nearby DRAM rows.
Und falls ihr euch jetzt denkt: Ach macht nichts, ich hab damals nach Rowhammer ECC-Speicher gekauft, dann habe ich schlechte Nachrichten für euch:Furthermore, unlike Rowhammer, RAMBleed does not require persistent bit flips, and is thus effective against ECC memory commonly used by server computers.
Fuuuuuuck! (Danke, Sven)
New hotness: Type Confusion in Postscript-Engine.
Erstens kamen Mozilla-Mitarbeiter/Helfer und schrieben mir (ich paraphrasiere) "Ihr Anruf ist uns sehr wichtig. Wir nehmen alle Beschwerden ernst." und einer kam mit so PR-Technobabble ala "we leveraged synergies to improve benefits". Das empfinde ich symptomatisch für das Problem, in dem wir uns befinden. Mozilla hat vergessen, wer ihre Software einsetzt, und warum. Dass sie überhaupt angefangen haben, mir irgendwelche Anmelde-Scheiße wie Pocket und Sync penetrant reindrücken zu wollen, zeigt das mehr als deutlich.
Zweitens kamen so Digital-Prepper mit "also ich benutze ja deshalb (obskurer Firefox-Fork von vor 8 Jahren). Der kann zwar kein Javascript, und dumpt bei 40% der Webseiten core, aber dafür kann ich dem noch vertrauen!1!! Ruf mal bitte dazu auf, dass Entwickler dem Projekt helfen sollen!!1!".
Drittens kamen so "der Fefe hat keine Ahnung, was für ein Idiot"-Meldungen. Die kommen häufig nicht ZU mir sondern ÜBER mich auf Twitter, wenn sich die Leute gegenseitig im Kreis ihre eigene Großartigkeit und die Idiotie aller anderen bestätigen. Dass Leute immer noch für sowas Zeit haben...
Einer fragte mich, ob es vielleicht in China ein Browser-Projekt gäbe. Weil den Browsern aus dem Westen kann man ja nicht mehr trauen.
Ich finde es schockierend, wie die Browserhersteller aus dem Westen ihre eigene Userbasis solange mit Füßen getreten haben, bis ihnen niemand mehr traut, und Leute nur noch aus Lockin-Gründen bei ihrem Browser bleiben. Weil es zu nervig wäre, die Bookmarks und Extensions woanders hin zu migrieren.
Ich hatte mal gehofft, dass Open Source und Free Software dagegen immun sein könnte.
Damit das nicht ganz untechnisch ist hier: Mozillas eigentliches Problem war, dass sie Profil-Korruption hatten, wenn alte und neue Versionen von Firefox am selben Profil herumgearbeitet haben. Das ist ein bekanntes und zigfach gelöstes Problem. X.509-Zertifikate, TLS, SMB, HTTP, wo man hinguckt, überall gibt es Protokolle, die nachträglich erweitert wurden. Klar ist das nicht immer schön. Aber Code so zu machen, dass alte Versionen neue Felder, die sie nicht kennen, ignorieren und im Profil beibehalten beim Speichern, das ist echt keine Raketentechnologie. Hier hat Mozilla technisch auf ganzer Linie verkackt. Und ihre Lösung war nicht, das zu reparieren, sondern mir lieber mein Profil wegzunehmen in der neuen Version (Bookmarks, Extensions, Ublock-Regeln, alles) und mir Sync reinzudrücken zu versuchen. Das ist nicht zu verteidigen. Seit Jahren hat der Browser immer und immer wieder solche versifften Ecken, aber Firefox investiert ihre Millionen lieber woanders. Bei Pocket und Sync.
Oh apropos Sync. Sync gab es ja mal in kryptografisch ordentlich. So dass man a) dem Server nicht trauen musste und b) einen eigenen Server betreiben konnte. Angeblich kann man heute immer noch einen eigenen Server betreiben. Das wurde mir auch ein paar Mal empfohlen. Ich will aber keine weiteren Services betreiben müssen. Jeder Service ist ein Risiko. Schonmal doppelt, wenn das irgendein stinkender Python-Rotz von Mozilla ist. Was die immer alle mit ihrem Python haben! Das war ja schon bei Letsencrypt fast ein Todesurteil, dieser stinkende Python-Rotz, den sie allen Benutzern überhelfen wollten.
Besonders geil finde ich immer, wenn Mozilla dann erzählt, für sowas gäbe es halt keine Entwickler gerade. Ihr habt ein Millionenbudget! Ihr könnt Leute dafür bezahlten, Dinge zu tun, die sie freiwillig nicht tun würden! Stattdessen fließt die Kohle dann zu Hipster-Scheiße wie Pocket und Sync. Zum Mäusemelken.
Oh, das UI um meinen eigenen Server zu benennen, habe ich auch nicht gesehen. Firefox zeigt mir hier jedenfalls nur eine Login-Maske, bei deren Benutzung ich ihrer "Datenschutzerklärung" zugestimmt haben muss. Ja nee, klar. Erzählen mir was von Privatsphäre und wollen dann meinen DNS-Bewegungsdaten bei Cloudflare hochladen und mich über Sync-Login tracken können. Wird nicht passieren, Mozilla.
OK dann sagen wir mal: stdin ist eine Datei (seek und mmap gehen) und ihr dürft Threads benutzen. Die Testmaschine hat vier Cores, davon zwei bloß Hyperthreading. Die Eingabedaten dürfen als ASCII-Bytes bearbeitet werden. Wer also Locale und UTF-8-Validierung für bessere Performance abschalten kann, darf das tun. Die Ausgabe geht in eine Datei, Flush bei Zeilenenden darf abgeschaltet werden.
Da bin ich mal gespannt, wie die verschiedenen Sprachen sich mit Multithreading schlagen.
Update: Ich habe mal eine C++-mmap-Thread-Variante gehackt, die kommt auf 1,7 Sekunden Wall Time. Nur um da mal den Ball zum Rollen zu bringen. Das könnte man bestimmt auch noch geschickter machen, Vorschläge nehme ich gerne entgegen. Ich hätte weniger Threading-Performancegewinn vermutet.
Update: Mein Testrechner ist mein Reiselaptop, da ist wie gesagt ein N5000 drin — das ist ein Atom mit 5W TDP, passiv gekühlt, und auch die RAM-Anbindung ist auf Stromsparen und nicht auf Durchsatz ausgelegt. Das scheint hier in einige der Benchmarks reinzugrätschen und bei mir deutlich schlechtere Performancezahlen zu bringen als bei Einsendern zuhause, die auf dicken Xeons oder so arbeiten. Insbesondere Java scheint hier im Nachteil zu sein, aber auch bei Go gab es starke Diskrepanzen.
Diesmal interessierte mich vor allem, ob die Implementation relativ zueinander effizienter geworden sind. Hier sind die aktuellen Messungen, und da das diesmal vorbearbeitet ist, ist das auch vergleichbarer. Der alte PHP-Code hat z.B. bei einer Zeile das Tokenisieren eingestellt, wenn ein "0" als Token kam. Und Go brach kommentarlos ab, wenn eine Zeile zu lang ist, und hat dann viel weniger Werte tatsächlich bearbeitet. Zum Vergleich: Die alte Messung.
Für mich das spannenste Ergebnis: Wie stark Go aufgeholt hat. Und diesmal sind auch Python 2.7 und Python 3.6 beide vertreten, da sieht man, dass Python 3 deutlich viel langsamer ist, und zwar nicht nur (wie ich bis dato dachte) bei der Startup-Latenz. Auch einigermaßen überraschend fand ich, wie schlecht Node.js abschneidet. So viel Hype wie die haben, da ging ich von besserer Performance aus.
Auch überraschend ist, dass C so deutlich siegt. Bei der letzten Messung war C++ besser. Das war dann wohl auch ein Tokenisierungs-Artefakt und nicht real.
Falls jemand noch Sprachen nachreichen möchte, freue ich mich über Einsendungen. Insbesondere eine ideomatisch elegante Rust-Lösung fehlt noch.
Update: Es sind gleich mehrere Rust-Lösungen reingekommen. Eine schön ideomatische und eine optimiertere. Auch für Java kam noch eine schnellere Version rein, und die Ocaml-Version funktioniert jetzt auch mit dem aktuellen Ocaml 4.09. Danke an alle Einsender.
He found that the Javascript code helping Google place ads on pages and analyse user activity bestowed the longest delays on visitors. […] If used together on a site, these can add more than two-thirds of a second to loading times, he found.
Ach. Ach nee. DESHALB nervt Google immer so rum, die Leute sollen ihre Webseiten optimieren! Damit sie nicht ihre Werbe- und Trackinggülle optimieren müssen!
Und ich bin mir sicher: Wenn wir die Kommentare nicht verstehen, wird jemand eine Kommentar-Interpretier-KI schreiben! (Danke, Benjamin)
they leveraged an out-of-bounds write bug affecting WebAssembly to achieve code execution via NFC.
Das war das Xiaomi. Das selbe Team hat auch das S9 exploitet, via Heap-Overflow im Baseband. Und ein Iphone X haben sie über Wifi über einen JIT-Bug übernommen.Ein zweites Team hat das Xiaomi über Wifi gehackt.
resulted in a photo getting exfiltrated from the targeted phone. ZDI says the exploit involved 5 different logic bugs, including one that allowed the silent installation of an app via JavaScript.
und das Samsung-Phone über ein gehacktes Captive-Portal, und ein dritter Teilnehmer hat einen Type-Confusion-Bug im Browser benutzt, um auf dem Xiaomi Code auszuführen.Und das war nur Tag 1.
Als möglichen Produktnamen bringt er
das Siegel für interquantifizitäre Sicherheitssingulationenins Gespräch. Ich muss sagen: Das hat was! Brauchen wir nur noch ein geschmacklos aussehendes GIF.
Ich weiss ja, dass Du Java nicht so sehr magst (vor allem das verteilte Echtzeit Java ;-), aber Java und auch die LTS Releases sind jetzt auch nicht so gammelig wie Du tust. Aber das ist Ansichtssache und darüber lässt sich vornehmlich streiten. Wo ich Dir allerdings widersprechen möchte, ist Deine Schlußfolgerung: "Die Industrie wird auf Long Term Support setzen". Nein, die Industrie wird sich von Oracle Java abwenden, wenn die jeweilige Firma sich nicht aus anderen Gründen Oracle verschrieben hat (Operating Systems, Middleware, Database, Business Applications, …).Hui!Ich arbeite an der (Oracle) Java Migrationsstrategie für eine große europäische Softwarefirma. Unsere Kunden (Furtune 500 Firmen) wollen besser heute als morgen weg von Oracle Java. Manche CIO's haben das schon in ihre IT Policies gegossen: "Wenn eure Produkte bis Anfang 2019 noch Oracle Java brauchen, schmeissen wir sie aus unseren Datacentern raus". Die andere Kategorie Kunden (vor allem aus dem Finanzsektor) trauen den undurchsichtigen Buildprozessen nicht und bauen ihre eigene JRE/JDK Binaries direkt von den OpenJDK Sourcen. Ich bin nicht sehr zuversichtlich für das Oracle Java Geschäftsmodell.
Und die im Artikel erwähnten Alternativen zu Oracle Java basierend auf OpenJDK, z.B. Azul Systems (kommerzielle und kostenfreie OpenJDK Distributionen) und AdoptOpenJDK (kostenfrei, noch im Aufbau) sollten für die meisten genügen. Es gibt nur wenige Perdefüße: Oracle Java hat ein paar add-ons, die es in OpenJDK nicht gibt (font rendering, browser plugins, WebStart, JavaFX). Aber Für die meisten Serveranwendungen sollten andere OpenJDK Distributionen gute Alternativen sein. Wenn man aber Oracle Java für Enduser UI's braucht, dann sollte man einen dicken Geldbeutel haben, um die Rechnung an Oracle zu bezahlen.
Aber hey, Oracle hat jetzt eine innovative Lösung gefunden. das Java-Supportmodell wird geändert. Erstens sollen die blöden Kunden gefälligst fett zur Kasse gebeten werden für Java-Support, zweitens wird Java selber bald nicht mehr kostenlos in der Produktion eingesetzt werden dürfen, und drittens muss man alle halbe Jahr wechseln — oder man setzt die uralte, gammelige, spinnwebenüberzogene "Long Term Support"-Version ein.
Was jetzt passieren wird, kann sich jeder ausmalen. Die Industrie wird auf Long Term Support setzen. Alles, was die bauen, wird noch krasser als im Moment veralteter Mist sein, der auf noch veralteterem Mist aufsetzt. Dann sieht nicht mehr nur Oracle schlecht aus, sondern auch alle ihre Kunden! MWAHAHAHAHA *haarlose Katze streichel*
Nach sieben Jahren und Kosten von mehr als einer halben Milliarde Euro läuft das geplante System noch immer nicht reibungslos. Jetzt hat der Discounter die Reißleine gezogen.Sieben Jahre klingt echt viel. Sehr ungewöhnlich auch, dass Firmen in der Lage sind, bei so einem Katastrophenprojekt die Reißleine zu ziehen. Die meisten Manager sind dazu nicht in der Lage, weil sie nicht zugeben können, einen Fehler gemacht zu haben. Da wird dann viele Jahre lang immer mehr Geld hinterhergeworfen. Das kennt man ja auch von Projekten der öffentlichen Hand.
Aber wieso ist das denn jetzt gescheitert? Hier ist ein Hinweis:
Bislang wurde das neue System aber nur in den kleinen Vertretungen in Österreich, Nordirland und den USA eingeführt. Dabei hat sich wohl gezeigt, dass die von über hundert IT-Spezialisten entwickelte SAP-Version für umsatzstarke Länder nicht taugt.Ich interpretiere das mal als Performance-Probleme. Braucht pro Transaktion zuviel Zeit vielleicht? Oder schafft die Tages- oder Monats-Abrechnung nicht schnell genug?
Von Programmierern hört man in den letzten Jahren immer häufiger, Performance sei ja gar nicht so wichtig. Besonders von Leuten, die dann sedimentäre Abstraktionsentwicklung in Java praktizieren. Das stimmt halt nicht. Ich empfehle immer, harte Performance-Anforderungen in die Abnahmebedingungen zu schreiben. Wenn die gelieferte Software das mit der vorgeschriebenen Hardware nicht in der vorgegebenen Zeit schafft, wird sie nicht abgenommen, und der Softwareentwickler trägt das volle Risiko dafür. Im Moment beobachtet man häufig, dass die Software-Klitschen ihre Inkompetenz einfach an die Auftragnehmer externalisieren, die dann halt mehr Hardware kaufen, weil das billiger ist als sich jahrelang mit irgendwelchen Zulieferern zu streiten. Das Ergebnis sind die üblichen Schnarch-IT-Systeme, die wir alle kennen.
Ich denke mal, dass SAP diese Darstellung nicht auf sich sitzen lassen wird und da auch noch eine Pressemitteilung zu raushauen wird.
Update: Ah, Heise hat noch ein paar Details. Wie üblich in solchen Projekten hat Lidl das nicht alleine zu stemmen versucht, sondern externe Consultants reingeholt. Lidl wollte einige Umstellungen auf sehr grundsätzlicher Ebene. Das ist praktisch immer eine Zeichen dafür, dass das Projekt scheitern wird. Die Idee bei SAP ist nicht, dass du das kaufst und dann an deine Bedürfnisse anpasst. SAP macht in einer Branche das erste Projekt mit dem Marktführer, und alle anderen kaufen das dann und passen sich an SAP an, nicht anders herum. Die Idee ist, dass SAP die Prozesse umgesetzt hat, die beim Marktführer funktionieren. Du kaufst SAP nicht, damit das weiter wie bisher läuft, sondern damit du deine schrottigen Prozesse auf die umstellen kannst, die auch der Marktführer einsetzt. Da war Lidl also entweder schlecht beraten oder sie haben sich über den Tisch ziehen lassen, wenn sie das trotzdem versuchen.
Das andere interessante Detail ist, dass sie SAP Retail auf SAP Hana eingesetzt haben, einer In-Memory-Datenbank. Das ist eine In-Memory-Datenbank. Die Daten passen ins RAM. Entsprechend fette Server hat man da am Start. Ein Einsender schrieb, die hätten mehrere Server mit jeweils 4 TB gehabt, ich habe aber keine Ahnung, woher er diese Zahlen hat. Aber von der Größenordnung klingt das für mich nicht unglaubwürdig. Der Unterschied in Zugriffszeiten zwischen DRAM und Platten liegt bei mehreren Größenordnungen. Selbst bei den schnellsten SSDs ist DRAM immer noch eine Größenordnung schneller. Was ich sagen will: Man muss sich echt aus dem Fenster lehnen, um eine Anwendung so zu verkacken, dass sie gegen eine In-Memory-Datenbank schlecht performt.
Die Beraterfirma ist jetzt natürlich unter Druck, das nicht als ihr Verkacken dastehen zu lassen, kann aber auch nicht die Schuld zu Lidl schieben, wenn sie da jemals nochmal Kohle absaugen wollen. Das Ergebnis dieses Spagats seht ihr hier. Money Quote: „Im Vergleich zu ähnlichen Transformationsinitiativen also sehr kurze Projektphasen“. Mit anderen Worten: Andere verkacken noch schlimmer als wir!1!! Und inhaltlich widersprechen sie im Wesentlichen auch bloß der Behauptung, bei Lidl rausgeflogen zu sein. Nicht der Größenordnung der verbrannten Kohle, nicht dem Zeitrahmen und nicht dem „war zu langsam“. (Danke, Alexander)
Und da ist ein wichtiger Datenpunkt, der mir viel zu häufig untergeht, dass Firmen (natürlich!) der Reihe nach bescheißen, wenn es um KI geht. Die behaupten, sie hätten eine geile KI, und am Ende ist das ein Callcenter in irgendeinem furchtbaren Land mit den ärmsten Schluckern aus deren Gesellschaft, mit Ultra-Minimum-Wage und so weiter. Nix KI weit und breit. Denn, stellt sich raus: KI ist gar nicht so einfach. Da muss man investieren. Es gibt zwar, wie auch beim Programmieren und Statistik, eine ganze Bullshit-Branche, die ihre Produkte auf der Prämisse verkauft, dass die SO EINFACH ZU BEDIENEN seien, dass man da bloß ein paar Lego-Steine zusammensetzt und dann … wird das natürlich Kacke am Ende. Und weil so viele Startups eh scheitern und die Leute nur noch so Zocker-Spiele spielen, behaupten dann halt Startups gerne mal, sie hätten Wunder-Tech am Start, wenn sie bloß auf Amazon Mechanical Turk das Formular-"Einscannen" von indischen Kinderarbeitern machen lassen. Hey, ist ja nur bis zum IPO! Dann haben wir das Geld, um mit der Lösung des Problems anzufangen, das gelöst zu haben wir gerade unlauter vorgeben!
Ich bin ja eh jemand, der sich gerne und häufig über Leute aufregt, die irgendwelche Schrott-Tools zusammenklöppeln und dann glauben, sie hätten was geleistet, oder gar Erkenntnisse gewonnen. Auf "Übermedien" gibt es gerade so einen Fall. Da hat jemand ein Visualisierungstool genommen und da irgendwelche Twitter-Follower-Graphen reingeworfen. Und tut jetzt so, als könne man am Ergebnis irgendwas ablesen. Die mitschwingende Prämisse ist, dass wenn jemandem viele Nazis folgen, dass der dann wohl auch ein Nazi sein wird. Also genau das linke Ausgrenzen via Sippenhaft, das mich schon seit Jahren aufregt. Du wurdest in der Nähe von DEM DA gesehen, und der ist doof, also bist du auch doof.
Aber dieses Mal gibt es einen lustigen Winkel, weswegen ich das auch hier blogge. Ich selbst mache ja nichts mit Twitter, aber es gibt diverse 3rd Party Bots, die meinen RSS-Feed auf Twitter weiterverbreiten. Gegen meinen Willen übrigens. Ich finde die Idee furchtbar, dass Leute möglicherweise durch die Präsenz meiner Inhalte auf Schweine-Plattformen wie Twitter oder Facebook verbleiben. Mir wäre es viel lieber, wenn alle Leute, die meine Texte auf Twitter oder Facebook lesen, ihre Accounts dort zumachen und sich einen RSS-Reader installieren oder das Blog im Browser lesen würden.
Anyway, zurück zur Twitter-Graphen-Analyse. Stellt sich raus, dass die Bots, die meine (identischen!) Inhalte verbreiten, bei der Graphenanalyse natürlich an verschiedenen Stellen im Graphen auftauchen. Und alleine damit ist gezeigt, dass die Aussage von solchen Analysen Null ist. Der Typ, der da mit seinem Java-Tool, das jemand anderes geschrieben hat, und den Graphen-Daten, die er von jemand anderem hat, auf "Mach mal Analyse, Alter!" geklickt hat, hat sich dann mit fadenscheinigen "ja die Ausgabe muss man natürlich interpretieren!1!!"-"Argumenten" rauszureden versucht, aber das zieht offensichtlich überhaupt gar nicht, denn wir kamen ja zu ihm über die Interpretation, nicht über die Daten. Und die Interpretation war: Emma wird von Nazis gelesen!1!!
Was ja sogar sein kann. Wer weiß. Wundern würde es mich nicht.
ARM nimmt man wegen des minimalen, klaren RISC-Befehlssatzes, hörte ich. (Danke, Tobias)
Auf der einen Seite haben sie absolut recht, dass das Serialisierungszeug ein großes Risiko darstellt, aber das betrifft Serialisierung generell, nicht bloß die von Java. Es ist nicht offensichtlich, dass das besser wird, wenn man jetzt ein Framework macht. Es könnte sogar sein, dass Oracle für das Framework Kohle sehen will oder das anderweitig am Markt scheitert, und dann alle Leute von Hand Serialisierung machen und dann wird alles noch schlimmer. Aber gut, Schritt 1: Admit there is a problem.
Nun. Brian hat diese Tage einen Bericht über Coinhive veröffentlicht. Das ist so eine JS-Mining-Geschichte, die im Browser Monero minen kann. Mich haben diese Browser-Miner nie interessiert, weil es offensichtlich in erster Linie die Besucher verärgert, deren Akku dann nicht so lange hält und deren Geräte heißlaufen, und weil es sich meiner Überschlagsrechnung nach auch gar nicht lohnen kann. Aber hey, wenn man die Kosten komplett externalisieren kann, ist einem das vielleicht egal. Und so kam es, wie es kommen musste: Böse Menschen haben das Coinhive-Zeugs als Malware verbreitet, und das hat dann irgendwann so ein Ausmaß angenommen, dass es Brian Krebs anzog.
Der hat dann mal rumgestochert und fand, dass Coinhive eine Firma ist (ich kann coinhive.com nicht mal absichtlich besuchen, weil uBlock das schon ewig in der Blockliste hat), die 30% der Kohle als Gebühren kassiert und den Rest ausschüttet. Wenn man denen eine Malware meldet, die bei ihnen mined, dann sperren die den Key, sagt Krebs, was aber nicht heißt, dass die Malware weg ist (duh!), sondern dass Coinhive 100% des Geldes behält. Krebs bezieht sich in dem Teil auf einen anderen Security-Forscher namens Troy Mursch, und verlinkt seine Quellen auch immer ordentlich.
Jedenfalls: Was kam raus bei den Recherchen, wo Coinhive herkam? Krebs fand heraus, dass das ursprünglich bei dem deutschen Imageboard pr0gramm.com auftauchte. Wer nicht weiß, was ein Imageboard ist: Das ist eine Art Webforum für anonyme oder manchmal auch pseudonyme Kommunikation, mit Bildern als Transport-Medium (obwohl es auch Textkommentare gibt). Das bekannteste Imageboard ist 4chan, bei denen voll-anonym kommuniziert wird, und Threads werden nach einer Weile automatisch gelöscht. Der Effekt ist wie bei Star Wars: You will never find a more wretched hive of scum and villainy. pr0gramm archiviert seine Threads und hat Pseudonyme, ist insofern nicht ganz so furchtbar wie 4chan, aber wie 4chan führten libertäre Grundeinstellungen, ritualisierte Ablehnung von Netzzensur und Pseudonymität zu einem Rennen darum, wer sich mit dem krassesten Fehlverhalten aus der Masse abheben kann. Bildmaterial aus dem 3. Reich und die-Ausländer-vergewaltigen-unsere-Frauen sind an der Tagesordnung. Das funktioniert natürlich nur, wenn die Pseudonymität nicht von außen aufgehoben wird, und hier kommen wir zu Brian Krebs. Der hat beim Coinhive-Recherchieren herausgefunden, dass die erste Version von dem Javascript-Code bei pr0gramm in Anwendung war, und wollte dann mal wissen, wer eigentlich das pr0gramm betreibt. Er schrieb daraufhin Leute an und fand Namen heraus und hat die in dem Bericht veröffentlicht.
Das ist ein Angriff ins Mark für Imageboards. Entsprechend heftig fiel die Reaktion aus. Bei mir gingen bestimmt ein halbes Dutzend mehr oder weniger wütende Mails ein, dass hier ein fieser Ami gerade arme deutsche Imageboardler doxxt und ihre Rechte mit Füßen tritt. Ich las mir daraufhin seine Recherche durch und fand da jetzt nichts besonders ehrenrührig. Er schreibt halt, was er rausgefunden hat. Kein erhobener Zeigefinger, außer man liest den selber rein. Keine Vorwürfe zwischen den Zeilen. Nichts. Also jedenfalls nicht gegen pr0gramm. Einzig die Stelle, wo er Coinhive dafür kritisiert, dass sie Malware nicht stoppen sondern die Kohle zu 100% behalten, fand ich grenzwertig. Wie soll Coinhive denn Malware auf irgendwelchen gehackten PCs stoppen, bei denen sie selbst nur ein Modul beigesteuert haben, und das auch noch im Quellcode, d.h. das können die Malware-Verbreiter verändert haben? Der Teil bei Krebs war bescheuert, fand ich, aber er hat schon Recht damit, dass diese Situation so aussieht, als pulle Coinhive da gegenüber den gehackten Usern eine Youtube-GEMA-Argumentation, nur auch noch ohne "wenn ihr uns hinweist, machen wir das weg" (weil sie das gar nicht können).
Die Story geht dann so weiter, dass er bei pr0gramm natürlich nur Leute anschrieb, die daraufhin direkt abwehrend und entsetzt reagieren, denn niemand will öffentlich als User oder gar Betreiber eines Imageboards genannt werden. Keiner von denen hat Krebs irgendwas gegeben, was für den natürlich aussieht wie eine typische mafiöse Vereinigung, wo der halt sonst so recherchiert :-)
Und Krebs findet natürlich auch was, denn der hat Zeit für sowas und lässt sich nicht abwimmeln — und veröffentlicht in der Tat den Realnamen des aktuellen Admins vom pr0gramm. Daraufhin hat besagter Admin auf pr0gramm gepostet, dass sie dann wohl mal gucken werden, wie lange sie die Site noch offen lassen wollen. Das löste bei der Userschaft ein Heulen und Zähneknirschen aus, das man wahrscheinlich noch bei Brian Krebs im Keller hören konnte. Die Site ist bald weg und der Krebs ist Schuld? Den hassen wir jetzt alle! Lasst ihn uns DDOSsen? Ach nee, ist sinnlos, dann sehen wir bloß schlecht aus und das merkt der gar nicht, weil Google ihn schützt.
Und dann — dann postete jemand einen Spendenbeleg. Bei der Krebshilfe. Nein, wirklich! Als Protest gegen Brian Krebs hat der der Krebshilfe gespendet. Und jetzt nicht 2 Cent sondern 25€ oder so, also keinen Trollbetrag. Das löste eine Welle von Spenden aus, die zeitweise das pr0gramm selbst und die Spendenseite der Krebshilfe zum Erliegen brachte.
Und das, meine lieben Leser, hat mir dann doch Tränen in die Augen gebracht. Das ist der erste mir bekannte Fall, wo ein Imageboard aus Rache etwas Positives getan hat.
Können wir das nicht häufiger haben? Vielleicht Spenden für die Alkoholhilfe aus Wut über Heiko Maas (wegen des Namens jetzt, bessere Puns werden gerne angenommen)?
Update: Anscheinend sind da inzwischen "weit über 100.000€" zusammengekommen, schätzt ein Einsender.
Update: Was die pr0gramm-Leute am meisten ärgert, ist dass der Krebs ihren aktuellen Admin enttarnt hat, der wohl mit der ganzen Sache gar nichts zu tun hatte, weil das unter der Ägide seines Vorgängers stattfand und überhaupt alles bloß einer ihrer User geschrieben hat, und mit Coinhive hatte keiner von denen wirklich was zu tun, sagen sie. Da treffen dann amerikanische und deutsche Journalismus-Ethik aufeinander. In den USA ist das völlig normal, in Berichten Namen zu nennen. Wer es nicht tut, macht keinen guten Journalismus, weil er sich mit nicht belastbarem Hörensagen abspeisen ließ. In Deutschland hält man die Namen zurück, außer es handelt sich um Personen des Zeitgeschehens, also Politiker oder Stars aus Sport oder Unterhaltung.
Update: Ein Einsender weist darauf hin, dass diese Aktion auch im pr0gramm ihren Ursprung nahm. Das ist also nicht das erste Mal, dass bei denen was Positives rauskam.
Update: Einige Einsender sagen, dass Coinhive das Mining doch stoppen könnte. Ich habe mir das Protokoll nicht angeguckt, das die da fahren. Mag sein.
Wow. Nacht der lebenden Leichen oder was?
New hotness: Man kann in jeder Programmiersprache Java programmieren!
Unter dem Namen Runtime Application Self-Protection (RAP) versprechen viele Anbieter von Sicherheitsdiensten ihren Kunden neue Schutzfunktionen, die Angriffe auf ihre Anwendungen zur Laufzeit abwehren können.Yeah! Wir haben so viel Komplexität aufgestapelt, dass wir nicht mehr in der Lage sind, auch nur grundlegende Aussagen über die Software zu treffen, geschweige denn sie sicher zu machen. Also tun wir … MEHR Komplexität auf den Haufen!
Faith-Based Programming!
Aber nun wollen wir mal die Kirche im Dorf lassen. Nur weil unsere Profitmaximierung zu euren Lasten geht, heißt das ja nicht, dass unser Geschäftsmodel verwerflich ist! Nein, nein! Ihr könnt euch doch Schlangenöl installieren!11!
Für einen solchen Angriff müssen die Kriminellen allerdings erst die Schutzmaßnahmen des Seitenbetreibers umgehen und auf dem Rechner des Opfers muss es eine noch nicht behobene Sicherheitslücke geben, über die sich die Schadsoftware unbemerkt einnisten kann. Bekannte Varianten solcher Angriffe werden von Antivirensoftware allerdings entdeckt und blockiert.Wow. Fast jedes Wort in diesem Statement ist eine dreiste Lüge.
Schutzmaßnahmen?! Des Seitenbetreibers!? Die meisten Werbenetzwerke sind eigenständige, externe Firmen, mit denen der Browser dann direkt interagiert. Der Seitenbetreiber kann gar keine wirksamen Schutzmaßnahmen haben in so einer Konstellation.
Gelegentlich kann man Sicherheitslücken gar nicht beheben, weil der Hersteller der Software sich schlicht weigert, den Bug als Sicherheitsproblem anzuerkennen, oder weil die Lücke noch gar nicht bekannt ist, oder weil das Update sich wegen eines Konflikts mit dem Schlangenöl nicht installieren ließ. Oder weil der User in einer Firma arbeitet, die seine Updates für ihn managed, und damit im Verzug ist. Wieso ist jetzt plötzlich das Opfer Schuld, wenn ich mal fragen darf? Der Angriff geht von euch aus! Wieso heißt ihr eigentlich Spiegel? Weil sich das als Oberfläche so gut zum Koksen eignet?
Schadsoftware ist auch nicht nur gefährlich, wenn sie unbemerkt ist. Ransomware ist sehr gut zu bemerken. Nachdem sie die Daten verschlüsselt hat.
Und dass Antivirensoftware alle bekannten Varianten erkennt, ist auch eine offensichtliche Lüge.
Für eine Publikation, die vorgeblich der Wahrheitsfindung dient, und für die Aufklärung der mündigen Bürger arbeitet, ist das eine ganz schöne Häufung an alternativen Fakten.
Das waren bestimmt die Russen!1!!
Update: Ich lass das hier mal so stehen.
Update: Oh das wird ja noch besser! Stellt sich raus, dass Die Spiegel-Online-Anleitung zum Adblocker-Ausschalten diesen Passus enthält:
Haben Sie ein Anti-Virusprogramm installiert? Auch diese Programme können wie ein Adblocker funktionieren. Bitte prüfen Sie in den Einstellungen, ob Ihr Programm Werbeanzeigen blockiert, und erstellen Sie eine Ausnahmeregel für SPIEGEL ONLINE.
Geil! Also das Schlangenöl, das euch vor unserer Malware schützen soll, das schaltet bitte auch ab. (Danke, Jens)
Can (a ==1 && a== 2 && a==3) ever evaluate to true?
(Danke, Andreas)
Dann komm ich da rein, und der Saal füllt sich. Da passen 3500 oder 4000 Leute rein (hab beide Zahlen gehört). Das ist ein Meer aus Menschen. Noch krasseres Gefühl als im Hamburger Saal 1, und der war schon krass. Und neben mir stand noch mein Herold und machte Witzchen. Da ist mir schon ein bisschen flau geworden. :-)
Aber hey, lief dann alles prima. Hab auch kaum überzogen glaube ich.
Nach Vorträgen falle ich immer in so ein tiefes Sofa-Ausatmen-Wohlfühl-Loch, so auch dieses Mal. Hab dann noch ein paar alte Bekannte getroffen, aber es am Ende doch noch zu ein paar Vorträgen geschafft. Erst Resilienced Kryptographie von meinem alten Kumpel Rüdi (der mir später noch ein Foto aus dem Archiv vorkramte, wo wir beide als Jünglinge feixend auf der Cebit 2001 vor dem Stand von Intershop standen, oh Mann), dann Are all BSDs created equally von meinem alten Kumpel Ilja, und dann blieb ich gleich in Saal 1 und guckte mir noch Tiger, Drucker und ein Mahnmal an, das war vom Zentrum für politische Schönheit, eine Art Jahresrückblick aber halt über die drei Jahre, seit die das letzte Mal bei uns waren.
Rüdis Talk war für mich Pflicht, weil er mir ankündigte, einen Blockchain-Teil zu haben, und in dem hat er dann das Logo des von Leitner-Instituts für verteiltes Echtzeit-Java, Blockchain-Forschung und Cyberkryptoexpertise präsentiert. Mir wurde warm ums Herz :-)
Iljas Talk ging um Open-, Net- und FreeBSD. Ilja hatte mal drei Monate lang die Abende und Wochenenden mit Code Audits verbracht und geguckt, ob der Code von denen so viel besser ist, wie man angesichts der "gefundene Bugs"-Statistiken anzunehmen versucht ist. Spoiler: Ist er nicht. Das endete mit einem Vergleich der Reaktionszeit und -güte. OpenBSD hat wie erwartet in allen Disziplinen massiv abgeräumt.
Ich hab wegen meines eigenen Vortrags soviel Tunnelblick gehabt, dass ich gar nicht auf dem Radar hatte, dass das ZPS da ist, und als ich dann merkte, dass die jetzt kommen, bin ich dageblieben und habe mir das angeguckt. Der Vortrag war durchchoreografiert und zeigte ihre ganzen Aktionen der Reihe nach, mit ein paar Einblicken hinter die Kulissen. Der Stream lohnt sich auf jeden Fall, und am Ende gab es Standing Ovations. Neben der Höcke-Aktion ging es auch um die Bootsfahrt der Identitären, um die Flugblattdrucker am Gezi-Park und die Tiger-fressen-Flüchtlinge-Aktion. Selbst wenn ihr euch an die alle einnert, lohnt sich der Stream noch.
Update: Heilige Scheiße, das Video von meinem Talk ist ja schon online! WOW, das Videoteam performt ja krass gut!
Update: Eines noch: Der 30-Minuten-Slot ist mir nicht aufgenötigt worden vom CCC. Ich hatte eingereicht, Default ist eine Stunde, und dann kam in der "Einreichung angenommen"-Mail am Ende die Frage, ob ich auch mit 30 Minuten zufrieden wäre. Zu dem Zeitpunkte hatte ich noch nicht viel mehr als die Überschrift für den Vortrag fertig und dachte leichtfertig, das reiche wahrscheinlich und setzt vielleicht sogar Kreativität frei oder so. Rückblickend hätte ich mehr nehmen sollen. Die Anzahl der Leute, die mich nach dem Vortrag noch ansprachen, zeigte, dass da ein Q&A gut gewesen wäre. Übrigens kamen schon einige Mails zu "wir setzen TDD" rein, die im Tenor durchaus positiv sind. Und zwar richtig in Produktion eingesetzt, das TDD, nicht nur bei einem Spaßprojekt zum Testen.
Also, äh, das von Leitner Institut für verteiltes Echtzeit-Java ist natürlich auch im Kern ein Forschungsinstitut für Blockchain- und Cyberkryptofragen!1!!
Ich sehe das, weil ich uMatrix benutze, und der standardmäßig alle extern reingeladenen Resourcen verbietet. Und Google AMP heißt, dass sich die Struktur der Webseite dem AMP-Standard unterordnet, und dass von Google extern eine Javascript-Library reingeladen wird. Google kann also jeden von uns bei jeder AMP-Seite, die wir anklicken, beobachten. Ob da jetzt Werbung von Google geschaltet ist oder nicht.
Google hostet ja auch freundlicherweise ajax.google.com. Das benutzen auch gefühlt alle Webseiten da draußen. Und wer das nicht benutzt, der bindet eine Schriftart von fonts.google.com ein.
Diese Leichtfertigkeit, mit der die Webseitenbetreiber alle ihre Benutzer an Google und Facebook ausliefert, finde ich wirklich schockierend. Bei Facebook gab es ja wenigstens noch einen Aufschrei, als die Leute merkten, was für Analysen Facebook so fahren kann, weil überall ihr Like-Button eingeblendet ist (den filtere ich auch weg). Bei Google haben alle resigniert. Das ist jetzt halt so.
Vielleicht haben wir als Zivilisation den Untergang einfach verdient und ich sollte mal aufhören, mich da immer so gegen aufzubäumen.
Geschäftsidee ist, das besonders kryptographisch geschützte Anwaltspostfach durch einen Dienstleister abrufen, ausdrucken und per Post zusenden zu lassen …Ja warum sollte nur in der Politik #neuland herrschen?
Update: Ein Einsender erzählt:
Das beA ist aber auch in der Tat besonders. Wir haben einige Anwälte als Kunden und ich kann verstehen, dass man mit dem Müll nichts zu tun haben will. Es ist der Nachfolger von EGVP, ein hässliches Stück Java Software was nur Probleme macht und aussieht wie aus dem 18ten Jahrhundert. Es sollte schon Anfang des Jahres/letztes Jahr kommen aber sie haben es für den Start nicht hin bekommen.
Ja gut, wenn das so ist, ... *grusel* (Danke, Lutz)
Ich muss mal schnell ein neues Institut gründen, sonst verpasse ich den Anschluss!
Also … wir haben es verkackt, aber trotzdem verkauft gekriegt, daher werte ich das mal als Gewinn. :-)
Gelegentlich klicke ich auf solche Webseiten, weil ich irgendwo mit umatrix herumklickte, die Seite ging nicht, und ich versuche jetzt herauszufinden, welche der externen Referenzen legitim sind und welche nicht. Und es gibt da eine ganze Klasse an überflüssigen Mittelsmännern, die von mir aus in der Wüste verdursten könnten. Zum Beispiel findet man immer wieder Webseiten, die ein Video einblenden wollen, und dann dafür embed.ly verwenden. Was tut embed.ly? Nun, finden wir es heraus!
Delight your AudienceThe most effective platform on the web to engage your audience through rich media embeds. Get features like images, video, polls, slideshows, music, live video, forms, gifs, infographics and more automatically.
Ich bin ja ein potentieller Kunde von denen. Ich bin die Zielgruppe. Ich betreibe eine Webseite. Vielleicht will ich was einblenden. Wieso würde ich embed.ly nehmen wollen? Diese Information würde ich auf deren Webseite erwarten!Genau genommen würde ich das und nichts anderes auf deren Webseite erwarten. Das ist die Funktion von deren Homepage. Mir zu sagen, wieso ich ihre Dienste kaufen soll.
Steht da aber nicht. Oder wie wäre es mit optimizely.com?
Wollen Sie sich Innovationen zunutze machen?Äh, nein. Ich wollte wissen, was ihr tut. Und ab in die Tonne.
Seit Jahren ärgere ich mich über sowas und frage mich, wieso sich das durchsetzt. Die lassen mich da megabyteweise Javascript-Frameworks und Hero Images und Bullshitbingo runterladen, um mir dann nicht zu sagen, was sie tun.
Aber jetzt erklärt mir endlich jemand, wieso die das alle machen!
I think the big companies do it to get you on the phone — so they can upsell. Meltwater’s reps nearly talked me into paying thousands of dollars more per year for a few extra features. I haven’t spoken with the folks at Optimizely and 84.51, but I assume they have a similar strategy. After all, when all the products are laid out in a nice table online, with a few scary X’s and some nice green checkmarks, it’s easy to make a reasonable choice. When you’re talking with a salesperson who really knows how to play up those X’s, you’re likely to give up a lot more money.
Und das, meine Damen und Herren, ist das erste Mal, dass ich diese Praxis verstehe. Klingt für mich völlig plausibel.Aber es ändert natürlich für mich nichts. Wenn ich eine Homepage sehe, die nur aus nebulösen, unkonkreten Marketing-Phrasen besteht, dann bin ich schneller weg als der Parallax-Bilder zum Fertigladen brauchen.
Warum erwähne ich das? Nun, ihr werdet euch schon gedacht haben, wenn da irgendwelche Komponenten zusammengeleimt werden, das dann möglicherweise das Updaten unter den Tisch fällt. Hier hat mal jemand ein paar Electron-Apps untersucht. Ergebnis:
out of 98 top Electron apps, they averaged 145 known Common Vulnerabilities & Exploits each due to unpached versions of Chromium :-O
Sportlich! Selbst für übliche Webapp-Sumpfbewohner-Hipstermüll-"Anwendungen".
Ich bemühe mich immer, alle angesprochenen Punkte auch explizit in den Folien zu haben, damit man die Folien auch ohne das Audio genießen kann. Das ist in diesem Fall weniger gut gelungen als sonst, an zwei drei Stellen fehlt Erläuterung. Der Punkt mit dem ISP bezieht sich darauf, dass einige Leute vorgeschlagen haben, die ISPs könnten ja Verantwortung für freidrehende IoT-Geräte ihrer Kunden übernehmen.
Aber ich denke mal, die wichtigen Punkte werden klar. Viel Spaß beim Durchklicken!
Update: Ein anderer Punkt, wo das gesprochene Wort fehlt, ist am Ende bei den Bonusfolien, der Vergleich von Machine Learning mit einem behinderten Kind. Da geht es mir nicht darum, zu sagen, ein Autist könne kein guter Schreiner sein, o.ä. (wie es ein Einsender befürchtet hat), sondern es geht darum, dass man im Machine Learning nur eine minimale Teilmenge lehrt. Einem Autisten fehlen vielleicht ein paar Prozent, aber einer KI fehlen eher so 90% oder noch mehr. Konzepte wie "Mensch", "Geld", "Betrug" fehlen. Damit sind so Schlüsse wie "der kauft gerade zum 100. Mal in Folge ein Ticket bei mir mit kleinen Münzen, der will mich vielleicht beschubsen" nicht drin. Das Beispiel ist ein bisschen unschön, das sehe ich auch, aber ich habe da Tage mit verbracht, da ein besseres zu finden, und fand keines. "Einen Roboter bauen" ist jedenfalls kein guter Vergleich, denn es geht an der Stelle gerade darum, dass das eben am Ende keine Maschine ist, bei der man Fehler finden, verstehen und reparieren kann.
Update: Oh, äh, ja, man muss Javascript erlauben für die Seite. Ist bei mir eher die Ausnahme. Falls jemand einen Weg kennt, wie ich die Funktionalität ohne Javascript hinkriege, bitte ich um eine Erklärbär-Mail. Und das "Pfeiltasten" meint die auf der Tastatur, da ist nichts zum Klicken. Und auf Tablets und so geht es auch nicht. Wollte ich bei Gelegenheit mal rausfinden, wie man das auf dem Tablet machen würde.
Ich habe mich ja mit der Idee von Microservices angefreundet, muss ich euch sagen. Wenn man das richtig anwendet, kann man damit Risiken schön isolieren und seine Anwendung in problematische und weniger problematische Teile aufspalten, und dann packt man die problematischen in eine kleine Ecke und achtet besonders darauf, da alles ordentlich zu machen. Ich sehe auch operationelle Vorteile, weil man das viel besser mit Standard-Mitteln debuggen kann.
Ich würde das dann freilich nicht in Java machen. :-)
Und das krasse ist: Nichts davon ist überraschend. Außer vielleicht dem Heap Overflow, heutzutage nutzt man eigentlich eher Type Confusion-Bugs in Browsern aus. Aber dass es Bugs allen diesen Stellen geben würde, das war nicht überraschend. Denn die Qualität unserer Software stinkt ganz barbarisch, und alle wissen es.
Das ist ja ein häufiges Missverständnis, dass man für Javascript-Anwendung irgendwelchen Third-Party-Scheiß braucht. Guckt mal: Vanilla JS! Plain JS!
Aber heute geht es nicht darum, wie man es besser macht, sondern wie man es nicht macht: Aktuelle Studie.
Im Ergebnis ihrer Studie schildern sie, dass 37 Prozent der gescannten Domains mindestens eine mit Sicherheitslücken gespickte Version einsetzen.Na Überraschung! Wenn man Scheiß von woanders nachlädt, hat man das Gefühl, jemand anderes ist dafür zuständig. Nein. DU bist dafür zuständig. Wenn du Dinge delegierst, bist trotzdem du Schuld, wenn es dann Mist wird.
Mist von irgendwo nachladen, weil sich dann ja jemand anderes schon kümmern wird, ist wie sich die Augen zuhalten, damit der böse Wolf einen nicht sieht.
New hotness: Wir hatten ein Problem. Also taten wir X.509 davor, jetzt haben wir zwei Probleme :-)
Reicht noch nicht?
Dann vielleicht noch dieses Dessert:
In this paper, we show that the problem is much more serious and that ASLR is fundamentally insecure on modern cache-based architectures. Specifically, we show that it is possible to derandomize ASLR completely from JavaScript, without resorting to esoteric operating system or application features.
Update: Es gab vor ein paar Wochen einen ähnlichen Angriff auf Kernel-ASLR über die Prefetch-Instruktion und ebenfalls die Page Table Hardware als Seitenkanal.
Die wichtigen Erkenntnisse sind:
"Die CSU (…) ist inzwischen in ihren Forderungen und ihrer Wortwahl oft kaum noch von der AfD zu unterscheiden (…)" (S.21)
Der inhaltlich spannende Teil sind aber die Stärken und Schwächen (geht los auf Seite 12). Da sieht man, dass sie glauben, den Führungsstreit und das Image als zerstrittene Partei abgelegt zu haben. Hier ergibt sich ja schon mal direkt, dass man bei dem Höcke-Nicht-Rausschmiss nochmal ein bisschen dissonant nachhaken könnte.
Für ihre Hauptschwäche halten sie, dass sie zu wenig Mitglieder haben, und die zu wenig Beiträge zahlen. Da konnte man also auch mal angreifen, wenn man die AfD bekämpfen wollte.
Der nächste Punkt ist, dass sie kein Expertenwissen haben, weil sie nicht mit Verbänden kooperieren, weil die Verbände Angst davor haben, mit der AfD auch nur in einer Stadt gesehen zu werden. Da könnte man auch noch mal verstärkend tätig werden, wenn man die AfD bekämpfen wollte. Und auch hier machen sie sich große Sorgen, dass unter ihren befreundeten Gruppierungen welche zu haben, die von den Mainstreammedien als rechtsextrem eingeschätzt werden.
Sehr unterhaltsam ist auch Schwäche 4 auf der Liste, der sich langatmig darüber beklagt, die anderen Parteien würden die AfD mithilfe "einschlägigen Nazivergleich-Vokabulars" stigmatisieren — und dann verwenden sie geradezu flächendeckend das Wort "Altpartei", ihre Version des Nazi-Kampfbegriffes "Systempartei". Als ob irgendeine Partei ältere Inhalte vortrüge als die AfD!
AfD-interne Umfragen zeigen, dass die Bemühungen der Altparteien und von Teilen der Medien und Verbände, die AfD als rechtsextrem darzustellen, nicht ohne Erfolg sind. Je stärker die Zielgruppen um ihr gesellschaftliches Ansehen besorgt sind, desto weniger trauen sie sich, ein öffentliches Bekenntnis zur AfD abzulegen.Für den Fall, dass die AfD das nicht alleine hinkriegt, obwohl sie natürlich alleinig im Besitz der Wahrheit sind, …
In diesem Zusammenhang sollte neben der Meinungsforschung auch auf professionellen Rat aus der Branche der Imageberater zurückgegriffen und die Öffentlichkeitsarbeit verstärkt werden.Die Lösung sehen sie im Angriff nach vorne, gegen die "Political Correctness".
Besonders wütend ist die AfD darüber, dass sie keinen Credit kriegen, wenn andere Parteien ihre Positionen stehlen, oder wenn sie Nazis rausschmeißen. Ins Fernsehen werde die AfD nur eingeladen, um sie dann vorzuführen oder plattzumachen.
Der Lösungsansatz dafür ist, dass man eben noch weiter nach rechts rückt, wenn die CSU einem zu nahe kommt. Und wenn die CSU einen rechts überholt, dann muss man das auch mal öffentlich kritisieren! (Ich freu mich schon!)
Für linke Gruppen ein besonderes Fest wird Schwäche 6 sein.
Längst haben die professionellen, staatlich alimentierten Störer von der sogenannten „Antifa“ die AfD als Mittel entdeckt, ihre Legitimität und ihre eigene gesellschaftliche „Nützlichkeit“ durch Attacken auf die AfD zu erhöhen.So und jetzt möchte ich gerne von den anderen Parteien die Strategiepapiere geleakt sehen.
Das erste, was bei Rust auffällt: Man kann es nicht aus den Sourcen bauen. Ich möchte immer gerne vermeiden, anderer Leute Binaries auszuführen. Das ist eine Policy bei mir. Wenn ich es nicht selbst gebaut habe, will ich es nicht haben. Es gibt nur wenige Ausnahmen, bei denen der Buildprozess zu furchtbar ist, oder so fragil, dass das selbstgebaute Binary am Ende nicht so gut funktioniert wie das "offizielle", weil die auf irgendwelche speziellen Compilerversionen setzen oder so. Die einzigen Sachen, die ich hier nicht selber baue, sind im Moment Chrome, Libreoffice (falls ich das so einmal pro Jahr mal brauche) und ripgrep. Und ripgrep wollte ich mal ändern. Außerdem finde ich Rust von den Konzepten her spannend und will mal damit rumspielen.
Erste Erkenntnis: Die neueren Versionen von openssl-rust können OpenSSL 1.1. Allerdings kann man Rust nicht aus den Sourcen bauen, ohne schon eine Version von Rust zu haben. Das finde ich sehr schade. Das ist ein Spannungsfeld, das viele Programmiersprachen betrifft. Programmiersprachen haben Angst, erst ernst genommen zu werden, wenn sie self-hosting sind. Die Download-Seite von Rust will einem erstmal Binärpakete aufdrücken, was ich immer ein schlechtes Zeichen finde. Binärpakete ist der schlechte Kompromiss für Leute, die zu doof sind, aus den Sourcen zu bauen. Und die sind bei Rust nicht Zielgruppe. Dafür ist die Lernkurve zu steil bei Rust.
Aber wenn man runterscrollt, kriegt man auch die Quellen. Und wenn man da configure und make aufruft, dann … zieht der ungefragt ein Binärpaket einer älteren Rust-Version, installiert das, und baut dann damit. Das vereint die Nachteile von "aus Binärpaket installieren" mit der Wartezeit von "aus Quellen bauen" und weicht etwaigen Vorteilen weiträumig aus. Völlig gaga. Aber es gibt eine configure-Option, dass man das installierte Rust haben will.
Aus meiner Sicht ist der perfekte Kompromiss, was Ocaml macht. Da kommen die Quellen mit einem kleinen C-Bootstrap-Interpreter, und der baut dann den Compiler, und der baut sich dann nochmal selber. So muss das sein. Ist es aber bei Rust leider nicht. Bei Go auch nicht mehr, übrigens.
Anyway. Wenn man das über sich ergehen lässt und Rust aus den Sourcen baut, dann kriegt man eine Version ohne cargo. cargo ist das Packaging-Tool von Rust. Ohne cargo kann man nichts bauen. Insbesondere kann man nicht cargo ohne cargo bauen. Und da muss ich sagen: WTF? Selbst GNU make kann man ohne make bauen! Das ist ja wohl absolut offensichtlich, dass man solche Henne-Ei-Probleme vermeiden will!?
Insgesamt muss ich also meine Kritik zurückziehen, dass Rust immer noch nicht mit OpenSSL 1.1 klarkommt. Tut es, nur halt anscheinend nicht in der stable-Version. Aber diese cargo-Situation finde ich ja noch schlimmer als die OpenSSL-Situation war. Meine Güte, liebe Rust-Leute! Bin ich ernsthaft der erste, der über das Bootstrapping nachdenkt?!
Oh ach ja, ripgrep. ripgrep kann man nicht mit der Stable-Version von Rust kompilieren. Und auch nicht mit der Beta-Version. Das braucht die Bleeding-Edge-Version.
Nun ist Rust eine relativ frische Sprache und sie haben daher eine Familienpackung Verständnis für so Kinderkrankheiten verdient. Aber dann nennt euren Scheiß halt nicht Version 1.irgendwas sondern 0.irgendwas.
Update: Wie sich rausstellt, lässt sich ripgrep doch mit älteren Rust-Versionen kompilieren, allerdings dann ohne SIMD-Support. Wenn ich ripgrep ohne SIMD-Support haben wollen würde, könnte ich auch grep -r benutzen oder silver surfer. Was ich versucht habe, um ripgrep zu bauen: git clone + cd ripgrep + ./compile. Mir erklärt jetzt jemand per Mail, dass das gar nicht der offizielle Build-Weg ist unter Rust. Das hat sich mir als Rust-Neuling so nicht erschlossen. Und es wirft die Frage auf, wieso der Autor von ripgrep dann ein configure-Skript beliegen muss und das dann auch noch was anderes tut als der Standard-Buildweg. Ist der Standard-Weg kaputt und man kann die zusätzlichen Flags, die er da benötigt, nicht einstellen?
Update: Ein paar Leute fragen jetzt rhetorisch, wie ich denn meinen C-Compiler gebootstrappt habe. Das Argument könnte man gelten lassen, wenn es von Rust aus möglich wäre, einen C-Compiler zu bootstrappen. Ist es aber nicht. Aber mit einem C-Compiler kann man diverse andere Sprachen bootstrappen, u.a. Go, Lisp, Forth, Scheme, Ocaml, C++, Javascript, Java, .... Aber um kurz die rhetorische Frage zu beantworten: Meinen C-Compiler habe ich cross-compiled. :-)
Update: Bei Ocaml ist es auch nicht so rosig, wie ich es geschildert habe. Der in C geschriebene Interpreter ist bloß ein Bytecode-Interpreter, und ein vor-gebauter Bytecode liegt dann halt binär bei. Ist auch nicht ideal. Das ist halt auch ein schwieriges Problem. Ich frage mich halt, ob man bei sowas wie Rust nicht trennen kann. Mein Verständnis war, dass die Sprache Rust schon ziemlich final ist und die Dynamik eher in der Laufzeitumgebung und den Libraries ist. Dann könnte man ja beispielsweise einen Minimal-Interpreter oder Nach-C-Übersetzer bauen, der sich die komplizierten Dinge wie Borrow-Checker, Solver und Optimizer spart.
The database giant is understood to have hired 20 individuals globally this year, whose sole job is the pursuit of businesses in breach of their Java licences.
Und mit "licenses" meinen sie "Java SE". Ja, die Version, die ihr wahrscheinlich alle irgendwann mal runtergeladen habt.
SQL-Datenbank […] Internet der Dinge […] Lösung für die Verarbeitung riesiger Datensätze […] millionenfach Einträge von Sensoren und smarten Geräten […] Echtzeit-Anwendungen für die Industrie 4.0Verteilt, Echtzeit, Java (steht da nicht aber ist so), Industrie 4.0, IoT, … sorry, kann ich nicht ernstnehmen. Da fehlt die Blockchain! So wird das nichts!!1! (Danke, Thomas)
durch das IT Sicherheitsgesetz ist nahezu der gesamte Mittelstand in heller Aufregung seit nun 1,5 - 2 Jahren und sucht händeringend "BSI zertifizierte Sicherheitsanbieter" um in diversen Audits von Wirtschaftsprüfern o. ä. irgendwelche Zertifikate vorzeigen zu können, dass sie auch wirklich "sicher" sind - genau das wird zur Zeit gefragt.Ich bin ja nicht zertifiziert und kann mich auch nur an eine Anfrage erinnern, wo jemand ein "Pentest-Zertifikat" angefragt hat. Ich habe dann zurückgeschrieben, was für ein Zertifikat ihm denn da vorschwebt, und er schickte mir die URL von irgendeiner Kali-Linux-Showbiz-Bude (die halt rumtourt und "live hacking" vorführt). Ich schrieb zurück, dass der Typ, der diese Bude gegründet hat, mehrere Jahre weniger im Geschäft ist als meine Firma :-)Da in meiner Firma z. B. niemand den Kopf hinhalten wollte CISO (Chief Information Security Officer) zu werden, hatte mein Chef (IT Leiter) die glorreiche Idee, mich (ehem. sehr schlechter Java 'Programmierer', Linux Nutzer, nun IT-compliance Beauftragter und kleinster und billigster IT-Abteilungsleiter in der Firma) kurzerhand per Dekret zum CISO zu ernennen… Ich habe dann zwangsweise einige Verkaufsveranstaltungen besuchen müssen - bei HP, bei der Telekom, usw… das lief dann immer so ab, dass sie dort irgendein Subunternehmen engagiert hatten [alienvault oder so ähnliche], die dann "Livehacks" mit einem Kali-Linux vorgeführt haben und dann gezeigt haben, wie ihre Standard-Linux-Tools mit bunter neuer grafischer Oberfläche und variablem Firmenlogo als gemietete on-premise Lösung hinter der Firmenfirewall (!) das erkennen können und Alarm schlagen. Sie selbst bieten dann 24/7 Support und <30 min Reaktionszeit - der den Mittelstand dann (Zitat) "12 Vollzeitstellen" kosten würde, was sich niemand leisten kann und der Markt - gerade wegen des Sicherheitsgesetzes - diesbezüglich leer ist, und jeder der Sicherheit schreiben und einen Kali-USB-Stick booten kann zur Zeit eingestellt wird.
Ich habe 4 Monate gebraucht, um diesen tollen CISO Titel wieder loswerden zu können. Ich habe meinem Chef belegen können, dass ich als ehemals arbeitsloser Biologe eventuell doch nicht die technische Kompetenz und Ausbildung besitze, diesen verantwortungsvollen Job so auszuführen, wie er nötig wäre und konnte mir dann weitere Verkaufsveranstaltungen ersparen. Wir sind inzwischen bei Antago gelandet.
Ich schreibe das, um zu erklären, warum die Telekom das anbietet - und vor allem zu erklären, warum es wirklich einen sehr großen Markt gibt, der diesen Schwachsinn sogar nachfragt…
Also ich weiß ja echt nicht, was dieser Live-Hacking-Scheiß immer soll. Erkenntnisgewinn ist Null, da ist auch nichts "actionable", wie man so schön sagt. Reine Blender-Veranstaltung und Geldverschwendung, aus meiner Sicht.
Ich saß ja gestern in der Bahn gegenüber von einem Mann, den ich erst für einen Bühnenmagier oder so hielt, von seinem Äußeren her. Dunkler Anzug, hochgegelte Frisur, und trug eine Fliege. Aber die Schuhe waren dann zu teuer für das Bühnenmagier-Klischee, und als der dann zu telefonieren anhob, habe ich mich an einer Stelle hervorragend amüsiert. Da schlug er nämlich der Gegenseite vor:
Laden Sie einfach alle aus, die eh nichts zu sagen haben.Mensch, brillant! Wieso sind wir da nicht selber drauf gekommen? :-)
Aber so kommt mir gerade die ganze Branche vor. Lauter so Showbiz-Leute, die sich gegenseitig zu blenden versuchen, und dann irgendwann merken, dass die Leute, die was zu sagen haben, keinen Bock auf diesen ganzen Showbiz-Scheiß haben und lieber mit seriösen Gesprächspartnern an konkreten Lösungen arbeiten wollen würden.
New hotness: Verteiltes Echtzeit-Python!1!!
Wer hätte gedacht, dass dieser Joke so ein Eigenleben entwickeln würde. Und vor allem: Python! Java hat ja wenigstens Multithreading…
Im Übrigen hatte ich gestern mal auf dem Smartphone bei heise.de geklickt, und da kam ein fettes Javascript-Popup, das man wegklicken musste. Wer das macht, für den schalte ich auch nicht meinen Adblocker ab. Das war der Deal, Heise. Eine Werbung für irgendeinen Hollywood-Film.
Update: So, wieder zuhause. Dann gucken wir doch mal, von wo die Süddeutsche überall Tracking-Scheiß nachlädt (falls den Punkt jemand nicht versteht: ALLES, was von IRGENDWO anders nachgeladen wird, ist per Definition Tracking-Scheiß. Wenn eure Webseite nicht ohne Nachladen von irgendwelcher JS-Framework-Gülle von sonstwo geht, dann ist sie Scheiße):
Hält das ernsthaft irgendwer für diskutabel, unter solchem Umständen das Abschalten des Adblockers zu verlangen? Ich nicht.
Update: Jetzt kommen hier lauter Umgehungstipps rein. Leute, das war nicht der Punkt. Ich will das auch nicht umgehen. Es geht nicht um mich sondern darum, ob ich das verlinken kann. Und auf Sites, die meine Leser beim Klicken ärgern, linke ich halt nicht.
Ein Javascript-nach-Root-Sandbox-Ausbruch auf ChromeOS, wie sich rausstellt!
Ja aber woran erkennt man in Sachen Javascript-Optimierung einen Profi? Leute, die sich auskennen?
Daran, dass sie es wie dieser Profi hier machen :-)
Merke: Code, der nicht da ist, hat keine Bugs und macht die Site nicht langsam.
(Am Rande: Keine Sorge, ich patentiere meine Methoden nicht)
Der Bundesverband der Süßwarenindustrie sagt, das sei alles ungefährlich und legal.
Damit ist Oracle gescheitert mit ihrem Versuch, bei Google mit beiden Händen kräftig in den Geldspeicher zu greifen.
Man kann gar nicht überbewerten, wie wichtig diese Entscheidung war. Da hingen Milliarden von Dollars in dem konkreten Verfahren dran, und die ganze Industrie stand auf dem Teppich, den Oracle da wegziehen wollte. Man stelle sich mal vor, was dann plötzlich für alle möglichen Leute Nachforderungen stellen könnten. Du benutzt einen Browser, der Javascript unterstützt? Das API ist von mir! Rück Kohle rüber! Autoren irgendwelcher Bibliotheken hätten sich gegenseitig verklagen können. Das wäre eine Abmahnwelle von biblischen Dimensionen geworden.
Und warum bei Programmiersprachen stoppen? Das betrifft ja auch Protokolle im Internet und anderswo. Plugin-Schnittstellen. Alleine SGI mit OpenGL hätte einmal die ganze Industrie zur Kasse bitten können.
Also habe ich mal geguckt, was deren Minimalanforderungen sind.
Und wie sich rausstellt: Man muss da lauter zusätzliche, sinnlose Tags einbauen, und man muss blind Javascript von einer Google-Webseite nachladen. Mit anderen Worten: Google kann alle AMP-Seiten tracken.
Ja nee, Google. So wird das nichts. Ihr könnt mal gepflegt kacken gehen. Das ist ja eine Sache, mir irgendwelche sinnlosen Tages aufzuschwatzen, aber mich zwangsweise als Zuträger in euer Datenkraken-Netzwerk einbauen? Ganz sicher nicht!
Update: Diese JS-Datei ist aktuell 176884 Bytes groß. Und DAS soll das Internet schlanker machen für mobile Endgeräte?! Das ist schon minified und doppelt so groß wie jquery. Was für eine Farce!
Update: Die aktuelle Durchschnittswebseite ist so groß wie der Installer von Doom.
Update: Jetzt wollen hier lauter Leute wissen, was ich überhaupt mit AMP will. Gar nichts. Ich habe vor einer Weile mal ein magisches Tag eingebaut, damit das Blog auf Mobilgeräten besser tut. Hat keinem weh getan, wird auch nur bei Mobilgeräten eingeblendet. Später kam dann raus, dass Suchmaschinen Seiten mit dem magischen Tag höher ranken. Ich dachte mir, bei AMP ist das vielleicht ähnlich. Ich tu irgendein Bullshit-Tag rein, und dann ist da irgendein Vorteil abzugreifen. Ich habe mich geirrt.
Die haben das so wenig im Griff, dass jetzt die Schweizer Behörden den Zugriff unterbinden.
Hier ist, was deren Betreiberladen zu sagen hat:
"Die Server von Tamedia werden täglich angegriffen. Leider gelingt es einem Angreifer alle paar Monate, unsere Sicherheitssysteme zu durchbrechen". Man arbeite mit Hochdruck daran, das Problem zu beheben. Problematisch sei der Angriffe auch nur bei Zugriffen über Desktop-Computer. Mobilgeräte seien zu keiner Zeit betroffen gewesen.Oh, ach? Ist das das Internet-Äquivalent von "keine Gefahr für Anwohner"? Sind ja nur Desktops betroffen? m(
New hotness: Das Ruby-Modul-Nachladesystem ist gammelig und stinkt.
Da hätte man eigentlich auch bei PHP bleiben können :-)
Wer das nicht lustig findet, dem kann ich versichern, dass es hervorragendes Entertainment ist, wenn man nicht selbst betroffen ist. Einfach mal probieren!
Und nun stellt euch meine Überraschung vor, als der Rant in genau die Gegenrichtung geht.
Ich zitiere mal:
Chrome has had such a problem with performance they formed a special group just to work the problem, but in nearly two years time that group has yet to produce anything tangible.
Wait, what? Chrome ist ihm zu langsam!?Ja gut, Chrome ist in der Tat gelegentlich langsam. Wenn so Leute wie dieser Vollpfosten monströse "Anwendungen" in Javascript zu machen versuchen. Guckt euch nur mal seine Beschwerdeliste an:
keep your JS/HTML/CSS payload under 1MB- Keeping the JS payload below 750kb seems to be the key point for Android, but keeping below 500kb is more ideal.
- Mobile Safari can honestly handle 2-4MB apps without blinking, yes, the parse and compile performance differences are that severe.
- complicated, verbose CSS is just as bad as complicated verbose JS
No Shit, Sherlock! "Complicated, verbose" irgendwas ist Scheiße. Auch ohne verbose ist complicated schon Scheiße!You want to keep a fairly low DOM node count, I target <5k nodes, ideally peak at <10k nodes and I make heavy use of occlusion and recycling to achieve that.
Oder, alternativ, könnte man auch Sites mit weniger als 1k nodes machen. Ihr werdet lachen, das geht!Aber diese Javascript-Deppen gehen ja inzwischen dazu über (die Google-Ratschläge sind an der Stelle großartige Unterhaltung), Bilder nicht im HTML zu laden, sondern im HTML Platzhalter zu haben und die Bilder dann per Javascript später zu laden. Weil, äh, dann rendert die erste Seite schneller. Oder so.
Leute, wenn ihr euren Misthaufen immer größer werden lasst, dann könnt ihr am Ende nicht mit dem Finger auf Google zeigen, wenn der Gestank zu groß wird! Es ist euer Misthaufen, der hier stinkt, nicht Chrome!
Der Vollständigkeit halber hier meine früheren Ausführungen zum Thema "schnell landende Webseiten".
Das "Paket" bestand aus einer 11-Zeilen-Funktion, die einen String rechtsbündig formatiert.
Nein, wirklich!
Und das war als Dependency bei der halben JS-Welt mit dabei, u.a. bei React und Babel.
Und das ist nur der Anfang der Geschichte. Es stellt sich raus, dass es da ein "Paket" gibt, das herausfindet, ob eine Variable ein Array ist. Ein Einzeiler. Dieses "Paket" hat fast eine Million Downloads pro Tag.
Ein anderes "Paket" sagt, ob eine Zahl positiv ist. Dieses "Paket" liegt in Version 3.1 vor. Nein, wirklich!
Kann man sich gar nicht ausdenken.
Ich meine, gut, der Rest der Programmierwelt hat ja schon immer auf die Javascript-Leute herab geblickt. Sogar die PHP-Leute. Und wenn die PHP-Leute auf dich herabblicken, und du dann immer noch nicht merkst, dass du im Leben Fehler gemacht hast, dann ist dir möglicherweise einfach wirklich nicht zu helfen.
New hotness: Verteiltes Echtzeit-Javascript! (Danke, Sebastian)
Update: Dieser Kommentar kam dazu per E-Mail rein:
Ganz oben wird da im verlinkten Artikel von Kryo geredet. Wenn man will, deserialisiert Kryo nur registrierte Typen, ganz anders als der böse Standard-Java-ObjectInputStream.
Ich bin mir ziemlich sicher, dass der Artikelschreiber das auch weiß und nur einen auf großen Zampano machen will:
Er erklärt wie toll man generische Container-Klassen dazu benutzen kann unerwartete Objekte in den Deserialisierungsvorgang reinzuschmuggeln.
Dafür schreibt er einen Unittest, der das mit basalen Datentypen macht, die bei Kryo per Default registriert werden. So zeigt der Test zwar, dass man generische Container-Objekte kompromittieren kann, aber eben nur mit registrierten Datentypen, was natürlich verschwiegen wird.
In folgenden Tests registriert er dann bei Kryo problematische Klassen zum Serialisieren/Deserialisieren und stellt es dann als überraschend hin, was man damit alles böses anstellen kann. Dass man diese Klassen gar nicht Deserialisieren kann (sofern sie nicht registriert sind), auch nicht mir generischen Container-Klassen, wird geflissentlich verschwiegen und auch nicht in den Tests abgeprüft.
Der Autor scheint mir daher ein ziemlicher Schaumschläger zu sein! Ich würde die Artikel dieses Blogs mit äußerster Skepsis betrachten.
Das hat den Vorteil, dass man sich nicht mehr persönlich zum Stück Brot machen muss, weil man Leuten sein Weltbild und seine Vorstellungen aufzwängen will. Nein, da gibt es jetzt endlich Software für!1!!
Und wenn sie jetzt links aus dem Fenster schauen, sehen Sie die ganzen Angehörigen von Minderheiten, die wir retten konnten, indem wir nicht mehr "he" sondern "they" oder "it" sagen. Seit unsere Datenbank "primary" und nicht mehr "master" heißt, ist der Handel mit Sexsklaven förmlich zum Erliegen gekommen!
Und morgen, wenn wir das Wort "PC" verbieten, weil das "Computer" darin Frauen marginalisiert, dann haben wir endlich auch die Altersarmut bei Rentnerinnen besiegt!
Update: Ist down. Verteilt euch mal bitte ein bisschen über die Woche :-) Lohnt sich auf jeden Fall.
Update: Ich hab da ein paar Fonts gekauft. Sogar die Bestellseite ist typographisch vorbildlich.
Wenn ich ein Bild zentriert über dem Rest positionieren will, dann nehme ich sowas hier:
position: fixed;Und das funktioniert auch ganz gut. So, jetzt will ich dieses Bild da aber nicht nur hinblenden, sondern es soll von oben angeflogen kommen. Wir reden hier von wichtigen Business-Bildern, ihr versteht schon, die müssen sich bewegen!
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Dafür definiere ich eine Animation mit zwei Keyframes, die zwischen zwei translate-Statements iterieren sollen.
Nun stellt sich raus, dass das translate aus der Animation nicht etwas nach dem translate aus der Positionierung angewendet wird, sondern stattdessen. Ich befürchte jetzt, dass ich da für jede Kombination aus Richtung und Positionierung eine eigene Animation definieren muss. Das kann ja wohl nicht ernsthaft so sein. Also, was ist die Lösung?
Ich könnte jetzt ein div um das zu animierende Element machen, klar, aber das würde das Markup der Folien komplexer machen, und Komplexität ist der Feind. Das kommt also nicht in Frage. Ich könnte diese div-Elemente per Javascript in den DOM reinfummeln. Das würde ich gerne nur als letzten Ausweg nehmen.
Gibt es keine Möglichkeit, beim Animieren zu sagen, dass er bitte den translate-Teil aus dem Style des Elements übernehmen und nicht überschreiben soll? Ich finde gerade keine beim Rumklicken.
Update: Der Hack, der mir hier weitergeholfen hat, ist, die Animation nicht über translate zu machen sondern über margin-left und margin-top.
Jetzt geht der BSI-Chef in den Ruhestand und der neue BSI-Chef wird ein Schlipsträger aus der FDP, der bisher durch Bullshit-Bingo-Veranstaltungen wie den "Cyber-Sicherheitsrat Deutschland" aufgefallen ist und vorher EADS-Lobbyist war.
Wenn ihr noch Fragen habt, schaut euch mal die Homepage vom Cybersicherheitsrat an (lädt Javascript von Google nach, sicherer geht es ja kaum!) und von dem Laden, wo der gerade Vorstandsvorsitzender ist. Da bleibt kein Auge trocken. "Cyber-Frühstück". "2. Cyber-Stammtisch". "Das Internet ist eine sichere Plattform. Die Digitalisierung ist ein Wohlstandsgarant."
Klingt wie die Selbstbelüg-Mantren der Neocons zur sozialen Marktwirtschaft! "Sozial ist, was Arbeit schafft!" "Das Internet ist sicher!"
Wo finden die nur solche Clowns? Was waren da bitte die Auswahlkriterien? "Er muss die Erwartungshaltung deutlich senken"?
In der Selbstdarstellung sind seine Skills eher nicht-technisch. Eher so Sales. Genau was das BSI jetzt braucht!
Update: Ich bin nicht der Einzige, der sich über die Ernennung wundert.
Update: Den Schönbohm hatte ich auch schon mal im Blog. Keine weiteren Fragen.
Update: Der Cyber-Sicherheitsrat läuft übrigens mit Wordpress. Wordpress!! Und hat das gleiche Impressum wie die BSSAG. Oh und der Titel der Webseite ist:
Cyber-Sicherheitsrat Deutschland e.V.Cyber-Sicherheitsrat Deutschland e.V. Cyber-Sicherheitsrat Deutschland e.V.
Einmal mit Profis arbeiten! Oh und wo wir gerade bei Profis sind: Die Bewertungen unter seinem Buch sehen auch aus, als seien sie von professionellen Kommentarschreibern geschrieben worden.
C ist viel zu unsicher, haben sie gesagt.
Frank steuert die Fachbereiche für Cyber-Feng-Shui, Cyberanthroposophie und Cyberontologie bei, ich bin für die Orgonenenergetik, Ordo-Fefeminismus und Fragestellungen aus der kybernetischen Vecturalmystik zuständig.
Ernstgemeinte Bewerbungen auf Beitritt zum Exzellenscluster werden wir wohlwollend prüfen, machen aber keine Versprechungen an dieser Stelle.
Update: Erklärtes Ziel des Exzellensclusters ist full-spectrum cyber, falls das jemandem nicht klar war.
Update: Für den interdisziplinären Aufbaukurs "Full-Spectrum Cyber" kommt überhaupt nur ein Dozent mit ausreichend Credentials in Frage. Damit wir uns jemanden von dem Kaliber leisten können, müssen wir aber noch ein paar Sponsoren gewinnen, fürchte ich.
Update: Wir konnten einen weiteren Stützpfeiler für unseren Exzellenzcluster gewinnen:
Das Bachinstitut für theoretische, angewandte und abgewandte Parainformatik könnte Euren Studierenden Austauschsemester mit den Spezialisierungsrichtungen Systemischer Asozialkonstruktivismus, Angewandte kanonische Cyberepistemologie, Protoorgasmische Multispektralpsychedelik, sowie Aufbaukurse in Indiskreter Hypermathematik, Orgonographie und Dissoziationsrechnung anbieten.
Update: Jeder Exzellenzcluster braucht auch einen Leuchtturm-Forschungsprojekt auf höchstem Niveau, an einem Lehrstuhl von internationalem Renommee. Bei uns ist das:
Der Kurz-Lehrstuhl für Cybersophrologie steuert seine interdisziplinäre Forschungsgruppe für empirische Forschungseklektik bei, die sich aktuell mit den Doktorarbeiten einiger hochrangiger Politiker beschäftigt.
Update: Sagten wir Sponsoren? Wir meinten natürlich: Drittmittel!
Update: Ich fürchte, wir müssen attraktiver für das Militär werden, wenn wir das Drittmittelproblem lösen wollen. Wir brauchen gezielte APT-Forschung und sollten auch gleich ein paar Bullshit-Startups ausgründen und Patenttroll-Gerichtsverfahren gegen Apple und Samsung führen.
Update: Wir haben hier noch eine Bewerbung für die Sozietätsgesellschaft für Cybersteuerung, die Forschungsvorhaben zu polymultipler Cybertechnik, kybernetischer Philosophie und technischem Infrastrukturunterbau beisteuern möchte. Man versicherte uns dort auch glaubwürdig, Fördermittel der Bundeserprobungsstelle für intelligente Kyberwirkmittel acquirieren zu können.
Update: Ein Einsender wies darauf hin, dass theologische Fragen noch nicht ausreichend gewürdigt werden, um von einer wahrhaft ganzheitlichen Forschung sprechen zu können. Wir veranstalten daher im Sommersemester ein interdisziplinäres Forschungskolleg zur Cyberkartografierung der heiligen Dreifaltigkeit aus Cloud, APT und Full-Spectrum Cyber.
Die Kernpunkte sind: CSS ja, Javascript nein, Analytics nur via statischem Tracking-Pixel, Werbung nur via iframe. Die Zielgruppe für diese Vorgaben sind Nachrichtenseiten, und dort redet Google von "relatively static content" und will am Ende statische HTML-Seiten rausrendern und per CDN verteilen.
Mit anderen Worten sind die jetzt da wo ich seit Jahren bin :-)
Aber mal völlig abgesehen von solcher Häme ist dieses Konzept auf der einen Seite wunderschön, weil es tatsächlich das Web besser machen würde, wenn sich die Leute daran hielten. Auf der anderen Seite lassen sich Trackingpixel wunderbar adblocken, und iframes ebenso, und die aktuell grassierenden anti-adblock-Lösungen bestehen auf Javascript, was bei AMP verboten ist.
Man tut an die externe Referenz im HTML im Wesentlichen noch einen Hashwert über den Inhalt der externen Ressource dazu, und wenn da was mit anderem Hashwert kommt, wird es verworfen.
Damit das tatsächlich sicher ist, sollte man natürlich die Webseite dann auch per HTTPS ausliefern.
Update: Wobei, eigentlich ist das ja auch wieder bescheuert. Wenn man die Webseite per HTTPS ausliefert und Hashwerte für die externen Ressourcen mitliefert, dann gibt es keinen Grund mehr, die Javascript-Libraries von externen CDNs noch per HTTPS zu laden. Aber wenn man es nicht tut, wird der Browser rumheulen. Oder haben die das abgeschafft für Ressourcen mit Subresource Integrity? Denn das könnte Webserver massiv entlasten, wenn man für die ganzen verlinkten Unterressourcen nicht mehr https nehmen müsste, nur noch für die Hauptseite. Und dann warum bei Skripten aufhören, warum das nicht auch gleich für die Bilder und Multimedia-Inhalte machen?
Jedenfalls gab es da Kritik. Wie so häufig, wir hatten ja bei C ähnliche Vorschläge. "Hey, wenn wir dieses API hier besser machen, dann werden wir weniger Bugs haben". Und da kommen dann so Old Farts aus dem Unterholz und sagen "ihr infantilisiert C-Entwickler, die sind nicht so doof wie ihr sie hier darstellt". Aber am Ende des Tages geben die Nummern dem eben Recht, lieber die Umgebung schon so zu machen, dass es leichter ist, alles richtig zu machen.
Ich erwähne das hier alles, weil sich rausstellt, dass djb natürlich mal wieder völlig Recht hatte. Natürlich gibt es Leute, die bei komplizierter Materie das falsch machen. Ich zitiere mal:
We evaluated 8 crypto libraries and their vulnerabilities to invalid curve attacks. We found out that the Bouncy Castle library and the Oracle JCE provider were vulnerable and we could extract private keys from the TLS servers running these libraries. The attacks are quite powerful. For Bouncy Castle, we needed about 3300 real server queries. For Oracle JCE, we needed about 17000 real server queries. We tested with the NIST-256 curve. The high number of requests needed for the Java servers results from a strange behaviour (bug?) in the Java EC computation.
Ich könnte jetzt ein paar Worte fallen lassen über Java und die ganzen Java-Apologeten, die mir seit Jahren Mails schreiben, dass mit Java alles besser ist als mit C. Aber ich lehne mich glaube ich lieber zurück und sage: Told you so. :-)Dass wir uns da richtig verstehen: Wer mit Java ECC-Krypto gemacht hat, der muss jetzt neue Keys generieren. Und natürlich gucken, dass er eine gefixte Library irgendwo her kriegt. Aber hey, Oracle fixt ja schn… never mind.
Besonders geil finde ich die Aufschlüsselung von dieser einen CNN-Webseite, weil das echt symptomatisch ist. Über 200 HTTP-Requests, 25 verschiedene Domains, und dann machen die am Ende spezielle Domains für ihre statischen Inhalte, um die übertragenen Cookies wegzuoptimieren und machen das Javascript unlesbar. Und vergeben kürzere Host- und Domainnamen. ALS OB DAS DAS PROBLEM WÄRE! Zum Vergleich: Ein Zugriff auf blog.fefe.de lädt eine Webseite und ein optionales CSS. Der Browser lädt ohne mein Zutun auch noch ein favicon und Apple lädt noch mal irgendeinen anderen Bullshit ungefragt, aber that's it. Alles von dem selben Server, drei von vier statisch und kommen aus dem Cache. Und der Brüller: Ich muss mir dann von Google Vorhaltungen machen lassen, mein CSS lieber nicht vorne zu laden, sondern per Javascript nachträglich, damit die Seite schneller rendert. Sonst gibt es Punktabzüge. So versifft ist dieses gammelige Schweineweb heutzutage!
Kann mir eigentlich mal jemand erklären, wieso die EU nicht bei diesem Cookie-Bullshit gleich mit ins Gesetz geschrieben hat, dass es möglich sein muss, die Funktionalität der Seite ohne Cookies abzurufen, und dass die beschissenen nervigen Cookieerlaubniseinhol-Einblendungen einer bestimmten Form genügen müssen, damit man sie mit einer einzelnen Adblocker-Rule wegmachen kann?
Oh und HÖRT ENDLICH AUF, MIR EURE NEWSLETTER ODER APPS ANDREHEN ZU WOLLEN!
The petition for a writ of certiorari is denied
.Und so endet Googles Versuch, das desaströse Gerichtsurteil zu revidieren, dass Oracle ein Copyright auf die APIs von Java beanspruchen kann. Oracle hatte sich diese Behauptung ausgedacht, um Google für ihr Dalvik zur Kasse zu bitten.
Update: Damit hat Oracle noch nicht gewonnen. Es besteht auch noch die Möglichkeit, dass Google die APIs unter Fair Use nachimplementieren durfte.
zu Deinem Post http://blog.fefe.de/?ts=abc8718c wäre es total super gewesen, wenn Du in dem Zug auf das eigentlich, viel gravierendere Problem hingewiesen hättest. Die betroffene Bibliothek AFNetwork ist ein Symptom für eine große Unsitte, nicht nur bei App-Entwicklern. AFNetwork ist eine externe Bibliothek für Netzwerk-Aufgaben. Es gibt nichts in AFNetwork, dass sich nicht mit wenigen Handgriffen mit Bordmitteln von iOS durchführen ließe. AFNetwork ist im Großen und Ganzen nur ein Wrapper für das URL Loading System. Es ist aber unter App-Entwicklern total hipp, per Cocoapods (externer Paketmanager) solche Libs einzubauen, weil … hey … ich benutze viele Libs mit wohlklingenden Namen … meine App muss gut und ich wichtig sein! AFNetwork wird häufig nur dazu benutzt, Certificate Pinning zu machen. Nativ sind das knapp 10 Zeilen Code:(Hervorhebungen aus dem Original zitiert)-(BOOL)checkCertificate:(NSURLAuthenticationChallenge *)challenge{ if ([[[challenge protectionSpace] authenticationMethod] isEqualToString: NSURLAuthenticationMethodServerTrust]) { SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust]; BOOL trustedCert = NO; NSData *theData; NSArray *theHashes = [NSArray arrayWithArray:[EAPConfig eapCloudHashes]]; if(serverTrust != NULL) { CFIndex theCertCount = SecTrustGetCertificateCount(serverTrust); for(CFIndex theCertIndex = 0; theCertIndex < theCertCount; theCertIndex++) { SecCertificateRef theCert = SecTrustGetCertificateAtIndex(serverTrust, theCertIndex); theData = (__bridge_transfer NSData *)SecCertificateCopyData(theCert); for (NSString *theHash in theHashes) { if([theHash caseInsensitiveCompare:[EAPConfig sha1HexDigest:theData]] == NSOrderedSame){ trustedCert = YES; break; } else { trustedCert = NO; } } } } }Das müsste man sich aber entweder googeln oder selbst aus der Doku zusammensuchen. Und dafür braucht man Hintergrundwissen über X509. Viel zu anstrengend. Da klebe ich mir lieber eine Lib mit tausenden Zeilen von Code in meine App und habe keinen blassen Schimmer, was die tut. Und schlauer werde ich damit auch nicht.Ich habe schon viele Apps auditiert. Die Anzahl der Apps, bei denen keine externen Libs für Trivialaufgaben verwendet werden, kann ich an einem Finger abzählen. SDL … my ass!
Von mir sei als zusätzlicher Hinweis noch erlaubt, dass in meiner Berufserfahrung fast alle Apps für mobile Endgeräte keine ordentliche Zertifikatsprüfung machen.
Update: Hier gibt es eine Übersicht der ganzen grottigen Java-APIs an der Stelle. Wenn wir schon dabei sind, in der Kanalisation herumzurühren …
Stellt euch meine Überraschung vor, als ich sah, dass da technisch was dran sein könnte!
Ich sollte mal aufhören, über sowas Witze zu machen. Die Realität hat mich ja auch beim verteilten Echtzeit-Java eingeholt. Ich würde normalerweise "kann man sich gar nicht ausdenken" sagen, aber ich habe mir das ja ausgedacht :) (Danke, Wladislaw)
In particular, a network attacker can send the certificate of any arbitrary website, and skip the rest of the protocol messages. A vulnerable JSSE client is then willing to accept the certificate and start exchanging unencrypted application data. In other words, the JSSE implementation of TLS has been providing virtually no security guarantee (no authentication, no integrity, no confidentiality) for the past several years.
Die Experten von Sun mal wieder! Wie war das noch? Java setzt man wegen der Sicherheit ein? Oh nein, warte, wegen der Performance!1!!Auch auf der Webseite: FREAK. Da geht es darum, dass offenbar diverse Webserver noch einen Export-Modus implementieren, aus Krypto-Uhrzeiten. Das ist ein Krypto-Downgrade, das man anscheinend auch triggern kann, dass die benutzt werden. Und dann wird ein so schwacher Schlüssel verwendet, dass man den für $50 knacken kann. Und das betraf anscheinend auch mal wieder OpenSSL.
Update: Achtet auch auf den Screenshot, wo sie den Angriff gegen NSA.gov fahren.
Update: Auf dem zweiten Platz: Javascript, ISO-8601 und Time Zones.
Highlights, die sich anzugucken lohnen, sind (völlig subjektiv, versteht sich):
Mit der Fnord-Show war ich dieses Jahr selber nicht so zufrieden. Wir hatten zu viele Folien. Das wussten wir auch vorher, aber wir hatten schon einen gehoben zweistelligen Prozentsatz an potentiellen Folien vorher weggeschmissen. Das werden wir nächstes Jahr anders machen. Dem Publikum hat es anscheinend trotzdem ganz gut gefallen, insofern will ich da jetzt mal nicht zu schlecht gelaunt sein. Aber zufrieden war ich nicht. Bin ich aber so gut wie nie nach meinen Vorträgen, wäre ja auch langweilig.
Den heutigen dritten Tag nutze ich hauptsächlich für Socializen und vielleicht das eine oder andere Interview. Für Erich Möchls Vortrag heute morgen konnte ich mich leider nicht rechtzeitig aus dem Bett quälen. Das will man sicher auf Video gesehen haben, er sprach über NSA-Niederlassungen in Österreich.
Meiner Einschätzung nach sollte man heute um 17:15 den DP5-Vortrag nicht verpassen, aber der leider parallel liegende Vortrag "What Ever Happened to Nuclear Weapons" ist mindestens genau so wichtig. Ich schau mal, wo ich einen guten Sitzplatz finde, und den anderen gucke ich dann auf Video. Um 18:30 würde ich den Thunderstrike-Vortrag gucken.
Um 21:15 gibt es in Saal 2 einen Vortrag über Nordkorea, der wird bestimmt voll :-)
Um 22:00 verspricht der Perl-Vortrag hochkarätig zu werden.
Heute morgen bin ich direkt von einem FAZ-Reporter zu Regin befragt worden, und habe das ein bisschen auf eine generelle Malware-Schiene umzubiegen versucht. Mal gucken, wie das wird. Danach wurde ich direkt von Tilo Jung abgefangen, der hier auf dem Congress herumrennt und Interviews führt. Wir haben uns vorher ein bisschen darüber unterhalten, was wir für ein gutes Interview halten, und ob der Interviewer da Positionen bekleiden sollte oder nur den Interviewpartner reden lassen sollte. Ich finde ja letzteres. Das optimale Interview ist eines, bei dem der Interviewer dem Interviewgast ein paar Stichworte hinlegt und ihm dann nicht dabei im Wege steht, wenn er sich um Kopf und Kragen redet. Tilo war kürzlich in Israel und Paälstina und hat dort mit allen Seiten Interviews geführt, und erzählte, dass er dann erst dafür kritisiert wurde, er würde ja nur die eine Seite zu Wort kommen lassen, und als er dann mit den anderen redete, wurde er dafür kritisiert, denen nicht ins Wort gefallen zu sein, als die da krude Parolen äußerten und sich zum Klops machten. Dieses Muster (jetzt nicht mit Israel und Palästina) habe ich schon häufiger beobachten können und finde es ausgesprochen deprimierend. Ich hatte da vor ein paar Wochen schonmal was zu gebloggt, und so fragte mich dann Tilo auch zu Ken Jebsen. Ich hoffe, ich habe mich da jetzt nicht zu sehr um Kopf und Kragen geredet *hust*. Soviel ist jedenfalls klar: Je weniger Struktur der Interviewer vorgibt, desto mehr Gelegenheiten zum Verplappern hat der Interviewpartner. Vorsicht bei Interviews mit Tilo! :-)
Die Idee ist, dass ein Prozess Seccomp anschalten kann, das ist dann auch nicht revidierbar, und ab dann kann er nur noch read, write, exit und sigreturn machen, und read und write geht auch nur auf vorher schon geöffnete Deskriptoren. An sich keine doofe Idee, mal abgesehen von dem Verkaufen-Aspekt, aber hat sich m.W. nie in der Realität für irgendwas durchsetzen können. Es war doch ein bisschen zu restriktiv. Das Original-Seccomp war von 2005.
Und wo wir gerade bei Geschichtsstündchen sind, erzähle ich euch auch mal was von BPF, dem Berkeley Packet Filter. Wenn man unter Unix Netzwerktraffic sniffen will, nimmt man im Allgemeinen libpcap, die das schön abstrahiert. Die kann auch filtern. Man kennt die Syntax von tcpdump:
# tcpdump -s0 host 10.0.0.1 and tcp and not port 22Wenn man so einen Filter hat, dann will man ja nicht, dass der Kernel einem alle Pakete gibt und man selber filtert, sondern man will dem Kernel das mitteilen und der gibt einem dann nur die passenden Pakete raus. Der Mechanismus dafür heißt BPF und ist aus Programmsicht ein Array mit Bytecode-Instruktionen drin. Die haben alle eine fixe Länge, insofern eher RISC als Bytecode, aber der "Instruktionssatz" ist wunderschön archaisch. Da gibt es zwei Register, den Akkumulator und das Index-Register. Es gibt Load und Store, ALU-Operationen und Vergleiche mit Sprüngen. Ganz krude Geschichte. Hier ist mal ein Stück Beispielcode:
struct bpf_insn BPFAcceptIPSource[] = {Wer da keine feuchten Finger kriegt, ist kein echter Hacker! Und ich meine jetzt nicht nur wegen des Endianness-Problems. :-)
// Check Ethernet Protocol Word At Offset 12
BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_IP, 0, 3),// Check Source IP address At Offset 26
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x01020304, 0, 1),//Source == 1.2.3.4BPF_STMT(BPF_RET+BPF_K, (UINT)-1), // Accept.
BPF_STMT(BPF_RET+BPF_K, 0 )
};
Jedenfalls, wieso ich das erwähne: Eines Tages hat sich ein Schlaufuchs überlegt, hey, wir haben seccomp im Kernel, und wir haben BPF im Kernel, wir könnten doch einfach BPF statt auf ein Netzwerkpaket auf eine wohldefinierte Struct loslassen, wo die Syscall-Daten drinstehen, und dann kann sich der Userspace seine Regeln selbst definieren, welche Syscalls erlaubt sein sollen und welche nicht. Und genau das gibt es jetzt seit ein paar Jahren (?), und es heißt "Seccomp Filter" oder "Seccomp Mode 2".
Ich blogge das hier, weil ich sowas seit vielen Jahren haben will. Die Leute dahinter sind von Google und arbeiten an Chrome OS. Mir ist das überhaupt nur aufgefallen, dass es das jetzt gibt, weil aktuelle Versionen von Portable OpenSSH das als Sandboxing-Mechanismus benutzen — sehr cool!
Heute ergab sich erstmals für mich eine schöne Gelegenheit, das selber mal einzusetzen. Ich arbeite gerade in einem Kundenprojekt an Monitoring. Eines der in dem Projekt entstandenen Tools macht grob das selbe wie "vmstat 1", aber gibt das Ergebnis als CGI als text/event-stream aus, und auf der anderen Seite sitzt dann eine Webseite mit ein bisschen Javascript, das aus den Events SVG-Visualisierungen erzeugt. Dieses vmstat-CGI-Tool ist ein perfekter Kandidat für Seccomp-Filter, fand ich. Es öffnet turnusmäßig ein paar Dateien unter /proc und /sys, macht ein bisschen malloc, ein bisschen gettimeofday, und ruft dann write auf, um die Daten rauszuschreiben. Syscalls wie fork, execve, socket, kill oder connect muss der nie aufrufen. Also sage ich dem Kernel: Wenn dieser Prozess das doch tut, dann kille ihn sofort.
Als ich darauf per Seccomp-Filter eine Selbstbeschränkung programmiert habe, fiel mir auf, dass die bisherigen Codestücke nur auf die Syscallnummer gucken, weil das alles war, was die Chrome-OS-Leute in die Dokumentation getan haben. Aber die Struct beinhaltet auch die Syscall-Argumente. Das ist nur für den Fall nützlich, wo das keine Pointer auf Strings sind, denn denen kann man nicht hinterherlaufen aus dem BPF-Code heraus, aber man kann z.B. sowas machen wie: open() geht nur mit O_RDONLY. Dafür habe ich keinen Code gefunden, daher habe ich ihn selber geschrieben, und dachte mir, das tu ich mal in mein Blog, damit es andere Leute finden können, die möglicherweise auch mal in dieses Problem laufen. Die grobe Codestruktur von so einem Seccomp-Filter-Programm ist:
Hier ist mein Code für open():
/* we need a special case for open. * we want open to succeed, but only if it's O_RDONLY */ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_open, 0, 4), /* it's open(2). Load second argument into accumulator (first * argument is filename, second is mode). We want to check if mode * is O_RDONLY and only allow the syscall through if it is. */ BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, args[1])), /* if it's O_RDONLY, skip 1 instruction */ /* slight complication: on 32-bit platforms we also pass O_LARGEFILE */ #if __WORDSIZE == 64 BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, O_RDONLY, 1, 0), #else BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, O_RDONLY|O_LARGEFILE, 1, 0), #endif /* "return SECCOMP_RET_KILL", tell seccomp to kill the process */ BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL), /* "return SECCOMP_RET_ALLOW", tell seccomp to allow the syscall */ BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW),Möge er von Hackern gefunden werden, die dieses Problem lösen möchten :-)
Fakt ist: OpenSSL ist nicht in C, weil C so geil ist. OpenSSL ist in C, weil das Ziel ist, dass das von jeder Programmiersprache aus benutzbar ist. Und alle können sie C-Code aufrufen.
Fakt ist auch: Das ist ein komplexes Problem, SSL richtig zu implementieren. Und wenn man dann noch den Anspruch hat, alle Obskuro-Plattformen und alle Extensions zu unterstützen, dann ist das Ergebnis halt Scheiße. Wenn man sich anguckt, was OpenBSD da gerade mit der flammenden Machete alles aus OpenSSL herausoperiert, da wird einem ganz anders. Unter anderem Support für Big Endian x86_64 Plattformen. Hat jemals schon mal jemand von sowas gehört? Nicht? Wie ist es mit VMS? EBCDIC-Support? Support für "ungerade" Wortlängen? You name it, OpenSSL supports it.
Dieses Java-Ding ist übrigens auch in einer Dissertation von einem der Beteiligten drin. Die kann man hier lesen (208 Seiten). (Danke, Sebastian)
Das ist ja schlimm genug, wenn die Webseiten alle am Rand irgendwelchen Bullshit einblenden. Wir haben daraufhin alle unsere Fenster breiter gemacht und setzen jetzt Breitbild-Monitore ein, damit wir trotzdem noch genug Text vor den Augen haben. Eine absolute Zumutung!
Und jetzt fehlt auch noch oben 20%? Weil irgendein Designer keinen Hydranten gefunden hat und dann halt auf die Webseite pinkeln musste?
Nicht mit mir. Hoffentlich wird das bald Adblock-Feature, diesen Mist transparent wegzufiltern. Zum Kotzen!
Naja, kein Problem, dachte ich mir, für sowas gibt es ja eine Rescue-Umgebung. Wollte die klicken — der Knopf fehlte im Webinterface. Nanu? Ticket aufgemacht. Knopf da. Knopf gedrückt — Server platt, kein Rescue kommt hoch. Ticket aufgemacht. Pause. Antwort: Wir haben da mal ne Intel e100 NIC eingebaut, damit das Rescue hochkommt, und die Onboard-NIC ausgemacht. Musst du dann in deinem Debian fixen.
Die Meldung sah ich aber erst, nachdem ich mein Problem gefixt hatte, und umgebootet hatte, und da kam dann das System zwar hoch, aber ohne Netzwerk.
Also zurück ins Rescue, aber das kam dann auch nicht mehr hoch. Ticket aufgemacht. Die haben irgendwas gebastelt, damit kam das wieder hoch.
Oh, erwähnte ich, dass das Rescue-System ohne mdadm kam? Ich hab seit gefühlt 10 Jahren kein Rescue-System mehr gebraucht. Stellt sich raus, dass sowas heutzutage ein richtiges Debian ist, wo man konfigurieren kann, inklusive apt-get install mdadm. Allerdings will er dafür über 50 MB nachladen, also hab ich lieber ein statisches dietlibc-mdadm hochgeladen und benutzt.
Das Problem, so stellte sich raus, war: Die e100-Netzwerkkarte möchte gerne Firmware nachladen, die nicht da war. Ich trag also das Repository ein und rufe apt-get auf … da baut irgendein Debian-Automatismus eine initrd neu und die ist nicht mehr bootfähig.
Nun hat mir der Hoster freundlicherweise ein KVM zur Verfügung gestellt, sonst hätte ich den Aspekt gar nicht sehen können. Aber mit der neuen initrd fand der Kernel sein root-fd nicht und panicte.
Die nächsten Schritte waren: Debian dist-upgrade (das war noch ein squeeze), grub erneuern, grub stirbt mit symbol grub_divmod64_full not found. Bekanntes Problem, offenbar, aber die Lösungen funktionierten alle nicht. purge, reinstall, deinstall, config fummel, reinstall, auf die zweite platte auch installieren, half alles nichts.
In der Mitte hatte ich noch versucht, einen eigenen Kernel zu bauen, der auf der Hardware laufen würde, aber der tat es nicht und auf dem 80x25-Screen der KVM sah ich dann auch nur die letzten statischen Zeilen eines generischen Panic-Stackdumps und konnte nicht hochscrollen. Aus irgendeinem Grund kamen Tastatureingaben nicht an über die KVM. Ich tippe auf ein Java-Problem, aber am Ende — who cares.
Der einzige Ausweg war am Ende, dass ich einen eigenen grub 2.02 beta 2 aus den Sourcen kompiliert habe. Der warf zwar auch noch lustige Fehlermeldungen, aber hat dann am Ende den Kernel doch gebootet.
So, jetzt hab ich zwar immer noch einen veralteten gcc und eine veraltete glibc, aber immerhin ist die Kiste wieder oben. Seufz.
Update: Warum war da so ein antikes Debian? Weil alle von außen erreichbaren Dienste eh von mir und nicht von Debian sind.
Update: Es gibt einen xkcd dazu! Großartig, den kannte ich noch gar nicht :-)
Update: Das SSL-Zertifikat ist dann auch mal neu, wegen des OpenSSL-Bugs gerade.
Nachdem Oracle Ende März mitteilte, man arbeite noch an Regeln für den Umgang mit Sicherheitslücken in der Cloud und könne keine genaue Zeitspanne für eine Auslieferung von Patches nennen, hatte Gowdiak sich entschieden, die Details der Lücken zu veröffentlichen.Wait, what?! Ich hoffe, bei dem Sicherheitsniveau bezahlt dann Oracle die Kunden für die Betatest-Dienstleistung und nicht umgekehrt. Was für eine Frechheit!
Hey Okcupid, wisst ihr, wofür Brendan Eich noch verantwortlich ist? Der hat Javascript erfunden. Ihr solltet nicht andere zum Firefox-Boykott aufrufen, sondern ihr solltet bei euch selbst anfangen und eure Webseite von Javascript reinigen.
Oh, wollt ihr nicht? Na sowas.
Immer wenn ich dachte, mein Eindruck der Internet-Empöreria könnte nicht noch weiter sinken, passiert sowas.
Ist dieser Brendan Eich ein sympathischer Zeitgenosse? Angesichts dieser Prop8-Geschichte würde ich sagen: Sicher nicht. Aber wenn man vergleicht, wofür der verantwortlich zeichnet, und was sagen wir Google oder Microsoft so alles an Dreck am Stecken hat, …
Übrigens, am Rande: Bei US-Firmen gibt es häufig Donation-Programme. Da hat die Firma dann ein großzügiges Budget, und wenn ein Mitarbeiter an eine wohltätige Gruppe spendet, dann legt der Arbeitgeber nochmal so viel oben drauf. Wenn man also danach geht, wieviel Kohle von US-Firmen an widerliche NGOs geht, dann müssten die alle notgeschlachtet werden. Denn welche Firma hat denn bitte nicht einen einzigen Mitarbeiter, dessen Einstellungen zumindest partiell widerwärtig wären?
Übrigens: Das mit Javascript abschalten halte ich für eine gute Idee, völlig unabhängig davon, aus welchen Gründen man das tut.
Oh und noch einen: Vielleicht hat Brendon ja seit dem dazu gelernt und seine Meinung geändert? Und was geht Okcupid eigentlich an, welche Meinungen der Typ privat vertritt? Ein Kreuzritter oder Missionar scheint er ja nicht zu sein, im Gegensatz zu den Social Justice Warriors, die ihn jetzt zu kreuzigen versuchen.
Diese Art Bug ist leider bei Apps üblich. (Danke, Noel)
Und seine Schlussfolgerung, dass Javascript-im-Browser-Crypto gar nicht so schlecht aussieht im Vergleich, ist natürlich auch Bullshit. Denn wir haben ja keine vertrauenswürdige Quelle für den Browser. Und selbst wenn wir den hätten, heißt das ja nicht, dass die Browser-Entwickler vertrauenswürdig sind.
Immerhin:
Bitte behandeln Sie Ihre Bewerbung diskret.Soll noch mal jemand sagen, niemand habe von der NSA-Affäre was gelernt! (Danke, Florian)[…]
Bitte senden Sie keine Einschreibebriefe oder Päckchen und bewerben Sie sich nicht per E-Mail.
Erschwerend hinzu kam, dass die Seite dann ziemlich sofort unter der Last zusammenbrach (warum eigentlich?).
Die Fakten liegen immer noch nicht auf dem Tisch, aber so langsam scheint halbwegs Konsens zu bestehen, dass da irgendein Ermittlungsverfahren gegen irgendjemanden läuft, weil sie diese Daten gefunden haben. Daher wollen sie nicht sagen, woher sie die haben.
Ich stelle mir das so vor. Das BSI wird von einer Firma oder Behörde angerufen, weil die ein Botnetz bei sich gefunden haben. Die kommen und finden beim Stochern diese Daten. Was tun? Nun könnte man natürlich die Email-Adressen alle anschreiben, aber wer glaubt denn seit dem Bundestrojaner noch Emails von Behörden?
Diese Webseite jetzt ist aus meiner Sicht Ass Covering. Da geht es nicht darum, Leuten zu helfen. Denn Leute, die sich um ihre Sicherheit genug Sorgen machen, dass sie von der Existenz so einer Webseite erfahren, und dann da hingehen und damit interagieren, sind vermutlich eh nicht betroffen. Ich verwende z.B. eine eigene Email-Adresse pro Webseite, die meine Email-Adresse haben will — und natürlich jeweils ein anderes Passwort. Soll ich die jetzt alle beim BSI eingeben? Ich mache das ursprünglich, um zu erkennen, woher Spammer Email-Adressen haben, aber es hilft natürlich auch prima gegen solche Account-Datenbanken. Da ist dann jeweils nur der eine Account gehackt, das Passwort funktioniert nirgendwo anders.
Dazu dann das Verfahren, das die das wählen. Man kriegt die Antwort nicht direkt sondern man kriegt einen Code und später eine Email, wenn man betroffen war. Wenn man nicht betroffen war, kriegt man keine Email. Das BSI scheint zu glauben, dass davon auch die Umkehrung gilt: Wer keine Email kriegt, war nicht betroffen. Aber das ist natürlich Blödsinn, Emails können verloren gehen, im Spamfolder landen, versehentlich gelöscht werden, etc. Oder wenn die Credentials gehackt waren und auch für den Email-Provider gelten, kann jemand mit den Daten natürlich auch die Email vom BSI löschen, bevor das Opfer sie sieht. Und die Email ist im Gegensatz zu der SSL-Verbindung, über die man die Daten einschickt, nicht verschlüsselt und signiert, d.h. wenn da eine Mail kommt, gibt es keinen Grund, der zu trauen. Den Code hätte auch jemand raten können. Kurz: Die Aktion ist voll für den Fuß. Das BSI tut das daher aus meiner Sicht nur, weil sie glauben, irgend etwas tun zu müssen.
Besonders absurd mutet die Meldung von heute an, dass das BSI seit Dezember auf den Daten saß, aber so lange brauchte, weil sie wirklich sicher gehen wollte, dass ihre Webseite den Ansturm aushalten würde. Was sie dann nicht tat.
Einmal mit Profis arbeiten!
Update: Die Webseite heißt übrigens www.sicherheitstest.bsi.de und liegt bei Strato. Ohne jetzt irgendwie Strato bashen zu wollen, aber … srsly, BSI? Das konntet ihr nicht selber hosten? So sieht das aus, wenn jemand per DNS-Hijacking Domains umlenkt. Übrigens liegt die BSI-Webseite nicht nur in einem anderen Netz (das dem BSI gehört), sondern sie benutzt auch eine andere Domain. Viel mehr Indizien für "hier riecht was schlecht, hier geb ich lieber keine Daten ein" hätte man auf die Schnelle gar nicht ankreuzen können. Oh, doch, eine noch. Das SSL-Zertifikat kommt bei der BSI-Homepage von Trustcenter, und beim Sicherheitstest von T-Systems. NA SUPER. Vertrauenswürdiger geht es ja kaum!1!!
Update: Anscheinend soll die Rück-Email PGP-signiert sein. Wozu brauchen sie dann den Code, wenn sie PGP haben? Weil niemand einen Grund hat, einem angeblichen BSI-Key zu vertrauen, der vor sechs Wochen erzeugt wurde?
Update: Wo wir gerade bei T-Systems waren… guckt mal, was da auskommentiert im HTML steht:
<div style="padding-top:20px;padding-bottom:20px;">Und hier ist das Bild. Ja, das hätte ich auch lieber auskommentiert an deren Stelle *schenkelklopf* :-)
<!--<img src="/static/images/vl_powered_by_T.png" />-->
Update: Ah, sie haben auch ihren öffentlichen PGP-Schlüssel auf ihrer HTTP-Webseite. Immerhin. Ich sehe trotzdem nicht, wieso sie da überhaupt Email machen und nicht direkt per Web antworten. Das schafft doch nur zusätzliche Metadaten.
Update: Der PGP-Schlüssel ist vom 9.12., das SSL-Zertifikat ist vom 17.12. Da kann man mit ein bisschen Fantasie die Denkprozesse verfolgen.
Hey, Cheffe, wir haben hier echt viele Email-Adressen, was machen wir jetzt?
Wir schreiben denen ne Email!
Ja, aber Cheffe, seit dem BKA-Trojaner glaubt unseren Emails doch keiner mehr!
Dann signieren wir die halt mit PGP!
OK, Cheffe, hab nen Schlüssel gemacht, aber wieso sollten die Leute dem denn vertrauen? Ich hätte Frau Merkel gebeten, uns den zu signieren, aber die hat kein PGP!
Na gut, dann machen wir dazu ne Pressemitteilung und machen einen Webserver auf und da tun wir den Schlüssel hin!
Aber Cheffe, unser Webserver hält doch nichts aus, wir benutzen doch Java!
Ja, äh, hmm, na löse das halt irgendwie!1!!
OK, Cheffe, ich hab jetzt bei Strato nen Webserver geklickt, aber wir brauchen auch SSL, sonst lachen die Leute doch wieder über uns!
Hmm, also über unseren normalen Amtsweg braucht das 4 Monate. Frag mal Strato, ob die nicht auch SSL mit verkaufen können!
OK, Cheffe, hab ich gemacht, alles in Ordnung!1!!
Update: In den Mails an Betroffene steht, dass die Daten bei einem Botnet gefunden wurden. Jemand hat mir ein Zitat aus so einer Mail geschickt.
Update: Der Code steht bei den PGP-Mails übrigens im Subject, also im nicht signierten Header-Bereich.
Nun, Oracle hat gerade den kommerziellen Support für Glassfish eingestellt. Das passt ja mal wieder großartig. Sackgassen-Technologie für ein Sackgassen-Projekt. (Danke, Andreas)
The Pentagon pumped billions of dollars into contractors' bank accounts on the eve of the U.S. government's shutdown that saw 400,000 Defense Department employees furloughed.
Achtung: Nervige Javascript-Scheiße.
Java hat uns den RAM billig gemacht. Computerspiele haben uns Grafikkarten schnell und billig gemacht. Pornographie hat uns Internet schnell und billig gemacht. Und Antiviren machen uns die Rechner schnell und billig. Ich saß da an einem Arbeitsplatzrechner, der vom Kunden zur Verfügung gestellt wurde. Da lief natürlich auch ein Antivirus drauf. Und ich habe da, weil ich ja nichts neues starte oder runterlade, die ganzen Komponenten deaktiviert, die normalerweise so nebenbei mitlaufen, und alle Dateien scannen, die von irgendeinem Prozess geöffnet werden. Stellt sich raus: DAS war es, wieso Office bei mir so flutschte. Bei meinem Nachbarn schnarchte das wie gewohnt vor sich hin. Der hatte das nicht ausgeschaltet.
In diesem Sinne: Antiviren sind natürlich immer noch Schlangenöl und machen die Menschen unsicherer statt sicherer, aber wir sollten ihnen trotzdem dankbar sein, weil sie dafür gesorgt haben, dass andere Software schneller wird, weil es sonst überhaupt nicht ertragbar wäre.
Ich würde sogar so weit gehen, für Linux Antiviren zu fordern. Das ist ein echter Wettbewerbsnachteil, den Linux-Softwareentwicklung da hat. Die Entwickler sehen keinen Optimierungsbedarf, weil das bei ihnen flutscht. Wenn man nicht gerade Old School seine Dokumente mit TeX oder troff schreibt, ist der Performance-Zustand der Office-Suiten unter Unix geradezu beschämend. Und die ganzen Sprallos von Freedesktop und co kommen ja auch jedes Jahr mit weiteren Indirektionsschichten mit XML und endloser Redundanz, weil sie es können! Wenn da noch ein paar Antiviren das System auf C64-Niveau verlangsamen würden, dann würden diese Leute effizienteren Code schreiben.
Maintaining the security-worthiness of Java is Oracle’s priority
Maintaining? Wie wäre es mal mit Improving?
Ich würde da gar nicht auf das BSI zeigen wollen. Der CCC ist seit Jahren eher unterzeugt von der Software. Und bei mir hört die Beweisführung schon bei "ist eine Java-Anwendung" auf. Java!! (Danke, Marcus)
Und im Übrigen führen wir jetzt Code Signing ein. Ihr wisst schon, das was schon bei Microsoft nicht funktioniert hat. Das machen wir jetzt, nachdem die Kryptokalypse jedes Restvertrauen in CAs weggefegt hat. Post Diginotar. Money Quote:
Rizvi noted that the signing requirement will improve the security of Java users in a number of ways. For one, it will create some sense of accountability with Java code developers.
Öh, … sense of accountability? BWAHAHAHAHA! Wartet, wird noch besser!"Malicious attackers will be required to purchase a code-signing certificate," he said. "Note that before issuing a code-signing certificate, certificate authorities generally perform certain checks to ensure the identity of the person applying for the certificates."
Oho, aha, soso. Im Allgemeinen würde man denken, dass CAs Dinge prüfen, sagt er. Na dann ist ja alles gut. Immerhin ist Oracle da mehr als zurückhaltend und lässt nicht einfach jeden signen. Nur die CAs, die bei Java als vertrauenswürdig mitgeliefert sind. (Also in der Praxis… alle)Und haben sie auch Revocation Checking? Klar! *hust* Wenn der User es manuell angeschaltet hat!1!! Aber das wird dann im Juni Default. Warum erst im Juni? Äh, guck mal da hinten, ein dreiköpfiger Affe!
Aber das Hammer-Zitat überhaupt ist das hier:
"At Oracle, 'every developer is a security rifleman' and additional security expertise is also found with security-focused developers, architects and managers for the purpose of enforcing security policies and dealing with security-sensitive components," Rizvi said.
Soso, "security riflemen". Na dann. m( (Danke, Aaron)
JRE Expiration DateThe expiration date for JRE 7u21 is 07/18/2013.
Ja, richtig gesehen! Software kommt jetzt mit einem Haltbarkeitsdatum! Wie geil ist DAS denn?! Mwahahahaha
Was für eine grandiose Idee. Full Circle.
Der Lacher ist ja, dass die Leute alle lieber mit ihren Mobilgeräten webklicken gerade, weil man da nicht dauernd mit Werbung penetriert wird. Auf den Desktop-Sites wird man ja nur noch mit Interstitionals und Javascript-Popups mit Newsletter-Abo- und Facebook-Like und Paywall-Spenden-Aufforderungen bombardiert. Klar hat da keiner Bock drauf, daher klicken die alle mobil. Und dann wundern sich die Sites, dass immer mehr Leute mobil klicken!1!!
Und jetzt klicken die Leute halt auch auf ihrem Desktop "mobil". Und die ganzen ranzigen Webseiten werden reagieren, indem sie auch die Mobilversionen unbenutzbar machen. Und dann werden sie sich alle wundern, wieso jetzt gar keiner mehr bei ihnen klickt.
Und lustigerweise sind die alle selber Schuld. Früher gab es ein Banner oben. Das war es. Ein Banner. Das hat die ganze Site finanziert. Aber die mussten ja alle gierig werden und noch ein Skyscraper-Banner an die Seite machen, und noch eines in die Mitte, und ihre Artikel auf 15 Seiten aufteilen, damit überall noch mehr Werbung hingetan werden kann, und dann noch an die andere Seite eine Werbung, dann noch unten eine Werbung drunter, dann noch ein Interstitional davor — natürlich zahlt dann kein Werbetreibender mehr den vollen Preis pro Banner. Das ist ja völlig lächerlich. Die haben sich selbst den Werbemarkt kaputtgemacht mit ihrer Gier. Und ihre Leser vergrault oder in die Arme von Adblockern getrieben. Aber das ist ja ein Kampf, bei dem es auf Dauer nur Verlierer gibt. Ich glaube ja, wenn die die Anzahl der Werbebanner auf 1-2 reduzieren, die ganze überflüssige Navigationsscheiße wegmachen, und den Social Networking Bullshit rausnehmen würden, dann würden die Leute wieder gerne auch auf dem Desktop klicken, und sie würden pro Werbebanner auch wieder richtige Preise nehmen können.
Und dann kommt Per Bothner von Oracle und postet diese Mail hier. Per Bothner, Per Bothner, hat vielleicht schonmal jemand gehört, den Namen. Weil der Name beim Lesen der Header oder des Codes für die libg++ von GNU über den Schirm scrollt. Ein Urgestein von GNU, hat u.a. auch für Cygnus gcj gebaut. Das war damals der Versuch, gcc Java kompilieren zu lassen. Konnte leider nie aufschließen. Der arbeitet jetzt bei Oracle.
Aber der Brüller ist, dass der jetzt im Namen von Oracle dagegen argumentiert, V8 aus Webkit rauszuschmeißen, weil Oracle ja die Abstraktionen auch benutzt, um ihre eigene Javascript-Implementation (Oracle hat eine Javascript-Implementation!) namens Nashorn (benannt nach einer bedrohten Tierart) in Webkit reinzubrechstangen. Mehr Popcorn!
Facebook tut da Dinge, da kriegt man schlechte Träume von. Ich fasse mal kurz zusammen: Ihre App ist nach modernen Software-Engineering-Grundlagen entwickelt und enthält Tonnen von sinnlosen Wrapper-Methoden. Dalvik macht da irgendein Processing beim Laden der Apps, und benutzt dafür einen statischen Puffer, den die Facebook-App platzen lässt, weil sie zu viele Methoden hat. Also tun sie, was jeder an ihrer Stelle getan hätte!1!!
Instead, we needed to inject our secondary dex files directly into the system class loader. This isn't normally possible, but we examined the Android source code and used Java reflection to directly modify some of its internal structures. We were certainly glad and grateful that Android is open source — otherwise, this change wouldn't have been possible.
*göbel*That's when we had the idea of using a JNI extension to replace the existing buffer with a larger one.
Oh und wer glaubt, sowas sei ein Einzelfall… hier ist eine heitere Microsoft-Anekdote zu Adobe und Wordperfect. (Danke, Tobias)
Mit bis zu 20.000 Klicks pro Stunde sei das System allerdings überfordert gewesen und habe wieder offline gestellt werden müssen, sagte ein Sprecher des federführend agierenden Bundesinnenministeriums gegenüber tagesschau.de.20000 Klicks pro Stunde, ja? Wir rechnen das mal kurz runter. 20000 / 60 sind 333 Klicks pro Minute. Das sind 5,5 Klicks pro Sekunde. OH MEIN GOTT! FÜNF KLICKS PRO SEKUNDE!!! Also mit SO VIEL ANSTURM konnte ja wohl NIEMAND rechnen!1!!
Nebenan im Von Leitner-Institut für verteiltes Echtzeit-Java knallen die Korken, dass sich moderne Gewinner-Technologien endlich auf breiter Front durchsetzen!1!!
Ich persönlich freue mich auch, dass Apple nicht über eine Lücke in ihre eigenen Mist angegriffen wurde, sondern über eine Java-Lücke. So können sich jetzt Apple und Oracle im Kreis bezichtigen. Da kann es nur Gewinner geben!
Dieser Angriff hat noch andere Player betroffen, nicht nur Apple.
Oh und falls sich jemand wunderte: Für das Java-Problem gab es schon einen Patch. Aber halt nicht von Apple. Das hätte man wohl manuell installieren sollen. Und jetzt shippt auch Apple einen Patch, aber der spielt nicht das Update ein sondern macht Java im Browser aus. Das ist zwar generell empfehlenswert, aber … WTF? Wenn man einen Patch-Distributions-Mechanismus hat und es einen Patch gibt, dann verteilt man damit doch den Patch und keinen Aus-Knopf?!
Wenn ich sowas sehe, muss ich mich schon fragen, wieso solche Leute nicht gleich Java programmieren. Das ist jetzt auch nicht gerade eine monströs umfangreiche Anwendung, das werden am Ende so — wenns hochkommt — 100-200 Zeilen C++-Code sein.
Und so wird ja heutzutage Software entwickelt. Man schludert ein paar Zeilen hin, und die gesamte Funktionalität kommt aus irgendwelchen 3rd-Party-Libraries. Diese ganze Komplexität, die man sich da in seine Programme reinzieht, überblickt ja schon lange niemand mehr. Die Leute haben ja nicht mal ein Gefühl dafür, wieviel Code in dem Programm am Ende tatsächlich von ihnen kommt. In diesem Programm hier sind das um die 1%, eher noch weniger.
Ein Programm dieses Funktionsumfanges hätte man auch in 10k Binary unterbringen können.
Update: Ich sollte dazu sagen, dass das Binary nicht statisch gelinkt ist. libstdc++ kommt dynamisch dazu.
Ich finde ja, wenn Apple sich wie ein schlecht erzogenes Kleinkind verhält, dann sollte der Richter einmal übers Knie legen des Vorstandes verhängen. Oder von mir aus kein Taschengeld mehr. Internetverbot vielleicht?
Update: Das wird per Javascript immer so skaliert, dass das Kleingedruckte nur durch Runterscrollen erreichbar ist.
Überhaupt, "von oben nach unten" für zumachen, voll einleuchtend. Man zieht die App zum Dock. Äh, da wo bei Apple das Dock ist. Windows 8 hat kein Dock. Da war wohl der Aufseher der Azubis gerade pinkeln.
Oder der subtile Unterschied zwischen "Schlenker von links" für "Apps nebeneinander" und "Kreis von links" für "Task-Übersicht". Ich kann mir die gute Laune bildlich vorstellen, die sich da in der Praxis einstellen wird.
Schade nur, dass die Notebooks jetzt teurer werden, weil die Deppen alle Tablets kaufen. Die Deppen mit ihrem Java-Flash-Monsterbloat-Speicherbedarf haben uns seit Jahren teure Hardware erschwinglich gehalten. Die Zeiten sind dann wohl vorbei, jetzt geht es ja eh niemandem mehr ums Arbeiten, das ist nur noch Statussymbol/Lifestyle-Bullshit, so ein Tablet. Wie mir neulich jemand erklärte: ein Alphawellen-Gerät wie der Fernseher. Zum Rezipieren, nicht zum Kommunizieren oder Nachdenken.
Zweitens bieten wir das dieses Mal auch als 48 kbit Opus an. Die Browser-Integration funktioniert im Moment nur in Firefox 15 und neuer, und die Selektion innerhalb des Audio-Tags funktioniert nicht, und außerdem haben auch noch Ogg Vorbis und Ogg Opus den gleichen MIME-Type, daher sah ich mich gezwungen, eine stinkende Javascript-Browserweiche für Firefox 15 einzubauen. Ich hoffe das fällt jetzt nicht bei irgendwelchen anderen Browsers tot um. Alle anderen sollten weiterhin Vorbis bzw MP3 abspielen. Seufz.
Viel Spaß beim Hören!
Über den Angriff auf ein Java-Applet können Zugriffe so umgeleitet werden, dass der Nutzer auf der falschen Webseite unterschreibt.Vorsicht: ohne Adblocker ist die Site unerträglich, drückt einem gleich zwei Umfragen direkt ins Gesicht. (Danke, Gerry)
Und was entdeckte der Hardwarehacker da? Dass das aus schlechten Komponenten inkompetent zusammengebastelt war. Das war per WLAN fernsteuerbar, und das WLAN war offen und unverschlüsselt. Aber das macht nichts, weil das Gerät eh nie funktioniert hat. Die Firma ist pleite gegangen, daher kam das überhaupt auf Ebay.
Die Details sind jedenfalls echt super. Beispiel:
There was no password on the gear that was supposed to be outfitted on the robot, so he was able to type “root,” and get right in. Then he checked out the operator’s equipment, which ran a Java app on Windows XP. He decompiled it, and found a string in the code: “IONPaysBills=true.”
Industriestandard! Sie haben immerhin zwei Prototypen gebaut und nach Afghanistan verschifft. Bei dem einen war der Ausschalter kaputt und das Gerät schaltete auf Dauerblitz. Der andere kam vom Weg ab und rutschte einen Berg hinunter. (Danke, Benjamin)
Bitcoin hat ja von Anfang an den schlechten Geruch gehabt, ein Verfahren zur Umwandlung von Umweltverschmutzung und Energieverschwendung zu wertlosen Zahlenkolonnen zu sein, aber wenigstens haben die Leute die Energieverschwendung selber bezahlt. Das jetzt wildfremden Internetbenutzern aufzudrücken, das ist ja wohl an Frechheit kaum zu überbieten.
Der Code ist über das Web einbindbar, die Domain ist bitp.it. Websperren bringen hier natürlich nichts, die Skripte kann man sich ja auch kopieren als Webseitenbetreiber. Wenn jedenfalls bei eurem Mobiltelefon oder Laptop vorzeitig der Akku alle ist, nur weil ihr z.B. diesen Symbol-nach-LaTeX benutzt habt, dann wisst ihr ab jetzt, dass es Bitcoin war.
Schlimm genug, wie wir Menschen uns gegenseitig Werbung antun. Jetzt auch noch parasitäre Umweltverschmutzung und Batterieentleerung?! Und die Armleuchter in den Foren debattieren schon, wie sie vermeiden können, von Antivirus-Snakeoil als Malware klassifiziert zu werden. Man kann gar nicht so viel fressen, wie man kotzen möchte. (Danke, Giuliano)
Sein neuester Streich: Ein x86-Emulator in Javascript. Im Emulator läuft ein Linux-Kernel, und das ganze emuliert einen Ranz-x86 mit Ramdisk und Serialport für die Ausgaben. Spannenderweise performt das in Firefox doppelt so gut wie in Chrome schreibt er. Auf jedenfall mal wieder ein echter Fabrice Bellard-Kracher.
Ich habe einen Haufen Mails gekriegt, viele mit Screenshot und/oder Text-Dump. Aber am lustigsten waren die gehässigen Java-User, die mir "erwischt!!1!"-Mails schrieben. Einer war besonders schön, der wollte sarkastisch sein in seiner Kritik und schrieb, dafür dass meine Software ja angeblich in C geschrieben sei, hätte ich mir bei der Fehlermeldung aber echt Mühe gegeben. Stimmt! Und es tut gut, dass das auch gewürdigt wird!
TL;DR: nein, hier gibt es kein Java, war ein Aprilscherz, weitergehen, gibt nichts zu sehen. :-)
Die BESTEN der BESTEN der BESTEN, SIR!
Wenn man davon den AKW-Teil zusammenzählt, kommt man auf 20441 MW.
Wenn man bei der tatsächlichen Produktion nachguckt (gibt es leider nur für die Erzeugungseinheiten >= 100 MW), kommt man für die letzten 24h auf einen Peak um die 55 GW für den 16.3.2011 zwischen 11:00 und 12:00. Die Anlagen unter 100 MW sind häufig so Solar, Windenergie, Müllverbrennungsanlage, und einige der größeren sind Saisonspeicher, d.h. die produzieren dann nicht Maximalkapazität das ganze Jahr über. Aber dennoch. Die produzieren deutlich weniger als sie Kapazität hätten. Den 83 GW Kapazität mit Atom stehen 63 GW Kapazität ohne Atom und 55 GW Verbrauch gegenüber. Alles nur in der Tranche über 100 MW. Ich gehe mal davon aus, dass das darunter vollständig verbraucht wird.
Falls doch jemand unbedingt klicken will (ich warne euch, da sterbt ihr einen langsamen, qualvollen Tod beim warten auf diese Flashhöllen-Webseite, deren Langsamkeit nur mit dem breitflächigen Einsatz von Java zu erklären ist!), dann ist das Google-Stichwort die Strombörse Leipzig.
Nun, äh, was soll ich sagen… kein großer Verlust :-)
Update: War ne Heise-Ente, die GPL-Version von MySQL wird weiterhin InnoDB haben.
Wobei, wenn das für Oracle genau so endet wie für SCO, dann will ich nichts gesagt haben. Das wäre mal ein wünschenswerter Ausgang.
R;13;Hallands län;80;Halmstad;01;Halmstads västra valkrets;0904;Söndrum 4;pwn DROP TABLE VALJ;1Wer den Kontext nicht kennt: das ist ein bekannter xkcd-Strip. Wer diesen Eintrag nicht versteht: das ist ein Insider-Gag für IT-Security-Leute. Macht euch nichts draus! (Danke, Hannes)
Wir haben viel Feedback gekriegt, dass ihr mit dem Audio nicht einverstanden wart von Folge 3. Der Hall war nervig, das sehen wir ein. Zu unserer Verteidigung sei gesagt, dass die Folge mit Kopfhörern deutlich besser verständlich ist als mit Lautsprechern. Wir geloben Besserung.
During the integration meetings between Sun and Oracle where we were being grilled about the patent situation between Sun and Google, we could see the Oracle lawyer's eyes sparkle. Filing patent suits was never in Sun's genetic code.
Bei der Gelegenheit kommt dann auch raus, dass die häufig gescholtenen Microsoft-Lizenzbedingungen für C# weniger restriktiv sind als die von Sun für Java. Was für ein Lacher, wenn man sich überlegt, wie die Java-Fanbois immer mit Offenheit und Freiheit argumentieren. Auf der anderen Seite ist dieser Beitrag von Miguel de Icaza, dem Typen hinter Mono (dem Open Source C#).
Oracle reiht sich damit in die Ganovengalerie der Patenttrolle ein, die andere Firmen kaufen, um dann mit deren Patenten vor Gericht andere zu erpressen.
Wenn man sich überlegt, wie viele andere Erfolgsgeschichten von Java einem einfallen, die begründen, wieso Java überhaupt noch Erwähnung findet heute, … nicht dass Dalvik jetzt ein großartiger Erfolg wäre, aber immerhin.
<img src="logo.svg">und alles wird gut, aber weit gefehlt! Stellt sich raus, dass Chrome das kann, Firefox aber nicht. Firefox erwartet ein object-Tag. Was für ein Hirnriss!
Aber das ist noch nicht alles. Stellt sich raus, dass Safari SVG kann (ist ja auch Webkit wie Chrome, damit war zu rechnen), aber NICHT auf dem Iphone oder Ipad. WTF?! Gerade das Ipad haben sie doch als Browser-Device verkauft!
An der Safari-Version kann man es nicht festmachen. Die Plattformstrings werden schnell unübersichtlich, es gibt da auch noch irgendein webtv-Zeugs, kenn ich alles nicht. Also ist da jetzt eine Javascript-Browsererkennung drin. Wie furchtbar ist DAS denn alles?! Ich dachte, die Zeiten seien vorbei im Web?
Also aus meiner Sicht: Schande über Apple und Firefox.
Und zur Krönung des Tages kommt hier auch noch einer an, der benutzt Epiphany mit Webkit, und das gibt sich als Safari unter Linux aus. Das bau ich da jetzt nicht ein. Was für ein Müll dieses Web doch ist.
Oh und bei Firefox ist offenbar das UI für das audio-Tag kaputt und man kann da nicht die Lautstärke regeln. Na suuuuuper. Bin ich wirklich der erste, der das Audio-Tag benutzt?! Ist das echt noch keinem aufgefallen?!?
Tja, soviel dazu.
Update: Man kann das auch mit anderen Backends als Java einsetzen. Es gibt da Redland/Raptor, aber wenn man danach googelt, wird da allenthalben vor gewarnt. Der aktuelle Heilsbringer heißt Virtuoso, aber da ist schon der Source-Download 70 MB groß. Bitte was?! Für ein paar Metadaten? Und tatsächlich scheint das eher eine Art MySQL-Konkurrent zu sein als eine kleine, schlanke Datenbank. Also Leute, echt mal, für ein paar Metadaten? Ist das euer Ernst? Nehmt halt sqlite wie alle anderen, oder macht von mir aus einen kleinen Server drum herum. Meine Güte. Das ist kein Bloat-Wettbewerb hier. Und wenn man kdebase nicht ohne Soprano kompilieren können soll, dann lasst mich auch nicht kdelibs ohne Soprano kompilieren. Das verplempert nur meine Zeit und verärgert mich.
Das Problem, wenn man seinen ganzen Scheiß selber schreibt, ist, dass gelegentlich was nicht funktioniert, und dann muss man rumdebuggen. Heute habe ich mal wieder eine längliche Session hinter mir. Das Symptom war, dass libjava in gcc nicht baut. Das erste Problem war, dass gcc ein GNU cmp feature benutzt, nämlich --ignore-initial, welches mein cmp nicht implementiert. Meine Versionen der Utilities implementieren im Allgemeinen nur die Features, die von der Single Unix Specification verlangt werden.
gcc möchte dieses cmp-Feature haben, weil der Buildprozess Dateien vergleichen will, ohne die ersten 16 Bytes mitzuvergleichen. Daher guckt configure, ob cmp die Option kennt, und wenn nicht, dann gibt es einen Fallback auf tail +16c in Tempdateien. Ich habe zwar auch ein tail, aber das war nicht in meinem $PATH, da war das tail von coreutils. Und das kennt seit ein paar Versionen +16c nicht mehr. Tolle Wurst.
Stellt sich raus, dass mein eigenes tail das doch gekannt hätte. Das habe ich mal aus genau dem Grund implementiert. Gut, weiter im Text. Kompiliert immer noch nicht. Symptom sind irgendwelche Linkfehler im Java-Toolkit. Stellt sich raus, dass da in einem .zip-File irgendwelche Klassen fehlten. Hat auch nur einige Stunden gedauert, das rauszufinden. Stellt sich raus, dass die folgendes tun: cp -pR dir1 dir2. Problem 1: mein cp kannte nur -r, nicht -R. Mein Fehler, schnell gefixt. Problem 2: mein cp hat sich geweigert, die Kopie durchzuführen, wenn das Zielverzeichnis schon existierte. Problem 3: mein cp hat dann zwar eine Fehlermeldung rausgehauen, aber keinen nonzero-Exitcode gehabt, daher hat der gcc-Build nicht abgebrochen. Nachdem ich das gefixt hatte, läuft der gcc-Compile anscheinend durch. Ich sage anscheinend, weil ich das in meinem 3 GB Ramdisk zu kompilieren versucht habe, und die war voll. 3 GB ist zu wenig, um gcc zu kompilieren. O tempora, o mores. Ich habe hier noch eine 40 MB Platte rumliegen irgendwo. Ja, MB. Nicht GB.
Oh und warum wollte ich gcc kompilieren? Um Dragonegg auszuprobieren. Und: Es funktioniert! Coole Scheiße!
Ich muss ja sagen, das ist in der Tat der eine große Nachteil von Chrome gegenüber Firefox. Bei Firefox kann adblock auch das Laden von Javascript-Dateien blocken. Bei Chrome kann man nur die Bilder selbst blocken, da müsste man einen Proxy nehmen oder gleich im DNS die ganze Domain blocken. Ich muss echt mal ein Chromium Buildsystem aufbauen und dann hack ich mir da halt einen Regex-Filter in die HTTP-Engine rein, der eben 404 simuliert, wenn die URL einer der Regexen matcht.
Häufig genannte Argumente pro Inversion of Control sind, dass man so bessere Unit-Tests machen kann. Hey, was soll ich euch sagen, das konnte ich in C++ auch immer ohne neue Indirektionsschichten. Das Argument kann ich nicht gelten lassen.
Ich verdiene mein Geld damit, anderer Leute Quellcode zu lesen. Der beste Code ist der, den kurz aber selbstverständlich ist. Code, bei dem man irgendwo nachschlagen muss, um zu sehen, dass er korrekt ist, ist schlechter Code. Code, bei dem nicht mal der Compiler erkennen kann, wer da eigentlich gerade aufgerufen wird, ist die Steigerung von schlechtem Code. Nicht nur, weil man einen riesigen Kontext braucht, um ihn lesen zu können, und damit um bestimmte häufige Fehlerklassen ausschließen zu können. Sondern auch weil der Compiler nicht inlinen kann, wenn die Interfaces alle dynamisch zusammengepfropft werden. Bei Java heißt es immer, der JIT-Compiler könnte das dann schon fummeln, aber guckt euch doch mal das Laufzeitverhalten von typischen Java-Anwendungen an! Sieht das für irgendjemanden so aus, als könne der JIT da irgendwas signifikantes rausoptimieren? Oder überhaupt optimieren?
Ich höre auch häufig als Argument, dass man mit Java so produktiv sein kann, dass man so schnell Projekte stemmen kann. Auch das kann ich nicht aus der Praxis bestätigen, im Gegenteil. Was in Java tatsächlich gut geht ist das Parallelisieren von großen Projekten. Weil sich die Java-Leute eben erstmal auf Interfaces einigen und die dann runterimplementieren. Das könnte man auch in anderen Sprachen machen, aber es macht keiner. Nicht weil es nicht ginge, sondern weil man am Anfang des Projektes noch gar nicht sagen kann, was man konkret für Interfaces brauchen wird, und wie die genau aussehen müssen. Das ist m.E. auch der Hauptgrund für diese ganzen Fummel-Patterns wie Interceptor und Proxy. Das Projekt wird zwar schneller "fertig", aber dann hat man eben den Mehraufwand, um die ganzen Teile zusammenzukleben.
Das ist auch bei C++ eines der Hauptprobleme beim Software Engineering, dass die Leute alle glauben, ihr Kram müsse wiederverwendbar sein. Und dann entsteht eben statt der Klasse mit den 8 benötigten Methoden die "generische" Klase mit den 23 Methoden, von denen nur 8 überhaupt jemals aufgerufen werden und der Rest kompiliert womöglich nur deshalb, weil es Templates sind, die nirgendwo instanziiert werden, und die fliegen einem dann bei der ersten Instanziierung um die Ohren. Und der erste, der das tatsächlich wiederverwerten will, der hat am Ende mehr Aufwand, als wenn er die 8-Methoden-Klasse bedarfsgerecht erweitert hätte.
Übrigens: hier gehen tatsächlich ein paar Mails und Tweets von Studenten ein, die mir vorwerfen, ich habe von Software-Engineering keine Ahnung. Nein, wirklich! Leute, die noch nie irgendwo eine Zeile echten Code geschrieben haben, die sich ihren Boilerplate von der IDE generieren lassen und ohne Eclipse-Plugins zum Webservice-XML-Definitions-Export nicht arbeiten können, solche Leute werfen mir vor, ich habe keine Ahnung von Software-Engineering. Köstlich! Gut, dass das Internet nicht vergisst. Das wird sicher lustig, wenn ihr euch das erste Mal irgendwo zu bewerben versucht, Jungs. Oh und googelt mal den Dunning-Kruger-Effekt.
Die mußten unterwegs ihre Arbeitsgruppe umbenennen, weil die Leute ihnen auf die Schliche gekommen sind, und keinen Bock auf diesen Bullshit hatten! Wenn jemand einen Satz wie diesen hier von sich gibt:
JSR 299 bietet ein neues Set an Funktionen für Java EE. Grundlage ist eine Menge von definierten Lebenszykluskontexten.Da hilft doch nur noch Einschläfern! Wenn die so einen Satz sagen, fällt denen dann nicht selber auf, dass sie auf dem Holzweg sind? Beim Formulieren im Kopf meine ich jetzt?
Darauf aufbauend bietet der JSR Modularisierung, übergreifende Aspekte (Decorators und Interceptors) sowie typsicheres Injizieren von Objekten, alles Dinge, die Java-EE-Komponenten zu einer geschmeidigen Kooperation bewegen sollen.Wenn jemand soweit ist, dass er Decorators und Interceptors braucht und Objekte injizieren will, dann sollte man das Projekt in einem Glassarg im Ozean versenken, alle Kopien und Dokumente darüber vernichten, und neu anfangen. Sicherheitshalber würde ich außerdem für eine Sicherheitsverwahrung aller Beteiligten plädieren.
Schon der erste Satz räumt schon alle Zweifel aus, dass man solche Leute nicht Software entwickeln lassen darf:
Dependency Injection ist eine Anwendung des Inversion-of-Control-Prinzips (IoC) und als solches ein Entwurfsmuster für die objektorientierte Softwareentwicklung.Inversion of Control, ja? Lest euch mal bei Wikipedia durch, in was für einer Traumwelt die Leute leben:
Replacing systems will have no side effect on other systems.Nee, klar, so läuft das ja immer bei komplexen Systemen!1!! Und damit das so bleibt, packen wir noch ein bisschen mehr Komplexität oben drauf!
Guckt euch auch mal an, was sie da für Probleme zu lösen versuchen:
Dank dieser Konstruktion ist es erstmals möglich, EJBs als JSF Managed Beans einzusetzen.Mit anderen Worten lösen Sie da selbsterzeugte Probleme. Probleme, die sie dank verkackten Designs in vorigen Pseudotechnologien haben. Meine Fresse ist das alles eine Bankrotterklärung für Java. Unglaublich. Und wieder machen sie da XML-Metadaten, die man mitpflegen muss. Die lernen halt nicht aus ihren Fehlern. Na dann, guten Absturz, liebe Java-Leute.
Oooooder vielleicht verstehe ich ja auch einfach nicht genug von modernen OO-Dingen, um die Genialität hinter diesem ganzen Framework-Gedudel würdigen zu können. Will mir das vielleicht mal jemand erklären? Das müsste aber jemand sein, der ein größeres Projekt vorzuweisen hat, dass dank dieser Technik funktioniert und sonst nichts geworden wäre.
Update: Mir erklärt gerade jemand, dass sich hierunter im Wesentlichen eine Indirektionsschicht zwischen einer Klasse und dem Class Loader verbirgt. Die Klasse gibt die Instanziierung eines benutzten Interfaces komplett an das Framework ab. Für mich liest sich das genau wie ich oben meinte: eigentlich wollten sie Lisp-Closures haben, aber das kann die Sprache halt nicht, daher pfuschen sie sich jetzt eine Callback-Struktur zurecht. Und dadurch, dass man die Implementation nicht kennt, und die jemand anderes instanziiert, kann man auch nicht am Interface vorbeiarbeiten (was ja eigentlich schon durch das Interface selber verhindert werden sollte, aber offenbar nicht genug…?). Insgesamt scheint es bei Java ein Riesenproblem zu sein, anderer Leute Code benutzen zu müssen, ohne ihn anfassen zu können. Und die existierenden Komponenten müssen so furchtbare Modularitätsverletzungen haben, dass man das architekturell erzwingen muss in Java. Was bin ich froh, dass ich nicht in so einem Umfeld programmieren gelernt habe. Die Leute sind sicher für ihr Leben gezeichnet und werden nie ordentlichen Code schreiben können.
Update: Mir mailt gerade jemand völlig zu Recht diesen Link, der schön illustriert, was hier gerade passiert (Spalte 1, Zeile 2).
Update: Jetzt kommen hier Mails an, dass da Vorsatz notwendig ist. Ja, stimmt, aber wie soll man das nachweisen?
Update: Im Beck-Blog beraten Juristen darüber, wie das auszulegen ist. Im Übrigen sei angemerkt, dass schon ein Verfahren wegen Kinderpornographie reicht, um einen Menschen ins soziale Abseits zu schieben. Selbst wenn das eingestellt wird, weil sie keinen Vorsatz nachweisen können, kann man dann nur noch den Namen wechseln und aufs Land ziehen.
Das klingt erst mal schlau, bis man sich näher mit HTTP auseinandersetzt. Denn da ist das so, dass die externen Referenzen hauptsächlich statisch sind, während sich das HTML auf der Seite ändert. Der Stylesheet ändert sich vielleicht einmal im Jahr, wenn es hochkommt, die Javascript-Library ändert sich, wenn mal wieder ein neuer Browser auf den Markt kommt, und die Inline-Bilder ändern sich einmal am Tag. HTTP hat das erkannt und bietet dafür eine Optimierung an, If-Modified-Since. Hier ist ein typischer HTTP-Request:
GET /rss.xml?html HTTP/1.1Der Client sagt hier also: ich war zuletzt um 19:07:32 GMT hier. Der Server sieht sich das an und antwortet:
Host: blog.fefe.de
Connection: Keep-Alive
User-Agent: Akregator/1.5.1; syndication
If-Modified-Since: Thu, 12 Nov 2009 19:07:32 GMT
Accept: text/html, image/jpeg;q=0.9, image/png;q=0.9, text/*;q=0.9, image/*;q=0.9, */*;q=0.8
Accept-Encoding: x-gzip, x-deflate, gzip, deflate
Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5
Accept-Language: en-US, en
HTTP/1.1 304 Nix NeuesDas ist das HTTP-Modell, um unnütze Daten nicht zu übertragen. Für RSS ist dieser Fall häufig, aber noch viel häufiger ist er für Stylesheet, favicon.ico, Inline-Bilder und externe Javascript-Dateien (gut, die habe ich ja sowieso gar nicht bei mir). Das ist ja gerade der Grund, wieso man Javascript-Bibliotheken in eigene Dateien auslagert. Weil die sich eben nicht ändern und dann nicht bei jedem Zugriff neu übertragen werden sollen.
Google schlägt jetzt vor, der Server soll bei der Anfrage nach der Webseite auch gleich ungefragt die ganzen (ungeänderten) Dateien mitschicken. Das mag zwar im Benchmark die Latenz senken, aber es würde das Web-Verkehrsaufkommen im Internet mal eben verdoppeln. Beim ehemaligen Nachrichtenmagazin würde dann bei jedem Webseitenklicken das Spiegel-Logo mitübertragen. Wenn ihr mal sehen wollt, was das ausmacht, dann geht einmal zu spiegel.de, löscht einmal den Cache, startet den Browser neu, und geht nochmal zu spiegel.de Das dauert gleich fünfmal so lange!
Daher glaube ich, dass es Google hier um was anderes geht. Die wollen nicht wirklich die Stylesheets als Server Push machen. Die wollen die Google Ads als Server Push machen. User werden nämlich ungehalten, wenn eine Webseite langsam lädt, weil die Werbung so lange braucht. Und wenn wir das erst mal so machen, dann ist auch der zentrale Vorteil von Werbeblockern weg. Weil die Seite dann eben nicht schneller lädt mit Werbeblocker. Es flimmert nur nicht mehr so.
Oh und völlig unabhängig davon: der Server müsste, damit das überhaupt funktioniert, die Webseiten parsen und die Abhängigkeiten analysieren können. Das ist eine immense Komplexität, die man nicht im Webserver haben will. Schon aus Sicherheitsgründen nicht. Je komplexer, desto angreifbarer.
Oh und wenn ihr euch mal den HTTP-Request da oben anguckt: über die Hälfte davon ist vollständig überflüssig. Das sollte man nicht komprimieren, sondern einfach mal den überflüssigen Mist rausnehmen.
Das lässt ja mal wieder tief blicken, wie unsouverän Wikimedia hier mit Kritik umgeht. Tilos Spende ist weg. Fast so unsouverän wie das Treffen neulich.
Update: Interessanterweise hat sich Wikimedia damit in die Wikipedia-Schußlinie gebracht, was sie ja bisher nach Kräften vermieden haben. Das wird sich vermutlich als wenig schlaue Entscheidung herausstellen.
Update: Wow, da platzt gerade ein Knoten. Ich bin ja an sich nicht dafür, denen auch nur einen Euro zu spenden, aber was da gerade passiert hat auch gute Seiten. Zum Einen stehen da echte Namen dran, im Gegensatz zu den Kindergarten-Pseudonymen, hinter denen sich in der Wikipedia die User verstecken. Zum Anderen entkräftet das das Argument, das wir zuletzt noch auf dem Wikimedia-Whitewash-Treffen gehört haben, Wikimedia habe kein Mandat für den Betrieb einer Deletionpedia für WP:DE, weil die Spenden ja nach wie vor reinkämen, also würden sie ja das richtige tun. Vielleicht passiert ja jetzt doch auch mal was Positives in dieser ganzen WP:Sickergrube. Übrigens, eine positive Sache gibt es ja abgesehen hiervon zu berichten: der Admin 32X verliert gerade seine Admin-Wiederwahl. Das war der mit dem "völkischen Beobachter", falls ihr euch erinnert. Vielleicht gibt es da ja doch so etwas wie Selbstheilungskräfte, und wir haben die nur noch nicht genug stimuliert.
Update: Es gibt jetzt auch eine (lahme) Stellungnahme von Wikimedia. "Wir beziehen […] keine Position in der aktuellen Relevanzdebatte", nee klar, "Unser Spendenticker ist […] die falsche Plattform".
Update: Au weia, lest euch mal die Kommentare durch, die sich der Wikimedia-Pavel mit der Stellungnahme eingefahren hat. Da kriegt man ja fast Mitleid. Käpt'n, wir haben Wassereinbruch! *gluck* *gluck* *gluck*
Update: Mir mailt gerade jemand folgendes:
Proaktiv der Hinweis, daß es beim Spenden nicht reicht, den Betrag auf "1 Euro" zu drehen, man muss auch noch ein Häkchen umsetzen - ansonsten ist der Betrag plötzlich 20 Euro. Ohne weitere Vorwarnung, die eigentlich überall woanders übliche Seite mit "Überprüfen Sie Ihre Angaben" fehlt.
Jetzt mailen mir andere, dass das doch nicht so ist, und man auch eine Mail kriegt, über die man sich auch beschweren kann. Ich geb das mal alles nur so weiter. Könnt ihr ja selber gucken. Ich vermute mal, dass derjenige Javascript ausgeschaltet hatte. Aber ein-zwei 20 Euro Spenden sind ja dazwischen gerutscht, also könnte da ja doch was dran sein.
Update: Mit dem "Blockwart" habe ich ja offensichtlich ins Mark getroffen, wie man auf diesem mir zugemailten Screenshot gut sehen kann. Ich verstehe gar nicht, was deren Problem dabei ist. Ich habe ja nirgendwo geschrieben, Wikipedia bestünde nur aus Blockwarten, oder die Admins seien alles Blockwarte. Im Gegenteil habe ich sie aufgerufen, die Blockwarte rauszuschmeißen. Es läßt tief blicken, dass offenbar auch der Herr Geschäftsführer der Wikimedia sich da persönlich angesprochen fühlt und da jetzt mit eiserner Hand durchgreift, nicht nur an der Eingangstür, wenn er persönlich den Heise-Reporter rausschmeißt, sondern auch bei den Kommentaren in seinem Hausblog. Tja, so ist das eben, wenn die Vorstellungen von PR-Funktionären ("Müller, wir brauchen auch so ein Blog, da können wir dann unsere PR-Botschaften verbreiten") auf die Realität treffen. Oh und ich bin entzückt, wie viele Vandalen sich öffentlich beschweren, dass ich keine Kommentarfunktion habe. Besser könntet ihr mich gar nicht in meiner Entscheidung bestätigen!
Beide Schreiben führen als Beweis die ungültige IP-Adresse "192.234.214.676" und "ein Java-Script ihres Computers" an.*stöhn*
Laut 58 Prozent der Befragten werde der Anforderungsanalyse zu wenig Bedeutung zugemessen. In jedem zweiten Projekt seien zudem die vorhandenen Integrationsmechanismen nicht ausreichend. Für etwa zwei Drittel der Java-Experten werde der Dokumentation zu wenig Bedeutung zugemessen.Pfusch am Bau, wo man hinguckt. Integration heisst bei Java "neuschreiben". Und nach der Performance fragen sie schon gar nicht mehr. Auf so ein Blutbad hat so frisch im neuen Jahr keiner Lust.
<fariseo> -knock knock ..
<fariseo> -Who`s there ?
<fariseo> … a looong pause …
<fariseo> - Java
Update: Gibt es auch als Adobe-Witz:
Knock Knock(von hier) (Danke, Jan)
Who'e there?
[looong pause]
*crash*
Um die volle Funktionalität der Homepage derUnd DIE sind u.a. für "Qualitätssicherung im Hochschulbereich" zuständig. Da bleibt kein Auge trocken. (Danke, nibbler)
Kultusministerkonferenz nutzen zu können, benötigen Sie Netscape 4.X (jedoch nicht 6)
oder Internet-Explorer ab Version 4.X mit aktiviertem JavaScript.
Und das schockierende: vor mir hat das offenbar noch keiner gemerkt. Ich bin anscheinend der einzige, der Firefox aus den Sourcen kompiliert und dann auch Bugs filed, wenn was nicht klappt.
Übrigens: kann ich noch nicht empfehlen. Erstens ist der Javascript JIT offenbar nur für x86, nicht für x64-64, und zweitens gehen natürlich mal wieder die ganzen Add-Ons nicht mehr.
Update: Klickt auch mal auf das Buch und guckt, was da in der "haben auch gekauft" Liste steht. Bei mir sind das lauter Java-Bücher! Gut, auf einer tiefenpsychologischen Ebene ergibt das Sinn, wenn ich mit Java zu tun habe, will ich danach auch immer Dinge in die Luft sprengen :-) (Danke, Rado)
Cernunnos embodies software industry best practices based on innovative design principals. It dramatically reduces time and effort in Java development by effectively promoting reuse in common programming tasks.
Yeah, but what does it DO?
Conference Bridge is a Java SIP conference bridge. Its design is to be fast rather than robust.
Au weia.
Und hier ist noch so ein krankes Projekt: Eine Java VM in Javascript.
Well that's it. I'm switching banks.:-)
The number of foreign visitors to the United States has plummeted since the September 11, 2001 attacks on New York and Washington because foreigners don't feel welcome, tourism professionals said Thursday. […] "Travelers around the world feel the US entry experience is among the world's worst," Freeman said, calling on the US government to work with the private sector to make visa acquisition more efficient, the entry process traveler-friendly, and to improve communication.
Das ist wirklich witzig, denn ich bin gerade dabei, mir ein US-Visum zu holen. Das letzte Mal bin ich da hin gegangen (zum Konsulat), habe ein paar Formulare ausgefüllt, ein paar Dollar gezahlt, habe in einem Automaten im Gebäude ein passendes Passfoto gemacht, und sie haben mir das Visum direkt vor Ort ausgedruckt und in den Reisepass geklebt.Dieses Mal muss ich durch eine degradierende Webseite, wo man erst mal 10 Dollar per Kreditkarte zahlen muss, dafür dass sie einem einen Termin im Konsulat geben (alternativ kann man eine 0900-Nummer anrufen, die einen auch kräftig zur Kasse bittet, um einen Termin zu kriegen). Auf dem Webserver muss man dann diverse Formulare ausfüllen, unterwegs wirft die Webseite noch einen Java-Stacktrace wegen Oracle-Fehlern im Backend, und bei mir hat er noch die Kreditkarte nicht annehmen wollen. Zu guter Letzt generiert die Webseite dann ein PDF, das man ausdrucken soll, und wo er die eingegebenen Daten falsch einträgt.
Dann muss man zu einer kleine Allianz-Tochter (mit der besonders vertrauenswürdigen Geschäftsform OHG) gehen und denen 80 Euro überweisen (Kreditkarte? Kontoeinzug? Geht nicht!), die emailen einem dann ein Stück Papier, das man ausdruckt und dem Konsulat mitbringt. Vor Ort zahlen geht offenbar nicht mehr, auch nicht in bar. Wieso sie, wenn sie auf ihrer Webseite schon für die 10 Dollar Kreditkarten nehmen, nicht auch die 80 Dollar über die Kreditkarte nehmen, bleibt unklar. Mit dem Allianz-Dingens gibt es dann noch Probleme, weil deren Bank erst mal drei Tage auf dem Geld sass, und weil der Mailserver der die Bestätigungsmail abgebenden Domain keine SMTP-Verbindungen annahm (dann nimmt mein Mailserver die Mails nicht an). Kurz gesagt: ein einziges Desaster.
Viel deutlicher als mit diesem Generve können einem die Amis im Grunde nicht sagen, dass sie einen nicht zu Besuch haben wollen. Ihr könnt euch also vor stellen, wie überraschend ich das jetzt finde, dass denen die Besucher wegbleiben. Oh und von der Passagierdatenweitergabe will ich mal gar nicht anfangen. Im Übrigen hatte ich auch mal Gelegenheit, die Gastfreundschaft der US-Immigrationsbehörden am Flughafen zu erleben, als die mich über eine Stunde befragt haben und dann mit einem Gummihandschuh durch die Unterwäsche in meinem Gepäck gingen.
Der Lacher ist: zum Camp hatte ich ein paar Freunde aus Amerika zu besuch, und die meinten: die Einreise in der EU sei weniger Stress gewesen als die Ausreise aus den USA. Way to go, Chertoff.
Nächste Hürde mal wieder der 32-bit Kram. gcc will auf amd64-Systemen auch gleich einen gcc mitbauen, der 32-bit Binaries erzeugt, für "gcc -m32". Schön und gut, allerdings kommt der mit einem Runtime, insbesondere für C++ und Java, und dieses Runtime nimmt dann an, daß es auch die System-Header für 32-bit Systeme vorfindet, was nicht der Fall ist. Insbesondere die Syscall-Nummern sind anders, einige Structs vermutlich auch. Gentoo löst das Problem, indem sie die glibc-Includes aufhacken, so daß die per #ifdef je nach Zielplattform andere Dateien reinziehen. Ein gruseliger Hack, und eben auch non-default. Das hat die glibc echt ganz großartig verkackt, in Zusammenarbeit mit gcc. Und so sind da jedes Mal wieder Eingriffe nötig, um den Scheiß überhaupt kompiliert zu bekommen. Als das dann nach diversen Anläufen doch irgendwann funktionierte, stellte ich zu meiner Überraschung fest, daß gcc jetzt warnt, wenn man "if (i + 3 < i)" macht bei signed ints. Wow. Sollte ich doch mal was erreicht haben mit meinem Kampf gegen die Windmühlen?
Javad Shamqadri, a cultural advisor to Iranian President Mahmoud Ahmadinejad, said it was "plundering Iran's historic past and insulting this civilization".He branded the film "psychological warfare" against Tehran and its people. […]
"Following the Islamic Revolution in Iran, Hollywood and cultural authorities in the US initiated studies to figure out how to attack Iranian culture.
"Certainly, the recent movie is a product of such studies."
glibc installiert seine Header in /usr/include, und hat verschiedene Header für x86 und x86_64. Man kann aber gcc mit -m32 aufrufen, und dann kompiliert er für x86. Leider benutzt er dann immer noch /usr/include. In den meisten Fällen ist das OK, aber manchmal eben nicht, wie z.B. beim Java-Runtime von gcc. Nun hat gcc einen Override-Mechanismus für sowas. Z.B. included er vor /usr/include noch seinen Override-Pfad /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.1.1/include (bei mir). Nun, leider ist auch dieser Pfad der selbe bei -m32.
gcc hat einen Mechanismus, um sowas zu fixen. Man kann ein specs-File erzeugen. Früher hat gcc das mitgeliefert, heute ist das built-in. Man kann das trotzdem noch extrahieren (ruft mal "gcc -dumpspecs" auf, um euch den Horror mal zu geben) und irgendwo geschickt platzieren, aber … wir haben 2007. Liebe gcc-Leute, das ist unter aller Sau. Fixt das mal. Und wenn die glibc-Deppen nicht pro Plattform andere Includes hätten, wäre das auch alles kein Problem. Das liegt im Übrigen u.a. daran, daß glibc die Kernel-Header included. Ich habe das am Anfang auch gemacht bei der dietlibc. Linus himself hat mir dann eine Mail geschrieben, daß ich das nicht machen soll, weil das nur Probleme macht, und hey, rückblickend hatte der Mann sowas von Recht… tja, nur bis zur glibc hat sich das noch nicht rumgesprochen.
Wenn ihr eine 64-bit Distribution fahrt, dann guckt euch mal an, wie die das regelt. Gentoo hat da echt einmal den Hazmat-Anzug angezogen und ein Konstrukt namens "multilib" gebaut. Auf meinem Gentoo-Testsystem sieht z.B. /usr/include/wchar.h so aus:
/* Autogenerated by create_ml_includes() in multilib.eclass */Na, ist das nicht wi-der-lich? Danke, liebe glibc, daß ihr Linux so effektiv kaputt gemacht habt. Nicht einmal offene Eiterwunden wie X oder Samba sind je so tief gesunken.#ifdef __i386__
# include
#endif /* __i386__ */#ifdef __x86_64__
# include
#endif /* __x86_64__ */
Oh, noch nen Nachschlag für die Variante mit dem "specs"-File: wenn ich das anfasse, und da z.B. folgendes bei cpp_options reineditiere:
{m32:-isystem /usr/include32}dann hängt mir das natürlich auch beim dietlibc-für-x86-Kompilieren /usr/include32 in den Pfad und macht alles kaputt. Ihr seht schon, wieso Gentoo diese Würg-Lösung gewählt hat.
The Java version took 178 microseconds and the C version took 63 microseconds. When a GC occurred during a copy, the Java version took 230 microseconds.
Na das ist doch voll akzeptabel!1!! Laßt uns auch gleich Websphere in den Kernel tun. Und was soll ich euch sagen, Microsoft hat diesen Schritt vorher gesehen und IBM den Websphere-Verbr^WErfinder abgeworben (Danke, Hilko)
Obol is a specialized high-level programming language for security protocols. […] The language is interpreted, and the runtime written in Java.
But wait, there's more!vtmalloc is a fast memory allocator for multi-threaded applications and Tcl. It provides low contention and the ability to return memory to the system.
Ooooh NOCH mehr:SpadFS is an attempt to combine features of advanced filesystems […] crash recovery […] journaling […] hash […] btree]Changes: The main fixes are some spadfsck crashes and creating bad directory entries when a user tried to create s filename longer than 255 characters.
Oh Mann, und NOCH so einer:The Akelos Framework is a PHP4 and PHP5 port of the Ruby on Rails Web development framework.
OH NOOOOOOOO!OMFG, und hier ist noch ein schöner, damit hier nicht immer nur schlechte Nachrichten kommen:
sendmail 8.14.0.Beta4: Changes: Header field values are now 8-bit clean. […] This release also contains various bug features, […]
Ich bin ja der letzte, der Python, *Basic, Ruby und den ganzen Dreck für ungeeignet hält, aber … QtScript? Oh bitte nicht!1!!
Und ja, es soll eine Art Javascript werden. Man soll damit dynamisch mit Qt-Objekten interagieren können. OH THE HUMANITY!
Wer dachte, mit XML wird alles besser, der kann sich gleich mal auf ein rüdes Erwachen einstellen. Ich fasse mal die übelsten Punkte kurz zusammen:
Ich gehe also mit Firefox zu deren Site, versuche das zu ziehen, und lande bei einer Seite, bei der ich mich mit meinem Sun Account einloggen soll. Frechheit, aber hey, was tut man nicht alles, um sich qualifiziert über Sun aufregen zu können. Ich habe noch einen Account rumliegen, weil ich mir mal Java gezogen habe (schwerer Fehler, rückblickend), aber die Site hat keine Eingabefelder. Firefox 2 zeigt bei dieser Site keine Eingabefelder. Man sollte denken, daß so ein Problem schon mal jemandem aufgefallen wäre, aber offenbar nicht. Ich gehe also mit Konqueror (!!) zu dieser Site, gebe die Daten ein, und copy+paste die URLs in wget. wget erhält 15 Redirects von Sun und beendet sich dann mit "filename too long". Hach, großartig. Professionelle Datenverarbeitung. Kein Wunder, daß die jetzt lieber aufs Containergeschäft umsteigen.
Ploppy is a WordPress plugin for describing the state of your bowel movements using the Bristol Stool Scale. Each description is accompanied by a little illustration.
Und hier noch einer für die Buzzword-Fraktion:DBSight is a J2EE search platform for rapidly developing search engines on any relational database, for both beginners and experts. It's scalable, easy to create, and fast to search. It features a built-in database crawler following user-defined SQL, incremental indexing, user-controllable result ranking, the ability to return results with highlights (like Google), and categorized result counts (like Amazon). It can easily integrate with a non-Java environment with XML/JSON. There is a UI for all operations, so no Java coding is necessary.
Java, SQL und XML in einem Produkt? Die Performance muss ja atemberaubend sein! Aber halt, das kann ich noch toppen:Solr is a high performace search server based on Lucene, with XML/HTTP and JSON APIs, hit highlighting, faceted search, caching, replication, and a Web administration interface. Solr is currently under incubation at the Apache Software Foundation.
Wenn die schon in eine Search Engine Caching und Replication einbauen, dann ist ja schon klar, wie gut das performt. Und dann das Qualitätssiegel schlechthin: "under incubation at the Apache Software Foundation". Die haben echt ein Händchen für gruselige Software.
Die LETZTE Firma, von der man Code haben will, ist Adobe. OMFG hoffentlich haben die Mozilla-Leute genug Grips, um diesen Sabotageversuch abzulehnen! Wieso haßt Adobe Mozilla so sehr? Ob da Microsoft dahinter steckt?
Jagacy VT is a VT100/ANSI screen-scraping library written entirely in Java. It includes a special VT100 emulator designed to help create screen-scraping applications. It excels at creating screen-scraping applications reliably and quickly.
Was bin ich froh, diese Art von Problem nicht zu haben. But wait, there's more!gnutls. Changes: This release decrements the shared library version back to 13. […] It fixes an off-by-one error when computing length to malloc. […]
OMFG! Aber halt, einen habe ich noch!AjaxVTT is a "Virtual Table Top" utility for multi- user Web-based battle mapping. It lets you play table-top RPGs (Role Playing Games) over the Internet. It outputs standards-compliant dynamic HTML, CSS, and JavaScript (with Ajax).
Zuerst muss man dafür Cross-binutils bauen, das sind Assembler und Linker und so, das ist auch normalerweise gar kein Problem.
./configure --prefix=/opt/cross --target=x86_64-linux --enable-static --disable-sharedund gut ist. Statisch deshalb, weil ich in /opt/cross auch Crosscompiler für zig andere Plattformen habe, um zu gucken, ob die diet libc noch mit allen Plattformen sauber baut. Wenn man da den Default nimmt, und ein Cross-Binutils für Alpha-Linux installiert, dann geht danach der Assembler für AMD64 nicht mehr, weil der die selbe Shared Library laden will, die aber von AMD64 nichts weiß. OK, damit kann ich leben. Fällt man einmal drauf rein, lernt man, gut ist.
Der nächste Schritt ist der Crosscompiler. Hier kommt die erste echt Hürde, denn der Crosscompiler baut normalerweise für C, C++, Java, Objective C, allen möglichen Schund Compiler. Die kommen alle mit Laufzeitumgebungen, die nicht kompilieren, weil sie eine funktionierende libc erwarten. Die haben wir nicht, wir bauen ja gerade den Compiler, mit dem wir sie dann übersetzen wollen. Daher sieht bei gcc die Configure-Zeile so aus:
./configure --prefix=/opt/cross --target=x86_64-linux --enable-static --disable-shared --enable-languages=c --disable-nlsDas --enable-static hier bezieht sich auf libgcc; wenn gcc die wie normal dynamisch zu bauen versucht, schlägt das mangels libc fehl. Aber auch so gibt es Ärger, weil libgcc von der Zielplattform die libc-Header haben will. Das finde ich persönlich ja einen groben Verlierer, ja geradezu den Stirnklatscher überhaupt. An der Stelle hat man normalerweise verloren. Übliche Notfall-Ansätze sind "Debian-Paket bzw Fedora-RPM der glibc der Zielplattform ziehen, von Hand die Header auspacken, und an die richtige Stelle (/opt/cross/x86_64-linux/include) kopieren". Wieso nicht einfach /usr/include nehmen? Weil bei der glibc die Header von der Plattform abhängen! Nicht so bei der dietlibc, und so habe ich für meine Crosscompiler immer die dietlibc-Header gesymlinkt, und dann ging das gut (mal abgesehen von Bizarro-Plattformen wie IA64, der will da Dateien und Symbole haben, von denen ich noch nie gehört habe, irgendwelcher libc-Support fürs Stack Unwinding… *grusel*).
Normalerweise höre ich an der Stelle auf, denn wenn ich einen Crosscompiler habe, kann ich damit die dietlibc übersetzen. Heute habe ich mich aber so über das Gentoo auf meinem Desktop geärgert, daß ich mir vorgenommen habe, meine Linux-Distro "Fefix" mal für AMD64 zu crosscompilen. Schritt 1: glibc. Und was soll ich euch sagen, glibc ist nicht crosscompilefähig! Der versucht, sizeof(long double) rauszufinden, indem er ein Programm übersetzt und ausführt. Das geht natürlich nicht. Gut, in configure fest 16 reingehackt (die Alternative ist, einen config.cache manuell zu erstellen, in dem das drin steht), und was sehen meine entzündeten Augen?
checking for libgd… no [libgd?!?!?…]WTF?! C cleanup handling? Und gcc 4.1.1 soll das nicht unterstützen?! ARGH! Na gucken wir uns doch mal das Testprogramm an:
checking for ANSI C header files… no [doh!]
checking for sys/types.h… no
checking for sys/stat.h… no
checking for stdlib.h… no
checking for string.h… no
checking for memory.h… no
checking for strings.h… no
checking for inttypes.h… no
checking for stdint.h… no
checking for unistd.h… no
checking for long double… no
checking size of long double… (cached) 16 [Warum macht er das überhaupt, wenn er glaubt, daß es kein long double gibt?!]
running configure fragment for sysdeps/x86_64/elf
checking for x86-64 TLS support… yes
running configure fragment for nptl/sysdeps/pthread
checking for forced unwind support… yes
checking for C cleanup handling… no
#include <stdio.h>Na und woran scheitert es wohl? RICHTIG! Kein stdio.h! Denn ich kompiliere ja gerade die libc, DAMIT ICH DIESES HEADER-FILE KRIEGE! Lieber Herr Drepper, warum erhängen Sie sich nicht einfach an der nächsten Eiche? Das würde uns allen viel Ärger sparen. Danke.
void cl (void *a) { }
int
main ()
{
int a __attribute__ ((cleanup (cl)));
puts ("test")
;
return 0;
}
Warum bloggst Du?
Es fing als Linksammlung für den jährlich auf dem CCC Congress stattfindenden Fnord Jahresrückblick an. Über Blogger habe ich mich ja jahrelang lustig gemacht, vor allem auch weil sie alle so schlechte PHP/Perl/Python/Java/Whatever Knödelsoftware einsetzen, und sich da lauter New Age Dinge wie Trackback, Kommentarfunktion und XMLRPC ausdenken, um dann prompt für die damit einhergehenden Probleme neue Lösungen brauchen — eine veritable Arbeitsplatzbeschafftungsmaschine! Und so war klar, daß ich eine eigene Blogsoftware brauchen würde, in C geschrieben, mit tinyldap als Backend, und sei es nur um zu zeigen, daß das geht. :-)
Seit wann bloggst Du?
Seit dem 31. März 2005. Die 1. Meldung war, daß malaysische Autodiebe den Finger mitgeklaut haben, um an der Biometrie vorbei zu kommen.
Selbstportrait
(etwas älteres Bild)
Warum lesen Deine Leser Dein Blog?
Gute Frage. Ich habe das mal rauszufinden versucht vor einer Weile, und da schrieben mir mehrere Leute, daß sie mein Blog als Nachrichtenquelle nutzen.
Welche war die letzte Suchanfrage, über die jemand auf Deine Seite kam?
blog bei google.de (kraß, wa?)
Welcher Deiner Blogeinträge bekam zu Unrecht zu wenig Aufmerksamkeit?
Mhh, könnte ich jetzt keine konkrete nennen.
Dein aktuelles Lieblingsblog?
Das des ehemaligen Nachrichtenmagazins aus Hamburg. Oh, nur Blogs ohne Werbeeinblendungen? Na gut, dann Holgi und Susanne.
Welches Blog hast Du zuletzt gelesen
Metafilter.
Wie viele Feeds hast Du gerade im Moment abonniert?
Keine. Ich lese Blogs im Webbrowser. RSS kostet mich mehr Zeit als es einzusparen versprochen hatte.
An welche vier Blogs wirfst Du das Stöckchen weiter und warum?
Ich bewerfe doch keine harmlosen Blogs mit Stöckern!1!! Nee, das propagiert sich schon von alleine weiter.
HSE (Hibernate, Spring, Echo2) is a three-tier base application for Echo2. It is designed to be a starting point for writing robust AJAX applications in Java, Spring, and Hibernate.
Robust, ja? Na gucken wir doch mal ins Changelog…Changes: Database connection loss detection and handling was added.
MyOODB (My Object-Oriented Database) is an integrated database and Web environment that provides true distributed objects, implicit/explicit multi-concurrent nested transactions, seamless Web tunneling, and database self-healing. MyOODB is one part of a two part SDK solution. Together with MyOOWEB, MyOOSDK provides a development environment for people who desire small, fast, but powerful applications.
Das reicht ja vermutlich schon, um das Bullshit-Meter des durchschnittlichen Fefeblog-Lesers zum Abbrechen des Zeigers zu bewegen, aber mal schauen, ob wir da vielleicht noch mehr herausholen können. Erste Beobachtung: wir werden mit Buzzwords geflutet, und zwar nicht nur mit bekannten, sondern auch mit frisch erfundenen ("seamless Web tunneling"). Das ist schon mal ein klares Indiz für einen Java-User. Dazu kommt, daß "OO" im Namen ist (nur Java-Deppen halten das per se für eine Errungenschaft oder Wert). Und wenn da so eine Bloat-Sickergrube auch noch als klein und schnell beschrieben wird, dann ist ja evident, daß der Autor nichts kann. Dieser Eindruck verstärkt sich noch, wenn man den "My" Prefix betrachtet. Wer das für ein Qualitätsmerkmal hält, kann nicht viel Erfahrung haben. Self-Healing, yeah right. Und, liebe Leser, Transaktionen anständig hinzukriegen, dazu noch performant und korrekt, das ist nicht einfach, selbst wenn man weiß, was man tut (was hier ja offensichtlich nicht der Fall ist). Da liegt die Vermutung nahe, daß er seine Transaktionen verkackt hat. Mal schauen, was das Changelog sagt:This release fixes a bug where if the "Mighty Write" was piggybacking on another nested transaction, rollback might fail.
HAHAHAHAHAHA
update-zoneinfo is a utility for synchronizing a host's time zone information according to definitions stored on a central server. Linux and Solaris are currently supported. It can be periodically run from crontab to deal with changes in daylight saving times.
Äh, synchronize? Die Timezone-Daten beinhalten bereits Fixups für Sommerzeit und so, das ist genau deren Aufgabe. Da muss man nichts synchronisieren, und schon gar nicht mit perl per cron.Und hier noch einer, außer Konkurrenz, weil der wirklich alles hat, was man nicht haben will:
PyHJB is a Python-to-JMS gateway that makes it possible to access JMS 1.1 (Java Message Service) messaging providers via HJB, the HTTP JMS bridge. It acts as an HTTP gateway server for any JMS messaging provider, and provides a RESTful equivalent for most of the non-optional portions of the JMS API. It is distributed with a few demo scripts that show it being used with WebSphere MQ, Swift MQ, Active MQ, and JBoss Messaging.
Bing-bing-bing-Bingo! :-)
SubEtha is a sophisticated mailing list manager, similar in many respects to the popular Mailman package. SubEtha is a three-tiered J2EE application using EJB3 and JMS. SubEtha has very easy installation on Windows and Unix platforms, a user-friendly web interface […]Changes: This project is self-hosting. The code is considered safe for production use, but it has not yet been extensively tested in the wild. Futhermore, there are two major features missing: fulltext searching of the archives has not yet been implemented, and the business tier has not yet been annotated for SOAP access.
und wem das noch nicht reicht, als kleine Zugabe:PETALS is an ObjectWeb Java Business Integration (JBI) platform. It provides lightweight and packaged integration solutions, based on JSR-208 specifications, with a high focus on distribution and clustering.
Versteht jemand, was dieses zweite Paket… tut? :-)
Meine Antwort: beides. Ich empfehle, sich die Programmiersprachen mal rudimentär anzugucken, und dann aber nicht ernsthaft los zu programmieren, sondern das Exploiten zu lernen. Rückblickend glaube ich, daß ein Gutteil meiner Programmierfähigkeiten darauf zurück zu führen ist, daß ich beim Cracken und Exploiten gelernt habe, wie Programmstrukturen von Compilern in Code abgebildet werden. Genau wie man Kinder in der Schule früher mal Latein lernen ließ (hab ich übrigens als 1. Fremdsprache gehabt, von der 5. bis zur 11. Klasse), damit sie ein gutes Sprach- und Grammatikgefühl entwickeln, empfehle ich Cracken Lernen, um ein gutes Gefühl für Code zu entwickeln. Langfristig ist Cracken und Exploiten aber nicht erfüllend. Also ich zumindest fand das nicht ausfüllend. Ja, es ist sehr faszinierend, aber a) kann man damit nicht so gut Geld verdienen, b) macht sich das auf der Vita nicht so toll, und c) ist es einengend für die Kreativität. Man kann in weniger Richtungen kreativ sein als beim Schreiben von Code.
Trotzdem würde ich das heute in weiten Teilen wieder genau so machen — erst Turbo Pascal, dann Assembler, dann C, dann Exploiten, dann C++, später Perl, Bourne Shell und Co nachschieben. Gut, den Basic-Teil würde ich mir heute sparen (*hust*), und rückblickend hätte ich mir auch Java und C# nicht angucken müssen; die haben mir beide nichts gegeben, was ich nicht vorher schon wußte.
Ich beobachte aber auch, wie immer weniger Leute bereit sind, überhaupt hinreichend Energie in etwas zu investieren, um sich damit jemals in die Nähe einer Perspektive zu bringen, Hacker zu werden. Natürlich kann nicht jeder überall der Oberheld sein, aber ich erwarte schon von jedem, daß er genug Ausdauer hat, sich in zumindest ein Thema mal tiefschürfend genug einzuarbeiten, daß ihm dort keiner mehr etwas vormachen kann. Und das kann ich immer weniger beobachten. Die Leute tendieren heute eher zu einer Art Universal-Durchschnitt. Die Abstände zwischen tollen neuen Hype-Trends werden immer kleiner, keiner hat mehr Zeit und Lust, sich die Sachen genauer anzugucken. Als ich jung war (*hust*), kamen PCs noch mit Handbüchern, in denen alle Befehle von GWBASIC beschrieben wurde, genau so wie debug.com und link.exe. Später wurden diese Sachen nicht mal mehr mitgeliefert. Ich war jung und hatte Zeit und habe mir das dann eben in Ruhe angeguckt. Ich enthülle hiermit: man wird Hacker, indem man Zeit hat und sie aufwendet, um sich mit einem Thema gut genug auszukennen, daß man mehr weiß als die Autoren der Standard-Fachliteratur zum Thema. Je nach eigenem Anspruch kann man sich auch nur dann Hacker nennen, wenn man sich in einem Gebiet erschöpfend auskennt, zu dem es (noch) gar keine Literatur gibt… :-)
Und dabei waren die Voraussetzungen noch nie so gut wie heute zum Hacker-Werden! Es gibt heute freie Betriebssysteme mit Editor, Compiler, Assembler und Linker kostenlos im Internet — mit Quellcode! Es kostet nichts mehr (außer Zeit), sich in die Sachen richtig gut einzuarbeiten! Man muss nicht mal Bücher kaufen, und heutzutage gibt es Suchmaschinen. Ihr wißt ja gar nicht, was das für ein Luxus ist, Kinder!
Zurück zum Thema. Heute kann jeder Hacker werden, der nur genug Zeit investiert. Als Hacker gewinnt man enorm an Selbstsicherheit, man ist gefragt auf dem Arbeitsmarkt, alles ist prima, aber aus irgendeinem Grund werden die Leute heute nicht mehr Hacker. Stattdessen hat die Verfügbarkeit freier Software zu einer Anspruchshaltung geführt, daß die Leute finden, wenn man schon nichts für Download und Installation zahlen muss, dann muss man auch danach keinen Aufwand investieren müssen. Den Nachwuchs in meinem Bekanntenkreis wird eher so High-Level-Fummler, klickt sich GUI-Anwendungen in einer IDE zusammen, hackt ein Python-Skript zum Mail-Sortieren, hat ein bißchen Java aus der Uni mitgenommen, steigt gerade auf C# um, sowas. Womit ich das nicht abwerten will, aber Hacken ist was anderes.
Es ist besser, in einer Sprache richtig gut als in 20 Sprachen Anfänger zu sein. Denkt da ruhig mal aus Sicht eines HR-Menschen drüber nach. Stellt euch vor, ihr seit der Headhunter, und ihr wäret mit einem Lebenslauf konfrontiert, bei dem jemand ein paar Applets (das klingt schon von alleine mittelmäßig und irgendwie abwertend) in Java gemacht hat, der gerade Windows Forms in Visual C# zusammenklicken lernt, der ein paar dynamische Webseiten mit PHP gemacht hat. Für was für einen Job soll so jemand denn bitte qualifiziert sein? Zum ct Lesen? Anspruchsvolle Jobs kann man so jemandem doch gar nicht geben! Wer sich nur oberflächlich mit Sachen beschäftigt, der wird auch nur oberflächliche Jobs bekommen. Was für eine grauenvolle Vorstellung… Insofern: setzt euch hin, sucht euch etwas aus, das ihr am besten noch nicht kennt, und arbeitet euch richtig tief ein. Nehmt euch dafür ein paar Monate. Hört erst auf, wenn ihr das Gefühl habt, selbst der Erfinder der Sache könnte euch nichts wirklich überraschendes mehr dazu erzählen. Solche Leute braucht das Land, nicht noch mehr Visual Basic Pfuscher.
In meinen Augen sind die meisten aktuellen Trends völlig überflüssig. Ich programmiere weder in Java, noch in C#, noch in Dylan. Ich spreche kein Python, kein PHP, kein Ruby, schon gar nicht Ruby On Rails. Ich benutze keine Middleware, keine Frameworks, keine Design Patterns (also ja, natürlich benutze ich Design Patterns, jeder benutzt Design Patterns. Aber ich benutze sie einfach so, nicht weil ich das in einem Buch gelesen habe). Gemessen am Stand der Technik bin ich auch in C++ und Perl eher Fußgänger als Rennfahrer. Ich benutze kein XML, kein CORBA, kein XML-RPC, kein SOAP. Wenn ich mal ein GUI für eine Anwendung brauche, wird es halt eine Webanwendung. Und zwar HTML, kein Javascript, und schon gar kein AJAX. Qt, Gtk, Motif? Am Ende gar noch mit KDE oder GNOME drüber gelayert? In der Zeit, bis ich mich da ordentlich eingearbeitet habe, schreibe ich lieber einen LDAP-Server. Wieso ordentlich einarbeiten und nicht einfach loshacken, höre ich da? Eine Sache, die es nicht wert ist, ordentlich gemacht zu werden, ist es nicht wert, überhaupt gemacht zu werden.
Und das sage ich euch: der nächste, der mich mit AJAX belästigt, wird einen furchtbaren, grausam verstümmelnden Unfall haben.