WIFI: Die FRAGATTACK Apokalypse

Ja, der Titel wäre Click-Bait, wenn es nicht wirklich so schlimm wäre, wie es ist: praktisch jeder Wifi-Stack der bis heute produziert wurde, ist für die FragAttack anfällig.

WIFI: Die FRAGATTACK Apokalypse

Der Name FragAttack ist hier nicht wie sonst üblich ein Akronym für irgendwas langes, sondern bezieht sich ausnahmsweise mal auf die Grundlage des Angriffs: Fehler bei Zusammenfügen von Paketfragmenten.

„Fragmentierung“ meint, daß einzelne große Datenpakete, die nicht durch das Netz/Kanal passen, in kleinere Pakete aufgeteilt und beim Empfänger wieder zusammen gesetzt werden. Das passiert bei IP-Datenpaketen im normalen Netz auch laufend, ist an sich nicht besonderes.

Die Schwachstellen sind in praktisch jeder Implementierung von WEP bis WPA3 enthalten, wobei nicht jede davon überall sein muß.

12 Fehler sollt Ihr sein

Insgesamt wurden 12 Schwachstellen in verschiedenen Implementierungen bzw. dem Wifi-Protokoll an sich gefunden;

CVE-2020-24588: Akzeptieren von nicht-SPP A-MSDU-Frames
CVE-2020-24587: Wiederzusammensetzen von Fragmenten, die unter verschiedenen Schlüsseln verschlüsselt wurden
CVE-2020-24586: Fragmente werden nicht aus dem Speicher gelöscht, wenn eine (erneute) Verbindung zu einem Netzwerk hergestellt wird
CVE-2020-26145: Akzeptieren von Klartext-Broadcast-Fragmenten als vollständige Frames (in einem verschlüsselten Netzwerk)
CVE-2020-26144: Akzeptieren von Klartext-A-MSDU-Frames, die mit einem RFC1042-Header mit EtherType EAPOL beginnen (in einem verschlüsselten Netzwerk)
CVE-2020-26140: Akzeptieren von Klartext-Datenframes in einem geschützten Netzwerk
CVE-2020-26143: Akzeptieren von fragmentierten Klartext-Datenframes in einem geschützten Netzwerk
CVE-2020-26139: Weiterleitung von EAPOL-Frames, obwohl der Absender noch nicht authentifiziert ist
CVE-2020-26146: Wiederzusammensetzen von verschlüsselten Fragmenten mit nicht-fortlaufenden Paketnummern
CVE-2020-26147: Wiederzusammensetzen von gemischten verschlüsselten/Klartext-Fragmenten
CVE-2020-26142: Verarbeitung von fragmentierten Frames als vollständige Frames
CVE-2020-26141: Keine Verifizierung des TKIP-MIC von fragmentierten Frames

„CVE-2020-24587: Wiederzusammensetzen von Fragmenten, die unter verschiedenen Schlüsseln verschlüsselt wurden“ Ist ein Paradebeispiel dafür, daß ganz schlicht jemand einfach mal eine kleine „if ( oldkey == actualkey)“ Abfrage im Code vergessen hat. Wenn man den Testfall nicht dabei hat, weil man nur ein Netz mit nur einem Schlüssel hat, dann kann das schon einmal passieren.

Die Hacker News schreiben dazu, daß Mathy Vanhoef, ein Sicherheitsforscher der New York University Abu Dhabi, die Probleme auf weit verbreitete Programmierfehler zurückführt.

„Ein böser Akteur kann diese Schwachstellen ausnutzen, um beliebige Netzwerkpakete zu injizieren, Benutzerdaten abzufangen und zu exfiltrieren, Denial-of-Service-Angriffe zu starten und möglicherweise sogar Pakete in WPA- oder WPA2-Netzwerken zu entschlüsseln.“

Es sind sogar Angriffe denkbar bei denen  in das Netz oder am Netz beteiligte Rechner eingebrochen werden kann. Dabei wären dann Geräte interessant die keine Updates mehr bekommen haben, wie z.B. so ziemlich jedes Androidgerät älter als 2 Jahre, Windows XP/7 oder Macs.

Die Wifi-Allianz hat in einer mehr als neunmonatigen konspirativen Aktion sukzessive die Gerätehersteller kontaktiert und Updates verteilen lassen. Wohl dem, der die noch bekommt.

Für Windows wurden die Updates schon eingespielt, bei Linux sind auch bereits Patche in den Kernel eingeflossen, müssen aber noch etwas reifen. Da die Lücken nicht ganz so leicht auszunutzen sind, wie das vielleicht klingen mag, ist das „erst einmal“ kein Problem… bis es dann zum Problem wird 😉

