PXE boot + dd

MartinXXX

Re:PXE boot + dd
« Odpověď #15 kdy: 29. 12. 2015, 17:30:25 »
bránit se tomu dá jenom DHCP snoopingem, který mají jenom dražší switche.

Podpora je uz nastastie aj na lacnejsich switchoch - TL-SG2008 za cca. 60 € podporu DHCP snoopingu ma.  Osobne povazujem tento switch za vynikajuci na rozlicne male testovacie siete - podporuje VLANy, link aggregation, QoS, ACL na urovni MAC adresy, IP adresy alebo portu, SNMP, authentikaciu cez 802.1X/Radius, okrem web rozhrania ma command line s Cisco syntaxou, ...   


jose_d

Re:PXE boot + dd
« Odpověď #16 kdy: 29. 12. 2015, 18:28:58 »
1. konfigurace DHCP v LDAPu - pro nabootování klonovacího image je potřeba změnit v LDAPu jenom jeden záznam, potom smazat
2. bootovat vždycky přes PXE, přičemž defaultní konfigurace pxelinuxu je nabootovat z disku. Pokud chci nabootovat něco jiného, vytvořím v pxelinux.cfg symlink konfigurace bootující daný image na MAC daného stroje. Po nabootování ho smažu.
On první bezpečnostní problém je, že pokud to má být plně automatizovaný, je potřeba aby tuhle změnu (PXE->HDD) udělal skript na závěr partisnovani a rsyncovaní (nebo dd..) . A pokud si člověk nechce udělat díru do server-side (viz níže) , nejjednoduší je přes nějaké API zatahat za místní BIOS/IPMI/ilo/idrac, protože skript bude mít stejně místního roota a tím plný přístup k HW.

Ale ten LDAP, který navrhuješ, je IMHO dost zajímavý tím, že se v něm dají poměrně dobře nastavit oprávnění, a asi by si s tím šlo vyhrát a udělat to taky dost bezpečně. (jednorázové oprávnění per session jen k danému objektu)

BTW, u PXE je docela oříšek bezpečnost. DHCP server se dá snadno podvrhnout a bránit se tomu dá jenom DHCP snoopingem, který mají jenom dražší switche.
+1.

další bezpečnostní problém je síťový FS pro root. Většinou to bývá NFSv3 = žádné zabezpečení -> v image nesmí být žádné "tajemství" (priv. klíč atd.)

Re:PXE boot + dd
« Odpověď #17 kdy: 29. 12. 2015, 20:18:22 »
jose_d: jednu dobu jsem si trochu lámal hlavu s tím, jestli by to celé šlo udělat opravdu bezpečně za rozumných nákladů a dospěl jsem k tomu, že nešlo (netvrdím, že to je správný závěr, jenom mě prostě nenapadlo nic, co by nemělo nějaký háček) - že to prostě vždycky bude nějaký kompromis, který má díry, a je potřeba jenom v dané situaci zvážit, jestli jsou to díry akceptovatelné...

Zásadní problém mám s tím, že stroj vůči serveru vystupuje jako tabula rasa, takže nemá žádné dostatečně silné tajemství pomocí kterého by se mohl autentizovat. Takže jsem se rozhodl přijmout jako fakt, že je potřeba mít aspoň ve chvíli instalace fyzicky zabezpečenou linku mezi strojem a serverem + DHCP snooping. Když tohle přijmu, tak už to dál není tak těžký (viz níž).

On první bezpečnostní problém je, že pokud to má být plně automatizovaný, je potřeba aby tuhle změnu (PXE->HDD) udělal skript na závěr partisnovani a rsyncovaní (nebo dd..) . A pokud si člověk nechce udělat díru do server-side (viz níže) , nejjednoduší je přes nějaké API zatahat za místní BIOS/IPMI/ilo/idrac, protože skript bude mít stejně místního roota a tím plný přístup k HW.
To mi přijde zbytečný. Stroj nemusí konfiguraci PXE ovládat, stačí když bude umět odeslat (jakýmkoli kanálem) zprávu "už je to hotové". Logika může být pak už umístěná v bezpečí na serveru. Jelikož následná akce (smazání symlinku) nemá moc žádné bezpečnostní důsledky, nemůže ovlivnit konfiguraci jiných strojů atd., myslím, že tuhle zprávu není ani potřeba jakkoli autentizovat - stačí případně ověřit, že přišla jenom jednou...

Ale ten LDAP, který navrhuješ, je IMHO dost zajímavý tím, že se v něm dají poměrně dobře nastavit oprávnění, a asi by si s tím šlo vyhrát a udělat to taky dost bezpečně. (jednorázové oprávnění per session jen k danému objektu)
LDAP je dobrý na to, že se na něj dá dobře strojově šahat (líp než na soubor) a jsou knihovny pro různé jazyky. Nějaké zvláštní šaškování s právy není potřeba, pokud záznam v LDAPu mění software na serveru (jak jsem psal v předchozím odstavci).

další bezpečnostní problém je síťový FS pro root. Většinou to bývá NFSv3 = žádné zabezpečení -> v image nesmí být žádné "tajemství" (priv. klíč atd.)
Jasně, to je základ - na TFTP serveru ani na NFS nesmí být žádné tajemství. Otázka ale pak je, jak ho tam dostat, když nemá, jak by se autentizoval ;) Myslím, že pro většinu běžných situací je dostatečně bezpečný ten princip, co jsem psal výš - tajemství vydám na dotaz, jenom ve chvíli, kdy vím, že se instaluje, a kontroluju si, že o něj bylo požádáno jenom jednou.

Takže celý by to mohlo vypadat nějak takhle:
1. serverový SW nastaví v konfiguraci PXE "stroj A teď má nabootovat klonovací image"
2. stroj A nabootuje ne-tajný klonovací image z TFTP, popř. veřejné RO NFS
3. skript na klonovacím imagi stáhne ne-tajný připravený image chtěného OS
4. skript požádá server o tajemství (token)
5. server mu ho dá a nějakou chvíli čeká, jestli nedostane druhou žádost o token
6. pokud ne, zašifruje tokenem všechno tajné
7. klonovací skript si ze serveru stáhne tajné věci zašifrované tokenem a nainstaluje

- slabina je v tom, že kdyby útočník uměl stroj A od sítě odstřihnout, může se za něj vydávat. Ale jak říkám: nic lepšího se mi vykoumat nepodařilo :) Pokud někdo máte návrh, jak to s rozumným úsilím a prostředky* udělat líp, sem s ním! ;)

* samozřejmě by to šlo přes nějaké TPM apod., ale to je imho ve většině "normálních" nasazení zbytečná otrava. Požadavek fyzického zabezpečení je imho realističtější, protože tak jako tak je pro běh toho systému dál potřeba...