• Non ci sono risultati.

Program Program SecuritySecurity

N/A
N/A
Protected

Academic year: 2021

Condividi "Program Program SecuritySecurity"

Copied!
44
0
0

Testo completo

(1)

12/01/21 1

Program Program

Security Security Program Program

Security Security

Seminario per il corso di “Sicurezza e Privacy”

Seminario per il corso di “Sicurezza e Privacy”

Prof. Stefano Bistarelli Prof. Stefano Bistarelli

Realizzato da: Berchicci Alessandro Realizzato da: Berchicci Alessandro Università degli studi “G. D’Annunzio”

Università degli studi “G. D’Annunzio”

Corso di Laurea Specialistica in Economia Informatica

Corso di Laurea Specialistica in Economia Informatica

(2)

Program Program Security

Security

Tratteremo il design e l’implementazione di un Tratteremo il design e l’implementazione di un system program e presenteremo i comuni errori system program e presenteremo i comuni errori di programmazione che creano problemi di

di programmazione che creano problemi di

sicurezza, offrendo suggerimenti per far fronte sicurezza, offrendo suggerimenti per far fronte a questi tipi di problema.

a questi tipi di problema.

Mostreremo lo sviluppo del programma dalla Mostreremo lo sviluppo del programma dalla ricerca all’implementazione.

ricerca all’implementazione.

(3)

12/01/21 3

Program Program Security

Security

In questa sezione consideriamo uno specifico In questa sezione consideriamo uno specifico

problema nello sviluppo dei sistemi di problema nello sviluppo dei sistemi di

infrastrutture network sul Drib.

infrastrutture network sul Drib.

Molti amministratori di sistema assumono diversi Molti amministratori di sistema assumono diversi

ruoli come ad esempio:

ruoli come ad esempio:

Bin Bin (Installatore di software) (Installatore di software)

Mail Mail (Manager della posta elettronica) (Manager della posta elettronica)

Root Root (Amministratore di sistema) (Amministratore di sistema)

Ognuno di questo ruoli è implementato come un account Ognuno di questo ruoli è implementato come un account

separato chiamato

separato chiamato Role Account Role Account

(4)

Sfortunatamente tutto questo Sfortunatamente tutto questo

solleva il problema della gestione solleva il problema della gestione

delle password … delle password …

Per risolvere questo problema il Per risolvere questo problema il

Drib implementa un programma che Drib implementa un programma che

verifica l’identità dell’utente.

verifica l’identità dell’utente.

Program Program Security

Security

(5)

12/01/21 5

Requirement 1

Requirement 1 : L’accesso al role account si : L’accesso al role account si basa sull’utente, location e sul tempo di

basa sull’utente, location e sul tempo di richiesta.

richiesta.

Requirement 2

Requirement 2 : Le impostazioni degli : Le impostazioni degli ambienti del role account devono

ambienti del role account devono

rimpiazzare le corrispondenti impostazioni rimpiazzare le corrispondenti impostazioni dell’ambiente degli utenti, ma il resto

dell’ambiente degli utenti, ma il resto dell’ambiente degli utenti deve essere dell’ambiente degli utenti deve essere preservato.

preservato.

Requirement 3

Requirement 3 : Solo l’utente root può : Solo l’utente root può alterare l’accesso alle informazioni per alterare l’accesso alle informazioni per accedere ad un role account.

accedere ad un role account.

Requirement 4

Requirement 4 : Questo meccanismo deve : Questo meccanismo deve

permettere sia l’accesso limitato, che quello permettere sia l’accesso limitato, che quello illimitato agli utenti.

illimitato agli utenti.

Requirement 5

Requirement 5 : L’accesso è concesso solo : L’accesso è concesso solo agli utenti autorizzati ad usare il role

agli utenti autorizzati ad usare il role account, ai root…

account, ai root…

Requirements

Requirements

(6)

Le minacce contro questo Le minacce contro questo

meccanismo rientrano in meccanismo rientrano in

classi distinte.

classi distinte.

Adesso elencheremo e Adesso elencheremo e

discuteremo i discuteremo i

Requirement che si Requirement che si

occupano di ciascuna occupano di ciascuna

minaccia minaccia

Threats Threats

(7)

12/01/21 7

Ci sono 4 tipi di minacce, che prevedono tentativi di Ci sono 4 tipi di minacce, che prevedono tentativi di

attacchi per accedere al role account . attacchi per accedere al role account .

Threat 1 Threat 1 : Un utente non autorizzato può avere : Un utente non autorizzato può avere accesso al role account come se fosse un utente accesso al role account come se fosse un utente

autorizzato.

autorizzato.

Threat 2 Threat 2 : Un utente autorizzato può usare un canale : Un utente autorizzato può usare un canale non sicuro per ottenere accesso al role account,

non sicuro per ottenere accesso al role account,

rivelando le sue informazioni ad untenti non autorizzati.

rivelando le sue informazioni ad untenti non autorizzati.

Threat 3 Threat 3 : Un utente non autorizzato può avere : Un utente non autorizzato può avere

accesso alle informazioni di controllo d’accesso per accesso alle informazioni di controllo d’accesso per

permettere l’accesso al role account.

permettere l’accesso al role account.

Threat 4 Threat 4 : Un utente autorizzato può è eseguire un : Un utente autorizzato può è eseguire un trojan horse dando ad un utente non autorizzato

trojan horse dando ad un utente non autorizzato l’accesso al role account.

l’accesso al role account.

Threats Threats (Gruppo 1)

(Gruppo 1)

(8)

I I Requirement 1 e 5 Requirement 1 e 5 risolvono il risolvono il Threat 1 Threat 1 , , restringendo la serie di utenti che possono restringendo la serie di utenti che possono

accedere al role account e proteggendo i dati accedere al role account e proteggendo i dati

del controllo d’accesso.

del controllo d’accesso.

Il Il Requirement 1 Requirement 1 combatte inoltre il combatte inoltre il Threat 2 Threat 2 , , restringendo le location delle quali l’utente può restringendo le location delle quali l’utente può

richiedere l’accesso.

richiedere l’accesso.

Nel Nel Requiremente 1 Requiremente 1 le informazioni di controllo le informazioni di controllo d’accesso possono essere cambiate. Anche il d’accesso possono essere cambiate. Anche il

Requirement 3

Requirement 3 ammette questo cambiamento, ammette questo cambiamento, ma lo restringe ad i soli utenti root, questo

ma lo restringe ad i soli utenti root, questo

Threats Threats (Gruppo 1)

(Gruppo 1)

(9)

12/01/21 9

Il Il Threat 4 Threat 4 è più complesso. è più complesso.

Il Il Requirement 5 Requirement 5 , che stabilisce che il percorso , che stabilisce che il percorso finale di ricerca può contenere solo directory o finale di ricerca può contenere solo directory o

programmi che gli utenti di fiducia possono programmi che gli utenti di fiducia possono

utilizzare, contrasta questa minaccia, in quanto utilizzare, contrasta questa minaccia, in quanto

il Threat non può piazzare il Trojan Horse.

il Threat non può piazzare il Trojan Horse.

Solo un utente autorizzato ad usare il role Solo un utente autorizzato ad usare il role

account può cambiare il percorso di ricerca, nel account può cambiare il percorso di ricerca, nel

caso succeda, il

caso succeda, il Reqiuirement 4 Reqiuirement 4 consente consente all’amministratore di restringere il set di all’amministratore di restringere il set di

comandi che l’utente può eseguire in quel ruolo.

comandi che l’utente può eseguire in quel ruolo.

Threats Threats (Gruppo 1)

(Gruppo 1)

(10)

Perché l’accesso sia permesso, le minacce Perché l’accesso sia permesso, le minacce

devono provenire dai cambiamenti dei permessi devono provenire dai cambiamenti dei permessi

d’accesso di un utente autorizzato oppure d’accesso di un utente autorizzato oppure

eseguendo comandi non autorizzati.

eseguendo comandi non autorizzati.

Threat 5

Threat 5 : Un utente autorizzato può ottenere : Un utente autorizzato può ottenere l’accesso al role account ed eseguire comandi l’accesso al role account ed eseguire comandi

non autorizzati.

non autorizzati.

Threat 6

Threat 6 : Un utente autorizzato può eseguire : Un utente autorizzato può eseguire

un comando, che esegue funzioni, di cui l’utente un comando, che esegue funzioni, di cui l’utente

non è autorizzato.

non è autorizzato.

Threats Threats (Gruppo 2)

(Gruppo 2)

(11)

12/01/21 11

Requirement 4

Requirement 4 fa fronte al fa fronte al Threat 5 Threat 5 . Se l’utente, . Se l’utente, accedendo al role account dovrebbe eseguire una accedendo al role account dovrebbe eseguire una

serie specifica di comandi, allora i controlli serie specifica di comandi, allora i controlli

d’accesso devono essere configurati in modo tale d’accesso devono essere configurati in modo tale

da restringere l’accesso del’utente per svolgere da restringere l’accesso del’utente per svolgere

solo quei comandi.

solo quei comandi.

Requirement 2 e 5

Requirement 2 e 5 fanno fronte al fanno fronte al Threat 6 Threat 6 , , prevenendo l’introduzione di Trojan.

prevenendo l’introduzione di Trojan.

Requirement 3

Requirement 3 fa fronte al fa fronte al Threat 7 Threat 7 . Perché tutti . Perché tutti gli utenti che hanno accesso al root siano fidati, gli utenti che hanno accesso al root siano fidati,

l’unica via per un utente autorizzato di cambiare l’unica via per un utente autorizzato di cambiare

le restrizioni ed ottenere l’accesso al role account le restrizioni ed ottenere l’accesso al role account è di impiantare una back door (che equivale ad un è di impiantare una back door (che equivale ad un

Trojan) o di modificare le informazioni del Trojan) o di modificare le informazioni del

controllo d’accesso.

controllo d’accesso.

Requirement 3

Requirement 3 fa si che gli utenti autorizzati non fa si che gli utenti autorizzati non possono cambiare le informazioni a meno che non possono cambiare le informazioni a meno che non

siano utenti fidati. In questo modo la minaccia siano utenti fidati. In questo modo la minaccia

viene respinta.

viene respinta.

Threats Threats (Gruppo 2)

(Gruppo 2)

(12)

Per creare questo programma costruiamo dei Per creare questo programma costruiamo dei moduli che si uniscono tra di loro in modo tale moduli che si uniscono tra di loro in modo tale da fornire servizi di sicurezza che soddisfano le da fornire servizi di sicurezza che soddisfano le richieste.

richieste.

Creiamo un framework generale per guidare lo Creiamo un framework generale per guidare lo sviluppo di ciascun intefaccia.

sviluppo di ciascun intefaccia.

Esaminiamo ogni requirement separatamente. Esaminiamo ogni requirement separatamente.

Progettiamo un componente per ogni Progettiamo un componente per ogni requirement.

requirement.

Design Design

(13)

12/01/21 13

L’utente può far funzionare il programma in due L’utente può far funzionare il programma in due

modi.

modi.

Richiedendo un accesso ristretto all’account. Richiedendo un accesso ristretto all’account.

Richiedendo che un programma specifico sia Richiedendo che un programma specifico sia avviato dal role account.

avviato dal role account.

Tutte le interfacce devono essere abilitate per Tutte le interfacce devono essere abilitate per

entrambi i programmi.

entrambi i programmi.

L’interfaccia più semplice è una linea di L’interfaccia più semplice è una linea di

comando.

comando.

Altre interfacce , come quelle grafiche, possono Altre interfacce , come quelle grafiche, possono

creare programmi più semplici da usare.

creare programmi più semplici da usare.

In ogni modo queste

In ogni modo queste Gui Gui saranno create in modo saranno create in modo tale costruire ed eseguire linee di comando del tale costruire ed eseguire linee di comando del

programma.

programma.

User User Interface

Interface

(14)

L’interfaccia scelta è : L’interfaccia scelta è :

role role role_account role_account [ command ] [ command ] Role_account

Role_account è il nome del role account è il nome del role account [command]

[command] è un comando opzionale per operare è un comando opzionale per operare sotto questo account.

sotto questo account.

User User Interface

Interface

(15)

12/01/21 15

1. Ottenere il role account, comando, la location e l’ora del 1. Ottenere il role account, comando, la location e l’ora del giorno.

giorno.

Se il comando è omesso le richieste dell’utente non hanno Se il comando è omesso le richieste dell’utente non hanno restrizioni nell’accesso del role account.

restrizioni nell’accesso del role account.

2. Verificare che all’utente sia permesso l’accesso al role 2. Verificare che all’utente sia permesso l’accesso al role account

account

alla location specificata alla location specificata

al tempo specificato al tempo specificato

per il comando specificato (senza restrizioni) per il comando specificato (senza restrizioni)

Se l’utente non ha li permesso, viene registrato il tentativo Se l’utente non ha li permesso, viene registrato il tentativo ed esce.

ed esce.

3. 3. Ottenere l’informazione del gruppo e dell’utente per il Ottenere l’informazione del gruppo e dell’utente per il role account e cambiare i privilegi del processo con quelli role account e cambiare i privilegi del processo con quelli del role account.

del role account.

4. Se l’utente ha richiesto che uno specifico comando sia 4. Se l’utente ha richiesto che uno specifico comando sia avviato, sovrappone il processo figlio con un interprete dei avviato, sovrappone il processo figlio con un interprete dei comandi che genera il programma.

comandi che genera il programma.

5. Se l’utente ha richiesto un accesso ristretto, ricopre il 5. Se l’utente ha richiesto un accesso ristretto, ricopre il processo figlio con un interprete dei comandi.

processo figlio con un interprete dei comandi.

High-Level Design (Algoritmo High-Level Design (Algoritmo di Base)

di Base)

(16)

Questo algoritmo rivela un’importante Questo algoritmo rivela un’importante

ambiguità nei requirement 1 e 4.

ambiguità nei requirement 1 e 4.

Requirement 4

Requirement 4 può essere chiarita … può essere chiarita … Requirement 2.1

Requirement 2.1 : Il meccanismo deve : Il meccanismo deve

permettere sia l’accesso ristretto che illimitato permettere sia l’accesso ristretto che illimitato

al role account. L’accesso ristretto dipende al role account. L’accesso ristretto dipende

dall’utente, dal ruolo, dalla location e dal dall’utente, dal ruolo, dalla location e dal

momento di accesso momento di accesso

High-Level Design (Algoritmo High-Level Design (Algoritmo di Base)

di Base)

(17)

12/01/21 17

L’utente registrando l’accesso, la location, l’ora L’utente registrando l’accesso, la location, l’ora

del giorno e il tipo d’accesso, controlla del giorno e il tipo d’accesso, controlla

l’accesso al role account.

l’accesso al role account.

Il modulo di verifica dell’accesso presenterà Il modulo di verifica dell’accesso presenterà

una valutazione che indicherà sucesso o una valutazione che indicherà sucesso o

fallimento.

fallimento.

Consideriamo due aspetti del design di questo Consideriamo due aspetti del design di questo

modulo.

modulo.

L’interfaccia

L’interfaccia controlla come l’informazione sia controlla come l’informazione sia passata dal suo visitatore al modulo e come il passata dal suo visitatore al modulo e come il

modulo restituisce il successo o il fallimento.

modulo restituisce il successo o il fallimento.

La struttura interna

La struttura interna del modulo include come del modulo include come esso deve fronteggiare gli errori

esso deve fronteggiare gli errori

Access to Roles and Access to Roles and Commands

Commands

(18)

12/01/21 18

Seguendo la pratica di nascondere Seguendo la pratica di nascondere

l’informazione tra i moduli, minimizziamo il l’informazione tra i moduli, minimizziamo il

numero di informazioni per passare al modulo di numero di informazioni per passare al modulo di

verifica d’accesso.

verifica d’accesso.

Il modulo richiede le informazioni d’accesso Il modulo richiede le informazioni d’accesso

dell’utente, il ruolo, lo location, il momento ed il dell’utente, il ruolo, lo location, il momento ed il

comando.

comando.

La valutazione finale deve indicare successo o La valutazione finale deve indicare successo o

fallimento.

fallimento.

Come sono state ottenute queste informazioni?

Come sono state ottenute queste informazioni?

Il comando deve provenire dal caller che Il comando deve provenire dal caller che

fornisce l’interfaccia per la lavorazione del fornisce l’interfaccia per la lavorazione del

comando.

comando.

Il caller può anche passare un’altra Il caller può anche passare un’altra

Interface

Interface

(19)

12/01/21 19

Vantaggio Vantaggio

Un differente programma potrebbe usare questo Un differente programma potrebbe usare questo

modulo per determinare se l’accesso c’è stato modulo per determinare se l’accesso c’è stato

oppure no, se può avvenire oppure no, in oppure no, se può avvenire oppure no, in

qualche punto passato o futuro del tempo o da qualche punto passato o futuro del tempo o da

qualche altra postazione.

qualche altra postazione.

Svantaggio Svantaggio

Una carenza di portabilità, perché l’interfaccia è Una carenza di portabilità, perché l’interfaccia è

legata ad una particolare interpretazione dei legata ad una particolare interpretazione dei

comandi.

comandi.

Interface

Interface

(20)

In questo design che abbiamo scelto, il modulo In questo design che abbiamo scelto, il modulo determina tutti i dati, suggerendo la seguente determina tutti i dati, suggerendo la seguente

interfaccia.

interfaccia.

Boolean accessok (role rname, command cmd) Boolean accessok (role rname, command cmd)

rname

rname è il nome del ruolo richiesto è il nome del ruolo richiesto

cmd cmd è il comando da eseguire per la richiesta è il comando da eseguire per la richiesta

Interface

Interface

(21)

12/01/21 21

Questo modulo ha tre punti : Questo modulo ha tre punti :

La prima parte La prima parte raccoglie i dati per il quale raccoglie i dati per il quale l’accesso è basato.

l’accesso è basato.

La seconda parte La seconda parte recupera le informazioni del recupera le informazioni del controllo d’accesso.

controllo d’accesso.

La terza parte La terza parte determina se, oppure no, i dati determina se, oppure no, i dati e la richiesta alle informazioni del controllo

e la richiesta alle informazioni del controllo d’accesso è concesso.

d’accesso è concesso.

La location consiste in due componenti : La location consiste in due componenti :

Il punto di entrata (terminale o connessione Il punto di entrata (terminale o connessione network) e l’host remoto dal quale l’utente ha network) e l’host remoto dal quale l’utente ha

accesso al sistema locale.

accesso al sistema locale.

Il punto d’entrata è conesso direttamente al Il punto d’entrata è conesso direttamente al sistema.

sistema.

Internals

Internals

(22)

Parte I Parte I

Ottenere l’ID utente, ora del giorno, punto Ottenere l’ID utente, ora del giorno, punto

d’entrata e host remoto.

d’entrata e host remoto.

Successivamente il modulo deve accedere Successivamente il modulo deve accedere

all’informazione del controllo d’accesso che risiede all’informazione del controllo d’accesso che risiede

in un file. Esso contiene una sequenza di record in un file. Esso contiene una sequenza di record

della seguente forma : della seguente forma :

role account role account

user name user name

locations from which role account can be locations from which role account can be accessed

accessed

times when the role account can be accessed times when the role account can be accessed

command and arguments command and arguments

Internals

Internals

(23)

12/01/21 23

Parte II Parte II

Ottenere un descrittore per le informazione del Ottenere un descrittore per le informazione del

controllo d’accesso. Il programmatore userà il controllo d’accesso. Il programmatore userà il

descrittore per leggere il controllo d’accesso dei descrittore per leggere il controllo d’accesso dei

record, per avere accesso alle informazioni.

record, per avere accesso alle informazioni.

Infine il programma viaggia attraverso le Infine il programma viaggia attraverso le

informazioni del controllo d’accesso.

informazioni del controllo d’accesso.

Parte III Parte III

Muoversi attraverso i record fino a quando non ci Muoversi attraverso i record fino a quando non ci sarà una corrispondenza di dati almeno di uno, o sarà una corrispondenza di dati almeno di uno, o

quando non ci saranno più record.

quando non ci saranno più record.

Nel primo caso ci sarà un successo, nel secondo un Nel primo caso ci sarà un successo, nel secondo un

fallimento.

fallimento.

Internals

Internals

(24)

Gli amministratori del sistema locale devono Gli amministratori del sistema locale devono

controlare l’accesso degli account privilegiati.

controlare l’accesso degli account privilegiati.

Per la manutenzione di questi semplici Per la manutenzione di questi semplici

informazioni, gli amministratori informazioni, gli amministratori

