summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/veriexec.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/veriexec.9')
-rw-r--r--static/netbsd/man9/veriexec.9346
1 files changed, 346 insertions, 0 deletions
diff --git a/static/netbsd/man9/veriexec.9 b/static/netbsd/man9/veriexec.9
new file mode 100644
index 00000000..15ebddbd
--- /dev/null
+++ b/static/netbsd/man9/veriexec.9
@@ -0,0 +1,346 @@
+.\" $NetBSD: veriexec.9,v 1.29 2015/12/09 18:25:32 maxv Exp $
+.\"
+.\" Copyright 2006 Elad Efrat <elad@NetBSD.org>
+.\" Copyright 2006 Brett Lymn <blymn@NetBSD.org>
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Brett Lymn and Elad Efrat
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Neither the name of The NetBSD Foundation nor the names of its
+.\" contributors may be used to endorse or promote products derived
+.\" from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd December 9, 2015
+.Dt VERIEXEC 9
+.Os
+.Sh NAME
+.Nm veriexec
+.Nd in-kernel file integrity subsystem KPI
+.Sh SYNOPSIS
+.In sys/verified_exec.h
+.Ft void
+.Fn veriexec_init "void"
+.Ft bool
+.Fn veriexec_lookup "struct vnode *vp"
+.Ft int
+.Fn veriexec_verify "struct lwp *l" "struct vnode *vp" \
+"const u_char *name" "int flag" "bool *found"
+.Ft void
+.Fn veriexec_purge "struct vnode *vp"
+.Ft int
+.Fn veriexec_fpops_add "const char *fp_type" "size_t hash_len" \
+"size_t ctx_size" "veriexec_fpop_init_t init" "veriexec_fpop_update_t update" \
+"veriexec_fpop_final_t final"
+.Ft int
+.Fn veriexec_file_add "struct lwp *l" "prop_dictionary_t dict"
+.Ft int
+.Fn veriexec_file_delete "struct lwp *l" "struct vnode *vp"
+.Ft int
+.Fn veriexec_table_delete "struct lwp *l" "struct mount *mp"
+.Ft int
+.Fn veriexec_flush "struct lwp *l"
+.Ft int
+.Fn veriexec_openchk "struct lwp *l" "struct vnode *vp" \
+"const char *path" "int fmode"
+.Ft int
+.Fn veriexec_renamechk "struct lwp *l" "struct vnode *fromvp" \
+"const char *fromname" "struct vnode *tovp" "const char *toname"
+.Ft int
+.Fn veriexec_removechk "struct lwp *l" "struct vnode *vp" \
+"const char *name"
+.Ft int
+.Fn veriexec_unmountchk "struct mount *mp"
+.Ft int
+.Fn veriexec_convert "struct vnode *vp" "prop_dictionary_t rdict"
+.Ft int
+.Fn veriexec_dump "struct lwp *l" "prop_array_t rarray"
+.Sh DESCRIPTION
+.Nm
+is the
+.Tn KPI
+for
+.Em Veriexec ,
+the
+.Nx
+in-kernel file integrity subsystem.
+It is responsible for managing the supported hashing algorithms, fingerprint
+calculation and comparison, file monitoring tables, and relevant hooks to
+enforce the
+.Em Veriexec
+policy.
+.Sh FUNCTIONS
+.Ss Core Routines
+.Bl -tag -width compact
+.It Fn veriexec_init "void"
+Initialize the
+.Em Veriexec
+subsystem.
+Called only once during system startup.
+.It Fn veriexec_lookup "vp"
+Check if
+.Ar vp
+is monitored by
+.Em Veriexec .
+Returns
+.Dv true
+if it is, or
+.Dv false
+otherwise.
+.It Fn veriexec_verify "l" "vp" "name" "flag" "found"
+Verifies the digital fingerprint of
+.Ar vp .
+.Ar name
+is the filename, and
+.Ar flag
+is the access flag.
+The access flag can be one of:
+.Bl -tag -width VERIEXEC_INDIRECT
+.It Dv VERIEXEC_DIRECT
+The file was executed directly via
+.Xr execve 2 .
+.It Dv VERIEXEC_INDIRECT
+The file was executed indirectly, either as an interpreter for a script or
+mapped to an executable memory region.
+.It Dv VERIEXEC_FILE
+The file was opened for reading/writing.
+.El
+.Pp
+.Ar l
+is the LWP for the request context.
+.Pp
+An optional argument,
+.Ar found ,
+is a pointer to a boolean indicating whether an entry for the file was found
+in the
+.Em Veriexec
+tables.
+.It Fn veriexec_purge "vp"
+Purge the file entry for
+.Ar vp .
+This invalidates the fingerprint so it will be evaluated next time the file
+is accessed.
+.\" veriexec_page_verify() intentionally not documented.
+.El
+.Ss Fingerprint Related Routines
+.Bl -tag -width compact
+.It Fn veriexec_fpops_add "fp_type" "hash_len" "ctx_size" \
+"init" "update" "final"
+Add support for fingerprinting algorithm
+.Ar fp_type
+with binary hash length
+.Ar hash_len
+and calculation context size
+.Ar ctx_size
+to
+.Em Veriexec .
+.Ar init ,
+.Ar update ,
+and
+.Ar final
+are the routines used to initialize, update, and finalize a calculation
+context.
+.El
+.Ss Table Management Routines
+.Bl -tag -width compact
+.It Fn veriexec_file_add "l" "dict"
+Add a
+.Em Veriexec
+entry for the file described by
+.Ar dict .
+.Pp
+.Ar dict
+is expected to have the following:
+.Bl -column entry-type string "entry type flags (see veriexec(4))"
+.It Sy Name Type Purpose
+.It file string filename
+.It entry-type uint8 entry type flags ( see Xr veriexec 4 )
+.It fp-type string fingerprint hashing algorithm
+.It fp data the fingerprint
+.El
+.It Fn veriexec_file_delete "l" "vp"
+Remove
+.Em Veriexec
+entry for
+.Ar vp .
+.It Fn veriexec_table_delete "l" "mp"
+Remove
+.Em Veriexec
+table for mount-point
+.Ar mp .
+.It Fn veriexec_flush "l"
+Delete all
+.Em Veriexec
+tables.
+.El
+.Ss Hook Handlers
+.Bl -tag -width compact
+.It Fn veriexec_openchk "l" "vp" "path" "fmode"
+Called when a file is opened.
+.Pp
+.Ar l
+is the LWP opening the file,
+.Ar vp
+is a vnode for the file being opened as returned from
+.Xr namei 9 .
+If
+.Dv NULL ,
+the file is being created.
+.Ar path
+is the pathname for the file (not necessarily a full path), and
+.Ar fmode
+are the mode bits with which the file was opened.
+.It Fn veriexec_renamechk "l" "fromvp" "fromname" "tovp" "toname"
+Called when a file is renamed.
+.Pp
+.Ar fromvp
+and
+.Ar fromname
+are the vnode and filename of the file being renamed.
+.Ar tovp
+and
+.Ar toname
+are the vnode and filename of the target file.
+.Ar l
+is the LWP renaming the file.
+.Pp
+Depending on the strict level,
+.Nm
+will either track changes appropriately or prevent the rename.
+.It Fn veriexec_removechk "l" "vp" "name"
+Called when a file is removed.
+.Pp
+.Ar vp
+is the vnode of the file being removed, and
+.Ar name
+is the filename.
+.Ar l
+is the LWP removing the file,
+.Pp
+Depending on the strict level,
+.Nm
+will either clean-up after the file or prevent its removal.
+.It Fn veriexec_unmountchk "mp"
+Checks if the current strict level allows
+.Ar mp
+to be unmounted.
+.El
+.Ss Miscellaneous Routines
+.Bl -tag -width compact
+.It Fn veriexec_convert "vp" "rdict"
+Convert
+.Em Veriexec
+entry for
+.Ar vp
+to human-readable
+.Xr proplib 3
+dictionary,
+.Ar rdict ,
+with the following elements:
+.Bl -column entryxtype string
+.It Sy Name Type Purpose
+.It entry-type uint8 entry type flags ( see Xr veriexec 4 )
+.It status uint8 entry status ( see below )
+.It fp-type string fingerprint hashing algorithm
+.It fp data the fingerprint
+.El
+.Pp
+The
+.Dq status
+can be one of the following:
+.Bl -column fingerprintxmismatch effect
+.It Sy Status Meaning
+.It FINGERPRINT_NOTEVAL not evaluated
+.It FINGERPRINT_VALID fingerprint match
+.It FINGERPRINT_MISMATCH fingerprint mismatch
+.El
+.Pp
+If no entry was found,
+.Er ENOENT
+is returned.
+Otherwise, zero.
+.It Fn veriexec_dump "l" "rarray"
+Fill
+.Ar rarray
+with entries for all files monitored by
+.Em Veriexec
+that have a filename associated with them.
+.Pp
+Each element in
+.Ar rarray
+is a dictionary with the same elements as filled by
+.Fn veriexec_convert ,
+with an additional field,
+.Dq file ,
+containing the filename.
+.El
+.Sh FILES
+.Bl -column srcxsysxkernxkernxverifiedexecxc foo
+.It Sy Path Purpose
+.It src/sys/dev/veriexec.c driver for userland communication
+.It src/sys/sys/verified_exec.h shared (userland/kernel) header file
+.It src/sys/kern/kern_veriexec.c subsystem code
+.It src/sys/kern/vfs_syscalls.c rename, remove, and unmount policies
+.It src/sys/kern/vfs_vnops.c regular file access policy
+.El
+.Sh SEE ALSO
+.Xr proplib 3 ,
+.Xr sysctl 3 ,
+.Xr veriexec 4 ,
+.Xr security 7 ,
+.Xr sysctl 8 ,
+.Xr veriexecctl 8 ,
+.Xr veriexecgen 8 ,
+.Xr fileassoc 9
+.Sh AUTHORS
+.An Brett Lymn Aq Mt blymn@NetBSD.org
+.An Elad Efrat Aq Mt elad@NetBSD.org
+.Sh CAVEATS
+There are two known issues with
+.Em Veriexec
+that should be considered when using it.
+.Ss Remote File-systems
+There is an issue providing protection for files residing on mounts from
+remote hosts.
+Because access to the file-system does not necessarily go through
+.Nm ,
+there is no way to track on-disk changes.
+While it is possible to minimize the effect by evaluating the file's
+fingerprint on each access without caching the result, a problem arises when
+a file is overwritten after its fingerprint has been evaluated and it is
+running on the local host.
+.Pp
+An attacker could potentially overwrite the file contents in the remote host
+at that point, and force a flush on the local host, resulting in paging in
+of the files from the disk, introducing malicious code into a supposedly
+safe address space.
+.Pp
+There is a fix for this issue, however due to dependencies on other work
+that is still in progress it has not been committed yet.
+.Ss Layered File-systems
+Due to VFS limitations,
+.Nm
+cannot track the same on-disk file across multiple layers of overlay
+file-systems.
+Therefore, you cannot expect changes to files on overlay mounts will be
+detected simply because the underlying mount is monitored by
+.Nm .
+.Pp
+A workaround for this issue is listing all files, under all mounts, you want
+monitored in the signature file.