Основы разработки безопасного ПО
Summary
TODO: write summary
Основные понятия
- Ценный ресурс (asset)
- объект, на получение доступа к которому, могут быть направлены действия злоумышленников
- Брешь (vulnerability)
- слабое место в программе, например, ошибка или недостаток проекта
- Атака (attack)
- несанкционированное использование системы с целью получения доступа к ресурсу
- Опасность (threat)
- вероятность успешной атаки с нежелательными последствиями для системы
Security Principles
Secure by Design, by Default and by Deployment (SD3)
- Учиться на ошибках
- уменьшать площать поражения
- продумывать безопасность на всех уровнях
- принцип минимальных привилегий
- безопасные настройки по умолчанию
- обратная совместимость чревата проблемами
- незащищенность внешних систем - аксиома
- план действия при сбоях и отказах
- сохранение конфиденциальности при любых сбоях
- Функции безопасности != безопасные функции
- не использовать securty by obscurity
- не смешивать код с данными
- корректное исправление ошибок в подсистеме безопасности
Моделирование опасностей
Разложение приложения на составляющие
Data Flow Diagrams:
- Условные обозначения
- Пример диаграммы
Определение и классификация опасностей
STRIDE
- Spoofing Identity
- Tampering with data
- Repudiation
- Information Disclosure
- Denial of Service
- Elevation of Privilege
Альтернативная система:
OCTAVE (
http://www.cert.org/octave)
Построение дерева опасностей
- View confidential payroll data
- HTTP traffic is unprotected (AND)
- Attacker views traffic
- Sniff network traffic
- Listen to router traffic
- Router is unpatched (AND)
- Compromise router
- Guess router password
- Compromise switch
- Various switch attack
Ранжирование опасностей
DREAD
- Damage potential
- Reproducibility
- Exploitability
- Affected users
- Discoverability
Реагирование на опасности
- Do nothing
- Warn user
- Remove problem
- Fix problem
Выбор техники предотвращения опасностей
Threat type | Mitigation technique |
Spoofing identity | Appropritae authentication |
| Protect secret data |
| Dont store secrets |
Tampering with data | Appropriate authorization |
| Hashes |
| Message authentication codes |
| Digital Signatures |
| Tamper-resistant protocols |
Repudiation | Digital signatures |
| Timestamps |
| Autit trails |
Information Disclosure | Authorization |
| Privacy-enabled protocols |
| Encryption |
| Protect secrets |
| Dont store secrets |
Denial of Service | Appropriate authentication |
| Appropriate authorization |
| Filtering |
| Throttling |
| Quality of Service |
Elevation of Privilege | Run with least privilege |
Техники безопасности
Authentication
- Basic authentication
- Digest Authentication
- RADIUS
- Passport Authentication
- Windows Authentication
Authorization
- Access Control Lists
- Privileges
- IP restrictions
- Server-side permissions
Tamper-resistant and privacy-enabled technologies
- SSL/TLS
- IPSec
- DCOM & RPC
- EFS
Тестирование безопасности системы
Разработка тест-планов
- Разбиение на базовые компоненты
- Определение интерфейсов компоненты
- Упорядочть интерфейсы по степени уязвимости
- Выяснить используемые структуры данных
- Найти бреши, вводя измененные данные
2 Типа планов
- тесты, подтверждающие предотвращение запланированных атак
- поиск брешей, не упомянутых в модели опасностей
Определение Интерфейсов
- TCP/UDP
- Wireless
- NetBIOS
- Mailboxes
- Dynamic Data Exchange
- Named pipes
- Sahred memory
- Other Named channels (Semaphores, mutex)
- LPC/RPC
- COM
- DLL functions
- System Interrupts for kernel components
- System Regsitry
- HTTP Request/Response
- SOAP Request
- RAPI (Pocket PC)
- Console input
- Command Line Arguments
- Dialog Boxes Params
- DB Access (OLE DB, ODBC, etc)
- DB Stored Procedures
- Store-and-forward interfaces (SMTP, POP, MAPI, MSMQ)
- Environment variables
- Files
- Microphone
- LDAP sources
- Hardware interfaces (IrDA, FireWire, USB, COM, Bluetooth, LPT, etc)
Мутация данных
Тестирование клиентов
Выявление класса уязвимостей
Анализ безопасности кода
- Манипуляция строками
- Целочисоленные переполнения
-
sizeof
-
signed/unsigned
-
MAX_INT
- Экономия памяти для завершающего
'\0'
- Проверка возвращаемых значений
- Проверка кода с указателями
- Виртуальные методы
- указатели на функции
- связанные списки
- Никогда не доверяйте полученным данным
Утилиты
- CannedHEAT Canned HEAT(Hostile Environment for Application Testing is a research project building the next generation of software test tool using fault injection methods
Links
--
AndreyUstyuzhanin - 13 Apr 2004