security/security.sgml		1.151 --> 1.209

PR:		www/143695
Submitted by:	pluknet <pluknet@gmail.com>
This commit is contained in:
Gabor Kovesdan 2010-02-20 08:13:16 +00:00
parent 3c04044927
commit f11f7e1f5a
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/www/; revision=35382

View file

@ -1,18 +1,19 @@
<!--
The FreeBSD Russian Documentation Project
$FreeBSD: www/ru/security/security.sgml,v 1.17 2005/10/05 20:59:57 simon Exp $
$FreeBSD: www/ru/security/security.sgml,v 1.18 2006/08/19 21:25:55 hrs Exp $
$FreeBSDru: frdp/www/ru/security/security.sgml,v 1.33 2004/09/21 07:31:12 den Exp $
Original revision: 1.151
Original revision: 1.209
-->
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
<!ENTITY base CDATA "..">
<!ENTITY date "$FreeBSD: www/ru/security/security.sgml,v 1.17 2005/10/05 20:59:57 simon Exp $">
<!ENTITY date "$FreeBSD: www/ru/security/security.sgml,v 1.18 2006/08/19 21:25:55 hrs Exp $">
<!ENTITY title "Информационная безопасность FreeBSD">
<!ENTITY % navinclude.support "INCLUDE">
<!ENTITY advisories.html.inc SYSTEM "advisories.html.inc">
<!ENTITY % developers SYSTEM "../../en/developers.sgml"> %developers;
]>
<html>
@ -20,110 +21,110 @@
<h2>Введение</h2>
<p>Эта веб-страница создана для того, чтобы помочь как начинающим, так и
<p>Эта веб-страница предназначена для помощи начинающим и
опытным пользователям в области информационной безопасности FreeBSD.
Во FreeBSD вопросы безопасности воспринимаются весьма серьёзно и постоянно
работают над тем, чтобы сделать ОС защищённой настолько, насколько это
идет работа над тем, чтобы сделать ОС защищённой настолько, насколько это
вообще возможно.</p>
<p>Здесь вы найдёте информацию или ссылки на информацию о том, как защитить
вашу систему от различных типов атак, с кем связаться, если вы
нашли недочёт в системе безопасности и так далее. Сюда также включён
раздел, в котором описаны различные способы, прибегнув к которым, системный
программист может с большей вероятностью избегнуть дыр в защите.</p>
<h2>Содержание</h2>
<ul>
<li> <a href="#sec">Информация об Офицере информационной безопасности
<li><a href="#how">Как и куда сообщать о проблеме информационной
безопасности FreeBSD</a></li>
<li><a href="#sec">Информация об Офицере информационной безопасности
FreeBSD</a></li>
<li> <a href="#pol">Политика отработки информации</a></li>
<li> <a href="#adv">Бюллетени безопасности FreeBSD</a></li>
<li> <a href="#ml">Информация о списках рассылки, посвящённых
информационной безопасности FreeBSD</a></li>
<li><a href="#tat">Советы и рекомендации по обеспечению безопасности
FreeBSD</a></li>
<li><a href="#spg">Рекомендации по безопасному программированию</a></li>
<li><a href="#misc">Прочая информация, касающаяся безопасности</a></li>
<li><a href="#pol">Политика обработки информации</a></li>
<li><a href="#sup">Поддерживаемые релизы FreeBSD</a></li>
</ul>
<h2>Дополнительные ресурсы, посвященные информационной безопасности</h2>
<ul>
<li><a href="&enbase;/security/charter.html">Устав Офицера и службы
информационной безопасности</a></li>
<li><a href="advisories.html">Список бюллетеней информационной безопасности
FreeBSD</a></li>
<li><a href="&base;/doc/ru/books/handbook/security-advisories.html">
Чтение сообщений информационной безопасности FreeBSD</a></li>
</ul>
<a name="how"></a>
<h2>Как и куда сообщать о проблеме информационной безопасности FreeBSD</h2>
<p>Все проблемы информационной безопасности FreeBSD следует направлять на
адрес <a href="mailto:secteam@FreeBSD.org">службы информационной
безопасности FreeBSD</a> или, если необходим более высокий уровень
конфиденциальности, в зашифрованном в PGP виде на адрес <a
href="mailto:security-officer@FreeBSD.org">службы Офицера информационной
безопасности</a>, используя <a href="&enbase;/security/so_public_key.asc">
ключ PGP Офицера информационной безопасности</a>. Как минимум, все
сообщения должны содержать:</p>
<ul>
<li>Описание уязвимости.</li>
<li>Какие версии FreeBSD предположительно затронуты, по возможности.</li>
<li>Любые состоятельные пути обхода проблемы.</li>
<li>Примеры кода, по возможности.</li>
</ul>
<p>После сообщения этой информации с вами свяжется Офицер информационной
безопасности или представитель службы информационной безопасности.</p>
<h3>Спам-фильтры</h3>
<p>В связи с высоким уровнем спама основные контактные почтовые адреса
по информационной безопасности подвергаются фильтрации спама. Если Вы
не можете связаться с Офицерами информационной безопасности FreeBSD или
со службой информационной безопасности из-за спам-фильтров (или
предполагаете, что ваш адрес был отфильтрован), пожалуйста, отправьте
письмо на <tt>security-officer-<em>XXXX</em>@FreeBSD.org</tt> с заменой
<em>XXXX</em> на <tt>3432</tt> вместо использования обычных адресов.
Обратите внимание, что этот адрес будет периодически меняться, поэтому
следует проверять здесь последний адрес. Сообщения на этот адрес будут
перенаправлены службе Офицера информационной безопасности FreeBSD.</p>
<a name=sec></a>
<h2>Офицер информационной безопасности FreeBSD и служба информационной
безопасности FreeBSD</h2>
<p>Для того, чтобы лучше координировать обмен информацией с сообществом,
занимающимся вопросами безопасности, во FreeBSD имеется точка для
соответствующих коммуникаций: Офицер информационной безопасности
FreeBSD.</p>
<p>Если вы хотите обратиться в Проект FreeBSD по поводу возможной проблемы в
информационной безопасности, то вы должны <a
href="mailto:security-officer@FreeBSD.org">написать письмо Офицеру
информационной безопасности</a> с описанием того, что вы нашли и
характером нарушения безопасности, с которым вы столкнулись.</p>
<p>Для того, чтобы Проект FreeBSD мог оперативно реагировать на сообщения об
уязвимостях, почтовый алиас Офицера информационной безопасности
соответствует четырём персонам: Офицер информационной безопасности,
заместитель Офицера информационной безопасности и два члена
Основной группы разработчиков. Таким образом, сообщения, посланные в адрес
соответствует трем персонам: Офицер информационной безопасности,
заместитель Офицера информационной безопасности и один член
Основной группы разработчиков. Таким образом, сообщения, посланные на адрес
почтового алиаса <a href="mailto:security-officer@FreeBSD.org">
&lt;security-officer@FreeBSD.org&gt;</a>, доставляются следующим лицам:</p>
<table>
<tr valign="top">
<td>Jacques Vidrine <a
href="mailto:nectar@FreeBSD.org">&lt;nectar@FreeBSD.org&gt;</a></td>
<td>&a.cperciva; <a
href="mailto:cperciva@FreeBSD.org">&lt;cperciva@FreeBSD.org&gt;</a></td>
<td>Офицер информационной безопасности</td>
</tr>
<tr valign="top">
<td>Chris Faulhaber <a
href="mailto:jedgar@FreeBSD.org">&lt;jedgar@FreeBSD.org&gt;</a></td>
<td>&a.simon <a
href="mailto:simon@FreeBSD.org">&lt;simon@FreeBSD.org&gt;</a></td>
<td>Заместитель Офицера информационной безопасности</td>
</tr>
<tr valign="top">
<td>Robert Watson <a
<td>&a.rwatson <a
href="mailto:rwatson@FreeBSD.org">&lt;rwatson@FreeBSD.org&gt;</a></td>
<td>Член Основной группы разработчиков FreeBSD, представитель группы по
выпуску релизов,<br>
<td>Представитель Основной группы разработчиков FreeBSD, представитель
группы по выпуску релизов,<br>
представитель Проекта TrustedBSD, эксперт по архитектуре системной
безопасности</td>
</tr>
<tr valign="top">
<td>Warner Losh <a
href="mailto:imp@FreeBSD.org">&lt;imp@FreeBSD.org&gt;</a></td>
<td>Представитель Основной группы разработчиков FreeBSD, Офицер
безопасности в отставке</td>
</tr>
</table>
<p>Офицер информационной безопасности поддерживается <a
href="mailto:security-team@FreeBSD.org">Службой безопасности FreeBSD
&lt;security-team@FreeBSD.org&gt;</a>, группой коммиттеров, которую он
выбирает сам.</p>
<p>Пожалуйста, используйте <a
href="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">PGP-ключ
Офицера информационной безопасности</a> для шифрования своих сообщений,
направляемых ему, когда это требуется.</p>
href="&enbase;/administration.html#t-secteam" >Службой безопасности
FreeBSD</a> <a
href="mailto:secteam@FreeBSD.org">&lt;secteam@FreeBSD.org&gt;</a>,
небольшой группой коммиттеров, которую он выбирает сам.</p>
<a name="pol"></a>
<h2>Политика отработки информации</h2>
<h2>Политика обработки информации</h2>
<p>Как общее правило, Офицер безопасности FreeBSD предпочитает полное
раскрытие информации об уязвимости после достаточного перерыва на
@ -132,9 +133,8 @@
затронутыми командами.</p>
<p>Офицер безопасности <em>будет</em> уведомлять одного или большее
количество <a href="mailto:admins@FreeBSD.org">администраторов кластера
FreeBSD</a> об уязвимостях, которые подвергают ресурсы Проекта FreeBSD
непосредственной опасности.</p>
количество администраторов кластера об уязвимостях, которые подвергают
ресурсы Проекта FreeBSD непосредственной опасности.</p>
<p>Офицер безопасности может привлечь дополнительных разработчиков FreeBSD
или внешних разработчиков к обсуждению предоставленной информации об
@ -144,7 +144,7 @@
уязвимости, и все привлечённые эксперты будут действовать в соответствии с
указаниями Офицера безопасности. В прошлом привлекались эксперты с большим
опытом работы с высокосложными компонентами операционной системы, включая
FFS, подсистема VM и стек сетевых протоколов.</p>
FFS, подсистему VM и стек сетевых протоколов.</p>
<p>Если уже выполняется процесс выпуска релиза FreeBSD, то инженер,
ответственный за выпуск релиза, может также быть оповещён об имеющейся
@ -157,7 +157,8 @@
<p>Офицер безопасности FreeBSD поддерживает тесные рабочие отношения со
многими другими организациями, включая сторонних разработчиков, имеющих
с FreeBSD общий код (проекты OpenBSD и NetBSD, Apple и другие разработчики,
с FreeBSD общий код (проекты OpenBSD, NetBSD и DragonFlyBSD, Apple и
другие разработчики,
программное обеспечение которых основано на FreeBSD, а также разработчики
Linux), и организации, которые отслеживают уязвимости и случаи нарушения
информационной безопасности, такие, как CERT. Зачастую уязвимости выходят
@ -168,7 +169,7 @@
пожалуйста, явно укажите это в своих сообщениях.</p>
<p>Сообщающие должны тщательно и явно указать любые свои требования
относительно отработки сообщённой информации.</p>
относительно обработки сообщённой информации.</p>
<p>Если сообщающий об уязвимости заинтересован в координации процесса
раскрытия с ним и/или другими разработчиками, это должно быть явно указано
@ -180,78 +181,122 @@
следовать предлагаемому плану по её раскрытию, для того, чтобы дать
пользовательскому сообществу максимально эффективную защиту.</p>
<p>Сообщающие должны иметь в виду, что Проект FreeBSD является проектом с
открытым кодом, и информация о любом изменении в дереве исходного кода
FreeBSD доступна всем. Если предложен план по раскрытию уязвимости, то
он должен принимать во внимание как официальный выпуск бюллетеня по
безопасности, патча и информации об обновлении, а также изначальное
включение исправлений в дерево исходного кода FreeBSD. Обязателен
временной промежуток между включением исправлений в дерево и созданием
и выпуском официальных объявлений, патчей, двоичных обновлений, так как
для их создания используется система управления исходным кодом.</p>
<p>Сообщения могут быть защищены с помощью PGP. Если это нужно, то ответы
также будут защищены посредством PGP.</p>
<a name=adv></a>
<h2>Бюллетени безопасности FreeBSD</h2>
<a name="sup"></a>
<h2>Поддерживаемые релизы FreeBSD</h2>
<p>Служба информационной безопасности FreeBSD выпускает бюллетени
<p>Офицер информационной безопасности FreeBSD выпускает бюллетени
безопасности для нескольких разрабатываемых веток FreeBSD. Это
<em>Ветки -STABLE</em> и <em>Ветки Security</em>. (Бюллетени не
выпускаются для <em>Ветки -CURRENT</em>.)</p>
<ul>
<li><p>Обычно здесь присутствует только одна ветка -STABLE, хотя в процессе
перехода от одной основной линии разработки к другой (например, с FreeBSD
4.x на 5.x) имеется временной интервал, в котором существуют две ветки
-STABLE. Тэги ветки -STABLE носят имена типа <tt>RELENG_4</tt>.
Соответствующие версии носят названия типа <tt>FreeBSD
4.6-STABLE</tt>.</p></li>
<li><p>Тэги ветки -STABLE носят
имена типа <tt>RELENG_7</tt>. Соответствующие сборки носят
названия типа <tt>FreeBSD 7.0-STABLE</tt>.</p></li>
<li><p>Каждому релизу FreeBSD поставлена в соответствие ветка безопасности
(Security Branch). Метки веток безопасности именуются как
<tt>RELENG_4_6</tt>. Соответствующие построенные версии носят названия
типа <tt>FreeBSD 4.6-RELEASE-p7</tt>.</p></li>
(Security Branch). Тэги веток безопасности именуются как
<tt>RELENG_7_0</tt>. Соответствующие сборки носят названия
типа <tt>FreeBSD 7.0-RELEASE-p1</tt>.</p></li>
</ul>
<p>Каждая ветка поддерживается службой безопасности ограниченное время,
обычно до 12 месяцев после релиза. Ожидаемые времена жизни для
поддерживаемых в настоящее время веток даны ниже. В колонке
<em>Ожидаемое время жизни</em> указана ближайшая дата, по истечение
которой ветка будет брошена. Пожалуйста, учтите, что эти сроки в будущем
могут быть увеличены, но только исключительные обстоятельства могут
привести к отказу от поддержки ветки раньше указанной даты.</p>
<p>Проблемы, затрагивающие Коллекцию портов FreeBSD, описываются в <a
href="http://vuxml.FreeBSD.org/">документе FreeBSD VuXML</a>.</p>
<p>Каждая ветка поддерживается Офицером безопасности в течение
ограниченного времени. Ветки разделены на типы, которые определяют срок
жизни, как показано ниже.</p>
<dl>
<dt>Раннее внедрение (Early Adopter)</dt>
<dd>Релизы, выпускаемые из ветки -CURRENT, будут поддерживаться Офицером
безопасности как минимум в течение 6 месяцев после выхода.</dd>
<dt>Обычный (Normal)</dt>
<dd>Релизы, выпускаемые из ветки -STABLE, будут поддерживаться Офицером
безопасности как минимум в течение 12 месяцев после выхода и в течение
дополнительного времени (если потребуется), достаточного, чтобы
следующий релиз был выпущен по крайней мере за 3 месяца до истечения
срока поддержки предыдущего Обычного релиза.
</dd>
<dt>Расширенный (Extended)</dt>
<dd>Отобранные релизы (обычно, каждый второй релиз и последний релиз из
каждой ветки -STABLE) будут поддерживаться Офицером безопасности как
минимум в течение 24 месяцев после выхода и в течение дополнительного
времени (если потребуется), достаточного, чтобы следующий Расширенный
релиз был выпущен по крайней мере за 3 месяца до истечения срока
поддержки предыдущего Расширенного релиза.
</dd>
</dl>
<a name="supported-branches"></a>
<p>Ниже приводятся текущее назначение и ожидаемое время жизни для
поддерживаемых в настоящее время веток. В колонке
<em>Ожидаемое окончание срока жизни</em> указана ближайшая дата, по истечении
которой будет прекращена поддержка ветки. Пожалуйста, учтите, что эти
даты могут быть сдвинуты в будущее, но только исключительные обстоятельства
могут привести к отказу от поддержки ветки раньше указанной даты.</p>
<table class="tblbasic">
<tr>
<th>Ветка</th>
<th>Релиз</th>
<th>Ожидаемое время жизни</th>
<th>Тип</th>
<th>Дата выхода</th>
<th>Ожидаемое окончание срока жизни</th>
</tr>
<tr>
<td>RELENG_4</td>
<td>RELENG_6</td>
<td>n/a</td>
<td>31 октября 2004</td>
<td>n/a</td>
<td>n/a</td>
<td>30 ноября 2010</td>
</tr>
<tr>
<td>RELENG_4_8</td>
<td>4.8-RELEASE</td>
<td>31 марта 2004</td>
<td>RELENG_6_4</td>
<td>6.4-RELEASE</td>
<td>Расширенный</td>
<td>28 ноября 2008</td>
<td>30 ноября 2010</td>
</tr>
<tr>
<td>RELENG_4_9</td>
<td>4.9-RELEASE</td>
<td>31 октября 2004</td>
<td>RELENG_7</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>последний релиз + 2 года</td>
</tr>
<tr>
<td>RELENG_5_2</td>
<td>5.2-RELEASE</td>
<td>31 июля 2004</td>
<td>RELENG_7_1</td>
<td>7.1-RELEASE</td>
<td>Расширенный</td>
<td>4 января 2009</td>
<td>31 января 2011</td>
</tr>
<tr>
<td>RELENG_7_2</td>
<td>7.2-RELEASE</td>
<td>Обычный</td>
<td>4 мая 2009</td>
<td>31 мая 2010</td>
</tr>
<tr>
<td>RELENG_8</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
<td>последний релиз + 2 года</td>
</tr>
<tr>
<td>RELENG_8_0</td>
<td>8.0-RELEASE</td>
<td>Обычный</td>
<td>25 ноября 2009</td>
<td>30 ноября 2010</td>
</tr>
</table>
@ -259,405 +304,25 @@
рекомендуется произвести обновление до одной из поддерживаемых версий,
указанных выше.</p>
<p>Как и все направления разработки, исправления в защите системы сначала
испытываются в ветке <a
href="&enbase;/doc/ru_RU.KOI8-R/books/handbook/cutting-edge.html#CURRENT">
FreeBSD-current</a>. После нескольких дней некоторого тестирования
исправления переносятся в поддерживаемые ветки FreeBSD-stable и
выпускается очередной бюллетень.</P>
<p>Немного статистики по бюллетеням, выпущенным в течение 2002 года:</p>
<ul>
<li>44 бюллетеня с проблемами различной степени опасности касались
базовой системы.</li>
<li>12 бюллетеней описывали уязвимости, касающиеся только FreeBSD.
Остальные 32 бюллетеня являлись проблемами, общими как минимум с одной
из других ОС (часто по причине использования одного и того же кода).</li>
<li>Было выпущено 6 замечаний по безопасности, которые касались 95 проблем
в дополнительных приложениях сторонних разработчиков, входящих в
Коллекцию Портов.</li>
</ul>
<p>Бюллетени рассылаются в следующие списки рассылки FreeBSD:</p>
<ul>
<li>FreeBSD-security-notifications@FreeBSD.org</li>
<li>FreeBSD-security@FreeBSD.org</li>
<li>FreeBSD-announce@FreeBSD.org</li>
</ul>
<p>Бюллетени всегда подписываются с помощью <a
href="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">PGP-ключа</a>
Офицера Безопасности и помещаются, вместе с соответствующими исправлениями,
в наш <a
href="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/index.html">архив</a>. На
момент написания этого текста вышли следующие бюллетени (заметьте, что этот
список может быть устаревшим на несколько дней - самые последние бюллетени
находятся на <a
href="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/">
FTP-сервере</A>):</P>
<p>Список выпущенных бюллетеней можно найти на странице <a
href="advisories.html">FreeBSD Security Advisories</a>.</p>
&advisories.html.inc;
<a name=ml></a>
<h2>Информация о списках рассылки, посвящённых безопасности FreeBSD</h2>
<p>Если вы администрируете или эксплуатируете некоторое количество систем
FreeBSD, вам полезно быть подписанным на один или несколько из следующих
списков рассылки:</p>
<table>
<tr>
<td><a
href="http://lists.freebsd.org/mailman/listinfo/freebsd-security">
freebsd-security</a></td>
<td>Обсуждение общих вопросов безопасности</td>
</tr>
<tr>
<td><A
HREF="http://lists.freebsd.org/mailman/listinfo/freebsd-security-notifications">
freebsd-security-notifications</A></td>
<td>Уведомления, касающиеся безопасности (модерируемый список
рассылки)</td>
</tr>
</table>
<A NAME=spg></A>
<H2>Рекомендации по безопасному программированию</H2>
<P></P><UL>
<LI>Никогда не доверяйте никаким входным данным, будь то аргументы командной
строки, переменные окружения, конфигурационные файлы, входящие пакеты
TCP/UDP/ICMP, имена хостов, аргументы функций и так далее. Если размер
полученных данных является фактором, контролируемым извне, то программа
или функция должна эти данные проверять при копировании. Особо стоит
обратить внимание на следующие моменты:
<P></P><UL>
<LI>strcpy() и sprintf(), применяемые к данным, размер которых неизвестен.
Используйте strncpy и snprintf(), когда размер известен (или выполняйте
какие-то другие формы проверки границ данных, когда их длина неизвестна).
В частности, никогда не используйте функции gets() или sprintf(), точка.
Если вы все же будете это делать, мы вас проклянем.
<P></P></LI>
<LI>Если вы осуществляете проверку ввода пользователя на то, чтобы он не
содержал неверные символы, НЕ проверяйте наличие неправильных символов.
Вместо этого просто проверяйте, что во входном потоке содержатся ТОЛЬКО
разрешенные символы. Общий принцип: запрет всего, что явно не разрешено.
<P></P></LI>
<LI>Прочтите страницы Справочника по функциям strncpy() и strncat().
Удостоверьтесь, что вы правильно понимаете их работу!!! Функция strncpy()
может не добавлять терминирующий \0, когда как strncat() это делает.
<P></P></LI>
<LI>Отслеживайте использование функций strvis() и getenv(). При использовании
strvis() легко получить неправильную целевую строку, а getenv()
может вернуть результатом строчки, намного превышающие то, что ожидает ваша
программа. Использование этих функций является одним из основных методов
выполнения атак на систему, при которой установка необычных значений
переменных окружения приводит к изменению значения стека и переменных
внутри программы. Если ваша программа использует переменные окружения,
будьте осторожны. Будьте сверхосторожны!
<P></P></LI>
<LI>Каждый раз при использовании вызовов open() или stat() спросите себя:
"Что, если это - символическая ссылка?"
<P></P></LI>
<LI>Всегда используйте mkstemp() вместо mktemp(), tempnam(), и тд. Также
в общем будьте осторожны при работе в /tmp, имея в виду, что в /tmp
очень мало атомарных операций:
<UL>
<LI>Создание каталога. Оно может быть удачным или с ошибкой.</LI>
<LI>Открытие файла O_CREAT | O_EXCL</LI>
</UL>
Если вы используете mkstemp(), то вышеуказанные случаи обрабатываются
корректно. Поэтому все временные файлы должны быть созданы с
использованием mkstemp() для гарантии того, что нет совпадения имен и
все права доступа выставляются верно.
<P></P></LI>
<LI>Если атакующий может посылать пакеты от имени другой произвольной
системы, то он получает полный контроль над данными, которые мы получаем
и <B>НИКАКИМ</B> из них мы не должны доверять.
<P></P></LI>
<LI>Никогда не полагайтесь на то, что конфигурационный файл имеет
правильный формат или что он сгенерирован соответствующей утилитой. Не
доверяйте пользовательскому вводу, который касается имен терминалов и
не думайте, что в вводимых строках не будет подстрок '/' или '../../../',
если есть хоть какой-то шанс, что они будут использованы в качестве
маршрута к файлу. Не доверяйте <B>НИКАКИМ</B> путям, которые ввел
пользователь, когда вы работаете с правами суперпользователя.
<P></P></LI>
<LI>Ищите бреши и недочеты в способе хранения данных. Все временные
файлы должны иметь права 600 для того, чтобы быть защищенными от
любопытных глаз.
<P></P></LI>
<LI>Не просто ищите обычные подозрительные места в программах, которые
выполняются с повышенными привилегиями. Просмотрите код строчку за
строчкой в поиске возможных в этих случаях переполнений, так как имеется
гораздо больше способов вызвать переполнение буфера, чем просто используя
strcpy() со товарищи.
<P></P></LI>
<LI>Если вы где-то понизили привилегии, это вовсе не значит, что в программа
не подвержена атакам. Атакующий может поместить соответствующий код в
стек, чтобы вернуть привилегированный режим перед выполнением
/bin/sh.</LI></UL>
<P></P></LI>
<LI>Управляйте значением uid. Меняйте привилегии как можно быстрее, и
меняйте их на самом деле. Переключение между euid и uid НЕ достаточно.
Используйте setuid() везде, где это возможно.
<P></P></LI>
<LI>Никогда не выводите содержимого конфигурационного файла при возникновении
ошибок. Достаточно номера строки и может быть, позиции в строке. Это
нужно делать для всех библиотек и любой программы с установленными битами
suid/sgid.
<P></P></LI>
<LI>Советы для тех, кто проверяет имеющийся код на наличие проблем
с безопасностью:<P></P>
<UL>
<LI>Если вы не уверены в правильности ваших исправлений, пошлите их
обозревателю, с которым у вас уже есть договоренность на просмотр вашего
кода. Не выполняйте коммит кода, в котором вы не уверены, так как
нарушение работы чего-либо из-за исправлений во имя безопасности приводит
в некоторое замешательство.
<P></P></LI>
<LI>Те, у кого нет привилегий на CVS для выполнения операции commit, должны
понимать, что обозреватель с такими привилегиями должен просмотреть
изменения. Этот человек должен просмотреть и включить окончательную версию
в дерево CVS.
<P></P></LI>
<LI>При посылке изменений для просмотра, всегда используйте diff в форматах
context или unidiff - в этих случаях изменения могут быть легко переданы
программе patch(1). Не посылайте просто файлы полностью. Файлы diff
гораздо легче читать и вносить изменения из них в исходные тексты (особенно
когда может иметь место много изменений в разных местах). Все изменения
должны делаться в ветке -current.
<P></P></LI>
<LI>Всегда тестируйте ваши изменения непосредственно (например, компилируя
и запуская затрагиваемые программы) перед тем, как послать их обозревателю.
Никому не нравится получать нерабочий код для обозрения, что обычно
означает, что посылающий туда даже не заглядывал (что ещё более усиливает
недоверие к человеку). Если вам нужен вход на машину с конкретной версией,
которой у вас нет - просто спросите. У нас имеются ресурсы именно с
таким назначением.
<P></P></LI>
<LI>Замечание для коммиттеров: не забудьте перенести патчи из ветки -current
в соответствующие места ветки -stable.
<P></P></LI>
<LI>Не нужно без необходимости переписывать код в соответствии с вашим
стилем/вкусом - это только затруднит работу обозревателя. Делайте это,
если только на то имеются веские причины.</LI></UL>
<P></P></LI>
<LI>Обратите внимание на программы, которые выполняют сложные манипуляции
с обработчиками сигналов. Многие подпрограммы в различных библиотеках
недостаточно реентерабельны, чтобы делать это корректно.
<P></P></LI>
<LI>Особое внимание уделите использованию realloc() - эта функция чаще всего
используется неправильно.
<P></P></LI>
<LI>При использовании буферов фиксированного размера используйте sizeof()
во избежание несоответствия, когда размер буфера меняется, а код, который
его использует, нет. Например:
<pre>
char buf[1024];
struct foo { ... };
...
ПЛОХО:
xxx(buf, 1024)
xxx(yyy, sizeof(struct foo))
ХОРОШО:
xxx(buf, sizeof(buf))
xxx(yyy, sizeof(yyy))
</pre>
Будьте внимательны при использовании sizeof() с указателями, когда вы
на самом деле хотите выяснить размер данных, к которым относится указатель!
<P></P></LI>
<LI>Каждый раз, когда вы видите "char foo[###]", проверьте каждое
использование массива foo, чтобы удостовериться, что он не может быть
переполнен. Если вы не можете избежать переполнения (а такие случаи могут
иметь место), то, по крайней мере, выделяйте память под буфер операцией
malloc, чтобы никто не смог получить доступ к стеку.
<P></P></LI>
<li>Всегда закрывайте файловые дескрипторы, как только это можно сделать -
это делает более вероятным сброс содержимого буфера стандартного
ввода/вывода. В библиотечных процедурах всегда устанавливайте параметр
close-on-exec для любых открываемых файловых дескрипторов.
<p></p></li>
</ul>
<p>Полезным инструментом аудита является порт its4, находящийся в каталоге
/usr/ports/security/its4/. Это автоматизированный аудитор кода на языке C,
который выявляет потенциальные проблемы в коде. Это полезная однопроходная
утилита, но на неё не стоит полагаться, а полный аудит должен включать
проверка всего кода человеком.</p>
<p>За дополнительной информацией о технике безопасного программирования
и посвящённым этому вопросу ресурсах обратитесь к странице <A
HREF="http://www.shmoo.com/securecode/">How to Write Secure Code</A>.</P>
<A NAME=tat></A>
<H2>Советы и рекомендации по безопасности FreeBSD</H2>
<P>Вот некоторые действия, которые вы должны предпринять, чтобы защитить
FreeBSD или фактически любую &unix;-систему:</p>
<UL>
<LI>Отключение потенциально опасного программного обеспечения<BR><P></P>
Имеется большое количество программного обеспечения, которое для
использования специфических ресурсов запускается с правами особого
привилегированного пользователя, для чего на выполнимые файлы устанавливается
бит set-uid. Примерами таких программ являются UUCP и PPP, которые
используют последовательный порт, или sendmail, который работает с почтовой
очередью и привязывается к привилегированному сетевому порту. Если вы не
используете UUCP, вовсе не обязательно иметь ее в системе, и его можно
просто убрать. Конечно, это требует хорошего знания того, что может быть
выброшено, а что нет, и хорошее представление о том, захотите ли вы иметь
эту функциональность в будущем.<BR><P></P>
Вы можете обнаружить, что некоторые утилиты недостаточно полезны для того,
чтобы иметь их в системе с риском для безопасности, например, swapinfo.
Если вы уберете бит set-uid с выполнимого файла (с помощью команды
'chmod ug-s filename'), вы сможете воспользоваться swapinfo, работая как
пользователь root. Однако это является не такой уж хорошей идеей, если,
убрав все биты set-uid, вам придется все время работать как
root.<BR><P></P>
Удалите не только программы, которыми вы не пользуетесь, но и сервисы,
которые вы не хотите или которые вам не нужно предоставлять. Это может быть
сделано путем редактирования файлов <TT>/etc/inetd.conf</TT> и
<TT>/etc/rc.conf</TT> с отключением в нем всех неиспользуемых
сервисов.<P></P></li>
<LI>Исправление программного обеспечения, в котором имеются проблемы с
безопасностью (или как быть на один шаг впереди кракеров)<BR><P></P>
Подпишитесь на различные <A HREF="#ml">списки рассылки по безопасности
FreeBSD</A>, чтобы получать известия об ошибках в безопасности и
исправления. Вносите исправления немедленно.<P></P></li>
<LI>Создание архивных копий для восстановления системы в случае нарушения
безопасности<BR><P></P>
Всегда имейте архивную копию и чистую версию операционной системы
(например, на CD-Rom). Проверьте, что архивные копии не содержат данных,
поврежденных или измененных в результате атаки.<P></P></li>
<LI>Установка программного обеспечения для отслеживания состояния
системы<BR><P></P>
Программы типа tcp wrappers и tripwire (оба находятся среди
пакаджей/портов) могут помочь проводить мониторинг работы системы. Это
облегчает обнаружение попыток взлома. Также читайте результаты работы
скриптов из /etc/security, которые запускаются ежедневно и посылают свои
сообщения по электронной почте пользователю root.<P></P></li>
<LI>Обучение людей, работающих в системе<BR><P></P>
Пользователи должны знать, что они делают. Им должно быть сказано, чтобы
они никому не передавали свои пароли и делали их трудными для отгадывания.
Дайте им понять, что безопасность системы/сети отчасти находится в
их руках.<P></P></li>
</UL>
<P>Имеется также документ FreeBSD Security How-To, в котором даются
некоторые подробные советы по усилению безопасности вашей системы. Вы
можете найти его по адресу <A HREF="http://www.FreeBSD.org/~jkb/howto.html">
http://www.FreeBSD.org/~jkb/howto.html</A>.</P>
<P>Обеспечение безопасности - это динамичный процесс. Следуйте последним
разработкам в этой области.</P>
<A NAME=misc></A>
<H2>Что делать, если вы обнаружили нарушение безопасности</H2>
<UL>
<LI><B>Определите серьезность нарушения безопасности</B><BR>
Какие привилегии получил атакующий? Получил ли он доступ с привилегиями
системного администратора? Или атакующий получил только доступ на уровне
обычного пользователя?</LI>
<LI><B>Определите, было ли изменено состояние системы (ядро или
пользовательская часть)</B><BR>
Какое программное обеспечение было изменено? Было ли установлено новое
ядро? Были ли модифицированы какие-либо системные программы (такие, как
telnetd, login, и тд.)? Если вы полагаете, что атакующий мог сделать какие
угодно изменения в ОС, вы можете переустановить операционную систему с
безопасного носителя.</LI>
<LI><B>Определите, как был осуществлен взлом</B><BR>
Был ли взлом осуществлен через хорошо известную ошибку в безопасности? Если
это так, установите соответствующие патчи. Был ли взлом осуществлен из-за
неправильной конфигурации? Или это была новая ошибка? Если вы думаете,
что это было неизвестная ошибка, вы должны предупредить <A
HREF="mailto:security-officer@FreeBSD.org">Офицера Безопасности
FreeBSD</A>.</LI>
<LI><B>Устранение дыры в безопасности</B><BR>
Для устранения проблемы установите новое программное обеспечение или патчи
к старому. Отключите всех пользователей, бюджеты которых были
взломаны.</LI>
<LI><B>Другие ресурсы</B><BR>
<A HREF="http://www.cert.org">CERT</A> также предоставляет
<A HREF="http://www.cert.org/nav/recovering.html">подробную информацию</A>
о том, что нужно предпринять в случае нарушения безопасности системы.</LI>
</UL>
<H2>Другие источники информации, касающиеся безопасности</H2>
<UL>
<LI><A href="http://www.cerias.purdue.edu/coast/archive/index.html">Архив
COAST</A> содержит гигантскую коллекцию материалов, посвященных
безопасности.</LI>
<LI><A href="http://www.cerias.purdue.edu/infosec/hotlist/">Center for
Education and Research in Information Assurance and Security (CERIAS)</A>
является местом, с которого следует начинать поиск материалов
по безопасности. Здесь находятся сотни полезных ссылок. Всё, что вы
хотели знать о безопасности... и больше.</LI>
<LI>Различные группы CERT, такие как <A href="http://www.cert.org">
http://www.cert.org</A> и <A href="http://www.auscert.org.au">
http://www.auscert.org.au</A>.</LI>
<LI>Списки рассылки, такие как <A
HREF="http://www.securityfocus.com/forums/bugtraq/intro.html">Bugtraq</A>
и <A HREF="http://list.nfr.com/forum/firewall-wizards.html">Firewall
Wizards</A>.</LI>
</UL>
<p>Бюллетени всегда подписываются с использованием <a
href="&enbase;/security/so_public_key.asc">PGP-ключа</a>
Офицера Безопасности и помещаются, вместе с соответствующими
исправлениями, на web-сервер <a
href="http://security.FreeBSD.org/">http://security.FreeBSD.org/</a>
в поддиректории <a
href="http://security.FreeBSD.org/advisories/">advisories</a> и <a
href="http://security.FreeBSD.org/patches/">patches</a>.</p>
&footer
</body>
</body>
</html>