Should mprotect(..., PROT_EXEC) be checked by IMA?
mjg59 at google.com
Wed Apr 3 16:58:40 UTC 2019
On Wed, Apr 3, 2019 at 2:59 AM Igor Zhbanov <i.zhbanov at omprussia.ru> wrote:
> On 03.04.2019 1:31, Matthew Garrett wrote:
> > Remember that many interpreted languages allow execution of code
> > provided to them on the command line (eg, python -c) and also grant
> > access to arbitrary syscalls, so there's still no guarantee that
> > you're only executing trusted code.
> Yes. But in some installations you can get rid of interpreters at all or limit
> the number of scripts they can open. For example you can require that all
> scripts have to be signed.
No, that's my point - if you're able to pass code directly to the
interpreter then you're not protected by file signatures. python -c
'print("hello")' will execute without the user-provided code touching
> And having this feature as a per-process you could still limit the attack
> surface by restricting e.g. network services as they are constantly attacked.
> So are you saying that this feature doesn't worth to make it?
I'm saying that before adding more security code you should describe
the attack that you're actually trying to prevent. What you're doing
prevents applications from opening a file read-only and then
mprotect()ing it to being executable without IMA noticing, but what
attack are you actually protecting against as a result? You block one
avenue of obtaining code execution that isn't measured by IMA, but
there are many more. Most (but not all) are blocked by requiring that
all files be signed, but if all files are signed we don't need to
change the behaviour here - opening the file read-only will be enough
to trigger an appraisal.
More information about the Linux-security-module-archive