سؤال ما هي ثغرة bave CVE-2014-6271 (Shellshock) وكيف يمكنني إصلاحها؟


في الآونة الأخيرة ، كانت هناك أنباء مستمرة حول "CVE-2014-6271" (انظر USN-2362-1) ، وهي نقطة ضعف في Bash. كيف أعرف ما إذا كنت متأثراً بهذا ، كيف يمكنني إصلاحه ، ولماذا يجب أن أهتم؟

تم تصميم هذا كإجابة أساسية لهذه الثغرة الأمنية ، نظرًا لنطاقها وشدتها.


140
2017-09-24 21:48


الأصل


"كيف أصلحه؟" -> فقط قم بتشغيل مدير الترقية الخاص بك! حقا ، أوبونتو بتحديثات الأمان ، هناك فريق أمني مخصص. من فضلك لا ترسل إجابات حول بناء باش من المصدر!. انها معقدة بلا داع وأصعب للحفاظ على النظام الخاص بك في المستقبل. - gertvdijk
بالإضافة إلى ذلك ، أيضًا CVE الإضافية للإصلاح غير المكتمل. CVE-2014-7169 - gertvdijk
رجاء فعل نشر إجابات حول البناء من المصدر. وسواء كان يجب عليهم ذلك أم لا ، فإن بعض الأشخاص لديهم خوادم أوبونتو القديمة ، وقد يكون البناء من المصدر هو الخيار الوحيد المتاح لهم. - GaryO
عفوا ، آسف أدركت فقط أنا وضعت باش بدلا من اندفاع في الاختبار. ناهيك عن ما يرام. - Matt H
اقرأ: oss-sec: Re: CVE-2014-6271: remote code execution by bash. لا يزال علة باش ثابتة - blade19899


الأجوبة:


ما هو باش؟

Bash هو الغلاف التفاعلي الافتراضي في Ubuntu. عند اتصالك بالطرف (إما من خلال محاكي الطرفيات أو عبر tty أو ssh) ، فإنك عادة تكتب الأوامر التي bash سوف يقرأ وينفذ. حتى إذا كنت لا تستخدم المحطة على الإطلاق ، فلا يزال لديك باش.

على أوبونتو ، /bin/sh ليس باش (إنه اندفاعة). يتأثر فقط bash بهذه الثغرة الأمنية.

كيف يؤثر على استغلال لي؟

باش ونظام التشغيل تتبع مجموعة من متغيرات البيئة التي تصف مستخدم الدخول الحالي ، حيث تبحث عن البرامج الموجودة على القرص الثابت ، ووظائف أخرى مماثلة. عن طريق صياغة متغير بيئة بهيكل معين ، قد يتمكن المهاجم من تنفيذ التعليمات البرمجية في المرة التالية التي يبدأ فيها Bash.

يمكن للمهاجم تعيين متغير البيئة هذا بطرق متعددة:

  • الاتصال عن بعد بخدمة مثل SSH مع إعداد معين مثل git over ssh. كما يحذر ميتير ، واستخدام sshd ForceCommand الخيار هو ناقلات الهجوم. لا تتأثر الحسابات التي لا تتعرض صدفة لها.
  • خداعك في وضع متغير البيئة.
  • مما تسبب في برنامج آخر لتعيين متغير بيئة لجعل تلك القيمة الحرفية. على سبيل المثال ، قد يكون لديك خادم ويب وبرنامج نصي يحتاج إلى تعيين متغير بيئة مع محتوى مستخدم محدد. حتى إذا كان هذا النص البرمجي يخلق نفسه ، ولا يلمس متغيرات البيئة الأخرى ، فهذا يكفي. متغير بيئة واحدة مع أي اسم وقيمة وضعت ما يكفي لاستغلال النجاح.
  • طرق أخرى لم أذكرها هنا.

بمجرد تعيين هذا المتغير ، في المرة القادمة bash يفتح ل أي السبب ، سيتم تشغيل رمز المهاجم الخاص بك. هذا مخيف بشكل خاص sudo -sلأنه يولد bash باعتباره المستخدم المتميز (وهو عبارة عن قاعدة مستخدم إدارية لديها ممتلئ السيطرة على بيانات وبرامج الكمبيوتر الخاصة بك). حتى في حالة بدء bash كمستخدم قياسي فقط ، يمكن حذف ملفات هذا المستخدم.

من المهم ملاحظة أنه حتى إذا لم تستخدم باش بنفسك ، فإن العديد من البرامج سوف تفرخها بنفسها كجزء من عملها. حتى في هذه الحالة ، أنت ضعيف. ومع ذلك ، أوبونتو /bin/sh ليس bash ، لذلك تتأثر فقط البرامج التي تستدعي bash بشكل واضح وليس shell البرمجة الافتراضية.

وفقا لميتير:

المتجهات التي تتضمن ميزة ForceCommand في OpenSSH sshd ، mod_cgi و mod_cgid modules في Apache HTTP Server ، البرامج النصية التي يتم تنفيذها من قبل عملاء DHCP غير محددة ، وحالات أخرى تحدث فيها البيئة المحيطة عبر حدود الامتياز من تنفيذ Bash.

هل أنا ضعيف؟

استخدم dpkg للتحقق من إصدار الحزمة المثبتة:

dpkg -s bash | grep Version

هذا سوف ابحث عن المعلومات الخاصة بك bash حزمة ، وتصفية الإخراج لتظهر لك فقط الإصدار. الإصدارات الثابتة هي 4.3-7ubuntu1.4، 4.2-2ubuntu2.5و 4.1-2ubuntu3.4.

على سبيل المثال ، أرى:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4

ويمكن تحديد أنني لست عرضة للخطر.

كيف يمكنني التحديث؟

سيقدم لك مدير التحديث القياسي هذا التحديث. هذا هو مثال رئيسي على أهمية التحديثات الأمنية ، بغض النظر عن نظام التشغيل الذي تستخدمه أو مدى صيانته.

ال نشرة USN تنص على أنه تم إصدار إصدارات جديدة لـ Ubuntu 14.04 Trusty Tahr، 12.04 Precang Pangolin، and 10.04 Lucid Lynx. إذا لم تكن على أحد إصدارات LTS هذه ، ولكن على إصدار حديث إلى حد معقول ، فستتمكن على الأرجح من العثور على حزمة مصححة.

أولاً ، تحقق مما إذا كنت

إذا كنت معرضًا للخطر ، فيجب أولاً انتزاع قوائم الحزم الأحدث:

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

يقوم الأمر الأول بالتأكد من أن لديك قائمة الحزم الأحدث التي تتضمن الإصدار الثابت ، ويقوم الأمر الثاني بتثبيت أحدث إصدار (ثابت) من bash.

على الرغم من أن الخطأ لا يظهر إلا عندما يتم عرض bash ، إلا أنه من المستحسن إعادة التشغيل على الفور إذا كان ذلك ممكنًا.


127
2017-09-24 21:48



آسف، أنت ضعيف. لا يعمل التصحيح الأصلي على إصلاح المشكلة بالكامل. نرى cve.mitre.org/cgi-bin/cvename.cgi؟name=CVE-2014-7169 AFAIAA ، هناك حاليا لا إصلاح متاح للجمهور. انظر على سبيل المثال people.canonical.com/~ubuntu-security/cve/pkg/bash.html - Mormegil
hexafraction أين تقرأ أن 12.10 يتلقى تحديثا لهذا؟ لا أعتقد ذلك، 12.10 ، 13.04 ، 13.10 هي نهاية حياة كبيرة جدًا! وأيضا ، مستودعات backport هي لا تستخدم لتحديثات الأمان. - gertvdijk
لا ، لا يفعلون! هذا هو بيت القصيد من نهاية الحياة: لا يوجد دعم على الإطلاق بعد الآن. - gertvdijk
@ MichaelHärtl إذا كنت تستخدم Ubuntu 12.10 ، يمكنك تنزيل إصدار 12.04 من bash من packages.ubuntu.com/precise/bash وتثبيته يدويًا. - David
إصلاح لـ CVE-2014-7169 يتوفر في مدير التحديث (بالنسبة لي). - Calmarius


سرق هذا من cft أكثر في هاكر نيوز. إذا كان لديك مشكلة مع repos مثلي (Odroid-XU) ، فإن هذا يجب أن تعمل بشكل جيد إذا كنت ترغب في التصحيح / بناء من المصدر.

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR

ثم اركض:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

وإذا حصلت على:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

إذن فأنت بخير!


تحذير: سيجعل تثبيت تثبيت باش في /usr/local/bin، وبالتالي /bin/bash لا يتم تعديلها ويمكن استحضارها من حليقة!


27
2017-09-25 02:30



في ما يلي كيفية إنشاء bash 3.2 مع التصحيح على debian lenny: gist.github.com/mattwhite/86de50d30134129e44ef - Matt White
-1. لا حاجة للبناء من المصدر. يحتوي Ubuntu على تصحيح أمان في المستودعات. إذا كان لديك "مشاكل مع الريبو الخاص بك" ، إصلاح ذلك بدلاً من ذلك. من المرجح أنك عرضة للعديد من الطرق إذا لم تتلقى ترقيات أمان! - gertvdijk
@ مات وايت شكرا لك! أنت فقط أنقذني بضع ساعات :) - Florian Fida
FlorianFida هذا هو AskUbuntu! من المتوقع أن يقوم الجميع على هذا الموقع بنشر إجابات في نطاق استخدام Ubuntu. - gertvdijk
@ MichaelHärtl 12.10 هو نهاية عمرها. لا تتلقى أي تحديثات أمنية بعد الآن منذ وقت طويل بالفعل. تطوير!!! - gertvdijk


ملاحظة: تم إصدار تصحيح الأمان الخاص بـ CVE-2014-7169 كتحديث أمان قياسي. ليست هناك حاجة لإضافة بوبا إضافية لتلقي هذا التصحيح. مطلوب فقط التالية.

sudo apt-get update

sudo apt-get upgrade

للتأكد من تصحيح bash بشكل صحيح ، قم بتشغيل الأمر التالي

dpkg -s bash | grep Version

إذا كنت في 14.04 LTS ، يجب أن ترى مخرجات من:

Version: 4.3-7ubuntu1.4

إذا كنت في 12.04 LTS ، يجب أن يكون الناتج:

 Version: 4.2-2ubuntu2.5

9
2017-09-25 18:30



كان هذا صحيحًا ، ولكن تم توفير تصحيح رسمي الآن ، لذا تم إصدار التحديث الأمني. وبالتالي لم تعد هذه الخطوات ضرورية. - Robie Basak
هذا صحيح. سأقوم بتحرير ما ورد أعلاه. شكرا لكم. - branch.lizard


إذا كنت تستخدم الإصدار 11.04: استخدم الخطوات التالية (التي عملت من أجلي)

cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done

إذا لم يتم تحميل باتش المطلوبة ثم تثبيت حزمة بروتوكول نقل الملفات

apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install

لمعرفة ما إذا كان التصحيح قد تم تطبيقه:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

1
2017-09-25 17:13





أنا باستخدام Natty 11.04 ، وهو EOL (ولقد قمت بتحديث /etc/apt/sources.list لاستخدام old-releases.ubuntu.com) ، لذلك لا بد لي من بناء من المصدر. كنت أرغب في بناء .deb ، فعلى الأقل فإن إدارة الحزمة هي "تدرك" أن إصدار bash ليس الإصدار الافتراضي. أنا لست ناجحًا بنسبة 100٪ - ومع ذلك ، يتم تسجيل الحزمة كـ "الأحدث" و bash ثنائى ينتهي ثابت ، حتى هنا ما فعلته:

apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/

الآن ، في الدليل (الفرعي) bash-4.2/، هناك: ملف bash-4.2.tar.xzالتي تحتاج إلى تفكيك للوصول إلى bash مصدر؛ ودليل فرعي يسمى debian.

لقد أجريت التغييرات التالية لتجنب الاعتماد عليها texlive: في bash-4.2/debian/control:

Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
 debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript

... و في bash-4.2/debian/rules:

binary-doc: bash-install #bash-doc-build
        dh_testdir
        dh_testroot
        mkdir -p $(d_doc)/usr/share/doc/$(p)
        dh_installdocs -p$(p_doc) 
ifeq ($(with_gfdl),yes)
        #cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
        rm -f $(d_doc)/usr/share/doc-base/bashref
endif
        rm -f $(d_doc)/usr/share/info/dir*
        #cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
        #    $(d_doc)/usr/share/doc/$(p)/
        #dh_link -p$(p_doc) \
        #    /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
        #    /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
        dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
        ...

لتغيير الإصدار ، في هذا bash-4.2/ الدليل ، هل:

bash-4.2$ dch --local patchCVE

... واملأ الملاحظات في السجل عندما يطلب منك ذلك. هذا سيضمن أن .deb (والبيانات الوصفية ذات الصلة) تسمى (في حالتي) bash_4.2-0ubuntu3patchCVE1_i386.deb.

ثم يمكنك محاولة البناء مع dpkg-buildpackage -us -uc أو debuild أمر. ملاحظة - سيعمل أي منهما على إعادة تفريغ المصدر من الرمز البريدي - وبالتالي تجاوز أي بقع قد تكون لديك! لا يزال ، تشغيل واحدة من هذه مرة واحدة حتى يتم تفريغ المصدر وبنيت (لاحظ debuild قد لا تزال تفشل في نهاية المطاف بسبب texlive ، ولكن يجب أن تفريغ وبناء المصدر).

ثم ، تطبيق البقع. ملاحظة يجب عليك استخدامها -p1 هنا ، لأنك حاليا في bash-4.2/ دليل:

bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch 
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch 

ثم إعادة إنشاء نسخة مصححة عن طريق تشغيل:

bash-4.2$ fakeroot debian/rules build 

هذا من شأنه إعادة بناء الملف التنفيذي. لاختبارها:

bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"

لإنشاء ملفات .deb ، قم بتشغيل:

bash-4.2$ fakeroot debian/rules binary

سيؤدي هذا إلى حفظ ملفات .deb في الدليل الأصل؛ لسرد محتوياتها:

bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb

لتثبيت .deb:

bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb

ومع ذلك ، لسبب ما ، هذا .deb يحتوي على ثنائي unatched (؟!) ، لذلك اضطررت إلى القيام بالإضافة إلى القيام بما يلي:

bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/

... وبعد ذلك ، بدأ الاختبار يمر بشكل صحيح بالنسبة لي:

$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test

0
2017-09-28 10:16



السؤال: يوضح السؤال الأصلي 1 متجه هجوم محتمل كـ "البرامج النصية التي تم تنفيذها بواسطة عملاء DHCP غير محدد". ماذا يعني هذا؟ هل هذا يعني أن Ubuntu / sbin / dhclient <- ضعيف؟ - Bran
أعتقد أن العملاء غير المعنيين قد يعني ، أن أوبونتو لديه / sbin / dhclient مصاب ، والذي يقوم بعد ذلك بتشغيل الأوامر التي تؤدي إلى إطلاق برنامج bash scripting shellshock. هل هذا ما عملاء DHCP عرضة للهجوم؟ (نأمل أن يكون ذلك منطقيًا ، انظر رسالتي السابقة من 10 تشرين الأول) - Bran