Visualizzazione post con etichetta Kali Linux. Mostra tutti i post
Visualizzazione post con etichetta Kali Linux. Mostra tutti i post

mercoledì 29 settembre 2021

Kali Linux: Identificare il produttore della scheda di rete

Il MAC address, acronimo che sta per Media Access Control e noto anche come indirizzo fisico, è un codice di 48 bit che viene assegnato in modo univoco dal produttore ad ogni scheda di rete (Network Interface Card o NIC). I 48 bit (6 byte) del MAC address sono suddivisi in 12 cifre esadecimali e generalmente viene scritto suddividendo le cifre in 6 ottetti separati da un trattino (es. E0-3F-49-A0-67-2C). Le prime 6 cifre del MAC address, i primi 3 ottetti, individuano il produttore e vengono dette OUI (Organizationally Unique Identifier), mentre le restanti rappresentano il numero di serie della scheda. 

Conoscendo l'indirizzo MAC, dunque, possiamo ricercare i dettagli relativi al produttore. Solitamente all'interno delle distribuzioni Linux è presente il database OUI: un file di testo che è possibile interrogare mediante un modulo Python3 o utilizzando il tool ouilookup. Per individuare la posizione del database eseguire il seguente comando dalla finestra terminale:
locate oui.txt

Locate oui
FIG 1 - Locate oui

Come mostrato in figura il file è presente in più percorsi. Generalmente nelle distribuzioni Linux il file si trova in /var/lib/ieee-data/oui.txt.
Nel caso in cui il file non venisse trovato, basterà scaricarlo da http://standards-oui.ieee.org/oui/oui.txt tramite il comando wget
wget http://standards-oui.ieee.org/oui/oui.txt

Installare il tool ouilookup e avviare Python3 con i comandi
pip3 install ouilookup
python3
Installazione ouilookup e avvio Python3
FIG 2 - Installazione ouilookup e avvio Python3
Una volta avviato Python3 importare il modulo ouilookup
from OuiLookup import OuiLookup
Import modulo OuiLookup
FIG 3 - Import modulo OuiLookup

A questo punto non resta che interrogare il database OUI specificando il MAC address da controllare
OuiLookup().query('E0:3F:49:A0:67:2C')
Interrogazione database OUI
FIG 4 - Interrogazione database OUI






domenica 17 gennaio 2021

Kali Linux: Salvare l'elenco dei pacchetti installati

Nelle distribuzioni Linux basate su Debian il componente che si occupa della gestione dei pacchetti è dpkg (Debian Package). Si tratta di un tool di basso livello (non risolve le dipendenze dei pacchetti) che viene utilizzato per installare, disinstallare e ottenere informazioni sui pacchetti .deb.

Quando si personalizza una distribuzione installando molti pacchetti può essere una buona idea avere un elenco di ciò che è stato installato. 
Per salvare l'elenco dei pacchetti installati in Kali Linux è possibile eseguire da terminale il seguente comando:
dpkg --get-selections | tee elenco_pacchetti
con dpkg --get-selections viene visualizzato l'elenco dei pacchetti installati e con tee l'output viene salvato all'interno di un file di testo nominato elenco_pacchetti.
 
Generazione file elenco pacchetti
FIG 1 - Generazione file elenco pacchetti

Il file elenco_pacchetti può essere utilizzato in diversi modi come ad esempio per ripristinare i pacchetti a seguito precedente rimozione o reinstallazione sistema operativo, o per clonare la macchina installandoli su un altra postazione. Per eseguire l'installazione dei pacchetti diamo in pasto il file elenco_pacchetti, generato precedentemente, al tool dpkg eseguendo da terminale il comando
sudo dpkg --set-selections < ./elenco_pacchetti
Il comando non installerà nulla, ma si limiterà a contrassegnare lo stato corrispondente di ogni pacchetto presente in elenco. Per l'installazione vera e propria bisognerà successivamente eseguire il comando 
sudo apt-get -u dselect-upgrade
Installazione pacchetti da elenco
FIG 2 - Installazione pacchetti da elenco







lunedì 12 ottobre 2020

Kali Linux: Modificare la visualizzazione del comando dir

Da terminale i comandi ls e dir producono più o meno lo stesso output: i nomi dei file disposti in orizzontale e senza ulteriori informazioni come mostrato in FIG 1.
Kali Linux, ls e dir
FIG 1 - Kali Linux, ls e dir

Per differenziare i due comandi è possibile procedere con i seguenti passaggi:
  • Avviare la finestra terminale e digitare il comando 
    sudo nano /etc/bash.bashrc
    Kali Linux, Edit del file bash.bashrc
    FIG 2 - Kali Linux, Edit del file bash.bashrc

  • Posizionarsi alla fine del file e digitare
    alias dir="ls -l --color=auto"
    quindi salvare premendo la combinazione CTRL+W e successivamente premere Invio.
    Kali Linux, Modifica file bash.bashrc
    FIG 3 - Kali Linux, Modifica file bash.bashrc
  • Riavviare il sistema.

Dopo il riavvio, digitando dir da terminale, verranno visualizzati i file in verticale con i dettagli e relativi attributi.
Kali Linux, Nuova visualizzazione del comando dir
FIG 4 - Kali Linux, Nuova visualizzazione del comando dir






mercoledì 15 luglio 2020

Kali Linux: Installare una nuova shell e impostarla come predefinita

La shell, conosciuta anche come terminale, è un componente fondamentale del sistema operativo. Si tratta di uno strato software che si interpone tra il sistema operativo e l'utente consentendo l'esecuzione dei comandi, programmi, script e molto altro.
Generalmente la shell più diffusa in ambiente Linux è Bash che, con la sua dotazione di funzioni e stabilità, si è imposta come standard di fatto. Ciò non significa che tale shell vada bene in tutte le situazioni. In alcuni casi potrebbe essere necessario utilizzare shell meno "pesanti" come dash (utilizzata nei sistemi Debian) che offre gran parte delle stesse funzioni di Bash ma richiede meno risorse. 

Per visualizzare la shell attualmente in uso basta eseguire il seguente comando dalla finestra terminale
ps -p $$
Kali Linux, Shell in uso
FIG 1 - Kali Linux, Shell in uso

Per visualizzare le shell disponibili all'interno del sistema eseguire
cat /etc/shells
Kali Linux - Shell disponibili
FIG 2 - Kali Linux, Shell disponibili

Per installare una nuova shell aggiornata all'interno del sistema, come ad es. la shell dash, eseguire i comandi
sudo apt update 
sudo apt install dash
Kali Linux - Installazione shell dash
FIG 3 - Kali Linux, Installazione shell dash

Terminata l'installazione si può avviare la nuova shell digitandone il nome
dash

Per impostare la nuova shell come quella di default bisogna utilizzare il comando chsh. Ad es. per impostare la shell dash come shell predefinita il comando da eseguire è
chsh -s /usr/bin/dash

La modifica sarà attiva dal successivo logon dell'utente.

Kali Linux - Shell dash
FIG 4 - Kali Linux, Shell dash






lunedì 20 aprile 2020

Kali Linux: Creare una wordlist con Crunch

Tra i sistemi più utilizzati per scardinare le password di un account o di un servizio troviamo gli attacchi di forza bruta e gli attacchi a dizionario. I due tipi di attacco sono molto simili ma, mentre nell'attacco a forza bruta l'attaccante prova tutte le possibili combinazioni di caratteri, in un attacco a dizionario vengono utilizzate solo le password ritenute più probabili e contenute in una lista (definita dizionario).

Online è possibile trovare dizionari già pronti per le nostre esigenze e anche Kali Linux ne mette a disposizione diversi in /usr/share/wordlists/metasploit/. Tuttavia, se si vuole creare un proprio dizionario da dare in pasto a strumenti come Hydra o Medusa, è possibile utilizzare Crunch, un generatore di wordlist che è già incluso in Kali Linux. Il tool viene utilizzato da riga di comando e consente la generazione di un elenco contenente tutte le possibili combinazioni/permutazioni realizzabili a partire dall'insieme di caratteri specificato o da un pattern.
Dizionari inclusi in Kali Linux
FIG 1 - Dizionari inclusi in Kali Linux

Sintassi
La sua sintassi è
crunch [min] [max] [charset] [options] 


Opzioni
-b 
Permette di specificare la dimensione massima del file di output e richiede l'utilizzo anche del parametro -o START. Se l'output è maggiore della grandezza specificata allora verrà suddiviso in più file. Ad es. il comando
crunch 4 5  -b 20mib  -o START
Genererà 4 file di output  (aaaa-gvfed.txt, gvfee-ombqy.txt, ombqz-wcydt.txt, wcydu-zzzzz.txt) ciascuno di una grandezza massima di 20 mib. Non ci devono essere spazi tra il numero e il tipo. I tipi accettati sono kb, mb, gb, kib, mib e gib. I primi 3 sono kilobyte, megabyte e gigabyte (base 1000) mentre gli ultimi 3 sono kibibyte, mebibyte, gibibyte (base 1024).

-c
Consente di specificare il massimo numero di righe nel file di output. Anche in questo caso va utilizzato insieme a -o START.

-d
Con tale parametro viene limitato il numero massimo di duplicati. Ad es. -d 2@ limita a 2 il numero di caratteri alfabetici minuscoli duplicati all'interno dell'output.

-e
A tale parametro viene passata una stringa che indica quando fermarsi.

-f
Al parametro va passato il nome di un file (ad es. charset.lst) contenente il charset da utilizzare.

-i 
Se specificato inverte l'output. Ad es. invece di avere in output aaa, aab, aac, aad, ecc utilizzando tale parametro si avrà aaa, baa, caa, daa, aba, bba, ecc

-l
Alcuni caratteri come @,%^ vengono utilizzati per specificare caratteri minuscoli, maiuscoli, numeri e simboli (si veda parametro -t). Per utilizzarli come semplici caratteri senza che Crunch tenta di interpretarli bisogna specificare il parametro -l. In questo modo, ad esempio, possiamo utilizzare il simbolo percentuale (%) all'interno di un pattern senza che Crunch lo sostituisca con un numero.

-o
Consente di specificare il file di output.

-p
Permette di generare stringhe senza la ripetizione di caratteri (permutazioni). É comunque necessario dichiarare il numero minimo e massimo di caratteri da utilizzare anche se, con tale parametro, verranno ignorati durante la generazione dell'output. Al parametro va passato il charset.

-q
Il funzionamento è analogo al parametro -p con la differenza che va passato un file.

-r
Permette di recuperare la generazione della wordlist interrotta. Funziona solo se è stato specificato il parametro -o. Eseguendo nuovamente il comando interrotto e aggiungendo il parametro -r la generazione della wordlist viene ripresa dal punto in cui era stata interrotta.

-s
Tramite tale parametro è possibile specificare una stringa di partenza.

-t 
Permette di specificare un pattern inoltre tramite l'utilizzo dei simboli @,%^, consente la sostituzione solo di alcuni caratteri all'interno del pattern: 
@ inserisce caratteri alfabetici minuscoli.
, inserisce caratteri alfabetici maiuscoli.
% inserisce numeri.
^ inserisce simboli.

-u
Va usato come ultimo parametro e consente di non mostrare la percentuale di completamento.

-z
Consente di comprimere il file di output specificando il tipo di compressione desiderato tra: gzip, bzip2, lzma e 7z. Va utilizzato insieme al parametro -o. Il formato gzip è il più veloce ma offre una compressione minima mentre il formato 7z è quello più lento ma fornisce la compressione migliore.


Esempi

Esempio 1
crunch 1 2 ab 
Il primo parametro, in questo caso 1, indica la lunghezza minima della combinazione.
Il secondo parametro (2) indica la lunghezza massima della combinazione desiderata.
Il terzo parametro indica il charset cioè l'insieme di caratteri da utilizzare.

L'output di tale comando sarà costituito dalle seguenti 6 combinazioni possibili
a
aa
ab
b
ba
bb
Come visibile in FIG 1, il comando fornisce anche la dimensione dell'output. Informazione utile nel caso si intenda generare un file.
Crunch
FIG 2 - Crunch

Esempio 2
crunch 2 2 0123456789 -o wordlist.txt
In questo esempio come charset è stato specificato l'insieme di numeri da 0 a 9. Il parametro -o consente di salvare l'output all'interno del file specificato (wordlist.txt).


Esempio 3
Supponiamo di voler creare un dizionario contenente la parola password seguita da tutte le lettere dell'alfabeto. Il comando sarà:
crunch 9 9 -t password@ -o wordlist.txt
Il carattere @ verrà sostituito ogni volta con una lettera minuscola dell'alfabeto.
Se invece vogliamo che la stringa password venga seguita da 3 numeri il comando diventa
crunch 11 11 -t password%%% -o wordlist.txt


Esempio 4
crunch 4 5 -p abc
In output saranno prodotte le permutazioni abc, acb, bac, bca, cab, cba.

Passando più stringhe al parametro -p
crunch 4 5 -p dog cat bird
l'output sarà il seguente birdcatdog, birddogcat, catbirddog, catdogbird, dogbirdcat, dogcatbird.


Esempio 5
crunch 1 5 -o START -c 3000 -z 7z
In questo caso verranno generati più file di output compressi in formato 7z contenenti ciascuno al massimo 3000 parole. I file di output avranno il nome del tipo prima_parola-ultima_parola.txt.7z





