<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-11-23 18:21 GMT+01:00 Denis 'GNUtoo' Carikli <span dir="ltr"><<a href="mailto:GNUtoo@no-log.org" target="_blank">GNUtoo@no-log.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, 3 Nov 2016 10:28:22 +0000<br>
Luke Kenneth Casson Leighton <<a href="mailto:lkcl@lkcl.net">lkcl@lkcl.net</a>> wrote:<br>
<br>
> On 11/3/16, <a href="mailto:mike.valk@gmail.com">mike.valk@gmail.com</a> <<a href="mailto:mike.valk@gmail.com">mike.valk@gmail.com</a>> wrote:<br>
> > Interesting:<br>
> > <a href="http://phoronix.com/scan.php?page=news_item&px=Google-Building-OSS-TPM2" rel="noreferrer" target="_blank">http://phoronix.com/scan.php?<wbr>page=news_item&px=Google-<wbr>Building-OSS-TPM2</a><br>
><br>
>  yeah, very.  means they no longer trust third party proprietary TPM<br>
> implementations, which is in and of itself all we really need to know.<br>
</span>There isn't only that. You also need to force the hardware to use the<br>
TPM. ChromeOS probably already does that.<br>
<br>
Using an ME to do that is not compatible with freedom.<br>
When there is no ME, BIOSes and UEFI typically set the bootblock<br>
read-only and have code in there to start using the TPM.<br>
Otherwise there is no way to prevent a malicious user to replay a good<br>
boot to the TPM while a totally different boot software was used.<br>
<br>
There are patches for flashrom that are being reviewd AFAIK for adding<br>
the ability to set flash zones read-only.<br>
Note that "read-only" can have different meaning:<br>
- The zone can be forever read-only<br>
- The zone can be read-only if the write protect pin of the flash is<br>
  grounded.<br>
- The zone can be read-only until the next boot or reboot.<br>
<br>
On x86 hardware, the chipset can also be programmed to do make zones<br>
of the boot flash read-only until the next boot.<br>
<br>
AFAIK chromeOS uses the flash read-only features to do it, while<br>
typicall BIOS/UEFI uses the chipset's read-only features or the ME.<br>
<span class=""><br>
>  now let's see if they create an SSD with full firmware source code<br>
> available.  the first low-cost SoC with on-board RAM, ability to<br>
> connect to multiple eMMC ICs and a USB3-OTG would do the job.<br>
</span>They probably don't trust SSD and most storage device either.<br>
<br>
Given that:<br>
- Most storage devices (HDD,SSD,USB keys, SD, microSD, etc) have<br>
  non-free firmwares.<br>
- GNU/Linux probably trust storage devices by default. Storage devices<br>
  could easily detect (by looking at the access pattern) what<br>
  program/os is accesing a given file. That probably leads to TOCTOU<br>
  attacks.<br>
- The boot flash(which has libreboot/coreboot/The BIOS/UEFI/etc) has no<br>
  firmware so far. As far as I know it's only hardware.<br>
