linux-security-module.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Günther Noack" <gnoack@google.com>
To: "Mickaël Salaün" <mic@digikod.net>
Cc: "Konstantin Meskhidze (A)" <konstantin.meskhidze@huawei.com>,
	"Günther Noack" <gnoack3000@gmail.com>,
	willemdebruijn.kernel@gmail.com,
	linux-security-module@vger.kernel.org, netdev@vger.kernel.org,
	netfilter-devel@vger.kernel.org, yusongping@huawei.com,
	artem.kuzin@huawei.com, "Jeff Xu" <jeffxu@google.com>,
	"Jorge Lucangeli Obes" <jorgelo@chromium.org>,
	"Allen Webb" <allenwebb@google.com>,
	"Dmitry Torokhov" <dtor@google.com>
Subject: Re: [PATCH v9 00/12] Network support for Landlock - allowed list of protocols
Date: Wed, 28 Jun 2023 10:44:09 +0200	[thread overview]
Message-ID: <ZJvy2SViorgc+cZI@google.com> (raw)
In-Reply-To: <b8a2045a-e7e8-d141-7c01-bf47874c7930@digikod.net>

Hello!

On Mon, Jun 26, 2023 at 05:29:34PM +0200, Mickaël Salaün wrote:
> Here is a design to be able to only allow a set of network protocols and
> deny everything else. This would be complementary to Konstantin's patch
> series which addresses fine-grained access control.
> 
> First, I want to remind that Landlock follows an allowed list approach with
> a set of (growing) supported actions (for compatibility reasons), which is
> kind of an allow-list-on-a-deny-list. But with this proposal, we want to be
> able to deny everything, which means: supported, not supported, known and
> unknown protocols.
> 
> We could add a new "handled_access_socket" field to the landlock_ruleset
> struct, which could contain a LANDLOCK_ACCESS_SOCKET_CREATE flag.
> 
> If this field is set, users could add a new type of rules:
> struct landlock_socket_attr {
>     __u64 allowed_access;
>     int domain; // see socket(2)
>     int type; // see socket(2)
> }
> 
> The allowed_access field would only contain LANDLOCK_ACCESS_SOCKET_CREATE at
> first, but it could grow with other actions (which cannot be handled with
> seccomp):
> - use: walk through all opened FDs and mark them as allowed or denied
> - receive: hook on received FDs
> - send: hook on sent FDs
> 
> We might also use the same approach for non-socket objects that can be
> identified with some meaningful properties.
> 
> What do you think?

This sounds like a good plan to me - it would make it possible to restrict new
socket creation using protocols that were not intended to be used, and I also
think it would fit the Landlock model nicely.

Small remark on the side: The security_socket_create() hook does not only get
invoked as a result of socket(2), but also as a part of accept(2) - so this
approach might already prevent new connections very effectively.

Spelling out some scenarios, so that we are sure that we are on the same page:

A)

A program that does not need networking could specify a ruleset where
LANDLOCK_ACCESS_SOCKET_CREATE is handled, and simply not permit anything.

B)

A program that runs a TCP server could specify a ruleset where
LANDLOCK_NET_BIND_TCP, LANDLOCK_NET_CONNECT_TCP and
LANDLOCK_ACCESS_SOCKET_CREATE are handled, and where the following rules are added:

  /* From Konstantin's patch set */
  struct landlock_net_service_attr bind_attr = {
    .allowed_access = LANDLOCK_NET_BIND_TCP,
    .port = 8080,
  };

  /* From Mickaël's proposal */
  struct landlock_socket_attr sock_inet_attr = {
    .allowed_access = LANDLOCK_ACCESS_SOCKET_CREATE,
    .domain = AF_INET,
    .type = SOCK_STREAM,
  }

  struct landlock_socket_attr sock_inet6_attr = {
    .allowed_access = LANDLOCK_ACCESS_SOCKET_CREATE,
    .domain = AF_INET6,
     .type = SOCK_STREAM,
  }

That should then be enough to bind and listen on ports, whereas outgoing
connections with TCP and anything using other network protocols would not be
permitted.

(Alternatively, it could bind() the socket early, *then enable Landlock* and
leave out the rule for BIND_TCP, only permitting SOCKET_CREATE for IPv4 and
IPv6, so that listen() and accept() work on the already-bound socket.)

Overall, this sounds like an excellent approach to me. 👍

—Günther

