Как мне исправить / исправить CVE в пакете Ubuntu zlib, когда новая версия недоступна с помощью apt-get?

6

У меня есть несколько облачных стеков, на которых запущен Ubuntu 14.04.2, и мне нужно исправить CVE, которые я просматриваю в библиотеке zlib (в частности, zlib1g и zlib1g-dev . В конечном итоге мне нужно перенести эти системы к более поздней версии Ubuntu, однако до тех пор, пока я не разрешу блокировщики для обновления, мне нужно уменьшить существующие CVE.

  • Каковы наилучшие методы обновления системных пакетов?
  • Что мне следует беспокоиться о нарушении / методе тестирования функциональной регрессии?

То, что я сейчас тестирую, - это добавить источники из более поздних версий Ubuntu (например, artful ):

sudo cp /etc/apt/sources.list /etc/apt/sources.list.d/artful.list
sudo vim /etc/apt/sources.list.d/artful.list  # replace "trusty" with "zesty"
sudo apt-get update

Соедините все пакеты с trusty :

$ cat /etc/apt/preferences

Package: *
Pin: release n=trusty
Pin-Priority: 900

Package: *
Pin: release o=Ubuntu
Pin-Priority: -10

Затем обновите определенные пакеты с помощью:

apt-get install --only-upgrade <package> -t zesty

Пакет, который мне нужно обновить: zlib1g / zlib1g-dev

Обновление системных пакетов не дает мне версию zlib1g с разрешенным CVE. Мне нужна версия > = 1:1.2.8.dfsg-4 ближайшая, вероятно, 1:1.2.11.dfsg-0ubuntu1 от zesty . См:

$ dpkg -s zlib1g | grep Version:
Version: 1:1.2.8.dfsg-1ubuntu1

$ sudo apt-get update && apt-get upgrade

$ dpkg -s zlib1g | grep Version:
Version: 1:1.2.8.dfsg-1ubuntu1

Содержание /etc/apt/sources.list :

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## Uncomment the following two lines to add software from the 'universe'
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty universe
deb http://archive.ubuntu.com/ubuntu/ trusty-updates universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted

deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted
deb http://archive.ubuntu.com/ubuntu/ trusty-security universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security universe
# deb http://archive.ubuntu.com/ubuntu/ trusty-security multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ trusty-security multiverse
    
задан Ryan Fisher 31.10.2017 в 20:01
источник

3 ответа

3

Без дополнительной информации о том, что вы хотите заплатить, и в каком кармане репозиториев Ubuntu это программное обеспечение входит в данную версию, невозможно дать вам полный ответ, достаточно узкий.

Но я попытаюсь дать вам обзор того, как «исправлять» проблемы безопасности в пакетах Ubuntu.

Пакеты программного обеспечения в Main и вкладки, созданные сообществом во Вселенной, через репозитории $RELEASE-security

Для патчей безопасности, представленных в пакетах пользователями для рассмотрения команды безопасности в пакетах Universe и патчей безопасности самой командой безопасности в пакетах Ubuntu Main, после их выпуска они доступны из репозиториев $RELEASE-security (например, xenial-security ) и $RELEASE-updates репозиториев. Таким образом, вы можете просто сделать sudo apt-get update && sudo apt-get dist-upgrade и получить все исправления.

Отслеживание отдельных CVE в CVE Tracker позволит вам узнать, было ли выпущено исправление CVE в Ubuntu, а также определение SEKURE уровня приоритета CVE и того, как быстро он нуждается в решении (по умолчанию это «Средний», независимо от серьезности CVE).

Пакеты, не обновленные в репозиториях

У нас здесь две проблемы. Во-первых, пакеты Universe получают только заплатки, когда сообщество предоставляет их команде безопасности для просмотра и просмотра. Во-вторых, большое количество пакетов в результате не обновляется.

У вас есть два решения по этим вопросам: либо перестройте пакеты самостоятельно с помощью патчей, либо дождитесь, когда обновление появится в репозиториях (или кому-то отправить патчи для группы безопасности).

Для первого решения вам нужно будет следовать Руководству по упаковке с шага 1 до шага 3.9, а затем шаги подробно описанный в разделе 6, если вы хотите отправить их для репозиториев и создать исправленные пакеты локально в своей системе и установить их.

Фактический процесс для этого - это очень очень комплекс в зависимости от пакета, поэтому здесь невозможно ответить.

Пользовательское скомпилированное программное обеспечение

Ваша единственная надежда здесь - применить исправления к программному обеспечению самостоятельно, перекомпилировать и установить. Это относится ко всему, где программное обеспечение не включено в репозитории или в случаях, когда вы установили вещи, которые вы скомпилировали в первую очередь. Процесс для этого бесконечно разнообразен, поэтому на него невозможно ответить.

    
ответ дан Thomas Ward 02.11.2017 в 18:42
1

Если у вас есть CVE, который вы должны исправить, и он не исправлен в официальных репозиториях для выпуска, который вы используете, то вы должны not выполнять загрузку и установку пакетов с произвольный выпуск в будущем. Такие пакеты могут устанавливать отлично, но нет гарантии, что существующее другое существующее программное обеспечение может взаимодействовать с ними. Возможно, ABI или API изменились, возможно, значительно, возможно, нет. Тонких изменений может быть достаточно, чтобы вызывать жесткие ошибки. (если библиотека не загружается, как ожидалось, приложение из командной строки может вызывать ошибку, не найденную в файле, хотя файл команды явно существует!)

Я бы предложил следующее:

  1. Проверьте, доступен ли патч для используемой версии, либо в отчетах CVE в другом месте, либо в верхней части страницы.
  2. Если это так, загрузите и измените исходный пакет соответствующего пакета: Как получить и изменить исходный код пакетов установлен через apt-get?
    • Используйте quilt для применения патча (см. Debian wiki или это Debian hwoto ).
    • Я бы предположил, что вы столкнулись только с наименее значимой частью номера версии (части после последнего - ) - конечно же, не ударяйте часть перед первым : , числом эпохи.
  3. Установите установленный пакет.

Это гораздо более вероятно, чтобы поддерживать совместимость с другими компонентами ОС (так как само исправление не нарушает что-то), но при этом позволяет обновлять, если обновление попадает в хранилища вашего релиза. Таким образом, вы также можете гарантировать, что конкретный CVE, который вы хотите исправить, фиксирован, насколько вы можете судить, что может быть не так с пакетом из какой-либо произвольной будущей версии.

    
ответ дан muru 02.11.2017 в 18:46
1

Вот как я сделал это для моего первого запуска.

  1. Я упаковал свое приложение в микросервисы с пользовательским базовым изображением Docker. Микро-службы были основаны на Node.js, так что это был фундамент
  2. Я развернул эти службы, используя Kubernetes / Docker Compose в средах stage / prod.
  3. Я сохранил эти изображения Docker на cloud.docker.com, у которого есть хороший сканер изображений Docker, который находит соответствующие CVE, просматривая изображения.

Вот как я попал в соответствующие CVE. Тогда

  1. Я прочитал CVE, чтобы посмотреть, какой из них применен. Эти 4 CVE выглядят так:
    • inftrees.c в zlib 1.2.8 может позволить зависящим от контекста атакующим имеют неуказанное влияние, используя неправильную арифметику указателя.
    • inffast.c в zlib 1.2.8 может позволить злоумышленникам, зависящим от контекста, имеют неуказанное влияние, используя неправильную арифметику указателя.
    • Функция inflateMark в inflate.c в zlib 1.2.8 может разрешить зависящие от контекста злоумышленники, чтобы иметь неопределенное воздействие через векторы включая левые сдвиги отрицательных целых чисел.
    • Функция crc32_big в файле crc32.c в zlib 1.2.8 может позволить злоумышленникам, зависящим от контекста, иметь неуказанное воздействие через векторы с использованием вычисления CRC большого числа.

Для меня «неуказанные» и «контекстно-зависимые» означают, что это довольно теоретическая атака. Это означало бы, что плохие парни с большим количеством денег хотели вломиться в you - в отличие от обычных плохих парней, которые хотят сломать кого-то. Только вы знаете, что лучше всего разместить ваши ресурсы.

В моем случае были Chrome CVE (Chrome - основа для Node.js), которая не применима к моим вариантам использования, поэтому я проигнорировал их, ожидая исправлений восходящего потока. Иногда были вещи, которые нуждались в исправлении сразу, поэтому:

  1. Я обновил изображения Docker. Поскольку все микроуслуги начинались с пользовательского базового изображения Docker, я мог бы быстро вывести узлы и обновления ОС.
  2. Развертывание на сцену, тестирование дыма на сцене и развертывание для производства.

Я поддержал некоторые другие ответы здесь - надеюсь, вы получите то, что ищете.

    
ответ дан Michael Cole 02.11.2017 в 18:56