<br>
You don't have many options left if you want to avoid such attacks.<br>
ChromeOS chose to verify the kernel+(initramfs?) from code that is<br>
running from the boot flash and then to use dm-verity for the<br>
filesystem.<br></blockquote><div><br></div><div>Probably nothing on the open market. EOMA68 comes close. But does not have tamper protection. It does however give to option to verify every aspect. Making it tamper protected would make this even harder exercise even more difficult.</div><div><br></div><div>The issue is that we work with complex systems. There is no longer one single CPU. A lot of parts are timing sensitive and are general purpose, power management, communication. Even within the SoC. The cheap solution is to use general purpose microcontrollers are used opposed to build logic systems from ground up. Building logic systems is expensive and time consuming. Writing software is fast(er) and cheap(er).</div><div><br></div><div>Every microcontroller is a "computer" on it's own. And thus an attack vector.</div><div><br></div><div>Attack vectors for EOMA68-A20 that I see:</div><div>1. Microcontrollers in every USB connector. (But that's an vector for all systems)</div><div>2. A20 has a RISC cpu inside for power management purposes. Not used by currently iirc. But not checked either.</div><div>3. The PMIC is an Microcontroller with firmware</div><div>4. The housing has a ARM microcontroller. Which runs it's own RTOS. </div><div>5. Audio attacks on the sound stack</div><div><br></div><div>The list for Intel machines is miles longer though and more profitable. Which is a large item in assessing the risk</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
A fully encrypted rootfs (no /boot in clear) is also a possible way to<br>
workaround such issue. Libreboot (trough GRUB) can support such thing.<br>
<br>
At the end of the day it's still a pain because you also need to wory<br>
about protecting the device at installation time...<br>
<br>
I'm working on a script[2] that build an image with the following<br>
softaware to address the issue:<br>
- Coreboot<br>
- SeaBIOS and iPXE<br>
- GRUB<br></blockquote><div><br></div><div>Hi Dennis, you're being a bit too vague here. If I understand correctly you are trying to build a installation verification tool? </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
It fetches a GNU/Linux distribution kernel and initramfs (used in<br>
netinstall images) in the computer RAM and then computes the checksums.<br>
It's then up to the user to boot the images or not, to verify that<br>
the checksums are the ones expected.<br>
<br>
So far I've been able to bootstrap debian from it but I've still some<br>
issues to fix:<br>
- Debian is not FSDG compliant. Parabola and Trisquel don't publish<br>
  kenrel+initramfs images for the installer. I should ask them.<br>
- Installing a fully encrypted rootfs without /boot in clear doesn't<br>
  seem to be supported in the netinstall, so you need to do some crazy<br>
  hacks to workaround that.<br>
- Installing parabola from that debian install is also not very<br>
  convenient as you need to download,verify and chroot inside the<br>
  liveCD.<br>
- I've some issues with the default framebuffer driver used in debian<br>
  on the Lenovo X60.<br>
<br>
On typical SBC things are even worse if you have no other choice than<br>
booting from the uSD.<br>
<br>
However the EOMA68 has a NAND flash, which AFAIK has no firmware.<br>
I don't know the boot order on it[1]. Having a recovery parabola<br>
installer there might be a good idea since one can then *very easily*<br>
pacstrap to another (fully encrypted) storage device.<br>
<br>
References:<br>
-----------<br>
[1]<a href="https://linux-sunxi.org/BROM" rel="noreferrer" target="_blank">https://linux-sunxi.org/<wbr>BROM</a> has some generic information. Using<br>
   NAND with an SD/microSD card wired as MMC2 seem safe, but I don't<br>
   know if the uSD is MMC0 or MMC2 in the EOMA.<br></blockquote><div><br></div><div>Check the schematics I'd say ;-)</div><div><br></div><div>IIRC the flash controller is hardware and controlled from Linux. With eMMC, which is not used, There is a microcontroller controlling flash much like SSD's</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
[2]The script will be pushed at<br>
   <a href="https://framagit.org/GNUtoo/coreboot-os-installer" rel="noreferrer" target="_blank">https://framagit.org/GNUtoo/<wbr>coreboot-os-installer</a><br>
   The commits need to be cleaned up, so the history might be rewritten<br>
   at some point.<br>
<span class="HOEnZb"><font color="#888888"><br>
Denis.<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
______________________________<wbr>_________________<br>
arm-netbook mailing list <a href="mailto:arm-netbook@lists.phcomp.co.uk">arm-netbook@lists.phcomp.co.uk</a><br>
<a href="http://lists.phcomp.co.uk/mailman/listinfo/arm-netbook" rel="noreferrer" target="_blank">http://lists.phcomp.co.uk/<wbr>mailman/listinfo/arm-netbook</a><br>
Send large attachments to <a href="mailto:arm-netbook@files.phcomp.co.uk">arm-netbook@files.phcomp.co.uk</a></div></div></blockquote></div><br></div></div>