Каковы лучшие программные средства контроля безопасности и шаблоны проектирования? - PullRequest
6 голосов
/ 21 декабря 2008

Существует много советов по безопасности, чтобы сообщить программистам, что не делать. Каковы, на ваш взгляд, лучшие практики, которым следует следовать при кодировании для обеспечения безопасности?

Пожалуйста, добавьте предложенный ниже шаблон контроля безопасности / дизайна. Предлагаемый формат - это жирный заголовок, обобщающий идею, а затем описание и примеры, например ::100100

Запретить по умолчанию

Запретить все, что явно не разрешено ...

Пожалуйста, оцените или прокомментируйте улучшения, а не дублируйте существующий ответ. Пожалуйста, также добавьте различные шаблоны и элементы управления в их собственный ответ, а не добавляйте ответ с 3 или 4 предпочтительными элементами управления.

edit: я делаю это вики сообщества для поощрения голосования.

Ответы [ 17 ]

4 голосов
/ 22 декабря 2008

Все эти идеи, которые люди перечисляют (изоляция, наименьшие привилегии, белый список), являются инструментами.

Но сначала вы должны знать, что означает «безопасность» для вашего приложения. Часто это означает что-то вроде

  1. Доступность : Программа не сможет обслуживать одного клиента, поскольку другой клиент отправил неверные данные.
  2. Конфиденциальность : Программа не будет передавать данные одного пользователя другому пользователю
  3. Изоляция : Программа не будет взаимодействовать с данными, которые пользователь не намеревался.
  4. Возможность просмотра : Программа, очевидно, работает правильно - желательное свойство счетчика голосов.
  5. Доверенный путь : пользователь знает, с каким объектом они взаимодействуют.

Как только вы узнаете, что означает безопасность для вашего приложения, вы можете приступить к проектированию вокруг этого.

Одна практика проектирования, которая не упоминается так часто, как следовало бы, это Возможности объекта .

Многие защищенные системы должны принимать решения об авторизации - если этот фрагмент кода сможет получить доступ к этому файлу или открыть сокет для этого компьютера.

Списки контроля доступа - один из способов сделать это - указать файлы, к которым можно получить доступ. Такие системы, тем не менее, требуют больших затрат на обслуживание. Они работают в агентствах безопасности, где люди имеют разрешение, и они работают в базах данных, где компания, развертывающая базу данных, нанимает администратора БД. Но они плохо работают для защищенного программного обеспечения конечного пользователя, поскольку у пользователя часто нет ни навыков, ни желания обновлять списки.

Возможности объектов решают эту проблему, поддерживая решения о доступе к ссылкам на объекты - используя всю работу, которую программисты уже выполняют в хорошо спроектированных объектно-ориентированных системах, чтобы минимизировать количество полномочий, которыми обладает каждый отдельный фрагмент кода. См. CapDesk для примера того, как это работает на практике.

DARPA провела эксперимент по проектированию безопасных систем, названный проектом Browser DARPA, в ходе которого выяснилось, что система, спроектированная таким образом, - хотя в ней было столько же ошибок, что и в других объектно-ориентированных системах, - имела гораздо более низкую уязвимость. Поскольку разработчики следовали за POLA, используя объектные возможности, злоумышленникам было намного сложнее найти способ использовать ошибку для взлома системы.

4 голосов
/ 21 декабря 2008

Принцип наименьших привилегий - процесс должен обладать только теми привилегиями, которые ему действительно необходимы, и должен обладать этими привилегиями только в течение кратчайшего необходимого времени. Так, например, лучше использовать sudo make install, чем su, чтобы открыть оболочку и затем работать в качестве суперпользователя.

3 голосов
/ 21 декабря 2008

Белый список

Выберите, что вы знаете, вы принимаете

(Да, я знаю, это очень похоже на «отрицать по умолчанию», но мне нравится использовать позитивное мышление.)

2 голосов
/ 21 декабря 2008

Смоделируйте угрозы, прежде чем принимать решения по проектированию безопасности - подумайте, какие могут быть возможные угрозы и насколько они вероятны. Например, кто-то крадет ваш компьютер чаще с ноутбуком, чем с настольным компьютером. Затем сначала позаботьтесь об этих наиболее вероятных угрозах.

2 голосов
/ 21 декабря 2008

Помните о физической безопасности. Если кто-то может взять ваш жесткий диск, это может быть самой эффективной атакой из всех.

(я помню упражнение красной команды по вторжению, в котором мы появились с буфером обмена и официальной формой и ушли со всей «безопасной» системой.)

2 голосов
/ 22 декабря 2008

Изоляция. Код должен иметь сильную изоляцию, например, между процессами, чтобы сбои в одном компоненте не могли легко скомпрометировать другие.

2 голосов
/ 21 декабря 2008

Наймите специалистов по безопасности

Безопасность - это специализированный навык. Не пытайтесь сделать это самостоятельно. Если вы не можете позволить себе заключить контракт на обеспечение безопасности, по крайней мере, нанять профессионала для проверки вашей реализации.

2 голосов
/ 21 декабря 2008

Проектирование безопасности с самого начала

Намного проще ошибиться в защите, когда вы добавляете ее в существующую систему.

2 голосов
/ 21 декабря 2008

Шифрование & ne; безопасность.

2 голосов
/ 21 декабря 2008

Повторное использование проверенного кода

Используйте проверенные алгоритмы шифрования, криптографические генераторы случайных чисел, хеш-функции, схемы аутентификации, системы контроля доступа, вместо того, чтобы использовать свои собственные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...