immagazzinano le informazioni di controllo immagazzinano le informazioni di controllo

d’accesso in un file.

d’accesso in un file.

In seguito dovranno solo editare il file per In seguito dovranno solo editare il file per cambiare l’abilità ad accedere all’account cambiare l’abilità ad accedere all’account

privilegiato.

privilegiato.

Il file contiene una serie di record, ognuno dei Il file contiene una serie di record, ognuno dei

Storage of the Access Storage of the Access Control Data

Control Data

(25)

12/01/21 25

Vengono permessi i seguenti host name speciali, Vengono permessi i seguenti host name speciali,

ognuno dei quali è illegale ognuno dei quali è illegale

*any* (a safe matching any system) *any* (a safe matching any system)

*local* (matches the local host name) *local* (matches the local host name)

Nel BNF (Backus-Naur-Form), il linguaggio per Nel BNF (Backus-Naur-Form), il linguaggio per

esprimere la location è esprimere la location è

location ::=‘(‘location’)’|’not location| location ::=‘(‘location’)’|’not location|

location’or’location|basic location’or’location|basic

basic ::=‘*any*’|’*local*’|’.’domain|host basic ::=‘*any*’|’*local*’|’.’domain|host Domain e Host sono i nomi del dominio e Domain e Host sono i nomi del dominio e

del’host.

del’host.

Le stringhe delle singole righe sono letterali.

Le stringhe delle singole righe sono letterali.

Le parentesi sono operatori di raggruppamento.

Le parentesi sono operatori di raggruppamento.

Il “not” completa la location associata e “or”

Il “not” completa la location associata e “or”

segue entrambe le location.

segue entrambe le location.

Storage of the Access Storage of the Access Control Data

Control Data

(26)

Esempio Esempio

Un utente ha il permesso di assumere un ruolo Un utente ha il permesso di assumere un ruolo

solo quando accede nel sistema locale.

solo quando accede nel sistema locale.

Il sistema “control.fixit.com” e il dominio Il sistema “control.fixit.com” e il dominio

“watchu.edu”

“watchu.edu”

L’entrata appropriata sarebbe L’entrata appropriata sarebbe

*location* | control.fixed.com | .watchu.edu *location* | control.fixed.com | .watchu.edu Ignorando i tempi, come indichiamo quando Ignorando i tempi, come indichiamo quando

l’utente può accedere al role account?

l’utente può accedere al role account?

Storage of the Access Storage of the Access Control Data

Control Data

(27)

12/01/21 27

Nella forma BNF, il linguaggio per esprimere l’ora Nella forma BNF, il linguaggio per esprimere l’ora è questo

è questo

time::=‘(’time’)’|’not’ time|time ‘or’ time|time time| time::=‘(’time’)’|’not’ time|time ‘or’ time|time time|

time’-’time!basic time’-’time!basic

basic::= day_of_year day_of_week time_of_day|*any* basic::= day_of_year day_of_week time_of_day|*any*

day_of_year::=month [day] [‘,’year]|nmonth’/’[day’/’] day_of_year::=month [day] [‘,’year]|nmonth’/’[day’/’]

year / empty year / empty

day_of_week::=‘Sunday’|..|’weekend’| ’weekday’|empty day_of_week::=‘Sunday’|..|’weekend’| ’weekday’|empty

time_of_day::= hour [‘,’min] [‘,’sec] [‘AM’|’PM’]| time_of_day::= hour [‘,’min] [‘,’sec] [‘AM’|’PM’]|

special/empty special/empty

special::= ‘noon’|’morning’|’afternoon’|’evening’ special::= ‘noon’|’morning’|’afternoon’|’evening’

empty::= ‘’ empty::= ‘’

Se basic è vuoto, viene considerato come accesso Se basic è vuoto, viene considerato come accesso non permesso.

non permesso.

Storage of the Access Storage of the Access Control Data

Control Data

(28)

Esempio Esempio

Un utente ha il permesso di assumere un ruolo dalle ore 9 Un utente ha il permesso di assumere un ruolo dalle ore 9

a.m. ed alle 5 p.m., dal lunedi al giovedi.

a.m. ed alle 5 p.m., dal lunedi al giovedi.

L’entrata appropriata sarebbe L’entrata appropriata sarebbe

Monday-Thursday 9 a.m.-5p.m. Monday-Thursday 9 a.m.-5p.m.

Che differisce nel dire Che differisce nel dire

Monday 9 a.m.-Thursday 5 p.m. Monday 9 a.m.-Thursday 5 p.m.

Perché la seconda permette di accedere lunedi alle 10 p.m.

Perché la seconda permette di accedere lunedi alle 10 p.m.

mentre la prima no.

mentre la prima no.

Infine il campo dell’utente all’interno dei record ha una Infine il campo dell’utente all’interno dei record ha una

struttura simile struttura simile

*any* (corrisponde ad ogni utente) *any* (corrisponde ad ogni utente)

Nel BNF il linguaggio che può essere usato per esprimere la Nel BNF il linguaggio che può essere usato per esprimere la

serie di utenti che possono accedere al ruolo è serie di utenti che possono accedere al ruolo è

userlist::= ‘(‘userlist’)’|’not’ userlist|userlist ‘,’ userlist::= ‘(‘userlist’)’|’not’ userlist|userlist ‘,’

Storage of the Access Storage of the Access Control Data

Control Data

(29)

12/01/21 29

Esempio Esempio

Charls ha il permesso di far funzionare il Charls ha il permesso di far funzionare il

comando

comando install install quando accede al ruolo quando accede al ruolo bin bin

/bin/install * /bin/install *

Può anche copiare il file “log” dalla directory di Può anche copiare il file “log” dalla directory di

lavoro, alla directory /var/install.

lavoro, alla directory /var/install.

/bin/cp log /var/install/log /bin/cp log /var/install/log

Infine può far funzionare il comando

Infine può far funzionare il comando id id come come garanzia che sta lavorando come

garanzia che sta lavorando come bin. bin.

/user/bin/id /user/bin/id

L’utente deve digitare il comando come dato nel L’utente deve digitare il comando come dato nel

file di controllo d’accesso.

file di controllo d’accesso.

Storage of the Access Storage of the Access Control Data

Control Data

(30)

Questa sezione si focalizza sul modulo di Questa sezione si focalizza sul modulo di

controllo d’accesso del programma.

controllo d’accesso del programma.

Miglioriamo L’High-Level design, fino a produrre Miglioriamo L’High-Level design, fino a produrre

una routine in un linguaggio di una routine in un linguaggio di

programmazione.

programmazione.

Refinement and Refinement and Implementation

Implementation

(31)

12/01/21 31

Prima di tutto implementiamo il modulo nello Prima di tutto implementiamo il modulo nello

pseudocodice.

pseudocodice.

Questo richiede due decisioni Questo richiede due decisioni

Il linguaggio sarà implementato con una Il linguaggio sarà implementato con una

struttura a blocchi, piuttosto che funzionale struttura a blocchi, piuttosto che funzionale

come Schema o ML.

come Schema o ML.

L’ambiente con il quale il programma L’ambiente con il quale il programma

funzionerà, sarà UNIX-FreeBSD oppure linux funzionerà, sarà UNIX-FreeBSD oppure linux

First-Level First-Level Refinement

Refinement

(32)

La struttura base per la sicurezza del modulo è La struttura base per la sicurezza del modulo è

boolean accessok(role rname,command cmd);

boolean accessok(role rname,command cmd);

start <- false start <- false

user <- obtain user ID user <- obtain user ID

timeday <- obtain time of day timeday <- obtain time of day

entry <- obtain entry point (terminal line, remote host) entry <- obtain entry point (terminal line, remote host)

open access control file open access control file

repeat repeat

rec <- get next record from file; EOF if none rec <- get next record from file; EOF if none

if rec ≠ EOF then if rec ≠ EOF then

start <- match(rec, rname, cmd, user, timeday, start <- match(rec, rname, cmd, user, timeday, entry)

entry)

until rec = EOF or start = true

First-Level First-Level Refinement

Refinement

(33)

12/01/21 33

Ora ci focalizziamo sulla mappatura dello pseudocodice Ora ci focalizziamo sulla mappatura dello pseudocodice su un particolare linguaggio e sistema.

su un particolare linguaggio e sistema.

Scegliamo un sistema Unix, quindi la scelta del Scegliamo un sistema Unix, quindi la scelta del

linguaggio C fornisce una buona interfaccia per il sistema linguaggio C fornisce una buona interfaccia per il sistema che andiamo ad utilizzare.

che andiamo ad utilizzare.

Nei sistemi Unix, i ruoli sono rappresentati come normali Nei sistemi Unix, i ruoli sono rappresentati come normali account utente.

account utente.

L’account root è davvero un role account.

L’account root è davvero un role account.

Ad esempio ciascun account utente ha due distinte Ad esempio ciascun account utente ha due distinte rappresentazioni di identità

rappresentazioni di identità Un tipo di utente interno

Un tipo di utente interno uid_t uid_t Una stringa per il nome

Una stringa per il nome

Second-Level Second-Level Refinement

Refinement

(34)

Per il nostro scopo, stabiliremo che il visitatore Per il nostro scopo, stabiliremo che il visitatore dell’accessok fornisca la rappresentazione uid_t dell’accessok fornisca la rappresentazione uid_t

dell’identità del ruolo.

dell’identità del ruolo.

Due ragioni rendono preferibile questa rappresentazione Due ragioni rendono preferibile questa rappresentazione I° : L’obiettivo del sistema non è in grado di indirizzare il I° : L’obiettivo del sistema non è in grado di indirizzare il

privilegio in termini di nome perché dentro il nucleo, il privilegio in termini di nome perché dentro il nucleo, il processo d’identità è sempre rappresentato dall’uid_t.

processo d’identità è sempre rappresentato dall’uid_t.

II° : I ruoli del file di controllo d’accesso possono essere II° : I ruoli del file di controllo d’accesso possono essere

rapresentati da numeri o da nomi. Il routine, per leggere i rapresentati da numeri o da nomi. Il routine, per leggere i record del file, consentirà i ruoli in uid_t per assicurare la record del file, consentirà i ruoli in uid_t per assicurare la

coerenza della rappresentazione. Inoltre permette alla coerenza della rappresentazione. Inoltre permette alla routine l’immissione di dati di verifica dei record come routine l’immissione di dati di verifica dei record come

Second-Level Second-Level Refinement

Refinement

(35)

12/01/21 35

Ciò ci conduce ad una decisione … Ciò ci conduce ad una decisione …

Rappresentare tutti gli utenti ed i ruoli ID come integer interni.

Rappresentare tutti gli utenti ed i ruoli ID come integer interni.

Poi consideriamo il comando, che consiste in un nome di Poi consideriamo il comando, che consiste in un nome di

programma seguito da una sequenza di parole che sono gli programma seguito da una sequenza di parole che sono gli

argomenti delle linee di comando, del comando.

argomenti delle linee di comando, del comando.

Mettendo tutto insieme, il risultato dell’interfaccia è : Mettendo tutto insieme, il risultato dell’interfaccia è :

int accessok(uid_t rname, char *cmd[]) int accessok(uid_t rname, char *cmd[]) Successivamente otteniamo l’ID dell’utente.

Successivamente otteniamo l’ID dell’utente.

I processi hanno molte identità, ma le identità chiave sono I processi hanno molte identità, ma le identità chiave sono

real UID che identificano gli utenti che stanno facendo real UID che identificano gli utenti che stanno facendo

funzionare il processo.

funzionare il processo.

effective UID che idendificano i privilegi con i quali il processo effective UID che idendificano i privilegi con i quali il processo

funziona.

funziona.

Solo il real UID identifica l’utente che sta facendo funzionare il Solo il real UID identifica l’utente che sta facendo funzionare il

programma, quindi per ottenere l’ID utente programma, quindi per ottenere l’ID utente

userid getuid(); userid getuid();

Second-Level Second-Level Refinement

Refinement

(36)

Per ottenere l’ora del giorno corrente Per ottenere l’ora del giorno corrente

timeday = time(NULL); timeday = time(NULL);

Infine dobbiamo ottenere la location, anche se non è Infine dobbiamo ottenere la location, anche se non è semplice, dunque lo rimandiamo il più tardi possibile semplice, dunque lo rimandiamo il più tardi possibile

l’incapsulamento della funzione.

l’incapsulamento della funzione.

Questo inoltre localizza ogni cambiamento ch edovrebbe Questo inoltre localizza ogni cambiamento ch edovrebbe

portarci a spostare questo programma in un sistema portarci a spostare questo programma in un sistema

differente (metodi usati in linux possono differire da quelli differente (metodi usati in linux possono differire da quelli

usati in FreeBSD) usati in FreeBSD)

entry = getlocation(); entry = getlocation();

