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



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



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



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

754   17  

17 ответов:

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

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

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

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

Codebashing (платно)

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

Безопасность Компаса (платная)

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

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

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

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

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

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

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

многие, кажется, забывают об этом очевидном деле.

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

от http://cwe.mitre.org/top25/index.html

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

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

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

команда веб-безопасности в Mozilla собрала большой справочник, которые мы соблюдаем при разработке наших сайтов и сервисов.

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

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

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

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

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

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

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

  • переполнение буфера / underflows / etc на машинном коде
  • социальный движок
  • DNS-спуфинг
  • человек-в-середине
  • CSRF / XSS et al
  • SQL-инъекций
  • крипто атаки (ex: использование слабых криптографических алгоритмов, таких как DES)
  • Ошибки программы / фреймворка (например: github's последний недостаток безопасности)

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

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

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

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

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

  1. почему это важно.
  2. Это все о компромиссах.
  3. криптография в значительной степени отвлекает от безопасности.

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

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

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

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

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

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

просто хотел поделиться этим для веб-разработчиков:

security-guide-for-developers
https://github.com/FallibleInc/security-guide-for-developers

Comments

    Ничего не найдено.