martedì 17 settembre 2019

Kali Linux: Introduzione a HPing3

HPing3 è un assemblatore/analizzatore di pacchetti TCP/IP a riga di comando. Oltre a supportare i protocolli TCP, UDP, ICMP e RAW-IP dispone di molte altre caratteristiche come la modalità traceroute e la possibilità di inviare file attraverso un canale "nascosto". Si tratta di un tool molto versatile che consente un controllo accurato su ogni flag del pacchetto.

Viene utilizzato per diversi scopi e contesti tra cui:
- Scansione avanzata porte:
- Test di firewall;
- Test di rete con l'utilizzo di diversi protocolli;
- Path MTU discovery
- Traceroute avanzato;
- Individuazione sistema operativo remoto (OS FingerPrinting);
- Individuazione tempo di attività di un sistema remoto;
- Controllo stack TCP/IP


HPing3 è già incluso in Kali Linux. Per visualizzare le opzioni e le modalità messe a disposizione del tool basta lanciare il seguente comando da terminale
hping3 -h 
usage: hping3 host [options]
  -h  --help      show this help
  -v  --version   show version
  -c  --count     packet count
  -i  --interval  wait (uX for X microseconds, for example -i u1000)
      --fast      alias for -i u10000 (10 packets for second)
      --faster    alias for -i u1000 (100 packets for second)
      --flood    sent packets as fast as possible. Don't show replies.
  -n  --numeric   numeric output
  -q  --quiet     quiet
  -I  --interface interface name (otherwise default routing interface)
  -V  --verbose   verbose mode
  -D  --debug     debugging info
  -z  --bind      bind ctrl+z to ttl           (default to dst port)
  -Z  --unbind    unbind ctrl+z
      --beep      beep for every matching packet received
Mode
  default mode     TCP
  -0  --rawip      RAW IP mode
  -1  --icmp       ICMP mode
  -2  --udp        UDP mode
  -8  --scan       SCAN mode.
                   Example: hping --scan 1-30,70-90 -S www.target.host
  -9  --listen     listen mode
IP
  -a  --spoof      spoof source address
  --rand-dest      random destionation address mode. see the man.
  --rand-source    random source address mode. see the man.
  -t  --ttl        ttl (default 64)
  -N  --id         id (default random)
  -W  --winid      use win* id byte ordering
  -r  --rel        relativize id field          (to estimate host traffic)
  -f  --frag       split packets in more frag.  (may pass weak acl)
  -x  --morefrag   set more fragments flag
  -y  --dontfrag   set don't fragment flag
  -g  --fragoff    set the fragment offset
  -m  --mtu        set virtual mtu, implies --frag if packet size > mtu
  -o  --tos        type of service (default 0x00), try --tos help
  -G  --rroute     includes RECORD_ROUTE option and display the route buffer
  --lsrr           loose source routing and record route
  --ssrr           strict source routing and record route
  -H  --ipproto    set the IP protocol field, only in RAW IP mode
ICMP
  -C  --icmptype   icmp type (default echo request)
  -K  --icmpcode   icmp code (default 0)
      --force-icmp send all icmp types (default send only supported types)
      --icmp-gw    set gateway address for ICMP redirect (default 0.0.0.0)
      --icmp-ts    Alias for --icmp --icmptype 13 (ICMP timestamp)
      --icmp-addr  Alias for --icmp --icmptype 17 (ICMP address subnet mask)
      --icmp-help  display help for others icmp options
UDP/TCP
  -s  --baseport   base source port             (default random)
  -p  --destport   [+][+] destination port(default 0) ctrl+z inc/dec
  -k  --keep       keep still source port
  -w  --win        winsize (default 64)
  -O  --tcpoff     set fake tcp data offset     (instead of tcphdrlen / 4)
  -Q  --seqnum     shows only tcp sequence number
  -b  --badcksum   (try to) send packets with a bad IP checksum
                   many systems will fix the IP checksum sending the packet
                   so you'll get bad UDP/TCP checksum instead.
  -M  --setseq     set TCP sequence number
  -L  --setack     set TCP ack
  -F  --fin        set FIN flag
  -S  --syn        set SYN flag
  -R  --rst        set RST flag
  -P  --push       set PUSH flag
  -A  --ack        set ACK flag
  -U  --urg        set URG flag
  -X  --xmas       set X unused flag (0x40)
  -Y  --ymas       set Y unused flag (0x80)
  --tcpexitcode    use last tcp->th_flags as exit code
  --tcp-mss        enable the TCP MSS option with the given value
  --tcp-timestamp  enable the TCP timestamp option to guess the HZ/uptime
