|
Message-ID: <CAFUG7Ce1t2upf4ZnOhSksjJQ_36WCF_wS8M=rcaY+DpBBKpWqA@mail.gmail.com> Date: Mon, 29 May 2017 02:04:10 -0400 From: Boris Lukashev <blukashev@...pervictus.com> To: Kees Cook <keescook@...gle.com> Cc: Igor Stoppa <igor.stoppa@...wei.com>, Casey Schaufler <casey@...aufler-ca.com>, Michal Hocko <mhocko@...nel.org>, Dave Hansen <dave.hansen@...el.com>, Laura Abbott <labbott@...hat.com>, Linux-MM <linux-mm@...ck.org>, "kernel-hardening@...ts.openwall.com" <kernel-hardening@...ts.openwall.com>, LKML <linux-kernel@...r.kernel.org>, Daniel Micay <danielmicay@...il.com>, Greg KH <gregkh@...uxfoundation.org>, James Morris <james.l.morris@...cle.com>, Stephen Smalley <sds@...ho.nsa.gov> Subject: Re: Re: [PATCH 1/1] Sealable memory support If i understand the current direction for smalloc, its to implement it without the ability to "unseal," which has implications on how LSM implementations and other users of these dynamic allocations handle things. If its implemented without a writeable interface for modules which need it, then switched to a CoW (or other controlled/isolated/hardened) mechanism for creating writeable segments in dynamic allocations, that would create another set of breaking changes for the consumers adapting to the first set. In the spirit of adopting things faster/smoother, maybe it makes sense to permit the smalloc re-writing method suggested in the first implementation; with an API which consumers can later use for a more secure approach that reduces the attack surface without breaking consumer interfaces (or internal semantics). A sysctl affecting the behavior as ro-only or ro-and-sometimes-rw would give users the flexibility to tune their environment per their needs, which should also reduce potential conflict/complaints. On Sun, May 28, 2017 at 5:32 PM, Kees Cook <keescook@...gle.com> wrote: > On Sun, May 28, 2017 at 11:56 AM, Boris Lukashev > <blukashev@...pervictus.com> wrote: >> So what about a middle ground where CoW semantics are used to enforce >> the state of these allocations as RO, but provide a strictly >> controlled pathway to read the RO data, copy and modify it, then write >> and seal into a new allocation. Successful return from this process >> should permit the page table to change the pointer to where the object >> now resides, and initiate freeing of the original memory so long as a >> refcount is kept for accesses. That way, sealable memory is sealed, >> and any consumers reading it will be using the original ptr to the >> original smalloc region. Attackers who do manage to change the > > This could be another way to do it, yeah, and it helps that smalloc() > is built on vmalloc(). It'd require some careful design, but it could > be a way forward after this initial sealed-after-init version goes in. > >> Lastly, my meager understanding is that PAX set the entire kernel as >> RO, and implemented writeable access via pax_open/close. How were they >> fighting against race conditions, and what is the benefit of specific >> regions being allocated this way as opposed to the RO-all-the-things >> approach which makes writes a specialized set of operations? > > My understanding is that PaX's KERNEXEC with the constification plugin > moves a substantial portion of the kernel's .data section > (effectively) into the .rodata section. It's not the "entire" kernel. > (Well, depending on how you count. The .text section is already > read-only upstream.) PaX, as far as I know, provided no dynamic memory > allocation protections, like smalloc() would provide. > > -Kees > > -- > Kees Cook > Pixel Security -- Boris Lukashev Systems Architect Semper Victus
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.