From: "Xing, Cedric" <email@example.com> To: Casey Schaufler <firstname.lastname@example.org>, "email@example.com" <firstname.lastname@example.org>, "email@example.com" <firstname.lastname@example.org>, "email@example.com" <firstname.lastname@example.org> Cc: "Schaufler, Casey" <email@example.com>, "firstname.lastname@example.org" <email@example.com>, "firstname.lastname@example.org" <email@example.com>, "firstname.lastname@example.org" <email@example.com>, "firstname.lastname@example.org" <email@example.com>, "firstname.lastname@example.org" <email@example.com>, "firstname.lastname@example.org" <email@example.com>, "Christopherson, Sean J" <firstname.lastname@example.org> Subject: RE: [RFC PATCH v2 1/3] x86/sgx: Add SGX specific LSM hooks Date: Fri, 28 Jun 2019 22:29:41 +0000 Message-ID: <960B34DE67B9E140824F1DCDEC400C0F6551C4A1@ORSMSX116.amr.corp.intel.com> (raw) In-Reply-To: <email@example.com> > From: Casey Schaufler [mailto:firstname.lastname@example.org] > Sent: Friday, June 28, 2019 10:22 AM > > > > And what's the concern here if it becomes part of the LSM > infrastructure. > > The LSM infrastructure provides a framework for hooks > and allocation of blobs. That's it. It's a layer for > connecting system features like VFS, IPC and the IP stack > to the security modules. It does not implement any policy > of it's own. We are not going to implement SGX or any other > mechanism within the LSM infrastructure. EMA doesn't force/implement any policy either. It just supplements VMA. > > >>> It is going to be shared among all LSMs that would like to track > >> enclave pages and their origins. > >> > >> That's true for InfiniBand, tun and sctp as well. Look at their > >> implementations. > > As far as I can tell, InfiniBand, tun and sctp, all of them seemed > used inside SELinux only. > > So? So they are NOT shared among LSMs, which are different than EMA. > > > If you had a chance to look at v1 of my series, I started by burying > everything inside SELinux too. But Stephen pointed out such tracking > would be needed by all LSMs so code duplication might be a concern. Thus > I responded by moving it into LSM infrastructure. > > What you need to do is move all the lsm_ema code into its own > place (which could be security/enclave). Manage your internal > data as you like. LSMs (e.g. SELinux) can call your APIs if > needed. If the LSMs need to store SGX information with the file > structure they need to include that in the space they ask for in > the file blob. I thought subdirectories were for LSM modules. EMA is more like auditing code, which has a header in include/linux/ and an implementation in security/. Is that right? > > > >>> And they could be extended to store more information as deemed > >> appropriate by the LSM module. > >> > >> Which is what blobs are for, but that does not appear to be how > >> you're using either the file blob or your new ema blob. > > A lsm_ema_map pointer is stored in file->f_security. > > That's up to the individual security module to decide. That's doable. The drawback is, if there are N LSM modules active, then the same information will be duplicated N times. Will that be a problem? > > > Each lsm_ema_map contains a list of lsm_ema structures. In my last > patch, SELinux stores a ema_security_struct with every ema, by setting > selinux_blob_sizes.lbs_ema_data to sizeof(ema_security_struct). > > You are managing the ema map lists. You don't need the LSM > infrastructure to do that. > > > ema_security_struct is initialized in selinux_enclave_load(), and > checked in enclave_mprotect(), which is a subroutine of > selinux_file_mprotect(). BTW, it is alloced/freed automatically by LSM > infrastructure in security_enclave_load()/security_file_free(). > > Do you mean security_enclave_load()/security_enclave_free() ? > There is no way you can possibly have sane behavior if you're > allocation and free aren't tied to the same blob. There's no security_*enclave*_free(). lsm_ema_map is allocated only for enclaves. But LSM doesn't know which file is an enclave, so the allocation is deferred until the first security_enclave_load(). security_file_free() frees the map if it isn't NULL. > > >>> The last patch of this series shows how to extend EMA inside > SELinux. > >> I don't see (but I admit the code doesn't make a lot of sense to me) > >> anything you couldn't do in the SELinux code by adding data to the > >> file blob. The data you're adding to the LSM infrastructure doesn't > >> belong there, and it doesn't need to be there. > > You are correct. My v1 did it inside SELinux. > > > > The key question I think is whether only SELinux needs it, or all LSMs > need it. Stephen thought it was the latter (and I agree with him) so I > moved it into the LSM infrastructure to be shared, just like the > auditing code. > > You are both right that it doesn't belong in the SELinux code. > It also doesn't belong as part of the LSM infrastructure. Then what is your suggestion? Is the code in security_enclave_load()/security_file_free() that bothers you? Because you think they shouldn't do anything more than just a single line of call_int/void_hooks()? > > >>>> Not acceptable for the LSM infrastructure. They > >>>> are inconsistent with the way data is used there. > >>> I'm not sure I understand this comment. > >> It means that your definition and use of the lsm_ema_blob > >> does not match the way other blobs are managed and used. > >> The LSM infrastructure uses these entries in a very particular > >> way, and you're trying to use it differently. Your might be > >> able to change the rest of the enclave system to use it > >> correctly, or you might be able to find a different place > >> for it. > > I'm still not sure why you think this (lbs_ema_data) is inconsistent > with other blobs. > > > > Same as all other blobs, an LSM requests it by storing the needed size > in it, and is assigned an offset, and the buffer is allocated/freed by > the infrastructure. Am I missing anything? > > Yes. Aside from allocation and deletion the infrastructure does > nothing with the blobs. The blobs are used only by the security > modules. All other data is maintained and used elsewhere. SGX > specific data needs to me maintained and managed elsewhere. > > >>> As I stated in the cover letter, the primary question is how to > >> prevent SGX from being abused as a backdoor to make executable pages > >> that would otherwise not be executable without SGX. Any LSM module > >> unaware of that would leave that "hole" open. So tracking enclave > pages > >> will become a common task for all LSMs that care page protections, > and > >> that's why I place it inside LSM infrastructure. > >> > >> Page protections are an important part of many security features, > >> but that's beside the point. The LSM system provides mechanism for > >> providing additional restrictions to existing security mechanisms. > >> First, you create the security mechanism (e.g. enclaves) then you > >> add LSM hooks so that security modules (e.g. SELinux) can apply > >> their own policies in addition. In support of this, the LSM blob > >> mechanism allows security modules to maintain their own information > >> about the system components (e.g. file, inode, cred, task) they > >> care about. The LSM infrastructure does not itself provide or > >> support security data or policy. That's strictly for the modules > >> to do. > > Agreed! > > > > EMA doesn't dictate policies for sure. Is it considered "security > data"? I'm not sure the definition of "security data" here. It does > store some "data", something that multiple LSM modules would need to > duplicate if not pulled into a common place. It is meant to be a > "helper" data structure, just like the auditing code. > > Good example. You'll see that there is no audit code in the > LSM infrastructure. None. No audit data, either. It's all taken > care of in the audit system. Did you mean security/security.c didn't call into any audit functions? lsm_audit.c is located in security/ and its header in include/linux/ but you don't have a problem with them. Am I right? IIUC, you want me to pack whatever inside security_enclave_load()/security_file_free() into some APIs to be called by individual LSM modules. But if you can pay a bit more attention to the code, an EMA can be inserted to the map only after *all* LSM modules have approved it. So if it is spread into individual LSMs and if there are multiple active LSMs, there could be inconsistence among LSMs if they each maintains its own map and makes different decisions on the same EMA at enclave_load(). I'm not saying that's unresolvable but definitely more error prone, besides wasting memory. Or do you have any practical suggestions?
next prev parent reply index Thread overview: 156+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-19 22:23 [RFC PATCH v4 00/12] security: x86/sgx: SGX vs. LSM Sean Christopherson 2019-06-19 22:23 ` [RFC PATCH v4 01/12] x86/sgx: Use mmu_notifier.release() instead of per-vma refcounting Sean Christopherson 2019-06-20 21:03 ` Jarkko Sakkinen 2019-07-08 14:57 ` Sean Christopherson 2019-07-09 16:18 ` Jarkko Sakkinen 2019-06-19 22:23 ` [RFC PATCH v4 02/12] x86/sgx: Do not naturally align MAP_FIXED address Sean Christopherson 2019-06-20 21:09 ` Jarkko Sakkinen 2019-06-20 22:09 ` Jarkko Sakkinen 2019-06-19 22:23 ` [RFC PATCH v4 03/12] selftests: x86/sgx: Mark the enclave loader as not needing an exec stack Sean Christopherson 2019-06-20 21:17 ` Jarkko Sakkinen 2019-06-19 22:23 ` [RFC PATCH v4 04/12] x86/sgx: Require userspace to define enclave pages' protection bits Sean Christopherson 2019-06-21 1:07 ` Jarkko Sakkinen 2019-06-21 1:16 ` Jarkko Sakkinen 2019-06-21 16:42 ` Xing, Cedric 2019-07-08 16:34 ` Sean Christopherson 2019-07-08 17:29 ` Xing, Cedric 2019-07-01 18:00 ` Andy Lutomirski 2019-07-01 19:22 ` Xing, Cedric 2019-06-19 22:23 ` [RFC PATCH v4 05/12] x86/sgx: Enforce noexec filesystem restriction for enclaves Sean Christopherson 2019-06-21 1:26 ` Jarkko Sakkinen 2019-07-07 19:03 ` Sean Christopherson 2019-06-19 22:23 ` [RFC PATCH v4 06/12] mm: Introduce vm_ops->may_mprotect() Sean Christopherson 2019-06-21 1:35 ` Jarkko Sakkinen 2019-06-19 22:23 ` [RFC PATCH v4 07/12] LSM: x86/sgx: Introduce ->enclave_map() hook for Intel SGX Sean Christopherson 2019-06-21 2:28 ` Jarkko Sakkinen 2019-06-21 16:54 ` Xing, Cedric 2019-06-25 20:48 ` Stephen Smalley 2019-06-27 20:29 ` Xing, Cedric 2019-07-07 18:01 ` Sean Christopherson 2019-06-19 22:23 ` [RFC PATCH v4 08/12] security/selinux: Require SGX_MAPWX to map enclave page WX Sean Christopherson 2019-06-21 17:09 ` Xing, Cedric 2019-06-25 21:05 ` Stephen Smalley 2019-06-27 20:26 ` Xing, Cedric 2019-06-25 20:19 ` Stephen Smalley 2019-06-26 12:49 ` Dr. Greg 2019-06-19 22:23 ` [RFC PATCH v4 09/12] LSM: x86/sgx: Introduce ->enclave_load() hook for Intel SGX Sean Christopherson 2019-06-21 17:05 ` Xing, Cedric 2019-06-25 21:01 ` Stephen Smalley 2019-06-25 21:49 ` Stephen Smalley 2019-06-27 19:38 ` Xing, Cedric 2019-06-19 22:23 ` [RFC PATCH v4 10/12] security/selinux: Add enclave_load() implementation Sean Christopherson 2019-06-21 21:22 ` Xing, Cedric 2019-06-25 21:09 ` Stephen Smalley 2019-06-27 20:19 ` Xing, Cedric 2019-06-28 16:16 ` Stephen Smalley 2019-06-28 21:20 ` Xing, Cedric 2019-06-29 1:15 ` Stephen Smalley 2019-07-01 18:14 ` Xing, Cedric 2019-06-29 23:41 ` Andy Lutomirski 2019-07-01 17:46 ` Xing, Cedric 2019-07-01 17:53 ` Andy Lutomirski 2019-07-01 18:54 ` Xing, Cedric 2019-07-01 19:03 ` Xing, Cedric 2019-07-01 19:32 ` Andy Lutomirski 2019-07-01 20:03 ` Xing, Cedric 2019-07-07 18:46 ` Sean Christopherson 2019-06-25 20:34 ` Stephen Smalley 2019-06-19 22:24 ` [RFC PATCH v4 11/12] security/apparmor: " Sean Christopherson 2019-06-19 22:24 ` [RFC PATCH v4 12/12] LSM: x86/sgx: Show line of sight to LSM support SGX2's EAUG Sean Christopherson 2019-06-21 17:18 ` Xing, Cedric 2019-07-08 14:34 ` Sean Christopherson 2019-06-21 1:32 ` [RFC PATCH v4 00/12] security: x86/sgx: SGX vs. LSM Jarkko Sakkinen 2019-06-27 18:56 ` [RFC PATCH v2 0/3] security/x86/sgx: SGX specific LSM hooks Cedric Xing 2019-07-03 23:16 ` Jarkko Sakkinen 2019-07-03 23:22 ` Jarkko Sakkinen 2019-07-03 23:23 ` Jarkko Sakkinen 2019-07-06 5:04 ` Xing, Cedric 2019-07-08 14:46 ` Jarkko Sakkinen 2019-07-07 23:41 ` [RFC PATCH v3 0/4] " Cedric Xing 2019-07-08 15:55 ` Sean Christopherson 2019-07-08 17:49 ` Xing, Cedric 2019-07-08 18:49 ` Sean Christopherson 2019-07-08 22:26 ` Xing, Cedric 2019-07-07 23:41 ` [RFC PATCH v3 1/4] x86/sgx: Add " Cedric Xing 2019-07-07 23:41 ` [RFC PATCH v3 2/4] x86/64: Call LSM hooks from SGX subsystem/module Cedric Xing 2019-07-09 1:03 ` Sean Christopherson 2019-07-07 23:41 ` [RFC PATCH v3 3/4] X86/sgx: Introduce EMA as a new LSM module Cedric Xing 2019-07-08 16:26 ` Casey Schaufler 2019-07-08 17:16 ` Xing, Cedric 2019-07-08 23:53 ` Casey Schaufler 2019-07-09 22:13 ` Xing, Cedric 2019-07-10 0:10 ` Casey Schaufler 2019-07-10 0:55 ` Xing, Cedric 2019-07-10 21:14 ` Casey Schaufler 2019-07-11 13:51 ` Stephen Smalley 2019-07-11 15:12 ` Sean Christopherson 2019-07-11 16:11 ` Stephen Smalley 2019-07-11 16:25 ` Sean Christopherson 2019-07-11 16:32 ` Stephen Smalley 2019-07-11 23:41 ` Xing, Cedric 2019-07-07 23:41 ` [RFC PATCH v3 4/4] x86/sgx: Implement SGX specific hooks in SELinux Cedric Xing 2019-07-09 1:33 ` Sean Christopherson 2019-07-09 21:26 ` Xing, Cedric 2019-07-10 15:49 ` Sean Christopherson 2019-07-10 16:08 ` Jethro Beekman 2019-07-10 18:16 ` Xing, Cedric 2019-07-10 17:54 ` Xing, Cedric 2019-06-27 18:56 ` [RFC PATCH v2 1/3] x86/sgx: Add SGX specific LSM hooks Cedric Xing 2019-06-27 22:06 ` Casey Schaufler 2019-06-27 22:52 ` Xing, Cedric 2019-06-27 23:37 ` Casey Schaufler 2019-06-28 0:47 ` Xing, Cedric 2019-06-28 17:22 ` Casey Schaufler 2019-06-28 22:29 ` Xing, Cedric [this message] 2019-06-29 1:37 ` Stephen Smalley 2019-06-29 21:35 ` Casey Schaufler 2019-07-01 17:57 ` Xing, Cedric 2019-07-01 19:53 ` Casey Schaufler 2019-07-01 21:45 ` Xing, Cedric 2019-07-01 23:11 ` Casey Schaufler 2019-07-02 7:42 ` Xing, Cedric 2019-07-02 15:44 ` Casey Schaufler 2019-07-03 9:46 ` Dr. Greg 2019-07-03 15:32 ` Casey Schaufler 2019-07-07 13:30 ` Dr. Greg 2019-07-09 0:02 ` Casey Schaufler 2019-07-09 1:52 ` Sean Christopherson 2019-07-09 21:16 ` Xing, Cedric 2019-07-11 10:22 ` Dr. Greg 2019-07-15 22:23 ` Andy Lutomirski 2019-06-28 16:37 ` Stephen Smalley 2019-06-28 21:53 ` Xing, Cedric 2019-06-29 1:22 ` Stephen Smalley 2019-07-01 18:02 ` Xing, Cedric 2019-06-29 23:46 ` Andy Lutomirski 2019-07-01 17:11 ` Xing, Cedric 2019-07-01 17:58 ` Andy Lutomirski 2019-07-01 18:31 ` Xing, Cedric 2019-07-01 19:36 ` Andy Lutomirski 2019-07-01 19:56 ` Xing, Cedric 2019-07-02 2:29 ` Andy Lutomirski 2019-07-02 6:35 ` Xing, Cedric 2019-06-27 18:56 ` [RFC PATCH v2 2/3] x86/sgx: Call LSM hooks from SGX subsystem/module Cedric Xing 2019-06-27 18:56 ` [RFC PATCH v2 3/3] x86/sgx: Implement SGX specific hooks in SELinux Cedric Xing 2019-07-05 16:05 ` [RFC PATCH v4 00/12] security: x86/sgx: SGX vs. LSM Jarkko Sakkinen 2019-07-08 17:29 ` Sean Christopherson 2019-07-08 17:33 ` Xing, Cedric 2019-07-09 16:22 ` Jarkko Sakkinen 2019-07-09 17:09 ` Sean Christopherson 2019-07-09 20:41 ` Xing, Cedric 2019-07-09 22:25 ` Sean Christopherson 2019-07-09 23:11 ` Xing, Cedric 2019-07-10 16:57 ` Sean Christopherson 2019-07-10 20:19 ` Jarkko Sakkinen 2019-07-10 20:31 ` Sean Christopherson 2019-07-11 9:06 ` Jarkko Sakkinen 2019-07-10 22:00 ` Jarkko Sakkinen 2019-07-10 22:16 ` Jarkko Sakkinen 2019-07-10 23:16 ` Xing, Cedric 2019-07-11 9:26 ` Jarkko Sakkinen 2019-07-11 14:32 ` Stephen Smalley 2019-07-11 17:51 ` Jarkko Sakkinen 2019-07-12 0:08 ` Xing, Cedric 2019-07-10 1:28 ` Dr. Greg 2019-07-10 2:04 ` Xing, Cedric 2019-07-10 3:21 ` Jethro Beekman
Reply instructions: You may reply publically 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=960B34DE67B9E140824F1DCDEC400C0F6551C4A1@ORSMSX116.amr.corp.intel.com \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.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
Linux-Sgx Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-sgx/0 linux-sgx/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-sgx linux-sgx/ https://lore.kernel.org/linux-sgx \ firstname.lastname@example.org public-inbox-index linux-sgx Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-sgx AGPL code for this site: git clone https://public-inbox.org/public-inbox.git