From 314a8101f91fbdd06374345a6fa1f1679d539383 Mon Sep 17 00:00:00 2001 From: Roberto Sassu Date: Wed, 3 Jun 2020 12:31:20 +0200 Subject: [PATCH] Add version 0.3.91 --- README.en.md | 542 ++++++++++++++++++++++++++++++-- digest-list-tools-0.3.91.tar.gz | Bin 0 -> 70330 bytes digest-list-tools.spec | 114 +++++++ 3 files changed, 632 insertions(+), 24 deletions(-) create mode 100644 digest-list-tools-0.3.91.tar.gz create mode 100644 digest-list-tools.spec diff --git a/README.en.md b/README.en.md index 405f715..2f84697 100644 --- a/README.en.md +++ b/README.en.md @@ -1,36 +1,530 @@ # digest-list-tools -#### Description -IMA digest list extension userspace tools +## Description -#### Software Architecture -Software architecture description +Integrity Measurement Architecture (IMA) is a software in the Linux kernel for +measuring files accessed with the execve(), mmap() and open() system calls. +Measurements can be reported to a remote verifier or compared to reference +values, for appraisal. -#### Installation +The IMA Digest Lists extension stores in the kernel memory reference values +of OS software, and adds a new entry to the measurement list only if calculated +file digests are not found among those values. This new type of IMA measurement +list which only contains digest lists and unknown files uses a different PCR, +which can be specified in the kernel command line with the option +'ima_digest_list_pcr=#PCR'. -1. xxxx -2. xxxx -3. xxxx +The main purpose of this extension is to overcome one of the main challenges +when OS files are measured: final PCR values when the OS is running cannot be +predicted, as files can be accessed in a different order due to parallel +execution. -#### Instructions +With the Digest Lists extension, this problem does not arise as only the +measurement of the preloaded digest lists will be used to update the PCR. +In the good case, the PCR is not further extended if file digests are found in +one of the lists. In the bad case, the PCR is extended with the digest of +unknown files. -1. xxxx -2. xxxx -3. xxxx +The IMA Digest Lists extension can be also used to grant access to files when +appraisal is enabled. There are two possible usages. Access can be granted if +the digest of file content is found in a digest list: this is less secure as +metadata are not taken into account. Access can be granted if the digest of +metadata is found in a digest list; this is more secure as the current value of +extended attributes and inode attributes protected by EVM must match with those +set when the digest list was created (e.g. by the vendor). -#### Contribution +More information about the extension can be found at the URL: -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request +https://github.com/euleros/linux/wiki/IMA-Digest-Lists-Extension -#### Gitee Feature -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +## Software Architecture + +digest-list-tools provides a set of tools necessary to configure the IMA Digest +Lists extension: + +- gen_digest_lists: + Generates digest lists from different sources, e.g. the RPM database, a RPM + package or a directory; + +- upload_digest_lists: + Converts digest lists of arbitrary formats to the format supported by the + kernel; it can also upload converted digest lists to the kernel; + +- verify_digest_lists: + Verifies the integrity of digest lists; + +- setup_ima_digest_lists: + Generates digest lists, and optionally updates the initial ram disk, including + the digest lists just created; + +- setup_ima_digest_list_demo: + Script with a predefined workflow to create digest lists. + +Both upload_digest_lists and gen_digest_lists have a modular design: they can +support additional parsers/generators. Third-party libraries should be placed in +the $libdir/digestlist directory. + + + +### Lifecycle + + gen_digest_lists: + +----------------------+ + | Source (e.g. RPM DB) | (1) provide source + +----------------------+ + | + | + +------------+ +-------------+ (3) generate digest list and sign + | Generator 1| ... | Generator N | ---------------------------------| + +------------+ +-------------+ | + +-----------------------------------+ +-------------+ | + | Base library (I/O, xattr, crypto) | <---- | Signing Key | | + +-----------------------------------+ +-------------+ | + (2) provide signing key | + +------+--------------+ + | Sig | Digest list | + | | (fmt N) | + +------+--------------+ + upload_digest_lists: | + (4) parse digest list (fmt N) | + +----------+ +----------+ | + | Parser 1 | ... | Parser N | <--------------------------------| + +----------+ +----------+ + +-----------------------------------+ + | Compact list API (generator) | (5) convert to compact list + +-----------------------------------+ + +-----------------------------------+ +--------+ + | Base library (I/O) | ----------> | Kernel | + +-----------------------------------+ +--------+ + (6) upload compact list + + + +### Digest List Types + +Digest list types have been defined to restrict the usage of digest list data +for different purposes. + +- COMPACT_KEY: + This type of digest list contains the public key used to verify the signatures + of the other digest lists. + +- COMPACT_PARSER: + This type of digest list contains the digests of the parser executable and its + shared libraries (including the ones that support new digest list formats). + IMA will not allow user space processes to upload converted digest lists + unless they have this digest type. + +- COMPACT_FILE: + This type of digest list contains digests of regular files. + +- COMPACT_METADATA: + This type of digest list contains digests of file metadata calculated in the + same way as for EVM portable signatures. + + + +### Digest List Modifiers + +Digest list modifiers are used to provide additional attributes to digest list +types. + +- COMPACT_MOD_IMMUTABLE: + This modifier restricts the usage of the file if appraisal is in enforcing + mode. Files whose digest has this modifier can be opened only for read. + + + +### Digest List Directory + +All digest lists are stored by default in the /etc/ima/digest_lists directory. +The format of the file is as follows: + +<#position>-\_list-\-\ + +For example, a typical content of the digest list directory is: + +``` +/etc/ima/digest_lists/0-metadata_list-rpm-libxslt-1.1.29-4.fc27-x86_64 +/etc/ima/digest_lists/0-metadata_list-rpm-sqlite-libs-3.20.1-2.fc27-x86_64 +/etc/ima/digest_lists/0-metadata_list-rpm-xkeyboard-config-2.22-1.fc27-noarch +``` + + +## Installation +### Use Case - Measurement and Appraisal of Executable Code + +This setup procedure can be used to enable appraisal of binaries, shared +libraries and scripts with digest lists. + +#### Prerequisite for Measurement + +- check the algorithm of digests in the RPM database by executing: +``` + rpm -q systemd --queryformat "%{RPMTAG_FILEDIGESTALGO}\n" +``` + the association between ID and digest algorithms can be retrieved at: + https://tools.ietf.org/html/rfc4880#section-9.4 +- add to the kernel command line: +``` + ima_hash= +``` + +#### Prerequisite for Appraisal + +- generate a signing key and a certificate including the public key; + certs/signing_key.pem in the kernel source can be used +- convert the certificate to DER format and copy it to /etc/keys: +``` + openssl x509 -in certs/signing_key.pem -out /etc/keys/x509_evm.der \ + -outform der +``` +- add an IMA signature to x509_evm.der with the private part of the same key +- remove 'root=' option from the kernel command line and add the + following line to /etc/dracut.conf: +``` + kernel_cmdline+="root=" +``` +- add the following line to /etc/dracut.conf, to include the public key to + verify the digest lists: +``` + install_items+="/etc/keys/x509_ima.der /etc/keys/x509_evm.der" +``` + + +#### Bootloader Configuration + +It is recommended to create the following entries and add the string below to +the kernel comand line: + +1) MEASUREMENT +``` + ima_digest_list_pcr=11 ima_policy="tcb|initrd" +``` + +2) APPRAISAL ENFORCE +``` + ima_digest_list_pcr=11 ima_policy="tcb|initrd|appraise_tcb|appraise_initrd" \ + ima_appraise=digest ima_appraise=enforce-evm +``` + +#### IMA Policy + +The following policy must be written to /etc/ima/ima-policy: + +``` +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +measure func=POLICY_CHECK +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +appraise func=BPRM_CHECK appraise_type=imasig +appraise func=MMAP_CHECK +``` + +The imasig requirement cannot be applied to the MMAP_CHECK hook, as some +processes (e.g. firewalld) map as executable files in tmpfs. + + +#### Setup + +In a system with the RPM package manager, digest lists can be generated with the +command: + +``` +# gen_digest_lists -t metadata -f rpm+db -i l: -o add -p -1 -m immutable \ + -i f:compact -i F:/lib/firmware -i F:/lib/modules -d /etc/ima/digest_lists \ + -i i: -i x: -i e: +``` + +The command above selects only packaged files with execute bit set and all the +files in the /lib/firmware and /lib/modules directories. It adds both IMA and +EVM digests to the digest lists for all packages in the RPM database. + +Without an execution policy hardcoded in the kernel, it is necessary to create a +complete digest list for systemd, as configuration files will be still measured +and appraised until the custom policy is loaded by systemd itself: + +``` +# gen_digest_lists -t metadata -f rpm+db -i l: -o add -p -1 -m immutable \ + -i f:compact -i F:/lib/firmware -i F:/lib/modules -d /etc/ima/digest_lists \ + -i i: -i x: -i p:systemd +``` + +With a custom kernel, it is necessary to additionally execute: + +``` +# gen_digest_lists -t metadata -f compact -i l: -o add -p -1 -m immutable \ + -i I:/lib/modules/`uname -r` -d /etc/ima/digest_lists -i i: -i x: +``` + +Other files not known by the package manager can be also added to a digest list: +``` +# gen_digest_lists -t metadata -f unknown -i l: -o add -p -1 -m immutable \ + -i D:/etc/ima/digest_lists -i I: -d /etc/ima/digest_lists \ + -i i: -i x: -i e: +``` + +After digest lists are created, they must be signed with evmctl: + +``` +# evmctl sign -o -a sha256 --imahash --key -r \ + /etc/ima/digest_lists +``` + +Regenerate the initial ram disk and include the custom IMA policy: + +``` +# dracut -f -exattr -I /etc/ima/ima-policy +``` + +In order to execute the command above, that includes extended attributes in the +initial ram disk, it is necessary to apply the patches available at: + +https://github.com/euleros/cpio/tree/xattr-v1 +https://github.com/euleros/dracut/tree/digest-lists + + +Digest lists will be automatically included in the initial ram disk by the new +dracut module 'digestlist', part of this software. Its configuration file is in +/etc/dracut.conf.d. + + +#### Boot Process + +Digest lists are loaded as early as possible during the boot process, so that +digests can be found before file are accessed. The kernel reads and parses the +digest lists in the /etc/ima/digest_lists directory. + + +#### Software Update + +If new RPMs are installed on the system, new digest lists must be created with +the same commands introduced above. The new digest lists are not automatically +loaded at boot until the initial ram disk is regenerated. A systemd service will +be developed to load new digest lists without regenerating the initial ram disk. + + + +### Use Case - Immutable and Mutable Files (with HMAC Key) + +The steps described below represent only a configuration example. The list of +files that should be included in the digest lists and the type (immutable or +mutable) depend on user requirements. The setup process is organized in two +different steps. First, the system is booted in rescue mode so that digest of +mutable files can be reliably calculated (there is no process accessing them). + +During the first step, the administrator launches the +setup_ima_digest_lists_demo script to create digest lists for the system. +It might be done by the software vendor if the content of all files that will +be measured/appraised is known in advance. Otherwise, the administrator becomes +responsible for the initial values of the files that will be accessed by the +system, by signing the digest lists. At this stage, the HMAC key is not yet +available. It will be created and sealed once the digest lists are generated. + +For the second step, the administrator runs the system in the final +configuration, so that the HMAC key can be unsealed, but still selects the +rescue mode. During this step, the administrator launches again the +setup_ima_digest_lists_demo script to add a HMAC to every file verified with +the digest lists. + +#### Prerequisite for measurement: + +- add 'iversion' mount option in /etc/fstab (if the filesystem supports it) +- check the algorithm of digests in the RPM database by executing: +``` + rpm -q systemd --queryformat "%{RPMTAG_FILEDIGESTALGO}\n" +``` + the association between ID and digest algorithms can be retrieved at: + https://tools.ietf.org/html/rfc4880#section-9.4 +- add to the kernel command line: +``` + ima_hash= +``` + +#### Prerequisite for appraisal: + +- generate a signing key and a certificate including the public key; + certs/signing_key.pem in the kernel source can be used +- convert the certificate to DER format and copy it to /etc/keys: +``` + openssl x509 -in certs/signing_key.pem -out /etc/keys/x509_ima.der \ + -outform der +``` +- generate EVM keys; follow instructions at + https://sourceforge.net/p/linux-ima/wiki/Home/, section 'Creating trusted and + EVM encrypted keys' +- remove 'root=' option from the kernel command line and add the + following line to /etc/dracut.conf: +``` + kernel_cmdline+="root=" +``` +- copy the following dracut modules from the GIT repository at + https://github.com/dracutdevs/dracut to /usr/lib/dracut/modules.d: +``` + 96securityfs 97masterkey 98integrity +``` +- include dracut modules in the ram disk by adding to /etc/dracut.conf: +``` + add_dracutmodules+=" securityfs masterkey integrity" +``` +- add the following lines to /etc/dracut.conf, to include the public key to + verify the digest lists, and the EVM keys: +``` + install_items+="/etc/keys/x509_ima.der" + install_items+="/etc/keys/kmk-trusted.blob /etc/keys/evm-trusted.blob" +``` + (in the last line, replace kmk-trusted with kmk-user if a user key was used as + masterkey) +- add the following line to /etc/dracut.conf, to include SELinux labels in the + initial ram disk: +``` + install_items+="/etc/selinux/targeted/contexts/files/file_contexts" + install_items+=/etc/selinux/targeted/contexts/files/file_contexts.subs_dist" +``` + + +#### Bootloader Configuration + +It is recommended to create the following entries and add the string below +to the kernel comand line: + +1) SETUP +``` + systemd.unit=setup-ima-digest-lists.service +``` + +2) MEASUREMENT +``` + ima_digest_list_pcr=11 ima_policy="tcb|initrd" +``` + +3) APPRAISAL ENFORCE SETUP +``` + ima_digest_list_pcr=11 ima_policy="tcb|initrd|appraise_tcb|appraise_initrd| \ + appraise_tmpfs" ima_appraise=digest ima_appraise=enforce-evm evm=random + systemd.unit=setup-ima-digest-lists.service +``` + +4) APPRAISAL ENFORCE +``` + ima_digest_list_pcr=11 ima_policy="tcb|initrd|appraise_tcb|appraise_initrd| \ + appraise_tmpfs" ima_appraise=digest ima_appraise=enforce-evm evm=random +``` + +5) APPRAISAL PERMISSIVE +``` + ima_digest_list_pcr=11 ima_policy="tcb|initrd|appraise_tcb|appraise_initrd| \ + appraise_tmpfs" ima_appraise=digest ima_appraise=log-evm evm=random +``` + + +#### Setup - First Phase + +##### With RPM Package Manager + +digest-list-tools includes a script called setup_ima_digest_lists_demo to +simplify the creation of digest lists. It will create the following digest +lists: + +- digest lists from package manager +- digest list of unknown files in the initial ram disk (some are generated by + dracut) +- digest list of IMA policy +- digest list of unknown files in the root filesystem so that appraisal can be + enabled (important: digest of metadata will be created from the current value + of extended attributes; they must be checked by the administrator before the + digest list is generated and signed) + +1) Execute: + +``` +# setup_ima_digest_lists_demo initial [signing key] [X.509 certificate] +``` + +The procedure is interactive and the script asks the user to confirm/edit the +list of files whose digest will be included in the digest list. + +2) Reboot + +Reboot the system to load the new digest lists during the boot process. + + +##### Without RPM Package Manager + +An alternative way to create a digest list is to directly take file digests from +the filesystem without using the package manager. To do that, it is sufficient +to edit setup_ima_digest_lists_demo and to comment the line that begins with +'setup_ima_digest_lists distro'. + + +#### Setup - Second Phase + +After the first phase of the setup, /etc/ima/digest_lists contains all the +digest lists necessary to boot the system with appraisal enabled and enforced. +The remaining step is to add a HMAC to every file added to the digest lists. + +1) Execute: + +``` +# setup_ima_digest_lists_demo final +``` + +### Software Update + +#### Generation + +Digest lists can be generated with the gen_digest_lists tool. A description of +this command can be obtained by executing the command: + +``` +$ man gen_digest_lists +``` + +#### Upload + +After digest lists have been generated, they can be uploaded by executing the +command: + +``` +# upload_digest_lists +``` + +### Integrity Verification + +The measurement list, after loading the digest lists, will look like: + +``` +11 ima-ng boot_aggregate +11 ima-ng /etc/keys/x509_ima.der +11 ima-ng [...]/0-parser_list-compact-upload_digest_lists +11 ima-ng [...]/0-key_list-signing_key.der +11 ima-ng [...]/1-parser_list-compact-libparser-ima.so +11 ima-ng [...]/2-parser_list-compact-libparser-rpm.so +11 ima-ng [...]/0-file_list-rpm-libxslt-1.1.29-4.fc27-x86_64 +... + +``` + +An attestation server can use the verify_digest_lists tool to verify the +integrity of digest lists. For example, it can execute: + +``` +$ verify_digest_lists +``` + + +## Author +Written by Roberto Sassu, . + + + +## Copying +Copyright (C) 2018-2020 Huawei Technologies Duesseldorf GmbH. Free use of this +software is granted under the terms of the GNU Public License 2.0 (GPLv2). diff --git a/digest-list-tools-0.3.91.tar.gz b/digest-list-tools-0.3.91.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..79f91d27a8d074d4a58ebf9266946ca456f2965d GIT binary patch literal 70330 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�r{p1}TkwzEMrfhgJeQm*VtQj`OQ}Z0 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 literal 0 HcmV?d00001 diff --git a/digest-list-tools.spec b/digest-list-tools.spec new file mode 100644 index 0000000..41c9756 --- /dev/null +++ b/digest-list-tools.spec @@ -0,0 +1,114 @@ +name: digest-list-tools +Version: 0.3.91 +Release: 1%{?dist} +Summary: Digest list tools + +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +License: GPL-2.0 +Url: https://github.com/euleros/digest-list-tools +BuildRequires: autoconf automake libcurl-devel libtool rpm-devel dracut gzip +BuildRequires: libcap-devel libcmocka-devel + +%if 0%{?suse_version} +BuildRequires: libopenssl-devel +BuildRequires: linux-glibc-devel keyutils-devel +%endif + +%if 0%{?fedora} +BuildRequires: openssl-devel kernel-headers +BuildRequires: keyutils-libs-devel +%endif + +%description +This package includes the tools for configure the IMA Digest Lists extension. + +%prep +%setup -q + +%build +autoreconf -iv +%configure +make %{?_smp_mflags} +make check + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/ima/digest_lists +mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1 + +%post +ldconfig + +%postun +ldconfig + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%dir %{_sysconfdir}/dracut.conf.d +%{_sysconfdir}/dracut.conf.d/digestlist.conf +%dir %{_sysconfdir}/ima +%dir %{_sysconfdir}/ima/digest_lists +%{_bindir}/gen_digest_lists +%{_bindir}/setup_ima_digest_lists +%{_bindir}/setup_ima_digest_lists_demo +%{_bindir}/upload_digest_lists +%{_bindir}/verify_digest_lists +%{_libdir}/libdigestlist-base.so +%dir %{_libdir}/digestlist +%{_libdir}/digestlist/libgenerator-compact.so +%{_libdir}/digestlist/libgenerator-copy.so +%{_libdir}/digestlist/libgenerator-rpm.so +%{_libdir}/digestlist/libgenerator-unknown.so +%{_libdir}/digestlist/libparser-compact_tlv.so +%{_libdir}/digestlist/libparser-rpm.so +%{_unitdir}/setup-ima-digest-lists.service +%dir /usr/lib/dracut/modules.d/98digestlist +%{_prefix}/lib/dracut/modules.d/98digestlist/module-setup.sh +%{_prefix}/lib/dracut/modules.d/98digestlist/upload_meta_digest_lists.sh +%{_prefix}/lib/dracut/modules.d/98digestlist/load_digest_lists.sh +%exclude /usr/lib64/digestlist/*.a +%exclude /usr/lib64/digestlist/*.la +%exclude /usr/lib64/libdigestlist-base.a +%exclude /usr/lib64/libdigestlist-base.la + +%doc +%dir /usr/share/digest-list-tools +%{_datarootdir}/digest-list-tools/README.md +%{_datarootdir}/digest-list-tools/gen_digest_lists.txt +%{_datarootdir}/digest-list-tools/setup_ima_digest_lists.txt +%{_datarootdir}/digest-list-tools/setup_ima_digest_lists_demo.txt +%{_datarootdir}/digest-list-tools/upload_digest_lists.txt +%{_datarootdir}/digest-list-tools/verify_digest_lists.txt +%{_mandir}/man1/gen_digest_lists.1.gz +%{_mandir}/man1/setup_ima_digest_lists.1.gz +%{_mandir}/man1/setup_ima_digest_lists_demo.1.gz +%{_mandir}/man1/verify_digest_lists.1.gz +%{_mandir}/man1/upload_digest_lists.1.gz +%{_mandir}/man1/%{name}.1.gz + +%changelog +* Tue Jun 03 2020 Roberto Sassu - 0.3.91 +- Bug fixes + +* Fri Apr 17 2020 Roberto Sassu - 0.3.90 +- TLV compact list +- unknown generator +- digest list of metadata + +* Tue Mar 19 2019 Roberto Sassu - 0.3 +- refactored code +- tests + +* Thu Apr 05 2018 Roberto Sassu - 0.2 +- PGP signatures +- Multiple digest algorithms +- User space digest list parser +- DEB package format + +* Wed Nov 15 2017 Roberto Sassu - 0.1 +- Initial version