All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Richard Guy Briggs <rgb@redhat.com>
Cc: Netfilter Developer Mailing List
	<netfilter-devel@vger.kernel.org>,
	linux-audit@redhat.com, Florian Westphal <fw@strlen.de>,
	Thomas Woerner <twoerner@redhat.com>,
	Thomas Graf <tgraf@infradead.org>, Eric Paris <eparis@redhat.com>,
	Paul Moore <pmoore@redhat.com>, Steve Grubb <sgrubb@redhat.com>
Subject: Re: [PATCH 3/6 RFC] netfilter: audit only on xtables and ebtables syscall rule or standalone
Date: Wed, 24 May 2017 19:36:06 +0200	[thread overview]
Message-ID: <20170524173606.GB7439@salvia> (raw)
In-Reply-To: <ac9a2120311288328a81d3e07a68857ebd32a21b.1495124188.git.rgb@redhat.com>

On Thu, May 18, 2017 at 01:21:49PM -0400, Richard Guy Briggs wrote:
> There were syscall events unsolicited by any audit rule caused by a missing
> !audit_dummy_context() check before creating an
> iptables/ip6tables/arptables/ebtables NETFILTER_CFG record.  Check
> !audit_dummy_context() before creating the NETFILTER_CFG record.
> 
> The vast majority of observed unaccompanied records are caused by the fedora
> default rule: "-a never,task" and the occasional early startup one is I believe
> caused by the iptables filter table module hard linked into the kernel rather
> than a loadable module. The !audit_dummy_context() check above should avoid
> them.  Audit only when there is an existing syscall audit rule, otherwise issue
> a standalone record only on table modification rather than empty table
> creation.
> 
> Add subject attributes to the new standalone NETFILTER_CFGSOLO record using
> a newly exported audit_log_task().

This new NETFILTER_CFGSOLO looks like audit infra is missing some way
to export a revision / context to userspace? It's duplicating quite a
bit of the code from what I can see in this patch.

> diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
> index 0714a66..8bee3f5 100644
> --- a/include/uapi/linux/audit.h
> +++ b/include/uapi/linux/audit.h
> @@ -112,6 +112,7 @@
>  #define AUDIT_FEATURE_CHANGE	1328	/* audit log listing feature changes */
>  #define AUDIT_REPLACE		1329	/* Replace auditd if this packet unanswerd */
>  #define AUDIT_KERN_MODULE	1330	/* Kernel Module events */
> +#define AUDIT_NETFILTER_CFGSOLO	1331	/* Netfilter chain modifications standalone */
>  
>  #define AUDIT_AVC		1400	/* SE Linux avc denial or grant */
>  #define AUDIT_SELINUX_ERR	1401	/* Internal SE Linux Errors */
> diff --git a/kernel/auditsc.c b/kernel/auditsc.c
> index b2dcbe6..8ac38e6 100644
> --- a/kernel/auditsc.c
> +++ b/kernel/auditsc.c
> @@ -2383,7 +2383,7 @@ void __audit_log_kern_module(char *name)
>  	context->type = AUDIT_KERN_MODULE;
>  }
>  
> -static void audit_log_task(struct audit_buffer *ab)
> +void audit_log_task(struct audit_buffer *ab)
>  {
>  	kuid_t auid, uid;
>  	kgid_t gid;
> @@ -2404,6 +2404,7 @@ static void audit_log_task(struct audit_buffer *ab)
>  	audit_log_untrustedstring(ab, get_task_comm(comm, current));
>  	audit_log_d_path_exe(ab, current->mm);
>  }
> +EXPORT_SYMBOL_GPL(audit_log_task);
>  
>  /**
>   * audit_core_dumps - record information about processes that end abnormally
> diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
> index 13d7fe2..743f9e6 100644
> --- a/net/bridge/netfilter/ebtables.c
> +++ b/net/bridge/netfilter/ebtables.c
> @@ -1071,12 +1071,25 @@ static int do_replace_finish(struct net *net, struct ebt_replace *repl,
>  	if (audit_enabled) {
>  		struct audit_buffer *ab;
>  
> -		ab = audit_log_start(current->audit_context, GFP_KERNEL,
> -				     AUDIT_NETFILTER_CFG);
> -		if (ab) {
> -			audit_log_format(ab, "table=%s family=%u entries=%u",
> -					 repl->name, AF_BRIDGE, repl->nentries);
> -			audit_log_end(ab);
> +		if(!audit_dummy_context()) {
> +			ab = audit_log_start(current->audit_context, GFP_KERNEL,
> +					     AUDIT_NETFILTER_CFG);
> +			if (ab) {
> +				audit_log_format(ab, "family=%u table=%s entries=%u",
> +						 AF_BRIDGE, repl->name,
> +						 repl->nentries);
> +				audit_log_end(ab);
> +			}
> +		} else if(repl->nentries) {
> +			ab = audit_log_start(NULL, GFP_KERNEL,
> +					     AUDIT_NETFILTER_CFGSOLO);
> +			if (ab) {
> +				audit_log_task(ab);
> +				audit_log_format(ab, " family=%u table=%s entries=%u",
> +						 AF_BRIDGE, repl->name,
> +						 repl->nentries);
> +				audit_log_end(ab);
> +			}

If you have no other way, probably it is a good idea to wrap this code 
around a function, eg. ebt_audit_replace_finish() ?

  reply	other threads:[~2017-05-24 17:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-18 17:21 [PATCH 0/6 RFC] Address NETFILTER_CFG issues Richard Guy Briggs
2017-05-18 17:21 ` [PATCH 1/6 RFC] netfilter: normalize x_table function declarations Richard Guy Briggs
2017-05-24 17:37   ` Pablo Neira Ayuso
2017-05-24 22:30     ` Richard Guy Briggs
2017-05-18 17:21 ` [PATCH 2/6 RFC] netfilter: normalize ebtables " Richard Guy Briggs
2017-05-18 17:21 ` [PATCH 3/6 RFC] netfilter: audit only on xtables and ebtables syscall rule or standalone Richard Guy Briggs
2017-05-24 17:36   ` Pablo Neira Ayuso [this message]
2017-05-24 18:09     ` Richard Guy Briggs
2017-06-02 15:25       ` Paul Moore
2017-05-18 17:21 ` [PATCH 4/6 RFC] netfilter: ebtables: audit table registration Richard Guy Briggs
2017-06-02 15:27   ` Paul Moore
2017-05-18 17:21 ` [PATCH 5/6 RFC] netfilter: add audit operation field Richard Guy Briggs
2017-06-02 15:28   ` Paul Moore
2017-05-18 17:21 ` [PATCH 6/6 RFC] netfilter: add audit netns ID Richard Guy Briggs
2017-05-24 17:31   ` Pablo Neira Ayuso
2017-05-24 18:04     ` Richard Guy Briggs
2017-05-24 19:44       ` Eric W. Biederman
2017-06-02 15:32         ` Paul Moore

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=20170524173606.GB7439@salvia \
    --to=pablo@netfilter.org \
    --cc=eparis@redhat.com \
    --cc=fw@strlen.de \
    --cc=linux-audit@redhat.com \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=pmoore@redhat.com \
    --cc=rgb@redhat.com \
    --cc=sgrubb@redhat.com \
    --cc=tgraf@infradead.org \
    --cc=twoerner@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.