GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memeriksa apakah Bash memiliki Kerentanan Shellshock?

Kerentanan shellshock ditemukan pada akhir 2014 (tepatnya, dampaknya telah diposting di CVE-2014-6271 pada 24 September 2014). Kemudian pembaruan dirilis dalam versi bash 4.1.2-15  dengan perbaikan untuk kerentanan Shellshock. Yah, seluruh dunia terus memperbarui bash dan mengamankan shell mereka dari Shellshock, tetapi yang mengejutkan banyak mesin di kantor saya tidak diperbarui karena alasan apa pun. Bagian yang menakutkan adalah, hanya sedikit dari mesin dengan shell yang rentan yang menghosting banyak layanan di internet. Menurut berbagai blog di internet, eksploitasi Shellshock memungkinkan penyerang mengeksekusi perintah jahat dari jarak jauh di bash melalui skrip CGI.

(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)

Hal pertama adalah memeriksa apakah BASH Anda rentan terhadap Shellshock atau tidak . Jadi setiap versi bash sebelum 4.1.2 pasti memiliki kerentanan ini.

$ bash --version
 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

(atau)

$ rpm -qa|grep bash
 bash-completion-1.3-7.el5
 bash-3.2-32.el5_9.1

Sekarang Anda tahu versinya, jadi jalankan perintah di bawah ini untuk mengonfirmasi bahwa itu rentan terhadap Shellshock.

$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock"
 vulnerable
 If you see the word vulnerable above, you are vulnerable to shellshock

Solusi:

Langsung ke bagian bawah posting ini. Jika Anda ingin mengetahui cara kerja shellshock, bacalah.

Memahami variabel ekspor di SHELL :

Seperti yang dikatakan output di atas, SHELL Anda rentan, tetapi mari kita lihat cara kerjanya.

Biasanya, Anda dapat mengatur variabel lingkungan dan menggunakannya dalam shell. Misalnya seperti di bawah ini:

$ test=1
 $ echo $test
 1

Tetapi Anda tidak dapat langsung menggunakan variabel env 'test' di bash shell baru . Lihat ini:

$ test=1
 $ echo $test
 1
 $ bash
 $ echo $test

Keluaran kosong. Alasannya adalah, variabel lingkungan hanya tersedia untuk akses di shell yang sama. Tetapi jika Anda mengekspor variabel lingkungan, maka itu juga tersedia untuk shell bash baru. Ini contohnya:

$ var="testing"
 $ export var
 $ bash
 $ echo $var
 testing

Sekarang Anda dapat melihat variabel '$var' disetel dan diekspor dalam satu shell dan diakses dari shell lain. Tentu saja, Anda dapat menghentikan ekspor kapan saja menggunakan perintah di bawah ini.

$ export -n var
 $ bash
 $ echo $var

Demikian pula, Anda dapat membuat fungsi dan mengekspornya dalam satu shell dan mengakses fungsi yang diekspor dari shell lain. Mari kita lihat contoh itu juga.

$ fnc() { echo "testing"; }
 $ fnc
 testing
 $ bash
 $ fnc
 bash: fnc: command not found

Pada output di atas Anda melihat 'bash:fnc:command not found ' karena, fnc bukan fungsi yang diekspor. Jadi Anda tidak dapat memanggilnya dari shell lain.

Ayo ekspor 'fnc ' juga.

$ export -f fnc
 $ fnc
 testing
 $ bash
 $ fnc
 testing

Ini berfungsi seperti yang diharapkan (sejak ‘fnc ' telah diekspor dan tersedia di shell lain).

Mengekspor variabel atau fungsi akan menetapkan variabel lingkungan

$ env | grep -A1 fnc
 fnc=() { echo "testing"
 }

Sekarang eksploitasi Shellshock

Berdasarkan contoh di atas, kami mempelajari bahwa bash shell baru menyerap definisi variabel lingkungan yang dimulai dengan () dan menafsirkannya sebagai fungsi . Tetapi kerentanan di sini, shell baru akan mengeksekusi apa pun yang ada dalam kutipan.

Misalnya:

Jalankan perintah di bawah ini:

$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '

Periksa variabel env untuk 'sse_fnc':

$ env | grep -A1 sse_fnc
 sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";

Buka bash shell baru:

$ bash
 Not good

Catatan: Kami baru saja mengetik 'bash ' dan Anda melihat teks 'Tidak bagus ' dicetak. Artinya, shell baru mulai menjalankan fungsi setelah membaca variabel lingkungan dan juga menjalankan perintah tambahan (walaupun fungsi brace ditutup setelah 'echo “function shellshock exploit”;’).

Dengan kata lain “Variabel yang diekspor sse_fnc diteruskan ke subkulit yang ditafsirkan sebagai fungsi sse_fnc tetapi perintah tambahan dijalankan (this is bad ) saat subkulit muncul.”

melalui Fixee@StackExchange

bagaimana kerentanan ini dapat dieksploitasi?

Saya tidak berpikir ada yang bisa menjelaskan lebih baik dari orang ini (shellshocker.net). Terima kasih kawan!

Bagaimana Cara Memperbaiki Shellshock?

Sederhana, perbarui bash Anda dan coba eksploitasi untuk memeriksa apakah kerentanan telah hilang.

$curl https://shellshocker.net/fixbash | sh

Perintah di atas akan secara otomatis mengunduh sekitar 30+ tambalan dan mengkompilasi bash dari sumber. Anda dapat menjalankan skrip ini secara teratur untuk menjaga bash Anda diperbarui dengan tambalan terbaru.

Setelah instalasi berhasil. Periksa versi bash seperti di bawah ini:

$bash --version
 GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)

Uji kerentanan Shellshock:

$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock
 If you see the word vulnerable above, you are vulnerable to shellshock

Dari output di atas, tidak mencetak kata "rentan". Jadi bash saya aman!

(atau)

$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo

Jika BASH rentan, perintah di atas akan menampilkan tanggal. Jika tidak, BASH aman.


Linux
  1. Bagaimana cara memeriksa syslog di Bash di Linux?

  2. Bagaimana cara memeriksa apakah suatu file kosong di Bash?

  3. Cara memeriksa apakah sed telah mengubah file

  1. Cara menulis loop di Bash

  2. Bagaimana Cara Memeriksa Substring Di Shell Script Bash?

  3. Bagaimana cara memeriksa apakah ssh-agent sudah berjalan di bash?

  1. Bagaimana Cara Memeriksa Apakah Bash Dapat Mencetak Warna?

  2. Cara Memeriksa apakah String Berisi Substring di Bash

  3. Cara Memperbaiki Bash Shellshock CVE-2014-6271, CVE-2014-7169 di Linux