[Python-es] Seguridad en Python

234 views
Skip to first unread message

Dhannier Molina

unread,
Oct 29, 2012, 3:29:43 PM10/29/12
to pyth...@python.org
Hola!! Alguien me puede ayudar, tengo dudas en relacion a la seguridad en python.

Hay alguna forma de impedir que el Bytecode generado al correr un programa en python sea decompilado? Es decir, que un intruso pueda generar el archivo .PY a partir del .PYC.

Necesito blindar lo mejor posible mi sistema, que herramientas podría usar?. Saludos!! 

Ricardo Cárdenes

unread,
Oct 29, 2012, 8:41:12 PM10/29/12
to La lista de python en castellano
El mejor consejo en este caso sería... no uses Python. Si el usuario
tiene acceso al bytecode, se puede descompilar.

2012/10/29 Dhannier Molina <dhan...@gmail.com>:
> _______________________________________________
> Python-es mailing list
> Pyth...@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Asdrúbal Iván Suárez Rivera

unread,
Oct 29, 2012, 8:46:52 PM10/29/12
to La lista de python en castellano


El día 29 de octubre de 2012 20:11, Ricardo Cárdenes <ricardo....@gmail.com> escribió:
> El mejor consejo en este caso sería... no uses Python. Si el usuario
> tiene acceso al bytecode, se puede descompilar.
>

Quizás esto sirva

http://stackoverflow.com/questions/3694413/distributing-closed-source-python-program

De todas maneras, en mi opinión personal, python NO ES el mejor lenguaje para aplicaciones que no sean open source.


> 2012/10/29 Dhannier Molina <dhan...@gmail.com>:
>> Hola!! Alguien me puede ayudar, tengo dudas en relacion a la seguridad en
>> python.
>>
>> Hay alguna forma de impedir que el Bytecode generado al correr un programa
>> en python sea decompilado? Es decir, que un intruso pueda generar el archivo
>> .PY a partir del .PYC.
>>
>> Necesito blindar lo mejor posible mi sistema, que herramientas podría usar?.
>> Saludos!!
>>
>> _______________________________________________
>> Python-es mailing list
>> Pyth...@python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
> _______________________________________________
> Python-es mailing list
> Pyth...@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/



--
Asdrúbal Iván Suárez Rivera

Si quieres aprender, enseña. Marco Tulio Cicerón.

¿Tienes twitter?
Sígueme: @asdrubalivan

Ricardo Cárdenes

unread,
Oct 29, 2012, 8:53:30 PM10/29/12
to La lista de python en castellano
Como le dicen, lo único que se puede conseguir con eso es dificultar
el acceso al bytecode. Pero nada más. Una vez con acceso al código ya
se puede descompilar. Su única opción realista es usar ofuscadores,
pero eso dificulta la depuración de código en producción, entre otras
cosas.

2012/10/30 Asdrúbal Iván Suárez Rivera <asdrubal.ivan...@gmail.com>:

Alexandro Colorado

unread,
Oct 29, 2012, 8:56:14 PM10/29/12
to La lista de python en castellano


2012/10/29 Asdrúbal Iván Suárez Rivera <asdrubal.ivan...@gmail.com>



El día 29 de octubre de 2012 20:11, Ricardo Cárdenes <ricardo....@gmail.com> escribió:

> El mejor consejo en este caso sería... no uses Python. Si el usuario
> tiene acceso al bytecode, se puede descompilar.
>

Quizás esto sirva

http://stackoverflow.com/questions/3694413/distributing-closed-source-python-program

De todas maneras, en mi opinión personal, python NO ES el mejor lenguaje para aplicaciones que no sean open source.

Se me hace completamente desvirtuado lo que esta persona entiende por seguridad. El acceso al codigo fuente no es una falla de seguridad. Muchos productos son abiertos como MoinMoin donde tu version de MoinMoin tendra el mismo codigo que el del repositorio de moinmoin, esto NO lo vuelve vulnerable.

Primero debes entender cual es el estado de la inseguidad para aplicaciones web, como ataques DoS, Scripting de sitios cruzados etc. Y a partir de ahi generar capaz de seguridad.
 



--
Alexandro Colorado
PPMC Apache OpenOffice
http://es.openoffice.org


Alfonso de la Guarda

unread,
Oct 29, 2012, 8:52:28 PM10/29/12
to La lista de python en castellano
Hola,

Lo que sí podrías hacer es combinar Python con C (cython) y las partes
no críticas ofuscarlas......

O llevar Python a C++ con Nuitka http://www.nuitka.net/ o shedskin
http://code.google.com/p/shedskin/


Saludos,

--------------------------------
Alfonso de la Guarda
Twitter: @alfonsodg
Redes sociales: alfonsodg
Telef. 991935157
1024D/B23B24A4
5469 ED92 75A3 BBDB FD6B 58A5 54A1 851D B23B 24A4


2012/10/29 Dhannier Molina <dhan...@gmail.com>:

Alexandro Colorado

unread,
Oct 29, 2012, 8:59:23 PM10/29/12
to La lista de python en castellano


2012/10/29 Dhannier Molina <dhan...@gmail.com>

Hola!! Alguien me puede ayudar, tengo dudas en relacion a la seguridad en python.

Hay alguna forma de impedir que el Bytecode generado al correr un programa en python sea decompilado? Es decir, que un intruso pueda generar el archivo .PY a partir del .PYC.

Necesito blindar lo mejor posible mi sistema, que herramientas podría usar?. Saludos!! 

Creo que tienes conceptos errados de la seguridad. Te recomiendo que te heches un clavado en lo que se conoce como seguridad o quizas mejor dicho inseguridad.

Cuando entiendas el riesgo (o falta de este) que se tiene por generar un Py a partir de un Pyc, podras entender como mejor proceder para asegurar un sistema.

 

_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Mario Lacunza

unread,
Oct 29, 2012, 9:01:36 PM10/29/12
to pyth...@python.org
Hola,

uhm... puedes utilizar tecnicas de ofuscacion principalmente.... es decir aun si leen tu codigo no se entenderia nada.. algo como

Source code:

def ObtenerImpuesto(valor1):
    val = valor1 * 0,18
    return val

es diferente a Source code ofuscado:

def sGhyshe4ksu(sh2f):
    dsy = sh2f * 0,18
    return dsy

como veras aqui solo se q estas multiplicando y si eres mosca sabras q puede ser porcentaje, si a esto le agregas la creacion de funciones falsas, llamadas repetitivas, loops, etc etc etc la hace aun mas dificil....

Ahora la idea es: si vas a crear un soft con 1000 lineas de codigo mejor create un EXE o similar para Linux/Mac, si tu soft va a atener 20,000 lineas de codigo les va a costar mas crakearlo, leerlas y entenderlas q pagarte :) depende mas del modelo de negocio q escojas.

Saludos / Best regards

Mario Lacunza
Email:: mlac...@gmail.com
Personal Website:: http://www.lacunza.biz/
OpenOffice.org Perú:: http://openoffice-peru.com/
Hosting:: http://mlv-host.com/
Mascotas Perdidas:: http://mascotas-perdidas.com/
Google Talk / Y! messenger / Skype: mlacunzav
MSN: mlac...@hotmail.com
El 29/10/12 19:46, Asdrúbal Iván Suárez Rivera escribió:

lasizoillo

unread,
Oct 30, 2012, 4:26:22 AM10/30/12
to La lista de python en castellano
El día 29 de octubre de 2012 20:29, Dhannier Molina
<dhan...@gmail.com> escribió:
En mis tiempos de crackercillo solia usar algún que otro
disassembler[1] para obtener el código fuente ensamblador y cackear
los programas. En una primera pasada anulaba las protecciones
anti-debugging y luego con el debugger era más fácil encontrar las
partes del código "interesante". Puede que el programador que
comprimia los ejecutables, ponía anti-debuggers en el código, ...
creyese que hacía más seguro el código. Pero hasta un adolescente con
granos como yo sabía que si lo puede comprender una máquina, también
lo puede comprender un humano.

La única manera de "asegurar" tu código es no compartirlo. Y esta es
una condición necesaria, pero no suficiente, tienes que asegurar que
nadie pueda acceder a el a pesar de que no lo compartas.

Solo se me ocurren dos opciones aquí:
- O dejas de asociar seguridad a la disponibilidad del código fuente.
- O implementas la lógica que quieras "asegurar" en servidores que
ejecutan el código mediante procedimientos RPC y securizas los
servidores.

