crittografare bash shell script usando SHC

crittografare bash shell script usando SHC

Vi sara capitato di voler cifrare il proprio bash script di shell in ambiente Linux? Magari lo script di shell contiene qualcosa che non volete fa vedere, come password o altro.

E’ possibile utilizzare l’utilità SHC come spiegato di seguito. Si potrà notare che lo script cifrato e creato da SHC non è leggibile.

How do I encrypt my bash shell script on Linux environment? The shell script contains password, and I don’t want others who have execute access to view the shell script and get the password. Is there a way to encrypt my shell script?


A: First, as a best practice you should not be encrypting your shell script. You should really document your shell script properly so that anybody who views it understands exactly what it does. If it contains sensitive information like password, you should figure out a different approach to write the shell script without having to encrypt it.

1. Download shc and install it

Download shc e installiamo nel seguente modo.

# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# tar xvfz shc-3.8.7.tgz
# cd shc-3.8.7
# make

Verifichiamo che shc è installato

$ ./shc -v
shc parse(-f): No source file specified

shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

2. Creiamo un esempio di Shell Script

Creiamo un esempio di bash shell script per fare delle prove

Per test, creiamo il seguente script di shell random.sh che genera numeri casuali. È necessario specificare il numero di numeri casuali che ti piace di generare.

$ vi random.sh
#!/bin/bash

echo -n "Quanti numeri vuoi generare? "
read max

for (( start = 1; start <= $max; start++ ))
do
  echo -e $RANDOM
done

$ ./random.sh
Quanti numeri vuoi generare? 3 24682 1678 491

3. Encrypt Shell Script Using shc

Encrypt il file random.sh shell scripting usando shc .

$ ./shc -f random.sh

Verranno creati 2 file

$ ls -l random.sh* -rwxrw-r–. 1 ramesh ramesh 149 Mar 27 01:09 random.sh -rwx-wx–x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x -rw-rw-r–. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c

  • random.sh è lo script di shell in chiaro originale
  • random.sh.x è lo script di shell crittografato in formato binario
  • random.sh.xc è il codice sorgente C del file random.sh. Questo codice sorgente C viene compilato per creare il file random.sh.x sopra crittografato. Tutta la logica che sta dietro la SHC è quello di convertire lo script di shell random.sh a random.sh.xc programma in C (e, naturalmente, la compilazione che per generare l’eseguibile random.sh.x)
$ file random.sh
random.sh: Bourne-Again shell script text executable

$ file random.sh.x
random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

$ file random.sh.x.c
random.sh.x.c: ASCII C program text

4. Eseguiamo lo Encrypted Shell Script

Eseguiamo il file per verificare il funzionamento

$ ./random.sh.x
Quanti numeri vuoi generare?3
7489 
10494 
29627

5. Specificare la data di scadenza dello Shell Script

Possiamo usera shc per specificare la data di scadenza di uno script. Se qualcuno tenta di eseguire lo script di shell, si otterrà un messaggio di errore.

Creiamo uno script cifrato con l’opzione “SHC -e” per specificare la data di scadenza. La data di scadenza è specificato nel formato dd/mm/yyyy.

$ ./shc -e 11/12/2014 -f random.sh

Se qualcuno tenta di eseguire il random.sh.x, dopo il 11-Dec-2014, si otterrà un messaggio di scadenza di default come mostrato di seguito.

$ ./random.sh.x
vi restituirà che non può più essere eseguito

Se volete specificare un mess personalizzato utilizzate l’optione -m

$ ./shc -e 11/12/2014 -m "Contatta il tuo amministratore all'e-mail test@test.com" -f random.sh

$ ./random.sh.x
in questo caso verrà restituito il messaggio personalizzato

6. Altre optioni per la redistribuone Encrypted Shell Scripts

-r si rilasserà sicurezza per creare un binario ridistribuibile che viene eseguito su altri sistemi che corre lo stesso sistema operativo, come quella su cui è stato compilato.
-T Permetterà ai file binari creati per essere rintracciabili tramite programmi come strace, ltrace, etc.
-v è per verbose

Typically you might want to use both -r and -T option to craete a redistributable and tracable shell encrypted shell script as shown below.

$ ./shc -v -r -T -f random.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc  random.sh.x.c -o random.sh.x
shc: strip random.sh.x
shc: chmod go-r random.sh.x

$ ./random.sh.x
Quanti numeri random vuoi creare? 3
28954
1410
15234