Milé děti,
v dnešní hodině si ukážeme, jak lépe zabezpečit svůj počítač před napadením pomocí
AppArmor. Sice jsem se také zrovna vrátila ze stáže, ale protože mě pan ředitel pověřil tímto úkolem, pokusím se ho zhostit nejlépe jak umím.
Za domácí úkol jsem vám zadala prostudovat teoretické podklady:
http://wiki.ubuntu.cz/AppArmorPokud vám v dnešní hodině nebude něco jasné, vzpomeňte si na DÚ, anebo rychle nalistujte příslušnou stránku...
Takže:
Ukázka tvorby profilu v AppArmor na Skypu
Skype jsem vybrala proto, že je to takový jakýsi blob furt připojený k internetu, o kterém ani pořádně nevíme, co dělá. Zkusíme se mu tedy kouknout na zoubek a případně mu utnout tipec. Na druhou stranu je to možná příliš velké sousto pro začátečníky, ale co už.
Otevřeme si dva
Terminály, v jednom budeme upravovat profil, kde nastavíme, co Skypu povolíme a co už ne
sudo nano /etc/apparmor.d/usr.bin.skype
a v druhém budeme sledovat logy
tail -f /var/log/syslog
Nejdřív vytvoříme základní profil pro Skype (inspirujeme se openSUSáckým profilem z balíku
apparmor-profiles).
----------------------------------------------------------
# Last Modified: Mon Oct 26 13:29:13 2009
# REPOSITORY: http://apparmor.test.opensuse.org/backend/api draglor 53
# Additional profiling based on work by Андрей Калинин, LP: #226624
# zahrneme základní proměnné
#include <tunables/global>
/usr/bin/skype {
# v této části zahrneme předpřipravené profily, které povolují základní přístup,
# a které Skype nutně potřebuje - podrobnosti viz wiki
# pro používání zvuku
#include <abstractions/audio>
# základní knihovny nutné pro každý program
#include <abstractions/base>
# použití fontů
#include <abstractions/fonts>
# přístup k ikonám, naposledy uloženým souborům...
#include <abstractions/freedesktop.org>
# základní nastavení pro Gnome
#include <abstractions/gnome>
# základní nastavení pro sítě a internet
#include <abstractions/nameservice>
# přístup k dočasným adresářům
#include <abstractions/user-tmp>
# základní nastavení pro X server
#include <abstractions/X>
# povolíme čtení všech adresářů (vždy končí na lomítko!)
# ale ne souborů
/ r,
/**/ r,
# pokud chceme použít videokameru
# potřebujeme přístup k /dev/video*
/dev/video* mrw,
# Skype musí být schopen číst, spouštět a zamykat z vlastních adresářů
/usr/bin/skype mr,
/usr/share/skype/** kr,
/usr/share/skype/sounds/*.wav kr,
# totéž platí pro nastavení v domovském adresáři
@{HOME}/.Skype/ rw,
@{HOME}/.Skype/** krw,
@{HOME}/.config/* kr,
}
Uložíme, nahrajeme profil do AppArmor
sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.skype
spustíme Skype a sledujeme, co se bude dít v logách.
První spuštění-------------------------
Skype se tak nějak spustil, ale log je plný "prohřešků":
denied_mask="::m" fsuid=1000 ouid=0 name="/usr/lib/libv4l/v4l1compat.so"Povolíme, je potřeba spustit z důvodu kompatibility mezi v4l1 a v4l2.
denied_mask="::m" fsuid=1000 ouid=0 name="/etc/passwd"Na co mapovat
/etc/passwd jako spustitelný? Čtení stačí - to už jsme povolili v
abstractions/nameservice! Zakázat.
denied_mask="::r" fsuid=1000 ouid=0 name="/proc/2439/net/route"Informace k síti číst může.
denied_mask="r::" fsuid=1000 ouid=1000 name="~/.mozilla/firefox/58qx31qt.default/prefs.js"No tak moment! Nevím, proč bych Skypu a kdoví komu ještě měl prozrazovat mé nastavení FF, včetně záznamů doplňků. Zakázat!
denied_mask="m::" fsuid=1000 ouid=1000 name="/dev/shm/pulse-shm-2861101225"viz
/etc/passwddenied_mask="::r" fsuid=1000 ouid=0 name="/proc/filesystems"Povolíme přečtení dostupných filesystémů.
denied_mask="::m" fsuid=1000 ouid=0 name="/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf"viz
/etc/passwdTakže do profilu přidáme
/usr/lib/libv4l/v4l1compat.so rm,
deny /etc/passwd m,
@{PROC}/[0-9]*/net/route r,
deny @{HOME}/.mozilla/** r,
deny /dev/shm/pulse-shm-[0-9]* m,
@{PROC}/filesystems r,
deny /usr/share/fonts/** m,
(to
deny je zde jen proto, aby nám nezahlcovalo logy)
Takto může následovat nekonečná řada úpravy profilu, uložení,
apparmor_parser -r, spuštění Skypu, kontrola logů, až ke konečnému vítězství. Já jsem nakonec došla k něčemu takovému, ale chce to ještě doladit
# REPOSITORY: http://apparmor.test.opensuse.org/backend/api draglor 53
#include <tunables/global>
/usr/bin/skype {
#include <abstractions/audio>
#include <abstractions/base>
#include <abstractions/fonts>
#include <abstractions/freedesktop.org>
#include <abstractions/gnome>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/X>
#include <abstractions/dbus>
# povolíme čtení adresářů (vždy končí na lomítko!)
# ale ne souborů
/ r,
/**/ r,
# pokud chceme použít videokameru
# potřebujeme přístup k /dev/video*
/dev/video* mrw,
# Skype musí být schopen číst, spouštět a zamykat z vlastních adresářů
/usr/bin/skype mr,
/usr/share/skype/** krm,
/usr/share/skype/sounds/*.wav kr,
# totéž platí pro nastavení v domovském adresáři
@{HOME}/.Skype/ rw,
@{HOME}/.Skype/** krw,
@{HOME}/.config/* kr,
# povolit přístup do Downloads, pokud by mi někdo poslal soubor
@{HOME}/Downloads/ rw,
@{HOME}/Downloads/** rw,
/usr/lib/libv4l/v4l1compat.so rm,
@{PROC}/[0-9]*/net/route r,
@{PROC}/filesystems r,
/sys/devices/** r,
deny @{HOME}/.mozilla/** r,
deny /etc/passwd m,
deny /dev/shm/pulse-shm-[0-9]* m,
deny /usr/share/fonts/** m,
}
Takže za DÚ: udělat si vlastní funkční profil! Příští týden bude písemka!