2gusia (2gusia) wrote,
2gusia
2gusia

Category:

Лечим nas4free от Shellshock - заплатка заменой bash

Чтобы не повторяться - мои посты про описание проблемы и про компиляцию безопасного bash. В идеале надо дождаться исправления проблемы разработчиками, но серьёзность проблемы к ожиданию не располагает, сегодня подменим уязвимый бинарник bash на безопасный. Ср также аналогичный вариант от blog4avatar - как всё сделать самому в джейле. В целях безопасности советую мне не верить, а сделать самому, но для ленивых - ссылки на бинарник bash и патченный mfsroot.gz. 943 сборка, которой я и пользуюсь.

NB Настоятельно советую в этом месте сохранить конфиг nas4free System|Backup/Restore.

1) Как писал ранее, новый bash собран в chroot. А лежит бинарник в /usr/local/bin (а не, как я по недомыслию полагал, в /bin - там только симлинк)
Входим в chroot, архивируем правильный бинарник, кладём его туда, откуда можно взять с виндовой
nas4free ~/ root~$ finch chroot
finch: chrooting to "/mnt/Pool/Finch".
nas4free // root^> cd /usr/local/bin
nas4free bin/ root^> bash -version
GNU bash, version 4.3.27(0)-release (amd64-portbld-freebsd9.2)
(...)
nas4free bin/ root^> tar cvf bash_4.3.27.tar bash
a bash
nas4free bin/ root^> exit
logout
nas4free ~/ root~$ cp -a /mnt/Pool/Finch/usr/local/bin/bash_4.3.27.tar /mnt/Pool/Media/


Вот этот tar архив. (Кстати, за сутки версия уже сменилась - с 4.3.26 на 4.3.27 - ещё одна веская причина собирать самому)

2)  Если у нас full инсталляция nas4free - то достаточно просто подменить бинарник в хост системе (НЕ в джейле и НЕ в chroot)
если он у вас скачан как (к примеру)  /mnt/Pool/Media/bash_4.3.27.tar

nas4free ~/ root~$ cd /usr/local/bin
nas4free bin/ root~$ bash -version
GNU bash, version 4.2.45(0)-release (amd64-portbld-freebsd9.2)

nas4free bin/ root~$ tar -xvf /mnt/Pool/Media/bash_4.3.27.tar
x bash
nas4free bin/ root~$ reboot


А для embedded варианта путь к цели сложнее. Создадим временную папку, скопируем туда gz образ embedded nas4free и разархивируем его

mkdir /mnt/Pool/tmp
cp -a /cf/mfsroot.gz /mnt/Pool/tmp/
cd /mnt/Pool/tmp/
gunzip mfsroot.gz


Теперь монтируем образ как диск, подменяем бинарник bash, убираем за собой и зазиповываем образ

mdconfig -a -t vnode -f /mnt/Pool/tmp/mfsroot -u 5
mkdir /md
mount /dev/md5 /md
rm /md/usr/local/bin/bash
cp -a /mnt/Pool/Finch/usr/local/bin/bash /md/usr/local/bin
cd /
umount /md
mdconfig -d -u md5
gzip -9 /mnt/Pool/tmp/mfsroot


Теперь надо вернуть mfsroot.gz на место - но /cf смонтирована только для чтения. Поэтому смотрим на каком устройстве /cf смонтирована
mount

/dev/md0 on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
/dev/da8s1a on /cf (ufs, local, read-only)
procfs on /proc (procfs, local)
(...)


видим, что это - /dev/da8s1a. У ВАС БУДЕТ ДРУГОЕ ИМЯ!
Перемонтируем этот раздел для записи, удаляем старый mfsroot.gz, копируем новый, перегружаем nas

mount -uw /dev/da8s1a
rm /cf/mfsroot.gz
cp -a /mnt/Pool/tmp/mfsroot.gz /cf/
reboot


После перезагрузки смотрим версию bash
nas4free ~/ root~$ bash -version
GNU bash, version 4.3.27(0)-release (amd64-portbld-freebsd9.2)


Ура, получилось (я для проверки все команды писал здесь, а потом копипастил в командную строку - опечаток не должно быть). Если же не стартует - то вы налажали где-то. Не страшно. Ставим на флешку nas4free по новой, накатываем сохранённый конфиг. Мы вернулись в исходное положение.
Tags: it, nas, nas4free
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 7 comments