Para el resto de cosas, lo único que vas a hacer es perder más tiempo
tu del que vas a hacer perder a quien realmente quiera hacer
ingeniería inversa de tu código. Un código limpio es más fácil de
auditar, securizar y depurar que un código con herramientas de
ofuscación, compresión, anti-debuging que dificultan la depuración y
en ocasiones introducen bugs en la ejecución.

[1] http://en.wikipedia.org/wiki/Disassembler

Un saludo,

Javi

Eduard Diaz

unread,
Oct 30, 2012, 6:54:35 AM10/30/12
to La lista de python en castellano
Hola

Creo que el problema está en el concepto de seguridad, tal y como te
han contestado anteriormente.

El bitecode y python no es una buena elección para ese tipo de
requisitos (primera vulnerabilidad)

Como mucho podrias utilizar pirex[1] o directamente C para proteger
según que partes

Los egipcios hicieron tumbas cubriéndolas con toneladas de piedras en
formas de pirámides, en desiertos casi inaccesibles y enterrando a
todos los que conocían la existencia de las tumbas y aún así fueron
saqueadas! Ese modelo de seguridad hace miles de años que se ha
demostrado que no funciona.


[1] http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/

un saludo

Carlos Zuniga

unread,
Oct 30, 2012, 10:30:25 AM10/30/12
to La lista de python en castellano
2012/10/29 Dhannier Molina <dhan...@gmail.com>:
Creo que es mucho más seguro escribir un programa con la expectativa
de que cualquiera podría tener acceso al código fuente en cualquier
momento. La seguridad por obscuridad solo es aparente.

Si lo que quieres es evitar que puedan modificar el código, eso es un
simple problema de permisos.

Saludos
--
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.

Dhannier Molina

unread,
Oct 30, 2012, 10:42:06 AM10/30/12
to La lista de python en castellano
Hola!! A que te refieres con un simple problema de permisos? Estoy evaluando varias alternativas como Cython, PyPy, Pyrex y Ofuscación para proteger lo mejor posible mi sistema hecho en Python. 

Y evaluar en que lenguaje de programación hacer un modulo de seguridad a nivel de usuario y perfiles. (Python u otro lenguaje que pueda ligarlo a Python).

Saludos!!

Alexandro Colorado

unread,
Oct 30, 2012, 10:45:42 AM10/30/12
to La lista de python en castellano
On 10/30/12, Dhannier Molina <dhan...@gmail.com> wrote:
> Hola!! A que te refieres con un simple problema de permisos? Estoy
> evaluando varias alternativas como Cython, PyPy, Pyrex y Ofuscación para
> proteger lo mejor posible mi sistema hecho en Python.
>
> Y evaluar en que lenguaje de programación hacer un modulo de seguridad a
> nivel de usuario y perfiles. (Python u otro lenguaje que pueda ligarlo a
> Python).

A que estas perdiendo el tiempo tratando de ofuscar el codigo. Esa
tecnica NO funciona. La seguridad por obscuridad (que nadie lo vea)
esta comprobadisimo que no sirve. Windows puede tener las fuentes
altamente protegidas, sin embargo es lo mas inseguro que existe.
--
Alexandro Colorado
PPMC Apache OpenOffice
http://es.openoffice.org

Carlos Zuniga

unread,
Oct 30, 2012, 11:10:10 AM10/30/12
to La lista de python en castellano
2012/10/30 Dhannier Molina <dhan...@gmail.com>:
> Hola!! A que te refieres con un simple problema de permisos?

A que si no quieres que el usuario modifique el programa, quítale los
permisos de escritura:

chmod -R -w directorio/del/programa

El usuario solo debería ser capaz de leer y ejecutar el programa, nada más.

> Estoy evaluando
> varias alternativas como Cython, PyPy, Pyrex y Ofuscación para proteger lo
> mejor posible mi sistema hecho en Python.

Creo que la pregunta es, protegerlo de qué? si es un sistema web y
quieres protegerlo de ataques de inyección de sql, xss, etc; ofuscarlo
no te ayudará, mejor mira herramientas de tests de penetración como
w3af.

Si es un sistema de escritorio y quieres evitar que el usuario
modifique el programa, los permisos son más que suficiente.

Si quieres evitar que un intruso pueda modificar tu programa en un
servidor, entonces tienes que proteger al servidor.

