Linux

April 2, 2020

How to use Zoom with a Sandbox

With Corona, video conferences are on the rise, and organizations tend to use Zoom. The problem is that Zoom shows more and more security holes, bad practices, and privacy-related problems.

Zoom has a version that runs in the browser, but in my experience, it runs much worse than the native application. As running the native application is a security and privacy risk, let's see how we can use Linux sandbox techniques to restrict what the Zoom client can access.

1) Use flatpak.
Flatpak uses a sandbox called bubblewrap that isolates it from most of your personal data. You can find Zoom on Flathub.

If you do not have flatpak, you could try to use the bubblewrap sandbox without flatpak or try using firejail, but for most people it is much easier to just use flatpak.

2) Use Flatseal to revoke access to data that Zoom does not need to be able to access before running Zoom the first time. You can remove access to all host files (filesystems=host and filesystems=home disabled) without any problems.

This already solves many security and privacy issues of Zoom.

The problem that still remains is that Zoom generates personalized identifiers by using your network card's unique hardware address.

3) Restricting Access to your network devices: Now Zoom is isolated from your private files, but when you already used Zoom and have a look at $HOME/.var/.var/app/us.zoom.Zoom/config/zoomus.conf you will notice that Zoom uses your MAC-Address as identifier in the line deviceID=XX:XX:XX:XX:XX:XX.

There is a way to protect against this when you really want Zoom not to know such unique identifiers by using network namespaces.

Our setup is based on this introduction to Linux network namespaces. We will need some additional routing for network access and a tool to allow normal users to run applications in a network namespace for running Zoom inside a private network namespace.

Setting up a network namespace for Zoom:

sudo ip netns add zoom # Create the namespace "zoom"
sudo ip link add veth0 type veth peer name veth1 # Create connected virtual interfaces
sudo ip link set veth1 netns zoom # Assign the second interface to the network namespace "zoom"

You can now verify that you only see the virtual interface by running ip netns zoom exec ip link show. This runs the command ip link show inside the namespace "zoom" and you should see a loopback interface "lo" and the virtual interface "veth1" inside the new namespace.

When running ip link show alone, you should see your usual host network interfaces and "veth0", but no device "veth1".

Next, we need to assign IPs and set up a default route inside the network namespace so that Zoom can reach its servers. We will use the net 10.0.0.0/24 for the interfaces. When you already use this net, you need to choose another IP range.

# Activate the interface in the default namespace
sudo ip link set up veth0
sudo ip addr add 10.0.0.1/24 dev veth0
# Activate the interface inside the zoom namespace
sudo ip netns exec zoom ip link set up veth1
sudo ip netns exec zoom ip addr add 10.0.0.2/24 dev veth1
# Add a default route inside the namespace
sudo ip netns exec zoom ip route add default via 10.0.0.1
# Enable IP forwarding
sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

Now we can communicate with the host outside of the zoom namespace and need to add routing into the internet. We use iptables with a NAT setup for this:

sudo iptables -P FORWARD -j DROP # Drop all packets that are not matched by another rule.
sudo iptables -I FORWARD -s 10.0.0.0/24 -j ACCEPT # Forward packets for IPs from inside the namespace
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE # Use NAT for packets from the zoom network

To be able to use the namespace without root privileges you need to install netns-exec. This tool allows every user on the computer to run programs in another network namespace, so do not install it if this is a problem for you.

Now run netns-exec zoom IP link as a normal user to verify that you can execute programs in the network namespace and that you can only see the virtual network device.

When everything works, you can start using Zoom by running

netns-exec zoom flatpak run us.zoom.Zoom

Afterward, you can verify that zoomus.conf contains the virtual MAC address from the veth network interface instead of the unique MAC address of your network card.

Feedback If anything does not work for you, please leave a comment so that I can improve this article.

Kategorien: english Software Linux Sicherheit
Tagged: Zoom Flatpak network namespace netns Security Privacy

4 Kommentare

Juni 4, 2014

Fehlermeldung des Tages

Fehlermeldung des Tages:
Out of memory: Kill process 8177 (...) score 235 or sacrifice child

Kategorien: Linux
Tagged: Out of Memory sacrifice child

0 Kommentare

Nov. 22, 2011

Linuxtipp: Welche Prozesse benutzen Swap?

