EasyТеория6 min

Обзор безопасности систем

Threat modeling, defense in depth, security mindset и основные принципы инженерии безопасности

Зачем нужна безопасность

Безопасность — это не фича, которую можно добавить позже. Это свойство архитектуры, которое закладывается с первого дня. Стоимость исправления уязвимости растёт экспоненциально на каждом этапе: проектирование → разработка → тестирование → production → после взлома.

CIA-триада

Три фундаментальных свойства информационной безопасности:

Свойство Описание Пример нарушения
Confidentiality Данные доступны только авторизованным Утечка базы пользователей
Integrity Данные не изменены несанкционированно Подмена суммы платежа
Availability Система доступна когда нужна DDoS-атака

Дополнительные свойства:

Свойство Описание
Authentication Подтверждение идентичности
Authorization Проверка прав доступа
Non-repudiation Невозможность отказаться от совершённого действия
Accountability Отслеживание действий до конкретного субъекта

Threat Modeling

Threat modeling — систематический процесс выявления угроз безопасности на этапе проектирования.

Методология STRIDE

Угроза Описание Нарушает Пример
Spoofing Подмена идентичности Authentication Поддельный JWT токен
Tampering Изменение данных Integrity Модификация запроса в transit
Repudiation Отрицание действий Non-repudiation Нет audit log
Information Disclosure Утечка информации Confidentiality SQL injection
Denial of Service Отказ в обслуживании Availability DDoS
Elevation of Privilege Повышение привилегий Authorization User → Admin

Процесс Threat Modeling

1. Определить assets → Что защищаем (данные, сервисы)
2. Определить trust boundaries → Границы доверия
3. Построить DFD → Data Flow Diagram
4. Применить STRIDE → Для каждого компонента
5. Оценить риски → Likelihood × Impact
6. Определить mitigations → Контрмеры
7. Валидировать → Проверка полноты

Оценка рисков

Impact: Low Impact: Medium Impact: High
Likelihood: High Medium High Critical
Likelihood: Medium Low Medium High
Likelihood: Low Info Low Medium

Defense in Depth

Defense in depth (эшелонированная защита) — стратегия, при которой несколько уровней безопасности защищают систему. Если один уровень пробит — следующий остановит атакующего.

Уровни защиты

[Сеть]        → Firewall, WAF, DDoS-защита
  [Периметр]  → API Gateway, rate limiting, IP filtering
    [Транспорт] → TLS, mTLS, certificate pinning
      [Приложение] → Validation, sanitization, auth
        [Данные]   → Encryption at rest, access control
          [Audit]  → Logging, monitoring, alerting
Уровень Меры защиты
Сетевой Firewall, VPN, network segmentation
Периметр WAF, API Gateway, rate limiting
Транспортный TLS 1.3, mTLS, HSTS
Приложение Input validation, CSRF protection, CSP
Данные Encryption at rest, column-level encryption
Идентичность MFA, OAuth 2.0, session management
Мониторинг Audit logs, SIEM, anomaly detection

Принцип наименьших привилегий

Каждый компонент системы должен иметь только те привилегии, которые необходимы для выполнения его функции.

Контекст Правильно Неправильно
БД-пользователь Отдельный user с SELECT/INSERT root для приложения
API-ключ Scope: только нужные endpoints Полный доступ
Файловая система Только нужные директории chmod 777
Контейнер Non-root user root внутри контейнера
IAM роли Конкретные permissions AdministratorAccess

Security Mindset

Принципы безопасного проектирования

Принцип Описание
Secure by Default Безопасная конфигурация из коробки
Fail Securely При ошибке — закрыть доступ, не открыть
Don't Trust Input Любой ввод может быть вредоносным
Minimize Attack Surface Меньше endpoints = меньше рисков
Separation of Duties Разделение полномочий
Keep It Simple Простой код легче проверять

Базовые практики безопасности

<?php

declare(strict_types=1);

namespace App\Security;

/**
 * Security utilities for common operations.
 */
final class SecurityUtils
{
    /**
     * Constant-time string comparison to prevent timing attacks.
     */
    public static function secureCompare(string $expected, string $actual): bool
    {
        return hash_equals($expected, $actual);
    }

    /**
     * Generate a cryptographically secure random token.
     */
    public static function generateToken(int $length = 32): string
    {
        return bin2hex(random_bytes($length));
    }

    /**
     * Hash a password using Argon2id (preferred over bcrypt for new projects).
     */
    public static function hashPassword(string $password): string
    {
        return password_hash($password, PASSWORD_ARGON2ID, [
            'memory_cost' => 65536,  // 64 MB
            'time_cost' => 4,        // 4 iterations
            'threads' => 3,          // 3 parallel threads
        ]);
    }

    /**
     * Verify password against hash.
     */
    public static function verifyPassword(string $password, string $hash): bool
    {
        return password_verify($password, $hash);
    }

    /**
     * Check if password hash needs rehashing (algorithm upgrade).
     */
    public static function needsRehash(string $hash): bool
    {
        return password_needs_rehash($hash, PASSWORD_ARGON2ID, [
            'memory_cost' => 65536,
            'time_cost' => 4,
            'threads' => 3,
        ]);
    }

    /**
     * Sanitize a string for safe output in HTML context.
     */
    public static function escapeHtml(string $input): string
    {
        return htmlspecialchars($input, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
    }
}
## Модель угроз для веб-приложения

Типичная архитектура и точки атаки

[Пользователь] → [CDN/WAF] → [Load Balancer] → [App Server] → [Database]
       ↓              ↓             ↓                ↓              ↓
    Phishing     DDoS bypass    SSL strip      Injection     Data theft
    XSS          Bot bypass     MITM           Auth bypass   SQL injection
    CSRF                                       SSRF          Privilege esc.
Компонент Угрозы Защита
Клиент XSS, clickjacking CSP, X-Frame-Options
Транспорт MITM, downgrade TLS 1.3, HSTS
API Gateway DDoS, brute force Rate limiting, WAF
Приложение Injection, auth bypass Validation, RBAC
База данных SQL injection, data theft Parameterized queries, encryption
Файлы Path traversal, upload attacks Whitelist extensions, isolated storage

Security Development Lifecycle (SDL)

Фаза Активности
Requirements Определение security requirements
Design Threat modeling, security architecture
Implementation Secure coding practices, code review
Testing SAST, DAST, penetration testing
Deployment Hardening, secrets management
Operations Monitoring, incident response
Decommission Data cleanup, access revocation

Итоги

Концепция Суть
CIA Triad Confidentiality, Integrity, Availability
STRIDE Систематический анализ угроз
Defense in Depth Несколько уровней защиты
Least Privilege Минимум необходимых прав
Secure by Default Безопасность из коробки
Threat Modeling Выявление угроз на этапе проектирования

Главное правило: Безопасность — это процесс, а не продукт. Нельзя купить безопасность — можно только построить культуру безопасной разработки.