From 67e5e9f4fdb03cfccaad1741e2281aa9d75bfe9c Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sat, 20 Jun 2026 10:47:35 +0200 Subject: [PATCH] =?UTF-8?q?[CLIENT]=20Nuova=20Agile=20Technology=20srl=20?= =?UTF-8?q?=E2=80=94=20simulazione=20audit=20interno=20combinato=20ISO=202?= =?UTF-8?q?7001+NIS2=20(AUD-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit registrato live nel modulo Audit interni: 21 voci di checklist (clausole ISO 27001 4-10 + controlli Annex A/SoA + misure NIS2 art.23/24/25), 5 Non Conformità aperte (1 maggiore: determinazione applicabilità NIS2 non formalizzata; 4 minori: trattamento rischi, formazione, controlli non eseguiti, DPO non nominato). Verdetto: SGSI documentato ma non ancora operativo, non pronto per Stage 2. Co-Authored-By: Claude Opus 4.8 (1M context) --- application/cli/build_nuova_agile_audit.php | 83 +++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 application/cli/build_nuova_agile_audit.php diff --git a/application/cli/build_nuova_agile_audit.php b/application/cli/build_nuova_agile_audit.php new file mode 100644 index 0000000..f925d7b --- /dev/null +++ b/application/cli/build_nuova_agile_audit.php @@ -0,0 +1,83 @@ +prepare($s);$st->execute($a);} +function one(PDO $p,string $s,array $a=[]){$st=$p->prepare($s);$st->execute($a);return $st->fetch(PDO::FETCH_ASSOC);} +$NOW='2026-06-20 11:30:00'; $ORGID=996003; $RSGSI=326; $PRES=103; +$rsgsiRole=one($pdo,"SELECT id FROM org_roles WHERE organization_id=? AND role_name=?",[$ORGID,'Responsabile del Sistema di Gestione (RSGSI)']); +$rsgsiRoleId=$rsgsiRole?(int)$rsgsiRole['id']:null; + +/* ---- AUDIT HEADER ---------------------------------------------------------- */ +$scope="SGSI di Nuova Agile Technology srl: sviluppo, erogazione e manutenzione di prodotti in licenza (on-premise presso i clienti) e servizi SaaS in cloud; infrastruttura cloud (Aruba, Hetzner), piattaforme AI, endpoint (PC portatili), trattamento dei dati personali dei clienti."; +$criteria="ISO/IEC 27001:2022 clausole 4-10 e controlli Annex A applicabili (SoA, incl. ISO/IEC 27017:2015 e 27018:2019); obblighi NIS2 - D.Lgs. 138/2024 art.23 (governance), art.24 (misure di gestione del rischio), art.25 (notifica incidenti)."; +$concl="Audit combinato: SGSI in FASE DI IMPIANTO. Documentazione (Manuale, 10 politiche, 13 procedure, 7 istruzioni), SoA (111 controlli ISO 27001/27017/27018), contesto, organigramma, registro rischi e inventario asset COMPLETI e COERENTI col profilo cloud-only -> esito positivo della revisione documentale (equivalente a Stage 1). Sistema NON ancora OPERATIVO: mancano evidenze di attuazione (trattamento rischi, esecuzione controlli periodici, erogazione formazione, primo riesame di Direzione, ciclo PDCA). Rilevate 1 NC maggiore, 4 NC minori e diverse osservazioni. VERDETTO: NON pronto per audit di certificazione (Stage 2) ne' per dichiarare piena conformita' NIS2. Raccomandazioni: chiudere le NC; completare il piano di attuazione ed accumulare ~3 mesi di evidenze operative; formalizzare con delibera della Direzione la determinazione di applicabilita' NIS2 (art.23 D.Lgs.138/2024) integrando i dati dimensionali (P.IVA, fatturato). Ripianificare follow-up dopo chiusura NC."; + +$a=one($pdo,"SELECT id FROM internal_audits WHERE organization_id=? AND code=?",[$ORGID,'AUD-001']); +if(!$a){ + ex($pdo,"INSERT INTO internal_audits (organization_id,code,title,scope,criteria,planned_date,executed_date,status,lead_auditor_user_id,lead_auditor_role_id,conclusion,created_by,created_at,updated_at) + VALUES (?,?,?,?,?,?,?, 'completed', ?,?,?,?,?,?)", + [$ORGID,'AUD-001','Audit interno combinato SGSI (ISO 27001/27017/27018) e conformita NIS2',$scope,$criteria,'2026-06-20','2026-06-20',$RSGSI,$rsgsiRoleId,$concl,$RSGSI,$NOW,$NOW]); + $auditId=(int)$pdo->lastInsertId(); echo "AUDIT creato AUD-001 id=$auditId\n"; +} else { $auditId=(int)$a['id']; ex($pdo,"UPDATE internal_audits SET status='completed',conclusion=?,executed_date='2026-06-20',updated_at=? WHERE id=?",[$concl,$NOW,$auditId]); echo "AUDIT esistente id=$auditId (aggiornato)\n"; } + +/* ---- CHECKLIST ITEMS ------------------------------------------------------- */ +// ref_type, ref_code, checkpoint, result, note +$items=[ + ['clause','4','Contesto dell\'organizzazione: scopo, contesto interno/esterno, parti interessate, perimetro SGSI','conforme','Definiti nel Manuale e nel Modello SGSI (scope cloud-only, contesto, 6 parti interessate, esclusione data center fisici). Coerenti col profilo.'], + ['clause','5','Leadership e politica: impegno della Direzione, politica SGSI, ruoli e responsabilita','osservazione','Politica SGSI approvata e ruoli assegnati (Presidente Garretto, RSGSI Tagliavini, Resp.IT Fattori). OSS: l\'evidenza formale dell\'impegno e dell\'approvazione della Direzione (verbale/delibera) e da consolidare; primo riesame non ancora svolto.'], + ['clause','6','Pianificazione: valutazione e trattamento dei rischi, obiettivi, SoA','non_conforme','NC MINORE: 10 rischi identificati e valutati ma SENZA piani di trattamento documentati (responsabili/azioni/scadenze). SoA completa ma con stato di attuazione "not_started". Vedi NCR collegata.'], + ['clause','7','Supporto: risorse, competenze, consapevolezza, comunicazione, informazioni documentate','non_conforme','NC MINORE: controllo documenti adeguato (31 documenti gestiti, versionati). Competenze/consapevolezza NON evidenziate: 5 corsi definiti ma nessuna assegnazione/completamento. Vedi NCR collegata.'], + ['clause','8','Operativita: attuazione dei processi e dei controlli, trattamento operativo dei rischi','non_conforme','NC MINORE: processi documentati in procedure ma EVIDENZE DI ATTUAZIONE assenti: i 15 piani di controllo non risultano eseguiti (nessuna registrazione). Vedi NCR collegata.'], + ['clause','9','Valutazione delle prestazioni: monitoraggio, misurazione, audit interni, riesame di direzione','osservazione','Monitoraggio pianificato (piani di controllo) ma mai eseguito; gap analysis al 45% (in corso). Nessun riesame di Direzione ne audit interno pregresso (questo e il primo). OSS: garantire l\'indipendenza dell\'auditor nei cicli futuri (auditor non responsabile dell\'area).'], + ['clause','10','Miglioramento: non conformita e azioni correttive','conforme','Procedura NC/azioni correttive presente e modulo NCR/CAPA disponibile e operativo: esercitato da questo stesso audit con apertura delle NC.'], + ['annex_control','A.5.1','Politiche per la sicurezza delle informazioni','conforme','Corpo politiche completo e coerente (10 politiche approvate).'], + ['annex_control','A.5.18','Diritti di accesso','osservazione','Politica controllo accessi presente; riesame periodico degli accessi pianificato (CTL-001) ma non ancora eseguito.'], + ['annex_control','A.5.22','Monitoraggio e riesame dei servizi dei fornitori','osservazione','4 fornitori critici censiti (Aruba, Hetzner, Anthropic, Google). DPA/clausole di sicurezza e valutazioni da formalizzare; riesame annuale (CTL-008) non ancora svolto.'], + ['annex_control','A.5.34','Privacy e protezione delle PII','non_conforme','NC MINORE: la piattaforma SaaS tratta dati personali dei clienti (ISO 27018/GDPR) ma il ruolo di Referente Protezione Dati (DPO) e VACANTE. Vedi NCR collegata.'], + ['annex_control','A.8.5','Autenticazione sicura (MFA)','osservazione','MFA richiesta dalle politiche/istruzioni; evidenza di attuazione e verifica (CTL-002) non disponibile.'], + ['annex_control','A.8.13','Backup delle informazioni','osservazione','Politica e procedura di backup presenti; test di ripristino (CTL-003) mai eseguito: efficacia non dimostrata.'], + ['annex_control','A.8.8','Gestione delle vulnerabilita tecniche','osservazione','Procedura presente; vulnerability scan e applicazione patch (CTL-004/006) non ancora evidenziati.'], + ['annex_control','CLD.6.3','ISO 27017 - responsabilita condivisa nel cloud','conforme','Modello di responsabilita condivisa documentato (Politica Cloud 27017); coerente con uso di Aruba/Hetzner e ruolo di cloud provider (SaaS).'], + ['nis2_measure','art.23','Governance NIS2: organi di gestione, approvazione e supervisione delle misure','non_conforme','NC MAGGIORE: determinazione di applicabilita NIS2 NON formalizzata. Classificazione "importante" preliminare senza delibera della Direzione ne conferma ACN; dati dimensionali (P.IVA, fatturato) mancanti. L\'art.23 D.Lgs.138/2024 richiede approvazione e supervisione formale da parte degli organi di gestione. Vedi NCR collegata.'], + ['nis2_measure','art.24','Misure di gestione del rischio (le misure minime)','osservazione','Misure documentate (politiche/procedure su rischi, incidenti, continuita, accessi, crittografia, supply chain, sviluppo sicuro) coerenti con l\'art.24. Attuazione/evidenze da completare (collegato alle NC su cl.6/8).'], + ['nis2_measure','art.25','Obblighi di notifica degli incidenti','osservazione','Procedura di notifica con tempistiche corrette (pre-allarme 24h, notifica 72h, relazione finale 1 mese al CSIRT Italia). Capacita NON testata: nessuna simulazione ne incidente registrato.'], + ['nis2_measure','art.24-sc','Sicurezza della supply chain (NIS2)','osservazione','Fornitori critici censiti; necessario formalizzare clausole contrattuali di sicurezza e valutazioni periodiche, anche in quanto l\'azienda e a sua volta fornitore di clienti soggetti a NIS2.'], + ['custom','ORG','Anagrafica dell\'organizzazione','osservazione','P.IVA, sede legale e fatturato annuo non valorizzati: completare per la determinazione dimensionale e i documenti.'], + ['custom','GAP','Gap analysis iniziale','osservazione','Assessment Art.21/misure in corso (45%): completare per avere la baseline di conformita.'], +]; +$ci=0;$ord=1; +foreach($items as [$rt,$rc,$cp,$res,$note]){ + $exi=one($pdo,"SELECT id FROM internal_audit_items WHERE audit_id=? AND ref_code=? AND checkpoint=?",[$auditId,$rc,$cp]); + if(!$exi){ ex($pdo,"INSERT INTO internal_audit_items (audit_id,ref_type,ref_code,checkpoint,result,note,ord) VALUES (?,?,?,?,?,?,?)",[$auditId,$rt,$rc,$cp,$res,$note,$ord]); $ci++; } + $ord++; +} +echo "ITEMS: +$ci (totale ".count($items).")\n"; + +/* ---- NON CONFORMITA -------------------------------------------------------- */ +// title, desc, severity, category, nis2_article, target_close, codeSuffix +$ncs=[ + ['Determinazione di applicabilita NIS2 non formalizzata','La classificazione dell\'azienda come soggetto NIS2 "importante" e un\'autovalutazione preliminare: manca una delibera/atto formale degli organi di gestione e la conferma ACN; i dati dimensionali (P.IVA, fatturato) non sono valorizzati. L\'art.23 del D.Lgs.138/2024 richiede che gli organi di gestione approvino le misure e ne supervisionino l\'attuazione. Azione: formalizzare la determinazione di applicabilita con delibera della Direzione e completamento dei dati dimensionali; richiedere conferma/registrazione presso ACN se dovuta.','major','Governance NIS2','23','2026-07-31','001'], + ['Trattamento dei rischi non documentato','I 10 rischi del registro sono identificati e valutati (probabilita x impatto) ma privi di piani di trattamento documentati (azioni, responsabili, scadenze); la SoA risulta con stato di attuazione "not_started". Non conformita a ISO 27001 cl.6.1.3/8.3 e all\'art.24 D.Lgs.138/2024. Azione: definire i piani di trattamento e allineare lo stato di attuazione nella SoA.','minor','Gestione del rischio','24','2026-09-30','002'], + ['Formazione e consapevolezza non erogate','Sono definiti 5 corsi obbligatori ma non risultano assegnazioni ne completamenti: competenza e consapevolezza (ISO 27001 cl.7.2/7.3, A.6.3; igiene informatica e formazione ex art.24) non evidenziate. Azione: assegnare i corsi a tutto il personale e registrare i completamenti.','minor','Competenze e formazione','24','2026-09-30','003'], + ['Controlli periodici non eseguiti - assenza di evidenze operative','I 15 piani di controllo periodici sono definiti ma non risulta alcuna esecuzione registrata (es. verifica MFA, test di ripristino backup, vulnerability scan, riesame accessi, revisione log). Non conformita a ISO 27001 cl.9.1 e A.5.35; l\'efficacia dei controlli non e dimostrata. Azione: avviare l\'esecuzione dei controlli e registrarne gli esiti.','minor','Monitoraggio e misurazione','24','2026-09-30','004'], + ['Referente Protezione Dati (DPO) non assegnato','La piattaforma SaaS tratta dati personali dei clienti (ambito GDPR e ISO 27018) ma il ruolo di Referente Protezione Dati/DPO risulta vacante nell\'organigramma. Non conformita ad A.5.34. Azione: nominare il referente privacy (anche esterno) e formalizzarne le responsabilita.','minor','Privacy e protezione dati','','2026-09-30','005'], +]; +$ni=0; +foreach($ncs as [$t,$d,$sev,$cat,$art,$close,$suf]){ + $exn=one($pdo,"SELECT id FROM non_conformities WHERE organization_id=? AND title=? AND source='audit'",[$ORGID,$t]); + if(!$exn){ + $code='NCR-9'.$suf.str_pad((string)($auditId%1000),3,'0',STR_PAD_LEFT); // codice deterministico riproducibile + ex($pdo,"INSERT INTO non_conformities (organization_id,ncr_code,title,description,source,source_entity_type,source_entity_id,severity,category,nis2_article,status,identified_by,assigned_to,identified_at,target_close_date,created_at,updated_at) + VALUES (?,?,?,?, 'audit','internal_audit',?, ?,?,?, 'open', ?,?,?,?,?,?)", + [$ORGID,$code,$t,$d,$auditId,$sev,$cat,($art!==''?$art:null),$RSGSI,$RSGSI,$NOW,$close,$NOW,$NOW]); + echo " NC + [$sev] $t ($code)\n"; $ni++; + } else echo " NC = $t\n"; +} +echo "NON CONFORMITA: +$ni\n"; +echo "\nAUDIT SIMULATO OK — AUD-001 id=$auditId\n";