Audit completo del firewall - Internet non è veramente accessibile?

1

Abbiamo molti server Linux in diverse co-location in tutto il mondo. Di norma, queste macchine in genere non dovrebbero essere in grado di accedere a Internet. A seconda dell'ubicazione e del ruolo, alcuni siti potrebbero avere un accesso a Internet molto limitato (ad esempio, il rifiuto predefinito con uno o due siti elencati in bianco). Quindi, a seconda delle circostanze, il criterio di non-Internet è configurato o dalle regole di routing a livello di switch o da un dispositivo di filtro (ad esempio Untangle).

Un team è responsabile della configurazione della rete per policy e un team separato (io) è responsabile del controllo periodico per assicurarsi che le cose funzionino come previsto.

La domanda, quindi, è come esaustivamente controllare che Internet non possa essere raggiunto? Il metodo ingenuo è semplicemente "ping google.com". Ma cosa succede se Internet è disponibile, ma DNS semplicemente non funziona? OK, quindi esegui il ping di un IP pubblico noto, ad es. "ping 8.8.4.4". Ma cosa succede se ICMP viene filtrato, ma ad es. Le connessioni TCP sono ancora permesse? Cosa succede se vengono filtrati TCP e UDP, ma non l'IP raw? Che cosa succede se il team di rete si è lasciato un piccolo buco (non necessariamente per intento malevolo, errore forse onesto, forse bug nel firewall o switch)?

Ovviamente, il ping è un bel controllo quando vuoi l'accesso a Internet, ma è terribilmente insufficiente per garantire che Internet sia completamente bloccato.

L'approccio ideale sarebbe provare tutte le possibili combinazioni di

  • Port
  • IP pubblico
  • Protocollo

Ma non è pratico. Ma sto cercando un ragionevole compromesso tra questo e un ingenuo test del ping.

Il mio pensiero era di provare ad usare nmap per cercare eventuali porte aperte su IP pubblici che dovrebbero essere generalmente in ordine --- server DNS pubblici. Quindi, ad esempio (8.8.4.4 è un server DNS pubblico):

# nmap -v -v -v -T3 -sS 8.8.4.4

Starting Nmap 6.40 ( http://nmap.org ) at 2014-03-18 10:24 CDT
Initiating Ping Scan at 10:24
Scanning 8.8.4.4 [4 ports]
Completed Ping Scan at 10:24, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:24
Completed Parallel DNS resolution of 1 host. at 10:24, 13.00s elapsed
DNS resolution of 1 IPs took 13.00s. Mode: Async [#: 2, OK: 0, NX: 0, DR: 1, SF: 0, TR: 4, CN: 0]
Initiating SYN Stealth Scan at 10:24
Scanning 8.8.4.4 [1000 ports]
Completed SYN Stealth Scan at 10:24, 0.07s elapsed (1000 total ports)
Nmap scan report for 8.8.4.4
Host is up (0.0015s latency).
All 1000 scanned ports on 8.8.4.4 are closed

Read data files from: /usr/local/encap/nmap-6.40/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.14 seconds
           Raw packets sent: 1004 (44.152KB) | Rcvd: 1001 (40.040KB)

Questo è stato eseguito da un server in cui si ritiene che il blocco dell'accesso a Internet funzioni correttamente. Eppure perché dice "Host is up"? Come lo sa? Un semplice ping fallisce e non riesco a usare quel server con dig.

Speravo di farla franca con un semplice script che cercava "Host is up" per segnalare l'accesso a Internet, ma sembra che genererebbe troppi falsi positivi.

Qualcuno ha suggerimenti o approcci migliori a questo problema?

    
posta Matt 18.03.2014 - 16:37
fonte

4 risposte

2

Da quello che stai descrivendo, direi che l'unico modo per raggiungere il tuo obiettivo è un controllo credenziale del server e del firewall, al contrario della scansione di rete dal server.

Il motivo è che il traffico in uscita è consentito solo a una singola porta alta su un singolo host, in nessun modo il tuo approccio di scansione delle porte lo troverà.

Suggerirei di fare una revisione manuale del set di regole del firewall per assicurarmi che le regole funzionino come previsto. A seconda di ciò che viene utilizzato / di quanto tu sia familiare con quel tipo di cose, puoi farlo manualmente o usare qualcosa come nipper per dare una mano .

Per spiegare cosa stai vedendo su Port Scan.

Tutte le porte rispondono come chiuse anziché filtrate. Ciò è alquanto insolito per una connessione firewall poiché molti firewall eliminano il traffico bloccato anziché rifiutarlo esplicitamente.

Tuttavia questo spiega perché nmap pensa che l'host sia attivo. Nmap usa un paio di meccanismi per determinare che un host è vivo e uno di loro è un ping TCP (guarda la sezione -sP di questa pagina ). Se riceve una risposta, presuppone che l'host sia attivo. Visto che il tuo firewall sembra rispondere con RST / ACK (il messaggio chiuso) che farebbe sì che nmap pensi che tutto sia attivo, che lo sia o meno.

    
risposta data 18.03.2014 - 17:19
fonte
0

In una vita precedente abbiamo usato uno strumento chiamato Firemon per fare questo. Firemon non esegue test fisici basati su host "reali / live" come quelli che stai descrivendo sopra, ma piuttosto analizza le regole del firewall e determina quali porte possono essere aperte.

Uno dei report che siamo riusciti a eseguire sarebbe stato determinare quali porte / protocolli sono permessi tra due host. Potresti anche ampliarlo per confrontare porte / protocolli tra due reti.

Ovviamente questo ti darebbe solo risultati validi se sai che non c'è modo per il tuo traffico del server di bypassare il tuo firewall. Ciò potrebbe richiedere una revisione dell'architettura di rete e quindi alcuni test di base del traffico per determinare il percorso dei pacchetti ecc.

Mettendo insieme alcuni di questi test potresti probabilmente ottenere ciò che stai cercando di fare senza effettuare la scansione su Internet. Non è un vero test fisico, ma ti darebbe un certo livello di sicurezza. (es .: non stai testando che il firewall non abbia perdite). È quindi possibile combinare questo con la registrazione da router e switch e guardare gli elenchi in una soluzione di tipo SIEM. IE: avvisa se l'host di ShouldNotHitInternetList comunica con un ip non locale.

Puoi iniziare a mettere insieme una serie di controlli che ti daranno la sicurezza di cui hai bisogno.

    
risposta data 18.03.2014 - 16:54
fonte
0

Quindi, una scansione SYN non mostrerà alcuna connessione basata su UDP, porte aperte, ecc., né farà nulla contro il tunneling ICMP. Ma torniamo alle origini qui. Hai un obiettivo, per impedire le connessioni, o piuttosto controllare quelle connessioni. Per questo, dovresti semplicemente controllare le regole FW per i principianti. Per es.

iptables -L -n 

Che mostrerà quali regole sono attualmente in esecuzione su una macchina. Se fossi in me, farei un diagramma completo (Visio). Quali server eseguono quali attività e quali regole firewall sono attualmente implementate su tali server. Corrispondono a ciò che ti serve / vuoi fare / viene fatto?

Io: installerei il syslog remoto (syslog-ng) con TUTTI i pacchetti / connessioni che vengono registrati, a cui posso aggiungere qualcosa come Splunk per l'analisi e l'avviso. Forse anche lanciando AlienVault per avvisarmi di anomalie, ecc. Non mi preoccuperei di scansionare veramente una volta verificate le regole fw, il mio obiettivo sarebbe quello di sapere / capire cosa sta arrivando e lasciare i miei server. Per quello, vorrei avere l'analisi del file di log (syslog remoto) e preferibilmente un SIEM.

    
risposta data 18.03.2014 - 18:12
fonte
0

Se fossi in me, la mia linea di difesa prima per un server co-localizzato sarebbe sul server stesso. Non ho accesso a tutti gli altri dispositivi coinvolti nello spostamento dei dati nel data center. Non ho il tempo di testare ogni cambiamento applicato nel data center (anche se gli operatori me lo hanno detto).

Ciò che descrivi può essere implementato in alcune regole di iptables senza stato, che offre una dimostrazione per induzione che il sistema si comporterà come definito. Sarei tentato di andare su un altro e assicurarmi che non ci sia alcuna route predefinita configurata sui dispositivi - solo per endpoint definiti in modo esplicito.

    
risposta data 19.03.2014 - 13:54
fonte

Leggi altre domande sui tag