Ubuntu se nazývá vysoce zabezpečený operační systém, který je k dispozici, ale má chyby ve výchozí instalaci jako každý jiný operační systém. K odstranění těchto slabin vydal specialista IT Security pokyny pro boj se zadními vrátky/slabými stránkami vašeho systému a pro ochranu před některými běžnými exploity Ubuntu. V této příručce se podíváme na několik důležitých nastavení zabezpečení, které chce každý správce systému použít na svém serveru.
1. Harden boot nastavení
Chcete-li zabránit uživatelům bez oprávnění root ve změně konfiguračního souboru zavaděče, kterým je /boot/grub/grub.cfg, nastavte vlastníky a skupiny tohoto souboru na root. Provedením následujícího příkazu změňte vlastnictví na root.
# chown root:root /boot/grub/grub.cfg
Chcete-li zabránit uživatelům bez oprávnění root ve čtení spouštěcích parametrů, nastavte oprávnění pro soubor zavaděče pouze pro čtení a zápis. K dosažení tohoto benchmarku spusťte následující příkaz.
# chmod og-rwx /boot/grub/grub.cfg
Nastavte také heslo pro zavaděč, aby každý neoprávněný uživatel, který se pokouší restartovat systém, musel zadat heslo, aby mohl pokračovat k dalšímu kroku. To zajišťuje, že neoprávněný uživatel nebude moci změnit spouštěcí parametr, jako je zakázání SELinuxu nebo změna zaváděcího oddílu. Provedením následujícího příkazu vytvořte heslo zavaděče.
# grub-mkpasswd-pbkdf2
Nyní vytvořte nový soubor s názvem /etc/grub.d/00_header a přidejte následující řádky.
set superusers="
password_pbkdf2 <šifrované-heslo>
Odeberte volbu --unrestricted v parametru CLASS souboru /etc/grub.d/10_linux . Tím je zajištěno povinné heslo pro přechod k dalšímu kroku, tj. úprava spouštěcích parametrů.
Aktualizujte grub
# update-grub
2. Zabezpečený souborový systém
Vytvářejte oddíly založené na různých kategoriích, jako jsou uživatelská data v oddílu /home, odkládací soubory v oddílu /swap, dočasné soubory v oddílu /tmp, systémové konfigurační soubory v oddílu /etc, soubory zařízení v oddílu /dev atd. To zabrání vyčerpání zdrojů, např. také flexibilní možnosti montáže založené na zamýšleném využití dat.
2.1 Vytvořte oddíl pro /tmp
První důvod pro vytvoření samostatného oddílu pro /tmp je, že existuje šance na vyčerpání zdrojů, protože adresář /tmp je zapisovatelný do celého světa. Vytvoření samostatného oddílu pro /temp také umožňuje nastavit volbu noexec, což znamená, že je pro neautorizovaného uživatele zbytečné spouštět kód a pevný odkaz na program setuid systému.
2.2 Nastavit volbu nodev pro /tmp
Nastavte volbu nodev pro oddíl /tmp, abyste zabránili uživatelům ve vytváření souboru blokového/znakového zařízení. Upravte soubor /etc/fstab a přidejte následující řádek.
# mount -o remount,nodev /tmp
2.3 Nastavit volbu nosuid pro /tmp
Chcete-li uživatelům zabránit ve vytváření nastavených souborů ID uživatele v systému souborů /tmp, přidejte do /etc/fstab následující řádek, protože systém souborů /tmp se používá pro dočasné ukládání souborů.
# mount -o remount,nosuid /tmp
2.4 Nastavit volbu noexec pro /tmp
Chcete-li uživatelům zabránit ve spouštění spustitelných binárních souborů, nastavte volbu noexec pro oddíl /tmp. Přidejte následující řádek do /etc/fstab, abyste zablokovali běh spustitelných binárních souborů.
# mount -o remount,noexec /tmp
2.5 Vytvořte samostatný oddíl pro /var
Systémoví démoni a další služby dočasně ukládají dynamická data do /var, přičemž některé adresáře mohou být zapisovatelné do celého světa. Proto existuje šance na vyčerpání zdrojů v /var. Abyste předešli vyčerpání zdrojů ve /var, vytvořte v nové instalaci samostatný oddíl pro /var a pro dříve nainstalovaný systém použijte k vytvoření nového oddílu LVM.
2.6 Svázat /var/tmp na /tmp
Vazebné připojení /var/tmp k /tmp umožní, aby byl /var/tmp chráněn stejným způsobem jako /tmp. To také zabrání /var ve vyčerpání paměti v /var/tmp dočasnými soubory. Proveďte následující příkaz pro svázání /tmp a /var/tmp
# sudo mount --bind /tmp /var/tmp
Aby to bylo trvalé, přidejte následující řádek do /etc/fstab
# /tmp /var/tmp none bind 0 0
2.7 Vytvořte samostatný oddíl pro /var/log
Pro ochranu citlivých dat auditu a ochranu před vyčerpáním zdrojů vytvořte samostatný oddíl pro /var/log in novou instalaci a pro dříve nainstalovaný systém použijte k vytvoření nového oddílu LVM.
2.8 Vytvořte samostatný oddíl pro /var/log/audit
Démon auditu ukládá data protokolu do adresáře /var/log/audit. Chcete-li se chránit před vyčerpáním zdrojů, protože protokol auditu může narůst do velké velikosti, a také pro ochranu citlivých dat auditu, vytvořte v nové instalaci samostatný oddíl pro /var/log/audit a pro dříve nainstalovaný systém použijte k vytvoření nového oddílu LVM.
2.9 Vytvořte samostatný oddíl pro /home
Uživatelská data jsou uložena v adresáři /home. Je možné omezit typ souborů, které mohou být uloženy v /home. Chcete-li toho dosáhnout, vytvořte samostatný oddíl pro /home v nové instalaci a pro dříve nainstalovaný systém, použijte k vytvoření nového oddílu LVM. Také samostatný oddíl pro /home chrání před vyčerpáním zdrojů.
2.10 Nastavení nodev pro /home
Chcete-li zabránit použití adresáře /home pro definování znakového a blokového speciálního zařízení, nastavte volbu nodev tak, aby uživatelé nemohli vytvářet tyto typy souborů. Upravte soubor /etc/fstab a přidejte do něj následující řádky.
# mount -o remount, nodev /home
2.11 Nastavení nodev pro vyměnitelná média
Uživatel může oklamat bezpečnostní kontroly pomocí znaků a blokovat speciální zařízení z vyměnitelných médií pro přístup k citlivým souborům zařízení, jako je /dev/kmem. Upravte soubor /etc/fstab a přidejte do něj následující řádky.
# mount -o remount, nodev { removable device like floppy or cdrom or USB stick etc. }
2.12 Nastavit noexec na vyměnitelné médium
Chcete-li zabránit spouštění programů z vyměnitelných médií, aby do systému nemohly být umístěny žádné škodlivé programy, přidejte následující řádky do /etc/fstab
# mount -o remount,noexec { removable device like floppy or cdrom or USB stick etc. }
2.13 Přidání nosuid na vyměnitelné médium
Zabránit použití vyměnitelného média jako setuid/setgid, což umožňuje uživatelům bez oprávnění root umístit privilegované programy do systému. Upravte /etc/fstab a přidejte do něj následující řádky
# mount -o remount,nosuid { removable device like floppy or cdrom or USB stick etc. }
2.14 Přidat volbu nodev pro oddíl /run/shm
Chcete-li uživatelům zabránit ve vytváření speciálních souborů zařízení v oddílech /run/shm, přidejte do /etc/fstab následující řádek. To zajistí, že uživatelé nebudou moci vytvářet zařízení v /run/shm
# mount -o remount,nodev /run/shm
2.15 Přidat volbu nosuid do oddílu /run/shm
Chcete-li zabránit použití /run/shm jako setuid/setgid, umožňuje to uživatelům bez oprávnění root umístit privilegované programy do systému. Uživatelé mohou spustit program s vlastním uid a gid. Upravte /etc/fstab a přidejte do něj následující řádky
# mount -o remount,nosuid /run/shm
2.16 Přidat noexec do oddílu /run/shm
Chcete-li zabránit použití oddílu /run/shm pro spouštění programů, přidejte následující řádky do /etc/fstab
# mount -o remount, noexec /run/shm
2.17 Nastavit lepivý bit na světové zapisovatelné adresáře
Chcete-li uživatelům zabránit ve smazání nebo přejmenování souborů v tomto adresáři, které nevlastní, nastavte sticky bit na.
# chmod +t /tmp
or
# chmod 1777 /tmp
3. Zahoďte starší systémy
Neinstalujte a nepoužívejte následující starší služby a nástroje, protože tyto systémy/nástroje obsahují zranitelná místa. Jsou to - NIS , RSH server/klient , talk server/klient , Telenet, TFTP, XINETD, Chargen, Daytime, echo, discard, time
4. Zahoďte služby pro zvláštní účely
Neinstalujte a nepoužívejte následující služby, protože tyto služby obsahují chyby zabezpečení. Tyto jsou-
Systém X Window, tiskový server Avahi Server, server DHCP, LDAP, NFS a RPC, server DNS, FTP, Samba, SNMP, Rsync, BIOSDEVNAME. Jen málo z výše uvedených služeb je skutečně potřeba pro každodenní provoz, jako je DNS server. V takovém případě je vhodné nainstalovat tyto servery do samostatného hostitele, který neobsahuje žádná citlivá data.
5. Konfigurace sítě a firewall
5.1 Deaktivace přesměrování IP
Chcete-li zabránit tomu, aby byl server používán k předávání paketů, tj. aby fungoval jako router, nastavte parametr net.ipv4.ip_forward na 0 v /etc/sysctl.conf
net.ipv4.ip_forward = 0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.2 Zakázat přesměrování sendpacket
Neoprávněný uživatel může využít kompromitovaného hostitele k odesílání přesměrování ICMP paketů na jiné směrovací zařízení k poškození směrování. Chcete-li zakázat přesměrování paketů, nastavte parametry net.ipv4.conf.all.send_redirects a net.ipv4.conf.default.send_redirects na 0 v /etc/sysctl.conf
# net.ipv4.conf.all.send_redirects = 0
# net.ipv4.conf.default.send_redirects =0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.3 Zakázat přijímání paketů zdrojové trasy
Pomocí zdrojových směrovaných paketů může uživatel získat přístup k soukromé adrese systému, protože lze zadat směrování.
Nastavte parametry net.ipv4.conf.all.accept_source_route a net.ipv4.conf.default.accept_source_route na 0 v /etc/sysctl.conf
# net.ipv4.conf.all.accept_source_route=0
# net.ipv4.conf.default.accept_source_route=0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.4 Zakázat přijímání přesměrování ICMP
Uživatel může změnit směrovací tabulku tak, aby posílala pakety do nesprávných sítí pomocí falešného přesměrování ICMP, což umožňuje zachycení paketů. Chcete-li zakázat přijímání přesměrování ICMP, nastavte parametry net.ipv4.conf.all.accept_redirects a net.ipv4.conf.default.accept_redirects na 0 v /etc/sysctl.conf
# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.default.accept_redirects parameters = 0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.5 Zakažte přijetí zabezpečeného přesměrování ICMP
Zabezpečená přesměrování ICMP a přesměrování ICMP jsou téměř stejná, rozdíl je pouze v tom, že zdrojem přesměrování zabezpečených ICMP je brána. Pokud je zdrojová brána ohrožena, může uživatel aktualizovat směrovací tabulku pomocí přesměrování Secure ICMP.
Nastavením parametrů net.ipv4.conf.all.secure_redirects a net.ipv4.conf.default.secure_redirects na 0 v souboru /etc/sysctl.conf deaktivujete Secure ICMP Redirect Acceptance.
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.6 Protokolovat podezřelé pakety
Správce může diagnostikovat systém, když útočník posílá falešné pakety.
Abyste tomu zabránili, nastavte parametry net.ipv4.conf.all.log_martians a net.ipv4.conf.default.log_martians na 1 v /etc/sysctl.conf.
# net.ipv4.conf.all.log_martians=1
# net.ipv4.conf.default.log_martians=1
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.7 Povolit ignorování požadavku na vysílání
Chcete-li zabránit šmoulím útokům v síti, nastavte net.ipv4.icmp_echo_ignore_broadcasts na 1, což umožní systému ignorovat všechny požadavky ICMP echo a časová razítka na broadcast a multicastové adresy. Nastavte parametr net.ipv4.icmp_echo_ignore_broadcasts na 1 v /etc/sysctl.conf
# net.ipv4.icmp_echo_ignore_broadcasts=1
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.8 Povolit ochranu proti chybným zprávám
Chcete-li zabránit útočníkovi v odesílání odpovědí, které porušují RFC-1122, ve snaze vložit soubory protokolu systému se zbytečnými chybovými zprávami. Nastavením parametru net.ipv4.icmp_ignore_bogus_error_responses na 1 v /etc/sysctl.conf zablokujete falešné chybové reakce.
# net.ipv4.icmp_ignore_bogus_error_responses=1
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.9 Povolení ověřování zdrojové trasy doporučené RFC
Pomocí filtrování zpětné cesty může jádro určit, zda je paket platný, jinak paket zahodí.
Nastavte parametry net.ipv4.conf.all.rp_filter a net.ipv4.conf.default.rp_filter na 1 v /etc/sysctl.conf
# net.ipv4.conf.all.rp_filter=1
# net.ipv4.conf.default.rp_filter=1
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.10 Povolení souborů cookie TCP SYN
Útočník může zahájit útok DOS na serveru zahlcením paketů SYN bez inicializace třícestného handshake. Chcete-li tomu zabránit, nastavte parametr net.ipv4.tcp_syncookies na 1 v /etc/sysctl.conf
# net.ipv4.tcp_syncookies=1
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.10 Zakázat reklamu směrovače IPv6
Povolte serveru, aby nepřijímal reklamy směrovače, protože to může vést k pasti směrování provozu na kompromitované systémy.
Nastavte parametry net.ipv6.conf.all.accept_ra a net.ipv6.conf.default.accept_ra na 0 v /etc/sysctl.conf
# net.ipv6.conf.all.accept_ra=0
# net.ipv6.conf.default.accept_ra=0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.12 Zakázat přijímání přesměrování IPv6
Povolte serveru, aby nepřijímal reklamy směrovače, protože to může vést k pasti směrování provozu na kompromitované systémy. Doporučuje se nastavit v systému tvrdé cesty, aby byl systém chráněn před špatnými cestami.
Nastavte parametry net.ipv6.conf.all.accept_redirects a net.ipv6.conf.default.accept_redirects na 0 v /etc/sysctl.conf
# net.ipv6.conf.all.accept_redirects=0
# net.ipv6.conf.default.accept_redirects=0
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.13 Zakázat IPv6
Chcete-li snížit pravděpodobnost útoku v systému, vypněte IPv6
Upravte soubor /etc/sysctl.conf a přidejte následující řádky:
# net.ipv6.conf.all.disable_ipv6=1
# net.ipv6.conf.default.disable_ipv6=1
# net.ipv6.conf.lo.disable_ipv6=1
Nyní znovu načtěte konfiguraci sysctl
# sudo sysctl -p
5.14 Instalace TCP wrapperů
Použijte TCP wrappery pro všechny služby, které podporují TCP wrappery.
Nainstalujte tcpd:
# apt-get install tcpd
5.15 Vytvořte soubor /etc/hosts.allow
Chcete-li zajistit, že se k serveru mohou připojit pouze autorizované systémy, použijte /etc/hosts.allow
Upravte /etc/hosts.allow a přidejte následující
"ALL: <net>/<mask>, <net>/<mask>, …"
e.g <net> = 192.168.10.100 , <mask> = 255.255.255.0
5.16 Ověřte oprávnění na /etc/hosts.allow
Je důležité chránit /etc/hosts.allow před neoprávněným přístupem k zápisu. Provedením následujícího příkazu vyhledejte oprávnění /etc/hosts.allow
# ls -l /etc/hosts.allow
-rw-r--r-- 1 root root 2055 15. února 11:30 /etc/hosts.allow
Pokud je oprávnění nesprávné, opravte jej pomocí následujícího příkazu
#chmod 644 /etc/hosts.allow
5.17 Vytvořte soubor /etc/host s.deny
Odepřít přístup k serveru pomocí /etc/hosts.deny . Soubor /etc/hosts.deny je nakonfigurován pro odmítnutí
všichni hostitelé, kteří nejsou zmíněni v /etc/hosts.allow. Vytvořte soubor /etc/hosts.deny
echo "ALL:ALL">> /etc/hosts.deny
5.18 Ověřte oprávnění na /etc/hosts.deny
Je důležité chránit /etc/hosts.deny před neoprávněným přístupem k zápisu. Provedením následujícího příkazu vyhledejte oprávnění /etc/hosts.deny
# ls -l /etc/hosts.deny
-rw-r--r-- 1 root root 2055 Feb 15 11:30 /etc/hosts.deny
5.19 Ujistěte se, že je aktivní brána firewall
Chcete-li omezit komunikaci z krabice a z krabice na konkrétní IP adresu a port, použijte firewall. Ubuntu poskytuje Uncomplicated Firewall (UFW) pro snadnou konfiguraci konfigurace firewallu.
Nainstalujte UFW
# sudo apt-get install ufw
Aktivujte ufw:
# sudo ufw enable
příklad:
Povolit služby SSH a http.
# sudo ufw allow TCP/80
# sudo ufw allow TCP/22
# sudo ufw reload
6. Protokolování a audit
Pomocí výkonného rámce auditu může systém sledovat mnoho typů událostí pro monitorování a audit systému.
Nainstalujte auditd pomocí následujícího příkazu
sudo apt-get install auditd audispd-plugins
V případě potřeby vytvořte správné spouštěcí odkazy pro auditd v /etc/rc*.d spuštěním následujícího příkazu z každého z příslušných adresářů:
# ln -s /etc/init.d/auditd S37auditd
Spouštěcí odkazy by měly být vytvořeny pro úrovně běhu
6.1 Konfigurace velikosti úložiště protokolu auditu
Velikost souboru protokolu auditu by měla být vybrána pečlivě, aby neovlivnila systém a nedošlo ke ztrátě dat auditu.
Nastavte parametr max_log_file v /etc/audit/auditd.conf
max_log_file = <MB>
6.2 Zakázat systém při plném protokolu auditu
Démon auditu lze nakonfigurovat tak, aby zastavil systém, když jsou protokoly auditu plné. Proveďte následující, abyste zjistili, zda je auditd nakonfigurován tak, aby informoval správce a zastavil systém, když jsou protokoly auditu plné.
space_left_action = email
action_mail_acct = root
admin_space_left_action = halt
6.3 Uchovávejte všechny informace o auditu
V kontextu vysokého zabezpečení výhody udržování dlouhé historie auditu převyšují náklady na uložení historie auditu. Přidejte následující řádek do souboru /etc/audit/auditd.conf.
max_log_file_action = keep_logs
6.4 Záznam událostí, které mění informace o datu a čase
Sledování neobvyklých změn systémového data a/nebo času, což je známkou neoprávněné aktivity v systému.
Pro 64bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
Pro 32bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.6 Záznam událostí, které mění informace o uživateli/skupině
Neočekávané změny v /etc/group, /etc/passwd, /etc/gshadow, /etc/shadow, /etc/security/opasswd jsou jasnou známkou toho, že se neoprávněný uživatel pokouší skrýt své aktivity nebo kompromitovat další účty.
Přidejte následující řádky do souboru /etc/audit/audit.rules.
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.7 Zaznamenávejte události, které mění síťové prostředí systému
Chcete-li zabránit neoprávněným změnám názvu hostitele a domény systému za účelem porušení bezpečnostních parametrů, které jsou nastaveny na základě těchto jmen, přidejte následující řádky do /etc/audit/audit.rules
Pro 64bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a exit,always -F arch=b64 -S sethostname -S setdomainname -k system-locale
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
Pro 32bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a exit,always -F arch=b32 -S sethostname -S setdomainname -k system-locale
-w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale -w /etc/network -p wa -k system-locale
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.8 Zaznamenávejte události, které upravují povinné řízení přístupu systému
Jakékoli změny souborů v /etc/selinux znamenají, že se neoprávněný uživatel pokouší upravit řízení přístupu a změnit kontext zabezpečení, aby získal přístup do systému.
Přidejte následující řádky do /etc/audit/audit.rules
-w /etc/selinux/ -p wa -k MAC-policy
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.9 Shromažďování událostí přihlášení a odhlášení
Chcete-li sledovat informace související s přihlášením/odhlášením/útoky hrubou silou, přidejte následující řádky do souboru /etc/audit/audit.rules.
-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /var/log/tallylog -p wa -k logins
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.10 Shromažďování informací o zahájení relace
Sledujte události zahájení relace. Správce systému může sledovat přihlášení, ke kterému dochází v nezvyklou dobu, což by mohlo znamenat neoprávněnou aktivitu.
Přidejte následující řádky do souboru /etc/audit/audit.rules.
-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.11 Shromažďování událostí modifikace oprávnění řízení přístupu
Najděte změny v atributech souboru, což je známkou aktivity vetřelce.
Pro 64bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
# Provedením následujícího příkazu restartujte auditd
# restart auditované služby sudo
Pro 32bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=500 -F auid!=4294967295 -k perm_mod
-a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=500 -F auid!=4294967295 -k perm_mod
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.12 Shromažďování neúspěšných pokusů o neoprávněný přístup k souborům
Najděte neúspěšné pokusy o otevření, vytvoření nebo zkrácení souborů, abyste získali neoprávněný přístup do systému.
Pro 64bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
Pro 32bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.13 Shromažďování použití privilegovaných příkazů
Zjistěte, zda k získání přístupu do systému nepoužívají privilegovaní uživatelé privilegované příkazy. Nejprve spusťte následující příkaz a poté přidejte výstup následujícího příkazu do souboru /etc/audit/audit.rules
# find PART -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 \ -k privileged" }'
6.14 Shromažďování neúspěšných připojení systému souborů
Chcete-li sledovat připojování souborových systémů uživatelem bez oprávnění, přidejte následující pravidla do souboru /etc/audit/audit.rules
Pro 64bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b64 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
Pro 32bitové systémy přidejte následující řádky do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b32 -S mount -F auid>=500 -F auid!=4294967295 -k mounts
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.15 Shromažďování událostí smazání souborů podle uživatele
Chcete-li zjistit, zda dochází k odstranění souborů a atributů souborů spojených s chráněnými soubory, přidejte následující pravidla.
Pro 64bitové systémy přidejte následující do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
Pro 32bitové systémy přidejte následující do souboru /etc/audit/audit.rules.
-a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.16 Shromažďování změn rozsahu správy systému
Změny v souboru /etc/sudoers mohou naznačovat, že byla provedena neoprávněná změna v rozsahu činnosti správce systému.
Přidejte následující řádky do souboru /etc/audit/audit.rules.
-w /etc/sudoers -p wa -k scope
# Provedením následujícího příkazu restartujte auditd
# sudo service auditd restart
6.17 Shromáždění akcí správce systému (sudolog)
Chcete-li zabránit neoprávněným uživatelům v používání privilegovaných příkazů, zjistěte, zda nedošlo k nějakým změnám v /var/log/sudo.log.
Přidejte následující řádky do souboru /etc/audit/audit.rules.
-w /var/log/sudo.log -p wa -k actions
Restartujte auditované
# sudo service auditd restart
6.18 Načítání a vyjímání modulu jádra
Chcete-li zjistit, zda nějaký neoprávněný uživatel používá insmod, rmmod a modprobe a neohrožuje tak bezpečnost systému, přidejte následující řádky do souboru /etc/audit/audit.rules.
-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules
Pro 32bitové systémy přidejte
-a always,exit -F arch=b32 -S init_module -S delete_module -k modules
Pro 64bitové systémy přidejte
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules
Restartujte auditované
# sudo service auditd restart
6.19 Udělejte konfiguraci auditu neměnnou
Chcete-li zabránit neoprávněným uživatelům provádět změny v systému auditu, aby skryli svou zákeřnou činnost a poté vrátili pravidla auditu zpět, přidejte následující řádky do
/etc/audit/audit.rules.
-e 2
Toto musí být poslední řádek v souboru /etc/audit/audit.rules
Restartujte auditované
# sudo service auditd restart
7. Systémový přístup, autentizace a autorizace
7.1 Nastavení vlastníka uživatele/skupiny a oprávnění v cronu
Provedením následujících příkazů omezíte přístup ke čtení/zápisu a vyhledávání na uživatele root a skupiny, čímž zabráníte normálním uživatelům v přístupu k těmto souborům/adresářům.
# chown root:root /etc/crontab
# chmod og-rwx /etc/crontab
# chown root:root /etc/cron.hourly
# chmod og-rwx /etc/cron.hourly
# chown root:root /etc/cron.daily
# chmod og-rwx /etc/cron.daily
# chown root:root /etc/cron.weekly
# chmod og-rwx /etc/cron.weekly
# chown root:root /etc/cron.monthly
# chmod og-rwx /etc/cron.monthly
# chown root:root /etc/cron.d
# chmod og-rwx /etc/cron.d
7.2 Konfigurace PAM
PAM (Pluggable Authentication Modules) je služba, která implementuje modulární autentizační moduly v systémech UNIX. PAM musí být pečlivě nakonfigurován pro zabezpečení systémového ověřování.
7.2.1 Nastavení parametrů požadavku na vytvoření hesla pomocí pam_cracklib
Modul pam_cracklib kontroluje sílu hesel. Provádí kontroly, jako je kontrola, zda heslo není slovo ze slovníku, má určitou délku, obsahuje kombinaci znaků (např. abeceda, číslice, jiné) a další.
Nastavte parametry pam_cracklib.so následovně v /etc/pam.d/common-password
password required pam_cracklib.so retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
7.2.2 Nastavení uzamčení pro neúspěšné pokusy o heslo
Uzamčení uživatelů po neúspěšných po sobě jdoucích pokusech o přihlášení, aby se zabránilo útokům hrubou silou hesla proti vašim systémům.
Upravte soubor /etc/pam.d/login a přidejte řádek auth níže:
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
7.2.3 Omezení opětovného použití hesla
Nucení uživatelů, aby znovu nepoužívali svých posledních 5 hesel, snižuje pravděpodobnost, že útočník bude schopen heslo uhodnout. Nastavte parametr pam_unix.so Remember na 5 v /etc/pam.d/common-password
password sufficient pam_unix.so remember=5
8. Nakonfigurujte SSH
Upravte soubor /etc/ssh/sshd_config a nastavte následující parametr, aby byl bezpečný.
Protocol 2
LogLevel INFO
X11Forwarding no
MaxAuthTries 4
IgnoreRhosts yes
HostbasedAuthentication no
PermitRootLogin no
PermitEmptyPasswords no
PermitUserEnvironment no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers <userlist>
AllowGroups <grouplist>
DenyUsers <userlist>
DenyGroups <grouplist>
Banner <your bannerfile>
9. Restrict Access to the su Command
Use sudo instead of su as it provides a better logging out and audit mechanism. The another motivation for using sudo is to restrict the uses of su. Uncomment the pam_wheel.so line in /etc/pam.d/su, so that su command will be available to users in the wheel group to execute su.
# grep pam_wheel.so /etc/pam.d/su
auth required pam_wheel.so use_uid
# grep wheel /etc/group
wheel:x:10:root, <user list>.....
10. User Accounts and Environment
10.1 Set Password Expiration Days
Reduce the maximum age of a password.
Set the PASS_MAX_DAYS parameter to 120 in /etc/login.defs
PASS_MAX_DAYS 60
Modify active user parameters to match:
# chage --maxdays 120 <user>
10.2 Set Password Change Minimum Number of Days
To prevent the user from changing their password until a minimum no of days have passed since the user changed the password. Set the PASS_MIN_DAYS parameter to 7 in /etc/login.defs
PASS_MIN_DAYS 7
Modify active user parameters to match:
# chage --mindays 7
10.3 Set Password Expiring Warning Days
The administrator can notify the users about the expiry of their password using ASS_WARN_AGE parameter in /etc/login.defs.
Set the PASS_WARN_AGE parameter to 7 in /etc/login.defs
PASS_WARN_AGE 7
Modify active user parameters to match
# chage --warndays 7 <user>
11. System Accounts
11.1 Disable System Accounts
To prevent the system account from being used to get an interactive shell, append “/usr/sbin/nologin” at the end of each system accounts in /etc/passwd
11.2 Set Default
umask for Users
Set umask of 022 will make files readable by every user on the system.
Edit the /etc/login.defs file and add the following line
UMASK 022
11.3 Lock Inactive User Accounts
To make the system more secure, execute the following command to lock the inactive accounts.
# useradd -D -f 35
11.4 Remove OS Information from Login Warning Banners
To prevent the OS and patch level information from login banners, edit the /etc/motd, /etc/issue and /etc/issue.net files and remove any lines containing \m, \r, \s or \v.
12. Verify System File Permissions
12.1 Verify Permissions on /etc/passwd, /etc/shadow, /etc/group
These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the permissions for these files
# chmod 644 /etc/passwd
# chmod o-rwx,g-rw /etc/shadow
# chmod 644 /etc/group
12.2 Verify User/Group Ownership on /etc/passwd, /etc/shadow, /etc/group
These file needs to be protected from unauthorized changes by non-privileged users as well as needs to be readable as this information is used by non-privileged programs.
Execute the following commands to correct the ownership for these files
# chown root:root /etc/passwd
# chown root:shadow /etc/shadow
# chown root:root /etc/group
13. Check for rootkits
There are few tools available through which you can check for rootkit in the server. The two popular rootkit hunters are RKHunte and CHKRootKit, use anyone of them periodically to check for rootkit in the system
Install chkrootkit
# sudo apt-get install chkrootkit
To run chkrootkit, execute the following command in the terminal
# chkrootkit
14. PSAD IDS/IPS
To detect the intrusion in your network, you can use toos like snort or cipherdyne's psad. The later has the capability of intrusion detection and log analysis with iptables. PSAD is a lightweight system daemons that analyze the iptables log message to detect scans and other spurious traffic.
Install PSAD
#sudo apt-get install psad
Now configure psad to detect scans, Intrusion Detection and Intrusion Prevention
15. Prevent IP Spoofing
Add following lines in /etc/host.conf to prevent IP spoofing
order bind,hosts
nospoof on
16. Enabling automatic security updates
It is highly recommended to enable automatic security updates and patches to keep the system secure. You will be notified every time you logged in to the system using SSH about security updates and patches. In Ubuntu Desktop, to enable automatic security updates, click on "System" select "Administration" and then "Software Sources" menu. Now select the "Internet Updates" and enable "Check for updates automatically" specifying daily". If Ubuntu issues a new security release then you will be notified via the "Update Manager" icon in the system tray. You can use unattended-upgrades which can handle automatic installation of security upgrades in Ubuntu system. Running sudo unattended-upgrade will install all the security package available for upgrade.
Install this package if it isn't already installed using
# sudo apt-get install unattended-upgrades
To enable it type
# sudo dpkg-reconfigure unattended-upgrades
and select "yes".
17. Harden PHP
Edit the php.ini file /etc/php5/apache2/php.ini and add uncomment/add following lines.
safe_mode = On
safe_mode_gid = On
disable_functions = hp_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec,
system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid,
posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit,
posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,
posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo
register_globals = Off
expose_php = Off
display_errors = Off
track_errors = Off
html_errors = Off
magic_quotes_gpc = Off
mail.add_x_header = Off
session.name = NEWSESSID
allow_url_fopen = Off
allow_url_include = Off
session.save_path = A secured location in the server
18. Harden Apache
Edit Apache2 configuration security file /etc/apache2/conf-available/security.conf and add the following-
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header unset ETag
FileETag None
The web application firewall ModSecurity is effective way to protect web server so that it's much less vulnerable to probes/scans and attacks. First install mod_security using following command.
# sudo apt-get install libapache2-mod-security2
# mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Edit /etc/modsecurity/modsecurity.conf
Activate the rules by editing the SecRuleEngine option and set to On and modify your server signature
SecRuleEngine On
SecServerSignature FreeOSHTTP
Now edit the following to increase the request limit to 16 MB
SecRequestBodyLimit 16384000
SecRequestBodyInMemoryLimit 16384000
Download and install the latest OWASP ModSecurity Core Rule Set from their website.
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/master.zip
# unzip master.zip
# cp -r owasp-modsecurity-crs-master/* /etc/modsecurity/
# mv /etc/modsecurity/modsecurity_crs_10_setup.conf.example /etc/modsecurity/modsecurity_crs_10_setup.conf
# ls /etc/modsecurity/base_rules | xargs -I {} ln -s /etc/modsecurity/base_rules/{} /etc/modsecurity/activated_rules/{}
# ls /etc/modsecurity/optional_rules | xargs -I {} ln -s /etc/modsecurity/optional_rules/{} /etc/modsecurity/activated_rules/{}
Now add the following line in /etc/apache2/mods-available/mod-security.conf
Include "/etc/modsecurity/activated_rules/*.conf"
Check if the modules has been loaded-
# sudo a2enmod headers
# sudo a2enmod mod-security
Now restart Apache2
# service apache2 restart
Apart from ModSecurity, install modevasive to protect your server from DDOS (Denial of Service) attacks
Once you've hardened the system, run some vulnerability scans and penetration tests against it in order to check that it's actually rock solid as you're now expecting it. However attack on your server can happen, it is up-to you to scan the log files regularly to find out any breaches have been occurred. You can use log analyzer tool like ELK stack to drill through servers log files quickly. If you find evidences of breaches then quickly disconnect your server from the internet and take remedial measures.