|
Message-ID: <20201019112249.GA14339@openwall.com> Date: Mon, 19 Oct 2020 13:22:49 +0200 From: Solar Designer <solar@...nwall.com> To: oss-security@...ts.openwall.com Subject: Re: major changes if gnu/linux dominates the desktop and/or mobile market? Hi, This is a belated combined reply to what several of you wrote. I felt I had to at least address Grant's request for me to clarify what I meant. On Mon, Oct 05, 2020 at 03:53:26PM -0600, Grant Taylor wrote: > On 10/5/20 2:48 PM, Solar Designer wrote: > >On the desktop, major Linux distributions (and by the way *BSDs > >and Solaris are not very different in this respect, I think) when > >used as single-user desktop systems lack security isolation between > >applications of the user. > > I agree that there is a lot of room for improvement here. But -- like > you say -- I don't think this is isolated to Linux by any stretch of the > imagination. Unless I'm sorely mistaken, just about every contemporary > desktop, and possibly server, operating system only gets as granular as > the user level. Sure. My mention of *BSDs and Solaris was in reference to other major Open Source operating systems. > >(And also between the user and root, due to the typical recommended > >use of sudo from the user account.) > > Please elaborate what you mean here? > > Are you commenting on the use of sudo (vs other access control > mechanisms) or the seemingly default recommendation to allow members of > the sudo group run any and all commands via sudo? E.g.: > > %group ALL=(ALL) NOPASSWD: ALL Neither. Rather, I refer to the fundamentally flawed approach of elevating privileges from a user account that is also used for other purposes. When doing so, you equate that account to the target (elevated) one. Even if you have to enter a password (user's with sudo or root's with su, which doesn't make a difference) when you elevate privileges, you nevertheless expose the new privileged context and whatever you had to enter to reach it to other programs running as the user. You also have no reliable way to know that you're entering this password to the intended program (such as sudo or su) rather than to something the possibly-already-compromised user context might have substituted in its place (e.g., a shell alias). So the typical "best practice" approach of logging in as a user and then sudo'ing or su'ing to root when needed is only good against mistakes and a subset of attacks, but doesn't provide any guarantee (even assuming perfect design and implementation of the system in all other aspects, and the user resisting social engineering to the best extent possible). So let's accept that the user account running the desktop environment is root-equivalent security-wise (is only different from root for safety, not security) as long as it's ever used to reach root. Then our next logical step is not to run programs that are not an essential part of the desktop environment as that same user account, with the only exception being for whatever is used for accessing the root account (and maybe other accounts) - e.g., there might be an option to open a terminal window where you'd use sudo, or maybe even open a root terminal right away (like Qubes OS has), maybe with password protection for safety and for some loose security against not-too-determined attackers with physical access to a live system (although Qubes OS doesn't bother with that). In other words, instead of having a seemingly unprivileged user account from which you occasionally elevate privileges, acknowledge that you actually have a privileged desktop user account from which you drop privileges to run most programs and from which you occasionally access root (without crossing a security boundary, but only a safety one). Unfortunately, programs allowed to talk to the same X server that the desktop environment uses are not really isolated from it. We need to solve that. (Qubes OS does so by running separate X servers in VMs, but the use of VMs is orthogonal to this. Poor man's solutions such as limiting of X server features might also work, of course keeping the X server with all of its attack surface in the TCB, which us unfortunate. Then there's Wayland, which might also be part of a solution.) Finally, we need to integrate those programs on the same desktop and with ability to explicitly share files and clipboard. (Qubes OS does this, too. A poor man's alternative or an intermediate evolutionary step might be to run all programs other than the desktop environment as just one other user account. This would address the issue of accessing root securely, but wouldn't yet provide isolation between the user's programs.) > >This kind of security isolation is something we have on Android, > >but at the price of the user not having full access to (not entirely) > >their device. The user cannot even have e.g. a file manager app with > >which they'd access all files of other apps. > > I don't know anything about Android other than it made me mad the last > time I tried to use it. > > I have seen some recent references to user namespaces and sub-IDs. I'm > on the lookout for information to see if that might be a way to run > different applications as their own sub-user-id and then behave > similarly to how applications running as different users work. Meaning > that each application -> user ID would have it's own files and would > then rely on being a member of another group to access other files. All > the while relying on file system permissions to protect other things. > > Aside: If you know of something that I should be reading, please point > me towards it. > > Have Firefox run as <username>-<firefox> and Evolution run as > <username>-<evolution>. Both user would appear as a different user than > just <username> thereby enabling traditional user & group security > models between applications run by the same user. > > I don't know if I'm hallucinating or if something like this is possible, > or even done somewhere that I'm not aware of. On Android, each app you install gets its own pseudo-user like you describe. An issue is then being able to access one app's files from another app when that is needed. This is typically achieved by apps that sometimes need to share files requesting permission to access global shared storage such as "SD card" (which is often just a partition on the device's internal storage). This is not perfect: permission is granted "just in case", not if and when access is needed, and it's not granular. (I'm not familiar with how this might have been improved in recent Android, though.) On typical desktop systems, there's also the shared X server issue. (That said, I've been running a customized system like this for years. With my e-mail in Mutt, that one pseudo-user wasn't privileged to access the X server, so couldn't e.g. capture my SSH key passphrases.) > >For typical desktop Linux users, realistically most security is > >provided by the web browser, which these days at least uses a > >sandbox, protecting the user's files and other apps from itself. > >That's something the underlying systems tend to lack. > > I'm grateful that the web browser does do sandboxing. But I don't think > that we should need to rely on it for as much security as we do. Of course, better not to rely on one layer of security. I just point out that the state of desktop OS security is currently worse than the state of web browser security. > >Sure malware and social engineering are valid threats to keep in mind. > > I don't see how the operating system / security infrastructure can be > responsible for protecting people here. The OS should at least provide a means for a knowledgeable user to unambiguously determine where pop-up windows, prompts, etc. really come from. (Such as Qubes OS coloring of window titles.) > >It's also a good idea not to rely solely on the browser's built-in > >authorization checks, but to limit its access to system resources > >such as the microphone and camera. Qubes OS does that. > > I naively think that some of this can be controlled with traditional > file system permissions on the relevant device files. If your (sub)user > is not in the group to access the microphone -- guess what -- you don't > get access to it. I'm afraid, there's typically no way at the device file level to grant access to audio output without also granting access to audio input. Maybe this needs to be introduced into the kernel. Besides, these days programs typically work through a server process such as pulseaudio. In my example with having a dedicated pseudo-user account for the desktop environment, that one could also control whether audio input is enabled or disabled in the audio server, and the user's programs would need to be disallowed to control that. > >Relaxed file permissions like that may also further weaken some partial > >sandboxes (when a service is running with its dedicated credentials, > >but with retained filesystem access - such as because it needs that). > > I want to agree with that. But, with things ultimately running as the > same user, then any subdivision therein is difficult to enforce. I was referring e.g. to Postfix daemons, some of which run with full filesystem access yet as a (pseudo-)user that wouldn't be privileged to access a user's home directory if the home directory and files inside of it have stricter permissions than 755/644. On Mon, Oct 05, 2020 at 05:29:20PM -0400, Stephen John Smoogen wrote: > On Mon, 5 Oct 2020 at 16:49, Solar Designer <solar@...nwall.com> wrote: > > On the desktop, major Linux distributions (and by the way *BSDs and > > Solaris are not very different in this respect, I think) when used as > > single-user desktop systems lack security isolation between applications > > of the user. (And also between the user and root, due to the typical > > recommended use of sudo from the user account.) > > I think it would take a lot of 'training' on why this is not wanted and > setting expectations about how one is supposed to use a computer without > that access. Yes, the most difficult part with securing a desktop system is to keep it conveniently usable. I think it is possible to isolate the desktop environment from user programs without inconveniencing the user. As to isolation between the user's programs, yes, that becomes visible to the user and would require some training on how to explicitly transfer data between the programs when needed. Perhaps there are ways to make this intuitive, e.g. drag-and-drop. > It is hard enough trying to explain to the person who wanted > everything containerized for 'better' security that allowing them to ssh > into the container so they can 'debug it' also removes the security that > they wanted. "Containerizing" things (at best) protects the outside from what's contained, not vice versa. This is similar to the problem with sudo'ing or su'ing to root, and requires a similar solution. This isn't hard for the user if access to containers is managed from a preconfigured desktop environment that's part of the TCB (like on Qubes OS), and that isn't used to run unrelated programs in the same security context. The hard part is integration of the isolated environments and learning when and how to use it. > > Then there's the trend towards having a desktop-like Linux system on > > mobile devices again. Before Android, we had e.g. Maemo and MeeGo. Now > > we have e.g. Ubuntu Touch, postmarketOS, and Sailfish OS. As far as I'm > > aware, so far this means lack of isolation between the apps just like we > > have on the desktop. BTW, there's a Russian security-hardened fork of Sailfish OS called Aurora. I've skimmed and searched its user's manual (in Russian) for any mentions of isolation between the apps - found nothing, so I assume there's none. (This isn't to say they haven't implemented any security changes - I think they have. An interview I read with their CEO looked surprisingly reasonable. However, it appears that addressing cross-app attacks is completely out of their focus.) > > We need the best of both worlds - isolation, yet full control. I guess > > this could be achieved by devices gaining a physical button that would > > need to be pressed at the time a newly installed app is to be granted > > privileges by a component in the system's TCB. Said component would > > also need to assure the user that it's the only one in control at the > > moment (kind of after a SAK) and that the displayed privileges request > > is truthful and complete, e.g. by lighting a dedicated LED. You want to > > install an all-powerful file manager? Just wait for that LED to light > > up, review what privileges would be granted to where, and press that > > button to accept. Perhaps too cumbersome for typical users. Maybe an > > alternative approach could be developed where a portion of the > > touchscreen (or a secondary one) would be reserved for interacting with > > the OS TCB. Perhaps something like MacBook Pro's Touch Bar could be > > used for that purpose - and having that is already a precedent, it's > > just not used for a security purpose yet (or I haven't heard of that). > > That would be useful and trusted if the touch bar has a direct path to the > TCB versus being able to be reprogrammed by the OS. Some components of the OS are normally part of the TCB (except in some other contexts). Having dedicated screen space for control (like with Qubes OS preventing VMs' full screen mode by default) or indeed a dedicated screen is a reasonable security feature. And yes, there's no security difference between dedicated screen space and dedicated screen when they're managed by the OS, but that's OK. On Mon, Oct 05, 2020 at 10:36:14PM -0400, Steve Grubb wrote: > I will skip the whole discussion on access control. However to prove security > requires going through a Common Criteria certification. The biggest issue is > that the desktoptop uses dbus instantiation which does not have the auid of > the requesting process. Meaning audit cannot work. > > The fix was kdus. That was rejected. But the issue remains. There cannot be a > secure desktop without auditing. And no one is really pushing for a desktop > certification, therefore no one is pushing to fix audit desktop problems. I think it's a bit ridiculous to talk about audit on the desktop when we haven't got the basics right. A typical desktop system user won't know and won't benefit from audit, but would possibly benefit (ideally, not having to know about it!) from isolation of the desktop environment from other programs (e.g., as it relates to which programs can control the audio settings). Alexander
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.