Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Mar 2022 17:12:30 -0400
From:      Shawn Webb <shawn.webb@hardenedbsd.org>
To:        Mathieu <sigsys@gmail.com>
Cc:        freebsd-hackers@FreeBSD.org
Subject:   Re: curtain: WIP sandboxing mechanism with pledge()/unveil() support
Message-ID:  <20220329211230.2dufhnikhaqyovwc@mutt-hbsd>
In-Reply-To: <e934eda4-5d6e-1d86-9002-7a1e4a2102b1@gmail.com>
References:  <25b5c60f-b9cc-78af-86d7-1cc714232364@gmail.com> <20220329181428.n3db2x57nnn64yfx@mutt-hbsd> <e934eda4-5d6e-1d86-9002-7a1e4a2102b1@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--r56sicskwccqyk53
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Mar 29, 2022 at 03:46:09PM -0400, Mathieu wrote:
> On 3/29/22 14:14, Shawn Webb wrote:
> > On Mon, Mar 28, 2022 at 05:37:44AM -0400, Mathieu wrote:
> > > Hello list.=A0 Since a while I've been working on and off on a
> > > pledge()/unveil() implementation for FreeBSD.=A0 I also wanted it to =
be able
> > > to sandbox arbitrary programs that might not expect it with no (or ve=
ry
> > > minor) modifications.=A0 So I just kept adding to it until it could d=
o that
> > > well enough.=A0 I'm still working on it, and there are some known iss=
ues and
> > > some things I'm not sure are done correctly, but overall it's in a ve=
ry
> > > functional state now. It can run unmodified most utilities and deskto=
p apps
> > > (though dbus/dconf/etc are trouble), server daemons, buildworld and w=
hole
> > > shell/desktop sessions sandboxed.
> > >=20
> > > https://github.com/Math2/freebsd-pledge
> > > https://github.com/Math2/freebsd-pledge/blob/main/CURTAIN-README.md
> > >=20
> > > It can be broken up in 4 parts: 1) A MAC module that implements most =
of the
> > > functionality.=A0 2) The userland library, sandboxing utility, config=
s and
> > > tests.=A0 3) Various kernel changes needed to support it (including n=
ew MAC
> > > handlers and extended syscall filtering).=A0 4) Small changes/fixes t=
o the
> > > base userland (things like adding reporting to ps and modifying some
> > > utilities to use $TMPDIR so that they can be properly sandboxed).=A0 =
So 1) and
> > > 2) could be in a port.=A0 And I tried to minimize 3) and 4) as much as
> > > possible.
> > >=20
> > > I noted some problems/limitations in the CURTAIN-ISSUES file.=A0 At t=
his point
> > > I'm mostly wondering about the general design being acceptable for me=
rging
> > > eventually.=A0 Because most of this could be part of a port, but not =
all of
> > > it.=A0 And the way that it deals with filesystem access restrictions =
in
> > > particular is kludgy.=A0 So any feedback/testing welcome.
> > >=20
> > > It still lacks documentation (in part because I'm not sure of what co=
uld
> > > still change) so I'm going to give an overview of it here and show so=
me
> > > examples and that's going to be the documentation for now.=A0 And I'll
> > > describe the kernel changes that it needed.=A0 So that's going to be =
a bit of
> > > a long email.
> > Hey Mathieu,
> >=20
> > Thanks a lot for working on this! I'm incredibly excited to see this
> > work progress and mature.
>=20
>=20
> Hey! Thanks, nice to hear that.
>=20
>=20
> > I'd love to start reviewing your work. One thing that would make it
> > easier to review would be if you used a feature branch rather than
> > relying on the main branch. That way, a simple `git diff` command
> > could be used to generate a diff between your code and stock freebsd.
> >=20
> > If you'd like an example of that, take a look at HardenedBSD's
> > repo[0]. We have two relevant branches:
> >=20
> > freebsd/current/main <- FreeBSD's sources
> > hardened/current/main <- HardenedBSD's patches applied on top of
> >      FreeBSD's sources
> >=20
> > Users can then simply run `git diff origin/freebsd/current/main` to
> > see all the changes we've made (assuming the user is currently working
> > on the hardened/current/master branch.)
> >=20
> > [0]: https://git.hardenedbsd.org/HardenedBSD/hardenedbsd
>=20
>=20
> I gotta be honest, I'm never too sure if I understand what git is doing. =
So
> I try to keep it simple. I'm going to create a "stock" branch and keep it
> pointing *exactly* to what I've been merging from. Lemme know if that wor=
ks.
> I'm not too sure I'd be using a more elaborate branch layout correctly...
> This is going to be a lot of work to review so yeah I'd try to set this up
> to make it easier but I could just make it worse too heh. The way I've be=
en
> comparing my changes to stock so far was with 3 dots diff: `git diff
> freebsd/main...main`.

I quickly forked your repo, and created two branches:
freebsd/current/main and curtain/current/main:

https://github.com/lattera/freebsd-pledge

So now freebsd/current/main can be updated first, then you can merge
in freebsd/current/main into curtain/current/main. Hopefully you find
that useful.

>=20
> Also, I gotta warn you, the lack of comments is just terrible in some
> places. This project turned out to be a lot more complicated than I had
> hoped. Correctly handling "slots" and inheritance/masking between sandbox=
es
> was harder than I thought. Most of the complexity are in the library and =
MAC
> module. But I think it probably was necessary complexity to get the (most=
ly)
> seamlessly nestable sandboxing system that I wanted...

Totally understood. This is a work in progress and there's likely a
lot to still be worked out (as you've already mentioned.)

My work load at ${DAYJOB} is a bit tight at the moment, but I do plan
on taking some time off soon. During that time off, I'll start peeking
at the code. I'll make sure to keep an eye on the project in the
meantime, though.

Thanks again!

--=20
Shawn Webb
Cofounder / Security Engineer
HardenedBSD

https://git.hardenedbsd.org/hardenedbsd/pubkeys/-/raw/master/Shawn_Webb/03A=
4CBEBB82EA5A67D9F3853FF2E67A277F8E1FA.pub.asc

--r56sicskwccqyk53
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEA6TL67gupaZ9nzhT/y5nonf44foFAmJDdjwACgkQ/y5nonf4
4fqEuQ//ZlThk02cVv8qeujzauPDaXyVJyA1sb1RZMKOkVwyAxvLW1jkSb3EADga
eEw70NzsUU7WNHWiRykec4cChRKOm1NuTiK5+jrxIPZD6odn6HHqdIohi2bOTl0t
1FnqAvVR57gEKBIwDBFnf/yB2YGJzBQ5Fh36ADl+e1Um1u2abY/ZoG1vImglle4R
yALYAd9qzWWd7j0sM7S3nSTKybEAdtgttKJGaL8ym/kI7g93gBZ5jGNWSromNCi4
a+ZslPTfO4GFWwHVgdgiC/AEkiExH1XbG9c/yD4dAL9J9m0lxXPh6NCdsIu3iltr
Kb0qPZs4qc9g5aEa2DPLJC/IZDcYUJeVvf8Lz3FHBF4pNvGb9wvw+IhwVwWpHq+W
qTfawaGtuG6ZZW51xoQy/oB9dCwkApP4Oe0MIvHjaG4IKhm+w3j0phwdsZ/isj51
Swtl9Swm9zOh6RW5W0xcjHMkbYdSFGS7/4MmrzK8epsRN3gdEYzf5lZ06piu4KEn
nQq2LcU7ewV0F8nBJ4PlNrq+42a+0yrxiDwY1XPPZHoCWwOHZ7vybhOloaP8KUgv
Yx9IwI3UUkxUOYL+C+uKhcKHvpYgW792YVce8dsQpqKI7GrwXjr6S37pUUe6tROX
tAIfi/e9IyWbmu/bJ9hZoGdKhlBPIxYk9eZqje3voQnabll8PtE=
=Lny8
-----END PGP SIGNATURE-----

--r56sicskwccqyk53--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20220329211230.2dufhnikhaqyovwc>