суббота, 21 января 2012 г.

Secure Coding

Наша компания купила курс для программистов C, C++: "Secure Coding in C and C++". Для проведения курса был приглашен преподаватель из Carnegie Mellon University. Я попытаюсь сделать краткий обзор лекций, которые нам были прочитаны. Скажу сразу - это мое субъективное мнение.
Сначала общие слова о самом курсе, формате проведения и общих впечатлениях.
Итак, курс мне очень понравился.
Во-первых, мне понравился формат: сначала лекции, потом практические упражнения, то есть мы сразу пытались применять полученные знания (в последний день курса шла речь про уязвимости, связанные с привилегиями в Unix, во время лекционной части я немного отвлекся и не смог уловить всех подробностей, однако, при выполнении практического задания, я смог постичь некоторые тонкости на реальном примере).
Во-вторых, лектор давал очень понятную и полную картину по каждому вопросу, было видно глубокое понимание проблем, которых он касался в рамках данного курса, причем все проблемы, которые обсуждались в рамках данного курса были привязаны к реальным условиям. Я немного боялся, что преподаватель из университета будет вещать какой-нибудь академический курс, оторванный от реалий современного программирования, однако все мои опасения не оправдались, и курс был полон реальных примеров, способов устранения проблем (я даже немного расстроился за нашу кафедру программирования, на которой я обучался - возможно она была слишком академичной для меня, но у нас не было такого погружения в реальный мир разработки ПО).
В третьих, все показанные примеры заставили меня осознать, что действительно безопасное программирование на C и C++ - это очень сложная вещь, и надо быть предельно аккуратным, чтобы не допускать уязвимостей в своих программах.

Итак, теперь переходим к самому курсу.
Курс был разделен на следующие части:

  • манипуляции со строками, ошибки переполнения массивов (стек, куча)
  • манипуляции с целыми числами, переполнение, приведение типов.
  • манипуляции с форматированным вводом, выводом (scanf, printf семейства функций)
  • манипуляции с файлами и привилегиями в unix
Итак, что мне наиболее запомнилось - это structured code review - рекомендации для проведения инспекции кода на предмет уязвимостей, связанных с переполнениями массивов и ошибками в целочисленной арифметике. Описание этого процесса можно найти в интернете, я лишь скажу, что это работает)). Благодаря тому, что процесс инспекции кода формализован (описан способ его проведения, описаны правила, с помощью которых делаются пометки участков кода). Единственный минус этого процесса заключается в том, что этот процесс небыстрый и утомительный (как и любая деятельность, требующая сосредоточенности и внимания), однако, я надеюсь, что в будущем появятся механизмы и утилиты, которые позволят проводить данную инспекцию кода а автоматическом или полуавтоматическом режиме.

2 комментария:

  1. Ответы
    1. Вы о чем?
      Язык программирования - C, C++
      Язык, на котором читался курс - английский

      Удалить