Newsgroup: it.comp.lang.c
Titolo: [OT] Sandbox

Sto cercando di capire come si fa a progettare e a realizzare una sandbox!
Su internet non si trova molta documentazione in merito!
L'unica cosa che mi viene in mente ï¿œ un pattern tipo proxy ma 
sinceramente non capisco come possa isolare l'esecuzione di codice maligno.
Qualcuno ha qualche info in piï¿œ

 Qualcuno ha qualche info in più?
Sandbox è un termine un po' troppo generico... cosa devi "proteggere"
e in quale ambito?
Ciao!

 Qualcuno ha qualche info in piï¿œ?
se lavori in unix o derivati un bel chroot configurato come si deve puï¿œ 
essere una sandbox

 Ciao!
La mia � solo una curiosit�!
Mi chiedevo come Chrome faceva a creare una sandbox!
Perch� io creo sempre codice eseguibile e quindi in teoria posso sempre 
usare comandi che blocchino l'esecuzione stessa del SO.

 usare comandi che blocchino l'esecuzione stessa del SO.
Ni. Sulla maggior parte dei sistemi operativi che prevedono
multitasking e utenze, un programma che corre con privilegi utente non
ha (ad eccezione di bug nel sistema operativo) la possibilità di
interferire col funzionamento né del SO né di altri programmi, a meno
che questi non lo prevedano esplicitamente.
Ciao!

 che questi non lo prevedano esplicitamente.
Dove posso capire come un os limita i permessi a un processo?
Ci sono estensioni specifiche in hw sulle cpu o "in teoria" si possono 
implementare su tutte le cpu?

 usare comandi che blocchino l'esecuzione stessa del SO.
Beh mi auguro che tu non possa farlo invece, non se non amministri il
tuo sistema almeno, altrimenti la filosofia dei sistemi protetti degli
ultimi 10anni va a farsi benedire :-) Io direi di non aver fretta di
capire come funzionano grossi sistemi, parti dai mattoni, parti dalla
programmazione di sistema e dalle automatizzazioni via script. Linux �
terreno fertile in questo. File prezioso in italiano:
 
http://gapil.truelite.it/gapil.pdf
-- 
Non puoi insegnare qualcosa ad un uomo. You cannot teach a man anything.
Lo puoi solo aiutare   --  Galileo  Galilei  --   You can only help him
a scoprirla dentro di s�.                        discover it in himself.
Vincenzo Mercuri


Ti riformula la domanda cos�!
Premesso che programmo sotto linux da anni!
Se io scrivo il mio applicativo direttamente in asm/c e vado a fare 
scritture direttamente sulle aree di memoria che mi interessano chi me 
lo impedisce?

 lo impedisce?
Spero che sia solo un problema di incomprensione, altrimenti mi sa che
questi anni su linux ti son serviti a ben poco :-)
Su linux, puoi fare "quello che ti pare" solo se sei in kernel space;
se sei in user space hai accesso solo allo spazio relativo
all'applicativo, se hai i permessi di amministratore hai accesso a
tutto quello che kernel decide di esporre.
Ciao!
P.S. Se non se convinto del fatto che tu non possa "andare a fare
scritture direttamente sulle aree di memoria che m'interessano",
cercati un po' di info sulla memoria/allocatore virtuale.

 cercati un po' di info sulla memoria/allocatore virtuale.
Ok ... adesso ho capito...
Il problema � ben diverso da come lo ho presentato e alla fine abbiamo 
ragione tutti e due.
Il problema di base non � di SO ma bens� di hw.
Non si pu� avere sandbox without Virtual address! Le funzioni di 
indirizzamento virtuale sono presente ormai nella maggior parte delle 
cpu ma se si lavora in embedded si preferisce disattivarla per avere 
maggiore reattivit� di sistema.
Quindi alla fine il problema � diverso e non � di linguaggio tanto pi� 
di hw.

 di hw.