> Y evaluar en que lenguaje de programación hacer un modulo de seguridad a
> nivel de usuario y perfiles. (Python u otro lenguaje que pueda ligarlo a
> Python).
>

Eso ya queda dentro de tu aplicación, es mejor escribir los permisos
de manera que aún asumiendo que el usuario pueda leer el código
fuente, esto no represente un problema de seguridad en tu aplicación.

Alexandro Colorado

unread,
Oct 30, 2012, 11:20:56 AM10/30/12
to La lista de python en castellano
On 10/30/12, Carlos Zuniga <carlo...@gmail.com> wrote:
> 2012/10/30 Dhannier Molina <dhan...@gmail.com>:
>> Hola!! A que te refieres con un simple problema de permisos?
>
> A que si no quieres que el usuario modifique el programa, quítale los
> permisos de escritura:
>
> chmod -R -w directorio/del/programa
>
> El usuario solo debería ser capaz de leer y ejecutar el programa, nada más.

Asi es, es importante saber que es lo que el quiere hacer. Si es una
respuesta tan vaga como "no quiero que me hackeen". Entonces creo que
debera hacer mas trabajo de investigacion. Otra cosa es que tenga
inteligencia "hardcoded" o programada en duro dentro del codigo.

>
>> Estoy evaluando
>> varias alternativas como Cython, PyPy, Pyrex y Ofuscación para proteger
>> lo
>> mejor posible mi sistema hecho en Python.

La implementacion de Python, no es muy relevante, aunque si, en Jython
podrias tener el codigo dentro de un war o jar y hacerlo 'portable'
desde la JVM. El entendido es que el codigo en si sea seguro, no
ofuscarlo.

>
> Creo que la pregunta es, protegerlo de qué? si es un sistema web y
> quieres protegerlo de ataques de inyección de sql, xss, etc; ofuscarlo
> no te ayudará, mejor mira herramientas de tests de penetración como
> w3af.
>
> Si es un sistema de escritorio y quieres evitar que el usuario
> modifique el programa, los permisos son más que suficiente.
>
> Si quieres evitar que un intruso pueda modificar tu programa en un
> servidor, entonces tienes que proteger al servidor.
>
>> Y evaluar en que lenguaje de programación hacer un modulo de seguridad a
>> nivel de usuario y perfiles. (Python u otro lenguaje que pueda ligarlo a
>> Python).
>>
>
> Eso ya queda dentro de tu aplicación, es mejor escribir los permisos
> de manera que aún asumiendo que el usuario pueda leer el código
> fuente, esto no represente un problema de seguridad en tu aplicación.
>
> Saludos
> --
> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
> de leer manuales.
> _______________________________________________
> Python-es mailing list
> Pyth...@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


--
Alexandro Colorado
PPMC Apache OpenOffice
http://es.openoffice.org

Diego Uribe Gamez

unread,
Oct 30, 2012, 11:41:17 AM10/30/12
to La lista de python en castellano
Super interesante el tema, yo creo que la mejor seguridad que puedes hacer es a nivel de maquina, permisos de usuario y de mas, podrías también usar multimaquinas para hacer mas profundo la entrada al programa, como un servidor centos con maquinas virtuales redhat que entre si tengan toda tu app por separado  con claves separadas y todo lo demás en seguridad de redes, esto es lo mas complicado que he logrado para que no entren al codigo.

pero si el programa se ejecuta en local y el usuario puede leerlo, lo que podrías hacer es hacer que el programa consulte un servidor externo con el código esencial y que nadie mas que tu puedan entrar a verlo o leerlo.

esa seria mi solución.
--
 Diego Alonso Uribe Gamez

Desarrollador web

Twitter: @DiegoUG

Google+: http://gplus.to/diegoug




Dhannier Molina

unread,
Oct 30, 2012, 12:13:34 PM10/30/12
to La lista de python en castellano
Ok. Pero seria buena opción hacer el modulo de seguridad en un lenguaje compilado, por ejemplo como c++? Es decir, se quiere usar este modulo en diferentes partes del sistema para validar los accesos a los datos dependiendo de los perfiles de usuario. Evitar que el sistema reciba ataques al modulo de seguridad y que puedan modificar los permisos de accesos y demás... Seria buena opción combinar Python con C++... 

Disculpen las molestias...

Saludos!!

Daπid

