Re: module's use of security_ops

From: jmjonesat_private
Date: Fri Jun 08 2001 - 07:57:48 PDT

  • Next message: jmjonesat_private: "Re: module's use of security_ops"

    On Fri, 8 Jun 2001, Stephen Smalley wrote:
    
    > 
    > On Thu, 7 Jun 2001, Chris Wright wrote:
    > 
    > > capable(), compute_creds(), permission()
    > > 
    > > These are examples of security related functions that module code
    > > calls.  Are there others?  
    > 
    > inode_change_ok is called by some of the file system implementations.
    > However, I think that it is only called by the filesystem-specific inode
    > setattr routines, and since our LSM setattr hook is called by
    > notify_change, it doesn't appear that this is an issue for us
    > (unless we want to move the base logic out of the kernel,
    > in which case we need an inode_change_ok hook).
    > 
    > > To date, the symbol is not exported to modules to obscure the location
    > > of the struct.  This discourages (does not disable) direct manipulation
    > > of the struct (i.e. don't hack at it, and use register security for
    > > proper access to it), but also discourages module's from being able to
    > > use the struct.  Thoughts?
    > 
    > I don't see any strong reason to not export the struct, and
    > it does seem preferable to export the entire struct rather than
    > just certain hooks that are currently needed by LKMs.
    > 
    > > Also, since vfs_permission() is exported, and can be called without
    > > calls to permission() (like in fs/nfs/dir.c) should we add a security
    > > hook to vfs_permission?
    > 
    > I don't think so.  NFS defines its own inode permission routine,
    > and that routine calls vfs_permission.  But our permission hook
    > is always called by the top-level permission function, so
    > we don't need additional checking in vfs_permission.  Again,
    > if we wanted to move the vfs_permission logic out of the kernel,
    > we would need such a hook, but otherwise not.
    > 
    > Speaking of which, we need to come to a consensus about
    > the direction for the hooks so we can make progress.  
    > After some further examination of the existing kernel code,
    > I'm still inclined toward my original proposal.  Trying to
    > move the existing kernel access control logic out of the
    > base kernel seems like a quagmire we're better off avoiding.
    > 
    
    While I think this has been "defacto" agreed, let me make my 
    final vote...
    
    Apply Mr. Smalley's suggestion (it's the "optimum" that has been
    proposed, to date, I think), but with the privisos
    
    1) where there is no logic accessable a kern_retval that 
       reflects "what the kernel would have done, 
       Pass a "kern_retval" item that reflects this.  Things could 
       change in the future with kernel-side / LSM API side 
       co-evolution and we NEED to know on the LSM API side.
       Perhaps, to be explicit, #define -ENOKERNOPINION or something or
       a global variable KERNELSECURITY in the "manner" of errno without
       passing anything?  Tighten up where and what, somehow.
    
    2) *Always* return, even if it's "no opinion", a kern_retval.
    
    3) NEVER include a LSM function call explicitly in compound logic in 
       the core-kernel.  This opens tooo, too many "opportunities 
       for mistakes".  If we gotta pay for the kernel's 
       decision, let's make it *explicit*.  
    
    3) If we can't clearly place a single "compound authoritative" function,
       separate it into two functions.
    
    4) Wrap the functions in security_ops that employ this 
       method, somehow, so we COULD add other subinterfaces
       in the future, example
    
       security_ops->capablility : to contain all the capability
                                   support "rip outs" in the most 
                                   efficient way
    
       security_ops->combined:     (or ->smalley or ->single or 
                                   ->authoritative or SOMETHING)
                                   to isolate this strategy.  A 
                                   "good" name escapes me now. 
     
      I feel it necessary to include the possibility of expansion into 
      another strategy into the structure without breaking modules in the
      future, with a clear-cut isolation of strategies.
    
    
    5)  For GODESSES'S SAKE, protect security_ops SOMEHOW, or this API is only 
        e pluribus unum and vulnerable to "total replacement" from ANYWHERE
        in kernel space. Provide a "non-functional copy", provide a module
        check for revelation, SOMETHING.  The idea of a global export just 
        seems to introduce too many new vulnerabilities.
     
    
    > --
    > Stephen D. Smalley, NAI Labs
    > ssmalleyat_private
    > 
    
    Sincerely,
    J. Melvin Jones
    
    |>------------------------------------------------------
    ||  J. MELVIN JONES            jmjonesat_private 
    |>------------------------------------------------------
    ||  Microcomputer Systems Consultant  
    ||  Software Developer
    ||  Web Site Design, Hosting, and Administration
    ||  Network and Systems Administration
    |>------------------------------------------------------
    ||  http://www.jmjones.com/
    |>------------------------------------------------------
    
    
    
    
    _______________________________________________
    linux-security-module mailing list
    linux-security-moduleat_private
    http://mail.wirex.com/mailman/listinfo/linux-security-module
    



    This archive was generated by hypermail 2b30 : Fri Jun 08 2001 - 07:58:41 PDT