if ((fp = fopen(acfile, “r”)) == NULL { if ((fp = fopen(acfile, “r”)) == NULL {

logerror(errno, acfile); logerror(errno, acfile);

return (start); return (start);

} }

Notiamo prima la verifica dell’errore e le informazioni della Notiamo prima la verifica dell’errore e le informazioni della

log su un errore.

log su un errore.

Second-Level Second-Level Refinement

Refinement

(37)

12/01/21 37

La trasformazione del controllo d’acceso dei record è La trasformazione del controllo d’acceso dei record è

questo questo

do{ do{

acrec = getnextacrec(fp); acrec = getnextacrec(fp);

if (acrec != NULL) if (acrec != NULL)

stat = match(acrec, rname, cmd, userid, stat = match(acrec, rname, cmd, userid, timeday, entry);

timeday, entry);

} until (acrec == NULL || stat ==1); } until (acrec == NULL || stat ==1);

Qui leggiamo nel record e verifichiamo per vedere se Qui leggiamo nel record e verifichiamo per vedere se

coincide con i permessi.

coincide con i permessi.

Questo giro continua fino a quando questo permesso è Questo giro continua fino a quando questo permesso è

stato dato oppure tutti i record sono stati controllati stato dato oppure tutti i record sono stati controllati

L’esatto formato dei record interni non è ancora specificato.

L’esatto formato dei record interni non è ancora specificato.

La routine conclusiva chiude il controllo d’accesso dei file.

La routine conclusiva chiude il controllo d’accesso dei file.

(void) fclose(fp); (void) fclose(fp);

return (stat); return (stat);

Second-Level Second-Level Refinement

Refinement

(38)

Ci sono tre funzioni : Ci sono tre funzioni :

Per ottenere la posizione. Per ottenere la posizione.

Per ottenere un record di controllo Per ottenere un record di controllo d’accesso.

d’accesso.

Per verificare il record di controllo Per verificare il record di controllo d’accesso contro le informazioni del d’accesso contro le informazioni del

controllo d’accesso.

controllo d’accesso.

Function

Function

(39)

12/01/21 39

Unix e Linux scrivono il nome dell’account Unix e Linux scrivono il nome dell’account

dell’utente, il nome del terminale nel quale la dell’utente, il nome del terminale nel quale la registrazione viene effettuata, l’ora e il nome registrazione viene effettuata, l’ora e il nome

dell’host remoto dal file UTMP.

dell’host remoto dal file UTMP.

Per determinare il record UTMP associato con il Per determinare il record UTMP associato con il

processo, una routine potrebbe ottenere il nome processo, una routine potrebbe ottenere il nome

del file associato, aprire il file UTMP, e del file associato, aprire il file UTMP, e

scansionare il record per trovare quello con il scansionare il record per trovare quello con il

corrispondente nome del terminale.

corrispondente nome del terminale.

Questa impostazione funziona nella maggior Questa impostazione funziona nella maggior

parte dei sistemi operativi Unix e Linux.

parte dei sistemi operativi Unix e Linux.

Obtaining Obtaining Location

Location

(40)

Questo ci sottrae a due problemi di sicurezza Questo ci sottrae a due problemi di sicurezza 1. 1. Se ogni processo può alterare il file UMTP, il Se ogni processo può alterare il file UMTP, il suo contenuto non può essere sicuro.

suo contenuto non può essere sicuro.

2. 2. Un processo potrebbe non avere un terminale Un processo potrebbe non avere un terminale associato. Se il record UTMP contiene solo le

associato. Se il record UTMP contiene solo le

impostazioni descritte, l’uente potrebbe essere impostazioni descritte, l’uente potrebbe essere registrato in molteplici terminali.

registrato in molteplici terminali.

Nel primo caso decidiamo nel design che se i dati Nel primo caso decidiamo nel design che se i dati del file UTMP non sono affidabili poichè ogni

del file UTMP non sono affidabili poichè ogni

processo può ottenere questo file, noi reinviamo processo può ottenere questo file, noi reinviamo una location senza significato.

Obtaining Obtaining Location

Location

(41)

12/01/21 41

Il formato del record nei file di controllo Il formato del record nei file di controllo d’accesso incide sia nella lettura che sul d’accesso incide sia nella lettura che sul confronto con il processo di informazione.

confronto con il processo di informazione.

Il nostro approccio è quello di considerare prima Il nostro approccio è quello di considerare prima la corrispondenza della routine.

la corrispondenza della routine.

Devono essere verificati quattro elementi:

Devono essere verificati quattro elementi:

Nome utente Nome utente

Location Location

Il tempo Il tempo

Il comando Il comando

The Access Control The Access Control Record

Record

(42)

Il nome utente è rappresentato come numero Il nome utente è rappresentato come numero

intero.

intero.

Per la location, la strategia da adottare è Per la location, la strategia da adottare è

quella di rappresentare il campo utente, quella di rappresentare il campo utente,

come una stringa letta direttamente dal file.

come una stringa letta direttamente dal file.

La routine corrispondente analizza le linee e La routine corrispondente analizza le linee e

utilizza una propria valutazione per utilizza una propria valutazione per

verificare se l’ID utente è o meno elencato.

verificare se l’ID utente è o meno elencato.

Il tempo nel controllo d’accesso dei record è Il tempo nel controllo d’accesso dei record è

The Access Control The Access Control Record

Record

(43)

12/01/21 43

Questo significa che questo processo per leggere il record Questo significa che questo processo per leggere il record

può semplicemente caricare il record come una sequenza può semplicemente caricare il record come una sequenza

di stringhe e lasciare che il match routine lo interpreti.

di stringhe e lasciare che il match routine lo interpreti.

Questo produce la seguente struttura Questo produce la seguente struttura

record record

role rname role rname

string userlist string userlist

string location string location

strig timeofday strig timeofday

string command[] string command[]

integer numcomands integer numcomands end record; end record;

Dove il campo dei comandi è una serie di stringhe . Dove il campo dei comandi è una serie di stringhe .

Ogni comando e argomento è una stringa, numcommands Ogni comando e argomento è una stringa, numcommands

contiene il numero dei comandi.

contiene il numero dei comandi.

The Access Control The Access Control Record

Record

(44)

Program Program

Security Security

Fine Fine

Program Program

Security Security

Fine Fine

Seminario per il corso di “Sicurezza e Privacy”

Seminario per il corso di “Sicurezza e Privacy”

Università degli studi “G. D’Annunzio”

Università degli studi “G. D’Annunzio”

Corso di Laurea Specialistica in Economia Informatica

Corso di Laurea Specialistica in Economia Informatica

Riferimenti

Documenti correlati

• Per evitare incendi e danni alla spina o alla presa, accertarsi che il cavo di alimentazione sia correttamente collegato al televisore e alla presa a parete.. • Non inserire

Per caricare la galleria sarà prima necessario predisporre una cartella contenente tutte le immagini sul proprio computer e zipparla e poi cliccare su

SANITARIE LICEO SCIENTIFICO opzione SCIENZE APPLICATE ISTITUTO TECNICO SUPERIORE PER LE NUOVE TECNOLOGIE DELLA VITA.. Nota informativa per Accesso Google Workspace for

In questa sezione vi è una griglia all’interno della quale viene riportato, per ciascun anno, l’importo del dividendo incassato sulle azioni sindacate di Azimut Holding in

Quando la funzione é abilitata, l'utente dopo aver digitato il codice non potrà eseguire l'inserimento diretto (digitazione del tasto # per l'inserimento contemporaneo di tutti

nell'edificio dopo la costruzione di quest'ultimo per iniziativa di parte dei condomini, non rientra nella proprietà comune di tutti i condomini, ma appartiene in proprietà a quelli

Il secondo momento della lotta cattolica arrivò all’inizio degli anni Novanta, quando alcuni pensatori cattolici, Michael Novak e padre Richard John Neuhaus, proposero il

- Drive: cartelle in cui visualizzare files condivisi o salvare i propri files, caricati dal proprio computer o generati mediante le applicazioni della GSuite (per la