# Piattaforme e Software per la rete - lezione 18 #### Giacomo Verticale ###### 7 June 2016 # Intrusion Detection Systems Un IDS é un *middlebox* che si occupa di rilevare la presenza di intrusioni o si assicura del rispetto delle policy di sicurezza In particolare i __Network Intrusion Detection Systems__ effettuano *deep packet inspection* Cioé analizzano il payload dei pacchetti É difficile effettuare il match a livello applicativo perché spesso i protocolli sono di tipo testuale, come HTTP Un __Host Intrusion Detection System__ invece si occupano di monitorare gli ingressi e le uscite di un singolo host. A differenza del matching sui campi del pacchetto, il *deep packet inspection* ha un rischio concredo di *falsi positivi*, ad esempio cercando una stringa `HTTP` nel pacchetto, potremmo rilevare anche delle email contenenti dei link. In genere i sistemi di ricerca, piú estendono il campo della loro ricerca e sono aggressivi, e piú c'é il rischio che trovino dei falsi positivi. Per questo di solito Gli IDS si limitano a lanciare degli allarmi e lasciare ad un sistema di __management__ lo svolgimento dell'azione. I sistemi di *deep packet inspection* sono utilizzati anche dai provider per capire che frazione del traffico é di natura VoIP, in modo da poter favoreggiare o ostacolare il traffico per favorire la telefonia tradizionale (discorso su net neutrality) Gli IDS si dividono in: - __Signature Detection__ hanno un database che permette di identificare particolari pacchetti tramite una signature, tuttavia possono identificare solo problemi noti (es. ransomware) - __Anomaly Detection__ definiscono una situazione standard e segnalano un allarme ogni volta che si esce da una situazione normale, questi sistemi possono prevenire anche attacchi non documentati. Un __IDS__ é piú lento rispetto ad un __firewall__, perché invece che effettuare match in posizioni note, deve ricercare delle stringhe nel payload. Un firewall viene posizionato ai bordi della rete, per identificare problemi verso l'esterno, mentre gli IDS vengono posti all'interno della rete per monitorare il traffico all'interno. Cisco sta proponendo dei sistemi che integrano un firewall che agisce fino al livello applicativo, con un IDS che é in grado di riconoscere le signature dei pacchetti. Per costruire le signature sono necessari esempi di intrusioni per poter costruire un database. Usate per questo sono le *honeynets*: reti che hanno l'unico scopo di attirare attacchi per poterli catalogare, un principio simile é usato nei sistemi antispam, in cui viene creato un indirizzo email che non corrisponde a nessuna persona fisica, e tutte le mail che riceve sono per definizione spam. ## Cercare nei pacchetti Di solito gli IDS effettuano ricerca di stringhe nel payload, ma possono utilizzare anche delle *regular expression*, anche se il costo computazionale sale. Spesso il payload di una sessione TCP é diviso tra diversi pacchetti, quindi puó essere effettuata una operazione di *preprocessing* che consiste nel raccogliere tutti i payload di una stessa connessione TCP. Un attaccante puó dividere il payload di attacco in tanti pacchetti piú piccoli, per fare in modo che IDS che analizzano pacchetti singoli non riescano a rilevare l'attacco Un prodotto commerciale diffuso per DPI é __SNORT__ che é un software commerciale di cui l'engine é open source, il database degli attacchi é disponibile a pagamento per le versioni piú aggiornate e gratuitamente per le versioni piú vecchie. SNORT effettua un match con un set di regole BGP Una volta che viene effettuato un match, viene lanciato un allarme e il pacchetto viene inviato ad un supervisore o ad un sistema di management centralizzato che gestisce piú IDS, oppure ad un supervisore che controllerá il pacchetto. I protocolli si dividono in __binari__ e __testuali__, nei protocolli OSI sono sempre stati usati protocolli binari, mentre i protocolli testuali sono stati scelti da IETF per facilitá di debug. Ultimamente c'é una tendenza a usare protocolli binari perché usano meno spazio e bastano programmi piú semplici per leggerli, ad esempio HTTP:2.0 é un protocollo binario. Questo vantaggio é anche dovuto alla diffusione di sistemi embedded e di sensori che non hanno la possibilitá di far girare grossi programmi. Inoltre la possibilitá di debugging testuale é impedita dall'uso di protocolli crittografati, quindi c'é un motivo in meno per usare protocolli testuali. Nel caso di protocolli cifrati di solito viene terminata la cifratura nel sistema di DPI e la connessione viene continuata il chiaro verso il destinatario o viene cifrata con una chiave diversa. ## Azioni possibili - Alert - Log - Drop - Reject ## Regole Nelle regole é possibile anche effettuare delle negazioni, questo comporta un costo computazionale piú alto col vantaggio di ottenere un ruleset piú compatto. La parte piú interessante di queste regole é l'analisi del payload, ad esempio il campo `content` permette di cercare una stringa nel payload, tuttavia l'algoritmo per fare questo ha costo lineare con la lunghezza del payload, e al massimo é possibile confrontare piú match allo stesso momento con un costo lineare non grosso, (sublineare per il numero di stringhe da cercare usando i trie). Per evitare costo computazionale inutile, i pacchetti delle connessioni che sono state accettate non vengono piú analizzati.