Wenn ein Linux-System Auslagerungsspeicher nutzt, wird es normalerweise langsam, weil das Lesen von der Festplatte deutlich langsamer ist als das Lesen aus dem RAM. Wenn ein Prozess wirklich nicht benutzt wird kann er allerdings im Swap liegen und das System läuft sogar schneller, weil es den RAM des Prozesses wieder zur Verfügung hat.

Ob man wirklich mehr RAM braucht hängt also davon ab ob Prozesse, die aktiv genutzt werden, im Swap liegen oder nur Prozesse, die ausgelagert wurden, weil sie sowieso inaktiv sind.

Nur wie stellt man das fest? Mit den gängigen Linux-Tools ist das schwer auszulesen. Aber es gibt Abhilfe:

Erik Ljungstrom hat ein praktisches Shellscript geschrieben, das ausgibt welcher Prozess wieviel Swap benutzt.

Beispiel:

$ sudo ~/bin/swapusage.sh 
PID=1 - Swap used: 108 - (init )
PID=2 - Swap used: 0 - (kthreadd )
[...]
PID=312 - Swap used: 472 - (udevd )
PID=438 - Swap used: 460 - (udevd )
PID=439 - Swap used: 512 - (udevd )
[...]
PID=3057 - Swap used: 956 - (console-kit-dae )
PID=3171 - Swap used: 64 - (screen )
PID=3172 - Swap used: 14224 - (irssi )
[...]
PID=24750 - Swap used: 0 - (bash )
PID=24794 - Swap used: 0 - (screen )
PID=25387 - Swap used: 0 - (bash )
PID=25445 - Swap used: 0 - (sudo )
PID=25446 - Swap used: 0 - (swapusage.sh )
[...]

(Ausgabe gekürzt)

In dem Beispiel ist das einzige Programm das nennenswert Daten im Swap liegen hat irssi. Da irssi trotzdem nicht spürbar langsam ist liegt der Verdacht nahe dass vielleicht längere Backlogs im Swap liegen, die nur nötig sind wenn man wirklich mal in einem Fenster wieder hochscrollt.

Kategorien: Linux
Tagged: linux Tipp Swap Shell Script

0 Kommentare

Nov. 19, 2009

Bash-Prompt

Mal ein neuer Post zu praktischen Bash-Prompts, nachdem ich den alten doch wieder um einiges überarbeitet habe.

Ziele:

  • Übersichtlichkeit
  • Möglichst lange Eingabezeilen ohne Umbruch
  • Prompt soll auf verschiedenen Hosts unterscheidbar sein
  • Der Prompt soll möglichst informativ sein.
Lösung:
  • Zweizeiliger Prompt, eine Zeile mit vielen Informationen, eine mit nur einem > und der Eingabe dahinter.
  • Username und Hostname Farbkodiert, geschieht automatisch ueber eine Hashing-Funktion
  • Zeitausgabe ermöglicht es einfach zu sehen wann der Befehl beendet wurde, und damit auch wie lange er gebraucht hat.
  • Smiley in der Ausgabe zeigt ob der Befehl korrekt gelaufen ist (Return Code 0 = kein Fehler)
Um Farben aus hostname/username zu generieren, kann man einfach md5sum als hash-Funktion nutzen, und dann das erste Byte der md5summe ansehen. Das tut die Funktion hashcolor in meiner .bashrc. Dabei habe ich mir noch die Freiheit genommen, die Farben so zu sortieren, dass der Text  "root" eine Rote Farbe bekommt.

die Umgebungsvariable PROMPT_COMMAND darf einen Befehl enthalten, der ist in dem Falle die Funktion Prompt, welche auf der Linux-Konsole nur setps1 aufruft um den Prompt zu ändern, und in X-Terminals aber auch settitle und mittels Escape-Code den Titel des Fensters auf das letzte genutzte Kommando zu setyen.

Der Prompt sieht bei mir jetzt so aus:

12:59:56 :-) username@hostname:~

>

Die .bashrc dazu:
# If running interactively, then:
if [ "$PS1" ]; then
    ## aendert den xterm-Titel in das zuletzt benutzte Kommando usw.
    xtitle() {
        echo -ne "\033]0;[$(history 1 | cut -b 8-30)] $USER@$HOSTNAME:$PWD\007";
    }
    setps1() {
        if [ $? -eq 0 ];then smiley=":-)"; else smiley=":-(";fi
        export PS1="\t $smiley \[`hashcolor $USER`\]\u\[$grey\]@\[`hashcolor $HOSTNAME`\]\H\[$grey\]:\[$yellow\]\w\n\[$normal\]> "
    }
    if [ "${TERM}" != "linux" ]; then
        prompt() {
            setps1
            xtitle
        }
    else
        prompt() {
            setps1
        }
    fi
    PROMPT_COMMAND='prompt'
