Primo commit

This commit is contained in:
andrea 2024-03-13 09:34:15 +01:00
commit 872779e636
11 changed files with 2648 additions and 0 deletions

4
README.md Normal file
View file

@ -0,0 +1,4 @@
# Cybersecurity con sistemi GNU/Linux
In questo repository sono raccolti i materiali del corso.

15
dispensa/Makefile Normal file
View file

@ -0,0 +1,15 @@
PDFDIR=pdf
MDS=$(wildcard *.md)
PDFS=$(patsubst %.md,$(PDFDIR)/%.pdf, $(MDS))
TEMPLATE_ARGS=-V titlepage=true -V titlepage-text-color=000000 -V titlepage-color=B2DFEE -V titlepage-background=./background.pdf
PANDOC_ARGS=-N -V lang=it --template default.latex -s
.PHONY : all
all : $(PDFS)
$(PDFDIR):
mkdir $(PDFDIR)
$(PDFDIR)/%.pdf: %.md $(PDFDIR)
pandoc $(TEMPLATE_ARGS) $(PANDOC_ARGS) $< -o $@

69
dispensa/background.pdf Normal file
View file

@ -0,0 +1,69 @@
%PDF-1.5
%µí®û
3 0 obj
<< /Length 4 0 R
/Filter /FlateDecode
>>
stream
xœeŽKÂ@@÷s
. Â8†GpaÛE]¨÷OdÒØÖ4,ø=^xï ®wéS\=@C±šÁeí“yÀ˜kBsX²p1ÒèÇLHÄðÜ*†a  ßr<C39F>¹œøÕ¬VUb/ÒLPÝ1D®È<ì¢?ç‘\u¢Þ³·jÚmlŽœïp$Ž$Š“~.g~,·òž·>å
endstream
endobj
4 0 obj
150
endobj
2 0 obj
<<
/ExtGState <<
/a0 << /CA 1 /ca 1 >>
>>
>>
endobj
5 0 obj
<< /Type /Page
/Parent 1 0 R
/MediaBox [ 0 0 595.275574 841.889771 ]
/Contents 3 0 R
/Group <<
/Type /Group
/S /Transparency
/I true
/CS /DeviceRGB
>>
/Resources 2 0 R
>>
endobj
1 0 obj
<< /Type /Pages
/Kids [ 5 0 R ]
/Count 1
>>
endobj
6 0 obj
<< /Creator (cairo 1.14.8 (http://cairographics.org))
/Producer (cairo 1.14.8 (http://cairographics.org))
>>
endobj
7 0 obj
<< /Type /Catalog
/Pages 1 0 R
>>
endobj
xref
0 8
0000000000 65535 f
0000000564 00000 n
0000000264 00000 n
0000000015 00000 n
0000000242 00000 n
0000000336 00000 n
0000000629 00000 n
0000000756 00000 n
trailer
<< /Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
808
%%EOF

View file

@ -0,0 +1,237 @@
---
title: Cybersecurity con sistemi GNU/Linux
subtitle: Dispensa del corso
author: Andrea Fazzi
data: 13.03.2024
urlcolor: blue
---
# Utilizzo avanzato del terminale
In questa sezione verranno discussi gli utilizzi più avanzati del
terminale. In particolare, ci si soffermerà sui cosidetti *terminal
multiplexer*.
## I *terminal multiplexer*
I terminal multiplexer in Linux sono strumenti potenti che consentono
agli utenti di creare più sessioni di terminale all'interno di una
singola finestra del terminale. Questi strumenti sono particolarmente
utili per gestire più processi contemporaneamente, mantenendo aperte
le sessioni anche dopo la disconnessione, e per organizzare le
finestre del terminale in modo efficiente.
Uno dei terminal multiplexer più popolari e ampiamente utilizzati è
`tmux`. `tmux` permette agli utenti di creare, gestire e navigare tra
più sessioni di terminale, facilitando l'organizzazione dei processi e
la gestione delle finestre. Con `tmux`, è possibile dividere la
finestra del terminale in più riquadri, ciascuno dei quali può
eseguire un processo separato, e passare facilmente da una sessione
all'altra.
Un altro esempio di terminal multiplexer è `screen`, che offre
funzionalità simili a `tmux` ma con una sintassi leggermente
diversa. Entrambi gli strumenti sono disponibili per la maggior parte
delle distribuzioni Linux e possono essere installati tramite il
gestore di pacchetti della distribuzione.
Utilizzare un terminal multiplexer può migliorare notevolmente
l'efficienza e la produttività degli sviluppatori e degli
amministratori di sistema, consentendo di lavorare con più processi
contemporaneamente senza dover aprire molteplici finestre del
terminale.
### Riferimenti
1. [https://opensource.com/article/21/5/linux-terminal-multiplexer](https://opensource.com/article/21/5/linux-terminal-multiplexer)
## Introduzione a `tmux`
`tmux` è un potente strumento di gestione delle sessioni di terminale
in Linux. Permette agli utenti di creare, gestire e navigare tra più
sessioni di terminale all'interno di una singola finestra del
terminale. Questa funzionalità è particolarmente utile per
l'esecuzione di più programmi con una singola connessione, come quando
si effettua una connessione remota a una macchina utilizzando Secure
Shell (SSH) [1].
Per iniziare ad utilizzare `tmux`, basta digitare `tmux` nel
terminale. Questo comando avvia un server `tmux`, crea una sessione
predefinita (numero 0) con una singola finestra e si collega ad
essa. Una volta connessi a `tmux`, è possibile eseguire qualsiasi
comando o programma come si farebbe normalmente.
## Installazione di `tmux`
`tmux` è un'applicazione disponibile nel repository di `Arch
Linux`. Per installarla basterà utilizzare il comando `pacman`.
```bash
sudo pacman -S tmux
```
Per verificare che l'installazione sia andata a buon fine:
```bash
tmux -V
```
Il comando restituirà la versione installata.
### Riferimenti
1. https://www.redhat.com/sysadmin/introduction-tmux-linux
2. https://linuxhandbook.com/tmux/
3. https://hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/
4. https://linuxize.com/post/getting-started-with-tmux/
5. https://linuxconfig.org/introduction-to-terminal-multiplexer-tmux
6. https://github.com/tmux/tmux/wiki/Getting-Started
7. https://www.howtogeek.com/671422/how-to-use-tmux-on-linux-and-why-its-better-than-screen/
8. https://opensource.com/article/17/2/quick-introduction-tmux
9. https://wiki.archlinux.org/title/Tmux
10. https://github.com/tmux/tmux/wiki
## Primi passi con `tmux`
Per eseguire `tmux` si dovrà semplicemente invocare il comando
all'interno di una sessione di terminale.
```bash
tmux
```
È possibile staccare la sessione `tmux` premendo `Ctrl+B` seguito da
`D`. `tmux` opera utilizzando una serie di scorciatoie da tastiera
(keybindings) attivate premendo la combinazione "prefisso". Di
default, il prefisso è `Ctrl+B`. Dopo di che, premere `D` per staccare
dalla sessione corrente. La sessione continua ad eseguire in
background anche dopo la disconnessione, permettendo di riprendere
dove si è lasciati quando si è pronti a riconnettersi al server e
riattaccarsi alla sessione esistente.
`tmux` fornisce una serie di scorciatoie da tastiera per eseguire
comandi rapidamente all'interno di una sessione `tmux`. Alcune delle
più utili includono:
- `Ctrl+B D` — Stacca dalla sessione corrente.
- `Ctrl+B %` — Suddividi la finestra in due pannelli orizzontalmente.
- `Ctrl+B "` — Suddividi la finestra in due pannelli verticalmente.
- `Ctrl+B` seguito da una freccia (sinistra, destra, su, giù) — Sposta tra i pannelli.
- `Ctrl+B X` — Chiudi il pannello.
- `Ctrl+B C` — Crea una nuova finestra.
- `Ctrl+B N` o `P` — Sposta alla finestra successiva o precedente.
- `Ctrl+B 0` (1,2...) — Sposta a una finestra specifica per numero.
- `Ctrl+B :` — Entra nella riga di comando per digitare
comandi. L'auto-completamento tramite tab è disponibile.
- `Ctrl+B ?` — Visualizza tutte le scorciatoie da tastiera. Premere `Q` per uscire.
- `Ctrl+B W` — Apre un pannello per navigare tra le finestre in più sessioni.
### Esercizio
Utilizza `tmux` per suddividere il terminale in due pannelli
verticali. Nel pannello di sinistra apri uno script in Python
utilizzando l'editor `nano`. Nel pannello di destra esegui il comando
`htop`. Se `htop` non è presente nel sistema, procedi con la sua
installazione attraverso il package manager `pacman`.
## Configurazione di `tmux`
Il file di configurazione di `tmux`, noto come `tmux.conf`, è un file
di testo che permette agli utenti di personalizzare l'ambiente di
lavoro di `tmux` secondo le proprie preferenze. Questo file può essere
posizionato in due luoghi principali:
- `~/.tmux.conf` per una configurazione specifica dell'utente corrente.
- `/etc/tmux.conf` per una configurazione globale, applicabile a tutti gli utenti del sistema.
Se il file `~/.tmux.conf` non esiste, può essere creato semplicemente
eseguendo il comando `touch ~/.tmux.conf` nel terminale. Questo creerà
un file di configurazione vuoto che può essere modificato per
aggiungere le impostazioni desiderate.
La configurazione di `tmux` può includere una vasta gamma di opzioni, tra cui:
- Cambio del prefisso di comando predefinito.
- Abilitazione della modalità mouse.
- Impostazione di due prefissi.
- Cambio del comportamento predefinito del server.
- Inizio del conteggio dei numeri delle finestre e dei pannelli (Base-Index) a 1.
- Modifica dello sfondo del pannello corrente.
- ...
Per esempio, per cambiare il prefisso di comando predefinito da
`Ctrl+B` a `Ctrl+A`, si potrebbe aggiungere la seguente riga al file
`tmux.conf`:
```
set-option -g prefix C-a
```
Dopo aver apportato modifiche al file di configurazione, è necessario
ricaricarlo per applicare le nuove impostazioni. Questo può essere
fatto eseguendo il comando `tmux source-file ~/.tmux.conf` dal
terminale o utilizzando il comando `source-file ~/.tmux.conf` dalla
modalità di comando di `tmux`. Per facilitare il processo, è possibile
aggiungere un collegamento rapido nel file `tmux.conf` per ricaricare
facilmente la configurazione:
```
bind r source-file ~/.tmux.conf \; display "Reloaded!"
```
Questo permette di ricaricare la configurazione premendo il prefisso
seguito da `r`, visualizzando un messaggio di conferma.
### Riferimenti
1. https://hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/
2. https://www.hostinger.com/tutorials/tmux-config
3. https://dev.to/iggredible/useful-tmux-configuration-examples-k3g
4. https://github.com/gpakosz/.tmux
5. https://arcolinux.com/everthing-you-need-to-know-about-tmux-configuration/
6. https://thevaluable.dev/tmux-config-mouseless/
7. https://github.com/samoshkin/tmux-config
8. https://wiki.archlinux.org/title/tmux
9. https://medium.com/@bhavik.n/customize-tmux-to-use-it-effectively-28b262c8b692
## Creazione di layout personalizzati
Si supponga di voler creare un file di configurazione specifico per un
progetto in cui il terminale viene diviso in tre parti: due colonne
verticali di cui una a sua volta suddivisa orizzontalmente. In questo
caso è possibile utilizzare uno script di configurazione
personalizzato per `tmux`. Questo script può essere salvato in un file
separato, ad esempio in `~/.config/tmux/split.conf`.
```
new -s splitted_session # crea una nuova sessione
selectp -t 0 # seleziona il primo pannello
splitw -h -p 50 # divide il pannello corrente orizzontalmente in due parti
selectp -t 1 # seleziona il nuovo secondo pannello
splitw -v -p 50 # divide il pannello corrente verticalmente in due parti
selectp -t 0 # torna al primo pannello
```
Una volta creato il file di configurazione, occorrerà "eseguirlo" con
```bash
tmux source-file ~/.config/tmux/split.conf
```
### Esercizio
Crea un file di configurazione `tmux` per produrre un layout con due
righe di cui la prima suddivisa in due colonne secondo uno schema
simile a quello riportato sotto.
```
-----------
| | |
| | |
-----------
| |
-----------
```

1048
dispensa/default.latex Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

15
programma/Makefile Normal file
View file

@ -0,0 +1,15 @@
PDFDIR=pdf
MDS=$(wildcard *.md)
PDFS=$(patsubst %.md,$(PDFDIR)/%.pdf, $(MDS))
TEMPLATE_ARGS=-V titlepage=true -V titlepage-text-color=000000 -V titlepage-color=B2DFEE -V titlepage-background=./background.pdf
PANDOC_ARGS=-N -V lang=it --template default.latex -s
.PHONY : all
all : $(PDFS)
$(PDFDIR):
mkdir $(PDFDIR)
$(PDFDIR)/%.pdf: %.md $(PDFDIR)
pandoc $(TEMPLATE_ARGS) $(PANDOC_ARGS) $< -o $@

69
programma/background.pdf Normal file
View file

@ -0,0 +1,69 @@
%PDF-1.5
%µí®û
3 0 obj
<< /Length 4 0 R
/Filter /FlateDecode
>>
stream
xœeŽKÂ@@÷s
. Â8†GpaÛE]¨÷OdÒØÖ4,ø=^xï ®wéS\=@C±šÁeí“yÀ˜kBsX²p1ÒèÇLHÄðÜ*†a  ßr<C39F>¹œøÕ¬VUb/ÒLPÝ1D®È<ì¢?ç‘\u¢Þ³·jÚmlŽœïp$Ž$Š“~.g~,·òž·>å
endstream
endobj
4 0 obj
150
endobj
2 0 obj
<<
/ExtGState <<
/a0 << /CA 1 /ca 1 >>
>>
>>
endobj
5 0 obj
<< /Type /Page
/Parent 1 0 R
/MediaBox [ 0 0 595.275574 841.889771 ]
/Contents 3 0 R
/Group <<
/Type /Group
/S /Transparency
/I true
/CS /DeviceRGB
>>
/Resources 2 0 R
>>
endobj
1 0 obj
<< /Type /Pages
/Kids [ 5 0 R ]
/Count 1
>>
endobj
6 0 obj
<< /Creator (cairo 1.14.8 (http://cairographics.org))
/Producer (cairo 1.14.8 (http://cairographics.org))
>>
endobj
7 0 obj
<< /Type /Catalog
/Pages 1 0 R
>>
endobj
xref
0 8
0000000000 65535 f
0000000564 00000 n
0000000264 00000 n
0000000015 00000 n
0000000242 00000 n
0000000336 00000 n
0000000629 00000 n
0000000756 00000 n
trailer
<< /Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
808
%%EOF

View file

@ -0,0 +1,143 @@
---
title: Cybersecurity con sistemi GNU/Linux
subtitle: Programma del corso
author: Andrea Fazzi
data: 17.01.202
urlcolor: blue
---
# Presentazione
Il corso ha lo scopo di fornire una comprensione approfondita di Arch
Linux, configurandolo opportunamente per utilizzarlo nel campo della
sicurezza informatica e del penetration testing. Il corso copre una
vasta gamma di argomenti, tra cui l'installazione di Arch Linux,
l'analisi delle informazioni pubbliche e lo scanning di reti, le
tecniche e le problematiche di sniffing, la sicurezza dei servizi come
posta, DNS, web e SSH, l'hardening di Arch Linux, la prevenzione da
tecniche di hacking comuni, e infine l'uso del bash scripting per la
cybersecurity. Attraverso una combinazione di lezioni teoriche e
pratiche, gli studenti avranno l'opportunità di acquisire competenze
pratiche nel campo della sicurezza informatica.
# Obiettivi
* Fornire una comprensione delle caratteristiche e dei vantaggi di
Arch Linux.
* Insegnare le tecniche di raccolta di informazioni e di scanning di
reti.
* Spiegare le tecniche e le problematiche di sniffing e come
proteggersi.
* Fornire una comprensione della sicurezza dei servizi di posta, DNS,
web e SSH.
* Insegnare come rafforzare un sistema Arch Linux attraverso
l'hardening.
* Fornire una comprensione delle tecniche di hacking comuni e come
prevenirle.
* Insegnare l'uso del bash scripting per automatizzare le attività di
sicurezza e migliorare la cybersecurity.
# Metodologie
Le lezioni saranno dialogiche e partecipate. Gli studenti verranno
condotti verso la costruzione delle conoscenze e competenze attraverso
esempi, compiti di realtà, attività di problem solving.
# Mezzi e strumenti
Ciascuno studente avrà a disposizione un'installazione di Arch Linux
GNU/Linux predisposta all'interno di una macchina virtuale.
# Articolazione dei contenuti (40 ore)
## Installazione di Arch Linux
* Caratteristiche della distribuzione: Arch Linux è una distribuzione
Linux basata su Debian che è stata progettata specificamente per il
penetration testing e la sicurezza informatica. Include numerose
utility preinstallate per l'hacking etico, come Wireshark, Nmap,
Metasploit e altre.
* Installazione su macchina laptop: l'installazione di Arch Linux su
un laptop comporta il download dell'immagine ISO dal sito ufficiale,
la creazione di una chiavetta USB avviabile, il boot da questa
chiavetta e infine la configurazione dell'installazione. Durante
l'installazione, è possibile selezionare le utility specifiche che
si desidera installare.
## Analisi delle Informazioni pubbliche e network scanning
* Tecniche di raccolta di informazioni: utilizzo di strumenti come
Whois, Nslookup e Dig per ottenere informazioni su un dominio o un
indirizzo IP.
* Utilizzo di scanner di rete: utilizzo di strumenti come Nmap per
identificare i dispositivi sulla rete e le porte aperte su questi
dispositivi.
* Analisi delle vulnerabilità: utilizzo di strumenti come Nessus o
OpenVAS per identificare le vulnerabilità nei dispositivi e nei
servizi di rete.
* Metodi di mitigazione: implementazione di patch e aggiornamenti,
configurazione di firewall e IDS, utilizzo di VPN e crittografia.
## Tecniche e problematiche di sniffing
* Cos'è lo sniffing e come funziona: lo sniffing è una tecnica
utilizzata per intercettare e leggere il traffico di rete. Può
essere fatto utilizzando strumenti come Wireshark o Tcpdump.
* Tecniche di sniffing: sniffing passivo, sniffing attivo, sniffing
diretto, sniffing indiretto.
* Protezione da sniffing: utilizzo di protocolli crittografati come
HTTPS e SSH, configurazione di VPN, utilizzo di firewall e IDS.
## Sicurezza dei servizi: posta, dns, web, ssh
* Sicurezza del servizio di posta elettronica: configurazione di
protocolli sicuri come SMTPS, POP3S e IMAPS, implementazione di SPF,
DKIM e DMARC.
* Sicurezza del servizio DNS: implementazione di DNSSEC,
configurazione di firewall per limitare le query DNS, monitoraggio
del traffico DNS per rilevare attività sospette.
* Sicurezza del servizio web: configurazione di HTTPS, implementazione
di HSTS, utilizzo di WAF, attuazione di politiche di sicurezza del
contenuto.
* Sicurezza del servizio SSH: disabilitazione dell'accesso root,
limitazione degli utenti che possono utilizzare SSH, configurazione
di chiavi SSH, utilizzo di Fail2ban.
## Hardening di Arch Linux
* Cosa significa hardening: l'hardening è il processo di rafforzamento
di un sistema informatico per ridurre la sua superficie di attacco.
* Passaggi per l'hardening di un sistema Arch Linux: aggiornamento del
sistema, rimozione di servizi non necessari, configurazione di
firewall e IDS, implementazione di politiche di sicurezza avanzate.
* Strumenti e tecniche per l'hardening: utilizzo di strumenti come
Lynis per l'hardening automatizzato, implementazione di SELinux o
AppArmor, configurazione di auditd.
## Prevenzione da tecniche di hacking comuni
* Tipi comuni di attacchi hacking: attacchi brute force, attacchi
DDoS, phishing, SQL injection, cross-site scripting.
* Tecniche di prevenzione: utilizzo di password complesse, limitazione
del numero di tentativi di login, configurazione di firewall e IDS,
aggiornamento e patching del sistema e delle applicazioni,
formazione degli utenti.
* Strumenti di monitoraggio e rilevamento degli attacchi: utilizzo di
strumenti come Snort, Wireshark, Syslog, ELK Stack.
## Bash Scripting e Cybersecurity
* Introduzione al bash scripting: cos'è lo scripting bash, perché è
utile, come scrivere script bash di base.
* Utilizzo di script bash per automatizzare le attività di sicurezza:
creazione di script per l'automazione di attività come il
monitoraggio del sistema, la scansione di rete, l'hardening del
sistema.
* Esempi di script bash utili per la cybersecurity: script per
l'analisi dei log, script per l'automazione di Nmap o Wireshark,
script per la generazione di report di sicurezza.
* Best practices per la scrittura di script bash sicuri: utilizzo di
variabili non modificabili, controllo degli input, gestione degli
errori, limitazione dei privilegi.
# Verifiche e valutazione
Le verifiche saranno somministrate nella forma di test strutturati a
risposta chiusa (4 risposte di cui solo una corretta). All'inizio del
corso verrà proposto agli studenti un test per verificare le loro
competenze iniziali. Al termine del corso verrà proposto una
simulazione di test utile alla preparazione dell'esame conclusivo.

1048
programma/default.latex Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.