05 Oct, 2020

3 commits

  • As with the kernel_load_data LSM hook, add a "contents" flag to the
    kernel_read_file LSM hook that indicates whether the LSM can expect
    a matching call to the kernel_post_read_file LSM hook with the full
    contents of the file. With the coming addition of partial file read
    support for kernel_read_file*() API, the LSM will no longer be able
    to always see the entire contents of a file during the read calls.

    For cases where the LSM must read examine the complete file contents,
    it will need to do so on its own every time the kernel_read_file
    hook is called with contents=false (or reject such cases). Adjust all
    existing LSMs to retain existing behavior.

    Signed-off-by: Kees Cook
    Reviewed-by: Mimi Zohar
    Link: https://lore.kernel.org/r/20201002173828.2099543-12-keescook@chromium.org
    Signed-off-by: Greg Kroah-Hartman

    Kees Cook
     
  • There are a few places in the kernel where LSMs would like to have
    visibility into the contents of a kernel buffer that has been loaded or
    read. While security_kernel_post_read_file() (which includes the
    buffer) exists as a pairing for security_kernel_read_file(), no such
    hook exists to pair with security_kernel_load_data().

    Earlier proposals for just using security_kernel_post_read_file() with a
    NULL file argument were rejected (i.e. "file" should always be valid for
    the security_..._file hooks, but it appears at least one case was
    left in the kernel during earlier refactoring. (This will be fixed in
    a subsequent patch.)

    Since not all cases of security_kernel_load_data() can have a single
    contiguous buffer made available to the LSM hook (e.g. kexec image
    segments are separately loaded), there needs to be a way for the LSM to
    reason about its expectations of the hook coverage. In order to handle
    this, add a "contents" argument to the "kernel_load_data" hook that
    indicates if the newly added "kernel_post_load_data" hook will be called
    with the full contents once loaded. That way, LSMs requiring full contents
    can choose to unilaterally reject "kernel_load_data" with contents=false
    (which is effectively the existing hook coverage), but when contents=true
    they can allow it and later evaluate the "kernel_post_load_data" hook
    once the buffer is loaded.

    With this change, LSMs can gain coverage over non-file-backed data loads
    (e.g. init_module(2) and firmware userspace helper), which will happen
    in subsequent patches.

    Additionally prepare IMA to start processing these cases.

    Signed-off-by: Kees Cook
    Reviewed-by: KP Singh
    Link: https://lore.kernel.org/r/20201002173828.2099543-9-keescook@chromium.org
    Signed-off-by: Greg Kroah-Hartman

    Kees Cook
     
  • Move kernel_read_file* out of linux/fs.h to its own linux/kernel_read_file.h
    include file. That header gets pulled in just about everywhere
    and doesn't really need functions not related to the general fs interface.

    Suggested-by: Christoph Hellwig
    Signed-off-by: Scott Branden
    Signed-off-by: Kees Cook
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Mimi Zohar
    Reviewed-by: Luis Chamberlain
    Acked-by: Greg Kroah-Hartman
    Acked-by: James Morris
    Link: https://lore.kernel.org/r/20200706232309.12010-2-scott.branden@broadcom.com
    Link: https://lore.kernel.org/r/20201002173828.2099543-4-keescook@chromium.org
    Signed-off-by: Greg Kroah-Hartman

    Scott Branden
     

21 Jul, 2020

1 commit

  • Take the properties of the kexec kernel's inode and the current task
    ownership into consideration when matching a KEXEC_CMDLINE operation to
    the rules in the IMA policy. This allows for some uniformity when
    writing IMA policy rules for KEXEC_KERNEL_CHECK, KEXEC_INITRAMFS_CHECK,
    and KEXEC_CMDLINE operations.

    Prior to this patch, it was not possible to write a set of rules like
    this:

    dont_measure func=KEXEC_KERNEL_CHECK obj_type=foo_t
    dont_measure func=KEXEC_INITRAMFS_CHECK obj_type=foo_t
    dont_measure func=KEXEC_CMDLINE obj_type=foo_t
    measure func=KEXEC_KERNEL_CHECK
    measure func=KEXEC_INITRAMFS_CHECK
    measure func=KEXEC_CMDLINE

    The inode information associated with the kernel being loaded by a
    kexec_kernel_load(2) syscall can now be included in the decision to
    measure or not

    Additonally, the uid, euid, and subj_* conditionals can also now be
    used in KEXEC_CMDLINE rules. There was no technical reason as to why
    those conditionals weren't being considered previously other than
    ima_match_rules() didn't have a valid inode to use so it immediately
    bailed out for KEXEC_CMDLINE operations rather than going through the
    full list of conditional comparisons.

    Signed-off-by: Tyler Hicks
    Cc: Eric Biederman
    Cc: kexec@lists.infradead.org
    Reviewed-by: Lakshmi Ramasubramanian
    Signed-off-by: Mimi Zohar

    Tyler Hicks
     

23 May, 2020

1 commit

  • Files can be mmap'ed read/write and later changed to execute to circumvent
    IMA's mmap appraise policy rules. Due to locking issues (mmap semaphore
    would be taken prior to i_mutex), files can not be measured or appraised at
    this point. Eliminate this integrity gap, by denying the mprotect
    PROT_EXECUTE change, if an mmap appraise policy rule exists.

    On mprotect change success, return 0. On failure, return -EACESS.

    Reviewed-by: Lakshmi Ramasubramanian
    Signed-off-by: Mimi Zohar

    Mimi Zohar
     

