Jak załatać lukę w zabezpieczeniach Shellshock na przestarzałym systemie Ubuntu, którego nie mogę zaktualizować?


22

Mam system, którym administruję zdalnie (w odległości 2 stref czasowych), na którym działa Ubuntu 9.04, Jaunty. Z różnych powodów, głównie dlatego, że jestem naprawdę ostrożny z próbą przeprowadzenia aktualizacji dystrybucji z tak daleka, nie mogę zaktualizować jej do nowszej wersji. Oczywiście nie jest już obsługiwany i nie ma żadnych oficjalnych łatek. Czy są dostępne instrukcje dotyczące sposobu łatania kodu i ponownej kompilacji bash, aby usunąć luki w zabezpieczeniach?


5
Jakie badania przeprowadziłeś na ten temat? Najprostszym rozwiązaniem byłoby samodzielne przebudowanie i załatanie. Być może będziesz musiał to zaakceptować, aby po prostu zaktualizować serwer.
— Ramhound,

Tak, to moja opcja rezerwowa. Serwer jest w drodze do wyjścia, staram się tylko, aby kulejąc, dopóki nie pojawią się fundusze na jego wymianę. Gdybym był na miejscu, ugryzłbym kulę i wykonał aktualizację, ale bardzo rzadko robię to bez żadnych problemów i bez możliwości włożenia w to ręki wolałbym nie ryzykować, jeśli nie mam do.
— Claus

Tylko kilka słów kluczowych na stronie, aby ludzie mogli to znaleźć. Pracowałem także dla systemu Mac, OS X, Mavericks na podstawie testu opublikowanego na stronie arstechnica.com/security/2014/09/…

1
pozostaw to niezałatane, „utykając” szybko się zmieni. Wyraźnie, używasz dystrybucji, która pojawiła się pięć lat temu . Pomoc zakończyła się w październiku 2010 r. Masz wiele innych luk w zabezpieczeniach, o które musisz się martwić.
— tedder42

Odpowiedzi:


29

Ukradnij to od AskUbuntu , od kogoś, kto ukradł to z Hacker News. Pracowałem dla dwóch starych serwerów

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

Aktualizacja: Właśnie zauważyłem, że jeśli nie dodasz --prefix=/do komendy config, skończysz na /usr/local/bin/bashtym, że jest aktualna i /bin/bashnadal będzie podatna na ataki.


W skrypcie występuje błąd: sekwencja „0 25” powinna wynosić „1 26”. Jeśli czytasz to i możesz edytować odpowiedź, zaktualizuj ją. Dzięki!
— joelparkerhenderson

Chociaż ./configure --prefix=/ && makeprzebiega dobrze, make installwydaje się, że wymagasudo
— Stewart

Dziękujemy za udostępnienie tego - uczciwy sposób na załatanie różnych rzeczy podczas migracji. Niektórzy ludzie mają wiele vms i ich odbudowanie nie jest realistyczne. Kluczem jest wykorzystanie tego jako natychmiastowej poprawki przy rozwiązywaniu go w dłuższej perspektywie poprzez aktualizację instalacji.
— Jas Panesar

@ rubo77 Musi być teraz 1 27 (nowy patch 27 jest najważniejszy)
— joelparkerhenderson

1
Dodano łata 28. To nie wydaje się, aby naprawić usterkę, CVE-2014-7186 / 7187.
— unkilbeeg

2

Istnieje również rozwiązanie polegające na aktualizacji twojego source.list do najnowszego, a następnie za pomocą apt-get, aby zaktualizować tylko bash. Jest to bardzo szybkie i napisałem o tym artykuł . Oto, co właściwie robisz:

Uaktualnij do najnowszych zaufanych repozytoriów apt-get Ubuntu (w razie potrzeby możesz także zmienić adresy URL old-repositories.ubuntu.com, sprawdź link):

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

Upgrade bash / Apply fix:

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

I ewentualnie zmień z powrotem repozytoria apt-get.


Działa idealnie!
— Peter Kruithof

-1

Polecenie powinno być

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

2
To nie pomoże; jak powiedział OP, nie jest już obsługiwany, więc nie będzie aktualizacji dla bash.
— Andrew Ferrier

-3

Jedną z prostych opcji jest po prostu nie używanie bash. Upewnij się, że dashjest zainstalowany i /bin/shjest to dowiązanie symboliczne dash, a nie bash. (Jest to ustawienie domyślne w niektórych wersjach Debiana, ale nie jestem pewien co do Ubuntu.) Jeśli masz konta użytkowników dla dostępu ssh z wymuszonymi poleceniami, musisz również zmienić ich powłoki logowania. Być może będziesz musiał sprawdzić, czy nie ma żadnych skryptów, używając jawnie bash; grepping dla #!/bin/bashpowinni je znaleźć.


5
To trochę jak powiedzenie: „odkryliśmy, że możesz mieć
— błędy segregacyjne

3
Bliższą analogią byłoby powiedzenie komuś, kto ma błąd w GCC, aby spróbował zadzwonić. Oba implementują ten sam język (z różnymi, ale czasami nakładającymi się zestawami niestandardowych rozszerzeń) i jest mało prawdopodobne, że faktyczna potrzeba to „bash”, a raczej „interpretera powłoki”.
— R ..

Tak jak powiedziałeś, istnieją skrypty, które mogłyby jawnie używać bash. Nawet jeśli grepujesz za istniejącymi plikami używającymi bash, w przyszłości ktoś może dodać nowy skrypt do systemu, który używa basha jawnie. To samo dotyczy systemów wbudowanych, które używają busyboksa (/ bin / sh wskazuje na busyboksa), ale mają również zainstalowane bash. Najlepszą rzeczą jest aktualizacja bash w podatnych systemach.
— jcarballo

Większość skryptów Unix / Linux wymaga bash lub innej nowoczesnej powłoki, takiej jak ksh lub zsh. Mają one wiele funkcji, których ludzie oczekują w dowolnym języku, ale nie są obecne w powłokach typu „bare-bone”, takich jak (BusyBox) ash / Dash / sh (wersja oryginalna). Te prostsze powłoki mają tylko 20-30% funkcjonalności większych powłok, co czyni je szybszymi. Wymagają one jednak szerokiego użycia zewnętrznych narzędzi do wielu typowych operacji, takich jak zaawansowana obsługa ciągów i dopasowywanie wzorców. Bash i takie mogą popiół itp. skrypty. Ale nie na odwrót.
— DocSalvager,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.