Tuttavia in sistemi che non offrono questo tipo di supporto hw ci
sono ambienti molto simili alle Virtual Machines, che permettono di
ottenere una sandbox, sia pur con i limiti imposti dall'architettura.
Ho trovato un articolo piuttosto tecnico sulla struttura del Google
Native Client (NaCl), una tecnologia Sandbox che permetterebbe ad
applicazioni web di eseguire codice nativo sull'host, aumentando
quindi le performance e comunque garantendo la sicurezza del browser.
http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/documentation/nacl_paper.pdf
Vedi anche:
http://googlecode.blogspot.com/2008/12/native-client-technology-for-running.html
http://www.chromium.org/nativeclient/native-client-documentation-index
http://code.google.com/p/nativeclient/wiki/Papers
Qui invece, un fantastico articolo sull'utilizzo della
memoria da parte dei processi:
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory


 di hw.
Ni (anche questa, non lo faccio a posta, è che mi piace molto
l'argomento).
Sono due concetti totalmente differenti - e di certo se si vuole
essere precisi non è possibile farlo in poche righe. Se ti interessa
la cosa non posso che consigliarti di leggere qualcosa su sistemi
operativi, ad esempio uno su tutti il sempreverde operating systems di
Tanenbaum (c'è anche il codice sorgente della prima versione del
kernel di Minix - datato ma piccolo e carino, e pieno di storia dei
sistemi operativi).
C'è anche da dire che, mentre da un lato la teoria è facile (quasi
banale anche se voluminosa), dall'altro la ricerca sia accademica sia
industriale su questo tipo di sicurezza è tutt'altro che ferma..
(nello specifico, pensavo a buffer-overflow/stack-smashing
protections).
Ciao!

 Ciao!
Ti ringrazio il libro me lo compro.
Non mi interessa essere esperto ma capire meglio le cose.
In realt� avevo letto spesso questi argomenti ma non li avevo mai uniti 
tutti assieme.
Se a qualcuno interessa ho trovati due link interessanti sulla protect mode:
http://members.tripod.com/protected_mode/alexfru/pmtuts.html
http://members.tripod.com/protected_mode/prashant/protmode.html
Ora ho buttato su una vm con dos e il vecchio bc e faccio 2 prove.


Ho dato giusto una scorsa veloce. DI sicuro c'è tanta quantità, per
cui come base è sicuramente buono. Di "moderno" invece non c'è nulla:
chipsets e mappature in memoria sono quelli di inizi anni '90 :-D
Ciao!

 Ciao!
Gli ho dato un'occhiata anche io e onestamente va bene cos�
Alla fine il mercato degli os � saturo! Per� sapere funzionano alcune 
cose � molto interessante (volevo scrivere utile ma penso che si possa 
lavorare senza sapere come abilitare una protect mode).

 lavorare senza sapere come abilitare una protect mode).
Certamente sì :) Come del resto può essere utile sapere che il
"protect mode" così come scritto su quel tipo di pagine non esiste
più / sta andando a sparire (per questo è necessario vedersi un po'
come funzionano le nuove CPU a 64 con funzioni di virtualizzazione).
<OT>Certe altre cose sono completamente fuorvianti, come tutta la
descrizione della gestione degli interrupt (che non tiene conto dei
sistemi multicore -adesso *ogni* CPU desktop è multicore, e anche
quando non lo erano le motherboards avevano comunque già implementato
il sistema- e delle apposite istruzioni delle CPU per le syscall).</
OT>
Sento spesso dire che saper "programmare un OS" è inutile perché il
mercato è saturo, ma secondo me è in (molta) parte falso. Al di là
della cultura generale, è pieno di informatici che programmano OS per
micro/board dedicate, OS realtime, sperimentali, etc., senza contare
un esercito incalcolabile di gente che scrive drivers o patch per
tutti quelli esistenti: di sicuro non è un lavoro di nicchia, anche se
non "mainstream".
Ciao!

 Ciao!
Bee... Sono in accordo e in disaccordo con te.
Da come parli sembra che tu abbia molta pi� esperienza di me, ma dalla 
mia esperienza non � proprio cos� come dici.
In passato ho lavorato con molteplici micro, in particolare AVR e PIC.
Un giorno sviluppai un micro os per avr con funzioni di multitascking e 
dei semafori base base. Il risultato non � stato malvagio ma analizzando 
il mote ore mi sono reso conto che una programmazione a interupt era pi� 
veloce.
La mia perplessit� sta nel fatto che il mercato si � diviso in 2 fasce e 
non c'� spazio per questo tipo di programmazione.
In pratica oggi c'� un mercato di fascia bassa (MCU a 8bit) che fanno il 
loro sporco lavoro ma spesso trovano dei limiti soprattutto se utilizzi 
per comunicare in network. A una cpu da 8bit non ha senso implementare 
virtual page e amici.
Ci dovrebbe essere una fascia media a 16 bit che ogni tanto si incarna 
in qualche processore ma che tuttora non mi pare sia mai riuscita a dare 
dei pargoli degne di nota.
Poi c'� la 32 bit che nelle sue varie incarnazioni � la fascia pi� 
gettonata se hai bisogno di prestazioni. Qui troviamo il mio amato ARM 
ma anche H8, MIPS, PowerPC, x86 .....
Ma in questa categoria regna sovrano Linux. Sono proprio i produttori a 
supportare tale SO. Ti ricordo che persino AVR x32 � compatibile linux.
In un mercato cos� al max scrivi il driver. Non ho esperienza sullo 
sviluppo di driver per linux ma ho visto che ci sono molte guide e fatte 
molto bene.
Sar� forse un errore mio di valutazione ma mi pare che le aziende .... 
qualunque siano hanno capito la capacit� e la bont� di quel kernel.
Persino nella mia tv sharp c'� dentro linux. Alla fine � un prodotto 
consolidato con un basso margine di rischio.
Se dovessi sviluppare qualcosa su architetture 32bit (ma anche 16bit) 
sarebbe un requisito minimo per il progetto. Alla fine un ARM di vecchia 
generazione te lo porti a casa per una pippata di tabacco.
Sicuramente non � l'unico punto da valutare ma mi pare il mercato si 
muova cos�. Poi se fanno un buon os a 16bit con stack di rete ben venga 
ma li vedo abbastanza di nicckia.
Cos� ... fiche non c'� un chippino che supporta tali funzioni di base , 
� economico, non � a 16-32 bit sar� dura vedere sorgere OS con virtual 
memory e private mode.
Ora io sono cresciuto come programmatore c/c++/asm ma tuttora mi trova a 
lottare con java e c#. E' il destino dell'evoluzione!

 chipsets e mappature in memoria sono quelli di inizi anni '90 :-D
Haha...in effetti hai ragione!
Di moderno c'� che � un sito ancora mantenuto e non ormai dead come
tanti. Ogni tanto vedo che il maintainer fa qualche aggiornamento.
A scopo didattico per� non � niente male :-)


 OT>
Ciao,
hai percaso in giro un qualche link/documento che riassume il
funzionamento delle "nuove" CPU a 64bit multicore (interrupt, funz. di
virtualizzazione,ecc.) un po' come ha fatto il sito per le x86?.
Mi interessa, ma non ho sta gran voglia di leggermi tutti il datasheet
dei Core 2 Duo (ad esempio).
Grazie Ciao Jack

 dei Core 2 Duo (ad esempio).
Personalmente non conosco link su materiale di questo tipo.
Potrei consigliarti questo libro, che sicuramente non � terribile come
i datasheets, ma � molto tecnico.
Ho studiato su edizioni precedenti, l'autore � straordinario:
http://www.amazon.com/Intel-Microprocessors-8th-Barry-Brey/dp/0135026458/ref=dp_ob_title_bk
Per le architetture moderne in generale questo � il testo migliore che
conosco:
http://www.amazon.com/Computer-Organization-Design-Fourth-Architecture/dp/0123744938/ref=ntt_at_ep_dpt_1


 [...]