12 Mar, 2020

1 commit

  • Every time a new architecture defines the IMA architecture specific
    functions - arch_ima_get_secureboot() and arch_ima_get_policy(), the IMA
    include file needs to be updated. To avoid this "noise", this patch
    defines a new IMA Kconfig IMA_SECURE_AND_OR_TRUSTED_BOOT option, allowing
    the different architectures to select it.

    Suggested-by: Linus Torvalds
    Signed-off-by: Nayna Jain
    Acked-by: Ard Biesheuvel
    Acked-by: Philipp Rudo (s390)
    Acked-by: Michael Ellerman (powerpc)
    Signed-off-by: Mimi Zohar

    Nayna Jain
     

23 Jan, 2020

1 commit

  • This allows other parts of the kernel (perhaps a stacked LSM allowing
    system monitoring, eg. the proposed KRSI LSM [1]) to retrieve the hash
    of a given file from IMA if it's present in the iint cache.

    It's true that the existence of the hash means that it's also in the
    audit logs or in /sys/kernel/security/ima/ascii_runtime_measurements,
    but it can be difficult to pull that information out for every
    subsequent exec. This is especially true if a given host has been up
    for a long time and the file was first measured a long time ago.

    It should be kept in mind that this function gives access to cached
    entries which can be removed, for instance on security_inode_free().

    This is based on Peter Moody's patch:
    https://sourceforge.net/p/linux-ima/mailman/message/33036180/

    [1] https://lkml.org/lkml/2019/9/10/393

    Signed-off-by: Florent Revest
    Reviewed-by: KP Singh
    Signed-off-by: Mimi Zohar

    Florent Revest
     

10 Jan, 2020

1 commit

  • As a result of the asymmetric public keys subtype Kconfig option being
    defined as tristate, with the existing IMA Makefile, ima_asymmetric_keys.c
    could be built as a kernel module. To prevent this from happening, this
    patch defines and uses an intermediate Kconfig boolean option named
    IMA_MEASURE_ASYMMETRIC_KEYS.

    Signed-off-by: Lakshmi Ramasubramanian
    Suggested-by: James.Bottomley
    Cc: David Howells
    Cc: Jarkko Sakkinen
    Reported-by: kbuild test robot # ima_asymmetric_keys.c
    is built as a kernel module.
    Fixes: 88e70da170e8 ("IMA: Define an IMA hook to measure keys")
    Fixes: cb1aa3823c92 ("KEYS: Call the IMA hook to measure keys")
    [zohar@linux.ibm.com: updated patch description]
    Signed-off-by: Mimi Zohar

    Lakshmi Ramasubramanian
     

12 Dec, 2019

1 commit

  • Call the IMA hook from key_create_or_update() function to measure
    the payload when a new key is created or an existing key is updated.

    This patch adds the call to the IMA hook from key_create_or_update()
    function to measure the key on key create or update.

    Signed-off-by: Lakshmi Ramasubramanian
    Cc: David Howells
    Cc: Jarkko Sakkinen
    Signed-off-by: Mimi Zohar

    Lakshmi Ramasubramanian
     

