Thanks Stefan for reviewing this series. Appreciate it.
Re-sending this email. I accidentally had some HTML content, the email
bounced back from integrity mailing list.
On 8/3/23 06:37, Stefan Berger wrote:
On 8/1/23 14:19, Tushar Sugandhi wrote:
Entries in IMA log may be lost due to code bugs, certain error
conditions
I hope we don't have such bugs. And I guess the most critical ones
would be
between logging and PCR extensions
I hope so too, but in general, it’s hard to prove a negative.
That’s why this patch series. :)
being met etc. This can result in TPM PCRs getting out of sync with the
IMA log. One such example is events between kexec 'load' and kexec
'execute' getting lost from the IMA log when the system soft-boots into
the new Kernel using kexec[1]. The remote attestation service does not
Though this particular condition I thought would go away with your
kexec series.
Currently the events in-between kexec ‘load’ and ‘execute’ are always
lost – because IMA log is captured at ‘load’. My kexec series addresses
this scenario. But as you said, there is always a possibility that the
events will still be lost during kexec because of error conditions, OOM
etc.
The other conditions would be an out-of-memory or TPM failure. The OOM
would
probably be more critical since something that was supposed to be logged
couldn't be logged and now you cannot show this anymore and presumably
not even
an error condition could be logged.
Precisely. As you can see in patch 5 of this series, I am logging the
counter at ima_init (ima_init_tpm_update_counter). So we will get the
baseline counter at the system boot, where memory pressure is hopefully
low. Even if we are not able to log the counter later due to OOM, this
baseline counter along with the number of events in the IMA log should
help detect if IMA log is missing events.
https://elixir.bootlin.com/linux/latest/source/security/integrity/ima/ima_queue.c#L179
have any information if the PCR mismatch with IMA log is because of loss
of entries in the IMA log or something else. TPM 2.0 provides an update
counter which is incremented each time a PCR is updated [2].
Measuring the
TPM PCR update counter in IMA subsystem will help the remote attestation
service to validate if there are any missing entries in the IMA log,
when
the system goes through certain important state changes (e.g. kexec soft
boot, IMA log snapshotting etc.)
This patch series provides the required functionality to measure the
update counter through IMA subsystem by -
- introducing a function to retrieve PCR update counter in the TPM
subsystem.
- IMA functionality to acquire the update counter from the TPM
subsystem.
- Measuring the update counter at system boot and at kexec Kernel
load.
Then the bugs you mentioned above that may happen between system boot
and kexec
load are still going to confuse anyone looking at the log and quote. I
don't
think you should mention them. I thought you would provide a way to sync
I used the kexec load-execute bug as an example to demonstrate the value of
measuring update counter. There could be other examples which I am not
aware of. As we discussed above, even when I fix the kexec bug – there is
still a possibility that events may go missing in error/OOM cases.
I can remove the kexec example if it is causing confusion.
Please let me know.
up on every step...
I don’t fully understand what you mean by “provide a way to sync up
on every step”. Could you please elaborate?
Also, I thought you had a variable in your kexec series that would
prevent all further
logging and measuring once the log had been marshalled during kexec
'exec' stage
and this wasn't necessary.
No, the variable suspend_ima_measurements[1] suspends the measurements
while copying the kexec buffer during kexec execute to ensure consistency
of the IMA measurements. It doesn’t prevent all future logging. The
variable is reset and the IMA measurements resume when the system boots
into the new Kernel image.
[1]
https://patchwork.kernel.org/project/linux-integrity/patch/20230703215709.1195644-10-tusharsu@xxxxxxxxxxxxxxxxxxx/
~Tushar
Stefan
This patch series would be a prerequisite for the next version of kexec
load/execute series[1] and the future IMA log snapshotting patch series.
[1]
https://lore.kernel.org/all/20230703215709.1195644-1-tusharsu@xxxxxxxxxxxxxxxxxxx/
ima: measure events between kexec load and execute
[2]
https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf
Section 22.4.2, Page 206.
Tushar Sugandhi (6):
tpm: implement TPM2 function to get update counter
tpm: provide functionality to get update counter
ima: get TPM update counter
ima: implement functionality to measure TPM update counter
ima: measure TPM update counter at ima_init
kexec: measure TPM update counter in ima log at kexec load
drivers/char/tpm/tpm-interface.c | 28 +++++++++++++++++
drivers/char/tpm/tpm.h | 3 ++
drivers/char/tpm/tpm2-cmd.c | 48 ++++++++++++++++++++++++++++++
include/linux/ima.h | 1 +
include/linux/tpm.h | 8 +++++
kernel/kexec_file.c | 3 ++
security/integrity/ima/ima.h | 2 ++
security/integrity/ima/ima_init.c | 3 ++
security/integrity/ima/ima_main.c | 29 ++++++++++++++++++
security/integrity/ima/ima_queue.c | 16 ++++++++++
10 files changed, 141 insertions(+)
_______________________________________________
kexec mailing list
kexec@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/kexec