[Python] SignedImporter [was: Criptazione dei file sorgenti per evitare la manomissione]

lex mlist lexmlist a gmail.com
Mar 16 Nov 2010 19:26:23 CET


Il giorno 16 novembre 2010 13:35, Manlio Perillo
<manlio.perillo a gmail.com>ha scritto:

> Il problema però è capire i casi di uso.
> In quale casi hai bisogno di verificare l'integrità di tutti i moduli
> Python utilizzati?


> L'unico caso di uso che mi viene in mente è quando l'interprete python
> viene eseguito con privilegi particolare (ad esempio root, oppure
> accesso a porte IP).
>

Penso che sia necessario, oltre ai casi da te citati, nel caso in cui ad
esempio Python venga utilizzato come scripting di un altro motore (poniamo
l'esempio di un motore grafico, o di una applicazione tanto complessa da
rendere necessaria tale scelta). In quel caso, qualora si possa voler
preferire un linguaggio già pronto (anzichè fare un nuovo interprete che
magari supporti i file binari per proteggere anche la logica), si rende
necessario il poter operare in tutta tranquillità in una sandbox, e quindi
controllare che non vi siano manomissioni a uno qualunque dei moduli
utilizzati (altrimenti si comprometterebbe la stabilità e il flusso di
lavoro del programma).
Per fare un esempio mi vengono in mente solo applicativi di una certa
stazza, che probabilmente, visto il loro valore, non si appoggerebbero mai
ad una soluzione che ne esponga la logica.

Boh, adesso non saprei precisamente il perchè di una scelta, magari come
dici tu è solo perchè da root potrebbe compromettere l'intero sistema, ma se
è un software destinato ad uso professionale penso che anche se non venga
eseguito da root dovrebbe garantire sempre la corretta esecuzione, pensa se
un utente modifica i file python, magari per sbaglio, e poi lavora sul
software (poniamo che sia di disegno tecnico), clicca su 'Salva' e si rende
conto che il menù File non funziona perchè la relativa funzione python è
stata compromessa (e non è rara la scelta di un linguaggio di scripting per
gestire l'interfaccia grafica, anzi). Invece controllando, all'avvio,
eventualmente segnala che il programma necessita di essere reinstallato e
boh.

Se ho sbagliato qualcosa, correggetemi pure.
Probabilmente ci sono altre motivazioni più valide, ma che non mi vengono in
mente.

>
> Al momento non sono sicuro della differenza tra i due, dovrei leggere il
> codice.
>

Io prevedo di farlo stasera, se ho un po' di tranquillità, nel caso scopro
la differenza la posto qui subito.

> > [...]
> > Unico problema trovato in fase di compilazione del sorgente è che il
> > modulo hashlib crea un errore cercando di importare _md5, anche se,
> > onestamente, non capisco perchè in fase di compilazione tenti di
> > eseguire il modulo signedimporter (che importa hashlib).
> >
>
> Parli della compilazione di python?
>

Si, dopo aver modificato la '_PyImportHooks_Init' e compilando ottengo
quell'errore. Se uso la stessa gestione che usano per zipimport ovvero, in
caso di errore passaci sù, funziona giustamente. Però poi anche a runtime ad
ogni avvio quella sarebbe la gestione dell'errore. Probabilmente avviene
perchè hashlib non ha ancora accesso a tutte le sue dipendenze (magari
devono essere compilate).
Per provare ho lasciato passare l'errore, la soluzione definitiva sarebbe o
fare il modulo in C (come lo è zipimport) o magari trovare un modo per
aggirare il problema di hashlib.


>
> Ciao  Manlio
>

Ciao e buona serata.
PS. a questo punto, se dovesse rendersi necessario il fare troppe modifiche
all'interprete per via di vari problemi nei moduli, si potrebbe pensare ad
includere un nuovo file .c all'interprete e rendere il controllo parte
integrante dell'interprete stesso, ovviamente se dovesse essere necessario
farlo su *tutti* i moduli, permettendo però, di inserire in qualche modo il
dizionario con le chiavi. Però mi suona di cosa che necessita la modifica
dell'inizializzazione di CPython, perchè dovrebbe poter accedere ad un dato
runtime (il dizionario), prima dell'inizializzazione e quindi
dell'esecuzione effettiva del programma: forse la soluzione non è fattibile.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20101116/ec325d10/attachment-0001.htm 


Maggiori informazioni sulla lista Python