aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/porters-handbook/security/_index.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/books/porters-handbook/security/_index.adoc')
-rw-r--r--documentation/content/ru/books/porters-handbook/security/_index.adoc158
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&amp;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`.