El post que buscas se encuentra eliminado, pero este también te puede interesar

Script avanzado en Bash (bash+md5) para proteger ‘algo’

Tengo en mi laptop un FlatPress para apuntes personales, cosas que no quiero olvidar y por eso los escribo en esta bitácora personal. Pero, como varios ya deben saber… yo soy algo paranoico con la seguridad, y, si es referente a la seguridad de MIS pensamientos, no tienen idea de qué tan paranoico puedo llegar a ser

Entonces me enfrenté al problema: ¿Cómo usando FlatPress puedo proteger todo el contenido del mismo?

Pensé en varias aplicaciones que permiten cifrar datos, mas… ninguna hacía exactamente lo que deseaba, por eso me dí a la tarea de programar yo mismo lo que quería.

Ahora les mostraré un script que hice, el cual hace lo siguiente:

El script está diseñado para funcionar en KDE, si no tienen KDE los cuadros de diálogo no les aparecerán.


1. Muestra un cuadro de diálogo preguntando si eres KZKG^Gaara, si presionas NO se cierra el script, si presionas SI continúa todo normal.

Script avanzado en Bash (bash+md5) para proteger ‘algo’


2. Muestra un cuadro de texto preguntando cuál es el password:

en bash


3. Si presionas Cancelar se cierra el script, ahora viene uno de los trucos del script …

3.1. La lógica es que el script compare el password que escribimos con uno que esté predefinido dentro del mismo script ya, y si los passwords concuerdan entonces sigue ejecutándose, y si los passwords no concuerdan pues que aparezca un mensaje de error. El problema es que, si ponemos el password correcto dentro del script así sin más, cualquiera que abra el script con un editor de texto podría ver muy claramente el password correcto.. y esto amigos míos, es simplemente una falla imperdonable

3.2. Para evitar poner el password así en texto plano en el script, yo usé MD5. O sea, al inicio del script, yo declaré que el password correcto es “2dac690b816a43e4fd9df5ee35e3790d“, y este es el MD5 de: “desdelinux“. … No entiendo nada!! …

Detallemos un poco más. Si yo ahora escribo en un archivo (por ejemplo, ~/pass.txt) de texto: desdelinux

Si en una terminal escribo: md5sum ~/pass.txt

Me devolverá: 2dac690b816a43e4fd9df5ee35e3790d sum

Y… como pueden ver, esa primera columna que tiene montón de números y letras sin orden aparente, es idénticamente igual a la que puse más arriba, y es la que está en el script declarada.

Bien, esa primera columna es el MD5 de desdelinux

Si ponen lo siguiente les devolverá solamente la 1ra columna, que es la que nos interesa: md5sum ~/pass.txt | awk '{print $1}'

4. Entonces, el funcionamiento del script en esta parte en específico es:

4.1. El script pondrá el password que hayas escrito tú en un archivo temporal llamado temp.txt, y sacará el MD5 del contenido de ese archivo mediante el comando:

md5sum temp.txt | awk '{print $1}'

4.2. Si el MD5 del password que acabas de escribir NO es idénticamente igual al que él tiene definido (o sea, que el que está escrito en el script) se cerrará y dará un error:

script avanzado


4.3. Si el password coincide, perfecto… el script continúa

5. Al coincidir el password, el script hará una serie de pasos, en mi caso:

5.1. Entrará a la carpeta /home/shared/hosted/ -» cd /home/shared/hosted/

5.2. La carpeta de FlatPress se llama “me”, y está comprimida en .RAR protegido con password (el password es el mismo que se debe poner antes), por lo que el script va a descomprimir ese archivo (me.rar) -» rar x me.rar -hp$MWORD

rar x -» Lo que hace es descomprimir archivos y carpetas manteniendo el mismo orden que tienen.

me.rar -» Este es el archivo que deseo descomprimir.

-hp$MWORD -» Aquí le indico que debe usar password para descomprimir el archivo, y el password es la variable $MWORD (esta variable es el password que introdujimos antes)

5.3. Entonces, si se descomprimió bien, paso a borrar el archivo me.rar … ¿por qué?, bueno, porque no tiene sentido que exista el .rar si estoy trabajando con los archivos que tenía dentro, y esos archivos están cambiando pues estoy escribiendo cosas nuevas en el blog -» rm me.rar

5.4. Le debo cambiar los permisos para que funcione bien todo -» chmod 777 -R me/ (recuerden que la carpeta me/ es lo que contenía el comprimido me.rar)

5.5. Me mostrará una ventana que me indica que tengo 10 segundos para abrir “el” navegador…. WTF!, ¿esto qué significa? …

(bash+md5) para proteger


5.5(a). Simple, muy simple… … Yo abro el navegador (en este caso Rekonq) y estoy trabajando en algún post nuevo, pero al momento de cerrar el navegador, el script vuelve a comprimir en .rar la carpeta me/ (quedando en me.rar).

