ALESSIA CIRAUDO Problematiche di Sicurezza in Ambiente Linux Progetto Bari-Catania: Buone Prassi Integrative tra Università e Impresa FlashC om Durata: 2 mesi Tutor aziendale: Vincenzo Mosca Collaboratore aziendale: Marco Ortisi Tutor universitario: Giampaolo Bella
Scopo dello Stage 1. Studiare problematiche di sicurezza in Internet e gestione di NETFILTER 2. Realizzare uno script C che implementi le regole di una politica di gestione della tabella IP Nel frattempo: approfondire Linux e C. Passi seguiti 1. Introduzione alla comunicazione in Internet 2. Studio di particolari chiamate di sistema e funzioni di libreria C 3. Studio del tool di sistema iptables 4. Realizzazione dello script C finale
Comunicazione in Internet switch INTRANET firewall router INTERNET Coppia Socket Indirizzo IP: intero a 4 byte 151.97.1.6 (unict.it) Port: intero a 16 bit range da 1 a 65535 IP_server + port_server IP_client + port_client
Routing 1 1 2 route PRINT route n (windows) (linux) Modello ISO-OSI (semplificato) m u l t i p l e x i n g Applicazione Trasporto Rete Datalink fisico Applicazione Trasporto Rete Datalink fisico d e m u l t i p l e x i n g
Header IP 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Version IHL Time to Live Identification Type of Service Protocol Destination Address Options Flag Source Address Total Length Fragment Offset Header Checksum Padding Header TCP 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Data Offset Source Port Reserved Checksum Sequence Number Acknowledgment Number U A P R S F R C S S Y I G K H T N N Options Data Destination Port Window Urgent Pointer Padding
Header UDP 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Source Port Destination Port Length Checksum Data Iptables FILTER NAT : : INPUT OUTPUT FORWARD PREROUTING OUTPUT POSTROUTING MANGLE : PREROUTING OUTPUT iptables tabella comando parametri opzioni estensioni
Uso di regole per iptables 192.168.0.65 192.168.1.1 192.168.0.67 192.168.1.2 iptables A INPUT s 192.168.1.0/24 j ACCEPT iptables t nat A POSTROUTING s 192.168.1.0/24 j MASQUERADE iptables t nat A PREROUTING s 192.168.1.0/24 d! 192.168.0.67 j DROP Script C finale Obiettivo: permettere all utente di realizzare regole per iptables, specificando pochi semplici comandi Idea: utilizzare delle parole chiave, che individuino le principali operazioni
Possibili operazioni - parole chiavi Bloccare il traffico in ingresso e in uscita BLOCKIN - BLOCKOUT Acconsentire il traffico in ingresso e in uscita Masquerade Ridirigere il traffico esterno Bloccare il traffico dei client locali Acconsentire il traffico dei client locali Cancellare tutte le regole di FILTER Cancellare tutte le regole di NAT PASSIN - PASSOUT MASK PASSPAT BLOCKNAT PASSNAT DELFILTER DELNAT Comando generale e flag #./ipreg [-m] c keyword [-i/i ipaddr[/mask]] [-n ipaddr[/mask]] [-r/r ipaddr[/mask]] [-p protocol] [-l/l ports] [-d destport] m c i - I n r - R p l - L d massima priorità parola chiave (comando) indirizzo IP Indirizzo IP di destinazione (PASSPAT) Indirizzo IP remoto (BLOCKNAT - PASSNAT) protocollo porta porta di destinazione (PASSPAT)
Variabili globali char *opzreg[20]; char key; char *ipaddr="0/0"; char *remote="0/0"; char *ipdest = "0/0"; char *port = ""; char *destport = ""; char multi = 0; char *prot = "all"; char *priority = "-A"; Acquisizione argomenti 1. Controllo sul numero di argomenti 2. Acquisizione degli argomenti, con controllo di validità if (argc<2) funerr(argv[0]); while ((opt = getopt(argc, argv, "mc:i:i:r:r:n:p:l:l:d:"))!= EOF) { switch(opt) { case... default: funerr(argv[0]); break; } if (rtn==1) funerr(argv[0]); }
Validità indirizzo IP (1) 1. Lunghezza della stringa > 31? if (strlen(addr)>31) { printf( ERROR: invalid IP address\n ); return 1; } Validità indirizzo IP (2) 2. Individuazione dell indirizzo IP e della maschera strncpy(ip,addr,31); strtok(ip, / ); if (!strcmp(ip, addr)) mask= 0 ; else mask = IP + strlen(ip)+1;
Validità indirizzo IP (3) 3. Controllo validità indirizzo IP if (inet_aton(ip,&str)!=0) valid= 1 ; else { printf(error: invalid IP address\n ); return 1; } Validità indirizzo IP (4) 4. Controllo validità maschera I. è espressa come un indirizzo IP? II. è un numero compreso tra 0 e 32?
Costruzione regola Costruzione di un array (opzreg), che verrà usato dalla system call execv. Il primo elemento sarà il nome del comando; il secondo l azione da effettuare. opzreg[0] = "iptables"; opzreg[1] = priority; Costruzione regola Keyword key Tabella Catena Indirizzo IP Target BLOCKIN 0 Filter Input Sorgente DROP BLOCKOUT 1 Filter Output Destinazione DROP PASSIN 2 Filter Input Sorgente ACCEPT PASSOUT 3 Filter Output Destinazione ACCEPT MASK 4 Nat Postrouting Sorgente MASQUERADE PASSPAT 5 Nat Prerouting Sorg. - Dest. DNAT BLOCKNAT 6 Nat Prerouting Sorg. - Dest. DROP PASSNAT 7 Nat Prerouting Sorg. - Dest. ACCEPT DELFILTER 8 Filter - - - DELNAT 9 Nat - - -
Costruzione regola Indicazione del protocollo e dell eventuale porta Infine, uso della system call execv execv("/sbin/iptables", opzreg); Funzionamento dello script 192.168.0.65 192.168.1.1 192.168.0.67 192.168.1.2 #./ipreg c PASSIN i 192.168.1.0/24 #./ipreg c MASK i 192.168.1.0/24 iptables A INPUT s 192.168.1.0/24 j ACCEPT p all iptables A POSTROUTING t nat s 192.168.1.0/24 j MASQUERADE p all
Funzionamento dello script 192.168.0.65 192.168.1.1 192.168.0.67 192.168.1.2 #./ipreg c BLOCKNAT i 192.168.1.0/24 R 192.168.0.67 iptables A PREROUTING t nat s 192.168.1.0/24 d! 192.168.0.67 j DROP p all Per concludere Acquisizione dei concetti teorici/pratici sulla comunicazione in Internet Incrementata familiarità con la programmazione in C Approccio col mondo del lavoro (prima esperienza lavorativa)