Common
  -d  --data       data size                    (default is 0)
  -E  --file       data from file
  -e  --sign       add 'signature'
  -j  --dump       dump packets in hex
  -J  --print      dump printable characters
  -B  --safe       enable 'safe' protocol
  -u  --end        tell you when --file reached EOF and prevent rewind
  -T  --traceroute traceroute mode              (implies --bind and --ttl 1)
  --tr-stop        Exit when receive the first not ICMP in traceroute mode
  --tr-keep-ttl    Keep the source TTL fixed, useful to monitor just one hop
  --tr-no-rtt     Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
  --apd-send       Send the packet described with APD (see docs/APD.txt)




Per visualizzare il manuale eseguire il comando
man hping3

Il protocollo di rete TCP (Transmission Control Protocol) fa parte del livello di trasporto e si occupa del controllo della trasmissione tra mittente e destinatario rendendola affidabile. La procedura utilizzata per instaurare in modo affidabile una connessione TCP tra due host è chiamata three-way handshake. Il nome deriva dalla necessità di scambiare tre messaggi tra il mittente e il destinatario al fine di stabilire una connessione affidabile.
  • Nel primo messaggio il client (mittente) invia un pacchetto TCP con flag SYN al server (destinatario) sulla porta dove si ritiene quest'ultimo in ascolto;
  • Se sulla porta in questione il server è realmente in ascolto, risponderà con un pacchetto con i flag SYN e ACK attivi (SYN/ACK);
  • Il client confermerà l'avvenuta connessione inviando al server un pacchetto con il flag ACK attivo.

TCP, Three-way Handshake
FIG 1 - TCP, Three-way Handshake

Tramite hping3 è possibile simulare il three-way handshake utilizzando un comando come il seguente 
hping3 -S -p 80 -c 1 server
-S indica l'invio di un pacchetto SYN.
-p Consente di specificare la porta di destinazione del pacchetto. In questo caso è stata specificata la porta 80 generalmente utilizzata nei server web.
-c Permette di specificare quanti pacchetti inviare. Nel comando sopra indicato viene inviato un solo pacchetto.
server Al suo posto va indicato l'indirizzo IP del server o il suo nome.
HPing3, Avvio three-way handshake tramite pacchetto SYN
FIG 2 - HPing3, Avvio three-way handshake tramite pacchetto SYN

Dalla risposta del server (FIG 2) possiamo recuperare informazioni utili:
  • flag=SA indica che i flag TCP sono attivi e il server ci ha risposto con SYN/ACK (la seconda fase della procedura three-way handshake).
  • TTL=64 Il campo TTL (Time To Live), della dimensione di un byte, fa parte del header IP ed è un meccanismo che determina il tempo di vita di un pacchetto. Quando un pacchetto viene inviato, tale campo viene valorizzato con un valore compreso tra 1 e 255. Ad ogni salto (router che il pacchetto attraversa) il valore TTL viene decrementato di una unità. Quanto il valore TTL diventa 0, il pacchetto viene cancellato e al mittente viene inviato un pacchetto ICMP di avviso del tipo Time Exceeded. Generalmente gli apparati di rete assegnano a TTL il valore 255, i sistemi GNU/Linux (e anche molti altri sistemi *nix) assegnano il valore 64 mentre i sistemi Windows valorizzano tale campo a 128.

Il tool HPing3 è molto versatile e di seguito vengono mostrati alcuni degli utilizzi più comuni.


Trasferire file tramite HPing3

Per trasferire un file tramite HPing3 è necessario che sia il mittente che il destinatario dispongano del tool installato.
Sulla postazione del destinatario è necessario indicare a HPing3 di rimanere in ascolto. Tale operazione si esegue lanciando il seguente comando da terminale
hping3 --listen 192.168.1.11 -I eth0 --sign IDMSG1
--listen indica che la postazione è in ascolto. L'IP da passare al parametro è quello della postazione locale che deve rimanere in ascolto (destinatario).
--sign permette di specificare una firma per il messaggio. 

Sulla postazione del mittente è possibile inviare il file tramite il comando
hping3 192.168.1.11 --icmp --sign IDMSG1 -d 100 -c 1 --file file.txt
L'indirizzo IP passato a HPing3 è quello del destinatario.
La firma passata a --sign deve essere uguale a quella definita sulla postazione del destinatario.
L'opzione -d indica la dimensione dei dati.
All'opzione --file va passato il nome del file da inviare.



Test ICMP

Il seguente comando esegue un normale ping verso la destinazione specificata
hping3 -1 google.com
HPing3, invio pacchetto ICMP (ping)
FIG 3 - HPing3, invio pacchetto ICMP (ping)



Traceroute tramite ICMP

HPing3 consente di eseguire un traceroute verso un target specifico utilizzando pacchetti ICMP e incrementando ogni volta di 1 il valore TTL. L'output del comando è simile a quello fornito da utility come tracert (in ambiente Windows) o traceroute (in ambiente Linux). L'opzione -V imposta un output dettagliato.
hping3 --traceroute -V -1 google.com

Il traceroute può essere eseguito anche verso una specifica porta.
hping3 --traceroute -V -S -p 80  google.com





Verifica porta tramite l'invio di un pacchetto Syn

Il comando è analogo a quello visto all'inizio di tale articolo
hping3 -V -S -p 80 server
Possiamo anche indicare, tramite l'opzione -s, la porta locale da cui far eseguire la scansione
hping3 -V -S -p 80 -s 4060 server



Chiudere la comunicazione tramite un pacchetto FIN

In una connessione TCP un pacchetto con flag FIN attivo viene utilizzato per avviare la routine di chiusura della connessione. Tramite il seguente comando e l'opzione -F è possibile inviare tale pacchetto ad un destinatario. Se non viene ricevuta alcuna risposta la porta è aperta. Nel caso di Firewall generalmente si riceve un pacchetto con i flag RST+ACK che indica la porta chiusa.
hping3 -c 1 -V -p 80 -s 4060 -F server


Xmas Scan

Con Xmas Scan viene impostato il numero di sequenza TCP a 0 e vengono attivati i flag URGPSH FIN all'interno del pacchetto. Se la porta TCP del destinatario è chiusa viene inviato un pacchetto TCP RST in risposta. Se la porta è aperta, il destinatario scarta il pacchetto TCP Xmas e non invia alcuna risposta.
hping3 -c 1 -V -p 80 -s 4060 -M 0 -UPF server



ACK Scan

Questo tipo di scansione può essere utilizzata per verificare la raggiungibilità di un dispositivo in rete quando il ping è bloccato. Nel caso la porta sia aperta si dovrebbe ricevere in risposta un pacchetto RST.
hping3 -c 1 -V -p 80 -s 4060 -A server


Null Scan

Con questo tipo di scansione viene impostato il numero sequenziale a 0 e nessun flag è attivo all'interno del pacchetto. Il pacchetto inviato prende il nome di TCP NULL. Se la porta TCP del destinatario è chiusa si riceve in risposta il pacchetto TCP RST. Se la porta è aperta il pacchetto TCP NULL viene scartato e non viene inviata alcuna risposta.
hping3 -c 1 -V -p 80 -s 4060 -Y server



Smurf Attack

Si tratta di un tipo di attacco DoS (denial-of-service). Il sistema destinatario viene inondato di messaggi ping inviati tramite uno spoofed broadcast.
hping3 -1 --flood -a IP_VITTIMA INDIRIZZO_BROADCAST


DOS Land Attack

Anche in questo caso siamo di fronte ad un attacco di tipo DoS. Si invia un numero elevato di pacchetti di una certa dimensione nel minor tempo possibile e con il flag SYN attivo.
hping3 -V -c 1000000 -d 120 -S -w 64 -p 445 -s 445 --flood --rand-source IP_VITTIMA
--flood: invia i pacchetti il più velocemente possibile e senza attendere una risposta.
--rand-source: permette di inviare pacchetti che sembrano provenire da IP diversi. Generalmente utilizzata per mettere in difficoltà i firewall.
-V  Verbose.
-c --count: numero di pacchetti da inviare.
-d --data: dimensione dei dati.
-S --syn: imposta il flag SYN attivo.
-w --win: winsize (default 64).
-p --destport: porta di destinazione.
-s --baseport: porta da cui viene inviato il pacchetto (default random).





giovedì 7 marzo 2019

Kali Linux: Utilizzare Sandsifter per il fuzzing dei processori x86