Exploits sind nicht auszuschließen, also kümmert Euch am besten auch um Eure ganzen IoT Geräte, DSL-Router, Access-Points und Uralt-Androids.. wenn Ihr noch könnt.

Quelle: https://thehackernews.com/2021/05/nearly-all-wifi-devices-are-vulnerable.html

Pinephone: wie man ohne Phosh ein Handyfeeling simuliert

Was haben Pinephone Apps und Android Apps nicht gemeinsam? Genau, jede Pinephone aka Linuxapp macht ihr eigenes Fenster in ihrer Lieblingsgröße auf. Das ändern wir heute.

Pinephone: wie man ohne Phosh ein Handyfeeling simuliert

Um das machen zu können, brauchen wir ein dauerhaft laufendes Programm. Idealerweise würde so etwas der Windowmanager übernehmen, der läuft eh, aber da es Gnome ist, naja, nicht so schnell umsetzbar. Also machen wir das mit einem Script: windowmaximixerwatch

#!/bin/bash

rm -f /tmp/liste
i="0"
while [ $i -lt 1 ];
do 
	windowmaximizer > /dev/null
	sleep 1
	RC=$(ps auxf| grep -c gnome-shell)
	if [ $RC -eq 0 ]; then 
		i=1
	fi
done

Diese Datei wird nach /home/pine/.local/bin/windowmaximizerwatch geschrieben

„Das macht ja gar nicht so viel“ Stimmt, aber das ist ja auch nur ein Teil davon. Wie man leicht erkennen kann, ist das eine Programmschleife, die nur dann abbricht, wenn kein Gnome-Shell-Prozess (mehr) vorhanden ist.

Das Programm „windowmaximizer“ ist auch nur wieder ein Shellscript, das die ganze Arbeit macht:

#!/bin/bash

#1 
ISONBOARDOPEN=$(wmctrl -l | grep -c Onboard)

#2 
RESOLUTION=$(xdpyinfo | grep dimens | awk '{print $2;}')
X=$( echo $RESOLUTION | awk -F "x" '{print $1;}')
Y=$( echo $RESOLUTION | awk -F "x" '{print $2;}')

#3
ORIENTATION="landscape"
if [ $Y -gt $X ]; then 
        ORIENTATION="portray";
fi

#4 
LASTORIENTATION=$(cat /tmp/display.orientation.last);
if [ "$LASTORIENTATION" != "$ORIENTATION" ]; then

        # REMOVE OLD IDs as all needs to get maxed newly, because we had a layout orientation switch
        rm -f /tmp/liste
fi

echo "$ORIENTATION" > /tmp/display.orientation.last;

#5 create new /tmp/liste if missing:

touch /tmp/liste

# place Onboard window at the correct position and define variables for wmctrl cmds:

if [ "$ORIENTATION" == "portray" ]; then

        wmctrl -l | grep Onboard | awk '{print "echo "$1";wmctrl -i -r "$1" -e 2,0,1170,720,270";}' | bash
        TOP=41
        WIDTH=720
        if [ $ISONBOARDOPEN -eq 0 ]; then 
                HEIGHT=1440
        else 
                HEIGHT=1130
        fi

else
        wmctrl -l | grep Onboard | awk '{print "echo "$1";wmctrl -i -r "$1" -e 2,0,450,1440,270";}' | bash
        TOP=41
        WIDTH=1440
        if [ $ISONBOARDOPEN -eq 0 ]; then 
                HEIGHT=720
        else 
                HEIGHT=410
        fi
fi 

#6 now ALL windows WITHOUT Onboard, that are still unprocessed ( not in our brain file ), get processed. This is needed as resizing causes a lot of pain to the eye, as it flickers, even if it's not needed.

LISTE=$(wmctrl -l | grep -v Onboard | awk '{print $1;}')

for id in $LISTE
do 
        echo "processing $id";
        RC=$(grep -c $id /tmp/liste)
        if [ $RC -eq 0 ]; then 
                echo "resizing $id"
                wmctrl -i -r "$id" -e 5,0,$TOP,$WIDTH,$HEIGHT
                wmctrl -i -r "$id" -b toggle,maximized_vert,maximized_horz
                wmctrl -i -r "$id" -e 5,0,$TOP,$WIDTH,$HEIGHT
#               wmctrl -i -r "$id" -b remove,fullscreen
                echo $id >> /tmp/liste
        fi
done

#7
# Now we check, if all ids in your brain file are still open windows. Thats needed, because same windows, get the same id, when they are closed and repopend.
# if they are closed we need to remove the id, because we need to reposition them again on next open.

LISTE=$(cat /tmp/liste)
for id in $LISTE
do

        RC=$(wmctrl -l |grep -c $id)
        if [ $RC -eq 0 ]; then
                # Entferne Windows die weg sind!

                echo "remove id $id";

                grep -v $id /tmp/liste > /tmp/liste2;
                rm -f /tmp/liste;
                mv /tmp/liste2 /tmp/liste;
        fi 
