Eagle 804 Android-Tablet kommt mit SpyApp

Man hört ja immer mal wieder, daß frisch produzierte Hardware beim Kunden plötzlich mehr wiegt als sie sollte. Ein Softwareäquivalent dazu ist es, wenn ein Android Tablet mit vorinstallierter SpyWare daher kommt. Das BSI hat dazu eine (hier leicht gekürzte) aktuelle Warnung herausgegeben:

Empfehlung:
Das Bundesamt für Sicherheit in der Informationstechnik (BSI) empfiehlt, von einer Nutzung des 
Gerätes abzusehen.

Beschreibung:
Das Eagle 804 ist ein Android-Tablet des Herstellers Krüger&Matz.
Betroffene Systeme:
Krüger&Matz Eagle 804, Model-Nr: KM0804_01,
Build-Nr: Kruger&Matz_KM0804_1_V01_20170721
____________________________________________________________________________________________________
Zusammenfassung:
BSI-eigene Analysen [1] haben ergeben, dass eine vorinstallierte, bösartige App Geräteinformationen 
sammelt und diese an ein entferntes System sendet. Darüber hinaus meldet die Schadsoftware die 
Installation und Deinstallation von Apps durch den Benutzer an einen Server. Hierbei handelt es 
sich um eine Variante des in [2] beschriebenen Schadprogramms. Zusätzlich verfügt die genannte App 
über die Möglichkeit, unbemerkt über ein Netzwerk zu kommunizieren und bietet eine Hintertür zur 
Fernsteuerung des Geräts durch einen Angreifer an. Über diese sind unter anderem der Download sowie 
die Installation weiterer Schadprogramme möglich.
____________________________________________________________________________________________________
Quellen:
- https://www.bsi.bund.de/DE/Presse/Pressemitteilungen/Presse2019/Warnung_vorinst_Schadsoftware_260219.html
- https://news.sophos.com/en-us/2018/10/02/the-price-of-a-cheap-mobile-phone-may-include-your-privacy/

Wie findet man so eine Spyware ?

Wenn der Rootkit schon ab Werk drin ist, wird er sicher Maßnahmen dagegen getroffen haben, daß Programme ihn enttarnen können. Seinen Netzwerktraffic kann er aber nicht verstecken.

Mit einem Linux Laptop und der hostap Software, kann man sich einen eigenen Accesspoint aufbauen. Wenn man den nicht gerade Honeypot nennt, ist der nicht von einem normalen Accesspoint zu unterscheiden. Alles was man dann noch braucht ist tcpdump…. Apropos tcpdump.. das hatte im Dezember eine Lücke, über die erst heute berichtet wurde: Tcpdump CVE-2018-19519 Stack Based Buffer Overflow Vulnerability . Nicht, daß Ihr eine alte Softwareversion einsetzt und dann beim Überwachen der Hacker selbst gehackt werdet 😉

Wenn der Accesspoint steht und tcpdump läuft muß man nur darauf achten, was kontaktiert wird. Da man den Traffic auch auf die Platte bannen kann, sollte das nicht schwer werden. Filtert man dann alle regulären Zugriffe aus, muß, wenn etwas übrig bleibt, es von so einem Prozess stammen. Natürlich kann auch der Google PlayStore, Facebook oder sonst eine Bloatware Daten übertragen, aber da würde man am Ziel sicherlich erkennen können, ob es „legitim“ war.

Link: Was man sonst noch schönes mit einem eigenen mobilen AP machen kann…

Schwieriger etwas zu finden ist es, wenn der Rootkit nur auf Mobilfunk reagiert. Das läßt sich sehr schwer überwachen. So eine Femtozelle gibt es zwar für unter 1.000 €, aber trotzdem wird die kaum einer haben. Vodafone hat da Kunden mal so ein Leasingmodell angeboten, aber ob das noch steht? Mit so einer Femtozelle wäre eine Überwachung einer Neuanschaffung dann aber wieder möglich.

Docker – Genauso schlimm wie befürchtet

