- Move includes.nav*.sgml to share/sgml/navibar.ent and
<lang>/share/sgml/navibar.l10n.ent.
- Move includes.sgml and includes.xsl to
share/sgml/common.ent, share/sgml/header.ent, <lang>/share/sgml/l10n.ent,
and <lang>/share/sgml/header.l10n.ent.
- Move most of XSLT libraries to share/sgml/*.xsl and
<lang>/share/sgml/*.xsl.
- Move news.xml and other *.xml files for the similar purpose
to share/sgml/*.xml and <lang>/share/sgml/*.xml.
- Switch to use a custom DTD for HTML document. Now we use
"-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension", which is
HTML 4.01 + some entities previously pulled via
"<!ENTITY % includes SYSTEM "includes.sgml"> %includes;" line.
The location of entity file will be resolved by using catalog file.
- Add DOCTYPE declearation to XML documents. This makes the followings
possible:
* Use of &foo; entities for SGML in an XML file instead of defining
{$foo} as the same content.
* &symbolic; entities for Latin characters.
- Duplicated information between SGML and XML, or English and
translated doc, has been removed as much as possible.
663 lines
28 KiB
Text
663 lines
28 KiB
Text
<!--
|
||
The FreeBSD Russian Documentation Project
|
||
|
||
$FreeBSD: www/ru/security/security.sgml,v 1.17 2005/10/05 20:59:57 simon Exp $
|
||
$FreeBSDru: frdp/www/ru/security/security.sgml,v 1.33 2004/09/21 07:31:12 den Exp $
|
||
|
||
Original revision: 1.151
|
||
-->
|
||
|
||
<!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 title "Информационная безопасность FreeBSD">
|
||
<!ENTITY % navinclude.support "INCLUDE">
|
||
<!ENTITY advisories.html.inc SYSTEM "advisories.html.inc">
|
||
]>
|
||
|
||
<html>
|
||
&header;
|
||
|
||
<h2>Введение</h2>
|
||
|
||
<p>Эта веб-страница создана для того, чтобы помочь как начинающим, так и
|
||
опытным пользователям в области информационной безопасности FreeBSD.
|
||
Во FreeBSD вопросы безопасности воспринимаются весьма серьёзно и постоянно
|
||
работают над тем, чтобы сделать ОС защищённой настолько, насколько это
|
||
вообще возможно.</p>
|
||
|
||
<p>Здесь вы найдёте информацию или ссылки на информацию о том, как защитить
|
||
вашу систему от различных типов атак, с кем связаться, если вы
|
||
нашли недочёт в системе безопасности и так далее. Сюда также включён
|
||
раздел, в котором описаны различные способы, прибегнув к которым, системный
|
||
программист может с большей вероятностью избегнуть дыр в защите.</p>
|
||
|
||
|
||
<h2>Содержание</h2>
|
||
|
||
<ul>
|
||
<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>
|
||
</ul>
|
||
|
||
|
||
<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">
|
||
<security-officer@FreeBSD.org></a>, доставляются следующим лицам:</p>
|
||
|
||
<table>
|
||
<tr valign="top">
|
||
<td>Jacques Vidrine <a
|
||
href="mailto:nectar@FreeBSD.org"><nectar@FreeBSD.org></a></td>
|
||
|
||
<td>Офицер информационной безопасности</td>
|
||
</tr>
|
||
|
||
<tr valign="top">
|
||
<td>Chris Faulhaber <a
|
||
href="mailto:jedgar@FreeBSD.org"><jedgar@FreeBSD.org></a></td>
|
||
|
||
<td>Заместитель Офицера информационной безопасности</td>
|
||
</tr>
|
||
|
||
<tr valign="top">
|
||
<td>Robert Watson <a
|
||
href="mailto:rwatson@FreeBSD.org"><rwatson@FreeBSD.org></a></td>
|
||
|
||
<td>Член Основной группы разработчиков FreeBSD, представитель группы по
|
||
выпуску релизов,<br>
|
||
представитель Проекта TrustedBSD, эксперт по архитектуре системной
|
||
безопасности</td>
|
||
</tr>
|
||
|
||
<tr valign="top">
|
||
<td>Warner Losh <a
|
||
href="mailto:imp@FreeBSD.org"><imp@FreeBSD.org></a></td>
|
||
|
||
<td>Представитель Основной группы разработчиков FreeBSD, Офицер
|
||
безопасности в отставке</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<p>Офицер информационной безопасности поддерживается <a
|
||
href="mailto:security-team@FreeBSD.org">Службой безопасности FreeBSD
|
||
<security-team@FreeBSD.org></a>, группой коммиттеров, которую он
|
||
выбирает сам.</p>
|
||
|
||
<p>Пожалуйста, используйте <a
|
||
href="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">PGP-ключ
|
||
Офицера информационной безопасности</a> для шифрования своих сообщений,
|
||
направляемых ему, когда это требуется.</p>
|
||
|
||
<a name="pol"></a>
|
||
<h2>Политика отработки информации</h2>
|
||
|
||
<p>Как общее правило, Офицер безопасности FreeBSD предпочитает полное
|
||
раскрытие информации об уязвимости после достаточного перерыва на
|
||
выполнение тщательного анализа и устранения уязвимости, а также
|
||
соответствующего тестирования исправления и взаимодействия с другими
|
||
затронутыми командами.</p>
|
||
|
||
<p>Офицер безопасности <em>будет</em> уведомлять одного или большее
|
||
количество <a href="mailto:admins@FreeBSD.org">администраторов кластера
|
||
FreeBSD</a> об уязвимостях, которые подвергают ресурсы Проекта FreeBSD
|
||
непосредственной опасности.</p>
|
||
|
||
<p>Офицер безопасности может привлечь дополнительных разработчиков FreeBSD
|
||
или внешних разработчиков к обсуждению предоставленной информации об
|
||
уязвимости, если требуется их экспертиза для полного понимания или
|
||
исправления проблемы. Будет выполнено необходимое разграничение для
|
||
минимизации ненужного распространения информации о представленной
|
||
уязвимости, и все привлечённые эксперты будут действовать в соответствии с
|
||
указаниями Офицера безопасности. В прошлом привлекались эксперты с большим
|
||
опытом работы с высокосложными компонентами операционной системы, включая
|
||
FFS, подсистема VM и стек сетевых протоколов.</p>
|
||
|
||
<p>Если уже выполняется процесс выпуска релиза FreeBSD, то инженер,
|
||
ответственный за выпуск релиза, может также быть оповещён об имеющейся
|
||
уязвимости и её серьёзности, чтобы было принято решение об информировании
|
||
относительно цикла выпуска релиза и наличии каких-либо серьёзных ошибок
|
||
в программном обеспечении, связанном с готовящимся релизом. Если
|
||
это будет необходимо, то Офицер безопасности не будет сообщать подробную
|
||
информацию о природе уязвимости Инженеру по выпуску релиза, ограничиваясь
|
||
информацией о её существовании и серьёзности.</p>
|
||
|
||
<p>Офицер безопасности FreeBSD поддерживает тесные рабочие отношения со
|
||
многими другими организациями, включая сторонних разработчиков, имеющих
|
||
с FreeBSD общий код (проекты OpenBSD и NetBSD, Apple и другие разработчики,
|
||
программное обеспечение которых основано на FreeBSD, а также разработчики
|
||
Linux), и организации, которые отслеживают уязвимости и случаи нарушения
|
||
информационной безопасности, такие, как CERT. Зачастую уязвимости выходят
|
||
за рамки реализации FreeBSD, и (наверное, реже) могут иметь широкий
|
||
резонанс для всего сетевого сообщества. В таких условиях Офицер
|
||
безопасности может раскрыть информацию об уязвимости этим сторонним
|
||
организациям: если вы не хотите, чтобы Офицер безопасности это делал,
|
||
пожалуйста, явно укажите это в своих сообщениях.</p>
|
||
|
||
<p>Сообщающие должны тщательно и явно указать любые свои требования
|
||
относительно отработки сообщённой информации.</p>
|
||
|
||
<p>Если сообщающий об уязвимости заинтересован в координации процесса
|
||
раскрытия с ним и/или другими разработчиками, это должно быть явно указано
|
||
в сообщениях. При отсутствии явных требований Офицер безопасности FreeBSD
|
||
выберет план раскрытия информации, который учитывает как требования
|
||
оперативности, так и тестирования любых решений. Сообщающие должны иметь
|
||
в виду, что если уязвимость активно обсуждается в открытых форумах (таких,
|
||
как bugtraq) и используется, то Офицер Безопасности может решить не
|
||
следовать предлагаемому плану по её раскрытию, для того, чтобы дать
|
||
пользовательскому сообществу максимально эффективную защиту.</p>
|
||
|
||
<p>Сообщающие должны иметь в виду, что Проект FreeBSD является проектом с
|
||
открытым кодом, и информация о любом изменении в дереве исходного кода
|
||
FreeBSD доступна всем. Если предложен план по раскрытию уязвимости, то
|
||
он должен принимать во внимание как официальный выпуск бюллетеня по
|
||
безопасности, патча и информации об обновлении, а также изначальное
|
||
включение исправлений в дерево исходного кода FreeBSD. Обязателен
|
||
временной промежуток между включением исправлений в дерево и созданием
|
||
и выпуском официальных объявлений, патчей, двоичных обновлений, так как
|
||
для их создания используется система управления исходным кодом.</p>
|
||
|
||
<p>Сообщения могут быть защищены с помощью PGP. Если это нужно, то ответы
|
||
также будут защищены посредством PGP.</p>
|
||
|
||
<a name=adv></a>
|
||
<h2>Бюллетени безопасности FreeBSD</h2>
|
||
|
||
<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>Каждому релизу FreeBSD поставлена в соответствие ветка безопасности
|
||
(Security Branch). Метки веток безопасности именуются как
|
||
<tt>RELENG_4_6</tt>. Соответствующие построенные версии носят названия
|
||
типа <tt>FreeBSD 4.6-RELEASE-p7</tt>.</p></li>
|
||
</ul>
|
||
|
||
<p>Каждая ветка поддерживается службой безопасности ограниченное время,
|
||
обычно до 12 месяцев после релиза. Ожидаемые времена жизни для
|
||
поддерживаемых в настоящее время веток даны ниже. В колонке
|
||
<em>Ожидаемое время жизни</em> указана ближайшая дата, по истечение
|
||
которой ветка будет брошена. Пожалуйста, учтите, что эти сроки в будущем
|
||
могут быть увеличены, но только исключительные обстоятельства могут
|
||
привести к отказу от поддержки ветки раньше указанной даты.</p>
|
||
|
||
<table class="tblbasic">
|
||
<tr>
|
||
<th>Ветка</th>
|
||
<th>Релиз</th>
|
||
<th>Ожидаемое время жизни</th>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td>RELENG_4</td>
|
||
<td>n/a</td>
|
||
<td>31 октября 2004</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td>RELENG_4_8</td>
|
||
<td>4.8-RELEASE</td>
|
||
<td>31 марта 2004</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td>RELENG_4_9</td>
|
||
<td>4.9-RELEASE</td>
|
||
<td>31 октября 2004</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td>RELENG_5_2</td>
|
||
<td>5.2-RELEASE</td>
|
||
<td>31 июля 2004</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<p>Более старые релизы не поддерживаются, а их пользователям настоятельно
|
||
рекомендуется произвести обновление до одной из поддерживаемых версий,
|
||
указанных выше.</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>
|
||
|
||
&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>
|
||
|
||
&footer
|
||
|
||
</body>
|
||
</html>
|