Il fuzzing è una tecnica automatica per testare i software. La tecnica consiste nel fornire dati causali, non validi o imprevisti come input di un programma per computer e analizzarne il suo comportamento al fine di individuare errori o falle di sicurezza. 
Sandsifter applica tale tecnica nella verifica dei processori x86 generando sistematicamente codice macchina attingendo dal set di istruzioni del processore e monitorando l'esecuzione di tale codice alla ricerca di istruzioni nascoste e bug hardware. Grazie a Sandsifter sono state scoperte istruzioni segrete sui processori dei principali produttori inoltre è stato possibile scoprire bug software negli assemblatori/disassemblatori, emulatori, negli hypervisor e persino bug hardware in alcuni modelli di processori x86.

In questo articolo verranno illustrati i passaggi per installare ed eseguire Sandsifter sul proprio sistema utilizzando Kali Linux. Prima di proseguire con l'installazione ed esecuzione di Sandsifter è opportuno aggiornare i pacchetti installati e la propria distribuzione di Kali Linux eseguendo da terminale il seguente comando

apt-get update && apt-get upgrade

Aggiornamento Kali Linux
FIG 1 - Aggiornamento Kali Linux



Installazione Sandsifter

Per poter installare e utilizzare Sandsifter è necessario prima installare Capstone, un Framework necessario per disassemblare. Da terminale digitare i seguenti comandi
apt-get install libcapstone3 libcapstone-dev
pip install capstone
Eseguire il download di Sandsifter con il comando
git clone https://github.com/xoreaxeaxeax/sandsifter.git
Download di sandsifter
FIG 2 - Download di sandsifter

Accedere alla cartella di sandsifter
cd sandsifter
Prima di poter compilare è necessario andare a modificare il file Makefile. Digitare il comando
leafpad Makefile
Bisogna aggiungere la stringa -no-pie in modo che il contenuto del file diventi
all: injector

injector: injector.o
 $(CC) $(CFLAGS) $< -O3 -Wall -no-pie -l:libcapstone.a -o $@ -pthread

%.o: %.c
 $(CC) $(CFLAGS) -c $< -o $@ -Wall

clean:
rm *.o injector
Sandsifter makefile
FIG 3 - Sandsifter makefile

Salvare il file quindi compilare il codice eseguendo il comando
make


Esecuzione di Sandsifter

Per eseguire una verifica di base del proprio processore lanciare il comando
./sifter.py --unk --dis --len --sync --tick -- -P1 -t
Sandsifter
FIG 4 - Sandsifter

La schermata della verifica presenta 2 sezioni: in quella superiore viene mostrata l'istruzione che Sandsifter sta verificando mentre in quella inferiore vengono riportati gli errori/bug trovati. La scansione può richiedere da poche ore a più giorni per essere portata a termine a seconda della velocità e della complessità del processore che si sta analizzando è può trovare milioni di istruzioni non documentate.

Quando la scansione è completa sarà possibile riassumere i risultati tramite il comando
./summarize.py data/log

il comando provvede anche ad assegnare una categoria e un livello di importanza al problema trovato. Le categorie principali sono 3:
  • Bug Software
  • Bug Hardware
  • Istruzioni non documentate

Premendo 'Q' si esce dall'applicazione e viene prodotto un resoconto in formato testo della scansione del sistema.
Premendo 'M' durante l'esecuzione di Sandsifter viene modificata la modalità di ricerca (brute force, randomized fuzzing e tunneled fuzzing) mentre premendo il tasto 'P' è possibile mettere in pausa (o riprendere dalla pausa) il processo di ricerca.



Flag utilizzabili in Sandsifter


--len
Cerca le differenze di lunghezza in tutte le istruzioni. Ricerca istruzioni che si comportano in maniera diversa da quanto si aspetta il disassembler o che non esistono.

--dis
Come per il flag --len ma la ricerca viene eseguita solo per le istruzioni valide.

--unk
Ricerca le istruzioni sconosciute, istruzioni che anche se non riconosciute dal disassembler vengono eseguite con successo.

--ill
E' l'opposto del flag --unk. Ricerca istruzioni che non vengono eseguite correttamente ma riconosciute dal disassembler

--tick
Scrive periodicamente l'istruzione corrente sul disco.

--save
Salva i progressi della ricerca in uscita.

--resume
Riprende la ricerca dall'ultimo stato salvato.

--sync
Scrive i risultati della ricerca sul disco man mano che vengono trovati.

--low-mem
Non memorizza i risultati in memoria.




Injector utilizzabili in Sandsifter


-b
Mode: brute force. In tale modalità la ricerca prova le istruzioni in modo incrementale, fino a una lunghezza specificata dall'utente. Generalmente è più lenta ricerca casuale.

-r
Mode: randomized fuzzing.

-t
Mode: tunneled fuzzing.

-d
Mode: externally directed fuzzing.

