linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Roberto Sassu <roberto.sassu@huawei.com>
To: Mimi Zohar <zohar@linux.ibm.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"mchehab+huawei@kernel.org" <mchehab+huawei@kernel.org>
Cc: "linux-integrity@vger.kernel.org"
	<linux-integrity@vger.kernel.org>,
	"linux-security-module@vger.kernel.org" 
	<linux-security-module@vger.kernel.org>,
	"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
	"linux-kselftest@vger.kernel.org"
	<linux-kselftest@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [RFC][PATCH v2 06/12] diglim: Interfaces - digest_list_add, digest_list_del
Date: Mon, 2 Aug 2021 15:12:49 +0000	[thread overview]
Message-ID: <1b853c35bb8c41c98c51af1116d5eac6@huawei.com> (raw)
In-Reply-To: <3e6a54d4be87a3eafc45c85d013250d17aa0835e.camel@linux.ibm.com>

> From: Mimi Zohar [mailto:zohar@linux.ibm.com]
> Sent: Monday, August 2, 2021 4:42 PM
> Hi Roberto,
> 
> On Fri, 2021-07-30 at 13:16 +0000, Roberto Sassu wrote:
> 
> > The reason of storing the actions performed by IMA on the
> > digest lists helps to determine for which purpose they can be
> > used. If digest lists are used only for measurement purpose,
> > it should be sufficient that digest lists are measured. The
> > same applies for appraisal.
> 
> Is that assumption correct?   How would you know if the digests lists
> are only being used one way and not the other.  For example, assuming
> that the digest lists are stored on protected media, the digest lists
> could be measured, but would not necessarily be appraised.

Hi Mimi

the actions performed by IMA on the digest lists are recorded
in the digest_list_item structure. These can be retrieved when
IMA calls diglim_digest_get_info() (actually it is the OR of the
actions for the digest lists that contain the digest passed as a
query).

At the moment, DIGLIM can only know whether a digest list
has been measured or not (with the return value of
ima_measure_critical_data()). In the next patch set, I add the
changes to get the actions from the integrity_iint_cache().

> > > Adding the kernel_read_file() "READING_DIGEST_LIST" support in IMA
> does
> > > not seem to be optional.  IMA would then be calculating the digest list
> > > file hash twice, once in kernel_read_file() and then, again, in
> > > ima_measure_critical_data().
> >
> > I didn't include also this part: I retrieve the integrity_iint_cache for
> > the opened file descriptor and I get the flags from there. If the
> > IMA_MEASURED flag is set, it is not necessary to call also
> > ima_measure_critical_data().
> 
> Right, assuming the file is in policy, the digest would already be
> stored in the iint cache.
> 
> > > > > I understand that with your changes to ima_measure_critical_data(),
> > > > > which are now in next-integrity-testing branch, allow IMA to calculate
> > > > > the file data hash.
> > > >
> > > > Yes, correct. But actually there is another useful use case.
> > > > If digest lists are not in the format supported by the kernel,
> > > > the user space parser has to convert them before uploading
> > > > them to the kernel.
> > > >
> > > > ima_measure_critical_data() would in this case measure
> > > > the converted digest list (it is written directly, without
> > > > sending the file path). It is easier to attest the result,
> > > > instead of determining whether the user space parser
> > > > produced the expected result (by checking the files it
> > > > read).
> > >
> > > The application to properly convert the digest list file data into the
> > > appropriate format would need to be trusted.  I'm concerned that not
> > > requiring the converted data to be signed and the signature verified is
> > > introducing a new integrity gap.  Perhaps between an LSM policy,
> > > limiting which files may be read by the application, and an IMA policy,
> > > requiring all files read by this application to be measured and the
> > > signature verified, this integrity gap could be averted.
> >
> > It is the weakest point in the chain, yes. Relying on existing LSMs
> > didn't seem to me a good idea, as:
> > - a new policy must be installed
> > - we must be sure that the policy is really enforced
> > - we need to support different LSMs (SELinux for Fedora,
> >   Apparmor for SUSE)
> > - there might be no LSM we can rely on
> >
> > For these reasons, I developed a new LSM. Its purpose is to
> > identify the user space parser and for each file it opens, ensure
> > that the file has been measured or appraised by IMA. If one of
> > these actions are missing, it will not be set in the digest list the
> > user space parser uploads to the kernel (which means that IMA
> > will ignore the digest list for that specific action).
> 
> Properly identifying (all) user space parser(s) would be critical.  It
> would be simpler and  safer to require the converted data be signed.

