Semestrální úloha

Student dostane k dispozici linuxový server se základní instalací operačního systému Debian. Úkolem je nainstalovat webovou aplikaci s autentizací uživatelů a správně zabezpečit server. Mezi 12. a 13. týdnem semestru si studenti vzájemně provedou bezpečnostní testování serveru. Na základě výsledků tohoto testování mají možnost ještě upravit konfiguraci serveru a ten poté odevzdají k hodnocení.

Semestrální úloha se skládá ze dvou částí

  1. konfigurace serveru, instalace a konfigurace aplikace;
  2. bezpečnostní otestování serveru jiného studenta dle zadaných kontrolních otázek.

Požadavky na aplikace

  • Dokončit konfiguraci operačního systému.
  • Nainstalovat jednu webovou aplikaci včetně potřebných komponent:
    • aplikaci si student vybírá ze seznamu či ji může navrhnout sám (vyučující výběr schvaluje),
    • aplikace musí mít autentizaci uživatelů,
    • hesla uživatelů musí být uložena v LDAPu (centrální autentizace uživatelů),
    • uživatel aplikace musí mít možnost změnit si své heslo - obvykle přes samostatnou aplikaci,
  • Správa uživatelů v LDAPu musí být možná přes webové rozhraní.
  • Založit účet pro auditora. Auditor musí mít přístup přes ssh včetně sudo. Dále potřebuje přístup k aplikaci, aby mohl ověřit její funkčnost.

Bezpečnostní požadavky

Před servery je nainstalován firewall, který povoluje provoz z celého světa na portech 22, 80 a 443. Ze školní sítě je povolen veškerý provoz s výjimkou SMTP (tcp/25) a Microsoft Network. Ze serverů je omezeno odesílání pošty - adresa odesílatele musí být ze školní domény (@vse.cz, @bis122.vse.cz, …). Na serverech není možné přijímat poštu z vnějšku.

Požadovaná dokumentace

Změny od ZS 2024/2025:

  • odebrán požadavek na OCSP stapling, (OCSP deprecation),
  • doplněn požadavek na TLS 1.3,
  • doplněn požadavek na HTTP/2
úkol způsob splnění termín
Volba aplikace V InSIS zvolena aplikace (téma) do 10. cvičení
Nainstalování serveru včetně aplikací Nainstalován Apache (web server), LDAP server, aplikace - nemusí být vše propojené dohromady. Vytvořen účet pro auditora. Předběžný protokol o instalaci uložený do odevzdávárny v InSIS. do 12. cvičení
Bezpečnostní otestování cizího serveru Protokol o bezpečnostním testování odevzdán do odevzdávárny v InSIS. mezi 12. a 13. cvičením
Závěrečné úpravy vlastního serveru Protokol o instalaci serveru odevzdán do odevzdávárny v InSIS do konce zkouškového (cvičící může termín změnit)

Za semestrální úlohu může student získat 30 bodů, z toho 8 bodů je za audit cizího serveru, 22 bodů je za instalaci serveru. Student může získat prémiové body za originální nebo zajímavé řešení.

U auditu serveru se odečítají body např. za:

  • pozdní odevzdání,
  • neprovedení části auditu (na testovaném serveru nejsou stopy po testování),
  • informace protokolu neodpovídají reálnému stavu serveru,

Z bodů za instalaci serveru se odečítá např. za následující nedostatky:

  • lze se přihlásit přes SSH pomocí hesla,
  • neplatný certifikát u https,
  • chybí redirect z http na https pro všechny či část aplikací,
  • chybí HSTS,
  • není podpora TLS 1.3, není podpora HTTP/2,
  • server nemá hodnocení A či A+ na SSLLabs,
  • není nainstalován LDAP server,
  • LDAP server neobsahuje uživatele,
  • uživatelé ve webové aplikaci se neautentizují vůči LDAPu,
  • není nainstalována či funkční aplikace,
  • program lynis vrací méně než 65%,
  • chybějící závěrečný protokol,
  • student nainstaloval zbytečnou komponentu (např. na serveru běží MySQL databáze, ale aplikace ji nepoužívá).

Student může přijít o body i za nesplnění termínů. Za předmět jsou definovány dva termíny, cvičící může přidat i další.

  1. 5. cvičení, SSH - zakázáno přihlašování pomocí hesla. Budu kontrolovat, že se na studentský server nedá přihlásit pomocí hesla (výjimkou může být přihlášení z bis.vse.cz). Za každý započatý týden nesplnění odečítám dva body.
  2. Příprava serveru pro audit. Před začátkem auditů serverů (obvykle po cvičení ve 12. týdnu) vyučující kontroluje stav serverů a může správci serveru odečíst body při nesplnění některého z požadavků. V případě problémů s účtem auditora může odečítat body vlastníkovi serveru i auditorovi - kdo zavinil problémy. Kontroluje se:
    • Zda je založen účet pro auditora, zda se již přihlásil, zda může udělat sudo. Při zakládání účtů používejte školní přihlašovací jména.
    • Zda je nainstalován a běží webový server a odpovídá na portu 80 (http) a 443 (https). Na portu 80 postačuje přesměrování na port 443.
    • Zda je nainstalován a běží LDAP server (proces slapd).
    • Zda existuje aspoň pokus o instalaci vlastní aplikace.

Získání certifikátu pro server:

Databáze MySQL je historicky velmi oblíbená u webových aplikací. MySQL databáze není open source, licence neumožňuje její přímou distribuci v Debianu. Existuje klon MariaDB , který je součástí Debianu a doporučuji ho používat. Jedinou výjimkou je situace, kdy se na stránkách aplikace explicitně uvádí, že MariaDB není podporována.

  • Návod na instalaci je např. na https://www.sqliz.com/posts/install-mariadb-on-debian-12/. V kroku mysql_secure_installation nezadávám heslo pro uživatele root v DB, nechávám pro něj připojení přes unix socket. K DB je poté přístup bez hesla pomocí sudo mysql.
  • Součástí návodu je i vytvoření databáze pro aplikaci a speciálního uživatele v DB pro přístup z aplikace (databáze i uživatel má obvykle stejný název jako aplikace).
  • Nainstalujte si aplikaci pro správu databáze, doporučuji adminer . Uživatele root v DB bez hesla nemohou používat webové aplikace, v admineru se můžete hlásit jako uživatel pro aplikaci (viz předchozí krok) či si vytvořte speciálního uživatele v DB pro správu.
  • Je bezpečnostní chyba, pokud Vaše aplikace přistupuje k databázi pod uživatelem root či jiným uživatelem, který může zakládat uživatele v DB či měnit hesla jiným uživatelům. Aplikace by měla používat minimální práva vůči DB.

Pro správu obsahu na LDAP serveru jsou v Debianu k dispozici dvě aplikace:

  • ldap-account-manager - webfrontend for managing accounts in an LDAP directory
  • phpldapadmin - web based interface for administering LDAP servers - pro poslední verzi Debianu (a pro PHP 7.2 a novější) není k dispozici

Instalace a konfigurace ldap-account-manager

Ldap account manager (LAM) používá profily. Každý profil definuje, který LDAP server se spravuje a co mohou oprávnění uživatelé tohoto profilu upravovat. Správa profilů je chráněná globálním heslem, konfigurace každého profilu je též chráněna heslem. Další heslo je pro přihlášení do profilu (obvykle uživatel cn=admin,dc=vse,dc=cz) a editaci údajů v rámci profilu. A každý vytvořený uživatel by měl mít své vlastní heslo.

Postup:

  1. musíte mít nainstalován apache (https) a PHP - ověřte si, že Vám dohromady fungují,
  2. nainstalujte LDAP server, tj. balíčky slapd a ldap-utils, příkaz: apt install slapd ldap-utils
  3. ověřte, že se Vám správně nainstaloval, dotaz ldapsearch -x -b dc=vse,dc=cz by měl vypsat dva objekty (popř. dotaz včetně URL k LDAP serveru: ldapsearch -H ldap://127.0.0.1 -x -b dc=vse,dc=cz),
  4. nainstalujte ldap-account-manager, příkaz apt install ldap-account-manager,
  5. na adrese https://bisxxx.vse.cz/lam se Vám otevře webové rozhraní. Nejdříve je potřeba nakonfigurovat vlastní LAM, lze to udělat přes webové rozhraní či přímo v konfiguračních souborech.
    1. vpravo nahoře je LAM configuration
    2. zvolte Edit general settings, počáteční heslo je lam,
    3. na další stránce změňte heslo pro globálního správce,
    4. přes LAM configuration zvolte volbu Edit server profiles, počáteční heslo je opět lam,
      • úplně dole nastavte nové heslo pro správu profilu,
      • v Security settings nastavte uživatele cn=admin,dc=vse,dc=cz
      • časovou zónu nastavte na Prahu, jazyk rozhraní dle svého uvážení,
      • v Tool settings nastavte Tree suffix na dc=vse,dc=cz,
      • uložte (Save)
    5. znovu se vraťte do konfigurace profilu a přejděte na Account types
      • je nastavena podpora typů Users a Group - je potřeba nastavit v jaké organizační jednotce se mají uživatelé či skupiny zakládat. Obvyklé je ou=People,dc=vse,dc=cz pro užívatele, a ou=group,dc=vse,dc=cz pro skupiny.
      • u Users místo ou=People,dc=my-domain,dc=com zadejte ou=People,dc=vse,dc=cz
      • u Group místo ou=group,dc=my-domain,dc=com zadejte ou=group,dc=vse,dc=cz
      • uložte
    6. volitelné - v Modules můžete u jednotlivých typů upravit schémata. U users stačí inetOrgPerson (poté je vhodné v Account Types upravit atributy, které se mají zobrazovat v seznamu),
    7. volitelné - v Module Settings můžete nastavit atributy, které se mají vyplňovat při zakládání
  6. po konfiguraci LAM se vraťte na úvodní obrazovku na přihlaste se (heslo uživatele cn=admin,dc=vse,dc=cz)
  7. Vypíše se
          The following suffixes are missing in LDAP. LAM can create them for you.
          You can setup the LDAP suffixes for all account types in your LAM server profile on tab "Account types".
          ou=People,dc=vse,dc=cz
          ou=group,dc=vse,dc=cz
          
  8. nechte založit organizační jednotky (Create). Pokud se uvedené nevypíše, tak jste již ou založili či máte chybu v konfiguraci profilu.
  9. založte skupinu,
  10. založte uživatele - nezapomeňte nastavit heslo,
  11. vyzkoušejte Tree browser - je zde jiný pohled na atributy u objektu, lze též ověřit heslo uživatele vytvořeného v LDAPu,

Nejčastější chyby

  • Chybné URL - Ldap server je na adrese ldap://127.0.0.1 či ldap://localhost či ldap://127.0.0.1:389 - všechna tři URL vyjadřují to samé. Někdy stačí zadat jen IP adresu: 127.0.0.1. Chybně je https://bisxxx.vse.cz/lam - to je URL k webové aplikaci pro správu LDAP databáze.
  • Neběží LDAP server - V terminálovém okně (ssh) na serveru zkuste příkaz ldapsearch -H ldap://127.0.0.1 -x - měl by se vypsat seznam objektů v LDAP databázi. Pokud se nevypíše, tak Vám nejspíše neběží proces slapd. Vypište si spuštěné procesy.
  • Chybí atributy u účtů - v aplikaci nakonfigurujete atribut mail jako e-mailovou adresu. Když si vypíšete uživatele, tak u nich není vyplněna e-mailová adresa. Vypište si atributy např. přes ldapsearch.
  • Chybná jména atributů - v aplikaci nakonfigurujete atributy, ale s chybnými jmény. Typicky je problém s atributem pro e-mailovou adresu (mail) či s atributem pro uživatelské jméno (uid či cn).
  • Vynechte skupiny - ve většině aplikací není potřeba nastavovat skupiny v LDAPu. Pokud můžete, tak je vynechte.
  • Není zvoleno automatické zakládání - některé aplikace na základě prvního přihlášení přes LDAP založí účet v aplikaci. Je to ale většinou potřeba zaškrtnou v konfiguraci propojení. Často je poté uživatel v aplikaci založen s minimálními právy. POZOR - některé aplikace nezakládají účet v aplikaci, některé naopak vyžadují ruční založení v aplikaci.
  • TODO

Výpis dotazů na LDAP server

Pokud předchozí rady nepomohou, tak můžete zkusit vypsat si dotazy na LDAP server dle následujícího postupu:

  1. ukončete službu slapd pomocí
    sudo systemctl stop slapd
  2. spusťte slapd v debugovacím režimu pomocí následujícího příkazu
    sudo /usr/sbin/slapd -h ldap://127.0.0.1:389/ -g openldap -u openldap -F /etc/ldap/slapd.d -d 256
  3. zkuste se ve Vaší aplikaci přihlásit (u některých aplikací nezapomeňte zvolit, že se připojujete přes LDAP):
    • žádný požadavek se neobjeví - máte nejspíše chybně server (IP adresu či URL, chybné číslo portu, chybně nastaveno šifrování spojení (nešifrovat)). Jinou možností je, že aplikace kontroluje, že uživatel je založen i v ní - někdy je potřeba zaškrtnout volbu pro automatické založení účtu, někdy je potřeba založit účet v aplikaci a přiřadit ověření přes LDAP.
    • objeví se informace o chybném hesle (požadavek BIND)
    • ověření hesla proběhlo, ale další požadavek skončil chybou - nejsou vyplněny některé atributy, vyžadujete nastavení skupin, ale skupiny nejsou vytvořeny, …
  4. ukončení aplikaci slapd (Ctrl/C),
  5. spusťte proces slapd
    sudo systemctl start slapd
  • Poslední úprava: 2024/11/18 16:51
  • autor: pavlicek