done

Diese Datei wird nach /home/pine/.local/bin/windowmaximizer geschrieben.

  1. wir stellen erstmal fest, ob das Onboard OSK läuft. Das ist wichtig für die Berechnung der Fenstergröße, auf die die Apps gezogen werden müssen.
  2. xdpyinfo teilt uns die Bildschirmauflösung und jede Menge anderen Kram mit.
  3. Anhand der ermittelten X/Y Koordinaten legen wir fest, ob wir im Landscapemode ( 1440×720 ) oder Portraymode ( 720×1440 ) arbeiten.
  4. Wenn sich die Orientierung innerhalb des letzten Aufrufes geändert hat, löschen wir die gesicherten FensterIDs, so daß alle Fenster auf die neuen Gegebenheiten umgeändert werden.
  5. nun repositionieren wir das Onboard OSK passend zur Orientierung an die richtige Stelle und berechnen gleich noch die Variablen für die Fensterhöhe und -breite.
  6. nun werden alle Fenster, deren FensterIDs wir noch nicht bearbeitet hatten, was in einer Datei gespeichert wird, auf Position gebracht. Das sind die, die in der letzten Sekunde noch nicht da waren.
  7. Natürlich muß man auch mal aufräumen, was in diesem Fall meint, daß alle FensterIDs aus der Speicherung entfernt werden, die nicht mehr präsent sind. Normalerweise würde man ja annehmen, daß FensterIDs fortlaufend sind, aber nicht bei uns, da werden die FensterIDs wiederverwendet. Tja.

Das funktioniert ganz gut, von Gnome selbst mal abgesehen. Alles was wir jetzt noch machen müssen, ist dem ganzen ein Desktopfile zu erstellen, damit es in der Appübersicht auftaucht:

[Desktop Entry]
Version=1.0
Name=WindowMaximizer
Name[de_DE]=WindowMaximizer
Exec=windowmaximizerwatch
#Terminal=false
Type=Application
StartupNotify=true
#Icon=cs-login
Icon=/usr/share/icons/Mint-X/apps/96/cs-login.svg
MimeType=x-content/unix-software
Categories=Network;
Keywords=web;internet;
X-Desktop-File-Install-Version=0.23

Diese Datei wird nach /usr/share/applications/windowmaximizer.desktop geschrieben.

Wenn alle Shellscripte mit chmod 755 versehen wurden, kann es losgehen. Ich rate dazu ein anderes Icon zu benutzen, da müßt Ihr allerdings selbst sehen, welches Ihr nehmen wollt.

Mit dem Gnome-Tweak-Tools ( Optimierungen ) kann man das Script als App im Startmenü platzieren und so sollte es beim nächsten Start des Desktops automatisch mitstarten. Wenn es das nicht tut, einfach von Hand selbst starten.

Ab nun werden alle-gnome Fenster maximiert und selbst bei Gnome-Fenstern klappt das gelegentlich ( die haben so eine Art Tagesform ). Wer das ganze verbessern will, kann noch eine APP Datenbank aufbauen, aus der z.b. festgelegt wird, ob eine Anwendung in Fullscreen gehen soll, oder nicht. Ist nur so ein Gedanke.. an einen weiteren Bugreport bei Gnome 😉 Natürlich habe ich das schon ausprobiert 😀

In 3 Tagen sehen wir uns wieder. Achtet auf die täglichen kleinen Pine Updates, die kommen alle außer der Reihe rein. Öfters Reinschauen oder gleich den RSS-Feed abonnieren.

 

Pinephone: Judgement Day!

Remmina: Live Video und Ton

Kleines Update zum RDP-Clienten Remmina.

Remmina: Live Video und Ton

Ohne groß etwas zu tun, kann Remmina seid einiger Zeit etwas mehr als xFreeRDP, nämlich Ton von einem Windowssystem abspielen. Es fiel mir beim Login eher nebenbei auf, daß der Windowsloginton kam, was sonst nicht passierte. Also habe ich da mal nachgeforscht und Youtube gestartet 🙂

Das Ergebnis kann sich sehen lassen, nicht nur, daß das Video ordentlich rüberkam, auch der Ton war syncron.

Tests mit XRDP als Server haben da leider ergeben, daß das nicht zwangsläufig so sein muß. Der kann das auch mit den richtigen PulseAudioLibs, aber gut funktioniert es nicht. Deswegen war ich auch so überrascht, daß es mit dem Windows RDP so gut lief.

Ihr könnt es ja selbst mal ausprobieren, da auf Seiten von Remmina nichts weiter eingestellt werden muß.