I agree, it would be much easier. However, it would require changes
to the building infrastructure of Linux distribution vendors, which
might limit the applicability of DIGLIM.

With the user space parser taking care of the conversion, distributions
can do appraisal of executables and shared libraries with an update of:
- the kernel: to add DIGLIM
- dracut: to add required digest lists in the initial ram disk
- rpm (plugin): to extract the RPM header and its signature and write
  them to a file that is uploaded to the kernel by the user space parser

I'm planning to append the signature at the end of the RPM header
(and use appraise_type=modsig) to avoid the dependency on the
'initramfs: add support for xattrs in the initial ram disk' patch set
(which I might try to resume in the future).

Thanks

Roberto

HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063
Managing Director: Li Peng, Li Jian, Shi Yanli

> thanks,
> 
> Mimi


  reply	other threads:[~2021-08-02 15:12 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-26 16:36 [RFC][PATCH v2 00/12] integrity: Introduce DIGLIM Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 01/12] diglim: Overview Roberto Sassu
2021-07-28 11:10   ` Mauro Carvalho Chehab
2021-07-28 11:40     ` Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 02/12] diglim: Basic definitions Roberto Sassu
2021-07-27 14:43   ` Greg KH
2021-07-27 15:35     ` Roberto Sassu
2021-07-27 15:44       ` Greg KH
2021-07-27 16:09         ` Roberto Sassu
2021-07-27 16:13           ` Greg KH
2021-07-28  6:59             ` Roberto Sassu
2021-07-28 11:31   ` Mauro Carvalho Chehab
2021-07-28 11:45     ` Roberto Sassu
2021-07-28 13:08       ` Mauro Carvalho Chehab
2021-07-28 13:47         ` Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 03/12] diglim: Objects Roberto Sassu
2021-07-28 11:38   ` Mauro Carvalho Chehab
2021-07-28 11:47     ` Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 04/12] diglim: Methods Roberto Sassu
2021-07-28 12:18   ` Mauro Carvalho Chehab
2021-07-28 12:30     ` Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 05/12] diglim: Parser Roberto Sassu
2021-07-28 12:35   ` Mauro Carvalho Chehab
2021-07-26 16:36 ` [RFC][PATCH v2 06/12] diglim: Interfaces - digest_list_add, digest_list_del Roberto Sassu
2021-07-28 12:38   ` Mauro Carvalho Chehab
2021-07-29 21:20   ` Mimi Zohar
2021-07-30  7:16     ` Roberto Sassu
2021-07-30 12:39       ` Mimi Zohar
2021-07-30 13:16         ` Roberto Sassu
2021-07-30 14:03           ` Mimi Zohar
2021-07-30 14:24             ` Roberto Sassu
2021-08-02  8:14               ` Roberto Sassu
2021-08-02 15:01                 ` Mimi Zohar
2021-08-02 14:42           ` Mimi Zohar
2021-08-02 15:12             ` Roberto Sassu [this message]
2021-08-02 16:54             ` Roberto Sassu
2021-08-05 15:38               ` Mimi Zohar
2021-08-05 17:04                 ` Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 07/12] diglim: Interfaces - digest_lists_loaded Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 08/12] diglim: Interfaces - digest_label Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 09/12] diglim: Interfaces - digest_query Roberto Sassu
2021-07-26 16:36 ` [RFC][PATCH v2 10/12] diglim: Interfaces - digests_count Roberto Sassu
2021-07-28 12:45   ` Mauro Carvalho Chehab
2021-07-26 16:36 ` [RFC][PATCH v2 11/12] diglim: Remote Attestation Roberto Sassu
2021-07-28 12:47   ` Mauro Carvalho Chehab
2021-07-28 12:54     ` Roberto Sassu
2021-07-26 16:37 ` [RFC][PATCH v2 12/12] diglim: Tests Roberto Sassu

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=1b853c35bb8c41c98c51af1116d5eac6@huawei.com \
    --to=roberto.sassu@huawei.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=mchehab+huawei@kernel.org \
    --cc=zohar@linux.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).