12 Nov, 2019

1 commit

  • PowerNV systems use a Linux-based bootloader, which rely on the IMA
    subsystem to enforce different secure boot modes. Since the
    verification policy may differ based on the secure boot mode of the
    system, the policies must be defined at runtime.

    This patch implements arch-specific support to define IMA policy rules
    based on the runtime secure boot mode of the system.

    This patch provides arch-specific IMA policies if PPC_SECURE_BOOT
    config is enabled.

    Signed-off-by: Nayna Jain
    Signed-off-by: Mimi Zohar
    Signed-off-by: Michael Ellerman
    Link: https://lore.kernel.org/r/1572492694-6520-3-git-send-email-zohar@linux.ibm.com

    Nayna Jain
     

28 Sep, 2019

1 commit

  • Pull kernel lockdown mode from James Morris:
    "This is the latest iteration of the kernel lockdown patchset, from
    Matthew Garrett, David Howells and others.

    From the original description:

    This patchset introduces an optional kernel lockdown feature,
    intended to strengthen the boundary between UID 0 and the kernel.
    When enabled, various pieces of kernel functionality are restricted.
    Applications that rely on low-level access to either hardware or the
    kernel may cease working as a result - therefore this should not be
    enabled without appropriate evaluation beforehand.

    The majority of mainstream distributions have been carrying variants
    of this patchset for many years now, so there's value in providing a
    doesn't meet every distribution requirement, but gets us much closer
    to not requiring external patches.

    There are two major changes since this was last proposed for mainline:

    - Separating lockdown from EFI secure boot. Background discussion is
    covered here: https://lwn.net/Articles/751061/

    - Implementation as an LSM, with a default stackable lockdown LSM
    module. This allows the lockdown feature to be policy-driven,
    rather than encoding an implicit policy within the mechanism.

    The new locked_down LSM hook is provided to allow LSMs to make a
    policy decision around whether kernel functionality that would allow
    tampering with or examining the runtime state of the kernel should be
    permitted.

    The included lockdown LSM provides an implementation with a simple
    policy intended for general purpose use. This policy provides a coarse
    level of granularity, controllable via the kernel command line:

    lockdown={integrity|confidentiality}

    Enable the kernel lockdown feature. If set to integrity, kernel features
    that allow userland to modify the running kernel are disabled. If set to
    confidentiality, kernel features that allow userland to extract
    confidential information from the kernel are also disabled.

    This may also be controlled via /sys/kernel/security/lockdown and
    overriden by kernel configuration.

    New or existing LSMs may implement finer-grained controls of the
    lockdown features. Refer to the lockdown_reason documentation in
    include/linux/security.h for details.

    The lockdown feature has had signficant design feedback and review
    across many subsystems. This code has been in linux-next for some
    weeks, with a few fixes applied along the way.

    Stephen Rothwell noted that commit 9d1f8be5cf42 ("bpf: Restrict bpf
    when kernel lockdown is in confidentiality mode") is missing a
    Signed-off-by from its author. Matthew responded that he is providing
    this under category (c) of the DCO"

    * 'next-lockdown' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (31 commits)
    kexec: Fix file verification on S390
    security: constify some arrays in lockdown LSM
    lockdown: Print current->comm in restriction messages
    efi: Restrict efivar_ssdt_load when the kernel is locked down
    tracefs: Restrict tracefs when the kernel is locked down
    debugfs: Restrict debugfs when the kernel is locked down
    kexec: Allow kexec_file() with appropriate IMA policy when locked down
    lockdown: Lock down perf when in confidentiality mode
    bpf: Restrict bpf when kernel lockdown is in confidentiality mode
    lockdown: Lock down tracing and perf kprobes when in confidentiality mode
    lockdown: Lock down /proc/kcore
    x86/mmiotrace: Lock down the testmmiotrace module
    lockdown: Lock down module params that specify hardware parameters (eg. ioport)
    lockdown: Lock down TIOCSSERIAL
    lockdown: Prohibit PCMCIA CIS storage when the kernel is locked down
    acpi: Disable ACPI table override if the kernel is locked down
    acpi: Ignore acpi_rsdp kernel param when the kernel has been locked down
    ACPI: Limit access to custom_method when the kernel is locked down
    x86/msr: Restrict MSR access when the kernel is locked down
    x86: Lock down IO port access when the kernel is locked down
    ...

    Linus Torvalds
     

20 Aug, 2019

1 commit

  • Systems in lockdown mode should block the kexec of untrusted kernels.
    For x86 and ARM we can ensure that a kernel is trustworthy by validating
    a PE signature, but this isn't possible on other architectures. On those
    platforms we can use IMA digital signatures instead. Add a function to
    determine whether IMA has or will verify signatures for a given event type,
    and if so permit kexec_file() even if the kernel is otherwise locked down.
    This is restricted to cases where CONFIG_INTEGRITY_TRUSTED_KEYRING is set
    in order to prevent an attacker from loading additional keys at runtime.

    Signed-off-by: Matthew Garrett
    Acked-by: Mimi Zohar
    Cc: Dmitry Kasatkin
    Cc: linux-integrity@vger.kernel.org
    Signed-off-by: James Morris

    Matthew Garrett
     

09 Jul, 2019

1 commit

  • Pull integrity updates from Mimi Zohar:
    "Bug fixes, code clean up, and new features:

    - IMA policy rules can be defined in terms of LSM labels, making the
    IMA policy dependent on LSM policy label changes, in particular LSM
    label deletions. The new environment, in which IMA-appraisal is
    being used, frequently updates the LSM policy and permits LSM label
    deletions.

    - Prevent an mmap'ed shared file opened for write from also being
    mmap'ed execute. In the long term, making this and other similar
    changes at the VFS layer would be preferable.

    - The IMA per policy rule template format support is needed for a
    couple of new/proposed features (eg. kexec boot command line
    measurement, appended signatures, and VFS provided file hashes).

    - Other than the "boot-aggregate" record in the IMA measuremeent
    list, all other measurements are of file data. Measuring and
    storing the kexec boot command line in the IMA measurement list is
    the first buffer based measurement included in the measurement
    list"

    * 'next-integrity' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity:
    integrity: Introduce struct evm_xattr
    ima: Update MAX_TEMPLATE_NAME_LEN to fit largest reasonable definition
    KEXEC: Call ima_kexec_cmdline to measure the boot command line args
    IMA: Define a new template field buf
    IMA: Define a new hook to measure the kexec boot command line arguments
    IMA: support for per policy rule template formats
    integrity: Fix __integrity_init_keyring() section mismatch
    ima: Use designated initializers for struct ima_event_data
    ima: use the lsm policy update notifier
    LSM: switch to blocking policy update notifiers
    x86/ima: fix the Kconfig dependency for IMA_ARCH_POLICY
    ima: Make arch_policy_entry static
    ima: prevent a file already mmap'ed write to be mmap'ed execute
    x86/ima: check EFI SetupMode too

    Linus Torvalds
     

24 Jun, 2019

1 commit

  • Currently during soft reboot(kexec_file_load) boot command line
    arguments are not measured. Define hooks needed to measure kexec
    command line arguments during soft reboot(kexec_file_load).

    - A new ima hook ima_kexec_cmdline is defined to be called by the
    kexec code.
    - A new function process_buffer_measurement is defined to measure
    the buffer hash into the IMA measurement list.
    - A new func policy KEXEC_CMDLINE is defined to control the
    measurement.

    Signed-off-by: Prakhar Srivastava
    Signed-off-by: Mimi Zohar

    Prakhar Srivastava
     

05 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation version 2 of the license

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 315 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Armijn Hemel
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190531190115.503150771@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

29 Apr, 2019

1 commit


05 Feb, 2019

1 commit

  • If tmpfiles can be made persistent, then newly created tmpfiles need to
    be treated like any other new files in policy.

    This patch indicates which newly created tmpfiles are in policy, causing
    the file hash to be calculated on __fput().

    Reported-by: Ignaz Forster
    [rgoldwyn@suse.com: Call ima_post_create_tmpfile() in vfs_tmpfile() as
    opposed to do_tmpfile(). This will help the case for overlayfs where
    copy_up is denied while overwriting a file.]
    Signed-off-by: Goldwyn Rodrigues
    Signed-off-by: Mimi Zohar

    Mimi Zohar
     

11 Dec, 2018

3 commits

  • The secure boot mode may not be detected on boot for some reason (eg.
    buggy firmware). This patch attempts one more time to detect the
    secure boot mode.

    Signed-off-by: Mimi Zohar

    Mimi Zohar
     
  • On x86, there are two methods of verifying a kexec'ed kernel image
    signature being loaded via the kexec_file_load syscall - an architecture
    specific implementaton or a IMA KEXEC_KERNEL_CHECK appraisal rule. Neither
    of these methods verify the kexec'ed kernel image signature being loaded
    via the kexec_load syscall.

    Secure boot enabled systems require kexec images to be signed. Therefore,
    this patch loads an IMA KEXEC_KERNEL_CHECK policy rule on secure boot
    enabled systems not configured with CONFIG_KEXEC_VERIFY_SIG enabled.

    When IMA_APPRAISE_BOOTPARAM is configured, different IMA appraise modes
    (eg. fix, log) can be specified on the boot command line, allowing unsigned
    or invalidly signed kernel images to be kexec'ed. This patch permits
    enabling IMA_APPRAISE_BOOTPARAM or IMA_ARCH_POLICY, but not both.

    Signed-off-by: Eric Richter
    Signed-off-by: Nayna Jain
    Cc: David Howells
    Cc: Eric Biederman
    Cc: Peter Jones
    Cc: Vivek Goyal
    Cc: Dave Young
    Signed-off-by: Mimi Zohar

    Eric Richter
     
  • Builtin IMA policies can be enabled on the boot command line, and replaced
    with a custom policy, normally during early boot in the initramfs. Build
    time IMA policy rules were recently added. These rules are automatically
    enabled on boot and persist after loading a custom policy.

    There is a need for yet another type of policy, an architecture specific
    policy, which is derived at runtime during kernel boot, based on the
    runtime secure boot flags. Like the build time policy rules, these rules
    persist after loading a custom policy.

    This patch adds support for loading an architecture specific IMA policy.

    Signed-off-by: Nayna Jain
    Co-Developed-by: Mimi Zohar
    Signed-off-by: Mimi Zohar

    Nayna Jain
     

13 Nov, 2018

1 commit

  • Distros are concerned about totally disabling the kexec_load syscall.
    As a compromise, the kexec_load syscall will only be disabled when
    CONFIG_KEXEC_VERIFY_SIG is configured and the system is booted with
    secureboot enabled.

    This patch defines the new arch specific function called
    arch_ima_get_secureboot() to retrieve the secureboot state of the system.

    Signed-off-by: Nayna Jain
    Suggested-by: Seth Forshee
    Cc: David Howells
    Cc: Eric Biederman
    Cc: Peter Jones
    Cc: Vivek Goyal
    Cc: Dave Young
    Signed-off-by: Mimi Zohar

    Nayna Jain
     

16 Aug, 2018

1 commit

  • Pull security subsystem updates from James Morris:

    - kstrdup() return value fix from Eric Biggers

    - Add new security_load_data hook to differentiate security checking of
    kernel-loaded binaries in the case of there being no associated file
    descriptor, from Mimi Zohar.

    - Add ability to IMA to specify a policy at build-time, rather than
    just via command line params or by loading a custom policy, from
    Mimi.

    - Allow IMA and LSMs to prevent sysfs firmware load fallback (e.g. if
    using signed firmware), from Mimi.

    - Allow IMA to deny loading of kexec kernel images, as they cannot be
    measured by IMA, from Mimi.

    * 'next-general' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
    security: check for kstrdup() failure in lsm_append()
    security: export security_kernel_load_data function
    ima: based on policy warn about loading firmware (pre-allocated buffer)
    module: replace the existing LSM hook in init_module
    ima: add build time policy
    ima: based on policy require signed firmware (sysfs fallback)
    firmware: add call to LSM hook before firmware sysfs fallback
    ima: based on policy require signed kexec kernel images
    kexec: add call to LSM hook in original kexec_load syscall
    security: define new LSM hook named security_kernel_load_data
    MAINTAINERS: remove the outdated "LINUX SECURITY MODULE (LSM) FRAMEWORK" entry

    Linus Torvalds
     

17 Jul, 2018

1 commit


12 Jul, 2018

1 commit


22 Jun, 2017

1 commit


21 Dec, 2016

1 commit

  • The TPM PCRs are only reset on a hard reboot. In order to validate a
    TPM's quote after a soft reboot (eg. kexec -e), the IMA measurement
    list of the running kernel must be saved and restored on boot.

    This patch uses the kexec buffer passing mechanism to pass the
    serialized IMA binary_runtime_measurements to the next kernel.

    Link: http://lkml.kernel.org/r/1480554346-29071-7-git-send-email-zohar@linux.vnet.ibm.com
    Signed-off-by: Thiago Jung Bauermann
    Signed-off-by: Mimi Zohar
    Acked-by: "Eric W. Biederman"
    Acked-by: Dmitry Kasatkin
    Cc: Andreas Steffen
    Cc: Josh Sklar
    Cc: Dave Young
    Cc: Vivek Goyal
    Cc: Baoquan He
    Cc: Michael Ellerman
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Stewart Smith
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mimi Zohar
     

01 May, 2016

1 commit

  • Commit 3034a14 "ima: pass 'opened' flag to identify newly created files"
    stopped identifying empty files as new files. However new empty files
    can be created using the mknodat syscall. On systems with IMA-appraisal
    enabled, these empty files are not labeled with security.ima extended
    attributes properly, preventing them from subsequently being opened in
    order to write the file data contents. This patch defines a new hook
    named ima_post_path_mknod() to mark these empty files, created using
    mknodat, as new in order to allow the file data contents to be written.

    In addition, files with security.ima xattrs containing a file signature
    are considered "immutable" and can not be modified. The file contents
    need to be written, before signing the file. This patch relaxes this
    requirement for new files, allowing the file signature to be written
    before the file contents.

    Changelog:
    - defer identifying files with signatures stored as security.ima
    (based on Dmitry Rozhkov's comments)
    - removing tests (eg. dentry, dentry->d_inode, inode->i_size == 0)
    (based on Al's review)

    Signed-off-by: Mimi Zohar
    Cc: Al Viro <
    Tested-by: Dmitry Rozhkov

    Mimi Zohar
     

21 Feb, 2016

4 commits

  • Replace copy_module_from_fd() with kernel_read_file_from_fd().

    Although none of the upstreamed LSMs define a kernel_module_from_file
    hook, IMA is called, based on policy, to prevent unsigned kernel modules
    from being loaded by the original kernel module syscall and to
    measure/appraise signed kernel modules.

    The security function security_kernel_module_from_file() was called prior
    to reading a kernel module. Preventing unsigned kernel modules from being
    loaded by the original kernel module syscall remains on the pre-read
    kernel_read_file() security hook. Instead of reading the kernel module
    twice, once for measuring/appraising and again for loading the kernel
    module, the signature validation is moved to the kernel_post_read_file()
    security hook.

    This patch removes the security_kernel_module_from_file() hook and security
    call.

    Signed-off-by: Mimi Zohar
    Acked-by: Kees Cook
    Acked-by: Luis R. Rodriguez
    Cc: Rusty Russell

    Mimi Zohar
     
  • The kernel_read_file security hook is called prior to reading the file
    into memory.

    Changelog v4+:
    - export security_kernel_read_file()

    Signed-off-by: Mimi Zohar
    Acked-by: Kees Cook
    Acked-by: Luis R. Rodriguez
    Acked-by: Casey Schaufler

    Mimi Zohar
     
  • Replace the fw_read_file_contents with kernel_file_read_from_path().

    Although none of the upstreamed LSMs define a kernel_fw_from_file hook,
    IMA is called by the security function to prevent unsigned firmware from
    being loaded and to measure/appraise signed firmware, based on policy.

    Instead of reading the firmware twice, once for measuring/appraising the
    firmware and again for reading the firmware contents into memory, the
    kernel_post_read_file() security hook calculates the file hash based on
    the in memory file buffer. The firmware is read once.

    This patch removes the LSM kernel_fw_from_file() hook and security call.

    Changelog v4+:
    - revert dropped buf->size assignment - reported by Sergey Senozhatsky
    v3:
    - remove kernel_fw_from_file hook
    - use kernel_file_read_from_path() - requested by Luis
    v2:
    - reordered and squashed firmware patches
    - fix MAX firmware size (Kees Cook)

    Signed-off-by: Mimi Zohar
    Acked-by: Kees Cook
    Acked-by: Luis R. Rodriguez

    Mimi Zohar
     
  • This patch defines a new IMA hook ima_post_read_file() for measuring
    and appraising files read by the kernel. The caller loads the file into
    memory before calling this function, which calculates the hash followed by
    the normal IMA policy based processing.

    Changelog v5:
    - fail ima_post_read_file() if either file or buf is NULL
    v3:
    - rename ima_hash_and_process_file() to ima_post_read_file()

    v1:
    - split patch

    Signed-off-by: Mimi Zohar
    Acked-by: Dmitry Kasatkin

    Mimi Zohar
     

09 Sep, 2014

1 commit


26 Jul, 2014

1 commit

  • The "security: introduce kernel_fw_from_file hook" patch defined a
    new security hook to evaluate any loaded firmware that wasn't built
    into the kernel.

    This patch defines ima_fw_from_file(), which is called from the new
    security hook, to measure and/or appraise the loaded firmware's
    integrity.

    Signed-off-by: Mimi Zohar
    Signed-off-by: Kees Cook

    Mimi Zohar
     

27 Mar, 2013

1 commit


14 Dec, 2012

1 commit

  • With the addition of the new kernel module syscall, which defines two
    arguments - a file descriptor to the kernel module and a pointer to a NULL
    terminated string of module arguments - it is now possible to measure and
    appraise kernel modules like any other file on the file system.

    This patch adds support to measure and appraise kernel modules in an
    extensible and consistent manner.

    To support filesystems without extended attribute support, additional
    patches could pass the signature as the first parameter.

    Signed-off-by: Mimi Zohar
    Signed-off-by: Rusty Russell

    Mimi Zohar
     

08 Sep, 2012

2 commits

  • Based on xattr_permission comments, the restriction to modify 'security'
    xattr is left up to the underlying fs or lsm. Ensure that not just anyone
    can modify or remove 'security.ima'.

    Changelog v1:
    - Unless IMA-APPRAISE is configured, use stub ima_inode_removexattr()/setxattr()
    functions. (Moved ima_inode_removexattr()/setxattr() to ima_appraise.c)

    Changelog:
    - take i_mutex to fix locking (Dmitry Kasatkin)
    - ima_reset_appraise_flags should only be called when modifying or
    removing the 'security.ima' xattr. Requires CAP_SYS_ADMIN privilege.
    (Incorporated fix from Roberto Sassu)
    - Even if allowed to update security.ima, reset the appraisal flags,
    forcing re-appraisal.
    - Replace CAP_MAC_ADMIN with CAP_SYS_ADMIN
    - static inline ima_inode_setxattr()/ima_inode_removexattr() stubs
    - ima_protect_xattr should be static

    Signed-off-by: Mimi Zohar
    Signed-off-by: Dmitry Kasatkin

    Mimi Zohar
     
  • Changing an inode's metadata may result in our not needing to appraise
    the file. In such cases, we must remove 'security.ima'.

    Changelog v1:
    - use ima_inode_post_setattr() stub function, if IMA_APPRAISE not configured

    Signed-off-by: Mimi Zohar
    Acked-by: Serge Hallyn
    Acked-by: Dmitry Kasatkin

    Mimi Zohar
     

19 Jul, 2011

1 commit

  • Move the inode integrity data(iint) management up to the integrity directory
    in order to share the iint among the different integrity models.

    Changelog:
    - don't define MAX_DIGEST_SIZE
    - rename several globally visible 'ima_' prefixed functions, structs,
    locks, etc to 'integrity_'
    - replace '20' with SHA1_DIGEST_SIZE
    - reflect location change in appropriate Kconfig and Makefiles
    - remove unnecessary initialization of iint_initialized to 0
    - rebased on current ima_iint.c
    - define integrity_iint_store/lock as static

    There should be no other functional changes.

    Signed-off-by: Mimi Zohar
    Acked-by: Serge Hallyn

    Mimi Zohar
     

10 Feb, 2011

1 commit

  • ima_counts_get() updated the readcount and invalidated the PCR,
    as necessary. Only update the i_readcount in the VFS layer.
    Move the PCR invalidation checks to ima_file_check(), where it
    belongs.

    Maintaining the i_readcount in the VFS layer, will allow other
    subsystems to use i_readcount.

    Signed-off-by: Mimi Zohar
    Acked-by: Eric Paris

    Mimi Zohar
     

07 Feb, 2010

1 commit