doc/ru_RU.KOI8-R/books/porters-handbook/security/chapter.xml
2014-07-12 14:08:49 +00:00

509 lines
21 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="koi8-r"?>
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
Original revision: r43840
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="security">
<title>Безопасность портов</title>
<sect1 xml:id="security-intro">
<title>Почему безопасность так важна</title>
<para>Ошибки в программном обеспечении появляются случайно.
Возможно, самые опасные из них те, что создают уязвимости
безопасности. С технической точки зрения подобные уязвимости
должны быть закрыты путем исправления вызывающих их ошибок.
Тем не менее, политики обработки несущественных ошибок и
уязвимостей очень различаются.</para>
<para>Обычная небольшая ошибка затрагивает только тех
пользователей, которые задействуют некоторые комбинации
настроек, активирующие эту ошибку. Разработчик в конечном
счете выпустит патч, а зачтем новую версию программного
обеспечения, свободного от ошибки, но большинство пользователей
не посчитают нужным сразу же произвести обновление, поскольку
эта ошибка никогда у них не проявлялась. Критическая ошибка,
которая может приводить к потере данных, представляет серьезную
проблему. Тем не менее, предусмотрительные пользователи знают,
что большинство возможных происшествий, и среди них программные
ошибки, скорее всего приводят к потере данных, поэтому они
выполняют резервное копирование важных данных; дополнительно,
критическая ошибка будет обнаружена очень скоро.</para>
<para>С уязвимостью безопасности всё иначе. Во-первых, она может
сохраняться необнаруженной целые годы, потому что чаще всего не
вызывает ошибок в работе. Во-вторых, компания злоумышленников
может использовать ее для получения неавторизованного доступа к
уязвимой системе, уничтожить или подменить важные данные; в
худшем случае пользователь даже не заметит нанесенный урон.
В-третьих, взлом уязвимой системы часто упрощает задачу
проникновения атакующих в другие системы, которые не могут быть
скомпрометированы иначе. Таким образом, устранение уязвимости
как таковой недостаточно: следует разослать всем
заинтересованным уведомления в наиболее понятной и
исчерпывающей форме, что позволит оценить риск и предпринять
подходящие меры.</para>
</sect1>
<sect1 xml:id="security-fix">
<title>Исправление уязвимостей безопасности</title>
<para>Что касается портов и пакетов, уязвимость безопасности
изначально может появиться в исходном дистрибутиве или файлах
порта. В первом случае, разработчик исходного программного
обеспечения скорее всего сразу же выпустит патч или новую
версию, и вам лишь понадобится сразу обновить порт в
соответствии с исправлением автора. Если исправление по
какой-то причине задерживается, вам следует либо <link
linkend="dads-noinstall">пометить порт как
<varname>FORBIDDEN</varname></link>, либо добавить в порт ваш
собственный патч. В случае уязвимости порта просто исправьте
этот порт как можно скорее. В любом случае нужно следовать
<link linkend="port-upgrading">стандартной процедуре отправки
вашего изменения</link>, если вы не обладаете правами на
коммит изменения непосредственно в дерево портов.</para>
<important>
<para>Быть коммиттером портов недостаточно для коммита
произвольного порта. Помните, что обычно у портов есть
сопровождающие, мнение которых вы должны учитывать.</para>
</important>
<para>Пожалуйста, убедитесь, что ревизия порта после закрытия
уязвимости увеличена. Вот как пользователи, обновляющие
установленные пакеты на постоянной основе, увидят, что им нужно
запустить обновление. Кроме того, новый пакет будет собран и
распространен через FTP и WWW зеркала, замещая уязвимый. Если
в процессе исправления уязвимости не было изменено значение
<varname>PORTVERSION</varname>, то должно быть увеличено
значение <varname>PORTREVISION</varname>. Вам следует
увеличить значение <varname>PORTREVISION</varname> после
добавления в порт файла с патчем, но не когда вы обновили порт
до последней версии программного обеспечения, попутно затронув
при этом <varname>PORTVERSION</varname>. За дальнейшей
информацией обращайтесь к <link
linkend="makefile-naming-revepoch">соответствующему
разделу</link>.</para>
</sect1>
<sect1 xml:id="security-notify">
<title>Обеспечение сообщества информацией</title>
<sect2 xml:id="security-notify-vuxml-db">
<title>База данных VuXML</title>
<para>Очень важным и первостепенным шагом при действии как
можно раньше после раскрытия уязвимости является уведомление
сообщества пользователей порта об опасности. Такие
уведомления служат двум целям. Во-первых, в случае
действительно серьезной угрозы, будет посоветовано применить
мгновенное воздействие. Например, остановить затрагиваемый
сетевой сервис или даже удалить порт целиком, пока уязвимость
не будет устранена. Во-вторых, масса пользователей имеет
тенденцию обновлять установленные пакеты только от случая к
случаю. Из уведомления они узнают, что
<emphasis>должны</emphasis> обновить пакет без промедления
сразу же после появления исправленной версии.</para>
<para>Учитывая огромное число портов в дереве, невозможно по
каждому случаю выпускать бюллетень безопасности без создания
флуда и потери внимания сообщества к моменту появления
действительно серьезных причин. Поэтому уязвимости
безопасности, обнаруженные в портах, записываются в <link
xlink:href="http://vuxml.freebsd.org/">базу данных &os;
VuXML</link>. Члены Команды Офицеров Безопасности также
отслеживают её на предмет появления вопросов, требующих их
вмешательства.</para>
<para>Если вы обладаете правами коммиттера, вы можете сам
обновить базу данных VuXML. Так вы поможете Команде Офицеров
Безопасности и своевременно пошлете ценную информацию
сообществу. Тем не менее, если вы не являетесь коммиттером
или верите, что нашли исключительно серьезную уязвимость, то
не задумываясь свяжитесь с Командой Офицеров Безопасности
напрямую как это описано на странице <link
xlink:href="http://www.freebsd.org/security/#how">информационной
безопасности &os;</link>.</para>
<para>База данных VuXML является документом
<acronym>XML</acronym>. Его исходный файл
<filename>vuln.xml</filename> содержится прямо внутри порта
<package role="port">security/vuxml</package>.
Следовательно, полное имя пути к файлу будет
<filename>PORTSDIR/security/vuxml/vuln.xml</filename>.
Каждый раз, при обнаружении вами в порте уязвимости
безопасности добавьте об этом запись в этот файл. Пока вы не
знакомы с VuXML, лучшее, что вы можете сделать, это найти
существующую запись, подпадающую под ваш случай, затем
скопировать ее и использовать в качестве шаблона.</para>
</sect2>
<sect2 xml:id="security-notify-vuxml-intro">
<title>Короткое вступление в VuXML</title>
<para>В совокупности <acronym>XML</acronym> является очень
сложным форматом, и его описание выходит далеко за рамки этой
книги. Тем не менее, для достижения основного понимания
структуры записи VuXML вам понадобится всего лишь понять
теги. Имена тегов XML обрамляются в угловые скобки. Каждый
открывающий &lt;tag&gt; должен иметь совпадающий закрывающий
&lt;/tag&gt;. Теги могут быть вложенными. При вложенности
внутренние теги должны быть закрыты до закрытия внешних.
Существует иерархия тегов, т.е. более сложные правила
вкладывания тегов. Это похоже на HTML. Основное отличие в
расширяемости XML, т.е. в определении собственных тегов.
Из-за своей характерной структуры XML придает форму
разрозненным данным. В частности, XML подходит для разметки
описаний уязвимостей безопасности.</para>
<para>Теперь рассмотрим настоящую запись VuXML:</para>
<programlisting>&lt;vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"&gt; <co xml:id="co-vx-vid"/>
&lt;topic&gt;Several vulnerabilities found in Foo&lt;/topic&gt; <co xml:id="co-vx-top"/>
&lt;affects&gt;
&lt;package&gt;
&lt;name&gt;foo&lt;/name&gt; <co xml:id="co-vx-nam"/>
&lt;name&gt;foo-devel&lt;/name&gt;
&lt;name&gt;ja-foo&lt;/name&gt;
&lt;range&gt;&lt;ge&gt;1.6&lt;/ge&gt;&lt;lt&gt;1.9&lt;/lt&gt;&lt;/range&gt; <co xml:id="co-vx-rng"/>
&lt;range&gt;&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;2.4_1&lt;/lt&gt;&lt;/range&gt;
&lt;range&gt;&lt;eq&gt;3.0b1&lt;/eq&gt;&lt;/range&gt;
&lt;/package&gt;
&lt;package&gt;
&lt;name&gt;openfoo&lt;/name&gt; <co xml:id="co-vx-nm2"/>
&lt;range&gt;&lt;lt&gt;1.10_7&lt;/lt&gt;&lt;/range&gt; <co xml:id="co-vx-epo"/>
&lt;range&gt;&lt;ge&gt;1.2,1&lt;/ge&gt;&lt;lt&gt;1.3_1,1&lt;/lt&gt;&lt;/range&gt;
&lt;/package&gt;
&lt;/affects&gt;
&lt;description&gt;
&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;J. Random Hacker reports:&lt;/p&gt; <co xml:id="co-vx-bdy"/>
&lt;blockquote
cite="http://j.r.hacker.com/advisories/1"&gt;
&lt;p&gt;Several issues in the Foo software may be exploited
via carefully crafted QUUX requests. These requests will
permit the injection of Bar code, mumble theft, and the
readability of the Foo administrator account.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/body&gt;
&lt;/description&gt;
&lt;references&gt; <co xml:id="co-vx-ref"/>
&lt;freebsdsa&gt;SA-10:75.foo&lt;/freebsdsa&gt; <co xml:id="co-vx-fsa"/>
&lt;freebsdpr&gt;ports/987654&lt;/freebsdpr&gt; <co xml:id="co-vx-fpr"/>
&lt;cvename&gt;CAN-2010-0201&lt;/cvename&gt; <co xml:id="co-vx-cve"/>
&lt;cvename&gt;CAN-2010-0466&lt;/cvename&gt;
&lt;bid&gt;96298&lt;/bid&gt; <co xml:id="co-vx-bid"/>
&lt;certsa&gt;CA-2010-99&lt;/certsa&gt; <co xml:id="co-vx-cts"/>
&lt;certvu&gt;740169&lt;/certvu&gt; <co xml:id="co-vx-ctv"/>
&lt;uscertsa&gt;SA10-99A&lt;/uscertsa&gt; <co xml:id="co-vx-ucs"/>
&lt;uscertta&gt;SA10-99A&lt;/uscertta&gt; <co xml:id="co-vx-uct"/>
&lt;mlist msgid="201075606@hacker.com"&gt;http://marc.theaimsgroup.com/?l=bugtraq&amp;amp;m=203886607825605&lt;/mlist&gt; <co xml:id="co-vx-mls"/>
&lt;url&gt;http://j.r.hacker.com/advisories/1&lt;/url&gt; <co xml:id="co-vx-url"/>
&lt;/references&gt;
&lt;dates&gt;
&lt;discovery&gt;2010-05-25&lt;/discovery&gt; <co xml:id="co-vx-dsc"/>
&lt;entry&gt;2010-07-13&lt;/entry&gt; <co xml:id="co-vx-ent"/>
&lt;modified&gt;2010-09-17&lt;/modified&gt; <co xml:id="co-vx-mod"/>
&lt;/dates&gt;
&lt;/vuln&gt;</programlisting>
<para>Имена тегов должны быть самодокументируемыми, чтобы мы
сфокусировались только на полях, нужных нам для
заполнения:</para>
<calloutlist>
<callout arearefs="co-vx-vid">
<para>Это тег верхнего уровня записи VuXML. У него есть
обязательный атрибут <literal>vid</literal>, указывающий
на универсальный уникальный идентификатор (UUID) для этой
записи (в кавычках). Вы должны формировать UUID для
каждой новой записи VuXML (и не забудьте заменить ее для
шаблона UUID, если вы не пишете запись с нуля). Для
получения VuXML UUID вы можете использовать
&man.uuidgen.1;.</para>
</callout>
<callout arearefs="co-vx-top">
<para>Однострочное описание найденной проблемы.</para>
</callout>
<callout arearefs="co-vx-nam">
<para>Здесь перечислены имена затронутых пакетов. Может
быть дано несколько имен, поскольку некоторые пакеты
могут быть основаны на одном главном порте или
программном продукте. Сюда можно включить стабильную
ветвь и ветвь разработки, локализованные версии и
подчиненные порты, зависящие от различного выбора важных
вариантов конфигурации, указанных на этапе
построения.</para>
<important>
<para>Поиск всех подобных пакетов при написании записи
VuXML входит в зону вашей ответственности. Имейте в
виду, что <literal>make search name=foo</literal> это
ваш друг. Первичные точки для поиска следующие:</para>
<itemizedlist>
<listitem>
<para>вариант <filename>foo-devel</filename> для
порта <filename>foo</filename>;</para>
</listitem>
<listitem>
<para>другие варианты с суффиксами вида
<literal>-a4</literal> (для пакетов, связанных с
печатью), <literal>-without-gui</literal> (для
пакетов с отключенной поддержкой X), или
подобных;</para>
</listitem>
<listitem>
<para><literal>jp-</literal>, <literal>ru-</literal>,
<literal>zh-</literal> и другие возможные
локализованные варианты в соответствующих
национальных категориях коллекции портов.</para>
</listitem>
</itemizedlist>
</important>
</callout>
<callout arearefs="co-vx-rng">
<para>Здесь указаны затронутые версии пакета(-ов) как один
или более диапазонов с использованием комбинации
элементов <literal>&lt;lt&gt;</literal>,
<literal>&lt;le&gt;</literal>,
<literal>&lt;eq&gt;</literal>,
<literal>&lt;ge&gt;</literal>, и
<literal>&lt;gt&gt;</literal>. Диапазоны внесённых
версий не должны пересекаться.</para>
<para>В спецификации диапазонов <literal>*</literal>
(звёздочка) означает наименьший номер версии. В
частности, <literal>2.*</literal> меньше, чем
<literal>2.a</literal>. Поэтому звездочка может быть
использована в диапазоне для совпадения со всеми
возможными <literal>alpha</literal>,
<literal>beta</literal> и <literal>RC</literal> версиями.
Как вариант,
<literal>&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;3.*&lt;/lt&gt;</literal>
выборочно совпадет с версией <literal>2.x</literal>, а
<literal>&lt;ge&gt;2.0&lt;/ge&gt;&lt;lt&gt;3.0&lt;/lt&gt;</literal>
- нет, поскольку последнее не включает
<literal>2.r3</literal> и совпадает с
<literal>3.b</literal>.</para>
<para>Пример выше указывает, что к затронутым относятся
версии с <literal>1.6</literal> до <literal>1.9</literal>
включительно, версии <literal>2.x</literal> до
<literal>2.4_1</literal> и версия
<literal>3.0b1</literal>.</para>
</callout>
<callout arearefs="co-vx-nm2">
<para>Некоторые связанные группы пакетов (в конечном счете,
порты) могут быть указаны в разделе
<literal>&lt;affected&gt;</literal>. Это можно
использовать, если некоторые программные продукты
(скажем, FooBar, FreeBar and OpenBar) являются
производными от общей кодовой базы и всё еще совместно
используют её ошибки и уязвимости. Имейте в виду отличие
от перечисления множественных имён в одном разделе
&lt;package&gt;.</para>
</callout>
<callout arearefs="co-vx-epo">
<para>Диапазоны версий должны учитывать
<varname>PORTEPOCH</varname> и
<varname>PORTREVISION</varname>, если это применимо.
Пожалуйста, помните, что в соответствии с правилами
сравнения строк версия с ненулевым значением
<varname>PORTEPOCH</varname> выше, чем любая версия без
<varname>PORTEPOCH</varname>, например,
<literal>3.0,1</literal> выше, чем <literal>3.1</literal>
или даже <literal>8.9</literal>.</para>
</callout>
<callout arearefs="co-vx-bdy">
<para>Сводная информация о проблеме. В этом поле
используется XHTML. По крайней мере, должны быть
обрамляющие <literal>&lt;p&gt;</literal> и
<literal>&lt;/p&gt;</literal>. Может быть использована
более сложная разметка, но только в целях аккуратности и
ясности: без эстетства, пожалуйста.</para>
</callout>
<callout arearefs="co-vx-ref">
<para>Этот раздел содержит ссылки на имеющие отношение
документы. Приветствуется как можно большее количество
ссылок.</para>
</callout>
<callout arearefs="co-vx-fsa">
<para>Это <link
xlink:href="http://www.freebsd.org/security/#adv">бюллетень
безопасности &os;</link>.</para>
</callout>
<callout arearefs="co-vx-fpr">
<para>Это <link
xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
об ошибке &os;</link>.</para>
</callout>
<callout arearefs="co-vx-cve">
<para>Идентификатор <link
xlink:href="http://www.cve.mitre.org/">MITRE
CVE</link>.</para>
</callout>
<callout arearefs="co-vx-bid">
<para>Это <link
xlink:href="http://www.securityfocus.com/bid">SecurityFocus
Bug ID</link>.</para>
</callout>
<callout arearefs="co-vx-cts">
<para>Бюллетень безопасности <link
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout>
<callout arearefs="co-vx-ctv">
<para>Примечание к уязвимости <link
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout>
<callout arearefs="co-vx-ucs">
<para>Уведомление системы Cyber Security Alert <link
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout>
<callout arearefs="co-vx-uct">
<para>Уведомление системы Technical Cyber Security Alert
<link
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout>
<callout arearefs="co-vx-mls">
<para>URL к архивному сообщению в списке рассылки. Атрибут
<literal>msgid</literal> является необязательным и может
указывать на message ID сообщения.</para>
</callout>
<callout arearefs="co-vx-url">
<para>Основной URL. Должен быть использован в случае, если
не подходит ни одна из категорий источника.</para>
</callout>
<callout arearefs="co-vx-dsc">
<para>Дата последнего изменения любой информации данной
записи (<replaceable>YYYY-MM-DD</replaceable>). Новые
записи не должны включать это поле. Поле должно быть
добавлено после редактирования существующей
записи.</para>
</callout>
</calloutlist>
</sect2>
<sect2 xml:id="security-notify-vuxml-testing">
<title>Тестирование ваших изменений в базе данных VuXML</title>
<para>Предположим, что вы только что написали или заполнили
запись об уязвимости в пакете <literal>clamav</literal>,
которая была исправлена в версии
<literal>0.65_7</literal>.</para>
<para>Прежде всего, вам нужно <emphasis>установить</emphasis>
последние версии портов
<package role="port">ports-mgmt/portaudit</package>,
<package role="port">ports-mgmt/portaudit-db</package> и
<package role="port">security/vuxml</package>.</para>
<note>
<para>Для запуска <command>packaudit</command> вы должны
обладать правами на запись в
<filename>DATABASEDIR</filename>; как правило, это
<filename>/var/db/portaudit</filename>.</para>
<para>Для использования другого каталога присвойте переменной
окружения <filename>DATABASEDIR</filename> другой
путь.</para>
<para>Если вы работаете в каталоге, отличном от
<filename>${PORTSDIR}/security/vuxml</filename>, присвойте
переменной окружения <filename>VUXMLDIR</filename> путь к
каталогу, в котором находится
<filename>vuln.xml</filename>.</para>
</note>
<para>Во-первых, проверьте, нет ли уже записи об этой
уязвимости. Если такая запись есть, она совпадёт с
предыдущей версией пакета <literal>0.65_6</literal>:</para>
<screen>&prompt.user; <userinput>packaudit</userinput>
&prompt.user; <userinput>portaudit clamav-0.65_6</userinput></screen>
<para>Если ничего не найдено, значит вы получили зеленый свет
для добавления новой записи для этой уязвимости.</para>
<screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml</userinput>
&prompt.user; <userinput>make newentry</userinput></screen>
<para>Когда вы закончите, проверьте синтаксис и
форматирование.</para>
<screen>&prompt.user; <userinput>make validate</userinput></screen>
<note>
<para>Вам понадобится установить по крайней мере один из
следующих пакетов:
<package role="port">textproc/libxml2</package>,
<package role="port">textproc/jade</package>.</para>
</note>
<para>Теперь выполните перепостроение базы данных
<command>portaudit</command> из файла VuXML:</para>
<screen>&prompt.user; <userinput>packaudit</userinput></screen>
<para>Чтобы убедиться, что раздел
<literal>&lt;affected&gt;</literal> в вашей записи совпадает
с правильными пакетами, выполните следующую команду:</para>
<screen>&prompt.user; <userinput>portaudit -f /usr/ports/INDEX -r uuid</userinput></screen>
<note>
<para>Для лучшего понимания синтаксиса этой команды
обращайтесь к &man.portaudit.1;.</para>
</note>
<para>Убедитесь, что ваша запись не производит ложных
совпадений в выводе.</para>
<para>Теперь проверьте, совпадает ли ваша запись с нужными
версиями пакета:</para>
<screen>&prompt.user; <userinput>portaudit clamav-0.65_6 clamav-0.65_7</userinput>
Affected package: clamav-0.65_6 (matched by clamav&lt;0.65_7)
Type of problem: clamav remote denial-of-service.
Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html&gt;
1 problem(s) found.</screen>
<para>Первая версия должна совпасть, а последняя нет.</para>
<para>В заключение проверьте, что веб-страница, сформированная
из базы данных VuXML, выглядит как положено:</para>
<screen>&prompt.user; <userinput>mkdir -p ~/public_html/portaudit</userinput>
&prompt.user; <userinput>packaudit</userinput>
&prompt.user; <userinput>lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html</userinput></screen>
</sect2>
</sect1>
</chapter>