9-02-06 10:29
IPsec: IKEv2 protokol i daemon
piše ANA KUKEC
IPsec i IKEv2 protokol
IPsec (IP security) je standard i skup protokola (neobvezan za IPv4, a obvezan za IPv6) koji obuhvaća mehanizme za zaštitu prometa na mrežnom sloju OSI modela (3. sloj) kriptiranjem i/ili autentikacijom IP paketa.
IPsec osigurava ispunjenje sljedećih sigurnosnih zahtjeva:
- tajnost (confidentiality; isključivo ovlaštena osoba može pristupiti podacima),
besprijekornost (integrity; nemogućnost promijene podataka od strane neovlaštene osobe),
autentičnost (authenticity; uspješno verificirani identitet pošiljaoca),
raspoloživost (availability; dostupnost podacima unatoč neočekivanim događajima, npr. DOS napad i sl.).
Spomenuti zaštitni mehanizmi IPsec-a zasnivaju se na:
Sigurnosnim protokolima: Encapsulating Security Payload (ESP): http://www.ietf.org/rfc/rfc2406.txt i Authentication Header (AH): http://www.ietf.org/rfc/rfc2402.txt.
Specifičnoj arhitekturi: Security Association (SA) zapisi u <8>Security Association Database (SAD) u jezgru OS-a te Security Policy (SP) zapisi u Security Policy Database (SPD) u jezgru OS-a.
Algoritmima za autentikaciju i kriptiranje (npr. DES, 3DES, RSA, DH, SHA1, MD5 i dr).
Protokolima za razmjenu ključeva: Internet Key Exchange (IKE): http://www.ietf.org/rfc/rfc2409.txt, Internet Key Exchange v2 (IKEv2): http://www.ietf.org/rfc/rfc4306.txt, Kerberized Internet Negotiation of Keys (KINK): http://www.ietf.org/internet-drafts/draft-ietf-kink-kink-11.txt i dr.
AH je protokol mrežnog sloja s brojem 51 koji osigurava besprijekornost i autentičnost IP datagrama. ESP protokol je mrežni protokol s brojem 50 koji uz spomenutu autentikaciju podataka (opcionalno) primarno osigurava tajnost IP datagrama. Uz dva spomenuta protokola IPsec nudi mogućnost korištenja još dva IP protokola: ipcomp (IP Payload Compression Protocol) i encap (IP encapsulation).
SA je jednosmjerna i simetrična "veza" koja se ostvaruje ukoliko odredišna strana prihvati ponuđeni skup kriptografskih algoritama i ključ od izvorišne strane. Skup algoritama za autentikaciju i kriptiranje koji štiti neku SA vezu je tzv. cryptographic suite. Izvorišna strana prilikom pregovaranja nudi jedan ili više takvih skupova, a prilikom uspješnog uspostavljanja veze odredišna strana prihvaća jedan od njih. SP je pripadajuća jednosmjerna i simetrična politika pojedinoj SA vezi. Uobičajeno je reći da SP definira što želimo zaštiti, a SA kako to želimo zaštititi. Ukoliko se ne koristi protokol za razmjenu ključeva tada je potrebno u jezgru unijeti i SA i SP (dakle, četiri unosa). U ovom članku pokazat ćemo samo automatsku razmjenu ključeva kod koje SA ne unosi administrator nego daemon za razmjenu ključeva. Sučelje prema jezgri koje se koristi npr. u ikev2 daemonu, koji će biti opisan kasnije, je PF_KEY (http://www.ietf.org/rfc/rfc2367.txt). Jasno je da politiku (SP) unosimo ručno u jezgru OS-a.
Postoji nekoliko protokola za razmjenu ključeva. Ovdje ćemo objasniti IKEv2 protokol koji je nastao na temelju kompleksnijeg i sporijeg IKE protokola. Uz to, za razliku od IKE protokola, IKEv2 dokumentiran je jedinstvenim RFC-om (RFC 4306). IKEv2 izvodi međusobnu autentikaciju izvorišne i odredišne strane, uspostavlja SA vezu koja uključuje dijeljeni ključ, ESP/AH/IPCOMP/ENCAP protokol te skup kriptografskih algoritama. Takva SA veza koja štiti IKE promet veza naziva se IKE SA veza i kroz nju se nadalje uspostavlja IPsec SA veza koja štiti traženi promet (definiran SP unosom u jezgri OS-a). IPsec SA veza u IKEv2 terminologiji naziva se CHILD SA veza i to je svaka uspostavljena kroz postojeću IKE SA vezu.
IKE promet sastoji se od parova poruka (razmjena; exchanges): zahtjev - odgovor. Poruke kojima se uspostavlja komunikacija (IKE SA i prva CHILD_SA veza) su (uobičajeno) 4 poruke: IKE_SA_INIT razmjena (poruke još nisu ni kriptirane ni autenticirane) i IKE_AUTH razmjena (poruke su kriptirane, no još nisu autenticirane). Ove četiri poruke odgovaraju fazi 1 (Phase 1) pregovaranja kod IKEv1 protokola. Razmjenom ove četiri poruke nastaje IKE SA i prva CHILD SA. Daljnji IKE promet može biti CREATE_CHILD_SA razmjena (poznat kao faza 2 kod IKEv1 protokola) kojom se uspostavlja nova SA veza ili INFORMATIONAL razmjena u svrhu brisanja SA iz SAD baze, prijava greške u komunikaciji i slične pomoćne funkcionalnosti za komunikaciju.
Trenutno postoje tri OSS IKEv2 implementacije: racoon2, OpenIKEv2 i IKEv2 (razvojni tim unutar OSL laboratorija (ZEMRIS, FER): http://www.sourceforge.net/projects/ikev2). IKEv2 je pisan u jeziku C, za operacijski sustav Linux, pod GNU General Public licencom (GPL).
IPsec implementacija s IKEv2
Alati potrebni za IPsec implementaciju su:
setkey - rad sa Security Association Database (SAD) i Security Policy Database (SPD) unosima u kernel. SA (Security Association) parametre ćemo samo pregledavati (naredbom setkey -D) (u slučaju ručnog podešavanja SA-ovi se dodaju naredbom add (ovdje su zakomentirani jer koristimo daemon)). SP (Security Policy) unose ćemo dodavati u SPD tablicu naredbom spdadd i pregledavati naredbom setkey -DP.
IKE daemon.
Pretpostavimo komunikaciju računala 10.0.0.3 i 10.0.0.4. Pokazat ćemo konfiguraciju na računalu 10.0.0.3.
setkey
U konfiguracijsku datoteku za setkey (/etc/setkey.conf) potrebno je unijeti SP unose:
#!/usr/sbin/setkey -f
# brisanje unosa u SAD i SPD bazi
flush;
spdflush;
# ESP SA unosi za rucno podesavanje (bez ikev2 daemona)
#add 10.0.0.3 10.0.0.4 esp 15701 -E 3des-cbc "MySecretKey";
#add 10.0.0.4 10.0.0.3 esp 15702 -E 3des-cbc "MySecretKey";
# ESP SP unosi
spdadd 10.0.0.3 10.0.0.4 icmp -P out ipsec esp/transport//require;
spdadd 10.0.0.4 10.0.0.3 icmp -P in ipsec esp/transport//require;
Prvi SP unos (u SPD bazu unosi se naredbom spdadd) je pravilo (policy; -P) kojem podliježu svi ICMP paketi koji se kreću u smjeru od računala 10.0.0.3 prema računalu 10.0.0.4. Pravilo nalaže izlazni smjer (out), akciju (ipsec), protokol (esp), način rada (transport), nivo zaštite (require). Preostale mogućnosti za smjer su: in i fwd. Budući da su SP unosi simetrični, na odredišnom računalu konfiguracijska datoteka bit će gotovo jednaka - potrebno je zamijeniti tek in i out. Moguće akcije (uz ipsec) su: discard, none, bypass i entrust. Protokoli (uz esp) su: ah, ipcomp i encap. Način rada transport podrazumijeva host-to-host komunikaciju (enkapsulacija IP payload-a), dok je za net-to-net komunikaciju (dakle, za računala iza gateway-a) način rada tunnel (enkapsulacija cijelog IP paketa). Mogući nivo zaštite je uz require i default te use.
Za učitavanje konfiguracijske datoteke potrebno je upisati:
host% setkey -f /etc/setkey.conf
Sada se u SPD nalaze SP unosi, dok je SAD baza prazna budući da komunikacija još nije uspostavljena (a ručno ih nismo unijeli); SA unose u SAD bazi pratit ćemo nakon pokretanja daemona.
SPD bazu pregledavamo na slijedeći način:
host% setkey -DP
10.0.0.4[any] 10.0.0.3[any] icmp
in ipsec
esp/transport//require
created: Dec 28 10:23:01 2005 lastused:
lifetime: 0(s) validtime: 0(s)
spid=112 seq=12 pid=3216
refcnt=1
10.0.0.3[any] 10.0.0.4[any] icmp
out ipsec
esp/transport//require
created: Dec 28 10:23:01 2005 lastused:
lifetime: 0(s) validtime: 0(s)
spid=129 seq=11 pid=3216
refcnt=1
Slično pregledavamo SAD bazu:
host% setkey -D
No SAD entries.
ikev2
ikev2 daemon dostupan je na http://sourceforge.net/projects/ikev2. Nakon izvođenja aclocal, automake, autoconf, ./configure, make (potrebni su i flex, bison v1.875 i sl.) treba urediti tri konfiguracijske datoteke. Daemon ima dvije konfiguracijske datoteke: konfiguracijska datoteka ikev2 (ikev2.conf) i konfiguracijska datoteka za LOG4C (log4crc). Uz to, budući da ćemo pokazati primjenu daemona uz psk (pre-shared key) autentikaciju, potrebna je i datoteka psk.txt. Sve tri datoteke potrebno je smjestiti u direktorij u kojem se nalazi izvršna datoteka. Primjeri ikev2.conf i psk.txt datoteka nalaze se u /examples direktoriju, a log4crc datoteke u /src direktoriju (ovdje neće biti navedena).
Minimalna ikev2.conf konfiguracijska datoteka:
# ikev2.conf
# This is a configuration file for IKEv2 daemon and as such it is a
# combination of SAD, SPD and PAD. For details of those databases see
# RFC2401bis.
#
random device "/dev/urandom";
path pre_shared_key "psk.txt";
# Number of half-opened connections above which we start to send
# cookies
dos_treshold 50;
# Number of concurent threads for processing sessions
sm_threads 5;
remote anonymous
{
nonce_size 32;
# Time after which IKE daemon reauthenticates of IKE SA
authlimit time 1 week;
# Maximum idle time after which IKE daemon starts dead peer
# detection
ike_max_idle 1000 s;
# If timeout or retries is set to zero then retransmissions are
# disabled...
response_timeout 3 s;
response_retries 3;
my_identifier rfc822_addr mojId;
proposal { limit time 10 s;
encryption_algorithm 3des;
auth_algorithm md5_96;
pseudo_random_function md5;
dh_group modp768;
authentication_method pre_shared_key;
}
}
sainfo anonymous
{ hardlimit time 1000 s;
softlimit time 6 s;
auth_algorithm sha1_96;
encryption_algorithm 3des;
}
ikev2.conf sastoji se od tri dijela:
parametri unutar remote bloka definiraju postavke za IKE promet tj. IKE SA,
parametri unutar sainfo bloka štite promet za koji smo postavljenom politikom u jezgri (pomoću setkey-a) zatražili zaštitu tj. štiti CHILD SA,
parametri izvan navedenih blokova (npr. staza do psk.txt, broj paralelnih dretvi i sl).
Unutar remote bloka nalazi se proposal blok koji predstavlja već spomenuti cryptographic suite. Obuhvaća enkripcijski algoritam, autentikacijski algoritam, funkciju za sažimanje i Diffie-Hellman grupu na kojima se zasniva zadovoljavanje sigurnosnih zahtjeva spomenutih na samom početku.
Direktive unutar sainfo bloka štite traženi promet (u našem primjeru, s obzirom na dani SP u /etc/setkey.conf) to je ICMP promet. Hardlimit i softlimit time parametri su koji se odnose na rekeying i reautentikaciju CHILD SA (naravno, postoje i u sainfo bloku - authlimit time je ekvivalent hardlimit time, a limit time je ekvivalent softlimit time).
Postavka na koju je važno obratiti pažnju je my_identifier kod koje je umjesto mojID potrebno navesti vlastiti ID. ID je podatak koji se nalazi zapisan u psk.txt datoteci i njemu je pridružen tajni (dijeljeni, simetrični) ključ. Odredište s kojim komuniciramo također mora imati analogne zapise u psk.txt datoteci. Pokažimo na primjeru:
# psk.txt
mojId sharedSecretKey
remoteId sharedSecretKey
Budući da je politika unesena u jezgru, a sve konfiguracijske datoteke uređene, možete pokrenuti daemon. Provjerimo da se ikev2 zaista vrti (na portu 500):
host% netstat -uanp
Active Internet connections (servers and established)
Proto R-Q S-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:500 0.0.0.0:* 4364/ikev2
Pokušajmo sada pingati s jednog računala na drugo (podsjetimo se, uneseni SP u jezgri definira zaštitu ICMP prometa) te provjeriti stanje SAD baze:
host% setkey -DP
10.0.0.4 10.0.0.3
esp mode=transport spi=224162611(0x0d5c7333) reqid=0(0x00000000)
E: 3des-cbc 5d421c1b d33b2a9f 4e9055e3 857db9fc 211d9c95 ebaead04
A: hmac-sha1 c5537d66 f3c5d869 bd736ae2 08d22133 27f7aa99
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Nov 11 12:28:45 2002 current: Nov 11 12:29:16 2002
diff: 31(s) hard: 600(s) soft: 480(s)
last: Nov 11 12:29:12 2002 hard: 0(s) soft: 0(s)
current: 304(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 3 hard: 0 soft: 0
sadb_seq=1 pid=17112 refcnt=0
10.0.0.3 10.0.0.4
esp mode=transport spi=165123736(0x09d79698) reqid=0(0x00000000)
E: 3des-cbc d7af8466 acd4f14c 872c5443 ec45a719 d4b3fde1 8d239d6a
A: hmac-sha1 41ccc388 4568ac49 19e4e024 628e240c 141ffe2f
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Nov 11 12:28:45 2002 current: Nov 11 12:29:16 2002
diff: 31(s) hard: 600(s) soft: 480(s)
last: hard: 0(s) soft: 0(s)
current: 231(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 2 hard: 0 soft: 0
sadb_seq=0 pid=17112 refcnt=0
Među mnogobrojnim podacima zapisanim u bazi, uočimo one koje smo sami postavili unošenjem politike u jezgru: način rada (transport), sigurnosni protokol (esp), enkripcijski algoritam (3des), autentikacijski algoritam (sha1).
Pokušamo li primjerice tcpdump-om pratiti ping promet, rezultat je kriptirani promet (SPI je Security Parameter Index koji pripada svakoj jednosmjernoj SA vezi (to je broj koji prije komunikacije odabire izvorišni krajnji čvor SA) dok je seq redni broj paketa):
13:45:39.886113 10.0.0.3 > 10.0.0.4: ESP(spi=0x000002b5,seq=0x118) 13:45:39.887436 10.0.0.4 > 10.0.0.3: ESP(spi=0x000002b3,seq=0x10a) 13:45:40.898972 10.0.0.3 > 10.0.0.4: ESP(spi=0x000002b5,seq=0x119) 13:45:40.900134 10.0.0.4 > 10.0.0.3: ESP(spi=0x000002b3,seq=0x10b) 13:45:41.908735 10.0.0.3 > 10.0.0.4: ESP(spi=0x000002b5,seq=0x11a) 13:45:41.909912 10.0.0.4 > 10.0.0.3: ESP(spi=0x000002b3,seq=0x10c)
|