fi

normal='\e[0m' black='\e[0;30m' bblack='\e[1;30m' red='\e[0;31m' bred='\e[1;31m' green='\e[0;32m' bgreen='\e[1;32m' yellow='\e[0;33m' byellow='\e[1;33m' blue='\e[0;34m' bblue='\e[1;34m' purple='\e[0;35m' bpurple='\e[1;35m' blue2='\e[0;36m' bblue2='\e[1;36m' white='\e[0;37m' bwhite='\e[1;37m' grey='\e[0;39m' bgrey='\e[1;39m'

bgnorm='\e[0;0m' bgblack='\e[0;40m' bgred='\e[0;41m' bggreen='\e[0;42m' bgyellow='\e[0;43m' bgblue='\e[0;44m' bgpurple='\e[0;45m' bgblue2='\e[0;46m' bggrey='\e[0;47m'

function hashcolor { case $(echo $1|md5sum|cut -b 1) in 0)echo -en $red;; 1)echo -en $bblue;; 2)echo -en $green;; 3)echo -en $bgrey;; 4)echo -en $yellow;; 5)echo -en $byellow;; 6)echo -en $blue;; 7)echo -en $bred;; 8)echo -en $purple;; 9)echo -en $bpurple;; a)echo -en $blue2;; b)echo -en $bblue2;; c)echo -en $grey;; d)echo -en $bgreen;; e)echo -en $white;; f)echo -en $bwhite;; esac }

Die interessanten Manpages zu dem Thema sind:
  • man console_codes erklärt die Escape Codes z.B. für Farben oder auch um den Titel eines X-Terminals zu ändern.
  • man bash erklärt, dass man Farbcodes in \[...\] einschliessen sollte, damit sie den Zeilenumbruch im Prompt nicht kaputt machen.

Kategorien: Software Linux
Tagged: Bash Prompt color farben

3 Kommentare

Okt. 30, 2009

Finger weg von Ubuntu One?

Dass es gefährlich ist private Daten unverschlüsselt auf fremden Servern zu lagern, sollte einem zwar klar sein, aber für manche Daten reicht diese Sicherheit ja vielleicht. Aber Ubuntu One hat eine ähnliche Klausel wie ICQ in ihren "Terms and Conditions":
9. Collection and use of your data. We may collect certain non-personally-identifiable information, which is located on your computer. The information collected may include statistics relating to how often data is transferred, and performance metrics in relation to software and configuration. You agree this information may be retained and used by Canonical.
Ähnlich wie im Falle ICQ kann man argumentieren "ja die meinen ja nur Statistiken ...", rechtlich jedoch akzeptiert man dass alle Daten die einen nicht persönlich identifizieren von Canoncial gesammelt und benutzt werden dürfen. Also Rat für alle die ihre Daten nicht Canoncial schenken möchten: Finger weg von Ubuntu One!

Ach ja, nur damit es erwähnt ist, sie lassen sich natürlich auch zusichern, dass sie die Nutzerdaten an die Polizei weitergeben dürfen, wenn sie gesetzlich dazu verpflichtet sind. Da wird man aber kaum einen Anbieter finden, der keine solche Klausel hat.

Kategorien: Linux Sicherheit Datenschutz
Tagged: Daten Ubuntu One Terms Conditions persönliche collect personally-identifiable

0 Kommentare

Okt. 18, 2009

Ganz komischer Xorg Fehler

Vielleicht weiß ja jemand die Antwort, der Fehler ist sehr seltsam. Also ich kann in Browsern (Firefox, Opera nicht aber Konqueror) keine Zeichen mit AltGr eingeben, in anderen Programmen als den Beiden aber schon. Das wäre ja halb so komisch, und vielleicht ein Fehler in der xorg.conf bzw. der Tastaturconfig von KDE(4), aber ich habe zusätzlich noch einen Effekt:

Ich nutze Fokus-folgt-der-Maus. Wenn ich ein Fenster im Vordergrund vor dem Browser habe, welches den Fokus momentan hat, und der Mauszeiger befindet sich über dem Browser, kann ich in dem Fenster tippen, aber keine Zeichen die AltGr als Taste benötigen. befindet sich der Mauszeiger über dem Fenster mit Fokus, kann ich ganz normal alle Zeichen tippen.

Weiß irgendwer, was das für ein komischer Fehler sein kann?

Kategorien: OpenSource Linux
Tagged: Browser Opera Firefox Fehler Xorg komisch

2 Kommentare

Feb. 24, 2009

.ape / .cue Dateien konvertieren

APE ist das Monkey's Audio Format, ein verlustfreier Audiocodec. Abgesehen davon kennt natürlich kaum ein Player das Format. Man kann die Dateien aber unter Linux mit den Programmen mplayer, bchunk, lame relativ einfach konvertieren: mplayer -vo null -vc null -ao pcm:fast *ape;bchunk -w audiodump.wav *.cue track;rm audiodump.wav;for i in *.wav;do lame --preset extreme $i;done;rm *.wav Im Detail: mplayer -vo null -vc null -ao pcm:fast *.ape Spielt die .ape Datei quasi ab und speichert das Ergebnis in audiodump.wav. bchunk -w audiodump.wav *.cue track trennt audiodump.wav an den Stellen die in der .cue Datei stehen, und nennt die Ergebnisse trackXY.wav. Mit -w schreibt es zusätzlich Wave-Header. rm audiodump.wav Entfernt audiodump.wav damit es nicht auch (als Ganzes) nochmal kodiert wird. for i in *.wav;do lame --preset extreme $i;done Kodiert die .wav in .mp3 mit sehr guter Qualität. rm *.wav Entfernt die übrig gebliebenen .wav Dateien.

Die Commandline geht davon aus, dass sich im Verzeichnis nur eine .ape und eine .cue Datei befinden, und dann funktioniert der Befehl ohne die Namen zu kennen. Befinden sich mehrere im aktuellem Ordner, funktionieren die Anweisungen nicht, weil zum Beispiel der erste audiodump.wav durch den zweiten direkt überschrieben wird.

Kategorien: Software Linux
Tagged: APE CUE konvertieren

3 Kommentare

Aug. 19, 2008

OpenVZ

OpenVZ ist übrigens ein schönes Spielzeug. Ich nutze es gerade auf meinem Desktop-PC u.a. um die Software-Installation vom Server nachzustellen.

Schade, dass Checkpoints in den Debian-OpenVZ-Kerneln deaktiviert sind.

Kategorien: Linux
Tagged: Debian OpenVZ Server Virtualisierung

0 Kommentare

April 23, 2008

Tipp: Textfelder in KDE/Qt/Gtk beschleunigen

Es sind zwar nur 50-150ms jeweils, aber dafür kostet es auch fast keinen Aufwand:
$ mkdir ~/.compose-cache
Erklärung und mehr dazu: Rob's KDE Blog: Magic Trick

Kategorien: Linux Kurz bemerkt Software
Tagged: Tipps KDE Compose Compose-Cache Gtk Qt

0 Kommentare

März 31, 2008

EEE-PC mit Windows

Asus EEE-PCDer EEE-PC mit Windows wird genausoviel kosten wie mit Linux. Damit dürfte der Linux-Nutzer wohl den Windows-Nutzer mitfinanzieren. Und die Leute werden wieder einmal nicht bemerken, wieviel Geld sie bei neuen PCs für das enthaltene Windows ausgeben. Dabei wäre der EEE-PC ja die ideale Platform gewesen um zu demonstrieren, dass Linux nicht nur billiger ist, sondern auch für die meisten Leute Windows vollständig ersetzen kann.

Außerdem kann man damit rechnen, dass auf der Hardware Windows langsam laufen wird, was schlechte Testberichte für den EEE-PC bewirken könnte. Auch werden von den 4 GB Flashspeicher wohl nur noch 1,8 GB verfügbar sein auf dem Windows-Modell. Werden dann die nötigen Programme installiert, bleibt für Daten wirklich wenig übrig. Das Xandros-Linux hingegen, welches bisher Standard ist bringt bereits die wichtigsten Programme (wie Multi-Messanger) mit

Kategorien: Linux Windows
Tagged: Technik EEE-PC

0 Kommentare