SHELLSHOCK A

chmood


Pengantar

  • Apa SHELLSHOCK?
  • Ketika hal itu dapat dieksploitasi?
  • Cara memeriksa apakah Anda rentan
  • Memeriksa versi pesta Anda
  • Menjalankan mewah satu-kapal di terminal Anda
  • wawasan teknis SHELLSHOCK
  • Dasar-dasar variabel bash shell
  • Memperkenalkan variabel lingkungan pesta
  • Mengekspor fungsi bash untuk variabel lingkungan
  • Parsing definisi fungsi dari string
  • Kerentanan yang sebenarnya
  • mungkin eksploitasi


Pengantar

SHELLSHOCK sekarang salah satu istilah-istilah dalam komunitas keamanan. Setelah "Heartbleed", itu adalah yang paling banyak menyebarkan berita di masa lalu. Artikel ini pertama kali memberikan rincian internal kerentanan. Kemudian berjalan pembaca melalui prosedur langkah-demi-langkah bagaimana menyiapkan laboratorium mereka sendiri untuk menunjukkan kerentanan SHELLSHOCK bersama dengan bagian eksploitasi.


Apa SHELLSHOCK?

SHELLSHOCK adalah kerentanan di GNU Bourne Again Shell (BASH), yang memungkinkan penyerang untuk menjalankan perintah sewenang-wenang menggunakan variabel lingkungan khusus dibuat.

Ketika hal itu dapat dieksploitasi?

Ini adalah bagian paling penting dari artikel ini. Sebelum memahami bagaimana untuk mengeksploitasi kerentanan SHELLSHOCK ini, kita perlu memahami target-target potensial yang rentan terhadap SHELLSHOCK. Ini juga akan membantu kita dalam membangun laboratorium untuk menunjukkan bagaimana untuk mengeksploitasi kerentanan ini.

Jika Anda telah membaca beberapa berita tentang SHELLSHOCK di Internet, Anda mungkin telah mendengar tentang target rentan sebagai berikut: Apache mod-cgi, SSH, DHCP, dll


Saya akan membuat hal-hal yang jelas menggunakan SSH sebagai contoh.

SSH Anda tidak benar-benar perlu dimanfaatkan jika Anda menggunakan OpenSSH sebagai SSH Server serta pesta sebagai shell default Anda. Ada beberapa keterbatasan untuk mengeksploitasi ini, seperti dijelaskan di bawah.

Anda mungkin rentan jika Anda telah menerapkan "authorization_keys" untuk klien Anda dengan beberapa persyaratan tertentu seperti "perintah memaksa" eksekusi sebelum pengguna mengeksekusi perintah.

Nah, Anda tidak perlu khawatir tentang hal ini sekarang, karena akan kita bahas secara rinci dalam sekejap.


Sampai sekarang, harap diingat bahwa "layanan kami menjadi rentan jika kita menggunakan program apapun yang menggunakan versi rentan bash sebagai penerjemah dan jika penyerang mampu mengendalikan nilai variabel lingkungan yang sedang berlalu untuk bash ".

Mengapa? Karena ini bukan kerentanan dalam SSH; melainkan adalah kerentanan dalam "pesta".

Bagaimana memeriksa apakah pesta Anda rentan

Memeriksa versi bash:

versi Bash melalui 4,3 diketahui rentan. Jadi, salah satu cara pemeriksaan adalah untuk memeriksa versi pesta Anda menggunakan perintah berikut.

$bash --version



Keren! Ini rentan.

Menjalankan mewah satu-liner terminal Teman-teman:

Ada satu-kapal yang menjadi sangat populer setelah pengungkapan kerentanan SHELLSHOCK ini.

$env x= '() { :;}; echo shellshocked' bash –c "echo test"

Menjalankan baris di atas di terminal Anda menunjukkan jika Anda rentan terhadap SHELLSHOCK. Jika "shellshocked" akan dicetak dalam output, Anda rentan dan sudah waktunya untuk memperbarui.



wawasan teknis kerentanan SHELLSHOCK

Sekarang, berikut ini harus pertanyaan Anda:

Apa baris di atas lakukan?

Apa yang terjadi di latar belakang?

Mengapa saya rentan jika "shellshocked" akan dicetak?

Untuk membuat hal-hal yang jelas, mari kita pertama pergi melalui dasar-dasar.

Dasar-dasar variabel bash shell

Secara umum, kita dapat mencetak sesuatu menggunakan perintah echo seperti yang ditunjukkan di bawah ini.

$ echo "shellshock"

Sekarang, jika Anda ingin menyimpan nilai di atas dalam sebuah variabel yang cukup mirip dengan bahasa scripting lainnya, saya akan memasukkannya ke dalam sebuah variabel yang disebut "myvar".

$ myvar="shellshock"

$ echo $myvar

shellshock

Hal ini ditunjukkan di bawah ini.



Sekarang, mari kita membuka proses anak dan melihat apakah kita bisa mendapatkan nilai variabel.



Seperti yang kita lihat pada gambar di atas, kita tidak bisa membaca nilai yang ditetapkan oleh proses induk ke dalam proses anak.

Memperkenalkan variabel lingkungan pesta

Di sinilah kita bisa dengan nyaman berbicara tentang variabel lingkungan.

Ketika Anda memulai sesi shell baru Anda, beberapa variabel yang sudah siap untuk Anda gunakan. Ini bisa disebut variabel lingkungan.

Ketika kita ingin mengakses "myvar" variabel tersebut di atas dalam lingkungan proses anak, kita perlu membuat variabel lingkungan untuk membuatnya tersedia untuk proses baru. Kita bisa melakukannya dengan menggunakan "ekspor".

Hal ini ditunjukkan di bawah ini.



Melihat gambar di atas, kita dapat dengan jelas melihat bahwa sub proses dapat mengakses nilai "myvar".

Sekarang, hanya untuk mengkonfirmasi bahwa ini ditambahkan ke variabel lingkungan Anda, jalankan perintah berikut.

$ env | grep 'myvar'



Pada perintah di atas, kita mencetak semua variabel lingkungan dan menyaring variabel target kami.

Mengekspor fungsi bash untuk variabel lingkungan

Demikian pula, fungsi dapat diekspor ke lingkungan proses anak seperti yang ditunjukkan di bawah ini.



Pada gambar di atas, kita pertama kali didefinisikan fungsi seperti yang ditunjukkan di bawah ini.

x() { somecode;}

Kemudian disebut fungsi ini x.

Agar dapat mengaksesnya dari proses sub, saya telah diekspor menggunakan '-f' bendera seperti yang ditunjukkan di bawah ini.

export –f x

Seperti yang diharapkan, saya mampu mencetak teks di dalam subkulit.

Parsing definisi fungsi dari string

Sejauh ini, kita telah melihat bagaimana variabel bash dan fungsi bekerja, serta bagaimana kita bisa ekspor mereka untuk dapat mengaksesnya dalam proses sub.

Sekarang, kita lebih dekat dengan SHELLSHOCK. J

Definisi fungsi yang disebutkan di atas juga dapat disimpan sebagai string.

Untuk menunjukkan hal ini, saya mengambil sebuah variabel baru yang disebut "newfunction". Anda akan datang untuk tahu mengapa saya penamaan variabel sebagai fungsi dalam sekejap.

$ newfunction='() { echo 'shellshockdemo';}'

Seperti yang kita lakukan sebelumnya, kita hanya mendefinisikan variabel. Sekarang, kita dapat mengaksesnya sebagai variabel biasa seperti yang ditunjukkan di bawah ini.

$ echo $newfunction

Dua langkah di atas ditunjukkan pada gambar berikut.



Semuanya seperti yang diharapkan selama ini.

Sekarang, mari kita ekspor ke variabel lingkungan dan mengaksesnya dari sub shell seperti yang ditunjukkan di bawah ini.

$ bash

bash-3.2$ newfunction



