From: Jarkko Sakkinen <jarkko@kernel.org>
To: Topi Miettinen <toiwoton@gmail.com>
Cc: Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>,
luto@amacapital.net, Ben Hutchings <ben@decadent.org.uk>,
jethro@fortanix.com, bruce.schlobohm@intel.com,
kai.svahn@intel.com, luto@kernel.org,
haitao.huang@linux.intel.com, jarkko.sakkinen@linux.intel.com,
"systemd-devel@lists.freedesktop.org"
<systemd-devel@lists.freedesktop.org>,
casey@schaufler-ca.com, sds@tycho.nsa.gov,
linux-hotplug@vger.kernel.org, linux-sgx@vger.kernel.org
Subject: Re: Antw: [EXT] Re: [systemd-devel] Creating executable device nodes in /dev?
Date: Tue, 22 Dec 2020 22:14:37 +0000 [thread overview]
Message-ID: <20201222221437.GA13357@kernel.org> (raw)
In-Reply-To: <815056f6-cb4b-0d48-ea2c-1cde97af45d4@gmail.com>
On Wed, Dec 16, 2020 at 03:05:05PM +0200, Topi Miettinen wrote:
> On 16.12.2020 12.03, Ulrich Windl wrote:
> > > > > Jarkko Sakkinen <jarkko@kernel.org> schrieb am 15.12.2020 um 05:19 in
> > Nachricht
> > <20201215041903.GA21875@kernel.org>:
> > > On Mon, Dec 14, 2020 at 08:25:50AM +0100, Ulrich Windl wrote:
> > > > > > > Topi Miettinen <toiwoton@gmail.com> schrieb am 11.12.2020 um 12:46 in
> > > > Nachricht
> > > > <27796c04-249e-6cf0-c3e1-0fd657a82f9c@gmail.com>:
> > > > > On 11.12.2020 12.46, Jarkko Sakkinen wrote:
> > > > > > On Wed, Dec 09, 2020 at 10:35:21AM +0200, Topi Miettinen wrote:
> > > > > > > On 9.12.2020 2.15, Jarkko Sakkinen wrote:
> > > > > > > > On Wed, Dec 09, 2020 at 01:15:27AM +0200, Topi Miettinen wrote:
> > > > > > > > > > > > As a further argument, I just did this on a Fedora system:
> > > > > > > > > > > > $ find /dev ‑perm /ugo+x ‑a \! ‑type d ‑a \! ‑type l
> > > > > > > > > > > > No results. So making /dev noexec doesn't seem to have any
> > benefit.
> > > > > > > > > > >
> > > > > > > > > > > It's no surprise that there aren't any executables in /dev since
> > > > > > > > > > > removing MAKEDEV ages ago. That's not the issue, which is that
> > > > > > > > > > > /dev is a writable directory (for UID=0 but no capabilities are
> > > > > > > > > > > needed) and thus a potential location for constructing unapproved
> > > > > > > > > > > executables if it is also mounted exec (W^X).
> > > > > > > > > >
> > > > > > > > > > UID 0 can just change mount options, though, unless SELinux or
> > similar
> > > > is
> > > > > used. And SELinux can protect /dev just fine without noexec.
> > > > > > > > >
> > > > > > > > > Well, mounting would need CAP_SYS_ADMIN in addition to UID 0. Also
> > > > SELinux
> > > > > > > > > is not universal and the policies might not contain all users or
> > > > services.
> > > > > > > > >
> > > > > > > > > ‑Topi
> > > > > > > >
> > > > > > > > What's the data that supports having noexec /dev anyway? With root
> > > > > > > > access I can then just use something else like /dev/shm mount.
> > > > > > > >
> > > > > > > > Has there been out in the wild real world cases that noexec mount
> > > > > > > > of would have prevented?
> > > > > > > >
> > > > > > > > For me this sounds a lot just something that "feels more secure"
> > > > > > > > without any measurable benefit. Can you prove me wrong?
> > > > > > >
> > > > > > > I don't think security works that way. An attacker has various methods
> > to
> > > > > > > choose from, some are more interesting than others. The case where
> > > > rw,exec
> > > > > > > /dev would be interesting would imply that easier or more common
> > avenues
> > > > > > > would be blocked, for example rw,exec /dev/shm, /tmp, /var/tmp, or
> > > > > > > /run/user/$UID/ for user. Also fileless malware with pure ROP/JOP
> > > > approach
> > > > > > > with no need for any file system access is getting more common. It
> > does
> > > > not
> > > > > > > mean that it would not be prudent to block the relatively easy
> > approaches
> > > > > > > too, including /dev.
> > > > > >
> > > > > > What if we add a new mount option "chrexec", which allows exec
> > > > > > for character devices (S_IFCHR).
> > > > >
> > > > > I think devices are a bad match for SGX because devices haven't been
> > > > > executable and SGX is actually an operation for memory. So something
> > > > > like memfd_create(, MFD_SGX) or mmap(,, PROT_READ|PROT_EXEC|PROT_SGX)
> > > > > would be much more natural. Even better would be something that
> > > > > conceptully also works for AMD version (either with the same flags or
> > > > > MFD_SGX / MFD_whatever_the_AMD_version_is).
> > > >
> > > > +1
> > >
> > > SGX reserved memory from kernel's point of view is IO memory.
> > >
> > > Mapping SGX to memfd would not be a great idea, as it does not map
> > > into concept of anonymous file backed by regular memory.
> > >
> > > A device file is very natural match actually. We have ioctl API for
> > > uploading enclave pages during the build procedure to the enclave and
> > > custom #PF handler. Conceptually it's a lot like video memory or such
> > > special device specific memory area.
> > >
> > > There's no AMD equivalent of this technology.
> >
> > Hi!
> >
> > Back to "noexec": AFAIR the execute bit does not make sense for device files,
> > and the purpose probably was to avoid execution of non-device files (e.g.
> > regular executables) from inside /dev (where they should not be). So in this
> > view "noexec" makes sense.
> > There were similar arguments for not allowing device files in user
> > directories.
>
> PR#17940 (https://github.com/systemd/systemd/pull/17940) was merged, so /dev
> will now on be mounted with "exec" by systemd.
>
> I made issue #17942 (https://github.com/systemd/systemd/issues/17942) to
> discuss related hardening options. I'm leaning towards
> NoExecPaths=/ExecPaths= as it would enable nice hardening by allow-listing
> of all executable content for system services with simple directives like:
>
> [Service]
> NoExecPaths=/
> ExecPaths=/usr/sbin/daemon /lib64/ld-linux-x86-64.so.2 /usr/lib
>
> Then a service infected with malware would not be able to execute a shell
> present in the system or downloaded later, if that was not explicitly
> allowed. /dev would also not have "exec" flag by default, but SGX could be
> allowed with "ExecPaths=/dev/sgx" when needed.
OK, this sounds relieving, thank you (late resp, I was vacation last
week).
> -Topi
/Jarkko
WARNING: multiple messages have this Message-ID (diff)
From: Jarkko Sakkinen <jarkko@kernel.org>
To: Topi Miettinen <toiwoton@gmail.com>
Cc: Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>,
luto@amacapital.net, Ben Hutchings <ben@decadent.org.uk>,
jethro@fortanix.com, bruce.schlobohm@intel.com,
kai.svahn@intel.com, luto@kernel.org,
haitao.huang@linux.intel.com, jarkko.sakkinen@linux.intel.com,
"systemd-devel@lists.freedesktop.org"
<systemd-devel@lists.freedesktop.org>,
casey@schaufler-ca.com, sds@tycho.nsa.gov,
linux-hotplug@vger.kernel.org, linux-sgx@vger.kernel.org
Subject: Re: Antw: [EXT] Re: [systemd-devel] Creating executable device nodes in /dev?
Date: Wed, 23 Dec 2020 00:14:37 +0200 [thread overview]
Message-ID: <20201222221437.GA13357@kernel.org> (raw)
In-Reply-To: <815056f6-cb4b-0d48-ea2c-1cde97af45d4@gmail.com>
On Wed, Dec 16, 2020 at 03:05:05PM +0200, Topi Miettinen wrote:
> On 16.12.2020 12.03, Ulrich Windl wrote:
> > > > > Jarkko Sakkinen <jarkko@kernel.org> schrieb am 15.12.2020 um 05:19 in
> > Nachricht
> > <20201215041903.GA21875@kernel.org>:
> > > On Mon, Dec 14, 2020 at 08:25:50AM +0100, Ulrich Windl wrote:
> > > > > > > Topi Miettinen <toiwoton@gmail.com> schrieb am 11.12.2020 um 12:46 in
> > > > Nachricht
> > > > <27796c04-249e-6cf0-c3e1-0fd657a82f9c@gmail.com>:
> > > > > On 11.12.2020 12.46, Jarkko Sakkinen wrote:
> > > > > > On Wed, Dec 09, 2020 at 10:35:21AM +0200, Topi Miettinen wrote:
> > > > > > > On 9.12.2020 2.15, Jarkko Sakkinen wrote:
> > > > > > > > On Wed, Dec 09, 2020 at 01:15:27AM +0200, Topi Miettinen wrote:
> > > > > > > > > > > > As a further argument, I just did this on a Fedora system:
> > > > > > > > > > > > $ find /dev ‑perm /ugo+x ‑a \! ‑type d ‑a \! ‑type l
> > > > > > > > > > > > No results. So making /dev noexec doesn't seem to have any
> > benefit.
> > > > > > > > > > >
> > > > > > > > > > > It's no surprise that there aren't any executables in /dev since
> > > > > > > > > > > removing MAKEDEV ages ago. That's not the issue, which is that
> > > > > > > > > > > /dev is a writable directory (for UID=0 but no capabilities are
> > > > > > > > > > > needed) and thus a potential location for constructing unapproved
> > > > > > > > > > > executables if it is also mounted exec (W^X).
> > > > > > > > > >
> > > > > > > > > > UID 0 can just change mount options, though, unless SELinux or
> > similar
> > > > is
> > > > > used. And SELinux can protect /dev just fine without noexec.
> > > > > > > > >
> > > > > > > > > Well, mounting would need CAP_SYS_ADMIN in addition to UID 0. Also
> > > > SELinux
> > > > > > > > > is not universal and the policies might not contain all users or
> > > > services.
> > > > > > > > >
> > > > > > > > > ‑Topi
> > > > > > > >
> > > > > > > > What's the data that supports having noexec /dev anyway? With root
> > > > > > > > access I can then just use something else like /dev/shm mount.
> > > > > > > >
> > > > > > > > Has there been out in the wild real world cases that noexec mount
> > > > > > > > of would have prevented?
> > > > > > > >
> > > > > > > > For me this sounds a lot just something that "feels more secure"
> > > > > > > > without any measurable benefit. Can you prove me wrong?
> > > > > > >
> > > > > > > I don't think security works that way. An attacker has various methods
> > to
> > > > > > > choose from, some are more interesting than others. The case where
> > > > rw,exec
> > > > > > > /dev would be interesting would imply that easier or more common
> > avenues
> > > > > > > would be blocked, for example rw,exec /dev/shm, /tmp, /var/tmp, or
> > > > > > > /run/user/$UID/ for user. Also fileless malware with pure ROP/JOP
> > > > approach
> > > > > > > with no need for any file system access is getting more common. It
> > does
> > > > not
> > > > > > > mean that it would not be prudent to block the relatively easy
> > approaches
> > > > > > > too, including /dev.
> > > > > >
> > > > > > What if we add a new mount option "chrexec", which allows exec
> > > > > > for character devices (S_IFCHR).
> > > > >
> > > > > I think devices are a bad match for SGX because devices haven't been
> > > > > executable and SGX is actually an operation for memory. So something
> > > > > like memfd_create(, MFD_SGX) or mmap(,, PROT_READ|PROT_EXEC|PROT_SGX)
> > > > > would be much more natural. Even better would be something that
> > > > > conceptully also works for AMD version (either with the same flags or
> > > > > MFD_SGX / MFD_whatever_the_AMD_version_is).
> > > >
> > > > +1
> > >
> > > SGX reserved memory from kernel's point of view is IO memory.
> > >
> > > Mapping SGX to memfd would not be a great idea, as it does not map
> > > into concept of anonymous file backed by regular memory.
> > >
> > > A device file is very natural match actually. We have ioctl API for
> > > uploading enclave pages during the build procedure to the enclave and
> > > custom #PF handler. Conceptually it's a lot like video memory or such
> > > special device specific memory area.
> > >
> > > There's no AMD equivalent of this technology.
> >
> > Hi!
> >
> > Back to "noexec": AFAIR the execute bit does not make sense for device files,
> > and the purpose probably was to avoid execution of non-device files (e.g.
> > regular executables) from inside /dev (where they should not be). So in this
> > view "noexec" makes sense.
> > There were similar arguments for not allowing device files in user
> > directories.
>
> PR#17940 (https://github.com/systemd/systemd/pull/17940) was merged, so /dev
> will now on be mounted with "exec" by systemd.
>
> I made issue #17942 (https://github.com/systemd/systemd/issues/17942) to
> discuss related hardening options. I'm leaning towards
> NoExecPaths=/ExecPaths= as it would enable nice hardening by allow-listing
> of all executable content for system services with simple directives like:
>
> [Service]
> NoExecPaths=/
> ExecPaths=/usr/sbin/daemon /lib64/ld-linux-x86-64.so.2 /usr/lib
>
> Then a service infected with malware would not be able to execute a shell
> present in the system or downloaded later, if that was not explicitly
> allowed. /dev would also not have "exec" flag by default, but SGX could be
> allowed with "ExecPaths=/dev/sgx" when needed.
OK, this sounds relieving, thank you (late resp, I was vacation last
week).
> -Topi
/Jarkko
next prev parent reply other threads:[~2020-12-22 22:14 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-19 16:17 Creating executable device nodes in /dev? Andy Lutomirski
2020-11-19 16:17 ` Andy Lutomirski
2020-11-19 16:32 ` Zbigniew Jędrzejewski-Szmek
2020-11-19 18:05 ` Topi Miettinen
2020-11-19 18:05 ` Topi Miettinen
2020-12-08 18:07 ` Andy Lutomirski
2020-12-08 18:07 ` Andy Lutomirski
2020-12-08 20:45 ` Topi Miettinen
2020-12-08 20:45 ` Topi Miettinen
2020-12-08 21:30 ` Andy Lutomirski
2020-12-08 21:30 ` Andy Lutomirski
2020-12-08 23:15 ` Topi Miettinen
2020-12-08 23:15 ` Topi Miettinen
2020-12-09 0:15 ` Jarkko Sakkinen
2020-12-09 0:15 ` Jarkko Sakkinen
2020-12-09 0:42 ` Jarkko Sakkinen
2020-12-09 0:42 ` Jarkko Sakkinen
2020-12-09 8:58 ` Topi Miettinen
2020-12-09 8:58 ` Topi Miettinen
2020-12-09 9:07 ` Jethro Beekman
2020-12-09 9:07 ` Jethro Beekman
2020-12-09 15:14 ` Andy Lutomirski
2020-12-09 15:14 ` Andy Lutomirski
2020-12-09 19:22 ` Topi Miettinen
2020-12-09 19:22 ` Topi Miettinen
2020-12-09 19:32 ` Andy Lutomirski
2020-12-09 19:32 ` Andy Lutomirski
2020-12-09 21:58 ` Ben Hutchings
2020-12-09 21:58 ` Ben Hutchings
2020-12-11 11:36 ` Zbigniew Jędrzejewski-Szmek
2020-12-09 7:58 ` Antw: [EXT] Re: [systemd-devel] " Ulrich Windl
2020-12-09 7:58 ` Ulrich Windl
2020-12-11 10:40 ` Jarkko Sakkinen
2020-12-11 10:40 ` Jarkko Sakkinen
2020-12-09 8:35 ` Topi Miettinen
2020-12-09 8:35 ` Topi Miettinen
2020-12-11 10:46 ` Jarkko Sakkinen
2020-12-11 10:46 ` Jarkko Sakkinen
2020-12-11 11:29 ` Greg KH
2020-12-11 11:29 ` Greg KH
2020-12-12 11:51 ` [systemd-devel] " Christian Brauner
2020-12-12 11:51 ` Christian Brauner
2020-12-12 12:32 ` Christian Brauner
2020-12-12 12:32 ` Christian Brauner
2020-12-11 11:46 ` Topi Miettinen
2020-12-11 11:46 ` Topi Miettinen
2020-12-14 7:25 ` Antw: [EXT] Re: [systemd-devel] " Ulrich Windl
2020-12-14 7:25 ` Ulrich Windl
2020-12-15 4:19 ` Jarkko Sakkinen
2020-12-15 4:19 ` Jarkko Sakkinen
2020-12-15 4:27 ` Jarkko Sakkinen
2020-12-15 4:27 ` Jarkko Sakkinen
2020-12-16 10:03 ` Ulrich Windl
2020-12-16 10:03 ` Ulrich Windl
2020-12-16 13:05 ` Topi Miettinen
2020-12-16 13:05 ` Topi Miettinen
2020-12-22 22:14 ` Jarkko Sakkinen [this message]
2020-12-22 22:14 ` Jarkko Sakkinen
2020-12-09 0:03 ` Jarkko Sakkinen
2020-12-09 0:03 ` Jarkko Sakkinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201222221437.GA13357@kernel.org \
--to=jarkko@kernel.org \
--cc=Ulrich.Windl@rz.uni-regensburg.de \
--cc=ben@decadent.org.uk \
--cc=bruce.schlobohm@intel.com \
--cc=casey@schaufler-ca.com \
--cc=haitao.huang@linux.intel.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jethro@fortanix.com \
--cc=kai.svahn@intel.com \
--cc=linux-hotplug@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=sds@tycho.nsa.gov \
--cc=systemd-devel@lists.freedesktop.org \
--cc=toiwoton@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.