unread,
Oct 30, 2012, 1:10:19 PM10/30/12
to La lista de python en castellano
¿Qué es lo que quieres proteger, exactamente?

Si es el acceso a unos datos con una estructura cifrada usando una
lógica secreta (en un archivo C++ compilado), y Python para lo demás,
no es muy efectivo. Aunque no tenga ni idea de cómo narices funciona
tu código, puedo ver cómo lo llamas desde Python, y hacer yo lo mismo
sobre archivos vacíos y viendo la salida, así hasta que aprenda cómo
funciona.

Y esto, considerando tu código como una caja negra que no intento
abrir. Si además le acoplo un debugger u otras cosas, puedo saber
mucho más de lo que está pasando ahí.

2012/10/30 Dhannier Molina <dhan...@gmail.com>:

Dhannier Molina

unread,
Oct 30, 2012, 2:18:40 PM10/30/12
to La lista de python en castellano

Proteger el sistema (permisos de accesos y datos) haciendo un modulo de seguridad (Ademas de la seguridad del servidor). El sistema esta desarrollado en python pero veo como mejor opción desarrollar el modulo en un lenguaje de programación compilado como C++...

Saludos!!

lopz

unread,
Nov 3, 2012, 5:39:29 PM11/3/12
to La lista de python en castellano
Creo que deberías preguntarte algunas cosas:
- Realmente vale la pena perder tanto tiempo en querer "evitar" que terceras personas puedan ver tu código fuente?
- Tu software es tan exitoso que sabes que puedes hacer fortuna con el y así tener la intención de evitar que lo usen ¿gratis? (crackeado)
- Sabes si las personas que utilizarán tu software tienen la capacidad de usar siquiera un debugger o dissasembler?

Sincesaramente si las personas que usarán tu software tienen esos conocimientos, yo digo básico de usar alguno de éstos softwares para ing inversa (en este caso) creo que estás en graves problemas, porque comparado con tus conocimientos para "asegurar" tu aplicación... ya te digo, te llevan ventaja :)

Creo que si no quieres mostrar código, etc, deberías montarte un webservice y otra app que consuma de ella, pero lo mismo, que pasa si aprender como se comunica, etc, igual podrán hacer su propio cliente, todo depende contra que personas te enfrentes.

Implementar cualquier sistema ante ing inversa, sólo dificultará un poco las cosas, llegando a tener los mismos resultados.

En pocas palabras, depende del interés que tengan en obtener tu software sin pagar,  tardarán mucho menos en reventarlo :)

saludos!



El 30 de octubre de 2012 14:18, Dhannier Molina <dhan...@gmail.com> escribió:

Proteger el sistema (permisos de accesos y datos) haciendo un modulo de seguridad (Ademas de la seguridad del servidor). El sistema esta desarrollado en python pero veo como mejor opción desarrollar el modulo en un lenguaje de programación compilado como C++...

Saludos!!

_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




--
lopz es libre, usa --> GNU/linux gentoo

+--[RSA 2048]--+
|  ..o.o=+       |
|   o =o*.+      |
|  . . *oO .      |
|     .EBoo      |
|      o.S         |
+--[lopz.org]--+

Hiko hitokiri

unread,
Nov 5, 2012, 1:40:07 AM11/5/12
to La lista de python en castellano
la cosa es asi parece que lo que tu no entiendes es como funcionan los permisos en los sistemas operativos ni en los accesos a datos . tu  puedes asignar grupos y usuarios específicos con permisos específicos que van desde verlos a escribir y eliminar dichos archivos. no veo para que quieres meter ese tipo de seguridad en el sistema  si ya lo hace el SO . y lo de los datos se encarga el server o el router depende. y lo de esconder el codigo como ya te dijeron todos no sirve de nada ... entonces la moraleja es usa bien los permisos de el SO y de el server  y con eso evitaras que te modifiquen el codigo tan facil por que nada es impenetrable .... 
hiko_hitokiri no pidas que el mundo te trate de una manera cuando tu no le das el mismo trato a los demás

Oswaldo

unread,
Nov 5, 2012, 5:55:27 AM11/5/12
to pyth...@python.org
Parece que todo tu problema viene porque las contraseñas de acceso al
servidor están directamente en el código del programa. Si es así
quitalas de ahí y utiliza otra técnica.


--
Oswaldo
Reply all
Reply to author
Forward
0 new messages