План на курса
Ден 1
ИТ-сигурност и безопасно програмиране
- Естеството на сигурността
- Терминология, свързана с ИТ-сигурността
- Дефиниция на риск
- Различни аспекти на ИТ-сигурността
- Изисквания за различни области приложения
- ИТ-сигурност vs. безопасно програмиране
-
От уязвимости до ботнетове и киберпрестъпност
- Естеството на сигурносни дефекти
- Причините за трудности
- От инфектиран компютър до целенаправени атаки
-
Класификация на сигурносни дефекти
- Таксономията на Лендвър
- Седем вредни царства
- OWASP Top Ten 2013
- Сравнение на OWASP Top Ten 2003 – 2013
Въведение в Microsoft® Security Development Lifecycle (SDL)
- Дневен план
-
Приложения под атака...
- Еволюцията на киберпрестъпността
- Атаките се фокусират върху приложения
- Повечето уязвимости са в по-малки приложения на ISV
-
Произходи на Microsoft SDL...
- Хронологията на сигурността в Microsoft...
- Какви приложения трябва да следват SDL?
-
Microsoft Security Development Lifecycle (SDL)
- Microsoft Security Development Lifecycle (SDL)
- Пред-SLD изисквания: обучение по сигурност
- Фаза едно: Изисквания
- Фаза два: Проектиране
- Фаза три: Реализация
- Фаза четири: Верификация
- Фаза пет: Издаване – План за отговор
- Фаза пет: Издаване – Крайна ревизия по сигурност
- Фаза пет: Издаване – Архивиране
- Пост-SLD изисквание: Отговор
- Ръководство за SDL за LOB приложения
- Ръководство за SDL за аджилни методологии
- Безопасната разработка на софтуер изисква подобрение на процесите
Принципи за безопасно проектиране
-
Атакуваната повърхност
- Намаляване на атакувана повърхност
- Атакувана повърхност – пример
- Анализ на атакувана повърхност
- Намаляване на атакувана повърхност – примери
-
Право на приватност
- Приватност
- Разбиране на поведение и загриженията на приложения
-
Защита на много слои
- Основен принцип на SDL: защита на много слои
- Зашита на много слои – пример
-
Принципът за най-малка привилегия
- Най-малка привилегия – пример
-
Безопасни по подразбиране настройки
- Безопасни по подразбиране настройки – примери
Принципи за безопасна реализация
- Дневен план
- Microsoft Security Development Lifecycle (SDL)
-
Основи на перепълването на буфери
- Регистри на Intel 80x86 процесорите – основни регистри
- Паметна адресация
- Механизъм за извикване на функции в C/C++ на x86
- Локални променливи и стек фрейм
-
Перепълване на стека
- Перепълване на буфера в стека
- Упражнения – въведение
- Упражнение BOFIntro
- Упражнение BOFIntro – определяне на стека
- Упражнение BOFIntro – прост атака
-
Проверка на входни данни
- Концепции за проверка на входни данни
-
Проблеми с цели числа
- Представяне на отрицателни цели числа
- Перепълване на цели числа
- Аритметично перепълване – познайте изхода!
- Упражнение IntOverflow
- Какво е стойността на Math.Abs(int.MinValue)?
-
Митигиране на проблемите с цели числа
- Митигиране на проблемите с цели числа
- Избягване на аритметично перепълване – събиране
- Избягване на аритметично перепълване – умножение
- Разпознаване на изключения с ключовата дума checked в C#
- Упражнение – Използване на ключовата дума checked в C#
- Изключения, активираните от перепълванията в C#
-
Кейс изучаване – Перепълване на цели числа в .NET
- Реална уязвимост, обусловена от перепълване на цели числа
- Използване на уязвимостта с перепълване на цели числа
-
Уязвимост при преход на пат
- Митигиране на уязвимостта при преход на пат
Ден 2
Принципи за безопасна реализация
-
Инжекция
- Типични методи на атака с инжекция на SQL код
- Слепа и времева инжекция на SQL код
- Методи за защита от инжекция на SQL код
- Инжекция на команди
-
Сломена аутентикация – управление на паролите
- Упражнение – Слабостта на хешираните пароли
- Управление и съхранение на пароли
- Специални алgoritми за хешуване при съхранение на пароли
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Инжекция на CSS
- Използване: инжекция чрез други HTML тагове
- Предотвратяване на XSS
-
Липсващ контрол на достъп на функционалностите
- Филтриране при качването на файлове
-
Практическа криптография
- Обезпечаване на конфиденциалността с симетрична криптография
- Симетрични алgoritми за шифриране
- Блокови шифри – режими на функциониране
- Хеш или съобщение-дайджест
- Алgoritми за хешуване
- Message Authentication Code (MAC)
- Обезпечаване на цялостта и автентичността със симетричен ключ
- Обезпечаване на конфиденциалността с публично-ключово шифриране
- Правило за преход – притежание на частния ключ
- Типични грешки в управлението на паролите
- Упражнение – Хард кодирани пароли
- Заключение
Принципи за безопасно верифициране
- Функционално тестуване vs. сигурно тестуване
- Уязвимости на сигурността
- Приоритизация
- Тестуване на сигурността в SDLC
- Стъпки за планиране на тестовете ( Анализ на риска)
-
Освен и събираане на информация
- Заинтересованите лица
- Активи
- Атакувана повърхност
- Цели на сигурността за тестуване
-
Моделиране на угрозите
- Моделиране на угрозите
- Профили на атакуващите
- Моделиране на угрозите базирано на дървета от атаки
- Моделиране на угрозите базирано на злоупотребни/незаконни случаи
- Злоупотребни/незаконни случаи – прост пример с виртуален магазин
- Модел на угрозите по елемент – MS SDL
- Идентифициране на цели на сигурността
- Диаграми – примери за елементи на DFD
- Диаграма на потоците от данни – пример
- Енумерация на угрозите – MS SDL и елементи на DFD
- Анализ на риска – класификация на угрозите
- Модел за ранжиране на угрози/рискове DREAD
-
Техники и инструменти за сигурно тестуване
- Общи подходи към тестуването
- Техники за различни стадии на SDLC
-
Ревизия на кода
- Ревизия на кода за сигурност на софтуера
- Анализ на замърсяване
- Евристики
-
Статичен анализ на кода
- Статичен анализ на кода
- Упражнение – Използване на инструменти за статичен анализ на кода
-
Тестуване на реализацията
- Ръчна верифициране в runtime
- Ръчно vs. автоматично сигурно тестуване
- Тестове за проникване (penetration testing)
- Стресни тестове
-
Фазинг
- Автоматизирано сигурно тестуване – фазинг (fuzzing)
- Изключения при фазинга
-
Сканиране за уязвимости в уеб-приложения
- Упражнение – Използване на сканер за уязвимости
-
Проверка и хардениране на околната среда
- Общ система за оценка на уязвимостите – CVSS
- Сканери за уязвимости
- Публични бази данни
-
Кейс изучаване – Обход на формова аутентикация (Forms Authentication Bypass)
- Уязвимост при завършване на NULL байт
- Уязвимостта за обход на формова аутентикация в кода
- Използване на уязвимостта за обход на формова аутентикация
Извори на знания
- Източници за безопасно програмиране – начален набор
- Бази данни с уязвимости
- Ръководства за безопасно програмиране на .NET в MSDN
- Листове с ръководства за безопасно програмиране на .NET
- Препоръчани книги – .NET и ASP.NET
Отзиви от потребители (5)
Много примери за всеки модул и голямо знание на тренера.
Sebastian - BRD
Курс - Secure Developer Java (Inc OWASP)
Машинен превод
Модул 3 Приложения, атаки и експлоити, XSS, SQL инјекција Модул 4 Сървъри, атаки и експлоити, DoS, BOF
Tshifhiwa - Vodacom
Курс - How to Write Secure Code
Машинен превод
Обща информация за курса
Paulo Gouveia - EID
Курс - C/C++ Secure Coding
Машинен превод
Познанията на тренера по темата бяха отлични, и начинът, по който сесиите бяха организирани така, че публиката да може да следи демонстрациите, изключително допомогна за усвояването на тази информация, в сравнение с просто седене и слушане.
Jack Allan - RSM UK Management Ltd.
Курс - Secure Developer .NET (Inc OWASP)
Машинен превод
Ничего, беше перфектно.
Zola Madolo - Vodacom
Курс - Android Security
Машинен превод