-- 
Sent using Mutt 🐕 Woof Woof

  parent reply	other threads:[~2023-06-28  9:09 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-16  8:58 [PATCH v9 00/12] Network support for Landlock Konstantin Meskhidze
2023-01-16  8:58 ` [PATCH v9 01/12] landlock: Make ruleset's access masks more generic Konstantin Meskhidze
2023-01-16  8:58 ` [PATCH v9 02/12] landlock: Allow filesystem layout changes for domains without such rule type Konstantin Meskhidze
2023-02-10 17:34   ` Mickaël Salaün
2023-02-14  8:51     ` Konstantin Meskhidze (A)
2023-02-14 12:07       ` Mickaël Salaün
2023-02-14 12:57         ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 03/12] landlock: Refactor landlock_find_rule/insert_rule Konstantin Meskhidze
2023-02-10 17:36   ` Mickaël Salaün
2023-02-14 10:15     ` Konstantin Meskhidze (A)
2023-02-14 12:09       ` Mickaël Salaün
2023-02-14 13:28         ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 04/12] landlock: Refactor merge/inherit_ruleset functions Konstantin Meskhidze
2023-01-16  8:58 ` [PATCH v9 05/12] landlock: Move and rename umask_layers() and init_layer_masks() Konstantin Meskhidze
2023-02-10 17:37   ` Mickaël Salaün
2023-02-14 10:15     ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 06/12] landlock: Refactor _unmask_layers() and _init_layer_masks() Konstantin Meskhidze
2023-02-10 17:38   ` Mickaël Salaün
2023-02-14 10:16     ` Konstantin Meskhidze (A)
2023-02-21 18:07   ` Mickaël Salaün
2023-03-06  7:52     ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 07/12] landlock: Refactor landlock_add_rule() syscall Konstantin Meskhidze
2023-02-10 17:38   ` Mickaël Salaün
2023-02-14 10:18     ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 08/12] landlock: Add network rules and TCP hooks support Konstantin Meskhidze
2023-02-10 17:39   ` Mickaël Salaün
2023-02-14 10:19     ` Konstantin Meskhidze (A)
2023-03-13  9:33     ` Konstantin Meskhidze (A)
2023-03-14 12:13       ` Mickaël Salaün
2023-03-14 14:38         ` Konstantin Meskhidze (A)
2023-02-21 18:04   ` Mickaël Salaün
2023-03-06 10:18     ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 09/12] selftests/landlock: Share enforce_ruleset() Konstantin Meskhidze
2023-01-16  8:58 ` [PATCH v9 10/12] selftests/landlock: Add 10 new test suites dedicated to network Konstantin Meskhidze
2023-02-10 17:40   ` Mickaël Salaün
2023-02-14 10:36     ` Konstantin Meskhidze (A)
2023-02-14 12:13       ` Mickaël Salaün
2023-02-14 13:28         ` Konstantin Meskhidze (A)
2023-02-21 18:05   ` Mickaël Salaün
2023-03-06 12:03     ` Konstantin Meskhidze (A)
2023-03-06 16:00       ` Mickaël Salaün
2023-03-06 18:13         ` Konstantin Meskhidze (A)
2023-01-16  8:58 ` [PATCH v9 11/12] samples/landlock: Add network demo Konstantin Meskhidze
2023-01-16  8:58 ` [PATCH v9 12/12] landlock: Document Landlock's network support Konstantin Meskhidze
2023-01-21 23:07   ` Günther Noack
2023-01-23  9:38     ` Konstantin Meskhidze (A)
2023-01-27 18:22       ` Mickaël Salaün
2023-01-30 10:03         ` Konstantin Meskhidze (A)
2023-02-21 16:16           ` Mickaël Salaün
2023-03-06 13:43             ` Konstantin Meskhidze (A)
2023-03-06 16:09               ` Mickaël Salaün
2023-03-06 17:55                 ` Konstantin Meskhidze (A)
2023-01-30 12:26         ` Konstantin Meskhidze (A)
2023-02-23 22:17 ` [PATCH v9 00/12] Network support for Landlock Günther Noack
2023-03-06  7:45   ` Konstantin Meskhidze (A)
2023-03-13 17:16   ` Konstantin Meskhidze (A)
2023-03-14 13:28     ` Mickaël Salaün
2023-06-26 15:29       ` [PATCH v9 00/12] Network support for Landlock - allowed list of protocols Mickaël Salaün
2023-06-28  2:33         ` Jeff Xu
2023-06-28 19:03           ` Mickaël Salaün
2023-06-28 21:56             ` Jeff Xu
2023-06-28  8:44         ` Günther Noack [this message]
2023-06-28 17:03           ` Jeff Xu
2023-06-28 19:29             ` Mickaël Salaün
2023-06-29  3:18               ` Jeff Xu
2023-06-29 11:07                 ` Mickaël Salaün
2023-06-30  4:18                   ` Jeff Xu
2023-06-30 18:23                     ` Mickaël Salaün
2023-07-05 15:00                       ` Jeff Xu
2023-07-12 11:30                         ` Mickaël Salaün
2023-07-13 13:20                           ` Konstantin Meskhidze (A)
2023-07-13 14:52                             ` Mickaël Salaün
2023-07-13 11:44                   ` Konstantin Meskhidze (A)
2023-06-28 19:07           ` Mickaël Salaün

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZJvy2SViorgc+cZI@google.com \
    --to=gnoack@google.com \
    --cc=allenwebb@google.com \
    --cc=artem.kuzin@huawei.com \
    --cc=dtor@google.com \
    --cc=gnoack3000@gmail.com \
    --cc=jeffxu@google.com \
    --cc=jorgelo@chromium.org \
    --cc=konstantin.meskhidze@huawei.com \
    --cc=linux-security-module@vger.kernel.org \
    --cc=mic@digikod.net \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=willemdebruijn.kernel@gmail.com \
    --cc=yusongping@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).