Protokół SSL

Transkrypt

Protokół SSL
Plan wykładu
1. Popularne protokoły TCP
●
protokół FTP,
●
protokół HTTP.
2. Bezpieczeństwo przesyłanych informacji przez sieć TCP
●
protokół SSL,
●
protokół S-HTTP,
●
protokoły SSH.
1
Protokół FTP
Protokół FTP (File Transfer Protocol) [RFC 959] umożliwia przesyłanie
plików tekstowych i binarnych. Serwer FTP działa na porcie 21.
[serwer] 220 serwer.adres FTP server ready.
[klient]
USER użytkownik<CRLF>
[serwer] 331 Password required for użytkowinik.
[klient]
PASS hasło<CRLF>
[serwer] 230 User użytkownik logged in.
[klient]
SYST<CRLF>
[serwer] 215 UNIX Type: L8 Version: Compaq Tru64 UNIX V5.0
2
Protokół FTP
[klient]
PASV<CRLF>
[serwer] 227 Entering Passive Mode
(ip1,ip2,ip3,ip4,port1,port2)
[klient]
LIST<CRLF>
[serwer] 150 Opening ASCII mode for data connection for
/bin/ls (0.0.0.0,0)
dane są przesyłane na innym porcie. Port 21 będzie przeznaczony tylko dla
komunikatów kontrolnych. W tym celu należy otworzyć nowe połączenie
z adresem: ip1.ip2.ip3.ip4:port1*256+port2.
3
Protokół FTP
[serwer] 226 Transfer complete.
[klient]
PASV<CRLF>
[serwer] 227 Entering Passive Mode
(ip1,ip2,ip3,ip4,port1,port2)
[klient]
RETR jakis.plik<CRLF>
[serwer] 150 Opening BINARY mode data connection for
jakis.plik (0.0.0.0,0)
[serwer] 226 Transfer complete.
[klient]
QUIT<CRLF>
[serwer] Goodbye.
[serwer] Zakończenie połączenia.
4
Serwery FTP
proftpd (http://www.proftpd.org)
vsftpd (http://vsftpd.beasts.org)
Serwer ftp może korzystać z lokalnej bazy użytkowników (konta na serwerze)
lub też autoryzować użytkownika poprzez inny niezależny mechanizm.
Dostęp do ftp bez powłoki: modyfikacja /etc/passwd:
ciesla:x:1002:21::/var/ftp/ciesla:/bin/false
Autoryzacja „lokalna” przez PAM, plik /etc/pam.d/ftp
#%PAM-1.0
auth
required
/lib/security/pam_listfile.so item=user
sense=deny file=/etc/ftpusers onerr=succeed
auth
required
/lib/security/pam_unix.so shadow nullok
#auth
required
/lib/security/pam_shells.so
account
required
/lib/security/pam_unix.so
session
required
/lib/security/pam_unix.so
5
Aplikacje i protokoły WWW
WWW (World Wide Web) jest najpopularniejszym sposobem udostępniania
informacji w sieci. Umożliwia umieszczenie w jednym dokumencie
między innymi tekstu, grafiki, animacji oraz dźwięku.
Standard WWW został opracowany w 1991 roku. Dwa lata później powstała
pierwsza graficzna przeglądarka stron WWW – Mosaic. Strony są
zapisane w języku HTML (HyperText Markup Language), a do ich
przesyłania służy protokół HTTP (HyperText Transfer Protocol).
WWW opiera się na modelu klient – serwer. Strony są identyfikowane za
pomocą adresów URL. Domyślny port dla usługi HTTP to 80.
6
Protokół HTTP
Protokół HTTP [RFC 2616]
przykładowe połączenie:
[klient]
HEAD / HTTP/1.1 <CRLF>
Host: www.if.uj.edu.pl <CRLF>
<CRLF>
[serwer] HTTP/1.1 200 OK
Date: Sun, 10 Oct 2004 19:54:37 GMT
Server: Apache/1.3.27 (Unix) mod_jk/1.2.0 PHP/4.3.2
Last-Modified: Thu, 23 Sep 2004 07:02:33 GMT
ETag: "1357a3-294c-41527509"
Accept-Ranges: bytes
Content-Length: 10572
Content-Type: text/html
[serwer] zamknięcie połączenia
Komenda HEAD zwraca ogólne informacje na temat wskazanego dokumentu.
7
Protokół HTTP
W celu uzyskania treści wskazanego dokumentu należy użyć komendy GET lub
POST. Za pomocą tych komend można również przekazać argumenty do serwera
WWW.
Schemat wywołania:
[klient]
GET /dokument?arg1=wart1&arg2=wart2 HTTP/1.1<CRLF>
Host: www.if.uj.edu.pl<CRLF><CRLF>
lub
[klient]
POST /dokument HTTP/1.1<CRLF>
Host: www.if.uj.edu.pl<CRLF>
Content-Type: application/x-www-form-urlencoded<CRLF>
Content-Length: 21<CRLF><CRLF>
arg1=wart1&arg2=wart2<CRLF>
8
Protokół HTTP
Pozostałe komendy:
●
OPTIONS – wykaz komend dostępnych dla wskazanego dokumentu
(serwera),
●
PUT – wstawia dokument pod określony adres URL,
●
DELETE – kasuje dokument pod określonym adrese,
●
TRACE – zwraca informacje o poprawności zapytania. Nie zwraca,
zawartości dokumentu,
●
CONNECT – zarezerwowana na potrzeby transmisji kodowanej (SSL).
9
Popularne serwery WWW
●
Apache – http://httpd.apache.org – darmowy serwer z udostępnionym kodem
źródłowym (licencja GPL). Posiada liczne moduły umożliwiające współpracę
z innymi systemami (języki programowania, bazy danych). Może działać pod
kontrolą różnych systemów operacyjnych,
●
IIS (Internet Information Services) – http://www.microsoft.com/iis –
komercyjny, wspiera technologię ASP (Active Server Pages). Współpracuje
głównie z językami programowania firmy Microsoft. Działa w środowisku
MS Windows,
●
Tomcat – http://jakarta.apache.org/tomcat – darmowy serwer referencyjny
dla technologii JSP (Java Server Pages), kontener servletów. Napisany w
Javie.
10
Konfiguracja Apache'a
Konfiguracja startowa programu serwera: /etc/conf.d/apache2:
APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5"
Konfiguracja pracy serwera: /etc/apache2/httpd.conf:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/docs/katalog.dla.adres.com
ServerName adres.com
ErrorLog /var/log/apache2/adres.com-error_log
CustomLog /var/log/apache2/adres.com-access_log common
</VirtualHost>
11
Działanie serwera WWW
model request – response
Serwer WWW
żądanie
danych
strona
HTML
przeglądarka
WWW
(JavaScript)
Oprogramowanie serwera WWW
Skrypty (CGI, PHP, Servlety, JSP, ASP, Perl, Python)
System operacyjny
Bazy danych
12
Dokumenty HTML
<html>
<body>
Podaj proszę swoje imie:
<form name="formularz" method="get" action="skrypt.php">
Imie: <input type="text" name="username" />
<input type="submit" />
</form>
</body>
</html>
http://empetrum.if.uj.edu.pl/skrypt.php?username=Ala
13
Skrypty PHP
<?php
$imie = $_GET['username']
?>
<html>
<body>
Witaj <?php echo $imie ?>
</body>
<html>
14
Przekazywanie danych przez
HTTP
Przeglądarka i serwer mogą wymieniać się danymi:
GET – argumenty wywołania skryptu/strony. Dane z przeglądarki do serwera.
Przykład: http://phpbb3.pl/viewtopic.php?f=5&t=1018
POST – Analogiczne, z tym że argumenty nie są przesyłane poprzez adres
URL.
COOKIE – argumenty przesłane od serwera do przeglądarki w celu późniejszej
identyfikacji klienta.
SESSION – argumenty związane z klientem trzymane po stronie serwera
oznaczone identyfikatorem sesji przekazywanym pomiędzy serwerem
i klientem.
15
Przekazywanie danych przez
HTTP - Cookies
Serwer → przeglądarka:
HTTP/1.1 302 Found
Date: Sat, 25 Oct 2008 07:48:15 GMT
Server: Apache
...
Set-Cookie: imie=Michal; expires=Sat, 01 Nov 2008 07:48:15
GMT; path=/; domain=.uj.pl; HttpOnly
Set-Cookie: nazwisko=Ciesla; path=/; domain=.uj.pl; HttpOnly
Location: http://www.uj.pl/index.php?st=0
...
Przeglądarka → serwer:
GET /index.php?st=0& HTTP/1.1
...
Cookie: imie=Michal; nazwisko=Ciesla;
16
Przekazywanie danych przez
HTTP - Sesje
Przekazywanie sesji jest możliwe na dwa sposoby:
1. Poprzez Cookie:
HTTP/1.1 302 Found
Date: Sat, 25 Oct 2008 07:48:15 GMT
Server: Apache
...
Set-Cookie: s=94a576da1f8e5036a0c44fce6b1e1044; expires=Sat,
01 Nov 2008 07:48:15 GMT; path=/; domain=.uj.pl; HttpOnly
...
2. Poprzez dodatkowy argument GET – dodanie do każdego możliwego linka
wysyłanego przez przeglądarkę członu
s=94a576da1f8e5036a0c44fce6b1e1044).
17
Sesje i Cookies w PHP
Ustawianie cookies:
bool setcookie (string $cookiename [, string $value [, int $expire [,
string $path [, string $domain [, bool $secure [,
bool $httponly ]]]]]] )
Odczyt cookies:
$_COOKIE['cookiename'] lub $_REQUEST['cookiename'].
Sesje:
bool session_start()
Przykład:
session_start();
echo 'Witaj na stronie $_SESSION['strona']<br />';
$_SESSION['strona']; = 'inna strona'
18
JavaScript
<SCRIPT TYPE="text/javascript">
<!-function Test(){
var imie = document.formularz.username.value;
alert("Witaj " + imie + "!");
}
// -->
</SCRIPT>
<html>
<body>
Podaj proszę swoje imie:
<form name="formularz" onSubmit="Test()">
Imie: <input type="text" name="username" />
<input type="submit"/>
</form>
</body>
</html>
19
AJAX
AJAX (Asynchronous JavaScript and XML) jest techniką pozwalającą
zapewnić ciągłą (asynchroniczną) komunikację pomiędzy przeglądarką
internetową a serwerem www. AJAX nie stanowi odrębnej technologii
a jedynie wykorzystuje już istniejące: HTTP, JavaScript, CSS, XML
20
AJAX - przykład
<html>
<body>
<script type="text/javascript">
function ajaxFunction(){
var xmlHttp;
try{ // Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e){ // Internet Explorer
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
alert("W Twojej przeglądarce nie można używać AJAXa!");
return false;
}
}
}
21
AJAX - przykład
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.formularz.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.php",true);
xmlHttp.send(null);
}
</script>
<form name="formularz">
Imie: <input type="text" onkeyup="ajaxFunction();"
name="username" />
Czas: <input type="text" name="time" disabled />
</form></body>
</html>
22
AJAX – użycie w kodzie html
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.php",true);
xmlHttp.send(null);
}
</script>
23
AJAX – skrypt time.php
<?php
header("Expires: Sat, 1 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo date("d M Y H:i:s");
?>
Czas będzie aktualizowany przy
każdym wciśnięciu klawisza
w polu „Imie”.
Strona nie będzie przeładowywana.
Przydatne linki:
http://www.w3schools.com/Ajax/default.asp
http://www.php.net
http://httpd.apache.org.
24
Prywatność i bezpieczeństwo
1. Protokół SSL/TLS (Secure Socket Layer / Transport Layer Security) – służy
do wymiany danych, spełnia trzy warunki ochrony informacji: integralność,
uwierzytelnianie oraz poufność. Kodowaniem objęte są wszystkie dane
wysyłane w ramach połączenia. SSL został opracowany w 1994 roku.
2. Protokół S-HTTP (Secure HTTP) – stanowi rozszerzenie protokołu HTTP.
Służy do bezpiecznego przesyłania pojedynczych danych. Opracowany w
1995 roku.
autoryzacja,
wymiana kluczy publicznych
wymiana
danych
25
Podstawy kryptografii
1. Kody podstawieniowe.
2. Kodowanie z wykorzystaniem klucza.
●
klucz symetryczny – do zakodowania i rozkodowania informacji potrzebny
jest ten sam klucz. Potrzebny jest bezpieczny “kanał” w celu wymiany klucza
pomiędzy nadawcą i odbiorcą.
●
klucz asymetryczny – do zakodowania używa sie innego klucza niż do
rozkodowania. Jeden z nich to klucz prywatny, drugi – klucz publiczny.
Znajomość klucza publicznego nie ułatwia znalezienia klucza prywatnego.
26
Podstawy kryptografii
Schematy działania
●
klucz symetryczny
wiadomość
●
A(K)
wiadomość zakodowana
A-1(K)
wiadomość
klucz asymetryczny
wiadomość
A(Publ)
wiadomość zakodowana
B(Pryw)
wiadomość
klucz asymetryczny umożliwia podpisywanie wiadomości:
wiadomość
C(Pryw)
wiadomość zakodowana
D(Publ)
wiadomość
27
Protokół SSL
Protokół SSL działa ponad warstwą transportową (TCP). Dzięki temu może
być wykorzystywany przez wszystkie protokoły warstw wyższych. Jego
główne cele:
●
poufność – dane są przekazywane w bezpiecznej postaci zaszyfrowanej,
●
wszechstronność – niezależni programiści mogą tworzyć programy mogące
się wzajemnie komunikować i uzgadniać parametry transmisji,
●
rozszerzalność – nowe techniki kryptograficzne mogą być łatwo
implementowane w ramach istniejącej technologii,
●
efektywność – wykorzystanie zasobów takich jak czas procesora, liczba
połączeń sieciowych czy przepustowość sieci powinno być optymalne.
28
Protokół SSL
Nawiązanie połączenia (SSL Handshake Protocol).
Client Hello
Certyfikat
Klucz publiczny
Sprawdzenie certyfikatu serwera
[Zmiana algorytmu szyfrującego]
Finished
Server Hello
Certyfikat
Klucz publiczny
Prośba o certyfikat
Server Hello Done
[Zmiana algorytmu szyfrującego]
Finished
W przypadku odnowienia sesji szare komunikaty nie są przesyłane.
29
Protokół SSL
Client Hello – przykład:
80
80
00
00
0a
00
8f
67
07
00
05
00
00
4a
01
00
38
00
00
62
34
03
c0
00
00
15
00
06
01
06
00
2f
00
00
aa
00
00
35
00
00
03
23
4e
40
00
00
12
00
78
00
02
00
16
00
00
fb
00
00
33
00
fe
06
44
00
80
00
00
fe
ca
10
04
00
13
00
ce
01
00
32
00
00
92
00
80
00
fe
09
2d
80
00
00
ff
00
83
03
00
04
00
00
bd
00
39
00
00
64
80
kolejno: długość (103), kod komunikatu “Client Hello”, wersja, długość
bloku obsługiwanych algorytmów szyfrujących (78), identyfikator sesji,
długość bloku identyfikatora (16), obsługiwane algorytmy szyfrujące (3
bajty – jeden algorytm), identyfikator.
30
Certyfikaty SSL
Certyfikat pozwala potwierdzić autentyczność strony WWW. Aby certyfikat
był ważny musi być podpisany, przez “zaufaną” osobę lub organizację.
Podpisywanie wiadomości (certyfikatu):
●
wygenerowanie skrótu wiadomości (MD5),
●
zakodować go kluczem prywatnym,
Wiadomość jest rozprowadzana wraz z zakodowanym skrótem i (znanym
powszechnie) kluczem publicznym podpisującego. W celu sprawdzenia
autentyczności należy:
●
rozkodować skrót kluczem publicznym podpisującego
●
porównanie go ze skrótem wyliczonym samodzielnie.
31
Biblioteka OpenSSL
OpenSSL [http://www.openssl.org]
funkcje wykorzystywane do nawiązania połączenia openssl/ssl.h
int SSL_library_init(void); // inicjalizacja biblioteki
SSL_CTX *SSL_CTX_new(SSL_METHOD *method); // przygotowanie
obiektu obsługującego połączenie, jako argument można podać
np. SSL_METHOD SSLv23_method(void).
SSL *SSL_new(SSL_CTX *ctx); // obiekt zarządzający transmisją SSL.
int SSL_set_fd(SSL *ssl, int fd); // powiązanie z deskryptorem
int SSL_connect(SSL *ssl);
// nawiązanie połączenia SSL.
32
Biblioteka OpenSSL
int SSL_read(SSL *ssl, void *buf, int num);
z SSL.
// czytanie
int SSL_write(SSL *ssl, const void *buf, int num); //
pisanie z SSL.
int SSL_shutdown(SSL *ssl); // zamknięcie połączenia SSL.
Dodatkowo biblioteka udostępnia wiele funkcji przydatnych w kryptografii:
●
algorytmy obliczające sumy kontrolne np. SHA, MD5, HMAC
●
algorytmy szyfrujące np. AES, DES, RSA,
●
generowanie dużych liczb losowych, generowanie kluczy.
33
SSL w Javie
import java.net.*;
import java.io.*;
import javax.net.ssl.*;
public class SSLSocketClient {
public static void main(String[] args) throws Exception {
try {
SSLSocketFactory factory =
(SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket =
(SSLSocket)factory.createSocket
("www.verisign.com", 443);
socket.startHandshake();
PrintWriter out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())));
34
SSL w Javie
out.println("GET / HTTP/1.0");
out.println();
out.flush();
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
out.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
35
Protokół S-HTTP
Podstawowe własności S-HTTP:
●
nowa komenda Secure * Secure-HTTP/1.2. W odpowiedzi serwer
przesyła informację o wykorzystywanych technologiach szyfrowania,
●
używa szyfrów symetrycznych. Wymiana tajnych kluczy następuje z
wykorzystaniem szyfrów asymetrycznych lub innych metod autoryzacji
(np. Kerberos),
●
nie wprowadza dodatkowych protokołów pośredniczących w transmisji
danych – działa na wyższym poziomie niż SSL.
36
Protokół SSH
SSH (Secure Shell) jest następcą usługi Telnet. Umożliwia on wykonywanie
poleceń na zdalnym komputerze. Przesyłane informacje są kodowane.
Usługa jest dostępna przez port 22. Protokół SSH dzieli sie na kilka
warstw:
●
protokół warstwy transportowej (Transport Layer Protocol),
●
protokół autoryzacji (User Authentication Protocol),
●
protokół połączenia (Connection Protocol),
●
protokoły użytkownika (Client Protocols).
37
SSH – protokół warstwy
transportowej
[serwer] SSH-protokół-oprogramowanie komentarz
[klient]
SSH-protokół-oprogramowanie komentarz<CRLF>
przykład: SSH-2.0-OpenSSH_3.6.1p2
[serwer] <algorytmy obsługiwane przez serwer>
[klient]
<algorytmy używane przez klienta>
[klient-serwer]
<wymiana kluczy publicznych
[klient-serwer]
Po uzgodnieniu algorytmów transmisja jest kodowana.
Cechy SSH (w porównaniu do SSL)
●
różne algorytmy używane do transmisji w każdą ze stron,
●
zwiększona uniwersalność kosztem bezpieczeństwa.
38
Protokół SSH
Najważniejsze zastosowania SSH
●
ssh – następca telnet, rlogin,
●
scp (Secure Copy) – narzędzie do kopiowania plików, następca rcp,
●
sftp (Secure FTP) – protokół do transferu plików, następca FTP.
Oprogramowanie OpenSSH (http://www.openssh.com) udostępnia
implementacje klientów i serwerów wspomnianych usług.
39
Firewall - iptables
Aktualna konfiguracja: iptables-save > konfiguracja.txt:
# Generated by iptables-save v1.3.5 on Tue Oct 24 12:36:50 2006
*filter
:INPUT DROP [5203:1000594]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [158054:29139188]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.255.192 -i eth0 -p tcp -m state
--state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 143.232.11.26 -i eth0 -p tcp -m state --state NEW -m
tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
COMMIT
# Completed on Tue Oct 24 12:36:50 2006
Ustawianie konfiguracji: iptables-restore konfiguracja.txt
40
Podsumowanie
Protokół FTP służy do przesyłania plików a protokół HTTP przesyła
dokumenty HTML i działa w modelu request-response. Ze względu na
szybki rozwój tego segmentu rynku powstało wiele technologii
umożliwiających tworzenie serwisów internetowych wprowadzających
możliwości interakcji pomiędzy klientem a serwerem tj. JavaScript, PHP,
AJAX.
Bezpieczeństwo w sieciach jest najczęściej zapewniane przez algorytmy
z kluczem asymetrycznym. Dzięki nim, możemy nie tylko skutecznie
szyfrować przesyłaną treść, ale również zidentyfikować drugą stronę
komunikacji. Najczęściej wykorzystuje się tutaj rozwiązania oparte o
protokół SSL.
41