[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1360871356.3524.667.camel@falcor1.watson.ibm.com>
Date: Thu, 14 Feb 2013 14:49:16 -0500
From: Mimi Zohar <zohar@...ux.vnet.ibm.com>
To: Vivek Goyal <vgoyal@...hat.com>
Cc: "Kasatkin, Dmitry" <dmitry.kasatkin@...el.com>,
linux-security-module@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/2] ima: Support appraise_type=imasig_optional
On Thu, 2013-02-14 at 11:17 -0500, Vivek Goyal wrote:
> On Thu, Feb 14, 2013 at 10:35:59AM -0500, Mimi Zohar wrote:
> > On Thu, 2013-02-14 at 10:23 -0500, Vivek Goyal wrote:
> > > On Thu, Feb 14, 2013 at 07:57:16AM -0500, Mimi Zohar wrote:
> > >
> > > [..]
> > > > > Ok, I will cleanup the code to do above. Just wanted to clear up one
> > > > > point.
> > > > >
> > > > > Above option will not have any effect on evm behavior? This only impacts
> > > > > IMA appraisal behavior. For example, if security.ima is not present it
> > > > > is fine and file access is allowed. But if EVM is enabled and initialized
> > > > > and EVM does not find security.evm label (INTEGRITY_NOLABEL) or returns
> > > > > INTEGRITY_NOXATTRS, file access should still be denied?
> > > >
> > > > Can't happen. evm_verifyxattr() is called from
> > > > ima_appraise_measurement(), only if 'security.ima' exists.
> > >
> > > Actually what I meant is following.
> > >
> > > Currently in process_measurement(), I will allow access if
> > > ima_appraise_measurement() returns INTEGRITY_NOLABEL.
> >
> > I think you're making this more complicated than it needs to be. Allow
> > the execution unless the file failed signature verification. The
> > additional capability is given only if the signature verification
> > succeeds.
>
> I am just trying to bring it inline with module signature verification.
> There also module loading fails if signatures are present but kernel
> can't verify it.
A specific hook is defined for kernel module signature verification,
which is enabled/disabled in Kconfig. When enabled, only signed modules
are loaded. The kernel module hook does not verify the integrity of the
userspace application (eg. insmod, modprobe), but of the kernel module
being loaded.
Your original patches verified the integrity of the userspace
application kexec, not the image being loaded. ima_bprm_check()
verifies the integrity of executables. To permit both signed and
unsigned files to execute, we defined the 'optional' IMA policy flag,
with the intention of giving more capability to signed executables.
Unless we define a kexec specific hook for verifying kernel images, it's
not the same.
> Following behavior is strange.
>
> rc = integrity_digsig_verify(INTEGRITY_KEYRING_IMA,
> xattr_value->digest, rc - 1,
> iint->ima_xattr.digest,
> IMA_DIGEST_SIZE);
> if (rc == -EOPNOTSUPP) {
> status = INTEGRITY_UNKNOWN;
> } else if (rc) {
> cause = "invalid-signature";
> status = INTEGRITY_FAIL;
> } else {
> status = INTEGRITY_PASS;
> }
>
> signature verification can fail for so many reasons.
>
> - EINVAL
> - keyring is not present
> - key is not present -ENOKEY
> - ENOTSUPP
> - ENOMEM
> ..
> ..
>
> And in all these cases we return INTEGRITY_FAIL. But only in case of
> -EOPNOTSUPP we return INTEGRITY_UNKNOWN. So why this discrepancy.
This exception is for filesystems that don't support extended
attributes, such as CPIO. We assumed, correctly/incorrectly, that the
initramfs would already be measured and appraised.
> So to me it makes sense to return INTEGRITY_FAIL if rc == -EOPNOTSUPP.
Perhaps, but unless the initramfs supports xattrs, we wouldn't be able
to boot.
> This will bring it inline with other error codes. And then in
> process_measurement() I can allow access in every case except
> INTEGRITY_FAIL.
thanks,
Mimi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists