La lentezza di una barra 16
Sul lavoro ho l’esigenza di mappare grosse reti, per scoprire quello che c’è dentro. I software di asset inventory sono un’opzione, richiedono però un agent a bordo e, se per qualsiasi motivo, l’agent non c’è ho un problema di copertura del mio inventario.
Voglio quindi affidarmi alla rete. Per questo cosa posso usare? Tutti in coro
nmap
. Già e se volessi solo questo potrei accontentarmi di questo script
shell:
Funziona. Niente da dire. Il problema è che io voglio produrre un DB SQL, SQLite va benissimo, con anche l’informazione sulla presenza dell’host nel mio sistema di vulnerability management, Nexpose nella fattispecie.
Soluzione A. Unisco più strumenti
Poche settimane fa, ho scritto un post dove mostravo come integrare la command line e Nexpose con poche righe di ruby. Nmap mi fornisce un output anche in un comodo formato XML, quindi quello che dovrei fare è: estendere il mio script che ho mostrato qualche settimana fa in maniera tale che consumi il file XML di nmap come input.
A questo punto dovrei solamente aggiungere un pezzo di codice che mi salva i risultati su DB, ma per questo ho un ORM flessibile come datamapper.
Perché non mi convince questa soluzione? Perché nmap ha bisogno di essere eseguito come root per il tipo di parametri passati, e io vorrei evitarmelo.
Soluzione B. Faccio un nuovo strumento
Provo quindi a passare alla soluzione all in one. Monto sullo scheletro dello script che parla con Nexpose, un semplice codice che rileva se la porta è aperta oppure no.
Uso poi una routine che monta i pezzi insieme e crea un file CSV. Veramente, l’import poi su DB è davvero l’ultimo dei miei pensieri.
Funziona, l’output è quello di cui ho bisogno. C’è un unico problema. E’ drammaticamente lento. Su una /16 non basta una settimana di lavoro per scoprire tutti gli host.
“Beata innocenza, non usare la 3-way handshake, manda solo syn”, direte voi. Già, ma non sempre gli apparati di rete digeriscono bene un sacco di connessioni mezze aperte. Lo scopo è quello di essere il più silente possibile, quindi meglio chiudere la connessione in maniera educata.
“Sei un n00b, usa i thread”. Ecco, sempre con moderata educazione verso gli altri parties della rete, questa è la strada da seguire. In qualche modo devo capire come scomporre il mio input, una CIDR notation, in pezzi da far consumare ai figlioletti del processo padre… vedremo gli sviluppi.
Off by one
Solo enjoy e ricordatevi che per fare application security, bisogna sporcarsi le mani col codice.
Vuoi aiutarmi a portare avanti il progetto Codice Insicuro con una donazione? Fantastico, allora non ti basta che premere il pulsante qui sotto.
Supporta il progetto