Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp856053ybj; Tue, 5 May 2020 08:36:28 -0700 (PDT) X-Google-Smtp-Source: APiQypJxBfX9wOaIH5LQcrRKff5iv3BuAwLUOQYTSXZMnxNARziHTX7jPBfWF5cJHvBLCBQYpLxQ X-Received: by 2002:a17:906:31da:: with SMTP id f26mr3177957ejf.308.1588692988440; Tue, 05 May 2020 08:36:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588692988; cv=none; d=google.com; s=arc-20160816; b=qJ7fmEQEDG2VRKthFhQ0sgIxPv4G7gckat3oN+Z8YRz2nbP33mKpVv6gWAqv4bOKhf /EOiPZ2egXtWQQKdjAGQpk/h7HCByXyZBpT/y+touY5vqhLst3UZmhTgYiZwVLsQ5D3K vRbq5x7c7qPe/TZRyKfRAelHmruG4FqaVaFhQzNZ3ka8x0F0RwpC3f21e/ARZaRRSzd5 RP+TTfSBhnYTcae+9MghWOxdeNUfQT7Fppi777IKKayznu/bfxg7J/nE/0ltYPm6BxDx ZpDNKSfE2ZsdrUM7V1Q9IgxQJ5d4F9uBOzNELTQsBPuScFbrqTztjp2kI5YqXDc9UoA7 41iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=Fm/PeHqBU+x1WGhYFMyOTD+VaOiWpnmAeeQCmloRBdA=; b=jZuEZC+HKCIJuwLFTwa+8rmVIE+4YHcTQIs4w2xUbcwLH/peRXClKuNQc+R9vkiWHv zkfncwQN67BAnFlgOFDlWuJSFCjKOiSYezF5Oy40G3L8TcUsCQp5/H6Pt7JsiTHKwDRQ gtzCGT7grY3qNSENddazr//PLae3e1CgxZ4UZ23eehqqG6jkWF8b5zCMDGD5rK3vNnzE 5ek30nc0HUMmi6XQQxsze6I/jX/us4nvYk0OTd3IUHwkHGb85q5nslDlDOy/RM/5rWsH /173Cw4MY3q/BIXANqJPmygPyMAcnFzevuUiwzObld/MAJ3inmpxAamTeMro5SnNNHaB ovbg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g16si1358972edr.382.2020.05.05.08.36.04; Tue, 05 May 2020 08:36:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730089AbgEEPc3 (ORCPT + 99 others); Tue, 5 May 2020 11:32:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1730090AbgEEPc2 (ORCPT ); Tue, 5 May 2020 11:32:28 -0400 Received: from smtp-bc0d.mail.infomaniak.ch (smtp-bc0d.mail.infomaniak.ch [IPv6:2001:1600:3:17::bc0d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 20266C061A0F for ; Tue, 5 May 2020 08:32:27 -0700 (PDT) Received: from smtp-2-0000.mail.infomaniak.ch (unknown [10.5.36.107]) by smtp-2-3000.mail.infomaniak.ch (Postfix) with ESMTPS id 49GkHQ3pJnzlhWgZ; Tue, 5 May 2020 17:32:18 +0200 (CEST) Received: from localhost (unknown [94.23.54.103]) by smtp-2-0000.mail.infomaniak.ch (Postfix) with ESMTPA id 49GkHP3cXJzlq4Rd; Tue, 5 May 2020 17:32:17 +0200 (CEST) From: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= To: linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Aleksa Sarai , Alexei Starovoitov , Al Viro , Andy Lutomirski , Christian Heimes , Daniel Borkmann , Deven Bowers , Eric Chiang , Florian Weimer , James Morris , Jan Kara , Jann Horn , Jonathan Corbet , Kees Cook , Lakshmi Ramasubramanian , Matthew Garrett , Matthew Wilcox , Michael Kerrisk , =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Mimi Zohar , =?UTF-8?q?Philippe=20Tr=C3=A9buchet?= , Scott Shell , Sean Christopherson , Shuah Khan , Steve Dower , Steve Grubb , Thibaut Sautereau , Vincent Strubel , kernel-hardening@lists.openwall.com, linux-api@vger.kernel.org, linux-integrity@vger.kernel.org, linux-security-module@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v5 0/6] Add support for O_MAYEXEC Date: Tue, 5 May 2020 17:31:50 +0200 Message-Id: <20200505153156.925111-1-mic@digikod.net> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Antivirus: Dr.Web (R) for Unix mail servers drweb plugin ver.6.0.2.8 X-Antivirus-Code: 0x100000 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, This fifth patch series add new kernel configurations (OMAYEXEC_STATIC, OMAYEXEC_ENFORCE_MOUNT, and OMAYEXEC_ENFORCE_FILE) to enable to configure the security policy at kernel build time. As requested by Mimi Zohar, I completed the series with one of her patches for IMA. The goal of this patch series is to enable to control script execution with interpreters help. A new O_MAYEXEC flag, usable through openat2(2), is added to enable userspace script interpreter to delegate to the kernel (and thus the system security policy) the permission to interpret/execute scripts or other files containing what can be seen as commands. A simple system-wide security policy can be enforced by the system administrator through a sysctl configuration consistent with the mount points or the file access rights. The documentation patch explains the prerequisites. Furthermore, the security policy can also be delegated to an LSM, either a MAC system or an integrity system. For instance, the new kernel MAY_OPENEXEC flag closes a major IMA measurement/appraisal interpreter integrity gap by bringing the ability to check the use of scripts [1]. Other uses are expected, such as for openat2(2) [2], SGX integration [3], bpffs [4] or IPE [5]. Userspace needs to adapt to take advantage of this new feature. For example, the PEP 578 [6] (Runtime Audit Hooks) enables Python 3.8 to be extended with policy enforcement points related to code interpretation, which can be used to align with the PowerShell audit features. Additional Python security improvements (e.g. a limited interpreter withou -c, stdin piping of code) are on their way. The initial idea come from CLIP OS 4 and the original implementation has been used for more than 12 years: https://github.com/clipos-archive/clipos4_doc An introduction to O_MAYEXEC was given at the Linux Security Summit Europe 2018 - Linux Kernel Security Contributions by ANSSI: https://www.youtube.com/watch?v=chNjCRtPKQY&t=17m15s The "write xor execute" principle was explained at Kernel Recipes 2018 - CLIP OS: a defense-in-depth OS: https://www.youtube.com/watch?v=PjRE0uBtkHU&t=11m14s This patch series can be applied on top of v5.7-rc4. This can be tested with CONFIG_SYSCTL. I would really appreciate constructive comments on this patch series. Previous version: https://lore.kernel.org/lkml/20200428175129.634352-1-mic@digikod.net/ [1] https://lore.kernel.org/lkml/1544647356.4028.105.camel@linux.ibm.com/ [2] https://lore.kernel.org/lkml/20190904201933.10736-6-cyphar@cyphar.com/ [3] https://lore.kernel.org/lkml/CALCETrVovr8XNZSroey7pHF46O=kj_c5D9K8h=z2T_cNrpvMig@mail.gmail.com/ [4] https://lore.kernel.org/lkml/CALCETrVeZ0eufFXwfhtaG_j+AdvbzEWE0M3wjXMWVEO7pj+xkw@mail.gmail.com/ [5] https://lore.kernel.org/lkml/20200406221439.1469862-12-deven.desai@linux.microsoft.com/ [6] https://www.python.org/dev/peps/pep-0578/ Regards, Mickaël Salaün (5): fs: Add support for an O_MAYEXEC flag on openat2(2) fs: Add a MAY_EXECMOUNT flag to infer the noexec mount property fs: Enable to enforce noexec mounts or file exec through O_MAYEXEC selftest/openat2: Add tests for O_MAYEXEC enforcing doc: Add documentation for the fs.open_mayexec_enforce sysctl Mimi Zohar (1): ima: add policy support for the new file open MAY_OPENEXEC flag Documentation/ABI/testing/ima_policy | 2 +- Documentation/admin-guide/sysctl/fs.rst | 44 +++ fs/fcntl.c | 2 +- fs/namei.c | 89 ++++- fs/open.c | 8 + include/linux/fcntl.h | 2 +- include/linux/fs.h | 9 + include/uapi/asm-generic/fcntl.h | 7 + kernel/sysctl.c | 9 + security/Kconfig | 26 ++ security/integrity/ima/ima_main.c | 3 +- security/integrity/ima/ima_policy.c | 15 +- tools/testing/selftests/kselftest_harness.h | 3 + tools/testing/selftests/openat2/Makefile | 3 +- tools/testing/selftests/openat2/config | 1 + tools/testing/selftests/openat2/helpers.h | 1 + .../testing/selftests/openat2/omayexec_test.c | 330 ++++++++++++++++++ 17 files changed, 544 insertions(+), 10 deletions(-) create mode 100644 tools/testing/selftests/openat2/config create mode 100644 tools/testing/selftests/openat2/omayexec_test.c -- 2.26.2