Dimenticavo, un altro libro che ho avuto la fortuna di sfogliare
(contiene informazioni su architetture a 64bit, I/O address map,
serial I/O ecc...):
http://www.amazon.com/x86-PC-Assembly-Language-Interfacing/dp/0135026482/ref=sr_1_1?s=books&ie=UTF8&qid=1287485490&sr=1-1



Mi spiace, non ne ho veramente idea... Personalmente ho avuto la
(s)fortuna di studiarmi la prima volta interamente il datasheet di non
ricordo quale Pentium2; da allora quando ne prendo uno di un
processore nuovo è abbastanza indolore andare per differenze :-)
In generale i datasheet di questi mostri sono comunque molto ben
organizzati, per cui se cerchi una descrizione generale c'è ed è
concentrata all'inizio, mentre le informazioni specifiche sono
suddivise in capitoli ben separati.
Ciao!

 Computer-Organization-Design-Fourth
Più che architetture moderne, tratta uno specifico processore, il MIPS;
il testo e' assolutamente un must have, scritto non bene, di più, da
Patterson, Hennessy ... ho detto tutto!
C'è peraltro anche l'edizione Italiana della Zanichelli: "Sruttura e
progetto dei calcolatori" seconda edizione. Tradotto in maniera
eccelsa, ma Zanichelli pochi libri ha proposto, e alcuni dei
quali sono pietre miliari dell'Informatica, ricordo su tutti il testo
sui linguaggi di programmazione di Ravi Sethi!
Spezzerei a tal proposito una lancia in favore di "Computer
Organization" Fifth edition, in Italiano "Introduzione all'architettura
dei calcolatori" di Carl Hamacher, Zvonko Vranesic, Safwat Zaky; non e'
conosciuto dalla massa ma in alcune Universita' e' apprezzatissimo -
quelle serie, quelle colte, quelle che guardano avanti -, basti pensare
che e' il testo principale adottato dal Professor Daniel P.Bovet nei
suoi splendidi, magnifici, eccezionali corsi di Sistemi Operativi presso
l'Universita' Roma Tor Vergata ... ah quasi dimenticavo, se il nome vi
dice qualcosa non sbagliate, e' proprio il coautore di "Understanding
the Linux Kernel" :)
Il libro *insegna* - letteralmente - l'architettura dei calcolatrori e
l'assembly - x86 - in maniera impeccabile; nella mia personale
biblioteca lo considero, insieme al pocanzi citato testo di
Patterson (Berkeley University) and Hennessy (Stanford University), uno
dei migliori lavori che siano mai stati scritti sull'architettura dei
calcolatori, imho. Davvero di un altro pianeta.

 > Computer-Organization-Design-Fourth
[...]
Faccio una integrazione alla precedente e-mail, sempre rispondendo a
Vincenzo.
Dimenticavo, il testo sulle moderne architetture di Patterson, Hennessy
e' un altro, ovvero "Computer Architecture: A Quantitative Approach",
4th Edition - l'ultima edizione -, tradotto in Italiano da apogeo, in
questo caso pero' non sono in grado di dire alcunche' sulla edizione
Italiana poiche' ho preferito non prenderla, ma quella Inglese e'
assolutamente un must-have anch'esso, e' il testo adottato sia a
Stanford sia a Berkeley, come ho scritto nella mail precedente, dove
insegnano o hanno insegnato i due Professori, Hennessy mi pare che sia
stato anche preside peraltro.
Comunque, la differenza tra i due testi sta proprio nel titolo, il primo
e' un approccio incentrato sul software, per cui tratta a fondo
l'assembly - MIPS -, ma davvero a fondo; il secondo invece ha un
approccio quantitativo, nel senso che si concentra sui dettagli
implementativi, teorici naturalmente, delle moderne architetture.

 Patterson, Hennessy ... ho detto tutto!
