diff options
Diffstat (limited to 'documentation/content/ru/books/porters-handbook/security/_index.adoc')
-rw-r--r-- | documentation/content/ru/books/porters-handbook/security/_index.adoc | 158 |
1 files changed, 85 insertions, 73 deletions
diff --git a/documentation/content/ru/books/porters-handbook/security/_index.adoc b/documentation/content/ru/books/porters-handbook/security/_index.adoc index 6f75400cd0..77845b3b1c 100644 --- a/documentation/content/ru/books/porters-handbook/security/_index.adoc +++ b/documentation/content/ru/books/porters-handbook/security/_index.adoc @@ -1,22 +1,24 @@ --- -title: Глава 11. Безопасность портов -prev: books/porters-handbook/upgrading +description: 'Инструкции по безопасности при создании порта FreeBSD' next: books/porters-handbook/porting-dads -showBookMenu: true -weight: 11 params: - path: "/books/porters-handbook/security/" + path: /books/porters-handbook/security/ +prev: books/porters-handbook/upgrading +showBookMenu: true +tags: ["security", "porting", "ports", "VuXML"] +title: 'Глава 12. Безопасность портов' +weight: 12 --- [[security]] -= Безопасность портов += Безопасность :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 -:sectnumoffset: 11 +:sectnumoffset: 12 :partnums: :source-highlighter: rouge :experimental: @@ -58,14 +60,14 @@ endif::[] [[security-fix]] == Исправление уязвимостей безопасности -Что касается портов и пакетов, уязвимость безопасности изначально может появиться в исходном дистрибутиве или файлах порта. В первом случае, разработчик исходного программного обеспечения скорее всего сразу же выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в соответствии с исправлением автора. Если исправление по какой-то причине задерживается, вам следует либо <<dads-noinstall,пометить порт как `FORBIDDEN`>>, либо добавить в порт ваш собственный патч. В случае уязвимости порта просто исправьте этот порт как можно скорее. В любом случае нужно следовать <<port-upgrading,стандартной процедуре отправки вашего изменения>>, если вы не обладаете правами на коммит изменения непосредственно в дерево портов. +Что касается портов и пакетов, уязвимость безопасности изначально может появиться в исходном дистрибутиве или файлах порта. В первом случае, разработчик исходного программного обеспечения скорее всего сразу же выпустит патч или новую версию, и вам лишь понадобится сразу обновить порт в соответствии с исправлением автора. Если исправление по какой-то причине задерживается, вам следует либо crossref:porting-dads[dads-noinstall,пометить порт как `FORBIDDEN`], либо добавить в порт ваш собственный патч. В случае уязвимости порта просто исправьте этот порт как можно скорее. В любом случае нужно следовать crossref:port-upgrading[port-upgrading,стандартной процедуре отправки вашего изменения], если вы не обладаете правами на коммит изменения непосредственно в дерево портов. [IMPORTANT] ==== Быть коммиттером портов недостаточно для коммита произвольного порта. Помните, что обычно у портов есть сопровождающие, мнение которых вы должны учитывать. ==== -Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости увеличена. Вот как пользователи, обновляющие установленные пакеты на постоянной основе, увидят, что им нужно запустить обновление. Кроме того, новый пакет будет собран и распространен через FTP и WWW зеркала, замещая уязвимый. Если в процессе исправления уязвимости не было изменено значение `PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но не когда вы обновили порт до последней версии программного обеспечения, попутно затронув при этом `PORTVERSION`. За дальнейшей информацией обращайтесь к <<makefile-naming-revepoch,соответствующему разделу>>. +Пожалуйста, убедитесь, что ревизия порта после закрытия уязвимости увеличена. Вот как пользователи, обновляющие установленные пакеты на постоянной основе, увидят, что им нужно запустить обновление. Кроме того, новый пакет будет собран и распространен через FTP и WWW зеркала, замещая уязвимый. Если в процессе исправления уязвимости не было изменено значение `PORTVERSION`, то должно быть увеличено значение `PORTREVISION`. Вам следует увеличить значение `PORTREVISION` после добавления в порт файла с патчем, но не когда вы обновили порт до последней версии программного обеспечения, попутно затронув при этом `PORTVERSION`. За дальнейшей информацией обращайтесь к crossref:makefiles[makefile-naming-revepoch,соответствующему разделу]. [[security-notify]] == Обеспечение сообщества информацией @@ -77,7 +79,7 @@ endif::[] Учитывая огромное число портов в дереве, невозможно по каждому случаю выпускать бюллетень безопасности без создания флуда и потери внимания сообщества к моменту появления действительно серьезных причин. Поэтому уязвимости безопасности, обнаруженные в портах, записываются в http://vuxml.freebsd.org/[базу данных FreeBSD VuXML]. Члены Команды Офицеров Безопасности также отслеживают её на предмет появления вопросов, требующих их вмешательства. -Если вы обладаете правами коммиттера, вы можете сам обновить базу данных VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером или верите, что нашли исключительно серьезную уязвимость, то не задумываясь свяжитесь с Командой Офицеров Безопасности напрямую как это описано на странице http://www.freebsd.org/security/#how[информационной безопасности FreeBSD]. +Если вы обладаете правами коммиттера, вы можете сам обновить базу данных VuXML. Так вы поможете Команде Офицеров Безопасности и своевременно пошлете ценную информацию сообществу. Тем не менее, если вы не являетесь коммиттером или верите, что нашли исключительно серьезную уязвимость, то не задумываясь свяжитесь с Командой Офицеров Безопасности напрямую как это описано на странице https://www.freebsd.org/security/#how[информационной безопасности FreeBSD]. База данных VuXML является документом XML. Его исходный файл [.filename]#vuln.xml# содержится прямо внутри порта package:security/vuxml[]. Следовательно, полное имя пути к файлу будет [.filename]#PORTSDIR/security/vuxml/vuln.xml#. Каждый раз, при обнаружении вами в порте уязвимости безопасности добавьте об этом запись в этот файл. Пока вы не знакомы с VuXML, лучшее, что вы можете сделать, это найти существующую запись, подпадающую под ваш случай, затем скопировать ее и использовать в качестве шаблона. @@ -122,12 +124,8 @@ endif::[] <references> <.> <freebsdsa>SA-10:75.foo</freebsdsa> <.> <freebsdpr>ports/987654</freebsdpr> <.> - <cvename>CAN-2010-0201</cvename> <.> - <cvename>CAN-2010-0466</cvename> - <bid>96298</bid> <.> - <certsa>CA-2010-99</certsa> <.> + <cvename>CVE-2023-48795</cvename> <.> <certvu>740169</certvu> <.> - <uscertsa>SA10-99A</uscertsa> <.> <uscertta>SA10-99A</uscertta> <.> <mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&m=203886607825605</mlist> <.> <url>http://j.r.hacker.com/advisories/1</url> <.> @@ -148,7 +146,9 @@ endif::[] <.> Здесь перечислены имена затронутых пакетов. Может быть дано несколько имен, поскольку некоторые пакеты могут быть основаны на одном главном порте или программном продукте. Сюда можно включить стабильную ветвь и ветвь разработки, локализованные версии и подчиненные порты, зависящие от различного выбора важных вариантов конфигурации, указанных на этапе построения. -<.> Здесь указаны затронутые версии пакета(-ов) как один или более диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>`, и `<gt>`. Диапазоны внесённых версий не должны пересекаться.В спецификации диапазонов `\*` (звёздочка) означает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Поэтому звездочка может быть использована в диапазоне для совпадения со всеми возможными `alpha`, `beta` и `RC` версиями. Как вариант, `<ge>2.*</ge><lt>3.*</lt>` выборочно совпадет с версией `2.x`, а `<ge>2.0</ge><lt>3.0</lt>` - нет, поскольку последнее не включает `2.r3` и совпадает с `3.b`.Пример выше указывает, что к затронутым относятся версии с `1.6` до `1.9` включительно, версии `2.x` до `2.4_1` и версия `3.0b1`. +<.> Затронутые версии пакета(ов) указаны там как один или несколько диапазонов с использованием комбинации элементов `<lt>`, `<le>`, `<eq>`, `<ge>` и `<gt>`. Убедитесь, что указанные диапазоны версий не перекрываются. + +В спецификации диапазона `\*` (звёздочка) обозначает наименьший номер версии. В частности, `2.*` меньше, чем `2.a`. Таким образом, звёздочка может использоваться в диапазоне для соответствия всем возможным версиям `alpha`, `beta` и `RC`. Например, `<ge>2.*</ge><lt>3.*</lt>` выборочно соответствует каждой версии `2.x`, тогда как `<ge>2.0</ge><lt>3.0</lt>` — нет, поскольку последний пропускает `2.r3` и включает `3.b`. + +Приведённый пример указывает, что затронуты версии `1.6` и выше, но не включая `1.9`, версии `2.x` до `2.4_1` и версия `3.0b1`. <.> Некоторые связанные группы пакетов (в конечном счете, порты) могут быть указаны в разделе `<affected>`. Это можно использовать, если некоторые программные продукты (скажем, FooBar, FreeBar and OpenBar) являются производными от общей кодовой базы и всё еще совместно используют её ошибки и уязвимости. Имейте в виду отличие от перечисления множественных имён в одном разделе <package>. @@ -158,112 +158,124 @@ endif::[] <.> Этот раздел содержит ссылки на имеющие отношение документы. Приветствуется как можно большее количество ссылок. -<.> Это http://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD]. +<.> Это https://www.freebsd.org/security/#adv[бюллетень безопасности FreeBSD]. -<.> Это http://www.freebsd.org/support/#gnats[сообщение об ошибке FreeBSD]. +<.> Это https://www.freebsd.org/support/[сообщение об ошибке FreeBSD]. -<.> Идентификатор http://www.cve.mitre.org/[MITRE CVE]. +<.> Идентификатор https://cve.mitre.org/[MITRE CVE]. -<.> Это http://www.securityfocus.com/bid[SecurityFocus Bug ID]. +<.> Это https://www.kb.cert.org/vuls/[SecurityFocus Bug ID]. -<.> Бюллетень безопасности http://www.cert.org/[US-CERT]. +<.> Бюллетень безопасности https://www.cisa.gov/news-events/cybersecurity-advisories[US-CERT]. -<.> Примечание к уязвимости http://www.cert.org/[US-CERT]. - -<.> Уведомление системы Cyber Security Alert http://www.cert.org/[US-CERT]. +<.> URL к архивному сообщению в списке рассылки. Атрибут `msgid` является необязательным и может указывать на message ID сообщения. -<.> Уведомление системы Technical Cyber Security Alert http://www.cert.org/[US-CERT]. +<.> Это общий URL. Используйте его только если ни одна из других категорий ссылок не подходит. -<.> URL к архивному сообщению в списке рассылки. Атрибут `msgid` является необязательным и может указывать на message ID сообщения. +<.> Это дата, когда проблема была раскрыта (_ГГГГ-ММ-ДД_). -<.> Основной URL. Должен быть использован в случае, если не подходит ни одна из категорий источника. +<.> Это дата добавления записи (_ГГГГ-ММ-ДД_). -<.> Дата последнего изменения любой информации данной записи (_YYYY-MM-DD_). Новые записи не должны включать это поле. Поле должно быть добавлено после редактирования существующей записи. +<.> Это дата, когда любая информация в записи была последний раз изменена (_ГГГГ-ММ-ДД_). Новые записи не должны включать это поле. Добавьте его при редактировании существующей записи. [[security-notify-vuxml-testing]] === Тестирование ваших изменений в базе данных VuXML -Предположим, что вы только что написали или заполнили запись об уязвимости в пакете `clamav`, которая была исправлена в версии `0.65_7`. +Этот пример описывает новую запись об уязвимости в пакете `dropbear`, которая была исправлена в версии `dropbear-2013.59`. -Прежде всего, вам нужно _установить_ последние версии портов package:ports-mgmt/portaudit[], package:ports-mgmt/portaudit-db[] и package:security/vuxml[]. +В качестве предварительного условия установите свежую версию порта package:security/vuxml[]. -[NOTE] -==== -Для запуска `packaudit` вы должны обладать правами на запись в [.filename]#DATABASEDIR#; как правило, это [.filename]#/var/db/portaudit#. +Сначала проверьте, есть ли уже запись об этой уязвимости. Если бы такая запись существовала, она соответствовала бы предыдущей версии пакета `2013.58`: -Для использования другого каталога присвойте переменной окружения [.filename]#DATABASEDIR# другой путь. - -Если вы работаете в каталоге, отличном от [.filename]#${PORTSDIR}/security/vuxml#, присвойте переменной окружения [.filename]#VUXMLDIR# путь к каталогу, в котором находится [.filename]#vuln.xml#. -==== +[source, shell] +.... +% pkg audit dropbear-2013.58 +.... -Во-первых, проверьте, нет ли уже записи об этой уязвимости. Если такая запись есть, она совпадёт с предыдущей версией пакета `0.65_6`: +Если запись не найдена, добавьте новую запись для этой уязвимости. -[source,shell] +[source, shell] .... -% packaudit -% portaudit clamav-0.65_6 +% cd ${PORTSDIR}/security/vuxml +% make newentry .... -Если ничего не найдено, значит вы получили зеленый свет для добавления новой записи для этой уязвимости. +Если уязвимость имеет идентификатор https://cve.mitre.org/[MITRE CVE], можно использовать следующую команду: -[source,shell] +[source, shell] .... % cd ${PORTSDIR}/security/vuxml -% make newentry +% make newentry CVE_ID=CVE-YYYY-XXXXX .... -Когда вы закончите, проверьте синтаксис и форматирование. +где `CVE-YYYYY-XXXX` является действительным идентификатором CVE. -[source,shell] +Если уязвимость относится к FreeBSD Security Advisory, вместо этого можно использовать следующую команду: + +[source, shell] .... -% make validate +% cd ${PORTSDIR}/security/vuxml +% make newentry SA_ID=FreeBSD-SA-YY-XXXXXX.asc .... -[NOTE] -==== -Вам понадобится установить по крайней мере один из следующих пакетов: package:textproc/libxml2[], package:textproc/jade[]. -==== +где `FreeBSD-SA-YY-XXXXXX.asc` является опубликованным https://www.freebsd.org/security/advisories/[FreeBSD Security Advisory]. -Теперь выполните перепостроение базы данных `portaudit` из файла VuXML: +Проверьте его синтаксис и форматирование: -[source,shell] +[source, shell] .... -% packaudit +% make validate .... -Чтобы убедиться, что раздел `<affected>` в вашей записи совпадает с правильными пакетами, выполните следующую команду: +Предыдущая команда создает файл [.filename]#vuln-flat.xml#. Его также можно создать с помощью: -[source,shell] +[source, shell] .... -% portaudit -f /usr/ports/INDEX -r uuid +% make vuln-flat.xml .... [NOTE] ==== -Для лучшего понимания синтаксиса этой команды обращайтесь к man:portaudit[1]. +Должен быть установлен хотя бы один из следующих пакетов: package:textproc/libxml2[], package:textproc/jade[]. ==== -Убедитесь, что ваша запись не производит ложных совпадений в выводе. +Проверьте, что раздел `<affected>` записи соответствует правильным пакетам: -Теперь проверьте, совпадает ли ваша запись с нужными версиями пакета: - -[source,shell] +[source, shell] +.... +% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 .... -% portaudit clamav-0.65_6 clamav-0.65_7 -Affected package: clamav-0.65_6 (matched by clamav<0.65_7) -Type of problem: clamav remote denial-of-service. -Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html> -1 problem(s) found. +Убедитесь, что запись не создает ложных совпадений в выводе. + +Теперь проверьте, соответствуют ли записи правильные версии пакетов: + +[source, shell] +.... +% pkg audit -f ${PORTSDIR}/security/vuxml/vuln-flat.xml dropbear-2013.58 dropbear-2013.59 +dropbear-2012.58 is vulnerable: +dropbear -- exposure of sensitive information, DoS +CVE: CVE-2013-4434 +CVE: CVE-2013-4421 +WWW: https://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html + +1 problem(s) in the installed packages found. .... -Первая версия должна совпасть, а последняя нет. +Предыдущая версия совпадает, а последняя — нет. -В заключение проверьте, что веб-страница, сформированная из базы данных VuXML, выглядит как положено: +[[security-xcheck-vuxml]] +=== Контрольный список для новой записи в VuXML -[source,shell] +* Проверьте название порта. Иногда имя проекта в вышестоящем репозитории не полностью совпадает с именем порта. +* Добавить все флейворы. Если у порта есть варианты, все имена пакетов должны быть добавлены в запись как `<package>`. Используйте следующий скрипт для генерации всех имен пакетов с вариантами: ++ +[source, shell] .... -% mkdir -p ~/public_html/portaudit -% packaudit -% lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html +% for flavor in $(make -V FLAVORS); do FLAVOR="${flavor}" make -VPKGNAME;done .... ++ +* Проверить, имеет ли порт `PORTEPOCH`. Приведённый выше фрагмент скрипта помогает в этом. Если порт использует `PORTEPOCH`, обязательно добавить его в тег `<range>`. +* Перепроверьте диапазоны. В случае диапазонов, ограниченных с обеих сторон, убедитесь, что элементы `<ge>` и `<lt>` находятся внутри одного тега `<range>`. В противном случае запись может определить перекрывающийся диапазон. +* Проверка производных версий. Если в вышестоящем проекте обнаружена уязвимость, проверьте, затронуты ли также производные или форки проекта, включённые в дерево портов. Например, если уязвимость обнаружена в package:www/firefox[], оцените, есть ли такая же уязвимость в производных, таких как package:www/librewolf[], package:www/waterfox[] или других подобных проектах. Включите все затронутые производные в запись VuXML, чтобы пользователи этих портов были проинформированы. Также проверьте наличие Linux-версий этого порта в дереве. Например, уязвимости в package:databases/sqlite3[] скорее всего затрагивают и пакеты вроде package:databases/linux-c7-sqlite3[]. +* Не делайте коммит записи, не запустив сначала `make validate`. |