Книжный клуб инженеров AppSec #001 — обсуждение книги Лорен Конфельдер

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

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

  • «Проектирование безопасного программного обеспечения: руководство для разработчиков», Лорен Конфельдер
  • «Контейнерная безопасность: основные технологические концепции, защищающие контейнерные приложения», Лиз Райс
  • «Взлом API: взлом интерфейсов программирования веб-приложений», Кори Дж. Болл
  • «Bug Bounty Bootcamp: руководство по поиску веб-уязвимостей и сообщениям о них», Вики Ли :)
  • «Путь штатного инженера: руководство для индивидуальных участников по пути роста и изменений» Тани Рейли и др.

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

Сегодня давайте обсудим книгу Лорен Конфельдер «Разработка безопасного программного обеспечения: руководство для разработчиков». И, как и во всех изданиях No Starch Press, обложка книги до смешного хороша.

Краткое содержание

«Проектирование безопасного программного обеспечения» состоит из трех частей: концепций, дизайна и реализации. «Концепции» охватывают фундаментальные концепции безопасности, такие как CIA (конфиденциальность, целостность и доступность), способы моделирования угроз для приложения и некоторые структурные способы защиты приложения (минимизация раскрытия данных и т. д.). В нем также рассказывается о безопасных шаблонах проектирования и безопасном использовании криптографии.

«Дизайн» включает в себя то, как думать о дизайне с точки зрения безопасности и проводить обзоры дизайна безопасности. Это важный навык для многих инженеров по безопасности продуктов, и я постоянно на него ссылаюсь.

«Реализация» говорит о безопасном программировании и об избежании распространенных ошибок реализации, таких как проблемы ввода, которые приводят к уязвимостям и проблемам SOP (Same-Origin Policy). В этой части книги также рассказывается о написании тестов безопасности.

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

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

Как читать эту книгу

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

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

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

Список назначений

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

  • Моделируйте угрозу части программного обеспечения или компонента более крупной системы. Чтобы получить бонусные баллы, смоделируйте компонент с помощью различных фреймворков моделирования угроз и посмотрите, отличаются ли ваши результаты.
  • Задним числом создайте проектную документацию для программного обеспечения, которое вы создали или используете, и просмотрите его с точки зрения безопасности. Определите компоненты программного обеспечения, для которых безопасность имеет наибольшее значение, и оцените его сильные и слабые стороны. Предложите меры по смягчению последствий или альтернативные проекты, основанные на ваших выводах.
  • Чтобы получить представление о реальных уязвимостях, участвуйте в программах вознаграждения за обнаружение ошибок или раскрытия уязвимостей в проектах с открытым исходным кодом. Определите основную причину ошибки и предложите изменения кода, чтобы исправить ошибку.
  • Определите расположение ненадежных входных данных в одном и том же проекте с открытым исходным кодом и проверьте, защищен ли он от XSS, SQL-инъекций и обхода пути.
  • Проверьте старую версию программного обеспечения с открытым исходным кодом с известной уязвимостью. Напишите тест, подтверждающий уязвимость.

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

«Если отладка — это процесс устранения программных ошибок, то программирование должно быть процессом их внесения».

Эдсгер В. Дейкстра

Это все для сегодняшней статьи! Писательство — это мышца, которая атрофируется. Я сожалею, что не вел блог так долго, но приятно вернуться. Спасибо за чтение, как всегда.