Concordo! Non per il fatto che non tratti architetture moderne però!
Il MIPS devi vederlo come un mezzo per spiegare i concetti condivisi
dalle varie architetture, il fatto che vengano usati formati di istru-
zioni "solo a 32bit" non indica che non sia moderno. Certo che come
testo universitario è in "dovere" di spiegare la parte teorica comune
anche alle vecchie macchine. Il MIPS viene usato quanto basta per
esempio per dimostrare come si traducano istruzioni dal C a questo
"metalinguaggio" macchina. E' una scelta per poter parlare una lingua
franca senza specializzarsi e perdere di consistenza usando una CPU in
particolare. Ma problemi di "cache coherence", "snooping protocols", e
riscontro sui processori "AMD Opteron x4" e "Intel Nehalem", il multi-
threading "fine-grained", "coarse-gained", "SMT", l'architettura delle
GPU, mi sembrano argomenti moderni. Non saranno futuristici, ma è il
meglio che ci si puo aspettare da un libro pubblicato nel 2009.
-- 
Non puoi insegnare qualcosa ad un uomo. You cannot teach a man anything.
Lo puoi solo aiutare   --  Galileo  Galilei  --   You can only help him
a scoprirla dentro di sé.                        discover it in himself.
Vincenzo Mercuri


Si quel libro è straordinario, concordo, ma vale la pena di leggerlo
solo per chi abbia gia maturato i concetti dell'altro volume. L'analisi
quantitativa che fanno è quasi un riferimento per i progettisti di CPU,
ci sono dati che in minima, davvero minima, percentuale possono interes-
sare un programmatore. Di fronte a questi nomi non si puo' che guardare
e ammirare. A proposito del prof. Bovet (rispondo qui anzichè nel
follow-up precedente) devo dire che il suo libro sul kernel di Linux è
davvero la bibbia, libro apprezzatissimo in ogni angolo del mondo
(dove vi siano sviluppatori di OS). E tanto per vantarci un po', noi
italiani, se "Understanding the Linux Kernel" è il miglior testo per
comprendere a fondo il kernel, "Linux Device Driver" è il miglior testo
per lo studio dell'implementazione dei drivers su Linux. Uno dei due
autori è Alessandro Rubini. Quindi, in poche parole, nei testi più utili
al mondo su Linux c'è una forte rappresentanza italiana. YAY!
A parte gli scherzi, sappiamo farci valere, quando ci riusciamo...senza
nulla togliere ad altri libri (e autori) su questi argomenti, anzi, i
libri citati sono già per un livello medio-alto, ma l'immensa
bibliografia americana ovviamente non può che essere la più vasta su
qualsiasi argomento.
-- 
Non puoi insegnare qualcosa ad un uomo. You cannot teach a man anything.
Lo puoi solo aiutare   --  Galileo  Galilei  --   You can only help him
a scoprirla dentro di sé.                        discover it in himself.
Vincenzo Mercuri

 più vasta su qualsiasi argomento.
Sono assolutamente d'accordo con te, sottoscrivo ogni virgola.
Solo una nota a proposito di libri sul kernel linux, ritengo
che possa interessare; e' uscito da pochissimo "Linux Kernel
development" terza edizione, di Robert Love, lo sto leggendo e,
credetemi, e' scritto magistralmente.

 credetemi, e' scritto magistralmente.
Infatti sto rimandando da 2 settimane, ma devo assolutamente prenderlo! :-)


 sui linguaggi di programmazione di Ravi Sethi!
[...]
A tal proposito, la settimana scorsa e' uscita la terza edizione
Italiana, sempre edizioni Zanichelli[1], basata sulla quarta U.S.A.;
"Struttura e progetto dei calcolatori".
[1] 
http://www.zanichelli.it/universita/materie/informatica.html