[Python] [ANN] secimport

Manlio Perillo manlio.perillo a gmail.com
Mar 16 Nov 2010 13:45:16 CET


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 16/11/2010 11:13, Marco Giusti ha scritto:
> On Mon, Nov 15, 2010 at 07:56:54PM +0100, Manlio Perillo wrote:
> [...]
>> secimport ? un import hook che permette di verificare ciascun modulo
>> importato usando una database di "firme" di ciascun modulo.
>> Una "firma" ? semplicemente un hash (personalizzabile, tramite il modulo
>> hashib.new) del file dove il modulo si trova.
>
> [...]
> 
> qualche pensiero sparso a proposito.
> 
> prima di tutto il modulo stesso deve essere importato e prima di essere
> importato non c'? nessun controllo sul modulo stesso, ergo basta
> modificare il modulo `secimport`.
> 

Infatti per maggiore sicurezza l'hook può essere implementato in C.
Si parlava infatti del caso in cui una applicazione vuole embedare
l'interprete Python.

> quando fai il controllo del file `__init__.py` si deve controllare anche
> i relativi `.pyc` e `.pyo`, infatti basta modificare a piacere il file
> `__init__.py`, copiare il bytecode nella giusta posizione, il file
> `__init__.py` rimane quello originale ma viene modificato l'mtime.
> `secimport` controlla il file `__init__.py` ma l'importer python
> caricher? il bytecode modificato.
> 

Questo è un punto su cui non sono sicuro.
Innanzitutto, comunque, secimport *non* controlla __init__.py ma il
modulo __init__.
    fp, pathname, descr = imp.find_module('__init__', [self.pathname])


> di questo punto non sono sicuro, ma non vengono effettuati controlli
> sulle estenzioni C, l'unico controllo ?

No, quelle non sono estensioni C; sono moduli *builtin*, linkati
**staticamente** nell'interprete cpython.

> [...]

> il file con gli hash dei vari moduli ? facilmente modificabile rendendo
> vano tutto il lavoro fatto.
> 

Il database delle firme va conservato in un posto sicuro.
Ad esempio nel codice sorgente (in C) dell'applicazione che embedda
cpython ed utilizzando opportune tecniche di offuscamento.

In alternativa si può utilizzare un algoritmo a chiavi pubbliche, nel
qual caso si deve proteggere solo la chiave.


> inoltre non ? da scartare il fatto che per ogni piccola modifica bisogna
> ricalcolare il relativo hash, questo rende la distribuzione pi? tediosa.
> 

Dipende dai modi d'uso di un progetto che vuole utilizzare secimport.

> come è stato detto bisogna fare un ragionamento di costi/benefici e lo
> stesso farà chi cerca di modificare il tuo programma.

Sicuramente.

> se il programma
> non interessa a nessuno tutto questo lavoro è inutile, senza considerare
> che tutto questo ha un costo che non porta nessun beneficio all'utente
> finale (il programma non sarà più efficiente/economico/robusto/ecc.)
> 


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkzifNwACgkQscQJ24LbaUTMywCffi9xB46geXt6BdkB11yQW2Z1
nfEAoI47+nbSLHZI5DiLnecOTjY4jH4b
=7cgp
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python