Esto es posible porque el script está comprobando cada 3 segundos si Rekonq está abierto o no, si detecta que sí está abierto, el script no hace nada, pero si detecta que NO está abierto, pasa a ejecutar: rar a me.rar -hp$MWORD me/* && rm -R me/

Lo cual significa que va a comprimir la carpeta me/ en me.rar (y le pondrá password, que sería el mismo que hemos visto ya), y una vez que la comprima y si no hubo errores, pasará a borrar la carpeta me/ con todo su contenido.

5.5(b). ¿Esto en qué nos ayuda? … simple, esto nos evita tener que acordarnos de que debemos volver a proteger nuestro contenido, pues solo necesitamos dejar de trabajar en él (cerrar el navegador) y el script hará todo el resto del trabajo

6. Listo, esto viene siendo todo explicado de forma general

… aunque aún hay otro detalle

El script tiene una protección aún mayor, protección que está deshabilitada (comentada) son estas líneas:

if [ "$USER" != "$ME" ]; then
rm *.sh
kdialog --error "Sorry but u are not me. Auto-destroying..." --title "Im Me..."
exit
fi


Esto lo que hace es simple. La variable $USER es una variable global del sistema, si en una terminal ponen:

echo $USER

Verán que les muestra el usuario de ustedes… bueno, la lógica de estas líneas es simple.

Si $USER no coincide con la variable $ME (y esta la declaré yo en el script, y es: “gaara”) el script borrará TODOS los archivos .sh que estén en esa carpeta, o sea, se autodestruirá

Esto es para prevenir que alguien más ejecute el script en otro ordenador jejejeje.

Y bueno, no creo que haya mucho más que explicar, les dejo el script:

http://ftp.desdelinux.net/kzkggaara/bash-md5.sh

http://paste.desdelinux.net/4637

Sé que a muchos les resultará sumamente complejo, pero en realidad asusta más de lo que debería… el script tiene una lógica de funcionamiento realmente simple, para un propósito simple.

Esto lo hice para suplir una necesidad muy específica mía, lo comparto esperando que alguna que otra línea o idea acá explicada le pueda servir a alguien

Por cierto, el script está pensado para KDE, porque los cuadros de diálogo (las ventanas) que muestra son de KDE (usando KDialog), pero se puede adaptar para Gnome/Unity/Cinnamon/Mate usando Zenity, o bien usarlo 100% en terminal usando simplemente el comando dialog.

Y sí, aún el script tiene alguna que otra falla, por ejemplo si el script descomprime el .rar, y luego alguien cierra a la fuerza (mata) el script, el contenido del .rar quedará desprotegido, son algunos detalles que quedan por pulir… pero eh!, que también nosotros debemos controlar que nadie pueda revisar nuestro ordenador

Para finalizar quiero aclarar que yo NO soy programador ni mucho menos, no me considero tal, imagino que se puede optimizar líneas en el código, o usar alguna función para mejorar el funcionamiento del script… pero lo dicho, no soy programador

Cualquier duda que tengan al respecto me dicen, si bien el script puede que no les sirva pues no lo necesitan, siempre podrán aprender algún que otro tip de él

6 comentarios - Script avanzado en Bash (bash+md5) para proteger ‘algo’

naxocore2000 +1
Bastante bueno tu script!...hace tiempo que no se ven post asi en la categoria Gnu/Linux!
agoras
saludos y que tal un script para dar con una contraseña por fuerza bruta, cifrado con gpg (palabra). gpg tiene opcion --batch para que no sea interactivo. y que tal un script en php para buscar por fuerza bruta el pass de ftp
matiasbatero17 +1
Interesante che!!! Buen aporte!!!!!!

Soy muy nuevo en esto de programar, estoy aprendiendo BASH de a poquito...pero algunas cosas se me ocurrieron y te pueden servir o no..
Cuando decís que el script pelado tiene incorporado el password y sería imperdonable que alguien lo abra y lo lea de ahí... vos planteás todo este truco de embeber el MD5 como medida de protección.


Lo cual está bastante bueno como primer paso para complicarle la vida al posible intruso, pero fijate en las siguientes ideas (que incluso pueden aplicarse una arriba de la otra)

IDEA 1) Qué tal si el password lo guardas dentro de un archivo en tu máquina, y no alojarlo en el script?

EJ: en un txt ponés la clave y la guardás en /home/<user>/bla/bla/clave.txt
En tu script llamas a la clave como CLAVE="$(cat $HOME/bla/bla/clave.txt)", luego tirás el if $clavepreguntada = $CLAVE, then.. etc etc

De esta forma, estás logrando 3 cosas +1 ventaja:
1) Que la contraseña jamás estuvo en el script. (Evitás el MD5)
2) La ruta en donde está la clave, depende del nombre de usuario. (Cualquiera que lo quiera abrir, lo redirecciona a cualquier lado) En el 99.9% de los casos le va a fallar el script.
3) En caso de que quieras más seguridad, quitale todos los permisos al archivo clave.txt para todos los demás usuarios excepto el tuyo.
4) Ventaja: Portabilidad para cambiar la password cuando quieras, sin editar script. Porque la comprobación es externa a través de un fichero.

IDEA 2) Qué tal si ofuscás todo el script de bash, para que ni siquiera se pueda abrir?

Una forma de hacer esto es aprovechar de que en C es necesario compilar.
Entonces, introduce el script dentro de un código C que lo único que hace es llamar a ese Script (pero que está metido dentro del programa). Al momento de compilar... queda todo dentro y tu salida es un ejecutable.. y no más un script. Hay una persona que ya hizo un "script" que hace el proceso de ofuscación, con lo cual es muy práctico.

Más info acá: http://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes/Compilar_%28ofuscar%29_BASH_scripts_con_C_-_SHC

IDEA 3) Qué tal si, ponés una condición virtual en el script en donde requiera contraseña de administrador?

Por ej, ejecutar una condición usando "sudo" y que luego siga con el script, sino detenerla.
De esta manera toda la protección recaería como un puente sobre tu password de ROOT.

Bueno, nada más...
Saludos!!!!!!!! y aguante BASH.
asalabra2
Buena data man...muy completo el script
HacKan
che, y si mejor usas gpg para encriptar en serio?
igual es bueno q hagas estas cosas, a mi me gusta y se aprende mucho. te recomiendo q uses sha para guardar el script, tipea shasum --help en la consola

saludos!
HacKan
q carajo escribi??? jajaja
quise poner "te recomiendo q uses sha para guardar la contraseña"

saluds!