2.2. Verifica di porte aperte per l'immunizzazione dei programmi

Con lo strumento unconfined è possibile individuare automaticamente i daemon del server di rete che necessitano di un profilo. È anche possibile visualizzare un rapporto di queste informazioni nell'interfaccia utente grafica di YaST (per ulteriori informazioni, vedere la Sezione 4.3.1.1, "Rapporto di controllo applicazioni" (↑Guida all'amministrazione di Novell AppArmor 2.0)).

Lo strumento unconfined utilizza il comando netstat -nlp per controllare le porte del computer, rilevare i programmi associati a tali porte ed esaminare il gruppo di profili Novell® AppArmor caricati. Unconfined quindi visualizza i rapporti di questi programmi insieme al profilo Novell AppArmor associato, oppure, se il programma non è limitato, genera il rapporto "nessuno".

[Note]Nota

Se si crea un nuovo profilo, è necessario riavviare il programma per il quale è stato definito il profilo per consentire a unconfined di rilevarne e visualizzarne lo stato.

Di seguito è riportato un rapporto di esempio di unconfined:

2325 /sbin/portmap not confined 
37021 /usr/sbin/sshd2 confined
   by '/usr/sbin/sshd3 (enforce)' 
4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 
4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 
4505 /usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)'
5274 /sbin/dhcpcd not confined 
5592 /usr/bin/ssh not confined 
7146 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'
  
1

La prima porzione è costituita da un numero, che corrisponde all'ID del processo (PID) del programma in ascolto.

2

La seconda porzione è una stringa che rappresenta il percorso assoluto del programma in ascolto.

3

La porzione finale indica l'eventuale profilo che limita il programma.

[Note]Nota

Unconfined richiede i privilegi root e non deve essere eseguito da una shell limitata da un profilo AppArmor.

Unconfined non fa distinzione tra un'interfaccia di rete e un'altra. Pertanto, visualizza i rapporti di tutti i processi non limitati, compresi quelli che potrebbero essere in ascolto di un'interfaccia LAN interna.

Le applicazioni client delle reti degli utenti individuate dipendono dalle preferenze specificate. Lo strumento unconfined rileva e mostra le porte di rete aperte solo dalle applicazioni client in esecuzione durante l'analisi. Questo è un problema perché i servizi di rete sono sempre in esecuzione mentre le applicazioni client in rete vengono eseguite solo quando lo desidera l'utente.

Anche l'applicazione dei profili Novell AppArmor alle applicazioni client di rete dell'utente dipende dalle preferenze specificate e AppArmor è stato progettato per i server anziché le workstation. Esercitarsi nella definizione di profili per le applicazioni client di rete dell'utente.

Per limitare nettamente le applicazioni desktop, il comando unconfined supporta l'opzione paranoid che mostra i rapporti di tutti i processi in esecuzione con i relativi profili AppArmor che potrebbero o non potrebbero essere associati a ciascun processo. L'utente unconfined può quindi stabilire se ciascuno di questi programmi necessita di un profilo AppArmor.

Se si dispone di profili nuovi o modificati, è possibile inviarli alla mailing list di apparmor-general@forge.novell.com insieme a uno use case sul comportamento dell'applicazione con questi profili. Il team di AppArmor esaminerà il lavoro e può inserirlo in openSUSE. Benché non sia possibile garantire che tutti i profili vengano inclusi in openSUSE, facciamo il possibile per includerne il maggior numero possibile per consentire agli utenti finali di apportare il loro contributo in merito ai profili di sicurezza disponibili in openSUSE.

2.2.1. Immunizzazione di processi Cron

Per individuare i programmi eseguiti da cron, è necessario controllare la configurazione cron locale. Sfortunatamente la configurazione cron è molto complessa, quindi i file da esaminare sono numerosi. I file riportati di seguito eseguono periodicamente processi cron.