Fantastis, meskipun kita dapat mengaksesnya sebagai variabel dalam shell orang tua, itu semakin ditafsirkan sebagai fungsi dalam subkulit dan mengeksekusi tubuh fungsi.

Mari kita juga melihat variabel lingkungan untuk memeriksa fungsi kita.



Bagaimana itu mungkin?

Ketika shell baru diluncurkan sebagai proses anak, dibutuhkan nilai string dan menafsirkannya sebagai fungsi karena itu dimulai dengan ().

Kerentanan yang sebenarnya
Akhirnya, kami berada di sana!

Kali ini, saya akan mengakhiri definisi fungsi dan melewati beberapa perintah sewenang-wenang setelah mengakhiri fungsi seperti yang ditunjukkan di bawah ini.

$export newfunction='() { echo 'shellshockdemo';}; echo damn! I am vulnerable'

Di bagian atas kode, saya telah menambahkan, "sialan gema! Saya rentan "setelah mengakhiri fungsi.

Sekarang, menelurkan sebuah shell bash baru dengan mengetik "pesta" dan amati apa yang terjadi. Kedua langkah yang ditunjukkan di bawah ini.



Bingo! Kode ditambahkan di luar definisi fungsi telah dieksekusi selama startup bash.

Jika kita menjalankan fungsi sekarang, ia pergi seperti yang diharapkan.

Hal ini ditunjukkan di bawah ini.



Sekarang, jika Anda kembali ke salah satu bagian sebelumnya kita "? Ketika hal itu dapat dieksploitasi" di sini adalah jawabannya:

Kondisi 1 - versi pesta Anda harus rentan (melalui 4.3).

Kondisi 2 - Seorang penyerang harus mampu mengendalikan variabel lingkungan yang berlalu.

Kondisi 3 - Sebuah shell bash baru harus melahirkan (sub proses).

Untuk mengotomatisasi seluruh proses, kita menggunakan "env" seperti yang ditunjukkan di bawah ini.

$env x= '() { :;}; echo shellshocked' bash –c "echo test"

Umumnya, env dapat digunakan untuk mencetak semua variabel lingkungan seperti yang telah kita lihat sebelumnya.

Tapi jika Anda melihat halaman manual dari env, itu juga dapat digunakan untuk menjalankan perintah.



Atau, kita bisa menggunakan "help" seperti yang ditunjukkan di bawah ini.



Pertama mari kita lihat contoh sederhana seperti yang ditunjukkan di bawah ini.

$env newvar=demo bash –c 'echo $newvar'

Dalam perintah yang ditunjukkan di atas, newvar adalah variabel ekspor yang sedang diakses oleh sub proses baru dan mencetak nilai itu.



Sekarang, jika kita melihat perintah kami yang mewah,

$ env x='() { echo accessme;} echo vulnerable' bash –c 'x'

Kita harus melihat output sebagai berikut:



Sekali lagi, konsep yang sama.

X adalah variabel yang diekspor. Sejak nilainya diawali dengan (), ia akan diperlakukan sebagai fungsi dengan subkulit dan definisi akan dieksekusi.

Tapi sebelum itu, kita "rentan" akan dicetak pada pemijahan shell.

Seluruh proses ini diwakili dalam gambar berikut.



Pada saat ini, Anda harus memahami mengapa hal ini sederhana perintah on-line sangat berbahaya.

mungkin eksploitasi

Berikut adalah beberapa contoh penting di mana kerentanan SHELLSHOCK dapat terkena:

Apache HTTP Server menggunakan mod_cgi atau mod_cgid skrip baik tertulis di bash, atau bertelur subshells.

Menimpa atau fitur Bypass ForceCommand di OpenSSH sshd

Memungkinkan perintah sewenang-wenang untuk dijalankan pada mesin DHCP client.

Dalam artikel berikutnya, kita akan melihat bagaimana untuk mendirikan laboratorium kita sendiri dan menunjukkan bagaimana untuk mengeksploitasi rentan OpenSSH dan Apache server.



Komentar