Swappa : Uni / Simulazione esame - 1 dicembre 2008
Creative Commons License

 :: Simulazione esame - 1 dicembre 2008 ::

Esercizio 1

Punto 1

Usare tcpdump per salvare su di un file il traffico generato eseguendo i seguenti comandi:

Soluzione

Per fare un SYN scan con nmap, si usa la seguente sintassi:

nmap -sS -p 40:80 192.168.10.3

dove:

nmap mi risponde dicendomi quali sono le porte aperte.

Tutta sta roba però devo dumparla tramite tcpdump. Per salvare il traffico di rete su di un file, occorre passare la switch -w nomefile a tcpdump. La sequenza di operazioni è quindi la seguente:

  1. avvio il logging su file di tcpdump
  2. eseguo la scansione con nmap come spiegato sopra
  3. termino il logging di tcpdump

Il logging lo eseguo così:

tcpdump -n -i eth0 -w nomefiledilog

dove

Punto 2

Dal log salvato al punto 1, usando i filtri di tcpdump, ricavare la lista delle porte nello stato di LISTEN, utilizzando contemporaneamente le seguenti condizioni sui pacchetti:

Soluzione

Innanzitutto, per far leggere a tcpdump un file di log da lui stesso generato precedentemente, si usa la switch -r nomefiledilog.

Per trovare solo i pacchetti provenienti dalla macchina del docente si usa l'espressione di controllo src host 192.168.10.3. La riga di comando sarà quindi:

tcpdump -n -r nomefiledilog src host 192.168.10.3

Per trovare solo i pacchetti relative alle porte aperte, devo filtrarli mettendo come condizione che mi arrivino con entrambi i flag SYN e ACK ad 1. Infatti, il SYN scan manda pacchetti TCP contenenti il flag SYN, e se riceve un pacchetto con SYN e ACK a 1 da quella porta, vuol dire che la porta è aperta. Con tcpdump, tutto ciò si esprime tramite condizioni a basso livello.

Nell'header TCP, il byte che ha a che fare con i flag è il 13° (vedere le slide del corso se non ci credete). Il flag SYN è il bit che vale 2, il flag ACK è il bit che vale 16. Per controllare che entrambi siano settati, il 13° byte deve quindi essere a 16+2 = 18. In tcpdumpese si scrive così: tcp[13]=18 e la riga di comando diventa:

tcpdump -n -r nomefiledilog src host 192.168.10.3 and tcp[13]=18

Per controllare le porte, tcpdump offre il simpatico comando portrange x-y, ma nel testo dell'esercizio si parla esplicitamente di filtro sul contenuto binario.

Orbene: nell'header TCP i byte che si occupano della porta sorgente sono i primi due. Per dire a tcpdump di controllare questi due byte, si usa la sintassi tcp[init:offset]. Nel nostro caso init = 0, e offset = 2 (i primi 2 byte). Il controllo sulle porte è semplice: tcp[0:2] >= 40 && tcp[0:2] <= 80. Da notare che sto usando il && invece dell'and, come sopra.

La riga di tcpdump diventa quindi

tcpdump -n -r nomefiledilog 'src host 192.168.10.3 and tcp[13]=18 
        && tcp[0:2] >= 40 && tcp[0:2] <=80'

Notate anche che ho messo tutta l'espressione tra apici ', per evitare che la shell facesse casini.

Esercizio 2

Configurare iptables in modalità stateful, nel modo più stringente possibile, per fare ste cose:

Autorizzare udp sulla porta 514

Qui ho dei pacchetti provenienti dalla porta 514 della macchina del docente, che arrivano alla porta 514 locale. Non è prevista risposta, quindi devo solamente prevedere il caso in cui essi arrivino.

iptables -A INPUT -i $INET_IFACE -p udp -s $PC_DOCENTE --sport 514
         --dport 514 -j ACCEPT

Per controllare il tutto, vado su un'altra macchina e lancio il seguente comando di nemesis:

nemesis udp -x 514 -y 514 -S 192.168.10.3 -D 192.168.20.3

dove:

nemesis genera il pacchetto. La riga di iptables ovviamente va loggata, così che in /var/log/messages vedremo il log relativo a questi pacchetti in arrivo.

Per inciso: essendo la porta 514 chiusa, dal nostro computer partirà anche un ICMP che informerà il mittente che quella porta, appunto, è chiusa.

Autorizzare query DNS al pc del docente

Le query DNS generano traffico sulla porta UDP 53.

iptables -A OUTPUT -o $INET_IFACE -p udp -d $PC_DOCENTE --dport 53 -j ACCEPT
iptables -A INPUT -i $INET_IFACE -p udp -s $PC_DOCENTE --sport 53 -j ACCEPT

Per testare il tutto, nel file legenda.txt presente sul server del professore è contenuto il sample del comando host: genera una query, e se ottengo udienza allora tutto funziona.

FTP attivo in uscita verso qualunque destinatario

Piccolo riassunto sull'FTP attivo: si tratta di una connessione TCP, ma duplice:

Devo quindi autorizzare connessioni in entrambi i sensi

iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --sport 20 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

Lo si può testare ftp-ando il server del professore, e provando a gettare il file esame.txt nella cartella pub.

Autorizzare qualunque ICMP in ingresso, tranne echo-request

Per scrivere questa regola, uso la flag --icmp-type di iptables, in questo modo:

iptables -A INPUT -i $INET_IFACE -p icmp --icmp-type ! echo-request -j ACCEPT

Da notare che il flag --icmp-type ! echo-request dice a iptables che se il tipo è diverso da echo-request, allora accetto il pacchetto.

Per testare il tutto, si va su di un'altra macchina e si generano pacchetti icmp con nemesis. La sintassi è questa:

nemesis icmp -S 192.168.20.2 -D 192.168.20.3 -i 1
nemesis icmp -S 192.168.20.2 -D 192.168.20.3 -i 8

dove:

Se poi specifico il tipo 8, deve essere droppato. Se metto delle regole di log, vedrò tutto quanto per benino.


Torna alla pagina di SNR

(Printable View of http://www.swappa.it/wiki/Uni/SNRsimesame1)