Làm cách nào để vá lỗ hổng shellshock trên hệ thống Ubuntu lỗi thời mà tôi không thể nâng cấp?


22

Tôi có một hệ thống mà tôi quản trị từ xa (cách 2 múi giờ) chạy Ubuntu 9.04, Jasyy. Vì nhiều lý do, chủ yếu là tôi thực sự không hài lòng về việc cố gắng nâng cấp phân phối từ rất xa, tôi không thể nâng cấp nó lên phiên bản mới hơn. Rõ ràng là nó không còn được hỗ trợ và không có bất kỳ bản vá chính thức nào. Có hướng dẫn nào về cách tôi có thể vá mã và tự biên dịch lại bash để loại bỏ các lỗ hổng shellshock không?


5
Bạn đã làm nghiên cứu gì về chủ đề này? Giải pháp đơn giản nhất có thể là xây dựng lại và tự vá nó. Bạn có thể phải chấp nhận điều này chỉ đơn giản là thời gian để cập nhật máy chủ.
Ramhound

Vâng, đó là lựa chọn dự phòng của tôi. Máy chủ đang trên đường ra, tôi chỉ cố gắng giữ cho nó khập khiễng cho đến khi có tiền để thay thế. Tôi đã ở trên trang web, tôi đã cắn viên đạn và thực hiện cập nhật, nhưng tôi rất hiếm khi đi mà không gặp trở ngại, và không thể đặt tay lên nó, tôi không muốn mạo hiểm rằng nếu tôi không có đến.
Claus

Chỉ cần nhận được một số từ khóa trên trang để mọi người có thể tìm thấy điều này. Cũng làm việc cho tôi trên Mac, OS X, Mavericks dựa trên thử nghiệm được công bố tại arstechnica.com/security/2014/09/ Kẻ

1
không để lại nó, "khập khiễng" sẽ nhanh chóng thay đổi. Hãy thật rõ ràng, bạn đang sử dụng một bản phân phối xuất hiện năm năm trước . Hỗ trợ kết thúc vào tháng 10 năm 2010. Bạn có nhiều lỗ hổng hơn để lo lắng.
tedder42

Câu trả lời:


29

Lấy trộm cái này từ AskUbfox , từ một người đã đánh cắp nó khỏi Hacker News. Làm việc trên hai máy chủ cũ cho tôi

mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 28); do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 28);do patch -p0 < ../bash43-$i; done
#build and install
./configure --prefix=/ && make && make install
cd .. 
cd ..
rm -r src

Cập nhật: Tôi chỉ nhận thấy rằng nếu bạn không thêm --prefix=/vào lệnh configure, bạn sẽ kết thúc với /usr/local/bin/bashđiều đó được cập nhật và /bin/bashvẫn sẽ dễ bị tấn công.


Có một lỗi trong tập lệnh: chuỗi "0 25" phải là "1 26". Nếu bạn đang đọc và có thể chỉnh sửa câu trả lời, vui lòng cập nhật nó. Cảm ơn!
joelparkerhenderson

Trong khi ./configure --prefix=/ && makechạy tốt, make installdường như cần phải cósudo
Stewart

Cảm ơn bạn đã đưa nó ra khỏi đó - một cách công bằng để vá mọi thứ trong khi di chuyển. Một số người có nhiều vms và việc xây dựng lại từng người là không thực tế. Sử dụng điều này như là một sửa chữa ngay lập tức trong khi giải quyết lâu dài hơn bằng cách cài đặt cập nhật hơn là chìa khóa.
Jas Panesar

@ rubo77 Bây giờ cần là 1 27 (bản vá 27 mới là quan trọng nhất)
joelparkerhenderson

1
Đã thêm bản vá 28. Điều này không xuất hiện để khắc phục lỗ hổng CVE-2014-7186 / 7187.
unkilbeeg

2

Ngoài ra còn có một giải pháp cập nhật nguồn.list của bạn lên bản mới nhất và sau đó sử dụng apt-get để chỉ nâng cấp bash. Nó thực sự nhanh chóng và tôi đã viết một bài báo về nó. Đây là những gì bạn cơ bản làm:

Nâng cấp lên kho lưu trữ apt-get 'đáng tin cậy' mới nhất của Ubuntu (bạn cũng có thể phải thay đổi URL cũ-repose khu.ubfox.com nếu bạn sử dụng chúng, kiểm tra bài viết được liên kết):

sudo sed -i 's/YOUR_OS_CODENAME/trusty/g' /etc/apt/sources.list

Nâng cấp bash / áp dụng sửa lỗi:

sudo apt-get update
sudo apt-get install --only-upgrade bash

Và có thể thay đổi lại kho apt-get.


Làm việc hoàn hảo!
Peter Kruithof

-1

Lệnh nên

sudo apt-get update && sudo apt-get install --only-upgrade bash

2
Điều này sẽ không giúp đỡ; như OP đã nói, nó không được hỗ trợ nữa, vì vậy sẽ không có bản nâng cấp cho bash.
Andrew Ferrier

-3

Một lựa chọn đơn giản là không sử dụng bash. Hãy chắc chắn rằng dashđã được cài đặt và đó /bin/shlà một liên kết tượng trưng đến dash, không phải bash. (Đây là mặc định trên một số phiên bản Debian, nhưng tôi không chắc về Ubuntu.) Nếu bạn có tài khoản người dùng để truy cập ssh bằng các lệnh bắt buộc, bạn cũng cần thay đổi vỏ đăng nhập của chúng. Bạn cũng có thể cần kiểm tra bất kỳ tập lệnh nào rõ ràng bằng cách sử dụng bash; grepping cho #!/bin/bashnên tìm thấy chúng.


5
Điều đó hơi giống như nói, "chúng tôi thấy rằng bạn có thể có các phân tách trong C ++, chỉ cần sử dụng Java thay thế" ...
DevSolar

3
Một sự tương tự gần hơn sẽ nói với ai đó gặp lỗi trong GCC để thử clang. Cả hai đều thực hiện cùng một ngôn ngữ (với các bộ phần mở rộng không chuẩn khác nhau nhưng đôi khi chồng chéo) và không chắc rằng nhu cầu thực sự là "bash" mà là "trình thông dịch shell".
R ..

Giống như bạn đã nói, có những đoạn script rõ ràng có thể sử dụng bash. Ngay cả khi bạn grep cho các tệp tồn tại sử dụng bash, trong tương lai ai đó có thể thêm một tập lệnh mới vào hệ thống sử dụng bash một cách rõ ràng. Tương tự như vậy đối với các hệ thống nhúng sử dụng busybox (/ bin / sh points vào busybox), nhưng cũng đã cài đặt bash. Điều tốt nhất là cập nhật bash trong các hệ thống dễ bị tấn công.
jcarballo

Phần lớn các tập lệnh Unix / Linux yêu cầu bash hoặc một số shell hiện đại khác như ksh hoặc zsh. Chúng có rất nhiều chức năng mà mọi người đã mong đợi ở bất kỳ ngôn ngữ nào nhưng không có trong các vỏ "xương trần" như (BusyBox) ash / Dash / sh (bản gốc). Những chiếc vỏ đơn giản hơn này chỉ có 20-30% chức năng của những chiếc vỏ lớn hơn khiến chúng nhanh hơn. Tuy nhiên, họ yêu cầu sử dụng rộng rãi các tiện ích bên ngoài cho nhiều hoạt động phổ biến như xử lý chuỗi nâng cao và khớp mẫu. Bash và như vậy có thể chạy tro, et.al. kịch bản. Nhưng không phải là ngược lại.
DocSalvager
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.