Re: [RFC][PATCH 2/2] ima: don't measure files in the TCB if Biba strict policy is enforced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2017-10-20 at 17:41 +0200, Roberto Sassu wrote:
> The Biba strict policy prevents processes outside the TCB from modifying
> appraised files. Then, since the integrity of those files is preserved,
> because only processes in the TCB can write appraised files, it is not
> necessary to measure them each time they are accessed by the TCB.

The builtin appraise_tcb appraises all files owned by root.  With this
patch you've redefined TCB to be any currently loaded IMA policy.

> This solves one of the main problems of binary attestation: when a
> modified file is accessed by the TCB, it was necessary to measure it
> because verifiers cannot determine from the measurement list if the
> writer belong or not to the TCB. Verifiers find an unknown digest
> and have to consider the whole system as compromised.
> 
> If the Biba strict policy has been selected, and appraisal is in enforce
> mode, IMA measures files at first access, if they have a digital signature.
> Then, for subsequent accesses, files are not measured again, unless the
> appraisal status changes.

Signed files aren't changing, so there should only be one file
measurement in the measurement list.  So this only affects mutable
files.  We're going through a lot of effort to re-measure mutable
files after they change.

> 
> Signed-off-by: Roberto Sassu <roberto.sassu@xxxxxxxxxx>
> ---
>  security/integrity/ima/ima_main.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index 6e85ea8e2373..16c2da0e32d9 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -200,10 +200,16 @@ static int process_measurement(struct file *file, char *buf, loff_t size,
>  			goto out;
>  	}
> 
> -	if (ima_integrity_policy)
> +	if (ima_integrity_policy) {
>  		policy_violation = ima_appraise_biba_check(file, iint,
>  						must_appraise, &pathbuf,
>  						&pathname, filename);
> +		/* do not measure mutable files, if they are appraised */
> +		if (ima_integrity_policy == BIBA_STRICT &&
> +		    (ima_appraise & IMA_APPRAISE_ENFORCE))
> +			if (iint && (iint->flags & IMA_APPRAISED))
> +				action &= ~IMA_MEASURE;
> +	}
>  	if (violation_check)
>  		ima_rdwr_violation_check(file, iint, action & IMA_MEASURE,
>  					 &pathbuf, &pathname);
> @@ -246,9 +252,16 @@ static int process_measurement(struct file *file, char *buf, loff_t size,
>  	if (!pathbuf)	/* ima_rdwr_violation possibly pre-fetched */
>  		pathname = ima_d_path(&file->f_path, &pathbuf, filename);
> 
> -	if (rc == 0 && (action & IMA_APPRAISE_SUBMASK))
> +	if (rc == 0 && (action & IMA_APPRAISE_SUBMASK)) {
>  		rc = ima_appraise_measurement(func, iint, file, pathname,
>  					      xattr_value, xattr_len, opened);
> +		if (!rc && ima_integrity_policy == BIBA_STRICT &&
> +		    (ima_appraise & IMA_APPRAISE_ENFORCE)) {
> +			iint->flags &= ~IMA_MEASURE;
> +			if (!(iint->flags & IMA_DIGSIG))
> +				action &= ~IMA_MEASURE;
> +		}
> +	}
>  	if (action & IMA_MEASURE)
>  		ima_store_measurement(iint, file, pathname,
>  				      xattr_value, xattr_len, pcr);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux Kernel]     [Linux Kernel Hardening]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux