VPN w Linuxie

original version by: Nikos Drakos, CBLU, University of Leeds * revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan * with significant contributions from: Jens Lippmann, Marek Rouchal, Martin Wilck and others

Spis rzeczy

Protokół IP Security

Wprowadzenie do IPSec

Protokół IPsec dostarcza mechanizmy pofuności oraz autentykacji w warstwie IP. Systemy implementujące ten protokół mają możliwość wyboru wymaganego bezpiecznego protokołu, określenia algorytmów, które mają być używane dla serwisów oraz kluczy kryptograficznych wymaganych do dostarczenia żądanych usług. IPsec może być użyty do ochrony jednej lub więcej ścieżki pomiędzy parą hostów, parą ,,bezpiecznych bram''1 lub pomiędzy bezpieczną bramą i hostem.

Zbiór usług bezpieczeństwa, które IPsec może dostarczać zawiera kontrole dostępu, bezpołączeniową integralność, uwierzytelnienie źródła danych, odrzucanie powtórzonych pakietów (forma częściowej integralności kolejności), poufność (szyfrowanie) oraz ograniczoną poufność strumienia ruchu. Ponieważ te usługi dostarczane są w warstwie IP, IPsec może być wykorzystany do zabezpieczenia dowolnego protokołu warstwy wyższej, bez jakichkolwiek zmian w nim, przykładowo TCP, UDP, BGP, HTTP itd.

DOI (Domain Of Interpretation) dodatkowo wspiera negocjację kompresji pakietów IP. Możliwość ta została stworzona poprzez obserwację, że gdy szyfrowanie jest wykorzystywane z IPsec, skutacznie uniemożliwia efektywną kompresję w niższych warstwach.

Jak działa IPsec

IPsec używa dwóch protokołów do zapewnienia bezpieczeństwa ruchu:
  • AH (Authentication Header) dostarcza bezpołączeniowej integralności, uwierzytalniania źródła danych oraz mechanizmy odrzucające powtórzone pakiety.
  • ESP (Encapsulating Security Payload) jest protokołem dostarczającym poufności (szyfrowania) oraz ograniczoną poufność strumienia ruchu. Może dodatkowo dostarczać te same usługi co protokół AH.
Obydwa protokoły AH i ESP są mechanizmami do kontroli dostępu bazujących na zastosowaniu dystrybucji kluczy kryptograficznych oraz zarządzaniu strumienia danych.

Te protokoły mogą być stosowane razem lub razem, dostarczając wymaganego zbioru usług bezpieczeństwa dla protokołów IPv4 oraz IPv6. Każdy z tych protkołów obsługuje dwa tryby pracy:

  • tryb transportowy (ang. transport mode) sotsowany do zabezpieczania przede wszystkim protokołów warstw wyższych
  • tryb tunelowania (ang. tunnel mode) stosowany do przenoszenia (tunelowania) (innych) pakietów IP

IPsec pozwala użytkownikowi lub administratorowi systemu do kontroli szczegółowości oferowanych usług bezpieczeństwa. Przykładowo możemy stworzyć pojedynczy szyfrowany tunel do przenoszenia całego ruchu pomiędzy dwoma bramami albo oddzielny szyfrowany tunel może być stworzony dla każdego połączenia TCP pomiędzy dowolną parą hostów komunikujących się poprzez te bramy.

Ponieważ usuługi bezpieczeństwa oferowane przez IPsec, używają współdzielonych kluczy kryptograficznych, protkół ten zależy od odzielnego zbioru mechanizmów, których zadaniem jest dostarczenie i wymiana kluczy. Możliwe są dwa schematy wymiany kluczy: automatyczny i manualny. Do automatycznej dystrybucji kluczy mogą być stosowane różne mechanizmy: IKE (Internet Key Exchange) oparty na kryptosystemie klucza publicznego, Kerberos oparty na KDC, SKIP (Simple Key management for Internet Protocols), ISAKMP (Internet Security Association and Key Management Protocol) i inne. Najczęściej używanym protokołem wymiany kluczy jest IKE.

Ograniczenia IPsec

IPsec został zaprojektowany to zabezpieczania połączeń pomiędzy hostami. Ponieważ IPsec działa w warstwie IP, posiada pewne ograniczenia:
  • IPsec nie zabezpiecza połączeń end-to-end tak jak to robią protokoły na wyższych warstwach. IPsec szyfruje połączenie IP pomiędzy dwoma maszynami, co nie jest równoważne szyfrowaniu wiadomości pomiędzy użytkownikami bądź aplikacjami.
  • IPsec autoryzuje maszyny a nie użytkowników. Mechanizmy silnej autoryzacji służą do kontrolowania, jakie wiadomości pochodzą z jakich maszyn. Jeżeli jest potrzebna kontrola dostępu użytkowników należy użyć innych mechanizmów (warstw wyższych), które mogą być łączone z IPsec.
  • IPsec nie potrafi zapobiegać atakom DoS (Denial of Service) aczkolwiek może skutecznie utrudniać możliwość ich zajścia.
  • IPsec nie potrafi powstrzymać analizy ruchu. Analiza ruchu jest próbą wyciągnięcia z wiadomości jak najwięcej informacji bez oglądania jej treści. W przypadku IPsec analiza ruchu polega na oglądaniu niezaszyfrowanych nagłówków pakietów, adresów bramek (źródłowej i docelowej), wielkości pakietu, częstości itp. Z takich danych można wyciągnąć dużo informacji. IPsec nie potrafi zapobiegać analizie ruchu ale dzięki stosowaniu różnych technik można ją skutecznie utrudnić.

IPsec i VPN

Protokół IPsec bardzo dobrze nadaje się do tworzenia Wirtualnych Sieci Prywatnych (VPN 2). IPsec tworzy bezpieczny kanał poprzez niezaufną sieć. Sieci połączone poprzez ten tunel tworzą VPN. Mamy wiele możliwości instalacji IPsec:

  • instalujemy IPsec na ścianach ogniowych (ang. firewalls) łączących sieci lokalne z internetem. Takie rozwiązanie pozwala na stworzenie VPN łączących wiele oddziałów firmy zlokalizowanych w różnych miejscach i zabezpiecza przed każdym spoza sieci lokalnych tejże firmy.
  • instalujemy IPsec na serwerach oddziałów firmy. W tym przypadku cały ruch w korporacji jest szyfrowany. Chroni to ruch przed wszystkimi za wyjątkiem maszyn komunikujących się.
  • w innym przypadku może nam nie zależeć na poufności ale na kontroli dostępu do danych. Możemy wtedy użyć autoryzacji pakietów opartych na IPsec bez "włączaniazyfrowania.
  • możemy z każdej maszyny w sieci zrobić brame IPsec dla samej siebie. Wtedy wszystkie połączenia są szyfrowane. Dane są chronione przed wszystkimi poza maszynami do których należy połączenie.
Przedstawione powyżej techniki mogą być łączone w różny sposób. Można przykładowo używać autoryzacji dla wszystkich połączeń a szyfrowania tylko dla niektórych. IPsec dostarcza mechanizmów natomiast człowiek tworzy strategie. Dodatkowo IPsec może być, i często powinien być, łączony z protokołami bezpieczeństwa wyższych warstw.

Tryby pracy IPsec

IPsec dostarcza dwa podstawowe mechanizmy bezpieczeństwa: autoryzację oraz szyfrowanie. Szyfrowania dostarcza ,,podprotokół'' ESP 3 natomiast autoryzacji może dostarczać ESP lub AH 4. Typowymi rozwiązaniami są:
  • ESP używany do szyfrowania i autoryzacji
  • AH używany gdy wymagana jest sama autoryzacja

Standard dopuszcza inne warianty, ale nie są one szeroko stosowane:

  • szyfrowanie ESP bez autoryzacji. Takie użycie jest niebezpieczne i nie należy go używać. Zostało znalezionych wile możliwości ataku na taki strumień danych.
  • szyfrowanie ESP i autoryzacja AH. Takie rozwiązanie jest dużo bardziej obciążające niż użycie autoryzacji z protkołu ESP. Wyjątkiem, gdy warto stosować taki wariant, może być przypadek gdy w naszej sieci autoryzacja AH jest standardem.
  • podwójna autoryzacja przez ESP i AH może być używana gdy takie są wymagania bezpieczeństwa
  • autoryzacja ESP bez szyfrowania

Elementy kryptografii w IPsec

IPsec łączy w sobie różne techniki kryptograficzne. Wszystkie one są dobrze znane i przeanalizowane. Pierwszą zasadą przy tworzeniu IPsec jest niedodawanie nowych słabo zrozumiałych technik kryptograficznych.

Szyfrowanie

Szyfrowanie w protokole ESP odbywa się poprzez zastosowanie jednego z symetrycznych algorytmów. Obecnie dokumenty RFC mówią, że algorytm DES 5 musi być implementowany w IPsec, 3DES (Triple DES) powinien a wiele innych może (w tym Rijndeal zwycięzca konkursu AES 6).

HMAC

Autentyfikacja jest w IPsec wykonywana za pomocą funkcj HMAC (Hashed Message Authentication Code). Nie jest to prosta funkcja haszująca ale bardziej złożona operacja, kóra używa jakiegoś algorytmu haszującego (MD5 lub SHA) oraz klucza. Zwykła funkcja skrótu mówi nam, że dane nie zostały zmienione podczas transmisji bądź były zmienione i dla nich został wygenerowany nowy skrót. Gdy używamy HMAC mamy pewność, że wysyłający zna ponadto klucz. Atakujący zatem nie może wygenerować nowych danych i zregenerować skrót ponieważ nie zna klucza. Długość skrótu HMAC wynosi 96 bitów (pierwotny skrót jest obcinany do tej wielkości).

Diffie-Hellman

Algorytm uzgadniania klucza Diffiego-Hellmana pozwala dwóm stronom ustalić klucz w taki sposób, że nawet ten kto podsłuchuje całą konwersację nie może ustalić jaki to klucz. Protokół bazuje na problemie dyskretnego logarytmu i z tego powodu jest uważany za bezpieczny. Matematycy pracują nad tym problemem od wielu lat i nie udało im się przybliżyć do rozwiązania aczkolwiek również nie udowodniono, że rozwiązanie efektywne nie istnieje.

RSA

Algorytm RSA (Rivest, Shamir and Adleman) jest bardzo szeroko używanym kryptosystemem klucza publicznego. Bazuje on na trudności obliczeniowej faktoryzacji dużych liczb. W IPsec jest używany jako jedna z technik do uwierzytelniania bram (hostów) dla prowadzenia dalszej negocjacji klucza.

Zarządzenie kluczem

Protokół zarządzania (wymiany) klucza pełni w IPsec kluczową rolę. Jego zadaniem jest negocjacja odpowiednich parametrów połączenia, czasy życia, algorytmu który będzie w dalszej części używany. Cała negocjacja odbywa się poprzez wymiane pakietów UDP na porcie 500 pomiędzy bramkami.

Najczęściej używanym protokołem służącym do tego jest IKE 7. W dalszej części punktu skupie się na nim opisując zarządzanie kluczem. Protokół ten został zdefiniowany w dokumencie RFC 2409 ,,The Internet Key Exchange (IKE)''. IKE jest rezultatem długiego i złożonego procesu w którym kilka protokołów zostało zaproponowanych i przeanalizowanych. Łagodnie upraszczając, możem powiedzieć, że IKE łączy następujące protokoły:

  • ISAKMP (Internet Security Association and Key Management Protocol) zdefiniowany w RFC 2048 zarządza negocjacją połączenia oraz definiuje bezpieczne powiązania (ang. Security Associations) co oznacza opisanie parametrów połączenia.
  • IPSEC DOI 8 for ISAKMP zdefionwane w RFC 2407
  • Oakley key determination protocol zdefiniowany w RFC 2412 tworzy klucze używane w algorytmie uzgadniania Diffiego-Hellmana.

Negocjacja IKE

Przed zestawieniem bezpiecznego kanału oraz przy wymianie kluczy odbywa sie negocjacja. Protokół IKE wyróżnia dwie fazy negocjacji:
  1. dwa hosty ustawiają dwukierunkowe bezpieczne powiązanie (ISAKMP SA), które będzie używane w drugiej fazie negocjacji
  2. używając bezpiecznego połączenia z fazy pierwszej są negocjowane właściwe połączenia IPsec (IPsec SAs). Połączenia te są jednokierunkowe (różne klucze są używane do każdego kierunku) i zawsze tworzone w parache, żeby zapewnić dwustronną komunikację. Pomiędzy dwomy bramami może zostać zdefiniowanych więcej niż jedna para takich połączeń.
Przed stworzeniem bezpiecznych powiązań bramy muszą móc siebie zautoryzować. Uwierzytelnienie partnera odbywa się na początku fazy pierwszej i może zostać wykonane w różny sposób. Dopuszczalne mechanizmy to m.in. dzielony klucz, RSA, certyfikaty X.509.

Protokół IKE jest bardzo elastyczny. Pozwala m.in. na negocjacje takich parametrów jak:

  • czas życia SA (bezpiecznego powiązania) przed kolejną wymianą kluczy
  • algorytm używany do danego powiązania
  • algorytm autentyfikacji
  • wybór grupy dla algorytmu uzgadniania klucza Diffiego-Hellmana

Linux i IPsec

FreeS/WAN

Założenia projektu

FreeS/WAN jest implementacją protokołu IPsec dostępną dla jądra Linux. Nie jest ona dystrybuowana wraz z główną linią jądra ze względu na ograniczenia na silną kryptografię w Stanach Zjednoczonych oraz wielu innych krajach. Projekt FreeS/WAN jest obecnie najpełniejszą i najbardziej zaawansowaną implementacją IPsec na platformę z jądrem Linux.

Głównym celem jaki przyświeca twórcą FreeS/WAN jest uczynienie Internetu bezpieczniejszym. Dzięki temu, że program jest rozprowadzany na zasadach licencji GNU 9 General Public License może być dowolnie używany i rozprowadzany wraz z kodem źródłowym. FreeS/WAN działa na wszystkich platformach na jakie dostępny jest Linux.

Zwiększenie bezpieczeństwa internetu ma być osiągnięte przede wszystkim przez rozszerzenie FreeS/WAN o możliwość tzw. oportunistycznego szyfrowania (ang. opportunistic encryption). Jest to bardzo ciekawa cecha, która pozwala zabezpieczyć komunikację między dowolnymi dwoma hostami w Internecie, bez wcześniejszego dzielenia klucza (ang. pre-shared secret) ani wcześniejszej wymiany kluczy publicznych. Uwierzytelnienie hosta odbywa się na podstawie informacji zawartych w bezpiecznym DNS (ang. Secure DNS). Niestety Secure DNS nie jest powszechnie używany obecnie być może dlatego, że ,,agencjom bezpieczeństwa'' zależy na możliwości monitorowania sieci.

Budowa FreeS/WAN

FreeS/WAN składa się z kilku części:
KLIPS
(KerneL IPsec Support) jest to łata na jądrą wprowadzająca niezbędne rozszerzenia dla IPsec w Linuksie:
  • szyfrowanie
  • funkcje uwierzytelniające
  • tworzenie ESP i nagłówków AH wychodzących pakietów
  • interpretacja nagłówków przychodzących pakietów

PLUTO
jest demonem, który implementuje protokół IKE. Jego zadaniem jest:
  • obsługiwanie negocjacji
  • autoryzacja hostów
  • tworzenie bezpiecznych powiązań (SAs) IPsec i przekazanie danych wymaganych do przejęcia ich przez KLIPS
  • dostrojenie konfiguracji rutingu i firewall do spełnienia wymagań IPsec

ipsec
polecenie kontrolujące IPsec
/etc/ipsec.conf
plik konfiguracyjny dla FreeS/WAN w Linuksie. W nim można definiować większość parametrów kontrolujących zachowanie IPsec.

Instalacja FreeS/WAN

Aby zainstalować FreeS/WAN musimy posiadać źródła jądra i skompilować je z nałożonymi łatami rozszerzającymi możliwości o IPsec. Obecnie wspierane są wszystkie serie stabilne czyli 2.0.x, 2.2.x oraz 2.4.x. IPsec możemy wkompilować statycznie w jądro bądź jako ładowalne moduły. Po skompilowaniu nowego jądra instalujemy je następnie kompilujemy dodatkowe narzędzia w ,,przestrzeni użytkownika'':
  • program ipsec (domyślnie) w /usr/local/sbin
  • inne programy (domyślnie) w /usr/local/lib/ipsec
  • strony podręcznika systemowego (ang. manual) w /usr/local/man
  • tworzymy plik konfiguracyjny, kontrolujący FreeS/WAN /etc/ipsec.conf
  • tworzymy parę kluczy RSA publiczny/prywatny dla naszego systemu i umieszamy w /etc/ipsec.secrets. Oczywiście możemy tam też umieścić zamiast kluczy RSA dzielony sekret (ang. shared secret) ale ta metoda autoryzacji jest niepolecana jako mało bezpieczna.
  • instalujemy skrypty startowe uruchamiające IPsec przy starcie systemu
Wszystkie powyższe czynności mogą zostać wykonane automatycznie przy instalacji FreeS/WAN poprzez uruchomienie odpowiedniego ,,Makefile'a''.

Możliwości FreeS/WAN

Możliwości jakie zostały zaimplementowane we FreeS/WAN do wersji 1.9:
  • mechanizmy zarządzania kluczem
    • manualna - przy pomocy kluczy umieszczanych w /etc/ipsec.conf
    • automatyczna - klucze są ustalane w czasie negocjacji i odnawiane po określonym czasie. Automatycznym zarządzaniem kluczem zajmuje sie demon PLUTO, który implementuje protokół IKE.

  • metody autoryzacji używane przez protokół IKE
    • dzielone sekrety (and. shared secrets)
    • sygnatury RSA
    • szukanie kluczy RSA w DNS (w pełni bezpieczne dopiero z Secure DNS)

  • grupy dla negocjacji kluczy Diffiego-Hellmana - zaimplementowane
    • grupa 2 (1024 bity)
    • grupa 5 (1536 bity)
    • grupa 1 nie jest implementowana jako niebezpieczna mimo, że wymagana przez RFC
  • algorytmy szyfrowania
    • zerowe szyfrowanie (ang. null encryption) używane gdy ESP ma spełniać rolę tylko uwierzytelniającą
    • 3DES
    • DES jest tylko zawarty w kodach źródłowych (potrzebny do implementacji potrójnego DES) ale niedostępny z poziomu użytkownika (mimo, że dokumenty RFC wymagają go) ponieważ jest niebezpieczny

  • algorytmy używane do autentyfikacji
    • MD5 (Message Digest Algorithm)
    • SHA (Secure Hash Algorithm)

  • algorytmy kompresji
    • obecnie tylko IPComp

Inne implementacje IPsec

Istnieją inne implementacje IPsec dla jądra Linuksa, które są dystrybuowane bez ograniczeń:
  • pipsecd (http://perso.enst.fr/~beyssac/pipsec/) jest ,,lekką'' implementacją protokołu IPsec, która nie wymaga rekompilacji jądara. Korzysta z bilbiotek OpenSSL, z których czerpie algorytmy kryptograficzne. Wspiera tylko tryb tunelowania.
  • ipnsec (ftp://ftp.eunet.cz/icz/ipnsec/) oparty na implementacji z OpenBSD i używający do zarządzania kluczami eksperymentalnego protokołu Photuris opisanego w RFC 2522 i 2523.

Literatura

1
Dokumentacja do FreeS/WAN wersja 1.9

2
RFC 2411, ,,IP Security Document Roadmap''

3
RFC 2401, ,,Security Architecture for the Internet Protocol''

4
RFC 2764, ,,A Framework for IP Based Virtual Private Networks''

5
RFC 2409, ,,The Internet Key Exchange (IKE)''

6
RFC 2408, ,,Internet Security Association and Key Management Protocol (ISAKMP)''

7
RFC 2407, ,,The Internet IP Security Domain of Interpretation for ISAKMP''

8
RFC 2412, ,,Oakley key determination protocol''

About this document ...

VPN w Linuxie

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 -verbosity 0 -no_navigation -dir /home/konrad/public_html/elektron/mydocs/vpn /home/konrad/buda/mgr/mydocs/vpn.tex

The translation was initiated by on 2003-12-21


Footnotes

... bram''1
Wyrażenie bezpieczna brama jest używane do systemów pośredniczących, które implementują protokół IPsec. Mogą to być przykładowo rutery, ściany ogniowe itp.
... (VPN2
Virtual Private Networks
... ESP3
Encapsulated Security Payload
... AH4
Authentication Header
... DES5
Data Encryption Standard
... AES6
Advanced Encyprtion Stnadard
... IKE7
Internet Key Exchange
... DOI8
Domain of Interpretation
... GNU9
Gnu is Not Unix


2003-12-21