Operatsioonisüsteemi Ubuntu kasutamine töökohaarvutis

Allikas: Imre kasutab arvutit

Sissejuhatus

Käesolevas tekstis kirjeldatakse selliste omadustega süsteemi juurutamist

  • mitte käivitatud kujul füüsilise arvuti pahalase käsutusse jõudmisel ei ole võimalik pääseda ligi kõvakettal asuvatele andmetele v.a. üks nö tehniline efi rakendus
  • mitte käivitatud kujul füüsilise arvuti ajutisel pahalase käsutusse jõudmisel ei ole tal võimalik seal teha muudatusi ilma, et seejärel arvuti omanik sellest teada saaks (nn Evil Maid Attack)

Küllap sellisele süsteemile on kõige enam rakendust laptop või desktop töökohaarvutis, st millele on mingil määral tõenäoline võõra füüsiline ligipääs (nt omanik kaotab arvuti ära). Käesolevas tekstis on keskendutud XUbuntu v. 16.04 Desktop kasutamisele.

Tööpõhimõte

Süsteemi realiseerimiseks peab olema kasutada EFI ja Secure Boot (SB) toega arvuti (TPM ei kasutata). Olulisemateks momentideks on

  • plokkseade on krüptitud v.a. esp partitsioon
  • esp partitsioonil asub üks signeeritud efi rakendus, mis sisaldab tuuma ja initramfs'i
  • arvuti kasutamiseks käivitamine ja setup keskkonda pääsemine on kaitstud firmware paroolidega
  • firmwarest on kustutatud kõik SB võtmed ja asendatud kasutaja poolt genereeritud PK, KEK ja DB komplektiga
  • kasutaja saab kõvaketta teisaldada muusse arvutisse ja seal kasutada (see on võimalik kuna kasutaja teab plokkseadme krüpto parooli)
  • vajadusel saab SB välja lülitada ja kasutada süsteemi nö tavalisel viisil (ja nt kuhagi hiljem jällegi SB aktiveerida)

Käesolevas tekstis ei pöörata Secure Boot'ile eriti rohkem tähelepanu kui hädavajalik püstitatud eesmärkide saavutamiseks, kuigi süsteem käivitatakse signed tuumaga ja käsitletakse tuuma moodulite signeerimist. St aktsent on asjaolul, et Secure Boot kontrollib operatsioonisüsteemi käivitava efi rakenduse autentsust ja eeldatakse, et LUKS kaitseb andmeid. Edasi on kõik nii autentne nagu üks tavaline Linux on (tuuma moodulite laadimist jne tingimata ei kontrollita SB abil).

Ründe stsenaarium - arvuti satub pahalase käsutusse ja jääb nii

Kui arvuti satub pahalase käsitusse ja jääb sinna (st ei kavatseta sokutada teda tagasi modifitseeritud kujul), siis ta ei saa seda otseselt käivitada kuna ta ei tea Setup keskkonna parooli ega LUKS parooli. Kui ta võtab arvutist kõvaketta ja ühendab selle mujale, siis ta saab uurida ainult nn objcopy efi rakendust, mis sisaldab tuuma ja initramfs'i. Kõik muu on luks abil krüptitud. Nö arvuti uude kasutusse võtmiseks piisab CMOS patarei eemaldada ja millega resetitakse Setup keskkond; kõvaketas tuleb võtta lihtsalt uude kasutusse, tark pahalane teeb badblocks write kontrolli, uue partitsioonitabeli jne.

Ründe stsenaarium - arvuti satub ajutiselt pahalase käsutusse ja ta sokutab ta kasutajale tagasi

Nn Evil Maid Attack seisneb selles, et pahalasel on füüsilisele arvutile lühiajaline (korduv) ligipääs ning ta püüab lisada süsteemi backdoor vms võimaluse. Kuna juurfailisüsteem on krüptitud, siis kohe ta seal midagi teha ei saa, on vaja luks parooli. Selle saamiseks võiks ta asendada efi rakenduse oma variandiga, mis kuulab järgmisel korral kasutaja luks parooli sisestust, aga selleks tuleb tal efi rakendus asendada. Ainult asendamisest ei piisa, kuna see on secure boot db key poolt signeeritud. St tuleks ka asendada PK, KEK ja DB. Selleks aga on vaja ligi pääseda Setup keskkonda. See on võimalik arvuti CMOS patarei eemaldamisega. Kui arvuti kasutamine ja arvuti Setup keskkonda ligipääsemine on kaitstud nn firmware paroolidega, siis saab sellest muudatusest kasutaja kergesti aru järgmisel käivitamisel.

Märkus: mida teha sellisel juhul?

  • pahalane tagastab arvuti asendatud firmwarega (sh secure boot on välja lülitatud ja lisaks töötab taustal keylogger)
  • firmware kasutamine paistab nii nagu autentne firmware, sh küsib kasutajalt arvuti kasutamiseks vajalikku firmware parooli (ta reaalselt ei pööra sellele sisestusele tähelepanu, aga võiks saata selle sisestuse isandale üle võrgu)
  • arvuti käivitub edasi
  • käivitakse os'i bootiv efi rakendus (see võib olla algne või samuti asendatud; õige secure boot kasutusel ta ei käivituks, aga sb ei ole sisse lülitatud)
  • arvuti käivitumine jõuab luks parooli küsimiseni, kasutaja sisestab selle (keylogger saadab selle isandale üle võrgu)
  • käivitub operatsioonisüsteem (keylogger saadab jällegi andmeid isandale)

Ettevalmistused

Arvutisse on paigaldatud installeri abil tavalisel viisil krüptitud plokkseadet kasutav Ubuntu. Tulemus paistab selline

  • /boot - eraldi failisüsteem gpt partitsioonil (võib olla, et mingid installerid ei tekitagi seda eraldi failisüsteemina)
  • /boot/efi - eraldi failisüsteem gpt esp partitsioonil
  • / - eraldi failisüseem lvm köide
  • swap - eraldi lvm köide
  • lvm köited asuvad ühes köidete grupis, ja see omakorda ühel luks seadmel
  • kasutatakse grub bootloaderit

Lisaks

  • setup keskkonnas on Secure Boot välja lülitatud ning eemaldatud kõik võtmed (st arvuti on Secure Boot mõttes setup mode'is (mida defineerib olukord kui PK ei ole laaditud)), tulemusena peab olema selline väljund
# efi-readvar 
Variable PK has no entries
Variable KEK has no entries
Variable db has no entries
Variable dbx has no entries
Variable MokList has no entries
  • setup keskkonnas on kehtestatud kaks parooli: 1. arvuti kasutamisele üldse, 2. arvuti setup keskkonda sisenemisele

Lõpetada /boot kasutamine eraldi failisüsteemist (/boot/efi kastuamine eraldi failisüsteemist jätkub), /boot sisu kopeeritakse juurikale

# umount /boot/efi
# umount /boot
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# rsync -avH /mnt/boot/ /boot/
# umount /mnt/boot
# mount /boot/efi

ning eemaldada /boot rida /etc/fstab failist.

Secure Boot võtmete moodustamine ja juurutamine

Väited

  • SB sertifikaadid (neid nimetatakse millegipärast võtmeteks) on üksteisest sõltumatud selles mõttes, et KEK sertfikaat ei pea olema nö PKI'nduse mõttes signeeritud PK poolt vms; antud juhul on kõik self-signed
  • käesoleval juhul kasutatakse ainult DB võtit efi rakenduse allkirjastamiseks
  • käesoleval juhul on oluline, et võtmed ei satu pahalase kätte (kui võtmed kaotsi lähevad ei ole probleem võtta kasutusele uus komplekt)
  • MOK'i ei kasutata üldse

Ubuntu keskkonnas tekitatakse Secure Boot uued võtmed

  • PK
# openssl req -new -x509 -newkey rsa:2048 -subj "/CN=PK/" -keyout PK.key -out PK.crt -days 3650 -nodes -sha256
  • KEK
# openssl req -new -x509 -newkey rsa:2048 -subj "/CN=KEK/" -keyout KEK.key -out KEK.crt -days 3650 -nodes -sha256
  • DB
# openssl req -new -x509 -newkey rsa:2048 -subj "/CN=DB/" -keyout DB.key -out DB.crt -days 3650 -nodes -sha256

ning

# chmod 0400 *.key

Seejärel tuleb võtmete formaate teisendada selliselt, et neid saaks kasutada

# cert-to-efi-sig-list -g "$(uuidgen)" PK.crt PK.esl
# sign-efi-sig-list -k PK.key -c PK.crt PK PK.esl PK.auth

Laadida võtmed

# efi-updatevar -c KEK.crt KEK
# efi-updatevar -c DB.crt db
# efi-updatevar -f PK.auth PK

Kasulikud lisamaterjalid

objcopy efi rakenduse moodustamine ja juurutamine

NB! Nende tegevuste eel on mõistlik tekida töötavast seisust koopia ja see pärast kustutada, nt

# cp -a /boot/efi/EFI /boot/efi/EFI-orig

objcopy progammi abil moodustatakse tuuma ja initramfs'i sisaldav efi rakendus

# cat make-objcopy.sh 
objcopy \
    --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \
    --add-section .cmdline="cmdline.txt" --change-section-vma .cmdline=0x30000 \
    --add-section .linux="/boot/vmlinuz-4.8.0-52-generic.efi.signed" --change-section-vma .linux=0x40000 \
    --add-section .initrd="/boot/initrd.img-4.8.0-52-generic" --change-section-vma .initrd=0x3000000 \
    /usr/lib/systemd/boot/efi/linuxx64.efi.stub /boot/efi/EFI/ubuntu/shimx64.efi.unsigned

objcopy signeerimine

# sbsign --key DB.key --cert DB.crt --output /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/ubuntu/shimx64.efi.unsigned

Tulemuse kontroll

# sbverify --cert DB.crt --verbose /boot/efi/EFI/ubuntu/shimx64.efi
warning: data remaining[50092056 vs 50100088]: gaps between PE/COFF sections?
image signature issuers:
 - /CN=Imre kernel-signing key
image signature certificates:
 - subject: /CN=Imre kernel-signing key
   issuer:  /CN=Imre kernel-signing key
certificate store:
 - subject: /CN=Imre kernel-signing key
   issuer:  /CN=Imre kernel-signing key
Signature verification OK

Kasulikud lisamaterjalid

Tuuma mooduli signeerimine

Signeerida on tarvis omalt poolt süsteemi lisatud moodulid, nt dkms abil paigaldatud nvidia v. 375 moodul

Esmalt teha signeeritavad moodulid kindlaks, nt

# find /lib -name \*ko -type f -mmin -200 -ls
  5116300   1064 -rw-r--r--   1 root     root      1088354 mai   25 00:54 /lib/modules/4.8.0-52-generic/updates/dkms/nvidia_375_modeset.ko
  5116328     88 -rw-r--r--   1 root     root        87646 mai   25 00:55 /lib/modules/4.8.0-52-generic/updates/dkms/nvidia_375_drm.ko
  5116329     24 -rw-r--r--   1 root     root        23162 mai   25 00:55 /lib/modules/4.8.0-52-generic/updates/dkms/bbswitch.ko
  5116334   1100 -rw-r--r--   1 root     root      1124938 mai   25 00:56 /lib/modules/4.8.0-52-generic/updates/dkms/nvidia_375_uvm.ko
  5116335  16160 -rw-r--r--   1 root     root     16545770 mai   25 00:56 /lib/modules/4.8.0-52-generic/updates/dkms/nvidia_375.ko

seejärel leida singneerimise utiliit

# find / -name sign-file
...
/usr/src/linux-headers-4.8.0-52-generic/scripts/sign-file

ning signeerimiseks öelda, olemaolev fail asendatakse

# /usr/src/linux-headers-4.8.0-52-generic/scripts/sign-file sha256 DB.key DB.crt /lib/modules/4.8.0-52-generic/updates/dkms/nvidia_375_modeset.ko

Süsteemi kasutamine

Enne süsteemi kasutamist tuleb Setup keskkonnas Secure Boot sisse lülitada

Disabled -> Enabled

Bootimisel 'ubuntu' le vastava UEFI valikuga käivitakse objcopy ning hakkab tööle operatsioonisüsteem, üsna algul küsitakse juurfailisüteemi all oleva luks plokkseadme lahti krüptimiseks parooli.

Kui süsteemis uuendeb tuum või muutub initramfs sisu, tuleb uuesti käivitada make-objcopy.sh skript.

Märkused

  • nn objcopy efi rakenduse kasutamine on kohmakas, aga tundub, et alternatiivid ei ole ka head
  • objcopy üks alternetiiv oleks kasutada GRUB bootloaderit, mis küsib juurika peal oleva /boot seest tuuma lugemiseks luks parooli, aga sellega on nö jamad ja ei hakka tööle hästi (kui kunagi hakkab, oleks hea variant ehk)
  • tpm (trusted platform module) on teine alternatiiv (secure boot jätta täiesti välja) kuid siis on plokkseade kasutatav ainult konkreetse füüsilise arvutiga

Riistvara kasutamine

Intel i915 videokaart

Arvutis Lenovo t460p esineb Intel i915 videokaardi ja tuum v. 4.8.0 i915 draiveriga

# lspci -v
..

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06) (prog-if 00 [VGA controller])
        Subsystem: Lenovo Skylake Integrated Graphics
        Flags: bus master, fast devsel, latency 0, IRQ 128
        Memory at f2000000 (64-bit, non-prefetchable) [size=16M]
        Memory at c0000000 (64-bit, prefetchable) [size=512M]
        I/O ports at e000 [size=64]
        [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
        Capabilities: [40] Vendor Specific Information: Len=0c <?>
        Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
        Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-
        Capabilities: [d0] Power Management version 2
        Capabilities: [100] #1b
        Capabilities: [200] Address Translation Service (ATS)
        Capabilities: [300] #13
        Kernel driver in use: i915
        Kernel modules: i915

välise 4k monitori kasutamisel tõrkeid. Pilt väriseb, peale pikemat sisselülitatud arvuti mitte kasutamist vilgub (mõni sekund on eraan pime, siis 5 sekundit korras jne, umbes 10 min jooksul). Tundub aitab kasutada sellised i915 suvandeid (päris korda ei saa, aga oluliselt paremaks)

# cat /etc/modprobe.d/i915.conf 
options i915 enable_rc6=7 enable_psr=1

Muudatuse kehtestamiseks tuleb tekitada uus initramfs tõmmis

# update-initramfs -u

Tulemuse kontrollimiseks (tundub, et rc6 väärtuseks kehtestatakse siiski 1)

# systool -v -m i915 | egrep "psr|rc6"
   enable_psr          = "1"
   enable_rc6          = "1"

NVIDIA GeForce 940MX

# apt-get intall nvidia-375

NVIDIA PRIME sistema abil saab lülitada NVIDIA kasutamist sisse ja välja.

SSD ketta kasutamine

Maksab pöörata tähelepanu, et kõik andmesalvestuse kihid toetavad trim funktsionaalsust

  • cryptsetup
# cat /etc/crypttab 
sda3_crypt UUID=82394b29-3768-4217-9ad7-7f10cfda97d9 none luks,discard
  • lvm
# grep discard /etc/lvm/lvm.conf | grep -v "\#"
  issue_discards = 1
  • ext4
# grep discard /etc/fstab 
/dev/mapper/xubuntu--vg-root /  ext4    errors=remount-ro,discard 0       1

Tarkvara kasutamine

XFCE

  • guest sessiooniga keskkonda sisselogimise keelamine
# cat /etc/lightdm/lightdm.conf.d/50-no-guest.conf
[Seat:*]
allow-guest=false
  • tuttavama Panel ja nn start menüü saab valides
Settings -> Xfce Panel Switch -> Xfce 4.12

XFCE 4.12 kataloogi XUbuntu v. 16.04 keskkonnas

Folderi moodustamiseks lisatakse faili ~/.config/menus/xfce-applications.menu sektsioon

..
        <Menu>
                <Name>folder-moraal-kontor</Name>
                <Directory>folder-moraal-kontor.directory</Directory>
                <DirectoryDir>/home/imre/.local/share/desktop-directories</DirectoryDir>
                <Layout>
                        <Merge type="menus" />
                        <Merge type="files" />
                </Layout>
        </Menu>
...

Lisatakse fail ~/.local/share/desktop-directories/folder-moraal-kontor.directory

[Desktop Entry]
Version=1.0
Type=Directory
Name=Moraal kontor
Icon=applications-other
NoDisplay=false
Categories=X-XFCE;X-Xfce-Toplevel;
StartupNotify=false
Terminal=false

Sissekannete tegemiseks lisatakse fail ~/.config/menus/applications-merged/user-folder-moraal-kontor.menu

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
    "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<!-- Do not edit manually - generated and managed by xdg-desktop-menu -->
<Menu>
    <Name>Applications</Name>
<Menu>
    <Name>folder-moraal-kontor</Name>
    <Directory>folder-moraal-kontor.directory</Directory>
    <Include>
        <Filename>l-moraal-dom0.desktop</Filename>
        ..

    </Include>
</Menu>
</Menu>

ning enne tegeldud faili ~/.config/menus/xfce-applications.menu sektsiooni selline muudatus

        <Menu>
                <Name>folder-moraal-kontor</Name>
                <Directory>folder-moraal-kontor.directory</Directory>
                <DirectoryDir>/home/imre/.local/share/desktop-directories</DirectoryDir>
                <Layout>
                        <Merge type="menus" />
                        <Filename>l-moraal-dom0.desktop</Filename>
                        <Merge type="files" />
                </Layout>
        </Menu>

ning lõpuks .desktop fail ~/.local/share/applications/l-moraal-dom0.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=moraal-dom0
Icon=application-default-icon
Exec=xterm
NoDisplay=false
Categories=X-XFCE;X-Xfce-Toplevel;folder-moraal-kontor;
StartupNotify=false
Terminal=false

Operatsioonisüsteemi Debian kasutamine

Analoogiliselt saab käivitada süsteemi ka operatsioonisüsteemiga Debian, kuid seejuures on mugav kasutada Ubuntu abi kuna Debian ei sisalda piisavalt SB tööks vajalikke vahendeid paketihaldusest.

Kasulikud lisamaterjalid