Ask HN: Why does Zoom Desktop examine all processes and arguments?
547 points| neolog | 4 years ago
[pid 3844872] stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
[pid 3844872] openat(AT_FDCWD, "/proc/1/stat", O_RDONLY) = 4
[pid 3844872] openat(AT_FDCWD, "/proc/1/cmdline", O_RDONLY) = 4
[pid 3844872] readlink("/proc/1/exe", 0x20c0520, 1024) = -1 EACCES (Permission denied)
[pid 3844872] stat("/proc/2", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
[pid 3844872] openat(AT_FDCWD, "/proc/2/stat", O_RDONLY) = 4
[pid 3844872] openat(AT_FDCWD, "/proc/2/cmdline", O_RDONLY) = 4
[pid 3844872] stat("/proc/3", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
[pid 3844872] openat(AT_FDCWD, "/proc/3/stat", O_RDONLY) = 4
[pid 3844872] openat(AT_FDCWD, "/proc/3/cmdline", O_RDONLY) = 4
...
Why would it do that? Is there any way to prevent it?
[+] [-] reilly3000|4 years ago|reply
[+] [-] cranekam|4 years ago|reply
Personally I’d guess it is either some other library Zoom uses or some kind of debug info capturing system. But I don’t know work at Zoom so who knows.
[+] [-] twic|4 years ago|reply
This probably explains why, when i try to screenshare a single application window, not every application shows up! I can share my browser, file manager, and various other things, but not windows for games started by Steam.
[1] I followed these instructions https://www.mayrhofer.eu.org/post/zoom-flatpak-sandboxing/
[+] [-] woodruffw|4 years ago|reply
But that doesn't work for non-X11 or if the WM is non-EWMH compliant. Presumably Wayland has a similar API, and non-EWMH is probably a minuscule group that considers this a desirable feature.
[+] [-] kelnos|4 years ago|reply
That's definitely not a cross-platform way of doing it (and I doubt there is one, even).
On Linux you'd use libX11 and just enumerate all windows (using XQueryTree()). Walking the contents of /proc is not only unnecessary, but is more difficult to do, as looking at executable names won't tell you if a program has a GUI, or if it has any open windows. It won't give you window titles, or how many windows are open, or how to grab their contents.
Pretty sure Zoom is snooping on us and is gathering telemetry.
[+] [-] yakubin|4 years ago|reply
When you share a single window in Zoom, notifications are still visible to others in the meeting when they overlap with the window you're sharing. That's the case for e.g. Slack notifications.
[+] [-] dathinab|4 years ago|reply
The screen sharing functionality is handled by a mix of protocols of the windows manger and service providers announced over dbus.
Even if you want to map GUI windows to processes you would do so by getting a list of windows from the window manager and getting the pid property of the windows, but if you have a list of windows you don't need to scan processes anymore...
There might (I'm not sure) be valid use-cases for this behaviour but I'm pretty confident screen sharing of specific windows isn't part of it.
[+] [-] sails|4 years ago|reply
[+] [-] ineedasername|4 years ago|reply
[+] [-] barbs|4 years ago|reply
[+] [-] birksherty|4 years ago|reply
[+] [-] dllthomas|4 years ago|reply
We can answer part of that with just a little more reading. What's pid 3844872?
For me, the series of queries against /proc happen from a process that, just a bit earlier, called exec. So it's not really zoom reading "all processes and arguments" but ... `pidof gnome-session`, so I guess zoom is looking for the pid of gnome-session.
To what nefarious purpose zoom intends to put this knowledge of gnome-session's pid, I can't say - I am not running gnome-session so my trail goes cold; but at least for me, for that particular run, zoom itself doesn't actually see the contents of all of those files.
[+] [-] xfitm3|4 years ago|reply
https://devforum.zoom.us/t/ultrasonic-connection/3318
[+] [-] acatton|4 years ago|reply
https://theintercept.com/2021/01/18/leak-zoom-meeting/
[+] [-] xenonite|4 years ago|reply
[+] [-] est|4 years ago|reply
[+] [-] wonnage|4 years ago|reply
[+] [-] vishho|4 years ago|reply
Another angle for Zoom to do that, is that it is a massive Chinese spyware application, which can target users by meta data or IP, like it did by messing with the calls of activists. A bit like how anti-virus companies are sometimes charged with exfiltrating secret documents.
[+] [-] bowmessage|4 years ago|reply
https://support.zoom.us/hc/en-us/articles/115000538083-Atten...
> As of April 2, 2020, we have removed the attendee attention tracker feature as part of our commitment to the security and privacy of our customers. For more background on this change and how we are pivoting during these unprecedented times, please see a note from our CEO, Eric S. Yuan.
[+] [-] hashhar|4 years ago|reply
[+] [-] dmart|4 years ago|reply
[+] [-] acatton|4 years ago|reply
You can use hidepid=2 to prevent users from seeing other user's processes list.[1]
But I don't want my OS to ask me "do you want to allow htop to access the list of your processes" — à la Windows Vista — every time I want to run htop to see my user processes.
The issue here is closed source software with no way to inspect what they do.
If one really want to run closed source programs which were not vetted by their distro's maintainers, they should use firejail.[2]
[1] https://www.cyberciti.biz/faq/linux-hide-processes-from-othe...
[2] https://firejail.wordpress.com/
[+] [-] swiley|4 years ago|reply
STOP DOING THAT.
[+] [-] fsflover|4 years ago|reply
[+] [-] jlgaddis|4 years ago|reply
Mounting /proc with "hidepid=2" should prevent it from seeing processes owned by other users, although it would still be able to see your processes.
Alternatively, it shouldn't be too hard to create an AppArmor profile that blocks access to /proc.
Other options might include things like SELinux, seccomp-bpf, namespaces, cgroups, etc., depending on what's available on your host.
Or you could just, you know, obliterate it from your system altogether. That's almost certainly the best option.
[+] [-] nonameiguess|4 years ago|reply
Since this puts it in its own PID and mount namespace, it won't see any processes except itself and its children. You can even try not mounting /proc in the container this makes at all and see what happens.
This is effectively what flatpak does, but doing it yourself doesn't require installing flatpak.
[+] [-] hdjjhhvvhga|4 years ago|reply
[+] [-] minitech|4 years ago|reply
Note that this isn’t a supported configuration for systemd and will totally break it. (Which is too bad, because it’s a sensible default.)
[+] [-] _Algernon_|4 years ago|reply
[+] [-] unknown|4 years ago|reply
[deleted]
[+] [-] noobermin|4 years ago|reply
[+] [-] wins32767|4 years ago|reply
[+] [-] _sgianelli|4 years ago|reply
[+] [-] tyingq|4 years ago|reply
[+] [-] laurensr|4 years ago|reply
[+] [-] luke2m|4 years ago|reply
Use a flatpak
[+] [-] jagged-chisel|4 years ago|reply
Hook the stat, openat, readlink functions within the zoom process, experiment with blocking (returning failure) based on arguments.
[+] [-] unknown|4 years ago|reply
[deleted]
[+] [-] dllthomas|4 years ago|reply
[+] [-] nullc|4 years ago|reply
[+] [-] cranekam|4 years ago|reply
[+] [-] akira2501|4 years ago|reply
Put it into it's own namespace, and only allow it to connect to your X11 session over TCP.
[+] [-] the8472|4 years ago|reply
Firejail[0] allows cobbling together various linux sandboxing features, including namespaces which should result in an isolated proc filesystem which doesn't see the other processes. But I don't know if the default profile for zoom does that, you have to test it or write your own.
[0] https://github.com/netblue30/firejail
[+] [-] tryauuum|4 years ago|reply
[+] [-] wwweston|4 years ago|reply
[+] [-] gwbas1c|4 years ago|reply
I once worked on a file synchronization application that would scan processes when files were locked. I don't remember if we put the process name in the UI, but we logged detailed information about the other process in case someone contacted support. (Sometimes users ran weird applications that kept files locked.) I believe we had to scan through all processes and inspect their open file handles.
I would assume some things like: Maybe there are applications that are known to cause problems for Zoom? Maybe some applications lock the camera or microphone? Maybe some applications hog the CPU and cause encoder problems?
If you really want to know more, consider decompiling zoom and/or looking at strings compiled into the binary.
[+] [-] dllthomas|4 years ago|reply
[+] [-] egberts|4 years ago|reply
Zoom is probably footholding their place as to be able to inform its educator whether their students’ behavior are acceptable or are cheating.
Most probably.
[+] [-] mcrmonkey|4 years ago|reply
But some of the info its reading seems a little bit too much
cough 'telemetry' cough
[+] [-] unknown|4 years ago|reply
[deleted]