Mengingat bahwa Bash 3.2 (versi yang dikirim oleh OS X) rentan terhadap eksploitasi eksekusi jarak jauh yang dikenal sebagai "Shell Shock" ( CVE-2014-6271 dan CVE-2014-7169 ) bagaimana cara membangun kembali Bash dan mengamankan sistem saya sebelum tambalan resmi Apple?
UPDATE: Perhatikan bahwa Apple sekarang telah merilis tambalan resmi. Lihat di bawah untuk detailnya.
Jawaban:
Status
Apple telah merilis perbaikan keamanan Bash untuk Shellshock dan kerentanan terkait sebagai " OS X bash Update 1.0 ". Mereka dapat diinstal melalui pembaruan sistem normal untuk orang yang menggunakan OS X Mountain Lion v10.8.5 atau OS X Mavericks v10.9.5 (mereka termasuk dalam Pembaruan Keamanan 2014-005 ) dan juga dapat diinstal secara manual. Perbaikan Apple resmi juga tersedia untuk OS X Lion v10.7.5 dan OS X Lion Server v10.7.5 tetapi hanya tersedia melalui unduhan manual. Perbaikan keamanan tersedia melalui berbagai URL berdasarkan versi sistem operasi:
(Jika tambalan baru dirilis, taruh di sini tapi tolong simpan tambalan yang ada ini juga untuk referensi.)
Patch Apple menangani Shellshock dan beberapa kerentanan lainnya dan baik untuk kebanyakan orang. tl; dr orang dapat berhenti membaca di sini.
NAMUN, perhatian yang ditarik ke bash oleh bug Shellshock telah menyebabkan banyak peneliti memperhatikan bash dan semakin banyak kerentanan (sulit dieksploitasi) terus ditemukan. Jika Anda sangat khawatir tentang keamanan (karena mungkin Anda menjalankan OS X Server untuk meng-host situs web yang tersedia untuk umum) maka Anda mungkin ingin (mencoba untuk) mengikuti kerentanan dan tambalan saat mereka terus bergulir dengan menyusun bash sendiri. Kalau tidak, jangan khawatir tentang itu.
Cari Apple untuk merilis pembaruan lain untuk bersenang-senang di masa depan ketika debu mulai menemukan kerentanan lebih lanjut.
Seperangkat tambalan resmi dari bash sendiri untuk bash 3.2, tambalan 52, 53, dan 54 (yang terkait dengan patch Bash 4.3 25, 26, dan 27) tersedia yang memperbaiki CVE-2014-6271 dan CVE-2014-7169, serta 'Game over' yang ditampilkan di bawah ini. Ini telah diuji oleh saya ( @alblue ) dan pos telah diperbarui sesuai (dan kemudian pembaruan tambahan dibuat: lihat revisi 41 untuk posting yang berhenti di patch 54).
Banyak kerentanan tambahan telah dilaporkan terhadap bash. Menurut posting Michal Zalewski jika Anda memiliki patch 54 (dan mungkin patch resmi Apple) "tidak ada gunanya terobsesi tentang status bug individu ini, karena mereka seharusnya tidak lagi menimbulkan risiko keamanan:"
CVE-2014-6271 - RCE asli ditemukan oleh Stephane. Diperbaiki oleh bash43-025 dan entri 24 Sep yang sesuai untuk versi lain.
CVE-2014-7169 - bug pembuatan file / token yang ditemukan oleh Tavis. Diperbaiki oleh bash43-026 & co (26 Sep)
CVE-2014-7186 - mungkin 10+ kecelakaan di sini-tanpa risiko yang ditemukan oleh Florian dan Todd. Diperbaiki oleh bash43-028 & co (1 Oktober).
CVE-2014-7187 - off-by-one yang tidak menabrak, mungkin tanpa risiko ditemukan oleh Florian. Diperbaiki oleh bash43-028 & co (1 Oktober).
CVE-2014-6277 - masalah memori tidak diinisialisasi, hampir pasti RCE ditemukan oleh Michal Zalewski. Belum ada tambalan spesifik.
CVE-2014-6278 - perintah injeksi RCE ditemukan oleh Michal Zalewski. Belum ada tambalan spesifik.
Itu jadi sangat membingungkan. Untungnya Chet Ramey, pengelola bash resmi, memasang CVE untuk memetakan pemetaan . Posnya merujuk ke tambalan untuk bash 4.3, I (@OldPro) telah menerjemahkannya ke tambalan untuk bash 3.2, yang merupakan apa yang berlaku untuk OS X. Juga, karena posting ini ia telah merilis tambalan 57, jadi saya menambahkannya di bawah:
Lihat posting David A. Wheeler untuk garis waktu dan detail yang lebih besar.
@alblue memposting instruksi pembangunan melalui patch 55. I (@OldPro) menambahkan patch 56 dan 57 pada instruksi tetapi belum mengujinya.
Menguji Kerentanan asli
Anda dapat menentukan apakah Anda rentan terhadap masalah asli di CVE-2014-6271 dengan menjalankan tes ini:
Output di atas adalah contoh dari versi yang tidak rentan
bash
. Jika Anda melihat katavulnerable
dalam output dari perintah itu, Andabash
rentan dan Anda harus memperbarui. Di bawah ini adalah versi yang rentan dari OS X 10.8.5:Menguji Kerentanan baru
Telah ada pembaruan untuk posting asli dan Bash 3.2.52 (1) masih rentan terhadap variasi kerentanan, didefinisikan dalam CVE-2014-7169
Output di atas adalah contoh dari
bash
versi yang rentan . Jika Anda melihat tanggal di output dari perintah itu, Andabash
rentan.Menonaktifkan fungsi yang diimpor otomatis untuk mencegah "Game Over"
Peneliti mencatat, tanpa mengklasifikasikannya sebagai kerentanan, bahwa skrip dapat membajak suatu fungsi dalam subkulit menggunakan fungsi yang diimpor otomatis:
Kode di atas pada sistem yang terpengaruh akan menampilkan
Game Over
alih-alih daftar direktori yang Anda harapkanls
. Jelas,echo 'Game Over'
bisa diganti dengan kode jahat yang Anda inginkan. Ini menjadi dikenal sebagai bug "Game Over".Sebelum ketersediaan patch 54, baik NetBSD dan FreeBSD menonaktifkan fungsi bash auto-importing secara default, sebagian untuk mencegah "Game Over" tetapi terutama untuk mengandung kesalahan lebih lanjut dalam parser (seperti CVE-2014-7169 ) karena mereka adalah terus ditemukan, dan menambahkan bendera baris perintah baru
--import-functions
untuk mengaktifkan kembali perilaku default lama. Saya (@blue) telah menyiapkan tambalan (terhadap 3.2.53) untuk digunakan orang lain jika mereka juga ingin mengadopsi perilaku ini dan memasukkannya di bawah. Secara default tambalan ini tidak diaktifkan di skrip build di bawah ini. Saya (@ OldPro) percaya bahwa tambalan ini tidak lagi diperlukan atau merupakan ide yang baik, karena ia merusak kompatibilitas ke belakang dan kerentanan yang dilindunginya ditangani dengan sangat baik oleh tambalan 54 dan tambalan sebelumnya, dan memungkinkan tambalan tidak resmi ini mencegah tambalan di masa depan tidak diterapkan. .(Catatan untuk mempertanyakan editor; harap jangan aktifkan ini secara default, karena ini merupakan patch tidak resmi.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
Patch dapat diaktifkan dengan menjalankan
export ADD_IMPORT_FUNCTIONS_PATCH=YES
sebelum menjalankan build. Perhatikan bahwa mengaktifkan tambalan ini akan menonaktifkan tambalan 54 dan tambalan di masa depan karena tambalan di masa depan tidak dapat dijamin kompatibel dengan tambalan tidak resmi.Apple Patch memiliki kerentanan Game Over, semacam
Seperti yang ditunjukkan oleh @ake_____ di twitter tambalan resmi Apple masih rentan terhadap penghancuran lingkungan yang dapat dieksekusi:
Pengguna harus memutuskan sendiri seberapa penting hal ini. Saya (@ OldPro) berpikir itu tidak perlu dikhawatirkan karena tidak ada eksploit yang diketahui untuk perilaku ini (bahkan tidak diberi pengenal CVE) karena pada umumnya penyerang jarak jauh yang tidak memiliki hak tidak dapat menetapkan nama variabel lingkungan dan penyerang dengan hak istimewa tidak dapat gunakan ini untuk mendapatkan hak istimewa yang belum mereka miliki (setidaknya tidak tanpa mengeksploitasi kerentanan tambahan).
Untuk memberikan sedikit latar belakang, bash memungkinkan Anda untuk mendefinisikan fungsi, dan selanjutnya memungkinkan Anda untuk mengekspor fungsi tersebut ke subkulit melalui
export -f
perintah. Ini dulu diimplementasikan dengan membuat variabel lingkungan dengan nama yang sama dengan fungsi dengan nilainya diatur ke definisi fungsi. BegituIni terjadi karena
export -f ls
menciptakan variabel lingkungan bernamals
. Kerentanan "Game Over" adalah Anda dapat secara langsung membuat variabel lingkungan ini tanpa harus terlebih dahulu mendefinisikan fungsi, yang berarti jika Anda bisa menyuntikkan nama variabel yang tepat, Anda dapat membajak sebuah perintah. Apple mencoba untuk memperbaikinya dengan membuatnya sulit untuk membuat variabel dengan nama yang tepat. Patch bash resmi (54) sebenarnya membuat tidak mungkin untuk membuat variabel dengan nama yang tepat dengan menggunakan nama variabel yang menyertakan%
karakter yang tidak diizinkan dalam nama variabel, secara efektif menempatkan definisi fungsi yang diekspor di ruang nama yang berbeda, disediakan.Jika tidak ada satu pun di atas yang masuk akal bagi Anda, jangan khawatir tentang hal itu. Anda baik-baik saja dengan patch Apple untuk saat ini.
Binari Sistem
OS X 10.9.5 (rilis stabil terbaru saat ini) dikirimkan bersama Bash v3.2.51:
Anda dapat memperoleh dan mengkompilasi ulang Bash sebagai berikut , asalkan Anda telah menginstal Xcode (dan telah menjalankan
xcodebuild
setidaknya satu kali sebelumnya untuk menerima lisensi):(Catatan: Anda dapat menjalankan ini dengan menyalin dan menempelkan blok kode di atas, masuk ke Terminal dan kemudian menjalankan
pbpaste | cut -c 2- | sh
. Selalu berhati-hati saat menjalankan skrip acak dari internet ...)Setelah ini, versi Bash harus v3.2.57:
Untuk keamanan, dan setelah pengujian, saya sarankan agar Anda
chmod -x
menggunakan versi lama untuk memastikan mereka tidak digunakan kembali, atau memindahkannya ke situs cadangan.Jawaban lain memiliki solusi untuk mereka yang menggunakan MacPorts atau Homebrew; ini tidak memperbaiki masalah, mereka hanya menginstal versi Bash tambahan. Silakan lihat jawaban-jawaban itu jika Anda ingin memutakhirkannya secara khusus.
Terima kasih
Terima kasih kepada Chet, yang menjaga bash, dan telah membuat tambalan ini tersedia. Terima kasih kepada semua orang yang telah mengomentari ini dan memperbaikinya seiring waktu.
Sekarang Apple telah merilis perbaikan nyata, meskipun ini mungkin masih berguna. Karena mereka hanya merilis perbaikan untuk Lion and up, dan tambalan resmi menyediakan GNU bash, versi 3.2.53 (1) -release (x86_64-apple-darwin13), namun, Game over bug masih agak rentan. Pada titik ini, membangun kembali versi Bash Anda sendiri terhadap 3.2.57 mungkin lebih aman daripada mengandalkan tambalan Apple, kecuali jika Anda salah melakukannya.
sumber
Macports
Ini memberi Anda versi bash 4.3.28 (1) yang menambal kedua kerentanan (CVE-2014-6271 dan CVE-2014-7169) serta beberapa yang kemudian ditemukan. Ini berguna jika Anda telah mengganti cangkang untuk menggunakan Macports bash untuk mendapatkan fitur versi 4.
Ini tidak akan menyelesaikan masalah skrip OS standar seperti yang dimiliki
#!/bin/sh
atau#!/bin/bash
sebagai baris pertama. Masalah seperti ini adalah mengapa Macports mencoba untuk tidak menggunakan versi program yang disediakan Apple karena Macports cenderung diperbarui lebih cepat misalnya memiliki versi bash yang lebih baru)Anda dapat menggunakan terminal ini seperti dalam jawaban Homebrew
Untuk menginstal macports ikuti petunjuk ini yaitu
1. Instal Xcode dan Alat Baris Perintah Xcode
2. Setuju untuk lisensi Xcode di Terminal: sudo xcodebuild -license
3. Unduh MacPorts pkg untuk versi OS X Anda: tautan ada di halaman
4. Jalankan pkg
Ketika Anda telah menginstal macports Anda perlu ke versi terbaru, ini dilakukan dengan menjalankan
dan kompilasi ulang atau dapatkan binari terbaru oleh
sumber
bash
biasanya berasal dari OS X - jadi perbaikan sistem, perbaikan Homebrew dan MacPorts. Mungkin Fink juga. Saya pribadi lebih suka jika ini dibuat sebagai edit untuk jawaban @ AlBlue. Jadi itu semua satu, paling benar, jawabannya.CATATAN mengenai Pembaruan Resmi Apple OS X 1.0: Pembaruan perangkat lunak ini hanya membawa versi resmi Apple bash ke 3.2.53. Revisi patch 3.2.54 menawarkan perubahan berikut:
Untuk pengguna yang telah menambal sistem dengan 3.2.54 binari, Anda dapat mengganti binari yang dikompilasi dengan patch Apple atau Anda dapat membiarkan hal-hal apa adanya tetapi tidak disarankan. Meskipun Apple meninggalkan versi biner mereka di 3.2.53, Apple patch DOES berisi perbaikan untuk tes exploit di bawah ini:
env X='() { (a)=>\' sh -c "echo date"; cat echo
Ini berarti bahwa biner resmi Apple 3.2.53 berisi keamanan yang setara dengan biner GNU 3.2.54 vanilla. Suatu titik kebingungan yang tidak menguntungkan, tetapi memang demikianlah adanya. Perbaikan Apple tidak setengah matang. Tampaknya menjadi perbaikan lengkap untuk masalah ini. Dengan demikian, peta jalan di bawah ini untuk mengkompilasi vanila
bash
dansh
dari sumber GNU harus dianggap sebagai artefak bersejarah dan mungkin dikonsultasikan sebagai templat untuk cara melakukan tambalan di masa depan jika diperlukan.CATATAN: Dengan sumber GNU vanilla,
sh
memiliki masalah elevasi hak istimewa yang menyebabkan kegagalan di berbagai installer, misalnya, Adobe Flash. Saya sangat merekomendasikan untuk tetap menggunakan binari Apple-patched. Pertimbangkan skema tambalan ini sudah usang dan keliru.Ada tambalan GNU bash 3.2.55 baru yang menjelaskan perbaikan berikut:
Kami serahkan kepada pembaca yang lembut untuk menentukan apakah akan duduk dengan binari resmi Apple yang ditambal atau menggulung milik Anda untuk menangani kemungkinan eksploitasi baru. Secara pribadi, saya akan tetap menggunakan binari Apple.
Posting ini merinci cara mengkompilasi dan menginstal vanila
bash
dansh
pada OS X. Saya memilih rute ini sebagai contoh berikut merinci menggunakan sumber khusus Apple tidak meninggalkan saya dengan revisi patch yang benar. YMMV. Instalasi vanilla ini, bagaimanapun, ditargetkan untuk menggantikan binari OS X sehingga ketika Apple akhirnya merilis pembaruan keamanan, penggantian vanilla ini akan diambil alih oleh rekan-rekan Apple mereka yang tepat.Konfigurasi basis saya adalah:
OS X Lion 10.7.5 dan Xcode 4.6.3 dengan semua utilitas baris perintah terpasang.
Langkah saya untuk memperbaikinya adalah:
Unduh kode sumber bash dasar untuk 3.2.48 dari:
https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz
Unduh patch bash3.2.49, .50, .51, .52, .53, .54 dan .55 dari:
https://ftp.gnu.org/gnu/bash/bash-3.2-patches/
Saya menyimpannya sebagai $ filename.patch, misalnya, bash3.2.50.patch.
CD ke direktori unduhan Anda dan ...
Buka paket cabang sumber utama:
Dengan asumsi bahwa Anda telah mengganti nama file tambalan yang diunduh seperti dijelaskan sebelumnya,
Kemudian …
Ini harus menunjukkan tambalan yang sukses dari berbagai file. Jika tidak, bersiaplah untuk melakukan eksplorasi dan investigasi.
Lanjut:
Itu pada dasarnya mendukung bash dan sh shell lama dan rentan Anda serta menghapus hak istimewa yang dapat dieksekusi. Itu memberi Anda kapasitas untuk mengembalikan perintah yang diperlukan, tetapi menghilangkan kemampuan mereka untuk melakukan kerusakan sementara itu.
Lanjut:
Ini harus mengkonfigurasi, mengkompilasi dan menginstal binash bash baru ke / bin dengan benar. Setelah selesai, keluar dari Terminal dan buka kembali.
Anda harus, semua hal bahagia dan tersenyum, dapat
bash --version
dan sekarang melihat 3.2.55, misalnya:Output tepat dalam perintah di atas akan berbeda tergantung pada versi OS X Anda.
Anda juga harus dapat menguji kerentanan Anda
bash
dan menemukan bahwa itu baik-baik saja.CATATAN: Kami hanya memperbaiki bash sejauh ini, tetapi
/bin/sh
executable masih dalam kondisi rentan. Hanya menyalinbash
di atassh
adalah gaya Linux dalam melakukan sesuatu.sh
Implementasi OS X memiliki beberapa perbedaanbash
, jadi Anda harus menyeret keluar lagi kompiler. Informasi lebih lanjut tentang bagaimanabash
dansh
perbedaan dalam OS X dapat ditemukan di sini:https://apple.stackexchange.com/a/89327/91441
Di direktori unduhan Anda lakukan:
Di editor favorit Anda, buka file
Makefile.in
dan gulir ke baris 99. Kita akan mengubah baris Program sehingga biner yang kita hasilkansh
bukannyabash
seperti:Simpan itu lalu
Sekarang Anda akan membangun
sh
hampir persis seperti Apple.Satu catatan terakhir: Pada beberapa (semua?) Sistem, Apple biasanya menempatkan
bashbug
executable/usr/bin
. Kompilasi kami akan memasukkannya ke dalam/bin
. Jadi, langkah terakhir di sini:sumber
READLINE_LIB = /usr/local/lib/libreadline.a
dan lakukan kompilasi bersih. Kemudian cabut dan salin biner bash baru di atas/bin/bash
dan/bin/sh
HISTORY_LIB = /usr/local/lib/libhistory.a
. Jika tidak, bash akan ditautkan secara dinamis ke versi libhistory / usr / local.bash
entah bagaimana gagal berperilaku sendiri hanya karena kernelnya berbeda. Bagaimanapun, saya menganggap solusi saya bersifat sementara; akhirnya, Apple akan memperbaiki masalah dan biner yang saya susun akan diganti (yang merupakan alasan utama saya untuk mengompilasi/bin
di tempat pertama.Bagi siapa pun yang kesulitan mengkompilasi dari sumber, pada tanggal 29 September, Apple telah secara resmi merilis patch untuk Mac OS X 10.9.5, 10.8.5 dan 10.7.5:
sumber
Pertama, menambal bash dan sh untuk kerentanan ini kemungkinan akan mematahkan beberapa skrip di Mac Anda. Anda benar-benar tidak perlu melakukan ini kecuali Anda menawarkan layanan web ke internet publik langsung dari Mac Anda. Jadi jika itu benar-benar tidak perlu, tunggu sampai ada pembaruan keamanan resmi dari Apple.
Diperingatkan, berikut adalah beberapa petunjuk tentang cara melakukan pembaruan ini menggunakan Brew on Mavericks 10.9.
Pertama konfirmasikan bahwa Anda menggunakan bash kedaluwarsa:
Bash terbaru adalah 4.3.25
Jika Anda belum menginstal Xcode, Anda memerlukan alat-alat baris perintah Xcode, yang dapat diinstal oleh
Atau dari portal pengembang .
Untuk menginstal Brew ( http://brew.sh ):
Lalu lakukan:
Ikuti instruksi apa pun jika ada masalah. Banyak masalah umum dibahas di sini .
Kemudian perbarui minuman ke daftar paket terbaru:
Untuk mendapatkan bash 4.3.25 terbaru:
Ini menginstal bash ke
/usr/local/Cellar/bash/4.3.25/bin/bash
Yang lama
bash
dansh
masih ada di/bin
, jadi setelah menginstal Anda akan mengubah nama executable lama ke file baru.Jika Anda sangat paranoid, Anda dapat menghapus izin eksekusi di
bash_old
Kemudian buat tautan simbolis ke bash 4.3.25 baru yang dibuat bir.
Mulai ulang dan selesai.
Peringatan - ini dapat memecah beberapa skrip shell yang ada yang mungkin bergantung pada bash 3.2 atau perbedaan yang dimiliki Mac
sh
atas linuxsh
. Ada jawaban yang jauh lebih canggih untuk mengganti bash dan sh dari sumber, dari jawaban oleh @TraneFranks di utas yang sama ini.sumber
/bin/bash
dan/bin/sh
yang kemungkinan akan menyebabkan lebih sedikit masalah daripada memutakhirkan ke pesta terbaru Brew.OS X 10.6.8 - Snow Leopard
Posting @AlBlue sangat lengkap. Namun, pada server OS X 10.6.8 saya perbaikannya tidak akan berfungsi. Apple tidak memiliki fix untuk 10.6.8 dan langkah-langkah yang dijelaskan oleh @AlBlue tidak bekerja dengan Xcode 3.2.6 (yang merupakan versi terbaru untuk Snow Leopard). Saya menerima kesalahan:
Untuk alasan ini saya menggunakan brew.sh . Silakan komentar pikiran Anda ketika Anda memiliki solusi yang lebih baik untuk OS X 10.6.8 Snow Leopard. Lihat juga komentar @Jerome, ia memiliki patch yang sukses di OS X 10.6.8 Snow Leopard menggunakan solusi @ AlBlue. Bagaimanapun:
Instal brew terlebih dahulu dengan oneliner berikut:
Memperbarui
brew
Sekarang cukup instal versi terbaru
bash
dan ganti yang sekarang:Anda dapat mengatur shell login default '
Command (complete path)
' untuk Terminal.app di preferensi ( Command,)Catatan: Dalam komentar beberapa pengguna tidak menganggap metode ini tepat. Tetapi bagi saya ini adalah satu-satunya metode yang dapat dipahami untuk meningkatkan BASH pada OS X 10.6.8 Snow Leopard.
sumber
sh
juga - Anda perlu melakukannya juga./bin/sh
! =/bin/bash
. Banyak alat keluar/bin/sh
ketika Anda menjalankan perintah sistem.system()
Panggilan Ruby , misalnya, digunakan/bin/sh
ketika Anda memiliki karakter ekspansi shell yang perlu diperluas dalam string. Anda memainkan permainan yang kalah menggunakan Homebrew untuk memperbarui binari sistem Anda IMO. Anda harus memperbarui Homebrewbash
selain melakukan pembaruan yang tepat dari sistem binari.xcodebuild
? Jika demikian, saya tidak mengalaminya. Saya punya beberapa saran yang solid untuk Anda sisihkan: periksa apakah Anda memiliki banyak bash build, pertimbangkan untuk membersihkan (brew uninstall) dan mungkin menginstal ulang xcode ... kemudian mulai proses patch lagi.Anda dapat mengikuti instruksi di sini: https://github.com/tjluoma/bash-fix Pada dasarnya, lakukan hal berikut di Terminal:
sumber