-R
Raw output mode.

-T
Text output mode.

-x
Scrive periodicamente i progressi su stderr.

-0
Consente dereferenza nulla.

-D
Consente prefissi duplicati.

-N
Non consente nx bit.

-s seed
Nella ricerca random, il valore del seed.

-B brute_depth
Nella modalità brute force specifica la massima profondità della ricerca.

-P max_prefix
Numero massimo di prefissi da ricercare.

-i instruction
Istruzione da cui partire per la ricerca (inclusiva).

-e instruction
Istruzione a cui terminare la ricerca.

-c core
Core su cui eseguire la ricerca.

-X blacklist
Mette in blacklist l'istruzione specificata.

-j jobs
Numero simultaneo di job eseguiti contemporaneamente.

-l range_bytes
Numero di byte di istruzione di base in ogni sottogruppo.





lunedì 25 febbraio 2019

Kali Linux: Risalire alla data di installazione del sistema operativo

Un trucco per risalire alla data di installazione del sistema operativo Kali Linux consiste nel visualizzare la data di creazione del file system della partizione in cui è stato installato oppure consultare il log di installazione dei pacchetti apt (/var/log/apt/history.log ).


Verificare la data di creazione del file system

  • Da terminale eseguire il comando fdisk -l e individuare la partizione su cui è installato Kali Linux;
    Kali Linux, fdisk -l
    FIG 1 - Kali Linux, fdisk -l
  • In FIG 1 la partizione di nostro interesse è sda1. Utilizziamo il seguente comando da terminale per visualizzare le informazioni relative al file system della partizione individuata.
    tune2fs -l /dev/sda1 | grep 'Filesystem' 

    Nel campo Filesystem created verrà mostrata la data e l'ora di creazione del file system.
    Kali Linux, tune2f
    FIG 2 - Kali Linux, tune2f




Visualizzare il log di installazione dei pacchetti apt

Da terminale eseguire il comando 
head /var/log/apt/history.log 
Il comando visualizzerà le prime 10 righe del log storico history.log
Kali Linux, history.log
FIG 3 - Kali Linux, history.log
Come visibile da FIG 3 la data più 'vecchia' è quella riportata nella stringa Start-Date: 2018-10-26 05:25:04 che con buona probabilità rappresenta la data di installazione del sistema operativo.



I metodi sopra indicati non sono infallibili e i risultati vanno presi con le opportune considerazioni. Il primo metodo che fa uso di tune2fs è generalmente più affidabile ma il risultato potrebbe essere stato compromesso se sono stati utilizzati tool di terze parti per la creazione/modifica della partizione e del relativo file system. Per quanto riguarda il secondo metodo, invece, c'è da considerare che qualcuno potrebbe aver eliminato o sovrascritto per qualche motivo il log.






mercoledì 20 febbraio 2019

Kali Linux: Installare TeamViewer da terminale

Da quando TeamViewer, il noto software per il controllo remoto, è stato rilasciato per le versioni Linux Debian e Ubuntu è possibile installarlo facilmente anche su Kali Linux.
La versione di TeamViewer per Linux è scaricabile da https://www.teamviewer.com/en/download/linux/ scegliendo tra la versione a 32 e quella a 64 bit.
Kali Linux, TeamViewer
FIG 1 - Kali Linux, TeamViewer

Di seguito verranno mostrati i comandi da eseguire per installare la versione a 64 bit di TeamViewer su Kali Linux tramite terminale:
  • Da terminale utilizzare il seguente comando wget per scaricare il pacchetto di installazione
    wget https://download.teamviewer.com/download/linux/teamviewer_amd64.deb

    Kali Linux, wget TeamViewer
    FIG 2 - Kali Linux, wget TeamViewer
  • Procedere con l'installazione eseguendo il comando
    dpkg -i teamviewer_amd64.deb

    Kali Linux, installazione pacchetto teamviewer
    FIG 3 - Kali Linux, installazione pacchetto teamviewer
  • Terminata l'installazione eseguire
    apt -f install
    per installare anche eventuali dipendenze dei pacchetti;
    Kali Linux, installazione dipendenze tramite apt -f install
    FIG 4 - Kali Linux, installazione dipendenze tramite apt -f install
  • Eseguire TeamViewer lanciando il comando
    teamviewer

    Kali Linux, avvio TeamViewer
    FIG 5 - Kali Linux, avvio TeamViewer
  • Nel caso in cui venga visualizzato il messaggio Teamviewer daemon not running eseguire il comando
    teamviewer --daemon enable