Re: [RFC PATCH 0/9] Add CIL Deny Rule

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 16, 2022 at 1:52 PM Daniel Burgener
<dburgener@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On 12/15/2022 4:34 PM, James Carter wrote:
> > I don't expect this to be part of the upcoming userspace release,
> > but I did want to see if this is going to be what Cascade needs.
>
> Thank you!  I've been playing with this series locally all morning and
> so far it mostly works as expected.  The only minor surprise so far is
> if I do something like:
>
> (type my_type1)
> (type my_type2)
> (type my_type3)
> (typeattributeset my_attr (my_type1 my_type2 my_type3))
> (allow my_attr my_attr (process (signal signull)))
> (deny my_type1 my_attr (process (signal)))
>
> I get rules like this:
>
> $ sesearch -A -s my_attr policy.33
> allow deny_rule_attr_11 my_attr:process { signal signull };
> allow my_attr my_attr:process signull;
>
> Since deny_rule_attr_11 is a subset of my_attr (specifically, my_type2
> and my_type3), both of those types get the "signull" permission from the
> second rule on the attribute, and only strictly need the "signal"
> permission (which my_type1 doesn't get)
>
> It's obviously not a real problem, since it's just redundant policy and
> both versions are functionally equivalent.  It's just a little weird
> browsing the rules using sesearch, particularly with large permission
> sets (My first attribute test involved using "all" on the file class and
> denying one permission from a type, and it was mildly challenging to
> manually verify the results looking at the allow rules in a large list.)
>

I knew that I was creating some redundancy in the rules, but I was
trying to eliminate the special cases. Now that I have something that
appears to be working, it will probably be worth it to go back and see
how messy it would be to remove some of the redundancy.

> Anyways, besides that minor issue everything I've tried so far has
> worked well and the overall concept seems sensible and helpful.
> Although, I still need to get my head around the specifics of the
> attribute handling, and I haven't looked thoroughly at the code yet.
>
> I intend to do more thorough testing and code review, but I don't expect
> I'll have time before the holidays, so that will likely come in January.
>   Since I don't have time for anything more thorough now, hopefully some
> first impressions are helpful in the interim.
>

I am going to be on vacation for the last two weeks of December, so I
won't be getting back to this until January anyway.

Thanks for the quick look and comments!
Jim


> -Daniel
>
> >
> > This series of patches implements a deny rule in CIL. A deny rule will remove
> > the stated permissions in it from the policy. CIL does this by searching for
> > allow rules that match the deny rule and then writing new allow rules that
> > correspond to the matched allow rule with the permissions from the deny rule
> > removed. The rule uses the same syntax as an allow rule, but with "deny"
> > instead of "allow".
> >
> >    (deny SRC TGT (CLASS (PERMS)))
> >
> > Deny rules are processed during post processing (after the AST is resolved,
> > but before the binary policy is written). This means that neverallow checking
> > is done after deny rules are resolved. Deny rules are complimentary to
> > neverallow checking. When an allow rule is found that matches, a deny rule
> > removes permissions while a neverallow rule reports an error.
> >
> > Patch 4 is biggest and most complex since it is the one doing the processing.
> >
> > James Carter (9):
> >    libsepol/cil: Parse and add deny rule to AST, but do not process
> >    libsepol/cil: Add cil_list_is_empty macro
> >    libsepol/cil: Add cil_tree_remove_node function
> >    libsepol/cil: Process deny rules
> >    libsepol/cil: Add cil_write_post_ast function
> >    libsepol: Export the cil_write_post_ast function
> >    secilc/secil2tree: Add option to write CIL AST after post processing
> >    secilc/test: Add a deny rule test
> >    secilc/docs: Add deny rule to CIL documentation
> >
> >   libsepol/cil/include/cil/cil.h         |   1 +
> >   libsepol/cil/src/cil.c                 |  68 ++
> >   libsepol/cil/src/cil_build_ast.c       |  56 ++
> >   libsepol/cil/src/cil_build_ast.h       |   2 +
> >   libsepol/cil/src/cil_copy_ast.c        |  19 +
> >   libsepol/cil/src/cil_copy_ast.h        |   1 +
> >   libsepol/cil/src/cil_deny.c            | 957 +++++++++++++++++++++++++
> >   libsepol/cil/src/cil_deny.h            |  34 +
> >   libsepol/cil/src/cil_flavor.h          |   1 +
> >   libsepol/cil/src/cil_internal.h        |  10 +
> >   libsepol/cil/src/cil_list.h            |   3 +
> >   libsepol/cil/src/cil_post.c            |   7 +
> >   libsepol/cil/src/cil_reset_ast.c       |   8 +
> >   libsepol/cil/src/cil_resolve_ast.c     |  44 ++
> >   libsepol/cil/src/cil_resolve_ast.h     |   1 +
> >   libsepol/cil/src/cil_tree.c            |  27 +
> >   libsepol/cil/src/cil_tree.h            |   1 +
> >   libsepol/cil/src/cil_verify.c          |   9 +
> >   libsepol/cil/src/cil_write_ast.c       |  10 +
> >   libsepol/cil/src/cil_write_ast.h       |   1 +
> >   libsepol/src/libsepol.map.in           |   5 +
> >   secilc/docs/cil_access_vector_rules.md |  68 ++
> >   secilc/secil2tree.c                    |   8 +-
> >   secilc/test/deny_rule_test.cil         | 384 ++++++++++
> >   24 files changed, 1724 insertions(+), 1 deletion(-)
> >   create mode 100644 libsepol/cil/src/cil_deny.c
> >   create mode 100644 libsepol/cil/src/cil_deny.h
> >   create mode 100644 secilc/test/deny_rule_test.cil
> >
>



[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux