random hackery

2007-03-24

bazė – crypto 2 – home

Filed under: base, crypto — Almantas Karvelis @ 03:58

Taigi, tęsiant temą – namų kriptokonteineriai.

Aš naudosiu 500MB konteinerį – home’ui pilnai pakaks. Jei reikės saugoti didesnius duomenų masyvus – pasidarysiu papildomus konteinerius, be to, noriu turėti galimybę bakupuoti konteinerio failą į CD-RW (DVD mano laptopas tik skaito, bet nerašo). Konteinerio šifravimui naudosime Dm-crypt su LUKS infrastruktūrą – ji leidžia neskausmingai pakeisti kriptokonteinerio slaptažodį. Viską konfigūruosiu root vartotojo naudojimui – kaip jau minėjau – tai nėra serveris ir laptopo saugumo reikalavimai kiek kiti – linux’e viską darysiu root teisėm – dėl daugelio planuojamų veiksmų techninių reikalavimų (pvz. darbas su branduoliu ar raw socket), na ir šiaip iš idėjos ;] plėšrūno o ne aukos mentaliteto skatinimui.

Visų pirma susikuriame reikiamo dydžio failą konteineriui:

base:~# mkdir /data
base:~# dd if=/dev/urandom of=/data/c.img bs=1M count=500

Pasitikriname, koks yra laisvas loopback įrenginys:

base:~# losetup -f
/dev/loop0

Pasidarome kriptokonteinerį (slaptažodis turi atitikti root vartotojo slaptažodį):

base:~# losetup /dev/loop0 /data/c.img
base:~# cryptsetup luksFormat /dev/loop0

WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

base:~# cryptsetup luksOpen /dev/loop0 cr
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

Pasitikriname, ar atsirado mapper įrenginys:

base:~# ls /dev/mapper/cr
/dev/mapper/cr

Suformatuojame konteinerį ir jį primontuojame:

base:~# mkfs.ext3 /dev/mapper/cr
base:~# mount /dev/mapper/cr /mnt
base:~# df -h | grep /mnt
/dev/mapper/cr        484M   11M  449M   3% /mnt

Kaip matome, viskas OK, taigi, galime atmontuoti ir iškonfigūruoti įrenginį:

base:~# umount /mnt/
base:~# cryptsetup luksClose /dev/mapper/cr
base:~# losetup -d /dev/loop0

Dabar mums reikia, kad konteineris būtų montuojamas, kai prisijungiame prie sistemos, ir atmontuojamas, kai atsijungiame. Tam idealiausiai tinka pam-mount:

base:~# apt-get install libpam-mount

Sukonfigūruojame konteineri montavimui per pam-mount:

base:~# echo "volume root crypt - /data/c.img /root loop - -" \
>> /etc/security/pam_mount.conf

Belieka pridėti eilutę “@include common-pammount” į atitinkamą failą /etc/pam.d/ direktorijoje, tačiau dabar – mažytis lyrinis nukrypimas:

Kažkada buvo toks senas tarybinis filmas Variantas “Omega” , pastatytas pagal to paties pavadinimo romaną. Jeigu aš gerai prisimenu – tame filme buvo labai geras “kontrolės požymio” koncepcijos pavyzdys: tarybinis žvalgas siusdamas radiogramas į centrą nenaudodavo punktuacijos – nedėdavo taškų sakinių gale. Jeigu centras gautu pranešimą su taškais sakiniuose – tai reikštų kad žvalgas suimtas, jo eteris kontroliuojamas, ir pranešimas – priešo siunčiama dezinformacija.

Kažkokį panašų, iš šalies sunkiai atspėjamą “kontrolės požymį” kartais pravartu turėti ir dirbant su savo sistema, kad kompiuteris (bet tik jis) suprastų, kad jo šeimininko veiksmai kontroliuojami ir pats imtųsi iniciatyvos apsaugoti save ir savo šeimininką.

Tokio “kontrolės požymio” pavyzdį galima realizuoti su mūsų kriptokonteineriu:

base:~# echo "@include common-pammount" >> /etc/pam.d/su

Dabar konteineris montuosis tik tuo atveju, jei vartotojas sėkmingai su’inasi į root’ą

