[apparmor] [patch 2/3] libaalogparse: add signal and peer keyword support
Steve Beattie
steve at nxnw.org
Wed Sep 3 07:40:22 UTC 2014
When signals and ptrace mediation were added to apparmor, the aalogparse
routines were not adjusted to compensate. This patch adds support for
the signal and peer keywords.
A couple of notes/questions:
1) The signal value is not a quoted string, is this intentional?
2) signal and ptrace rejections use the 'peer' keyword to report the
peer profile/label, yet dbus rejections use 'peer_profile'. Should
these be the same? Even if they are kept different in the logging,
should they map to the same field in the structure generated by
aalogparse?
Signed-off-by: Steve Beattie <steve at nxnw.org>
---
libraries/libapparmor/include/aalogparse.h | 2 +
libraries/libapparmor/src/grammar.y | 6 ++++
libraries/libapparmor/src/libaalogparse.c | 4 ++
libraries/libapparmor/src/scanner.l | 4 ++
libraries/libapparmor/testsuite/test_multi.c | 3 ++
libraries/libapparmor/testsuite/test_multi/testcase_ptrace_01.in | 1
libraries/libapparmor/testsuite/test_multi/testcase_ptrace_01.out | 13 +++++++++
libraries/libapparmor/testsuite/test_multi/testcase_signal_01.in | 1
libraries/libapparmor/testsuite/test_multi/testcase_signal_01.out | 14 ++++++++++
libraries/libapparmor/testsuite/test_multi/testcase_signal_02.in | 1
libraries/libapparmor/testsuite/test_multi/testcase_signal_02.out | 14 ++++++++++
11 files changed, 63 insertions(+)
Index: b/libraries/libapparmor/src/grammar.y
===================================================================
--- a/libraries/libapparmor/src/grammar.y
+++ b/libraries/libapparmor/src/grammar.y
@@ -128,6 +128,7 @@ aa_record_event_type lookup_aa_event(uns
%token TOK_KEY_PEER_PID
%token TOK_KEY_PROFILE
%token TOK_KEY_PEER_PROFILE
+%token TOK_KEY_PEER
%token TOK_AUDIT
%token TOK_KEY_FAMILY
%token TOK_KEY_SOCK_TYPE
@@ -157,6 +158,7 @@ aa_record_event_type lookup_aa_event(uns
%token TOK_KEY_PATH
%token TOK_KEY_INTERFACE
%token TOK_KEY_MEMBER
+%token TOK_KEY_SIGNAL
%token TOK_SYSLOG_KERNEL
%token TOK_SYSLOG_USER
@@ -267,6 +269,8 @@ key: TOK_KEY_OPERATION TOK_EQUALS TOK_QU
{ ret_record->info = $3;}
| TOK_KEY_PEER_INFO TOK_EQUALS TOK_QUOTED_STRING
{ ret_record->peer_info = $3;}
+ | TOK_KEY_PEER TOK_EQUALS TOK_QUOTED_STRING
+ { ret_record->peer = $3;}
| key_pid
| key_peer_pid
| TOK_KEY_PROFILE TOK_EQUALS safe_string
@@ -348,6 +352,8 @@ key: TOK_KEY_OPERATION TOK_EQUALS TOK_QU
{ ret_record->dbus_interface = $3; }
| TOK_KEY_MEMBER TOK_EQUALS TOK_QUOTED_STRING
{ ret_record->dbus_member = $3; }
+ | TOK_KEY_SIGNAL TOK_EQUALS TOK_ID
+ { ret_record->signal = $3; }
| TOK_MSG_REST
{
ret_record->event = AA_RECORD_INVALID;
Index: b/libraries/libapparmor/src/scanner.l
===================================================================
--- a/libraries/libapparmor/src/scanner.l
+++ b/libraries/libapparmor/src/scanner.l
@@ -159,6 +159,8 @@ key_dest "dest"
key_path "path"
key_interface "interface"
key_member "member"
+key_signal "signal"
+key_peer "peer"
audit "audit"
/* network addrs */
@@ -336,6 +338,8 @@ yy_flex_debug = 0;
{key_path} { return(TOK_KEY_PATH); }
{key_interface} { return(TOK_KEY_INTERFACE); }
{key_member} { return(TOK_KEY_MEMBER); }
+{key_signal} { BEGIN(sub_id); return(TOK_KEY_SIGNAL); }
+{key_peer} { BEGIN(safe_string); return(TOK_KEY_PEER); }
{syslog_kernel} { BEGIN(dmesg_timestamp); return(TOK_SYSLOG_KERNEL); }
{syslog_user} { return(TOK_SYSLOG_USER); }
Index: b/libraries/libapparmor/testsuite/test_multi/testcase_signal_01.in
===================================================================
--- /dev/null
+++ b/libraries/libapparmor/testsuite/test_multi/testcase_signal_01.in
@@ -0,0 +1 @@
+type=AVC msg=audit(1409438250.564:201): apparmor="DENIED" operation="signal" profile="/usr/bin/pulseaudio" pid=2531 comm="pulseaudio" requested_mask="send" denied_mask="send" signal=term peer="/usr/bin/pulseaudio///usr/lib/pulseaudio/pulse/gconf-helper"
Index: b/libraries/libapparmor/include/aalogparse.h
===================================================================
--- a/libraries/libapparmor/include/aalogparse.h
+++ b/libraries/libapparmor/include/aalogparse.h
@@ -152,6 +152,8 @@ typedef struct
char *dbus_path;
char *dbus_interface;
char *dbus_member;
+ char *signal; /* signal name */
+ char *peer;
} aa_log_record;
/**
Index: b/libraries/libapparmor/src/libaalogparse.c
===================================================================
--- a/libraries/libapparmor/src/libaalogparse.c
+++ b/libraries/libapparmor/src/libaalogparse.c
@@ -71,6 +71,8 @@ void free_record(aa_log_record *record)
free(record->info);
if (record->peer_info != NULL)
free(record->peer_info);
+ if (record->peer != NULL)
+ free(record->peer);
if (record->active_hat != NULL)
free(record->active_hat);
if (record->audit_id != NULL)
@@ -93,6 +95,8 @@ void free_record(aa_log_record *record)
free(record->dbus_interface);
if (record->dbus_member != NULL)
free(record->dbus_member);
+ if (record->signal != NULL)
+ free(record->signal );
free(record);
}
Index: b/libraries/libapparmor/testsuite/test_multi.c
===================================================================
--- a/libraries/libapparmor/testsuite/test_multi.c
+++ b/libraries/libapparmor/testsuite/test_multi.c
@@ -98,6 +98,7 @@ int print_results(aa_log_record *record)
print_string("Profile", record->profile);
print_string("Peer profile", record->peer_profile);
+ print_string("Peer", record->peer);
print_string("Name", record->name);
print_string("Command", record->comm);
print_string("Name2", record->name2);
@@ -126,6 +127,8 @@ int print_results(aa_log_record *record)
print_string("DBus interface", record->dbus_interface);
print_string("DBus member", record->dbus_member);
+ print_string("Signal", record->signal);
+
print_long("Epoch", record->epoch, 0);
print_long("Audit subid", (long) record->audit_sub_id, 0);
return(0);
Index: b/libraries/libapparmor/testsuite/test_multi/testcase_signal_02.in
===================================================================
--- /dev/null
+++ b/libraries/libapparmor/testsuite/test_multi/testcase_signal_02.in
@@ -0,0 +1 @@
+type=AVC msg=audit(1409438250.564:201): apparmor="DENIED" operation="signal" profile="/usr/bin/pulseaudio///usr/lib/pulseaudio/pulse/gconf-helper" pid=2531 comm="pulseaudio" requested_mask="receive" denied_mask="receive" signal=term peer="/usr/bin/pulseaudio"
Index: b/libraries/libapparmor/testsuite/test_multi/testcase_signal_01.out
===================================================================
--- /dev/null
+++ b/libraries/libapparmor/testsuite/test_multi/testcase_signal_01.out
@@ -0,0 +1,14 @@
+START
+File: testcase_signal_01.in
+Event type: AA_RECORD_DENIED
+Audit ID: 1409438250.564:201
+Operation: signal
+Mask: send
+Denied Mask: send
+Profile: /usr/bin/pulseaudio
+Peer: /usr/bin/pulseaudio///usr/lib/pulseaudio/pulse/gconf-helper
+Command: pulseaudio
+PID: 2531
+Signal: term
+Epoch: 1409438250
+Audit subid: 201
Index: b/libraries/libapparmor/testsuite/test_multi/testcase_signal_02.out
===================================================================
--- /dev/null
+++ b/libraries/libapparmor/testsuite/test_multi/testcase_signal_02.out
@@ -0,0 +1,14 @@
+START
+File: testcase_signal_02.in
+Event type: AA_RECORD_DENIED
+Audit ID: 1409438250.564:201
+Operation: signal
+Mask: receive
+Denied Mask: receive
+Profile: /usr/bin/pulseaudio///usr/lib/pulseaudio/pulse/gconf-helper
+Peer: /usr/bin/pulseaudio
+Command: pulseaudio
+PID: 2531
+Signal: term
+Epoch: 1409438250
+Audit subid: 201
Index: b/libraries/libapparmor/testsuite/test_multi/testcase_ptrace_01.in
===================================================================
--- /dev/null
+++ b/libraries/libapparmor/testsuite/test_multi/testcase_ptrace_01.in
@@ -0,0 +1 @@
+type=AVC msg=audit(1409700683.304:547661): apparmor="DENIED" operation="ptrace" profile="/home/ubuntu/bzr/apparmor/tests/regression/apparmor/ptrace" pid=22465 comm="ptrace" requested_mask="tracedby" denied_mask="tracedby" peer="/home/ubuntu/bzr/apparmor/tests/regression/apparmor/ptrace"
Index: b/libraries/libapparmor/testsuite/test_multi/testcase_ptrace_01.out
===================================================================
--- /dev/null
+++ b/libraries/libapparmor/testsuite/test_multi/testcase_ptrace_01.out
@@ -0,0 +1,13 @@
+START
+File: testcase_ptrace_01.in
+Event type: AA_RECORD_DENIED
+Audit ID: 1409700683.304:547661
+Operation: ptrace
+Mask: tracedby
+Denied Mask: tracedby
+Profile: /home/ubuntu/bzr/apparmor/tests/regression/apparmor/ptrace
+Peer: /home/ubuntu/bzr/apparmor/tests/regression/apparmor/ptrace
+Command: ptrace
+PID: 22465
+Epoch: 1409700683
+Audit subid: 547661
More information about the AppArmor
mailing list