• Publicidad

Encriptar password en script

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Encriptar password en script

Notapor newperlero » 2011-09-16 03:24 @183

Hola,

Tengo que realizar un script que se conectará contra una BBDD, y claro, tengo que pasar credenciales: usuario y password.

Ambos datos están en el script, y no me gustaría que alguien viera el código y supiera cuál es la clave de acceso.

Había pensado en encriptar la password con TripleDes, base64 o similares, pero cualquiera que se instale el módulo y posea la clave encriptada será capaz de desencriptarla.

Estoy un poco perdido en esto, no sé si me podreis orientar.

¿Hay alguna forma de que la password esté en el fichero encriptada de alguna forma que solo sea desencriptable por la propia aplicación y no por un usuario?

O, ¿cómo se suele actuar en estos casos? :?

Gracias, ¡saludos!
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318

Publicidad

Re: Encriptar password en script

Notapor explorer » 2011-09-16 08:04 @378

Bueno, hay muchas formas de hacerlo, pero todo depende de los conocimientos de los curiosos... si son muy curiosos, entonces no hay protección que valga...

Un ejemplo. Supongamos que tenemos este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3.  
  4. my $usuario  = '[email protected]';
  5. my $password = 'misecretword';
  6.  
  7. acceso($usuario, $password);
  8.  
  9. sub acceso {
  10.     print "Acceso de [$usuario]/[$password]\n";
  11.     print "Listo!\n";
  12. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

No tiene nada de especial. Si lo ejecutamos, funciona, sacando los valores a pantalla, pero podría hacer cualquier otra cosa.

Ahora, hacemos una copia de este programa y lo guardamos en un sitio seguro (esto es importante).

Después, añadimos una línea más, para que quede así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Acme::Pony;
  3.  
  4. my $usuario  = '[email protected]';
  5. my $password = 'misecretword';
  6.  
  7. acceso($usuario, $password);
  8.  
  9. sub acceso {
  10.     print "Acceso de [$usuario]/[$password]\n";
  11.     print "Listo!\n";
  12. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es decir, solo añadimos la línea use Acme::Pony;, un módulo que, previamente, hemos instalado.

Ejecutamos una vez el programa.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perl ./kkk.pl
explorer@casa:~/Documentos/Desarrollo>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Aparentemente no ha pasado nada, pero si miramos por dentro, el programa queda "mágicamente", transformado en algo como esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Acme::Pony;
                         b                                                          
                      UfFybu                                                        
                      fFyBUfF                                                        
                     YbUffYBUFfy                                                    
                    buffYbuffYbuFf                                                  
                   yBuFfYBUfFYbuFFYbU                                                
                  fFyBUFfYbuffYBufFybU                                              
                 FFyBufFyBUfFYBUfFYbuffy                                            
                 bUffybuffYbuFfYBUFfybuf                                            
                fyBufFYBufFybUffYBUFfYBUF                                            
               fYBuFfYBuFFyBufFyBUfFYbuFF                                            
              YbUfFYbUFfYBUFfYBuffybufFyBU                                          
             ffyBUfFybufFYbufFYbUFfYbuffYB                                          
              ufFybuFFyBuffyBUffYbUFFYbUff                                          
                 YbUFfyBUFfYBuFfYbuFFyBUff                                          
                    YBUffYBUfFybuffYBUFfybu                                          
                    FFYBuffyBUFFyBUFfyBufFY                         bU              
                   FFybuFfYbuffYbUFfYBuFfyB                       UFFybu            
                  ffyBuffyBufFybuffyBUFfYbuff                    YBuFFybUF          
                 FyBUffYBUfFYBuFFYbUFFYbUFfyBuf                  FYBuffYbuF          
                FybuffyBufFyBUFFybuffybUffYBUffYbuFfYBuFFyBufFyBUfFYbuFFYbUf        
      FybUFf    YBuffYBufFybUFFyBuFfyBUffyBuFFYbUFFyBUFfYBUFfYBufFybUFFybuFf        
     yBUfFYBufF ybUFfYBUffyBuFfybufFyBuffyBuffyBUfFYbufFYbUFfybUFfYbUffYBuFFy        
    bUFFyBUFFyBUffybUfFybufFybUffYbUfFYBuFFybUFFyBuFfYBUfFybufFYbuFfyBUFfYbuFf      
  YBuFFYB  uFFybuFFyBuffybufFybufFybUffybufFYBuFfybuFFyBUffYBUfFYbuFFYbUFFyBUFf      
 YBUFfYB     ufFybUFFybuFfyBUfFybUfFybUFfYBUffyBuFfybufFyBuffyBUffYBUfFyBuFFYbuF    
   fybUF       fybuffYbuFfybuFFyBUffyBUfFYbufFYbUfFybUFfYBufFYBuFFYBuFFybuffyBuf    
    FYbUFF        YbuFfYbuffybuffYbuffybuFfybuffyBuffybufFybuffyBUFfyBufFYBuFfyB    
     uFFybU            FFyBUffyBuFFYbuffybUffyBuffYbuFfybufFyBUffyBUfFYbufFYbUfFyb  
       UFfYB              ufFYBuFFYBuFFybuffyBuffyBufFYbUfFybUFfybuffYbuFFyBUfFybu  
                            FfyBufFy      BuFFYbUFfyBUFfYbUfFYBuFfybuFFybUffYBUfFy  
                            bUfFYbU                  FFYbUFfYbUFFyBuFFYBuFfyBUfFYb  
                            UffyBuf                   FybuffyBUFfYbuff YBuFFybUFFyB  
                            UffYBUf                     FYBuFFYbUFFYbU FfyBufFYBuff  
                            YbuFFyB                      uFFYbUffyBUF  fYbuFFYbUFfy  
                             BuffYb                         uFFyBUFfyb  UfFybuffybu  
                             fFybu                           ffybUffyb  uffYbuffybu  
                             Ffybu                         ffYBUffYbuFF  YbUffYbUFf  
                             yBUFf                      YBuf     fYbUFF  ybuffyBuff  
                             YbufF                      ybufFY    buFf    YbuFfYBu  
                             FFybU                      FFybu     FfYB    UfFYBUf    
                             FYbU                                 ffyb     Uffyb    
                            UFFyB                                 ufFY              
                          BuFFy                                   bUff              
                         yBufF                                   YbUF                
                                                               Fybu                  
                                                                 F                  


fYbuffYbUFFYBufFyBuffybUfFybufFYBUFfYbUFFYBuFfYbUffyBufFYBufFybuFfybUfFYBUFfYbUFFYBuFf
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

con lo que, de repente, todo nuestro programa ha "desaparecido" (por eso era importante, antes, haber hecho una copia de nuestro programa, en otro sitio).

Pero... este sigue siendo nuestro programa, ¡y sigue funcionando!
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perl ./kkk.pl
Acceso de [[email protected]]/[misecretword]
Listo!
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y asunto resuelto... ¡con poni incorporado!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Encriptar password en script

Notapor newperlero » 2011-09-16 09:15 @427

Lo último que me esperaba de tu respuesta es que fueras a ofuscar mi código con un poni, ¡qué bueno!

Había pensado en ofuscación y lo había descartado, pero creo que volveré a considerar esa opción.

Me falta por mirar si en ActiveState (qué mal llevo usar windows :( ) tengo disponible ese módulo. Si no encuentro ese módulo u otro similar... pues ofuscaré código a mano y marchando. Aunque será mucho más fácil descifrarlo que usando un módulo, apenas he ofuscado código un par de veces.

Gracias, y ¡un saludo!
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318

Re: Encriptar password en script

Notapor explorer » 2011-09-16 09:23 @433

Acme::Bleach es aún menos "ofuscante" :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Acme::Bleach;
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y el resultado es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perl ./kkk.pl
Acceso de [[email protected]]/[misecretword]
Listo!
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

:lol: :lol: :lol:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Encriptar password en script

Notapor newperlero » 2011-09-16 11:50 @535

Acabo de tener una reacción como la de la muchacha del video :lol: http://www.youtube.com/watch?v=UQcsJCew92k&NR=1
Me he bajado el módulo para leer el fuente (con calma le echaré un vistazo a ver si consigo entenderlo), y aparte he encontrado otro módulo del estilo, que tiene buena pinta, http://search.cpan.org/dist/Acme-EyeDrops/lib/Acme/EyeDrops.pm
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318

Re: Encriptar password en script

Notapor salva » 2011-09-21 02:52 @161

explorer escribiste:Y asunto resuelto... ¡con poni incorporado!


Lo malo de estas cosas es que como el algoritmo de desofuscación va incluido...

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -MFile::Slurp=slurp -e '*CORE::GLOBAL::exit = sub { die }; eval { require Acme::Pony }; ($pony = slurp "/tmp/pony.pl") =~ s/.*Acme::Pony[^\n]*//s;print Acme::Pony::unpony($pony)'
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Encriptar password en script

Notapor salva » 2011-09-21 03:00 @166

Mi consejo es que, en vez de tener la clave dentro del propio script, que la guardes en un fichero de configuración con los permisos adecuados (normalmente 0600).

Además puedes hacer que el script compruebe esos permisos y aborte la ejecución si non son los correctos para asegurarse de que respetas esa política de seguridad.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados