Submitted by: Emily Boyd <emilyboyd@emilyboyd.com> Sponsored by: Google Summer of Code 2005
		
			
				
	
	
		
			664 lines
		
	
	
	
		
			28 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			664 lines
		
	
	
	
		
			28 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
<!--
 | 
						||
     The FreeBSD Russian Documentation Project
 | 
						||
 | 
						||
     $FreeBSD: www/ru/security/security.sgml,v 1.16 2004/09/21 07:50:18 den 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 "-//W3C//DTD HTML 4.01 Transitional//EN" [
 | 
						||
<!ENTITY base CDATA "..">
 | 
						||
<!ENTITY date "$FreeBSD: www/ru/security/security.sgml,v 1.16 2004/09/21 07:50:18 den Exp $">
 | 
						||
<!ENTITY title "Информационная безопасность FreeBSD">
 | 
						||
<!ENTITY % navincludes SYSTEM "../includes.navsupport.sgml"> %navincludes;
 | 
						||
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
 | 
						||
<!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>
 |