Initial Commit

This commit is contained in:
Shawn Dunn 2024-09-18 14:24:29 -07:00
commit e26c12fb8f
4 changed files with 85 additions and 0 deletions

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 KalpaDesktop
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

8
README.md Normal file
View File

@ -0,0 +1,8 @@
# kalpa-check
Initial design thoughts https://en.opensuse.org/Portal:Aeon/DevelopmentThoughts#aeon-check. This should be considered this project's long term goal.
Short term goal - Local checks only directly executing fixes for resolving specific bugs in Aeon RC3 and later
## Bugs Addressed
- Check existing Aeon Default Mode installations and confirm the TPM enrolment is using pcrlock not PCR hashes after incase enrolment steps occurred in an imperfect order (boo#1228416)

47
kalpa-check Executable file
View File

@ -0,0 +1,47 @@
#!/bin/bash
# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: Copyright 2024 SUSE LLC
# SPDX-FileCopyrightText: Copyright 2024 Richard Brown
# SPDX-FileCopyrightText: Copyright 2024 Shawn W Dunn
set -euo pipefail
# Setup logging
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>>/var/log/kalpa-check.log 2>&1
boo1228416() {
# Determine root device
rootdev=/dev/$(dmsetup deps -o devname /dev/mapper/kalpa_root | cut -d '(' -f2 | cut -d ')' -f1)
# Check for failure conditions
tpm2hashpcrs=$(cryptsetup luksDump ${rootdev} | grep 'tpm2-hash-pcrs:' | tr -d ' \t' | cut -d ':' -f2)
tpm2pcrlock=$(cryptsetup luksDump ${rootdev} | grep 'tpm2-pcrlock:' | tr -d ' \t' | cut -d ':' -f2)
# For boo1228416 to be an issue hashpcrs must be 7 and pcrlock must be false. Be paranoid, only match on both
if [ "${tpm2hashpcrs}" == "7" ] && [ "${tpm2pcrlock}" == "false" ]; then
echo "boo1228416 detected - TPM2 using pcr hashes not pcrlock - correcting"
# Need a keyfile to avoid requesting the recovery key when re-enrolling
keyfile=/tmp/aeon-check-keyfile
dd bs=512 count=4 if=/dev/urandom of=${keyfile} iflag=fullblock
chmod 400 ${keyfile}
# Should be slot 2, but better to check and be sure
tpm2slot=$(systemd-cryptenroll ${rootdev} | grep tpm2 | xargs | cut -d ' ' -f1)
# Writing keyfile to slot 31 (end of the LUKS2 space) to avoid clashes with any customisation/extra keys
cryptsetup luksAddKey --token-only --batch-mode --new-key-slot=31 ${rootdev} ${keyfile}
# Drop existing enrollment and re enroll
systemd-cryptenroll --wipe-slot=${tpm2slot} ${rootdev}
systemd-cryptenroll --unlock-key-file=${keyfile} --tpm2-device=auto ${rootdev}
# Wipe out keyfile and keyfile keyslot
systemd-cryptenroll --wipe-slot=31 ${rootdev}
rm ${keyfile}
echo "boo1228416 corrected"
fi
}
boo1228416

9
kalpa-check.service Normal file
View File

@ -0,0 +1,9 @@
[Unit]
Description=Kalpa Check Tool
[Service]
Type=oneshot
ExecStart=/usr/sbin/kalpa-check
[Install]
WantedBy=default.target