linux-security-module.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Mickaël Salaün" <mic@digikod.net>
To: Tahera Fahimi <fahimitahera@gmail.com>
Cc: "Paul Moore" <paul@paul-moore.com>,
	"James Morris" <jmorris@namei.org>,
	"Serge E. Hallyn" <serge@hallyn.com>,
	linux-security-module@vger.kernel.org,
	linux-kernel@vger.kernel.org, outreachy@lists.linux.dev,
	netdev@vger.kernel.org,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Jann Horn" <jannh@google.com>,
	"Günther Noack" <gnoack@google.com>
Subject: Re: [PATCH v2] landlock: Add abstract unix socket connect restrictions
Date: Tue, 30 Apr 2024 17:24:45 +0200	[thread overview]
Message-ID: <20240411.ahgeefeiNg4i@digikod.net> (raw)
In-Reply-To: <ZhcRnhVKFUgCleDi@tahera-OptiPlex-5000>

On Wed, Apr 10, 2024 at 04:24:30PM -0600, Tahera Fahimi wrote:
> On Tue, Apr 02, 2024 at 11:53:09AM +0200, Mickaël Salaün wrote:
> > Thanks for this patch.  Please CC the netdev mailing list too, they may
> > be interested by this feature. I also added a few folks that previously
> > showed their interest for this feature.
> > 
> > On Thu, Mar 28, 2024 at 05:12:13PM -0600, TaheraFahimi wrote:
> > > Abstract unix sockets are used for local interprocess communication without
> > > relying on filesystem. Since landlock has no restriction for connecting to
> > > a UNIX socket in the abstract namespace, a sandboxed process can connect to
> > > a socket outside the sandboxed environment. Access to such sockets should
> > > be scoped the same way ptrace access is limited.
> > 
> > This is good but it would be better to explain that Landlock doesn't
> > currently control abstract unix sockets and that it would make sense for
> > a sandbox.
> > 
> > 
> > > 
> > > For a landlocked process to be allowed to connect to a target process, it
> > > must have a subset of the target process’s rules (the connecting socket
> > > must be in a sub-domain of the listening socket). This patch adds a new
> > > LSM hook for connect function in unix socket with the related access rights.
> > 
> > Because of compatibility reasons, and because Landlock should be
> > flexible, we need to extend the user space interface.  As explained in
> > the GitHub issue, we need to add a new "scoped" field to the
> > landlock_ruleset_attr struct. This field will optionally contain a
> > LANDLOCK_RULESET_SCOPED_ABSTRACT_UNIX_SOCKET flag to specify that this
> > ruleset will deny any connection from within the sandbox to its parents
> > (i.e. any parent sandbox or not-sandboxed processes).

> Thanks for the feedback. Here is what I understood, please correct me if
> I am wrong. First, I should add another field to the
> landlock_ruleset_attr (a field like handled_access_net, but for the unix
> sockets) with a flag LANDLOCK_ACCESS_UNIX_CONNECT (it is a flag like
> LANDLOCK_ACCESS_NET_CONNECT_TCP but fot the unix sockets connect).

That was the initial idea, but after thinking more about it and talking
with some users, I now think we can get a more generic interface.

Because unix sockets, signals, and other IPCs are fully controlled by
the kernel (contrary to inet sockets that get out of the system), we can
add ingress and egress control according to the source and the
destination.

To control the direction we could add an
LANDLOCK_ACCESS_DOM_UNIX_ABSTRACT_RECEIVE and a
LANDLOCK_ACCESS_DOM_UNIX_ABSTRACT_SEND rights (these names are a bit
long but at least explicit).  To control the source and destination, it
makes sense to use Landlock domain (i.e. sandboxes):
LANDLOCK_DOMAIN_HIERARCHY_PARENT, LANDLOCK_DOMAIN_HIERARCHY_SELF, and
LANDLOCK_DOMAIN_HIERARCHY_CHILD.  This could be used by extending the
landlock_ruleset_attr type and adding a new
landlock_domain_hierarchy_attr type:

struct landlock_ruleset_attr ruleset_attr = {
  .handled_access_dom = LANDLOCK_ACCESS_DOM_UNIX_ABSTRACT_RECEIVE | \
                        LANDLOCK_ACCESS_DOM_UNIX_ABSTRACT_SEND,
}

// Allows sending data to and receiving data from processes in the same
// domain or a child domain, through abstract unix sockets.
struct landlock_domain_hierarchy_attr dom_attr = {
  .allowed_access = LANDLOCK_ACCESS_DOM_UNIX_ABSTRACT_RECEIVE | \
                    LANDLOCK_ACCESS_DOM_UNIX_ABSTRACT_SEND,
  .relationship = LANDLOCK_DOMAIN_HIERARCHY_SELF | \
                  LANDLOCK_DOMAIN_HIERARCHY_CHILD,
};

It should also work with other kind of IPCs:
* LANDLOCK_ACCESS_DOM_UNIX_PATHNAME_RECEIVE/SEND (signal)
* LANDLOCK_ACCESS_DOM_SIGNAL_RECEIVE/SEND (signal)
* LANDLOCK_ACCESS_DOM_XSI_RECEIVE/SEND (XSI message queue)
* LANDLOCK_ACCESS_DOM_MQ_RECEIVE/SEND (POSIX message queue)
* LANDLOCK_ACCESS_DOM_PTRACE_RECEIVE/SEND (ptrace, which would be
  limited)

What do you think?

  reply	other threads:[~2024-04-30 15:24 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-28 23:12 [PATCH v2] landlock: Add abstract unix socket connect restrictions TaheraFahimi
2024-04-02  9:53 ` Mickaël Salaün
2024-04-10 22:24   ` Tahera Fahimi
2024-04-30 15:24     ` Mickaël Salaün [this message]
2024-05-30  0:50       ` Tahera Fahimi
2024-05-30 23:13       ` Tahera Fahimi
2024-05-31  9:39         ` Mickaël Salaün
2024-05-31 20:04           ` Tahera Fahimi
2024-06-03 15:22             ` 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=20240411.ahgeefeiNg4i@digikod.net \
    --to=mic@digikod.net \
    --cc=bjorn3_gh@protonmail.com \
    --cc=fahimitahera@gmail.com \
    --cc=gnoack@google.com \
    --cc=jannh@google.com \
    --cc=jmorris@namei.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=outreachy@lists.linux.dev \
    --cc=paul@paul-moore.com \
    --cc=serge@hallyn.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).