Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Даром преподаватели время со мною тратили…

Даром преподаватели время со мною тратили…

Доклад Александра Чернова (Moscow State University) и Екатерины Трошиной (Higher School of Economics) для PDUG-секции на форуме PHDays 9.

More Decks by Positive Development User Group

Other Decks in Programming

Transcript

  1. Заголовок ptsecurity.com Даром преподаватели время со мною тратили… ФКН ВШЭ,

    ВМК МГУ к.ф.-м.н. К.Н. Трошина, к.ф.-м.н. А.В. Чернов
  2. Заголовок 2 Уточним: Откуда берутся разработчики, которые «умеют выполнять безопасную

    разработку ПО», А еще лучше… Откуда берутся разработчики, которые понимают, что значит безопасная разработка ПО? Откуда берутся разработчики?
  3. Заголовок 3 • Разработчики самозарождаются на производстве? • Вчерашний студент

    приходит после вуза и трансформируется в настоящего разработчика? • Из вуза приходит специалист? Откуда берутся разработчики?
  4. Заголовок 4 • Навык «безопасной разработки» – это … •

    Доучивать проще, чем переучивать • Принцип есть принцип Причем здесь высшее образование?
  5. Заголовок 5 • 1 и 2 курс, до выбора специализации.

    • читаются всем • всегда курсы «вчерашнего» дня • ораничены по времени • не требуют полного покрытия материала Базовые курсы Даже базовые курсы стоит ребутить где-то раз в 5 лет…
  6. Заголовок 6 Место безопасной разработки в базовых курсах… • введение

    в программирование, язык программирования • алгоритмы • архитектура компьютера и операционные системы Базовые курсы
  7. Заголовок 7 • Триада: • архитектура • операционные системы •

    языки программирования  Архитектура: x86, x64, armv7, armv8, …  ОС: win, linux  ЯП: — предмет ожесточенных «дискуссий» Базовые концепции
  8. Заголовок 8 • python/C++, C++, C, java/C++… • Разные курсы

    – разные требования:  Введение в программирование — легкость обучения, простота концепций  Алгоритмы — выразительная сила  Архитектура компьютера, операционные системы — близость к компьютеру Базовый язык программирования
  9. Заголовок 9  C? C++? rust?  С++ в качестве

    языка системного программирования?  Слишком сложный  Местами сложное отображение в инструкции процессора  Все равно требует знания Си для правильного использования  Rust – пока «темная лошадка», мало материалов  Язык ассемблера при АКОС?  Важен, но язык ассемблера не должен быть самоцелью, язык ассемблера не имеет самостоятельной ценности  Основной язык в курсе ОС — Си, с экскурсами в ассемблер при рассмотрении архитектур компьютеров Язык для курса архитектуры компьютера и операционных систем?
  10. Заголовок 11 Безопасная разработка должна прививаться начиная с первого дня

    обучения, но курс АКОС— это курс, который должен ставить безопасную разработку одной из целей и должен постоянно поддерживать внимание к ней. Безопасная разработка в рамках курса ОС
  11. Заголовок 12  Представление целых чисел, UB при операциях над

    целыми числами, безопасное использование  В C/C++ 20 наконец-то обещают выпилить все представления, кроме two“s complement  Есть надежда, что сдвиги из UB перейдут хотя бы в Implementation Defined  Где контролируемые арифметические операции???  Строки и буферы. UB при выходах за пределы массива. Переполнения буфера и его последствия.  Динамическая память. UB при use after free, double free, динамическая память и unsigned integer overflow Syllabus
  12. Заголовок 13  Компоновка программы и загрузка программы на исполнение.

    Секции исполняемого кода. Подгрузка динамических библиотек. Подмена указателей на функции в таблицах.  Работа процесса в многопроцессном многопользовательском окружении. Race conditions при работе с файловой системой. Безопасное функционирование процесса в недоверенном окружении.  Безопасный запуск программ на исполнение. Иньекции параметров командной строки. Syllabus
  13. Заголовок 15  Безопасная разработка кода должна прививаться с самого

    начала профессионального обучения программированию.  Соответствующий взгляд на программирование должен постоянно акцентироваться на всех формах занятий.  Основные ошибки, приводящие к уязвимостям, должны объяснятся вплоть до самого низкого уровня.  Все это может способствовать тому, что выпускники, даже не специализирующиеся в системном программировании, будут осведомлены о безопасном программировании. «Правильный» базовый курс
  14. Заголовок 16  Научить надо многому, а времени мало 

    Обработка ошибок  Тестирование Что в реальности
  15. Заголовок 17  Базовый курс должен дальше продолжится специальным курсом

    по ИБ  Безопасная разработка – это «стиль мышления» программиста  Разработчик ПО – это  Не офицер ИБ  Не специалист по CI  Не реверсер  Не пентестер  … Заключение