/etc/crontab 
/etc/cron.d/* 
/etc/cron.daily/* 
/etc/cron.hourly/*
/etc/cron.monthly/* 
/etc/cron.weekly/*

È possibile modificare le attività dei processi cron mediante crontab -e e generare un elenco di queste attività con crontab -l. Per eseguire queste operazioni, è necessario collegarsi come utente root.

Dopo aver individuato i programmi eseguiti da cron, è possibile utilizzare l'Aggiunta guidata profili per crearne i profili. Vedere la Sezione 3.3.1, "Aggiunta guidata profili" (↑Guida all'amministrazione di Novell AppArmor 2.0).

2.2.2. Immunizzazione di applicazioni Web

Per individuare le applicazioni Web, è necessario esaminare la configurazione del server Web. Il server Web Apache è estremamente configurabile e le applicazioni Web possono essere archiviate in molte directory, in base alla configurazione locale. Per impostazione predefinita, in SUSE Linux le applicazioni Web vengono archiviate nella directory /srv/www/cgi-bin/. Ciascuna applicazione Web deve disporre di un profilo Novell AppArmor.

Una volta individuati questi programmi, è possibile utilizzare l'Aggiunta guidata profili AppArmor per crearne i profili. Vedere la Sezione 3.3.1, "Aggiunta guidata profili" (↑Guida all'amministrazione di Novell AppArmor 2.0).

2.2.2.1. Limitazione di programmi e sottoprocessi CGI nelle applicazioni Web

Poiché i programmi CGI vengono eseguiti dal server Web Apache, è necessario modificare il profilo di Apache usr.sbin.httpd2-prefork (per Apache2 su SUSE Linux) in modo da aggiungere le autorizzazioni in esecuzione per ciascuno di questi programmi. Ad esempio, aggiungere la riga /srv/www/cgi-bin/my_hit_counter.pl rpx per consentire ad Apache di eseguire lo script Perl my_hit_counter.pl e richiedere un profilo dedicato per my_hit_counter.pl. Se a my_hit_counter.pl non è associato alcun profilo dedicato, specificare la regola /srv/www/cgi-bin/my_hit_counter.pl rix per consentire a my_hit_counter.pl di ereditare il profilo usr.sbin.httpd2-prefork.

Per alcuni utenti può essere fastidioso dover specificare l'autorizzazione in esecuzione per ogni script CGI invocabile da Apache. Per questo motivo, l'amministratore può concedere un accesso controllato a gruppi di script CGI. Ad esempio, aggiungere la riga /srv/www/cgi-bin/*.{pl,py,pyc} rix per consentire ad Apache di eseguire tutti i file inclusi in /srv/www/cgi-bin/ che terminano con .pl (script Perl) e .py o .pyc (script Python). La porzione ix della regola consente agli script Python di ereditare il profilo Apache, operazione consigliata quando non si desidera scrivere profili individuali per ogni script Python.

[Note]Nota

Per utilizzare le funzioni del modulo di limitazione dei sottoprocessi (mod-apparmor) quando le applicazioni Web gestiscono i moduli Apache (mod_perl e mod_php), ricorrere alle funzioni di ChangeHat mentre si aggiunge profilo in YaST o dalla riga di comando. Per utilizzare la funzione di limitazione dei sottoprocessi, vedere la Sezione 5.1, "Apache ChangeHat" (↑Guida all'amministrazione di Novell AppArmor 2.0).

Per definire i profili per le applicazioni Web che utilizzano mod_perl e mod_php, è necessaria una procedura leggermente diversa. In questo caso, il "programma" è uno script interpretato direttamente dal modulo nel processo Apache, pertanto non avviene alcuna esecuzione. La versione Novell AppArmor di Apache, invece, chiama change_hat() assegnando a un sottoprofilo ("hat") il nome corrispondente all'URI richiesto.

[Note]Nota

Il nome assegnato allo script da eseguire può non corrispondere all'URI, in base al modo in cui è stato configurato Apache per la ricerca degli script dei moduli. Se Apache è stato configurato per inserire gli script in un altro percorso, quando Novell AppArmor rileva violazioni di accesso, in syslog vengono visualizzati nomi differenti. Vedere il Capitolo 4, Gestione di applicazioni con profili (↑Guida all'amministrazione di Novell AppArmor 2.0).

Per gli script mod_perl e mod_php, corrisponde al nome dello script Perl o della pagina PHP richiesta. Ad esempio, l'aggiunta di questo sottoprofilo consente alla pagina localtime.php di eseguire e accedere all'ora locale del sistema:

/usr/sbin/httpd2-prefork^/cgi-bin 
localtime.php { 
/etc/localtime                        r, 
/srv/www/cgi-bin/localtime.php        r, 
/usr/lib/locale/**                    r, 
}

Se non viene definito alcun sottoprofilo, la versione Novell AppArmor di Apache applica l'hat DEFAULT_URI. Questo sottoprofilo è generalmente sufficiente per la visualizzazione di una pagina Web HTML. L'hat DEFAULT_URI predefinito di Novell AppArmor è il seguente:

/usr/sbin/suexec2 ixr, 
/var/log/apache2/** rwl,
/home/*/public_html/**             r, 
/srv/www/htdocs/**                 r, 
/srv/www/icons/*.{gif,jpg,png}     r, 
/usr/share/apache2/**              r,
    

Se si desidera utilizzare un solo profilo Novell AppArmor per tutte le pagine Web e gli script CGI serviti da Apache, è consigliabile modificare il sottoprofilo DEFAULT_URI.

2.2.3. Immunizzazione di agenti di rete

Per individuare i daemon del server di rete che necessitano di un profilo, è necessario esaminare le porte aperte sul computer, osservare i programmi che rispondono a queste porte e definire i profili per il maggior numer possibile di questi programmi. Se si definiscono profili per tutti i programmi con porte di rete aperte, nessun aggressore potrà accedere al file system del computer senza passare attraverso una norma per profili Novell AppArmor.

Per individuare manualmente le porte di rete aperte sul server dall'esterno del computer, utilizzare un apposito programma di scansione quale nmap. Per individuarle direttamente dal computer, utilizzare netstat. Esaminare quindi il computer per stabilire quali programmi rispondono alle porte aperte rilevate.