¿Cómo puedo cifrar o hacer que mi script de shell sea ilegible?

9

¿Cómo puedo cifrar o codificar mi script de shell para que sea ilegible a simple vista? Cualquiera de los métodos sería aceptable, proporcione pasos específicos.

RAM
fuente
En mi opinión, shc tiene algunas deficiencias: tengo un proyecto en curso en github (obash) donde trato de abordar estos problemas. Es posible que desee ver si le queda mejor que shc.
louigi600

Respuestas:

11

SHC

Puede probar los pasos descritos en este sitio web, titulados: Cómo cifrar su script Bash Shell en Linux usando SHC . Este artículo trata sobre el uso de una herramienta llamada SHC - Shell Script Compiler .

Recursos de URL

Este es un ejecutable que tendrás que construir usando gcc / g ++.

Uso

$ ./shc -f random.sh

Una vez que ejecute su script de shell, random.shse convertirá en este archivo:

-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x

¿Es esto infalible?

No, hay un buen análisis del método utilizado por la herramienta SHC que muestra que no es demasiado fuerte y puede eludirse si sabe lo que está haciendo. El artículo fue publicado en el sitio web linuxjournal.com, titulado: Paranoid Penguin: limitaciones de shc, una utilidad de cifrado de Shell .

NOTA: Estas clases de herramientas probablemente se describan mejor como ofuscadores.

slm
fuente
@sim Gracias. ¿Hay alguna forma de descifrar ese script?
Ram
@Ram: sí, esto no es infalible. ¿Que tratas de esconder? ¿Información de usuario / contraseña o simplemente cómo funciona el script?
slm
@sim estoy tratando de ocultar cómo funciona el script?
Ram
@Ram: OK, probablemente esté bien para eso, no lo recomendaría para tratar de ocultar las contraseñas. Cuando probé esta aplicación, se estaba comportando un poco extraño en mi computadora. Lo intentaría, pero los ejecutables resultantes se estaban iniciando como si estuvieran en segundo plano, y tuve que hacer el comando fgpara llevarlo al primer plano y luego funcionó bien. Todavía estoy buscando alternativas.
slm
99
A pesar del nombre, SHC no cifra el script de ninguna manera significativa. El cifrado implica que se descifra antes de su uso. Si el script se puede ejecutar, primero se debe descifrar y se puede extraer en ese punto. La transformación de un programa para que sea más difícil de entender sin cambiar su comportamiento se llama ofuscación. Muy, muy raramente vale la pena, y para un script de shell, es una sobreestimación de su utilidad.
Gilles 'SO- deja de ser malvado'
29

Si desea cifrar un script de shell, use GPG . Quien quiera ejecutar su script tendrá que descifrarlo primero.

Si desea que alguien pueda ejecutar el script pero no leerlo, ese es un problema completamente diferente que no tiene nada que ver con el cifrado. Se llama ofuscación .

Si tiene una contraseña u otra información confidencial en ese script, ninguna cantidad de ofuscación la ocultará. Tarde o temprano, el script usará la contraseña para hacer algo y en ese momento la contraseña aparecerá claramente para cualquiera que la busque.

Si quieres ocultar cómo funciona tu script porque tienes miedo de que alguien lo copie, olvídalo. A nadie le importa.

Si quieres ocultar tu script porque te da vergüenza su calidad, arréglalo.

Si desea ocultar cómo funciona su script porque desea ocultar lo que hace, no es factible. Alguien puede mirar su script mientras se ejecuta y ver lo que está haciendo.

Si ha leído hasta ahora y todavía quiere "cifrar" su secuencia de comandos, está malinterpretando algo importante. No envíe su guión a nadie, ni lo envíe en texto plano.

Gilles 'SO- deja de ser malvado'
fuente
44
+1 para "a nadie le importa". excepto que a algunos les importa: echaría un vistazo a un script de shell ofuscado y pensaría "de ninguna manera voy a ejecutar eso en mi sistema".
cas
1
Lo sentimos, a la gente le importa y es importante. Tienes una perspectiva y existe una perspectiva alternativa. Ambos lo tendrán tomadores. Mientras tanto, la respuesta a continuación funciona bien para mí. La mayoría de las veces queremos protegernos de hackers / usuarios casuales. Comprende bien que determinados hackers irrumpirán a través de cualquier cosa.
anil
@anil Solo estás protegiendo contra personas que no serían lo suficientemente inteligentes o competentes como para hacer algo con el código fuente. Puede hacerte sentir mejor, pero no te hace más seguro.
Gilles 'SO- deja de ser malvado'
@gilles tal vez te he leído mal. De hecho, estoy tratando de protegerme de las personas que son competentes para hacer algo con el código fuente si lo tuvieran (código fuente = contenido del script). Solo estas personas pueden no saber cómo hackear un archivo encriptado sin tener muchos problemas para descubrir cómo hacerlo. Contra los realmente determinados _ Estoy de acuerdo en que no hay defensas realmente buenas.
anil
11

Obtuve esto mientras buscaba en internet, cortesía de Claudio P.

  1. Escribe tu script (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
  2. Cifre su script (proporcione una contraseña):

    openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 
  3. Escriba de Wrapper (script-final.sh):

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
  4. Ejecute "script-final.sh", ingrese la contraseña y la secuencia de comandos se ejecutará sin escribir la secuencia de comandos de texto sin formato en el disco.

PAGS....
fuente
1

Básicamente puedes ofuscar pero no compilar tu script. La razón simple es que los scripts de shell son comandos individuales interpretados que deben ser ejecutados uno por uno por el sistema, y que puede ver esos comandos a medida que el sistema los ejecuta uno por uno con la sh -xbandera (y quizás también el -v bandera)

Para la mayoría de los programadores, eso será suficiente para entender lo que está sucediendo.

Puede ofuscar sus variables y flujo general si lo desea, pero no puede ofuscar los comandos individuales ejecutados por su programa, que generalmente son todos ellos para los scripts de shell .

La solución más simple es probablemente reescribir el script de shell en un lenguaje compilado como C.

Thorbjørn Ravn Andersen
fuente
1
Incluso un binario compilado se puede desmontar y aplicar ingeniería inversa si se determina lo suficiente.
Joseph R.
3
Todo lo ejecutable puede ser de ingeniería inversa. El requisito aquí era que debería ser ilegible a simple vista
Thorbjørn Ravn Andersen
Lo sé. Solo dejo una nota para futuros lectores.
Joseph R.
-2

intente enviar su script a este sitio si desea ocultarlo de la vista pública.

Si bien muchos pueden estar en desacuerdo con la idea de cifrar u ofuscar el código fuente de un script escrito en un idioma interpretado, entiendo por qué la gente quiere hacer esto.

Como alguien a quien le han robado su trabajo muchas veces, simplemente no me importa si la "ofuscación" o el "cifrado" es un tabú. Mientras mi script esté protegido y funcione como lo hacía antes del cifrado, estoy bastante contento. nunca más permitiré que alguien más tome mis ideas y las ejecute. y no, escribir mi script en un lenguaje compilado no es una opción. no sé cómo.

de todos modos, si no desea utilizar el sitio mencionado anteriormente, pruebe la última versión de shc. Creo que lo han actualizado en github para abordar las muchas preocupaciones de seguridad que otros han mencionado. escriba lo siguiente en google " shc github " y verá una gran cantidad de opciones disponibles que puede probar.

¡buena suerte!

Monitoreo de Nagios
fuente