-
Herald Angel: So, most of the cloud
services rely on closed source proprietary
-
server firmware; header[?] firmware; with
known security implications to[?] tenants.
-
Imagine... So that's where LinuxBoot comes
to the rescue because it wants to replace
-
this closed source firmware with an open
Linux boot version and our next speaker
-
Trammell Hudson he's an integral part of
that project and he's here to provide you
-
an overview of this Linux boot project.
Thank you very much and please give a warm
-
round round of applause to Trammell
Hudson, please!
-
applause
Trammell: Thank you!
-
Securing the boot process is really
fundamental to having secure systems
-
because of the vulnerabilities in firmware
can affect any security that the operating
-
system tries to provide. And for that
reason I think it's really important that
-
we replace the proprietary vendor
firmwares with open source, like Linux.
-
And this is not a new idea. My
collaborator Ron Minich started a project
-
called LinuxBIOS back in the 90s when he
was at Los Alamos National Labs. They
-
built the world's third fastest
supercomputer out of a Linux cluster that
-
used BIOS in the ROM to make it more
reliable. LinuxBIOS turned into coreboot
-
in 2005 and the Linux part was removed and
became a generic bootloader, and it now
-
powers the Chromebooks as well as projects
like the Heads slightly more secure laptop
-
firmware that I presented last year at
CCC. Unfortunately it doesn't support any
-
server main boards anymore. Most servers
are running a variant of Intel's UEFI
-
firmware, which is a project that Intel
started to replace the somewhat aging
-
16-bit real mode BIOS of the 80s and 90s.
And, like a lot of second systems, it's
-
pretty complicated. If you've been to any
talks on firmware security you've probably
-
seen this slide before. It goes through
multiple phases as the system boots, the
-
first phase does a cryptographic
verification of the pre-EFI phase this the
-
PEI phase is responsible for bringing up
the memory controller the CPU interconnect
-
and a few other critical devices. It also
enables paging and long mode and then
-
jumps into the device execution
environment or DXE phase. This is where
-
UEFI option ROMs are executed as well, as
well as all of the remaining devices are
-
initialized. Once the PCI bus and USB
buses have been walked and enumerated, it
-
transfers to the boot device selection
phase, which figures out which disk or USB
-
stick or network to boot from. That loads
a boot loader from that device which
-
eventually loads a real operating system,
which then is the operating system that's
-
running on the machine. What we're
proposing is that we replace all of this
-
with the Linux boot kernel and runtime. We
can do all of the device enumeration in
-
Linux, it already has support for doing
this, and then we can use more
-
sophisticated protocols and tools to
locate the real kernel that we want to
-
run, and use the kexec system call to be
able to start that new kernel. And the
-
reason we want to use Linux here is
because it gives us the ability to have a
-
more secure system. It gives us a lot more
flexibility and hopefully it lets us
-
create a more resilient system out of it.
On the security front one of the big areas
-
that we get some benefit is we reduced the
attack surface that in the DXE phase these
-
drivers are an enormous amount of code on
the Intel S2600 there are over 400 modules
-
that get loaded. They do things like the
option roms that I mentioned, and if you
-
want an example of how dangerous option
roms can be, you can look at my
-
Thunderstrike talks from a few years ago.
They also do things like display the boot
-
splash, the vendor logo, and this has been
a place where quite a few buffer overflows
-
have been found in vendor firmwares in the
past. They have a complete network stack
-
IPv4 and v6 as well as HTTP and HTTPS.
They have legacy device drivers for things
-
like floppy drives, and again, these sort
of dusty corners are where vulnerabilities
-
in Xen have been found that allowed a
hypervisor break. There are also modules
-
like the Microsoft OEM activation that we
just don't know what they do, or things
-
like a y2k rollover module that probably
hasn't been tested in two decades. So the
-
final OS bootloader phase is actually not
part of UEFI, but it's typically in, the
-
Linux system, its GRUB, the grand unified
bootloader. And y'all -- many of you are
-
probably familiar with its interface, but
did you know that it has its own file
-
system, video, and network drivers. About
almost 250 thousand lines of code make up
-
GRUB. I don't bring up the size of this to
complain about the space it takes, but
-
because of how much it increases our
attack surface. You might think that
-
having three different operating systems
involved in this boot process gives us a
-
defense in depth, but I would argue that
we are subject to the weakest link in this
-
chain because if you can compromise UEFI,
you can compromise grub, and if you can
-
compromise grub you can compromise the
Linux kernel that you want to run on the
-
machine. So there are lots of ways these
attacks could be launched. As I mentioned
-
UEFI has a network device driver, grub has
a network device driver, and of course
-
Linux has a network device driver. This
means that a remote attacker could
-
potentially get code execution during the
boot process.
-
UEFI has a USB driver, grub has a
USB driver, and of course Linux has a USB
-
driver. There have been bugs found in USB
stacks -- which unfortunately are very
-
complex -- and a buffer overflow in a USB
descriptor handler could allow a local
-
attacker to plug in a rogue device and
take control of the firmware during the
-
boot. Of course UEFI has a FAT driver,
GRUB has a FAT driver, Linux has a FAT
-
driver. This gives an attacker a place to
gain persistence and perhaps leverage code
-
execution during the initial file system
or partition walk. So what we argue is
-
that we should have the operating system
that has the most contributors, and the
-
most code review, and the most frequent
update schedule, for these roles. Linux
-
has a lot more eyes on it, it undergoes a
much more rapid update schedule than
-
pretty much any vendor firmware. You might
ask, why do we keep the PEI and the SEC
-
phase from the UEFI firmware? Couldn't we
use coreboot in this place, and the
-
problem is that vendors are not
documenting the memory controller or the
-
CPU interconnect. Instead they're
providing a opaque binary blob called the
-
firmware support package, or FSP, that
does the memory controller and the CPU
-
initialization. On most coreboot systems
-- on most modern coreboot systems --
-
coreboot actually calls into the FSP to do
this initialization. And on a lot of the
-
devices the FSB has grown in scope so it
now includes video device drivers and
-
power management, and it's actually larger
than the PEI phase on some of the servers
-
that we're dealing with. The other wrinkle
is that most modern CPUs don't come out of
-
reset into the legacy reset vector
anymore. Instead, they execute an
-
authenticated code module, called boot
guard, that's signed by Intel, and the CPU
-
will not start up if that's not present.
The good news is that this boot guard ACM
-
measures the PEI phase into the TPM, which
allows us to detect attempts to modify it
-
from malicious attacks. The bad news is
that we are not able to change it on many
-
of these systems. But even with that in
place, we still have a much, much more
-
flexible system. If you've ever worked
with the UEFI shell or with GRUBs menu
-
config, it's really not as flexible, and
the tooling is not anywhere near as
-
mature, as being able to write things with
shell scripts, or with go, or with real
-
languages. Additionally we can configure
at the Linux boot kernel with standard
-
Linux config tools. UEFI supports booting
from FAT file systems, but with LinuxBoot
-
we can boot from any of the hundreds of
file systems that Linux supports. We can
-
boot from encrypted filesystems, since we
have LUKS and cryptsetup. Most UEFI
-
firmwares can only boot from the network
device that is installed on the server
-
motherboard. We can boot from any network
device that Linux supports, and we can use
-
proper protocols; we're not limited to PXE
and TFTP. We can use SSL, we can do
-
cryptographic measurements of the kernels
that we receive. And the runtime that
-
makes up Linux boot is also very flexible.
Last year I presented the Heads runtime
-
for laptops. This is a very security
focused initial ram disk that attempts to
-
provide a slightly more secure, measured,
and attested firmware, and this works
-
really well with Linux boot. My
collaborator Ron Minnich is working on a
-
go based firmware, called NERF, and this
is written entirely in just-in-time
-
compiled Go, which is really nice because
it gives you memory safety, and is very
-
popular inside of Google. Being able to
tailor the device drivers that are
-
included also allows the system to boot
much faster. UEFI on the Open Compute
-
Winterfell takes about eight minutes to
startup. With NERF, excuse me -- with
-
with Linux boot and NERF it starts up in
about 20 seconds. I found similar results
-
on the Intel mainboard that I'm working on
and hopefully we will get a video there's
-
an action this is from power-on to
executes the PEI phase out of the
-
ROM and then jumps into a small wrapper
around the Linux kernel which then prints
-
to the serial port and we now have the
Linux print case and we have an
-
interactive shell in about 20 seconds
which is quite a bit better than the four
-
minutes that the system used to take it
scrolled by pretty fast but you might have
-
noticed that the print case has ... - that
the Linux kernel thinks it's running under
-
EFI this because we have a small wrapper
around the kernel but for the most part
-
the kernel is able to do all of the PCI
and device enumeration that it needs to do
-
because it already does it since it
doesn't trust the vendor BIOSes in a lot
-
of cases so I'm really glad that the
Congress has added a track on technical
-
resiliency and I would encourage Congress
to also add a track on resiliency of our
-
social systems because it's really vital
that we deal with both online and offline
-
harassment and I think that that will help
us make a safer and more secure Congress
-
as well.
applause
-
So last year when I presented at
Heads I proposed three criteria for a
-
resilient technical system: that they need
to be built with open-source software,
-
they need to be reproducibly built, and
they need to be measured into some sort of
-
cryptographic hardware. The open is, you
know, I think, in this crowd, is not
-
controversial. But the reason that we need
it is because a lot of the server vendors
-
don't actually control their own firmware;
they license it from independent BIOS
-
vendors who then tailor it for whatever
current model of machine the
-
manufacturer is making. This means that
they typically don't support older
-
hardware and, if there are
vulnerabilities, it's necessary that we be
-
able to make these patches on our own
schedule and we need to be able to self-
-
help when it comes to our own security.
The other problem is that closed source
-
systems can hide vulnerabilities for
decades — this is especially true for very
-
privileged devices like the management
engine. There's been several talks here at
-
Congress about the concerns that we have
with the management engine. Some vendors
-
are even violating our trust entirely and
using their place in the firmware
-
to install malware or adware onto the
systems. So for this reason we really need
-
our own control over this firmware.
Reproducibility is becoming much more of
-
an issue, and the goal here is to be able
to ensure that everyone who builds the
-
Linux boot firmware gets exactly the same
result that everyone else does. This is a
-
requirement to be able to ensure that
we're not introducing accidental
-
vulnerabilities through picking up the
wrong library, or intentional ones through
-
compiler supply chain attacks, such as Ken
Thompson's Trusting Trust article. With
-
the Linux boot firmware, our Kernel and
Initial Ramdisk are reproducibly built, so
-
we get exactly the same hashes on the
firmware. Unfortunately we don't control
-
the UEFI portions that we're using — the
PEI and the SEC phase — so those aren't
-
included in our reproducibility
right now. "Measured" is a another place
-
where we need to take into account the
runtime security of the system. So
-
reproducible builds handle the compile
time, but measuring what's running into
-
cryptographic coprocessors — like the TPM
— gives us the ability to make
-
attestations as to what is actually
running on the system. On the Heads
-
firmware we do this to the user that the
firmware can produce a one-time secret
-
that you can compare against your phone to
know that it has not been tampered with.
-
In the server case it uses remote
attestation to be able to prove to the
-
user that the code that is running is what
they expect. This is a collaboration with
-
the Mass Open Cloud Project, out of Boston
University and MIT, that is attempting to
-
provide a hardware root of trust for the
servers, so that you can know that a cloud
-
provider has not tampered with your
system. The TPM is not invulnerable, as
-
Christopher Tarnovsky showed at DEFCON,
but the level of effort that it takes to
-
break into a TPM, to decap it, and to read
out the bits with a microscope raises the
-
bar really significantly. And part of
resiliency is making honest trade-offs
-
about security threats versus the
difficulty in launching the attacks, and
-
if the TPM prevents remote attacks or
prevents software-only attacks, that is a
-
sufficiently high bar for a lot of these
applications. We have quite a bit of
-
ongoing research with this. As I mentioned
the management engine is an area of great
-
concern and we are working on figuring out
how to remove most of its capabilities, so
-
that it's not able to interfere with the
running system. There's another device in
-
most server motherboards called the board
management controller, or the BMC, that
-
has a similar level of access to memory
and devices. So we're concerned about
-
what's running on there, and there's a
project out of Facebook called OpenBMC
-
that is an open source Linux distribution
to run on that coprocessor, and what
-
Facebook has done through the Open Compute
Initiative is, they have their OEMs pre-
-
installing that on the new open compute
nodes, switches, and storage systems. And
-
this is really where we need to get with
Linux boot as well. Right now it requires
-
physical access to the SPI Flash and a
hardware programmer to be able to install.
-
That's not a hurdle for everyone, but this
is not something that we want people to be
-
doing in their server rooms. We want OEMs
to be providing these systems that are
-
secure by default so that it's not
necessary to break out your chip clip to
-
make this happen. But if you do want to
contribute, right now we support three
-
different main boards: The Intel S2600,
which is a modern Wolf Pass CPU, the Mass
-
Open Cloud is working with the Dell R630,
which is a Haswell, I believe, and then
-
Ron Minnich and John Murrie are working on
the Open Compute Hardware, and this is
-
again a — in conjunction with OpenBMC — a
real potential for having free software in
-
our firmware again. So, if you'd like more
info, we have a website. There's some
-
install instructions and we'd love to help
you build more secure, more flexible, and
-
more resilient systems. And I really want
to thank everyone for coming here today,
-
and I'd love to answer any questions that
you might have!
-
applause
-
Herald: Thank you very much Trammel Hudson
-
for this talk. We have 10 minutes for Q&A,
so please line up at the microphones if
-
you have any questions but there are no
questions from the signal angel and the
-
internet, so please, microphone number
one.
-
Q: One quick question. Is Two Sigma using
this for any of their internal systems,
-
and B, and how much vendor outreach is in
there to try and make this beyond just the
-
Open Compute but also a lot of the vendors
that were on your slides to adopt this.
-
A: So currently, we don't have any deployed
systems taking advantage of it. It's still
-
very much at the research stage. I've
been spending quite a bit of time visiting
-
OEMs, and one of my goals for 2018 is to
have a mainstream OEM shipping it. The
-
Heads project is shipping firmware on some
laptops from Librem, and I'm hoping we can
-
get Linux boot on servers as well.
Herald: Microphone number 2, please.
-
Q: The question I have is about the size
of Linux. So you mention that there is
-
problems with UEFI, and it's not open
source, and stuff like that. But the issue
-
you mention is that the main part of Evo
UEFI is EDK, which is open source and
-
then, I mean, I just have to guess that
the HTTP client and stuff that they have
-
in the Apple boot, I assume it was, is for
downloading their firmware, but how is
-
replacing something that's huge with
something that's even bigger going to make
-
the thing more secure? Because I think the
the whole point of having a security
-
kernel is to have it really small to be
verifiable and I don't see that happening
-
with Linux, because at the same time
people are coming up with other things. I
-
don't remember the the other hypervisor,
which is supposed to be better than KVM,
-
because KVM is not really verifiable.
A: So that that's a great question. The
-
concern is that Linux is a huge TCB — a
Trusted Computing Base — and that that is
-
a big concern. Since we're already running
linux on the server, it essentially is
-
inside our TCB already, so it is large, it
is difficult to verify. However the
-
lessons that we've learned in porting
Linux to run in this environment make it
-
also very conceivable that we could build
other systems. If you want to use a
-
certified — excuse me, a verified
microkernel, that would be a great place
-
to bring into the firmware and I'd
love to figure out some way to make that
-
happen. The second question, just to point
out, that even though EDK 2 — which is the
-
open source components of UEFI are open
source — there's a huge amount of closed
-
source that goes into building a UEFI
firmware, and we can't verify the closed
-
source part, and even the open source
parts don't have the level of inspection
-
and correctness that the Linux kernel has
gone through, and Linux systems that are
-
exposed on the internet. Most of the UEFI
development is not focused on that level
-
of defense that Linux has to deal with
everyday.
-
H: Microphone number 2, please.
Q: Thank you for your talk. Would it be
-
possible also to support, apart from
servers, to support laptops? Especially
-
the one locked down by Boot Guard?
A: So the issue with Boot Guard on laptops
-
is that the CPU fuses are typically set in
what's called a Verified Boot Mode, and
-
that will not exit the boot guard ACM if
the firmware does not match the
-
manufacturer's hash. So this doesn't give
us any way to take advantage– to
-
circumvent that. Most server chipsets are
set in what's called Measured Boot Mode.
-
So the Boot Guard ACM just measures the
next stage into the TPM, and then jumps
-
into it. So if an attacker has modified
the firmware you will be able to detect it
-
during the attestation phase.
H: Microphone number one, please — just
-
one question.
Q: Thank you. On ARM it's much faster to
-
boot something. It's also much simpler:
You have an address, you load the bin
-
file, and it boots. On x86 is much more
complex, and the amount of codes you saw
-
was for GRUB relates to that. So my
question: I've seen Allwinner boards,
-
Cortex A8, booting in four seconds just to
get a shell, and six seconds to get a QT,
-
so the Linux kernel pretty QT app,
to do a dashboard for a car — so five to
-
six seconds. So I'm wondering why is there
such a big difference for a server to take
-
20 or 22 seconds? Is it the peripherals
that needs to be initialized or what's the
-
reason for it?
A: So there are several things that
-
contribute to the 20 seconds, and one of
the things that we're looking into is
-
trying to profile that. We're able to swap
out the PEI core and turn on a lot of
-
debugging. And what I've seen on the
Dell system, a lot of that time is spent
-
waiting for the Management Engine to come
online, and then there's also— it appears
-
to be a one second timeout for every CPU
in the system, that they bring the CPUs on
-
one at a time, and it takes almost
precisely 1 million microseconds for each
-
one. So there are things in the vendor
firmware that we currently don't have the
-
ability to change — that appear to be the
long tent, excuse me, long poll in the
-
tent on the boot process.
H: Microphone 3 in the back, please.
-
Q: You addressed a lot about security, but
my question is rather, there's a lot of
-
settings — for example BIOS, there's UEFI
settings, and there's stuff like remote
-
booting — which is a whole bunch of weird
protocols, proprietary stuff, and stuff
-
that's really hard to handle. If you have
a large installation, for example, you
-
can't just say: Okay deploy all my boot
orders for the BIOS settings. Are you
-
going to address that in some unified,
nice way, where I can say, okay I have
-
this one protocol that runs on my Linux
firmware that does that nicely.
-
A: That's exactly how most sites will
deploy it. That they will write their own
-
boot scripts that use traditional — excuse
me — that use normal protocols. So in the
-
Mass Open Cloud they are doing a wget over
SSL that can then measure the received
-
kernel into the TPM and then kexec it. And
that's done without requiring changes to
-
in-VRAM-variables, or all the sort of
setup that you have to put into to
-
configuring a UEFI system. That can be
replaced with a very small shell script.
-
H: We have time for one last question —
and this is from the Signal Angel, because
-
the internet has a question.
Q: Yes, the internet has two very simple
-
technical questions: Do you know if
there's any progress, or do you know if
-
any ATAs on the Talus 2 project. And are
there any size concerns when writing
-
firmware in Go?
-
A: So the Talus 2 project is
a Power based system, and right now we're
-
mostly focused on the x86 servers, since
that's the very mainstream available sorts
-
of boards, and the Go firmware is actually
quite small. I've mostly been working on
-
the Heads side, which is based on shell
scripts. My understanding is that the
-
just-in-time compiled Go does not add more
than a few hundred kilobytes to the ROM
-
image and only a few 100 milliseconds to
to the boot time. The advantage of Go is
-
that it is memory safe, and it's an actual
programming language, so it allows the
-
initialization scripts to be verified in a
way that shell scripts can be very
-
difficult to do.
H: So thank you very much for answering
-
all these questions. Please
give a warm round of applause to
-
Trammel Hudson. Thank you very much!
applause
-
postroll music
-
subtitles created by c3subtitles.de
in the year 2020. Join, and help us!