user@base:~$ df -h | grep root
user@base:~$ su -
Password:
key slot 0 unlocked.
root@base:~# df -h | grep root
/dev/mapper/_data_c.img  484M   11M  449M   3% /root
root@base:~# exit
logout
user@base:~$ df -h | grep root
user@base:~$

Tačiau kai root’u loginames tiesiai, konteineris nemontuojamas:

base login: root
Password:
root@base:~# df -h | grep root
root@base:~#

Dabar reikėtų root’o namų direktorijoje diske sukurti start-skriptus, kurie ištrins kriptokonteinerio failą, visas jo konfigūracijas ir patys save. Normaliam darbui reikia jungtis prie sistemos paprastu vartotoju ir su’intis į root’ą. pam-mount primontuos konteinerį į root’o namų direktoriją, start-skriptai esantys fiziniame diske liks paslėpto mount’o ir nebus vykdomi. Kontrolės atveju galima drąsiai jungtis tiesiai root’u, o tada jau sistema pati viskuo pasirupins ;].

Aišku, čia tik pavyzdys, nes tokio tipo konfigūracijos visada remiasi Security through obscurity principu ir jų detalės neturėtų būti viešinamos.

Na ir pabaigai pora žodžių apie konteinerių rezervinį kopijavimą – kaip tikras asfalto vaikas darysiu tai po windows, paėmęs failą iš linux arba scp/sftp per VMware, arba pvz. šituo. Jeigu man reikėtų pasiekti konteinerio turinį iš windows, naudočiau FreeOTFE + ext2ifs. Plačiau – FreeOTFE dokumentacijoje.

2007-03-23

bazė – crypto

Filed under: base, crypto — Almantas Karvelis @ 05:15

Just because you’re paranoid, doesn’t mean they’re not after you.

Tikslas:
– šifruotas swap
– sistemos logai TMPFS’e
home kriptokonteineris

Šifravimui naudosime Dm-crypt .
Sudedame įrankius ir įkraunam modulį (po reboot’o modulis bus užkrautas automatiškai):

base:~# apt-get install cryptsetup
base:~# modprobe dm_crypt

Patikriname, ar viską turime:

base:~# ls /dev/mapper/control
/dev/mapper/control

base:~# dmsetup targets | grep crypt
crypt            v1.1.0 

base:~# grep ENABLE /etc/default/cryptdisks
CRYPTDISKS_ENABLE=Yes

– sutvarkome swap šifravimą

Įtraukiame swap eilutę į /etc/crypttab (hda5 yra mūsų swap particija):

cswap /dev/hda5 /dev/urandom swap

Pakeičiame swap eilutę /etc/fstab , kad naudotų Dm įrenginį:

/dev/mapper/cswap none swap sw 0 0

Profilaktiškai pravalome esamą swap’ą:

base:~# swapoff /dev/hda5
base:~# dd if=/dev/urandom of=/dev/hda5 bs=1M

perkrauname sistemą ir pradedame naudoti šifruotą swap particiją.

– perkeliame /var/log į TMPFS.
kadangi tai nėra serveris tik aktualūs logai turi prasmę. Jų perkėlimas i TMPFS padidins sistemos anonimiškumą, o kadangi swap jau šifruotas, galime nepergyventi kad ten kas nors nutekės.

Pridedame eilutę į /etc/fstab:

tmpfs /var/log tmpfs defaults 0 0

Kai kurie logų failai ar direktorijos turi jau egzistuoti prieš jų panaudojimą, todėl parašome mažą pagalbinį skriptą, paleidžiamą prieš syslog demoną:

base:~# vi /etc/init.d/logs
#!/bin/sh
LD="exim4 fsck" # direktorijos
LF="wtmp btmp" # failai
for ld in $LD
do
 if [ ! -d /var/log/${ld} ]; then
  /bin/mkdir /var/log/${ld}
fi
done
for lf in $LF
do
 /usr/bin/touch /var/log/${lf}
done

base:~# chmod +x /etc/init.d/logs
base:~# for link in /etc/rc{2,3,4,5}.d/S10logs; \
do ln -sf ../init.d/logs  $link; done

viską aktyvuojame:

base:~# /etc/init.d/sysklogd stop
base:~# rm -rf /var/log/*
base:~# mount -a
base:~# /etc/init.d/logs
base:~# /etc/init.d/sysklogd start

sekantis žingsnis – home kriptokonteineineris

Blog at WordPress.com.