Guida Analizzare un file di log ed estrarne gli indirizzi IP con Perl

inforge-user001

Utente Jade
28 Marzo 2020
557
61
2,294
732
Ultima modifica:

Articolo Completo​

Potete trovare l'articolo sul mio blog personale :)
Link: https://greco-alessandro.netlify.ap...di-log-ed-estrarne-gli-indirizzi-ip-con-perl/

Guida​

In questa guida vedremo come possiamo usare uno dei linguaggio più efficienti e semplici che io conosca.
Questo linguaggio è Perl e personalmente lo uso come linguaggio da uno script e via vista la semplicissima sintassi(decisamente intuitiva) e visto che è davvero veloce e leggero nelle operazioni.

File necessari​

Utilizzerò un file di log pubblico accessibile cliccando qui che, come potete leggere, rappresenta un file di log di OpenSSH.
Ovviamente bisogna avere perl sul proprio computer e per questo esistono diverse guide sull'internet su come installarlo.

Competenze necessarie​

Non sono richieste grandi competenze di programmazione vista la semplicità di utilizzo ma se non hai mai visto il linguaggio potresti non capire bene l'utilizzo di alcune variabili e costrutti.
E' fortemente consigliato studiare le regex, a proposito di questo vi lascio il link di Regex101 che è un ottimo sito sul quale allenarsi.

Creazione dello script​


Fine​

Una volta fatto ciò vi ritroverete un file con tutti gli indirizzi ip che hanno provato a effettuare un attacco.

asd.png


Extra - Raccolta dati whois​

Ho voluto aggiungere una funzionalità secondo me molto interessante, ovvero l'utilizzo del comando whois per recuperare i dati che vogliamo senza dover fare poi una ricerca manuale.
Questa cosa dovrebbe far capire chi non è avvezzo a questo programma la semplicissima dinamicità nella stesura del codice.

Codice​


Esempio di output​

asd.png


Extra - Settare il Firewall per droppare le richieste da IP blacklistati​

Avendolo trattato in un commento lascio solo il link -> Clicca qui <-

Conclusione​

Questa è, come sempre, una base sulla quale studiare.
Non andate a bannare i primi ip che vengono rilevati perché può capitare che il realtà non era un attacco ma magari è stato solo rilevato negativamente.
Ho preferito sovrascrivere al file e non aggiungere perché questa modalità di scripting la vedo come "C'è un problema -> Lo rilevo -> Lo risolvo -> Butto il codice".
Detto ciò buon lavoro e buona programmazione :)

Link Utili​

[Extra] Sito Ufficiale Perl
[File] File di log usato
[File] Repository
[Tool] Regex101
[Studio] Regex
[Studio] die
[Studio] hash
[Studio] Tipologia di attacco rilevata e gestita nella guida
 
In questa guida vedremo come possiamo usare uno dei linguaggio più efficienti e semplici che io conosca. Questo linguaggio è Perl.
Non ho bisogno di leggere altro per darti il like. Al giorno d'oggi, su questo forum ma anche in generale, si vedono sempre usare i soliti 4-5 linguaggi: C, C++, Java, Python, C# o qualche linguaggio web. Quando ti propongono qualcosa di diverso, è il solito linguaggio moderno in auge al momento: Go, Rust, Swift, Kotlin, Elixir e roba simile. Mi fa piacere vedere qualcosa di diverso dal solito.

Non so programmare in Perl, ma so di che linguaggio si tratta e non mi sorprende che tu l'abbia usato per questo scopo. È molto famoso per le sue qualità nella manipolazione di stringhe. Ha praticamente definito uno standard per la sintassi delle espressioni regolari.
 
Visto che è piaciuta come idea ho deciso di aggiundere una funzionalità extra, ovvero quella di mandare un comando, come whois nel mio caso, e prendere quindi informazioni specifiche a seconda di cosa vogliamo salvandole in un altro file.

Vuole essere una base per studiare la materia quindi ho evitato volutamente tanti aspetti del comando tipo il fatto che un determinato address ha un valore diverso da un altro e così via... l'output è a discrezione dell'utente finale quindi non mi ci sono soffermato più di tanto.

Taggo chi ha messo like che se non mi sbaglio non arriva la notifica e magari siete interessati
@St3ve
@ElectricDreamer
@0xbro
@FuckSociety
@n0tting
 
Visto che è piaciuta come idea ho deciso di aggiundere una funzionalità extra, ovvero quella di mandare un comando, come whois nel mio caso, e prendere quindi informazioni specifiche a seconda di cosa vogliamo salvandole in un altro file.

Vuole essere una base per studiare la materia quindi ho evitato volutamente tanti aspetti del comando tipo il fatto che un determinato address ha un valore diverso da un altro e così via... l'output è a discrezione dell'utente finale quindi non mi ci sono soffermato più di tanto.

Taggo chi ha messo like che se non mi sbaglio non arriva la notifica e magari siete interessati
@St3ve
@ElectricDreamer
@0xbro
@FuckSociety
@n0tting
Un'altra feature che potresti aggiungere è che ogni volta che il tool logga un IP lo blacklista anche in un firewall, come ufw.
 
  • Mi piace
Reazioni: inforge-user001
Un'altra feature che potresti aggiungere è che ogni volta che il tool logga un IP lo blacklista anche in un firewall, come ufw.
quello sarebbe proprio l'ideale... però i "tentati attacchi" rilevati da OpenSSH non sempre sono attacchi veri e propri... ad ogni modo bisognerebbe conoscere l'infrastruttura di rete ma comunque basterebbe leggere il file, prendere gli IP e assegnargli una DROP

Faccio un esempio al volo(senza testarlo) magari per chi è interessato
Perl:
@segnalazioni = qx{cat blacklist};
for(@segnalazioni){
    qx{iptables -A FORWARD -i <interfaccia di rete in input> -m state --state ESTABLISHED,RELATED -s $_ -j DROP}
}
Facendo così vengono presi tutti gli ip e droppati se la sorgente è esattamente da quell'IP e la connessione non è stata generata dall'interno, quindi teoricamente da noi.

Ovviamente anche questo è puro materiale di studio, per fare una cosa professionale sarebbero ovviamente richiesti ulteriori controlli altrimenti si rischia di bannare l'utente x che magari sbaglia la password e viene rilevato come attaccante :D

Comunque grazie per la nota l'aggiungo alla guida, se ritieni opportuno apportare qualche modifica fammi sapere che l'aggiungo
 
  • Mi piace
Reazioni: Packermoon
Molto interessante, potresti aggiungere anche un codice in cui oltre a salvare l'ip nella blacklist anche id hardware (che viene generato dalle info del pc di un utente, così da capire se è un attacco di un solo tentativo oppure uno che è tentato di attaccarti anche con più ip diversi (proxy/vpn), ma registrando id univoco del pc utilizzato...e bannarne direttamente id oltre l'ip. Spero essermi spiegato bene...non essendo nato in Italia... Grazie.
 
Molto interessante, potresti aggiungere anche un codice in cui oltre a salvare l'ip nella blacklist anche id hardware (che viene generato dalle info del pc di un utente, così da capire se è un attacco di un solo tentativo oppure uno che è tentato di attaccarti anche con più ip diversi (proxy/vpn), ma registrando id univoco del pc utilizzato...e bannarne direttamente id oltre l'ip. Spero essermi spiegato bene...non essendo nato in Italia... Grazie.
Che io sappia non esiste un comando per prendere il Mac(se ti riferivi a questo) dall'IP perché sono su due livelli di rete differenti.
Non conosco neanche comandi capaci di verificare se si tratta di un IP fornito da un servizio VPN.
Se qualcuno si connette tramite Proxy penso tu possa vedere solo l'IP del Proxy stesso e non dell'IP sorgente reale.

Di tutto ciò però non ne sono certo quindi se qualcuno conosce questi comandi li può scrivere che poi ad aggiungere la funzionalità non credo ci vorrà molto. :)