GNU/Linux >> Znalost Linux >  >> Ubuntu

Nejlepší průvodce zabezpečením hostitele Ubuntu

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.


Ubuntu
  1. Ubuntu – /usr/bin/host nevyzvedává změny v /etc/hosts ani po restartu?

  2. Ověřování proxy pomocí terminálu Ubuntu 14.04?

  3. Jak znovu připojit jiný oddíl jako /home?

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Proč dávat věci jiné než /home do samostatného oddílu?

  3. Jak změnit výchozí /tmp na /home/user/tmp

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Debian – Přesunutí /var, /home do samostatného oddílu?

  3. Rozdíl a správné použití pro /tmp a /var/tmp