===== Audit Kernel Events ===== ==== Mentor ==== RobertWatson ==== Student (+contact information) ==== EfstratiosKaratzas ==== Abstract ==== Kernel subsytems such as NFS & PF can be enhanced to log security related information using %%TrustedBSD%%'s Audit subsystem. The kernel audit framework will need serious reworking itself because it is currently based on the notion that information is gathered only through system calls and a single kernel thread will be involved in at most one security event at a time. This project will focus on providing audit support for NFS RPCs and the necessary foundations for modifying other kernel subsystems. ==== p4 depot path ==== %%//%%depot/projects/soc2010/gpf_audit/freebsd/ ==== Timeline ==== May 1 – May 10: Provide audit support for current NFS server implementation, using only vn_fullpath(9). Perform first tests. May 11 – May 20: Some extra research + design & coding of a new KPI that produces a path, given a vnode pointer. Thorough testing & writing of man page for the KPI. May 21 – May 27: Integrate the new KPI to NFS code, more testing & bug fixing. This actually led to the creation of a new VOP, VOP_GETPARENT(), and a new vfs op, VFS_FHTOHINT(). Release code & demos to get feedback from the community & sysadmins. May 28 – June 5: Study nfsv4 implementation + start pondering about handling multiple audit records in a single kernel thread. June 6 – June 13: Design a solution for this problem(rough patch). Request assistance from mentor. June 14 – June 25: Provide audit support for new NFS server implementation, at least for NFS v2&3 rpcs. June 26 – July 12: Provide support for NFSv4 compound rpcs, thorough testing. July 13 – July 23: By this time, I will have some feedback on my proposed solution for the simultaneous handling of multiple td_ars in a kthread. Write some code and see if it applies cleanly to other parts of the kernel that use the audit framework (most notably the sys/calls), without breaking anything. July 24 – August 16: Remaining tasks: Introduce new token types to bsm libs & praudit - write/update man pages - make praudit match NFS error codes to NFS error messages - revisit NFSv4 operation "OPEN" - ??? Final shipping to Google. //EOF// ==== Demo ==== Following, are two audit logs from my own NFS server. The experimental NFS server found in sys/fs/nfsserver was used to produce these logs. The protocols used are NFSv3 and NFSv4. To produce these logs, I executed a shell script that triggers most of the NFS RPCs; it can be found {{soc2010efstratioskaratzas/test.sh?linkonly|here}}. The actual logs can be found {{soc2010efstratioskaratzas/nfsv3_log.txt?linkonly|here(NFS v3)}} and {{soc2010efstratioskaratzas/nfsv4_log.txt?linkonly|here(NFS v4)}}. == Note == There is a new argument for praudit(1), 'c' so that foreign credentials are not matched against local userbase and are shown in raw numeric form; alternatively, argument 'r' can also be used. Argument '-c' was used to produce these logs. The NFS v4 log is much larger because the protocol wraps simple operations into a bunch of multiple RPCs (compound RPCs); I've stripped non NFS relevant Audit Events so the logs should not prove too hard to read. ==== Code Sample ==== This is a diff file that was procuded at the end of gsoc; last update: August 30 2010 {{soc2010efstratioskaratzas/gpf_audit.diff?linkonly|gpf_audit.diff}} == Note == There are some files missing from the diff file; 3 new man pages that were introduced while working no this project: vn_fullpath_nocache(9), VOP_GEPARENT(9), VFS_FHHINT(9) ==== FreeBSD Dev Summit 2010 (Karlsruhe) Presentation ==== {{201010DevSummit/2010DevSummitAuditNFS.pdf?linkonly|slides}} Feel free to share any thoughts! ==== References ==== * [[http://www.trustedbsd.org/docs.html|Audit Documentation]] * [[http://www.commoncriteriaportal.org/files/ppfiles/capp.pdf|CC/CAPP specification]] * The Design and Implementation of the %%FreeBSD%% Operating System, by %%McKusick%% & Neville-Neil * [[http://www.ietf.org/rfc/rfc1094.txt|NFSv2 RFC]] * [[http://www.ietf.org/rfc/rfc1813.txt|NFSv3 RFC]] * [[http://www.ietf.org/rfc/rfc3530.txt|NFSv4 RFC]] * [[http://hub.opensolaris.org/bin/download/Community+Group+zfs/docs/ondiskformat0822.pdf|ZFS On-Disk Specification]]