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

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

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

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

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. Заголовок 10 Использование C++ без понимания C

  11. Заголовок 11 Безопасная разработка должна прививаться начиная с первого дня

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

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

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

  15. Заголовок 15  Безопасная разработка кода должна прививаться с самого

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

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

    по ИБ  Безопасная разработка – это «стиль мышления» программиста  Разработчик ПО – это  Не офицер ИБ  Не специалист по CI  Не реверсер  Не пентестер  … Заключение
  18. Заголовок 18  https://github.com/hseos/hseos-course  https://caos.ejudge.ru/ Ссылки