Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp4268722pxu; Wed, 9 Dec 2020 12:35:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzoIDDnfj/nPKZzNeZKE5KVlT6QSLCCrXyMlZyTFisL3DwuCEe0tx/fL0T1VUFrdrHi0FMm X-Received: by 2002:a17:906:c45:: with SMTP id t5mr3523303ejf.370.1607546134760; Wed, 09 Dec 2020 12:35:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607546134; cv=none; d=google.com; s=arc-20160816; b=iH/a/hoNUtFQihU50X5u5wQ2r5IgAOMuLDa8pTnFHOLV9fuo4juiNebnyCcy3DnOsp wGx8UBJS0dXaH1o0JCouWvHZCnEsblsKATzB7cOPLYEiZlD+Fk/UMrcMXbS1Qh3Kp5BP nGn3H45HYwmKA0A5DKkgeLESchholBzIXp4xBjQ9HWs1McB+eZDS3tOvaSfZFJnB86BY fLfQVvwjn+7nnSX/zdZ9hh7Pa0q2/3Y8gJ/suLOuNSu9tPce/OcYR6vK6k2YpCCaqxYU RPSrwR5bhLfScEwyEkUdDG85+SokGQ13cSY/mozMglJtnzQaGxbA4UdY3K+LRchhpXt0 5Flg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature:dkim-filter; bh=bzuU81mo+/j5mNSRtkpRgP9nYoQTmrBcFrpkU3iE3ic=; b=lwkKzl9itwPRYK1h7wM1OKOJZ+tiKLtzY2P41BQUF8GBzg+AYvduD1OwQJB/ID0Fez iVoZq2LVBCIEzmlJx8gdQk87l1gnmyT+unyi1VnjtezBRViuKFOyXHrLqpMZkGbJglEu IUUOdRSG/QPjP3XIrioh3IOUgBt8+GaNecbtc3yIXYQToPYqj5t4PReV23xpuoEOgbVR TajJumLkRxEMQUnv5NezfNw7OPcfg0jp0wJ/g467QOVqtTzK5DQYHk7yUTUWujkN+oe0 TC0uS8b/Awnp/6kGFtmmeZ5KzwZlQxHQ3vItQ3WMYpGhZXBAiCZXf/YyjWONxaWOTLK3 s3Rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=pCjeKE1f; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t23si1641337edc.387.2020.12.09.12.35.05; Wed, 09 Dec 2020 12:35:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=pCjeKE1f; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387934AbgLITnt (ORCPT + 99 others); Wed, 9 Dec 2020 14:43:49 -0500 Received: from linux.microsoft.com ([13.77.154.182]:47630 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387839AbgLITnq (ORCPT ); Wed, 9 Dec 2020 14:43:46 -0500 Received: from tusharsu-Ubuntu.lan (c-71-197-163-6.hsd1.wa.comcast.net [71.197.163.6]) by linux.microsoft.com (Postfix) with ESMTPSA id 63C8420B718A; Wed, 9 Dec 2020 11:42:25 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 63C8420B718A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1607542945; bh=bzuU81mo+/j5mNSRtkpRgP9nYoQTmrBcFrpkU3iE3ic=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pCjeKE1fNFwsNAHAmuZljsUTb383ZrRhoNT2NkT0DLtcfKkRLl/DmwpZWo9LvNPIS yXhMfNUvsjvhkquZbGZ4eZ05FX476WF4f4yVNY+GYbK5kFfuUtzAYYY0ALu5Ll5r4W TMEPWp4as7YNEEp0B2rXoAJ51EmwLmWFJ9yYRtjM= From: Tushar Sugandhi To: zohar@linux.ibm.com, stephen.smalley.work@gmail.com, casey@schaufler-ca.com, agk@redhat.com, snitzer@redhat.com, gmazyland@gmail.com, paul@paul-moore.com Cc: tyhicks@linux.microsoft.com, sashal@kernel.org, jmorris@namei.org, nramas@linux.microsoft.com, linux-integrity@vger.kernel.org, selinux@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH v7 5/8] IMA: limit critical data measurement based on a label Date: Wed, 9 Dec 2020 11:42:09 -0800 Message-Id: <20201209194212.5131-6-tusharsu@linux.microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201209194212.5131-1-tusharsu@linux.microsoft.com> References: <20201209194212.5131-1-tusharsu@linux.microsoft.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org System administrators should be able to limit which kernel subsystems they want to measure the critical data for. To enable that, an IMA policy condition to choose specific kernel subsystems is needed. This policy condition would constrain the measurement of the critical data based on a label for the given subsystems. Add a new IMA policy condition - "data_source:=" to the IMA func CRITICAL_DATA to allow measurement of various kernel subsystems. This policy condition would enable the system administrators to restrict the measurement to the labels listed in "data_source:=". Limit the measurement to the labels that are specified in the IMA policy - CRITICAL_DATA+"data_source:=". If "data_sources:=" is not provided with the func CRITICAL_DATA, the data from all the supported kernel subsystems is measured. Signed-off-by: Tushar Sugandhi --- Documentation/ABI/testing/ima_policy | 2 ++ security/integrity/ima/ima_policy.c | 26 +++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/ima_policy b/Documentation/ABI/testing/ima_policy index 6ec7daa87cba..0f4ee9e0a455 100644 --- a/Documentation/ABI/testing/ima_policy +++ b/Documentation/ABI/testing/ima_policy @@ -52,6 +52,8 @@ Description: template:= name of a defined IMA template type (eg, ima-ng). Only valid when action is "measure". pcr:= decimal value + data_source:= [label] + label:= a unique string used for grouping and limiting critical data. default policy: # PROC_SUPER_MAGIC diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 9a8ee80a3128..7486d09a3f60 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -934,7 +934,7 @@ enum { Opt_uid_lt, Opt_euid_lt, Opt_fowner_lt, Opt_appraise_type, Opt_appraise_flag, Opt_permit_directio, Opt_pcr, Opt_template, Opt_keyrings, - Opt_err + Opt_data_source, Opt_err }; static const match_table_t policy_tokens = { @@ -971,6 +971,7 @@ static const match_table_t policy_tokens = { {Opt_pcr, "pcr=%s"}, {Opt_template, "template=%s"}, {Opt_keyrings, "keyrings=%s"}, + {Opt_data_source, "data_source=%s"}, {Opt_err, NULL} }; @@ -1350,6 +1351,23 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) entry->flags |= IMA_KEYRINGS; break; + case Opt_data_source: + ima_log_string(ab, "data_source", args[0].from); + + if (entry->data_source) { + result = -EINVAL; + break; + } + + entry->data_source = ima_alloc_rule_opt_list(args); + if (IS_ERR(entry->data_source)) { + result = PTR_ERR(entry->data_source); + entry->data_source = NULL; + break; + } + + entry->flags |= IMA_DATA_SOURCE; + break; case Opt_fsuuid: ima_log_string(ab, "fsuuid", args[0].from); @@ -1730,6 +1748,12 @@ int ima_policy_show(struct seq_file *m, void *v) seq_puts(m, " "); } + if (entry->flags & IMA_DATA_SOURCE) { + seq_puts(m, "data_source="); + ima_show_rule_opt_list(m, entry->data_source); + seq_puts(m, " "); + } + if (entry->flags & IMA_PCR) { snprintf(tbuf, sizeof(tbuf), "%d", entry->pcr); seq_printf(m, pt(Opt_pcr), tbuf); -- 2.17.1