Re: [PATCH v10 11/12] ima: Define ima-modsig template
From: Thiago Jung Bauermann <hidden>
Date: 2019-05-28 19:10:13
Also in:
keyrings, linux-crypto, linux-doc, linux-integrity, linux-security-module, lkml
Mimi Zohar [off-list ref] writes:
On Thu, 2019-04-18 at 00:51 -0300, Thiago Jung Bauermann wrote:quoted
Define new "d-modsig" template field which holds the digest that is expected to match the one contained in the modsig, and also new "modsig" template field which holds the appended file signature. Add a new "ima-modsig" defined template descriptor with the new fields as well as the ones from the "ima-sig" descriptor. Change ima_store_measurement() to accept a struct modsig * argument so that it can be passed along to the templates via struct ima_event_data. Suggested-by: Mimi Zohar <zohar@linux.ibm.com> Signed-off-by: Thiago Jung Bauermann <redacted>Thanks, Roberto. Just some thoughts inline below. Reviewed-by: Mimi Zohar <zohar@linux.ibm.com>
Thanks!
quoted
+/* + * Validating the appended signature included in the measurement list requires + * the file hash calculated without the appended signature (i.e., the 'd-modsig' + * field). Therefore, notify the user if they have the 'modsig' field but not + * the 'd-modsig' field in the template. + */ +static void check_current_template_modsig(void) +{ +#define MSG "template with 'modsig' field also needs 'd-modsig' field\n" + struct ima_template_desc *template; + bool has_modsig, has_dmodsig; + static bool checked; + int i; + + /* We only need to notify the user once. */ + if (checked) + return; + + has_modsig = has_dmodsig = false; + template = ima_template_desc_current(); + for (i = 0; i < template->num_fields; i++) { + if (!strcmp(template->fields[i]->field_id, "modsig")) + has_modsig = true; + else if (!strcmp(template->fields[i]->field_id, "d-modsig")) + has_dmodsig = true; + } + + if (has_modsig && !has_dmodsig) + pr_notice(MSG); + + checked = true; +#undef MSG +} +There was some recent discussion about supporting per IMA policy rule template formats. This feature will allow just the kexec kernel image to require ima-modsig. When per policy rule template formats support is upstreamed, this function will need to be updated.
Indeed. Thanks for the clarification. For the next iteration I rebased on top of Matthew Garret's "IMA: Allow profiles to define the desired IMA template" patch. I'm currently adapting this check accordingly.
quoted
@@ -389,3 +425,25 @@ int ima_eventsig_init(struct ima_event_data *event_data, return ima_write_template_field_data(xattr_value, event_data->xattr_len, DATA_FMT_HEX, field_data); } + +int ima_eventmodsig_init(struct ima_event_data *event_data, + struct ima_field_data *field_data) +{ + const void *data; + u32 data_len; + int rc; + + if (!event_data->modsig) + return 0; + + /* + * The xattr_value for IMA_MODSIG is a runtime structure containing + * pointers. Get its raw data instead. + */"xattr_value"? The comment needs some clarification.
Oops, forgot to update this comment. This is the new version: /* * modsig is a runtime structure containing pointers. Get its raw data * instead. */ -- Thiago Jung Bauermann IBM Linux Technology Center