Jetzt ist es also endlich soweit, jemand hat man genauer hingeschaut und Dockerimages auf Schwachstellen untersucht. Das Ergebnis: Es ist genauso schlimm wie das von den Skeptikern erwartet wurde!

Kaum Sicherheitsupdates

Zunächst mal zur Quelle der Daten:

https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities/

Da ist eine schöne Grafik über die Anzahl der gefundenen Schwachstellen per speziellem Dockercontainer. Das NODE dabei übelst abgeschnitten hat, wundert mich seit meinen Kontakten damit nicht im geringsten. Ohne darauf groß einzugehen, eine Repoumgebung, die zig Versionen der gleichen Erweiterung bereithält, anstatt nur die mit den wenigsten Löchern drin, kann man nicht ernsthaft als Basis für irgendwas benutzen.

Jetzt zur Analyse oben

Die Skeptiker, Altbackenden, Konservativen, die Im-Weg-Steher hatten es von Anfang an gesagt:

Wenn man Apps in Container packt und eine für diese App gangbare Umgebung dazu legt, dann wird man am Ende jede Menge Container mit Sicherheitslücken haben. Und genau das ist dabei rausgekommen. Weil sie keiner updated, obwohl das möglich ist, dümmpelt eine Sicherheitslücke neben der anderen rum.

Der sicherere Ansatz ist und bleibt, daß jemand das OS vorgibt und sich die Apps an die Umgebung anpassen müssen. Damit sind die gezwungen Updates zu machen und das dient dann der allgemeinen Sicherheit.

QED. Und es wurde gerade demonstriert!

Abzulehnen ist also alles, was eine App installiert, die mit eigener Umgebung kommt, sowas wie FlatPak, Docker und Snap.

 

Blockchain Bullshitbingo

Das heutige (für Euch gestrige) Bingowort lautet (mal wieder) „Blockchain“. In folgenden Beiträgen wurde es bislang entdeckt:

Nach der Probenahme muss ihm zufolge die Eischale nicht wieder verschlossen werden, da sich die innere Eimembran von selbst wieder zusammenzieht. Die Genauigkeit liege bei rund 98 Prozent, die lückenlose Rückverfolgbarkeit des Prozesses stellt eine Blockchain sicher.

Quelle: https://www.heise.de/newsticker/meldung/Per-Laser-gegen-den-Huehnertod-4312665.html?wt_mc=rss.ho.beitrag.rss

Dabei hätten die Rechteinhaber über die Blockchain konsequent mit wasserfesten Lizenzen versorgt werden können.

Quelle: https://www.heise.de/newsticker/meldung/Urheberrechtsreform-CDU-CSU-Digitalexperte-verreisst-EU-Kompromiss-4313266.html

Das es heise.de getroffen hat, Pech, vielleicht weniger mit Politik, mehr Technik unterbringen. Ist nur so ein Vorschlag 🙂

Im ersten Beitrag ging es um die Erkennung des hühnischen Geschlechts bereits im Ei, um keine geborenen Tiere töten zu müssen,  im zweiten Artikel um die Äußerung einer/nes PolitikerIns zu Artikel 13 der neuen EU-Urheberrechtsreform.  Aber auch sonst ist heute wieder Bullshitbingo in den News : „Blockchain-Unternehmer“, „Blockchain-Bundesverband“ und “ Smart Contracts“ natürlich mit Blockchain.

Logischerweise braucht keine dieser Anwendungen eine verteilte Datenbank, deren Inhalt manipuliert werden kann, wenn jemand nur genug Rechenleistung einsetzt. Ob ein Ei ein Hähnchen werden sollte, oder eine Henne, muß man kaum in einer verteilten Kryptodatenbank speichern, genauso wenig wie private Verträge in einer, ja von wem eigentlich, betriebenen Datenbank stehen müßten. Und natürlich müssen auch Lizenzvereinbarungen nicht in einer global verteilten Datenbank stehen, die kann man auch bequem in einer normalen Datenbank speichern, die nicht soviel Energie verbrennt wie eine Blockchain.

Und der Hype geht weiter, der österreichische Kurier nennt die Blockchain, die „disruptivste“ Technologie seit dem Internet. Stimmt 🙂 1700 Kryptocoins, meistens wertlos, und jede Menge schwachsinns Ideen sind natürlich genau, was einen Hype ausmacht 🙂 Wenn die Technik so gut für alles ist, wieso gibt es dann keine praktischen Lösungen, die über „Wir haben was altes in Blockchain neuerfunden“ hinausgehen. Wäre das die Technologie der Zukunft, würde es schlagartig Anwendungen geben, weil die Technik gibts ja locker schon 10 Jahre. Da ist genug Zeit, eine brauchbare Anwendung zu finden. Was haben wir stattdessen ? Bitcoin … ein riesen Geldtransfer von „gierig“ zu „clever“ 🙂

Wer/was befeuert eigentlich son Hype?

Na Geschäftsleute und Politiker, die nicht abgehängt werden wollen und jetzt händeringend nach Möglichkeiten suchen. Blöd nur, daß die ersten Blockchain-Unternehmen schon wieder weg sind vom Markt. Die EU DS GVO machte Ihnen den gar aus 😀 Ich liebe die GVO 😀

Die Luxenburger Börse hat jetzt übrigens den Wertpapiertransfer per Blockchaineintrag als legal erklärt. Auch hier Frage, wer führt diese Blockchain und muß die wirklich verteilt sein ? Warum hat man nicht schon vorher eine digitale Signatur einer Kette von Einträgen benutzt? Und vorallem, wie verhindere ich, daß in der Blockchain was steht, aber die realen Papiere dann physikalisch nochmal verkauft werden, so gegen Bargeld ? Kommt am Ende raus, muß doch wieder einer aufpassen 🙂 und dann gehts auch wieder ohne Chain.

 

 

MariaDB Bugfix sorgt für ein bisschen Ärger

Ein kleiner selbstverursachter Logikfehler bei Datenbankstrukturen macht kleinen Webanwendungen grade ein bisschen Stress. Damit Ihr damit keinen Stress habt, eine kurze Erklärung zum Thema und wie man das behebt und vermeidet.

MariaDB Update

Bis vor kurzem hatten wir auf den Servern noch die MariaDB 10.1.33 laufen, jetzt die 10.2.21 . Beim Wechsel von 10.1 auf  10.2 haben die Devs von MariaDB den globalen SQL-Modus umgestellt, daß er jetzt eher failed, statt tolerant zu sein.

Eine Beispieltabelle:

beispiel

#NameTypKollationAttributeNullStandardKommentareExtra
1 int(11) Neinkein(e)AUTO_INCREMENT
2 int(11) Nein2
3 text utf8_general_ciNein
4 int(11) Neinkein(e)

Jetzt führen wir diesen Insert aus:

INSERT INTO beispiel SET id=NULL, test = 3, name=“Fritz“, counter = 0;

Klappt. Kein Fehler. Nächster Insert :

INSERT INTO beispiel SET name=“Hans“, counter = 0;

Klappt.Tabelle sieht jetzt so aus :

testnamecounterid
3Fritz01
2Hans02

Nun der Insert hier:

INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;

und schon kommt die Meldung:

ERROR 1364 (HY000): Field ‚counter‘ doesn’t have a default value

Vollkommen zurecht, weil ich im Insert der Datenbank durch Auslassung gesagt habe, nimm den Defaultwert für das ausgelassene Feld.  Da es keinen Defaultwert für das Feld gibt, kann die Datenbank den auch nicht benutzen.

Jetzt ist das aber in MariaDB 10.1 noch möglich gewesen. Das lag daran, daß sich mit 10.2.4 die Defaults des Servermode geändert haben und der Modus „STRICT_TRANS_TABLES“ jetzt aktiv ist, wenn die  Webanwendung das nicht selbst anders haben will. Beweis:

MariaDB [msctest]> INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;
ERROR 1364 (HY000): Field ‚counter‘ doesn’t have a default value
MariaDB [msctest]> SELECT @@SQL_MODE;
+——————————————————————————————-+
| @@SQL_MODE |
+——————————————————————————————-+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+——————————————————————————————-+
1 row in set (0.00 sec)

MariaDB [msctest]> set sql_mode = „ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“;
Query OK, 0 rows affected (0.00 sec)

MariaDB [msctest]> INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;
Query OK, 1 row affected, 1 warning (0.00 sec)

Jetzt die spannende Frage, mit was die Datenbank den Wert aufgefüllt hat, von dem Sie nicht weiß, wie der aussehen müßte:

idtestnamecounter
13Fritz0
22Hans0
59Killer0

Mit „0“ , was bei einem INT ja auch naheliegend ist.

Klare Ansage

Bevor jetzt jemand den MariaDB Entwicklern die Schuld dafür geben will, daß die eigene Webseite nicht mehr so funktioniert: selbst Schuld!

Ihr habt von vornherein einen Logikbug in Eurer Datenbankstruktur + Weblogik gehabt, sich darüber zu beschweren ist heuchlerisch. Da die Webanwendung sich selbst den Modus setzen kann, mit dem die Datenbank mit Ihr arbeiten soll, hätte man das ja auch mal selbst explizit so setzen können, wie man es braucht. Defaults können sich ändern, damit muß man rechnen.

Abhilfe schaffen

  1. Datenbankstruktur so ändern, daß ein Default vorhanden ist.
  2. Im Insert keine Felder auslassen, sondern explizit setzen.
  3. vor der Anwendung set sql_mode = „ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“;  absetzen, dann hat man wieder das alte Verhalten

Viel Spaß jetzt damit 🙂

Die Größe von installierten Paketen ermitteln – RPM Edition

Was Niko in seinem Techgruben-Beitrag Größe von installierten Paketen anzeigen für debianbasierte Paketmanager schön gezeigt hat, geht leider bei RPMs nicht ganz so leicht, aber das wird uns nicht aufhalten. @Nico: Guter Beitrag.Weitermachen 🙂  In meinem Beitrag geht es heute nicht nur um die Größe, sondern auch um das „wie man zum Ergebnis kommt“. Wer die Lösung sucht, die ist ganz am Ende.

Die Größe von installierten Paketen ermitteln

Die Option „-q“ steht bei rpm für Query, also die Datenbankabfrage. rpm -q paketname  liefert den vollständigen Paketnamen aus. Einfaches Beispiel:

$ rpm -q firefox
firefox-65.0-4.fc28.x86_64

Wir haben den Paketnamen, klasse. Und nun ? Wenn wir mehr über Firefox wissen möchten, dann müssen wir RPM das sagen:

$ rpm -qi firefox
Name : firefox
Version : 65.0
Release : 4.fc28
Architecture: x86_64
Install Date: Mo 18 Feb 2019 12:01:46 CET
Group : Unspecified
Size : 221446243
License : MPLv1.1 or GPLv2+ or LGPLv2+
Signature : RSA/SHA256, Di 05 Feb 2019 12:51:38 CET, Key ID e08e7e629db62fb1
Source RPM : firefox-65.0-4.fc28.src.rpm
Build Date : Mo 04 Feb 2019 19:07:57 CET
Build Host : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager : Fedora Project
Vendor : Fedora Project
URL : https://www.mozilla.org/firefox/
Bug URL : https://bugz.fedoraproject.org/firefox
Summary : Mozilla Firefox Web browser
Description :
Mozilla Firefox is an open-source web browser, designed for standards
compliance, performance and portability.

Die Option „i“ gibt uns also detaillierte Informationen über das Paket aus. Da könnte man mit grep und viel Bashmagie was drehen. Bleibt noch das Problem, daß wir den Paketnamen brauchen. Das können wir leicht umgehen, in dem wir pauschal alle Pakete auflisten lassen. Die Option „-a“ macht es möglich:  rpm -qia  . Probiert es nicht aus, das ist echt viel an Infos 🙂

Das Queryformat

Natürlich geht das besser, denn RPM bietet an, daß es die Infos genauso ausgibt wie man es braucht. Die nötige Option lautet „–queryformat“ :

$ rpm -q firefox –queryformat „%{NAME} uses %{SIZE:humaniec}\n“
firefox uses 211M

Schön, damit kann man arbeiten 🙂 Die Größe nach vorn, Paketname dahinter:

$ rpm -q firefox –queryformat „%{SIZE:humaniec}:%{NAME}\n“
211M:firefox

Das ist schon besser. Da kann man einen Sort drauf ansetzen:

rpm -qa –queryformat „%{SIZE:humaniec}:%{NAME}\n“ | sort -r -n

„-r -n“  Reverse, also groß zuerst, und numerisch sortieren. Sort erkennt automatisch, was keine Zahl mehr ist und sortiert entsprechend. Aber stimmt die Ausgabe auch wirklich?

Schauen wir uns mal die Top 30 an :

$ rpm -qa –queryformat „%{SIZE:humaniec}:%{NAME}\n“ | sort -r -n | head -n 30

1024K:python2-coverage
1022K:openssh-server
1019K:xorg-x11-drv-wacom
1019K:libgcrypt
1018K:tix
1016K:libmx
1015K:vte
1015K:python2-simplejson
1010K:pyzy
1009K:ncurses-libs
1008K:libappstream-glib
1007K:libxcb
1007K:libodfgen
1007K:boost-locale
1006K:eris
1006K:dracut
1004K:libxcb
1004K:libtomcrypt
1003:openoffice-brand-impress
1002:openoffice-brand-writer
1000:openoffice-brand-math
1000:openoffice-brand-draw
1000:openoffice-brand-calc
1000:openoffice-brand-base
999K:at-spi
997K:vte3
996K:mdadm
995K:rubberband
995K:ncurses-libs
994K:cjs

Ein Paket mit 1024 KB, also 1 MB, soll das größte Paket in der Liste sein? Das kann nicht sein.  Ist es auch nicht. Schon das Firefoxpaket von oben hat 211 MB. Wo ist da jetzt der Fehler?

Ist klar, wir lassen die Paketgröße mit dem Zusatz „:humaniec“ ausgeben. Das erzeugt die 211M oder 1024K , weil „211M:firefox“ besser lesbar ist für Menschen, also „221446243:firefox“. Nun ist aber 1024 größer als 211 🙂 Sort hat also alles richtig gemacht, aber die sortierten Informationen waren falsch vorbereitet.

So wird es besser

$ rpm -qa –queryformat „%{SIZE}:%{NAME}\n“ | sort -r -n | head -n 30
2104146639:0ad-data
573182723:supertuxkart-data
526795437:wesnoth-data
369138973:wine-debuginfo
346355557:linux-firmware
319608404:naev-data
250326767:wine-staging64
242843598:skypeforlinux
236453994:wine-core
221999655:wine-staging-common
221446243:firefox

Wenig überraschend toppt 0.AD alle anderen Pakete mit seinen 2GB an Grafikdaten 😉 Firefox mit seinen 211 M liegt abgeschlagen auf Platz 11 😉

Es geht auch etwas kürzer, aber nicht viel:

rpm -qa –qf „%{SIZE}:%{NAME}\n“ | sort -rn | head -30

Natürlich habe ich mal rumgeschaut, was zu dem Thema schon mal verfasst wurde. Leider war nichts besseres da, da es wohl schon das Optimum ist. Aber man kann natürlich immer noch was daraus lernen, z.b. wie man mit AWK Bytes in MB umrechnen kann :

rpm -qa –qf ‚%{SIZE} %{NAME}\n‘ | awk ‚{printf(„%sMb %s\n“, $1 / 1000 / 1000, $2)}‘ | sort -k1 -n

Dummerweise funktioniert das Sort in der Ausgabe nicht sauber, aber der AWK Teil ist nett 🙂
(Quelle für den AWK Part: list-all-packages-by-installed-size-bytes-on-rpm-distros )