Что должен знать каждый программист о безопасности?

Я студент по ИТ, и сейчас я нахожусь на третьем курсе в университете. До сих пор мы изучали множество предметов, связанных с компьютерами в целом (программирование, алгоритмы, компьютерная архитектура, математика и т.д.).

Я очень уверен, что никто не может узнать все о безопасности, но уверен, что есть "минимальные" знания, которые каждый программист или ИТ-студент должен знать об этом, и мой вопрос в том, что это минимальные знания?

Можете ли вы предложить несколько электронных книг или курсов или что-нибудь может помочь начать с этой дороги?

Ответ 1

Принципы, которые следует учитывать, если вы хотите, чтобы ваши приложения были в безопасности:

  • Никогда не доверяйте никому!
  • Подтвердить ввод из всех ненадежных источников - используйте белые списки, а не черные списки
  • Планирование безопасности с самого начала - это не то, что вы можете закрепить в конце.
  • Держите его простым - сложность увеличивает вероятность дыр в безопасности.
  • Держите поверхность атаки до минимума
  • Убедитесь, что безопасно завершен
  • Используйте глубину защиты
  • Соблюдайте принцип минимальные привилегии
  • Используйте моделирование угроз
  • Отключить - так что ваша система не все или ничего
  • Скрывать секреты сложно - и тайны, скрытые в коде, не останутся в секрете долгое время
  • Не записывайте свой собственный криптографический
  • Использование криптографии не означает, что вы защищены (злоумышленники будут искать более слабую ссылку).
  • Имейте в виду переполнение буфера и способы защиты от них

В Интернете есть отличные книги и статьи о том, как защитить ваши приложения:

Обучите своих разработчиков лучшим требованиям безопасности приложений

Codebashing (оплачивается)

Инновации в области безопасности (оплачивается)

Компас безопасности (оплачивается)

OWASP WebGoat (бесплатно)

Ответ 2

Правило № 1 для безопасности для программистов: Не сворачивайте свой собственный

Если вы сами не являетесь экспертом по безопасности и/или криптографом, всегда используйте хорошо продуманную, хорошо протестированную и зрелую платформу безопасности, инфраструктуру или библиотеку, чтобы выполнить эту работу за вас. Эти вещи потратили годы, которые были продуманы, исправлены, обновлены и рассмотрены экспертами и хакерами. Вы хотите получить эти преимущества, а не отклонять их, пытаясь изобрести колесо.

Теперь, чтобы не сказать, что вам не нужно ничего узнавать о безопасности. Вам, конечно, нужно знать достаточно, чтобы понять, что вы делаете, и убедиться, что вы правильно используете инструменты. Однако, если вы когда-нибудь захотите начать писать собственный алгоритм криптографии, систему аутентификации, дезинфицирующее средство ввода и т.д., Остановитесь, сделайте шаг назад и запомните правило № 1.

Ответ 3

Каждый программист должен знать, как писать код эксплойта.

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

Ответ 4

Безопасность - это процесс, а не продукт.

Многие, похоже, забывают об этом очевидном факте.

Ответ 5

Я предлагаю рассмотреть CWE/SANS TOP 25 наиболее опасных ошибок программирования. Он был обновлен в 2010 году с обещанием регулярных обновлений в будущем. Также доступна версия 2009.

Из http://cwe.mitre.org/top25/index.html

25 самых опасных ошибок программирования CWE/SANS 2010 года - это список наиболее распространенных и критических ошибок программирования, которые могут привести к серьезным уязвимостям программного обеспечения. Их часто легко найти и легко использовать. Они опасны, потому что они часто позволяют злоумышленникам полностью использовать программное обеспечение, красть данные или вообще не запускать программное обеспечение.

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

Ответ 6

Хорошим стартовым курсом может быть курс MIT в Компьютерные сети и безопасность. Одна вещь, которую я хотел бы предложить, - не забывать о конфиденциальности. Конфиденциальность, в некоторых смыслах, действительно является основополагающей для безопасности и не часто рассматривается в технических курсах по безопасности. Вы можете найти некоторые материалы о конфиденциальности в этом курсе по Ethics and the Law, поскольку это относится к интернету.

Ответ 7

Команда Web Security в Mozilla собрала великое руководство, которое мы соблюдаем при разработке наших сайтов и сервисов.

Ответ 8

Значение безопасных значений по умолчанию в фреймворках и API:

  • Множество ранних веб-фреймворков не удалось избежать html по умолчанию в шаблонах и имели проблемы с XSS из-за этого
  • Множество ранних веб-фреймворков упростили конкатенацию SQL, чем создавать параметризованные запросы, приводящие к множеству ошибок SQL-инъекций.
  • Некоторые версии Erlang (R13B, возможно, другие) не проверяют сертификаты ssl peer по умолчанию, и, вероятно, есть много кода erlang, подверженного атакам SSL MITM.
  • Трансформатор Java XSLT по умолчанию позволяет выполнять произвольный код Java. Было создано множество серьезных ошибок безопасности.
  • API-интерфейсы XML XML по умолчанию позволяют анализируемому документу читать произвольные файлы в файловой системе. Больше удовольствия:)

Ответ 9

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

Ответ 10

  • Помните, что вам (программисту) приходится защищать все части, но злоумышленнику нужно только найти один изгиб в ваших доспехах.
  • Безопасность - пример "неизвестных неизвестных". Иногда вы не знаете, каковы возможные недостатки безопасности (до тех пор, пока).
  • Разница между ошибкой и дырой безопасности зависит от интеллекта злоумышленника.

Ответ 11

Я бы добавил следующее:

  • Как работают цифровые подписи и цифровые сертификаты.
  • Какая песочница

Понимать, как работают различные векторы атак:

  • Переполнение буфера /underflows/etc в собственном коде
  • Социальная инженерия
  • Подменю DNS
  • Человек-в-середине
  • CSRF/XSS и др.
  • SQL-инъекция
  • Криптоактивные атаки (например: использование слабых криптоалгоритмов, таких как DES)
  • Ошибки программы/структуры (например: github последний недостаток безопасности)

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

Ответ 12

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

  • всегда пытайтесь сломать свои коды (используйте чит-коды и google вещи для получения дополнительной информации).
  • обновить уязвимости в области программирования.
  • и, как упоминалось выше, никогда не доверяют никаким типам пользователей или автоматическим входам.
  • использовать приложения с открытым исходным кодом (их самые уязвимые недостатки известны и решаются).

вы можете найти больше ресурсов безопасности по следующим ссылкам:

для получения дополнительной информации google о потоках безопасности поставщика приложений.

Ответ 13

  • Почему это важно.
  • Все дело в компромиссах.
  • Криптография в значительной степени отвлекает от безопасности.

Ответ 14

Также не забудьте проверить список 10 лучших OWASP для категоризации всех основных векторов атаки/уязвимостей.

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

Ответ 15

Для получения общей информации о безопасности я настоятельно рекомендую прочитать Брюс Шнайер. Он получил веб-сайт, его криптографический бюллетень, несколько books, и сделал много интервью .

Я бы также познакомился с социальной инженерией (и Кевин Митник).

Для хорошей (и довольно интересной) книги о том, как безопасность играет в реальном мире, я бы рекомендовал отличную (хотя и немного устаревшую) ' Яйцо кукушки от Cliff Stoll.

Ответ 16

Соль и хэш паролей пользователей. Никогда не сохраняйте их в открытом виде в своей базе данных.