Home

Servizi

Strumenti del nodo e dell'officina

Servizi fondamentali

Che cosa sono

Per i motivi (discussione): L'officina: analisi, compilazione e catena di fornitura, Alerting.
Nella guida pratica: L'officina e lo scambio con il nodo.

I servizi fondamentali sono gli strumenti che rendono un nodo Tutanum vivo e difendibile: la catena di fornitura del software (analisi, compilazione, repository firmato), il monitoraggio delle risorse e delle difese, i backup cifrati, e gli avvisi che arrivano al telefono attraverso I2P, senza servizi di terzi. Sono piccoli programmi indipendenti: se un tassello cade, gli altri restano. Il codice è in questa cartella (README), in forma generica e riutilizzabile: nessun segreto e nessun riferimento a un nodo specifico.

Nodo e officina

Il lavoro è diviso tra due macchine con una regola netta: è sempre il nodo a iniziare. Il nodo custodisce i segreti ed espone i servizi; l'officina (una macchina separata) analizza e compila il software non fidato e non ha uscite proprie (esce solo dal proxy Tor del nodo). Le due si parlano solo in SSH, a comando imposto, e per iniziativa del nodo; ciò che arriva dall'officina è dato, che il nodo valida e rifirma con una chiave che non lascia mai il nodo. Il dettaglio è in L'officina e lo scambio con il nodo.

Nodocustodisce i segretied espone i serviziOfficinaanalizza e compilanessuna uscita propriaSSH a comando impostopacchetti compilatirifirma con la chiave, mai condivisaesce solo dal Tor del nodosempre su iniziativa del nodo
Il nodo interroga l'officina in SSH, a comando imposto e sempre di propria iniziativa; l'officina analizza e compila senza uscite proprie e restituisce i pacchetti, che il nodo rifirma con la chiave di firma, mai condivisa.

Sul nodo

Girano sull'host, che custodisce i segreti. Li installano gli script dedicati, e sono schedulati da cron-servizi.

risorse, difese,servizi, logtutanum-monitortutanum-avvisifirma Ed25519jail i2p: file distato (nullfs ro)telefonovia I2P
Il monitor raccoglie risorse, difese e stato dei servizi; gli avvisi ne firmano un file di stato con Ed25519 e lo pubblicano nella jail che lo serve via I2P. Il telefono lo scarica e ne verifica la firma, senza passare da servizi di terzi.
StrumentoFa
tutanum-monitorControlla risorse, difese (firewall, securelevel, esca) e servizi; avvisa ai cambi di stato. Config: tutanum-monitor.conf.
tutanum-edrRilevatore d'intrusione, solo osservativo (non tocca mai firewall o sistema): accessi (ssh, console, su/doas su host e in ogni jail), canary token (file-esca e path-esca nel web), uscite in chiaro e beaconing, DoS. Classifica ogni evento con un riferimento CAPEC e, con una correlazione comportamentale, mette in sequenza gli eventi recenti in catene note (per esempio accesso seguito da elevazione e poi da un'uscita in chiaro, oppure un brute force seguito da un accesso riuscito dalla stessa origine), legandoli per soggetto (stesso utente o indirizzo) dove ha senso ed emettendo un unico avviso "comportamento sospetto" con un punteggio dinamico. Config: tutanum-edr.conf; si installa con installa-edr.sh.
tutanum-escaRiepilogo degli honeypot (cowrie, endlessh): login riusciti, comandi e download finiscono in allarme, scansioni e tentativi falliti sono riassunti a conteggi per non inondare il telefono. Le intrusioni ATTIVE (login riuscito, comando, trasferimento file) vengono inoltre passate a tutanum-edr, che le correla con gli eventi del nodo reale (per esempio esca colpita seguita da un accesso o da un'uscita in chiaro). Config: tutanum-esca.conf.
tutanum-avvisiIl notificatore: firma il file di stato (Ed25519) e lo pubblica nella jail che lo serve via I2P, per l'app del telefono. Si installa con installa-avvisi.sh.
tutanum-versionePubblica un file versione firmato accanto allo stato: l'app lo verifica e mostra il banner di aggiornamento. Uso manuale a ogni rilascio.
tutanum-verdettiRitira dall'eepsite i verdetti di triage che l'app invia (una PUT firmata, autenticata con una chiave del telefono arruolata sul nodo), ne verifica la firma Ed25519 e li applica: un blocco marcato "falso positivo" il notificatore smette di pubblicarlo. È l'anello di retroazione della behaviour detection, lato nodo.
tutanum-inventarioInventario dei pacchetti dell'host e di ogni jail, con l'origine di ciascun port; segnala all'app le variazioni (pacchetti installati, aggiornati o rimossi).
tutanum-backupBackup cifrato e deduplicato con restic, in sola aggiunta (--append-only) verso l'officina, con verifica a rotazione. Config: tutanum-backup.conf.
tutanum-hackalendarRiversa le issue in un'agenda/roadmap auto-ospitata (file di sincronizzazione su un repository), attraverso Tor.
tutanum-officina-scambioIl solo canale verso l'officina: consegna l'inventario, ritira le issue, ritira il repository compilato e lo rifirma. Gira per iniziativa del nodo.
tutanum-blinda-jailNelle jail: etc/usr/local/compat in sola lettura, tmp/var/home/root non eseguibili. Ciò che si scrive non si esegue, ciò che si esegue non si scrive.

I log confluiscono in due destinazioni di syslog (syslog-avvisi.conf, con rotazione da newsyslog-avvisi.conf): gli allarmi al notificatore, le informazioni al file di stato.

La logica delicata del nodo (la chiave con cui app e nodo concordano il triage, la correlazione comportamentale con i suoi punteggi, la verifica delle firme dei verdetti, l'estrazione degli honeypot) ha una suite di prove riproducibili, prove.sh: gira in locale su dati sintetici, senza il nodo e senza toccare nulla, ed estrae le funzioni dai file reali così da cogliere le regressioni se il codice cambia.

Sull'officina

Girano su una macchina separata, senza segreti: analizzano e compilano il software non fidato. Funzioni comuni in officina.subr; preparazione con installa-officina.sh.

StrumentoFa
…sorvegliaSorveglia l'albero dei port e i repository a monte dei pacchetti installati; accoda un lavoro quando qualcosa si muove.
…lavoraEsegue i lavori in coda, uno alla volta: scarica i sorgenti attraverso Tor, li fa analizzare e, superata la soglia, compila in una jail effimera senza rete (poudriere).
…analizzaLa catena di scanner (Gitleaks, Trivy, Semgrep, Bearer, Syft, Grype, osv-scanner) con una soglia che blocca la compilazione oltre il livello di gravità scelto (fail-closed).
…cacciaCaccia ai bug nei sorgenti a monte: analizzatori statici per C/C++ e fuzzing degli harness già forniti dagli autori.
…vaVulnerability assessment: confronta l'inventario con il database VuXML e apre una issue per ogni vulnerabilità nuova.
…bugbountyScansione periodica dei propri servizi esposti (onion, eepsite, SSH), come farebbe un attaccante.
…scambioIl dispatcher lato officina: l'unico comando che il nodo può eseguire, con un elenco chiuso di richieste (inventario, issue).

Ogni risultato (vulnerabilità, errore di build, bug a monte) diventa una issue, legata in un registro a catena di hash; il nodo la ritira e la porta all'agenda e, se urgente, al telefono.

App del telefono

L'app riceve gli avvisi del nodo: scarica via I2P il file di stato firmato e verifica la firma Ed25519 con la chiave pubblica inquadrata da un QR prima di interpretarne il contenuto. Non dipende da alcun servizio di terzi. Mostra le risorse e i servizi del nodo e l'elenco degli avvisi, e notifica quando compare un nuovo evento o quando il nodo smette di dare segni di vita.

Può seguire più nodi insieme. Oltre allo stato, riceve come avvisi gli accessi (al server e ai servizi), i rilevamenti d'intrusione classificati con CAPEC e gli esiti degli honeypot prodotti da tutanum-edr ed tutanum-esca; segnala le variazioni dei pacchetti del nodo e, se il nodo pubblica un file versione firmato, mostra il banner di aggiornamento. Può usare un router I2P incorporato, con un registro consultabile dentro l'app, invece di un proxy esterno, e lascia scegliere ogni quanto controllare. Il router incorporato avvia il proprio netDb da un elenco di reseed imbarcato nell'app, così funziona anche sulle reti che bloccano il reseed via HTTPS; il registro del router è copiabile e azzerabile dalla sua schermata.

Le attività sospette non restano un elenco piatto: l'app le raggruppa in blocchi omogenei (stessa origine e stessa classe d'attacco) a cui si può dare un verdetto di triage, come fa un EDR/XDR: malevola, lecita o falso positivo, con un filtro per vedere solo ciò che resta da valutare. Il verdetto è un'annotazione locale del dispositivo, ma viene anche rimandato al nodo, firmato con una chiave del telefono (da arruolare una volta sul nodo): un canale di sola scrittura, autenticato, su cui l'app deposita il verdetto attraverso lo stesso eepsite. Un blocco segnato come falso positivo il nodo smette di pubblicarlo, così l'app non ripropone ciò che hai già giudicato innocuo (è l'anello di retroazione che molti EDR/XDR usano per imparare dai triage). Il lato nodo affianca inoltre ai rilevamenti singoli una correlazione comportamentale: più eventi che da soli sono rumore, se compaiono in sequenza entro una finestra di tempo, diventano un unico avviso "comportamento sospetto". Dove ha senso le catene sono legate per soggetto (stesso utente o stesso indirizzo), così da distinguere, per esempio, un brute force seguito da un accesso riuscito dalla stessa origine (un break-in) dal rumore di tentativi e accessi scollegati; il punteggio è dinamico (parte dalla gravità della catena e sale con il legame di soggetto, il numero di segnali corroboranti e il coinvolgimento di un'utenza di root).

La prima versione era Android nativa (in android/); la riscrittura in Flutter (Android, Linux e web) è a sorgente aperto con licenza AGPL-3.0 nel repository dedicato tutanum-avvisi-app.

Codice, segreti e licenza

Tutto il codice è su GitLab: gitlab.com/Rekcah/tutanum → servizi/ (i link qui sopra puntano ai singoli file nel repository).

I segreti (chiavi di firma, token, passphrase) non stanno nel repository: gli script li leggono da file esterni, creati al momento della messa in opera. I contenuti dei siti web e delle applicazioni servite dal nodo non fanno parte di questi strumenti.

Il codice è distribuito con licenza AGPL-3.0: chi lo modifica e lo offre, anche come servizio di rete, deve renderne disponibile il sorgente. La documentazione del progetto resta CC BY-NC-SA 4.0. Per la messa in opera vedi le guide Classico e Lieve.