public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Andrew Fish" <afish@apple.com>
To: devel@edk2.groups.io, lersek@redhat.com
Cc: "Marvin Häuser" <mhaeuser@posteo.de>,
	nathaniel.l.desimone@intel.com, "Kinney,
	Michael D" <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [GSoC proposal] Secure Image Loader
Date: Thu, 08 Apr 2021 07:13:15 -0700	[thread overview]
Message-ID: <C24A5B12-7144-4FA4-A42F-FB515620ADD3@apple.com> (raw)
In-Reply-To: <259a114d-7132-1774-d46a-8e8d9b4ff5e2@redhat.com>

At a minimum it would be nice if we had a tool that would point out the security faults with a given PE/COFF file layout. 
> On Apr 8, 2021, at 4:16 AM, Laszlo Ersek <lersek@redhat.com> wrote:
> 
> On 04/06/21 12:06, Marvin Häuser wrote:
>> Good day Nate,
>> 
>> Comments are inline.
>> 
>> Best regards,
>> Marvin
>> 
>>> On 06.04.21 11:41, Nate DeSimone wrote:
>>> Hi Marvin,
>>> 
>>> Great to meet you and welcome back! Glad you hear you are interested!
>>> Completing a formal verification of a PE/COFF loader is certainly
>>> impressive. Was this done with some sort of automated theorem proving?
>>> It would seem a rather arduous task doing an inductive proof for an
>>> algorithm like that by hand!
>> 
>> I would call it "semi-automated", a great deal of intermediate goals
>> (preconditions, postconditions, invariants, assertions, ...) were
>> required to show all interesting properties. But yes, the actual proof
>> steps are automated by common SMT solvers. It was done using the
>> AstraVer Toolset and ACSL, latter basically a language to express logic
>> statements with C-like syntax.
>> 
>>> I completely agree with you that getting a formally verified PE/COFF
>>> loader into mainline is undoubtably valuable and would pay security
>>> dividends for years to come.
>> 
>> I'm glad to hear that. :)
>> 
>>> Admittedly, this is an area of computer science that I don't have a
>>> great deal of experience with. The furthest I have gone on this topic
>>> is writing out proofs for simple algorithms on exams in my Algorithms
>>> class in college. Regardless you have a much better idea of what the
>>> current status is of the work that you and Vitaly have done. I guess
>>> my only question is do you think there is sufficient work remaining to
>>> fill the 10 week GSoC development window?
>> 
>> Please don't get me wrong, but I would be surprised if the UEFI
>> specification changes I'd like to discuss alone would be completed
>> within 10 weeks, let alone implementation throughout the codebase. While
>> I think the plain amount of code may be a bit less than say a
>> MinPlatform port, the changes are much deeper and require much more
>> caution to avoid regressions (e.g. by invalidating undocumented
>> assertions). This sadly is not a matter of just replacing the underlying
>> library implementation or "plug-in and play" at all. It furthermore
>> affects many parts of the stack, the core dispatchers used for all
>> platforms, image emulation (EBC), UEFI userland emulation (EmuPkg), and
>> so on. I was rather worried the scope is too broad time-wise, but it can
>> be narrowed/widened as you see fit really. This is one of *the* core
>> components used on millions of device, and many package maintainers need
>> to review and validate the changes, this must really be done right the
>> first try. :)
>> 
>>> Certainly we can use some of that time to perform the code reviews you
>>> mention and write up formal ECRs for the UEFI spec changes that you
>>> believe are needed.
>> 
>> I believed that was part of the workload, yes, but even without it I
>> think there is plenty to do.
>> 
>>> Thank you for sending the application and alerting us to the great
>>> work you and Vitaly have done! I'll read your paper more closely and
>>> come back with any questions I still have.
>> 
>> Thank you, I will gladly explain anything unclear. Just try to not give
>> Laszlo too many flashbacks. :)
> 
> I haven't commented yet in this thread, as I thought my stance on this
> undertaking was (or should be) obvious.
> 
> I very much welcome a replacement for the PE/COFF parser (as I consider
> its security issues unfixable in an incremental manner). From my reading
> of Marvin's and Vitaly's paper (draft), they have my full trust, and I'm
> ready to put their upcoming code to use in ArmVirtPkg and OvmfPkg with
> minimal actual code review. If fixing the pervasive security problems
> around this area cannot avoid spiraling out to other core code in edk2,
> such as dispatchers, and even to the PI / UEFI specs, so be it.
> 
> Regarding GSoC itself: as I stated elsewhere previously, I support
> edk2's participation in GSoC, while at the same time I'm not
> volunteering for mentorship at all. I'm uncertain if GSoC is the best
> framework for upstreaming such a large undertaking, but if it can help,
> we should use it as much as possible.
> 
> Thanks
> Laszlo
> 
> 
> 
> 
> 
>> 
>>> 
>>> With Best Regards,
>>> Nate
>>> 
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marvin
>>>> Häuser
>>>> Sent: Sunday, April 4, 2021 4:02 PM
>>>> To: devel@edk2.groups.io; Laszlo Ersek <lersek@redhat.com>; Andrew Fish
>>>> <afish@apple.com>; Kinney, Michael D <michael.d.kinney@intel.com>
>>>> Subject: [edk2-devel] [GSoC proposal] Secure Image Loader
>>>> 
>>>> Good day everyone,
>>>> 
>>>> I'll keep the introduction brief because I've been around for a while
>>>> now. :) I'm
>>>> Marvin Häuser, a third-year Computer Science student from TU
>>>> Kaiserslautern,
>>>> Germany. Late last year, my colleague Vitaly from ISP RAS and me
>>>> introduced a
>>>> formally verified Image Loader for UEFI usage at ISP RAS Open[1] due
>>>> to various
>>>> defects we outlined in the corresponding paper. Thank you once again
>>>> Laszlo
>>>> for your *incredible* review work on the publication part.
>>>> 
>>>> I now want to make an effort to mainline it, preferably as part of
>>>> the current
>>>> Google Summer of Code event. To be clear, my internship at ISP RAS has
>>>> concluded, and while Vitaly will be available for design discussion,
>>>> he has other
>>>> priorities at the moment and the practical part will be on me. I have
>>>> previously
>>>> submitted a proposal via the GSoC website for your review.
>>>> 
>>>> There are many things to consider:
>>>> 1. The Image Loader is a core component, and there needs to be a
>>>> significant
>>>> level of quality and security assurance.
>>>> 2. Being consumed by many packages, the proposed patch set will take
>>>> a lot of
>>>> time to review and integrate.
>>>> 3. During my initial exploration, I discovered defective PPIs and
>>>> protocols (e.g.
>>>> returning data with no corresponding size) originating from the UEFI
>>>> PI and
>>>> UEFI specifications. Changes need to be discussed, settled on, and
>>>> submitted to
>>>> the UEFI Forum.
>>>> 4. Some UEFI APIs like the Security Architecture protocols are
>>>> inconveniently
>>>> abstract, see 5.
>>>> 5. Some of the current code does not use the existing context, or
>>>> accesses it
>>>> outside of the exposed APIs. The control flow of the dispatchers may
>>>> need to be
>>>> adapted to make the context available to appropriate APIs.
>>>> 
>>>> But obviously there are not only unpleasant considerations:
>>>> A. The Image Loader is mostly formally verified, and only very few
>>>> changes will
>>>> be required from the last proven state. This gives a lot of trust in
>>>> its correctness
>>>> and safety.
>>>> B. All outlined defects that are of critical nature have been fixed
>>>> successfully.
>>>> C. The Image Loader has been tested with real-world code loading
>>>> real-world
>>>> OSes on thousands of machines in the past few months, including
>>>> rejecting
>>>> malformed images (configurable by PCD).
>>>> D. The new APIs will centralise everything PE, reducing code
>>>> duplication and
>>>> potentially unsafe operations.
>>>> E. Centralising and reduced parse duplication may improve overall boot
>>>> performance.
>>>> F. The code has been coverage-tested to not contain dead code.
>>>> G. The code has been fuzz-tested including sanitizers to not invoke
>>>> undefined
>>>> behaviour.
>>>> H. I already managed to identify a malformed image in OVMF with its help
>>>> (incorrectly reported section alignment of an Intel IPXE driver). A
>>>> fix will be
>>>> submitted shortly.
>>>> I. I plan to support PE section permissions, allowing for read-only data
>>>> segments when enabled.
>>>> 
>>>> There are likely more points for both lists, but I hope this gives a
>>>> decent
>>>> starting point for discussion. What are your thoughts on the matter?
>>>> I strongly
>>>> encourage everyone to read the section regarding defects of our
>>>> publication[2]
>>>> to better understand the motivation. The vague points above can of
>>>> course be
>>>> elaborated in due time, as you see fit.
>>>> 
>>>> Thank you for your time!
>>>> 
>>>> Best regards,
>>>> Marvin
>>>> 
>>>> 
>>>> [1] https://github.com/mhaeuser/ISPRASOpen-SecurePE
>>>> [2] https://arxiv.org/pdf/2012.05471.pdf
>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>> 
> 
> 
> 
> 
> 
> 

  reply	other threads:[~2021-04-08 14:13 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-04 23:01 [GSoC proposal] Secure Image Loader Marvin Häuser
2021-04-06  9:41 ` [edk2-devel] " Nate DeSimone
2021-04-06 10:06   ` Marvin Häuser
2021-04-06 16:16     ` [EXTERNAL] " Bret Barkelew
2021-04-08 11:16     ` Laszlo Ersek
2021-04-08 14:13       ` Andrew Fish [this message]
2021-04-08 16:06         ` Marvin Häuser
2021-04-08 16:44           ` Andrew Fish
2021-04-08 17:02             ` Marvin Häuser
2021-04-08 17:39               ` Andrew Fish
2021-04-08 21:07                 ` Marvin Häuser
2021-04-08 21:48                   ` Andrew Fish
2021-04-08 22:42                   ` Michael Brown
2021-04-12 17:22   ` Marvin Häuser
2021-04-12 18:30     ` [EXTERNAL] " Bret Barkelew
2021-04-13  0:19     ` Michael D Kinney
2021-04-13  0:56       ` Nate DeSimone
2021-04-13  7:31         ` Marvin Häuser
2021-04-13 15:05           ` Andrew Fish
2021-04-13 18:04           ` Nate DeSimone
2021-04-13 18:08             ` Michael D Kinney
2021-04-13 18:14             ` Andrew Fish
2021-04-16  7:36               ` Marvin Häuser
2021-04-07 21:05 ` Michael Brown
2021-04-07 21:31   ` Marvin Häuser
2021-04-07 21:50     ` Michael Brown
2021-04-07 22:02       ` Andrew Fish
     [not found]       ` <1673B28429E5B4FE.4742@groups.io>
2021-04-07 22:10         ` Andrew Fish
2021-04-08  9:04           ` Marvin Häuser
2021-04-08  9:40             ` Michael Brown
2021-04-08  8:53       ` Marvin Häuser
2021-04-08  9:26         ` Michael Brown
2021-04-08  9:41           ` Marvin Häuser
2021-04-08  9:50             ` Marvin Häuser
2021-04-08  9:55             ` Michael Brown
2021-04-08 10:13               ` Marvin Häuser
2021-04-08 10:31                 ` Michael Brown

Reply instructions:

You may reply publicly 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-list 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=C24A5B12-7144-4FA4-A42F-FB515620ADD3@apple.com \
    --to=devel@edk2.groups.io \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox