UEFI Secure Boot kasutamine töökohaarvutis

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

Arvuti kasutamisel võiks tekkida kasutajal alati küsimus, et 'kas seda arvutit kasutab veel miski peale selle kasutuse, mida kasutaja ise korraldab'. Pahalasega tegelemisel on üldiselt kaks poolt

  • hoida pahalane eemal
  • saada aru, et pahalane on kohale jõudnud ja hinnata, mida ta on teinud

Käesolevas tekstis keskendutakse üksikule töökohaarvutile ja tutvustatakse kuidas Secure Boot, multi boot ja failisüsteemi/plokkseadme krüptimise abil võiks saada seda arvutit pahalase nö loogiliste rünnakute osas hallata. Antud lähenemisest võib olla abi ka pahalase füüsiliste rünnakute puhul (nt varastatakse läptop ära; võetakse ajutiselt oma valdusse backdoori/keyloggeri/vms paigaldamiseks ja tagastatakse (nn Evil Maid Attack)), aga sel juhul tuleks seda täiendada.

Mõisted

  • SB (Secure Boot)
  • multi boot - ühte füüsilisse arvutisse on paigaldatud mitu operatsioonisüsteemi ja neid saab vaheldumisi käivitada
  • LUKS - plokkseadme krüptimise lahendus (plokkseadmeks on miski, mille peale tavaliselt saab failisüsteemi tekitad (partitsiooni, lvm köide)
  • TPM (Trusted Platform Module)

Tööpõhimõte

Tulemust võiks kujutada joonisel

    ______________
   |              |                                    /boot/efi/EFI/fedora/grubx64.efi -> /dev/system_fedora/root -> Fedora OS
   |  riistvara   | ----- ESP failisüsteem -- ... -->  /boot/efi/EFI/ubuntu/grubx64.efi -> /dev/system_ubuntu/root -> Ubuntu OS
   |______________|                                    /boot/efi/EFI/ubuntu/grubx64.efi -> /dev/system_debian/root -> Debian OS

          ----->--------- Secure Boot --------------->------ .... 

kus

  • riistvaralt asjade käivitamist kontrollib Secure Boot
  • arvutisse on paigaldatud kolm operatsioonisüsteemi (igal oma efi kataloog ja oma lvm köide)
  • skeemil väljendab ... et esmalt käivitab firmware vastava shim.efi rakenduse ja seejärel vastava grubx64.efi

Väited

  • kogu tegevus toimib ühes arvutis, ühe klaviatuur-hiir-monitor komplektiga ja ühel kõvakettal (st mitte mingite kontrollide tegemiseks ei ole vaja usb pulka, välist ketast, failiserverit võrgus vms)
  • arvuti riistvaral on secure boot tugi ja see on algusest peale sisselülitatud; puudub tpm tugi (parem oleks kui arvutil on builtin uefi shell, aga pole tingimata vajalik; asi selles, et signeeritud Shell.efi't on raske leida, samas kui secure boot on sisse lülitatud, siis ei saa tavalist kasutada; ja kui shelli pole, siis ei saa MokUtil.efi jms efi rakendusi otseselt kasutada)
  • arvutisse on paigaldatud kolm operatsioonisüsteemi: Fedora, Ubuntu ja Debian
  • Debian on töökoha keskkond, Fedora ja Ubuntu on abistavad keskkonnad
  • Fedora failisüsteem/plokkseade on krüptitud
  • Käesoleva ülesande seisukohast ei ole oluline Debiani failisüsteemi/plokkseadme krüptimine, aga eeldades, et mitte töötavale arvutile on pahalasel füüsiline ligipääs, siis sellel juhul sellest on kaitset
  • Fedora toetab kõige rangemalt Secure Boot'i (alates riistvarast kuni tuuma moodulite laadimiseni, vääratamisel tegevus ei ole lubatud)
  • Ubuntu toetab Secure Boot'i suhteliselt lõdvalt, st ubuntu signed grub boodib kõiki tuumi, signeeritud või signeerimata
  • Debian iseenesest ei toeta Secure Boot'i üldse; teda saab bootida tänu sellele, et Ubuntu grub boodib kõiki tuumi
  • Ubuntu paigaldamine ongi vajalik vaid tema bootloaderi tõttu
  • HIDS tegemise protsesse ei usaldata käivitada sama operatsioonisüsteemi kontrolli all, mida kontrollitakse (Debiani terviklust kontrollitakse Fedora abil)
  • kuna tegu on töökohaarvutiga, siis väga hästi ei saa väljuvat liiklust piirata

Pahalase eemalhoidmine

Väited

  • Arvuti UEFI Setup keskkond on kaitstud parooliga
  • Arvutisse ei saa eemalt sisse logida üle võrgu ja ta ei paku võrku mingeid teenuseid (samuti ei kasutata ssh reverse port forwarding, X11 forwarding vms trikke)
  • Kui arvutil on IPMI vms tugi, mis sellega teha, lülitada välja?
  • Arvuti desktop'ist võiks mõelda kui klaviatuur-hiir-montori serverist, kuhu peale saavad protsessid on pilti näidata
  • Üldiselt tuleks arvestada, et sama operatsioonisüsteemi sees saavad samale kasutajale kuuluvad protsessid üksteisega tegeleda (protsesside signaale saata (stop-start-reload), mälu lugeda, X pilti vaadata)
  • Pahalast on oodata peamiselt üle võrgu sisse ronimas ja see võimalus tekib tal nt Debian keskkonna administreerimise vea tõttu (ssh port on lahti ja parool arvati ära), lohaka kasutamise tõttu (käidi brauseriga ebasobival veebikohal) või kasutatakse küsitava turvalisusega tarkvara (vana Skype versioon)

Arvutis toimuvate tegevuste isoleerimiseks saab kasutada

  • käivitada protsesse erinevate kasutajatena
  • Debian keskkonnas kasutatakse protsesside tegevuste kontrollimiseks AppArmor'it
  • Debiani keskkonnas saab mingeid protsesse käitada systemd-nspawn konteinerites
  • nested X, synergy, vnc, X protokoll võrgus, X protokoll üle SSH, PulseAudio üle võrgu
  • Kui pahalane on käinud sees arvutis Debiani kaudu, siis ta ei saa Secure Bootiga tegeleda kuna see on 'User mode' režiimis
  • käesoleva asjakorralduse abil saab käivitada ainbult Linux all töötavaid programme (mitte windowsi virtuaalset arvutit vms)

Pahalase tuvastamine

  • Debian keskkonna (tegelikult kõigi keskkondade) käivitamisel saab tänu Secure Bootile veenduda, et kuni bootloaderi (grub kaasaarvatud) käivitamiseni ei ole midagi ära rikutud
  • Arvuti käivatatakse nö turvaliselt Fedora operatsioonisüsteemilt ja tehakse Debiani failisüsteemile integrit vms programmiga kontroll
  • Kui pahalane on käinud arvutis sees Debiani kaudu, siis tänu sellele, et Fedora failisüsteem on krüptitud ei saa ta midagi varjatult korda saata (ta saab küll Fedora ära rikkuda)

Debiani operatsioonisüsteemi tarkvara uuenduste rakendamine

  • Seda Debiani operatsioonisüsteemi keskkonna eksemplari (/dev/system_debian/root), mida kasutatakse ei uuendata (igaks juhuks, äkki on pahalane kuhugi kavalt sisse pugenud)
  • Viimati töötavast puhtast Debiani keskkonnast on koopia Fedora krüptitud failisüsteemis
  • Debiani uuendamise eel booditakse arvuti Fedora alla ja liigutatakse debiani juurfailisüsteem uue nime alla
# lvrename /dev/system_debian/root /dev/system_debian/root_20170419_tootanud

tekitatakse uus juurikas

# lvcreate -L20G -n root system_debian
# mkfs.ext4 /dev/system_debian/root

monteeritakse külge vana ja võrreldakse viimase teadaolevalt korras seisuga

# mount /dev/system_debian/root_20170419_tootanud /mnt/system_debian-root_20170419_tootanud
# diff -r /srv/system_debian-root-viimane /mnt/system_debian-root_20170419_tootanud

monteeritakse külge uus tühi ja kopeeritakse viimati töötava andmed (igaks juhuks)

# mount /dev/system_debian/root /mnt/system_debian-root
# rsync -avHAX --numeric-ids /srv/system_debian-root-viimane/ /mnt/system_debian-root/

Seejärel käivitatakse Debian ja rakendatakse paketihalduse muudatused; ning uuesti Fedora ning moodustatakse järgmiseks korraks /srv/system_debian-root-viimane.

Arvuti ettevalmistamise tegevused

  • Fedora paigaldatakse arvutisse kõigepealt ja krüptitud failisüsteemiga
  • Seejärel paigaldatakse Ubuntu
  • Lõpuks paigaldatakse Debian, erandina tuleb selleks ajaks secure boot välja lülitada, peale paigaldamist jällegi sisse lülitada

Alternatiivid

Kirjeldatud viis on natuke kohmakas, alternatiivid võiksid olla nt sellised

  • kasutada füüsilisel arvutil Xen vms virtualiseerimise platvormi ja nn hiir-klaviatuur-monitor server töötab ühe guestina (Xen host seest saab ilma Secure Boot ja Fedora krüptimise jamata tõenäoliselt piisavalt kindlalt hinnata, kas pahalased on suutnud sisse murda; Xen plussiks on et saab kasutada ka Windows guesti)
  • kasutada mitut füüsilist arvutit (erineva tundlikkusega asju loogilise isoleerimise asemel füüsiliselt isoleerida)
  • Fedora abil süsteemi tervikluse kontrollimise asemel alglaadida arvuti usb pulgalt ja siis kontrollida (sel juhul on vaja mõleda kus hoida nö eelmist seisu os juurikat, integrit tulemusi jms, üks variant tekitada spetsiaalne luks krüptitud partitsioon vms; kusjuures usb pulgalt bootimist kontrollib samuti Secure Boot, st see ei pruugi olla halb variant)
  • Fedora abil süsteemi tervikluse kontrollimise asemel alglaadida arvuti võrgust ja võrgus on usaldatud serveri peal eelmine seis os juurikast, integrit kontrollidest jms (see vist on veel kohmakam, vähemalt ühe arvuti haldamiseks)
  • Kui ei ole kasutada Secure Boot riistavara, aga on TPM riistvara, siis võiks TPM sobida praktiliselt sama hästi

Fedora

Ilus oleks kui Fedora kõik v.a. grubx64.efi (st /boot/efi) oleks luks abil krüptitud, aga paistab, et /boot siiski ei ole. See on natuke oluline kuna seal on signeerimata initramfs, aga teiselt poolt, Fedora kontrollib, et tuuma moodulid on ok. Põhimõtteliselt võiks olla lahenduseks, et grubx64.efi panna küsima luks parooli ja /boot on krüptitud luksiga. (Vt järgmist punkti, võib tekkida sarnane probleem nagu on Ubuntuga)

Ubuntu

Ubuntu võiks olla ka krüptitud parem. 2017 kevadel tuleb arvestada, et seejuures on takistus, https://bugs.launchpad.net/ubuntu/+source/grub2-signed/+bug/1360203

Debian

Paigaldada tavalisel viisil, kasutamist kirjeldab skeem

  kont-deb9-internet    kont-deb8-skype     aa-protsess-1 ..  aa-protsess-N      tava-protsess-1 ... N
       _____               _____              _____             _____              _____
      |     |             |     |            |     |           |     |            |     |
      |     |             |     |            |     |           |     |            |     |
      |_____|             |_____|            |_____|           |_____|            |_____|
         |                   |                  |                 |                  |
    -----|-------|---- br0  -|-------           |                 |                  |
                 |                              |                 |                  |
                 |                              |                 |                  |
       __________|______________________________|_________________|__________________|____
      |                                                                                   |
      |    klaviatuur-hiir-monitor arvuti                                                 |
      |                                                                                   |
      |___________________________________________________________________________________|

kus

  • klaviatuur-hiir-monitor arvutis töötavad X server, PulseAudio server jne
  • kont-* on systemd-nspawn konteinerid, kus töötavad väljakutsuvad programmid; nende pilti näeb üle vnc ja heli kuuleb üle võrgu pulseaudio serverist
  • kont-* konteinereid saab kasutada ühes arvutis nt vpn klientide isoleerimiseks
  • aa-protsess-* on apparmordatud protsessid, vähem väljakutsuvad
  • tava-protsess-* - nä tavalised protsessid
  • tava protsesse saab isoleerida käivitades neid erinevate kasuajatena ja võttes pilti ette klaviatuur-hiir-monitor arvutisse ssh X11 forwarding abil
  • konteineritega toimub suhtlemine ühe ethernet võrgu

systemd-nspawn konteinerid

  • kont-deb9-internet - väljakutsuv brauseri kaustamine jms
  • kont-deb8-skype - Skype, TeamViewer

Kasutamiseks tuleb

  • konteineris käivitada VNC server
  • klaviatuur-hiir-monitor arvutis kasutada vnc klienti

PulseAudio

Tundub, et PulseAudio serveri ja kliendi kasutamine võib olla väga lihtne. Paigaldada paprefs pakett ning GUI pealt sättida (töötamine põhineb zeroconf jms automaagika kasutamisel)

  • server publitseerima oma audio ressursse
  • klient kasutama võrgust leitud audio ressursse

Tulemusena saab kasutada

  • brauserist heli esitamine
  • Skype valjuhääldi ja mikrofoni kasutamine

Tundub, et spawnd konteineris tuleb avahi kasutamiseks välja kommenteerida rida

# cat /etc/avahi/avahi-daemon.conf
...
# rlimit-nproc=3

Tulemus paistab klient arvutis nii, imreo-lap on server

Fail:Pulseaudio-12.gif

Vajadusel valida Playback alt sobib seade

Built-in Audio Anolog Stereo on imre@imreo-lap

Serveris paistab selline pilt, kont9-tmp on klient

Fail:Pulseaudio-13.gif

Kasulikud lisamaterjalid

Varundamine

Debian

Debian varundamisel saab kasutada asjaolu, et konteinerite failisüsteemid on ligipääsetavad host kaudu

# ls -ld /var/lib/machines/*
drwxr-xr-x 1 root       root       132 Apr 19 17:59 /var/lib/machines/kont-deb9-internet
drwxr-xr-x 1 root       root       132 Apr 19 17:59 /var/lib/machines/kont-deb9-puhas
drwxr-xr-x 1 root       root       132 Apr 20 11:11 /var/lib/machines/kont-deb8-skype

Fedora

TODO

Kasulikud lisamaterjalid