Для инди-разработчиков и малых операторов, не уверенных, «сколько же минимум» для безопасности. Здесь нет шагов атаки — лишь базовые меры, считающиеся отраслевым стандартом, в порядке приоритета. Каждый пункт ссылается на более глубокую статью, так что можно начать здесь и читать только нужное.
Взгляд этого сайта: не «делать всё», а «заполнять в этом порядке»
Одиночка или малая команда не могут сделать всё сразу — именно поэтому порядок важнее всего. Если верхний слой (админ-аккаунты, домен и почта) захвачен, любая мера ниже него становится бессмысленной (атакующий сбросит всё от вашего имени). Двигайтесь от самого важного слоя вниз — и вы сильнее всего снизите вероятность инцидента за имеющееся время. Эта статья написана не как исчерпывающее знание, а как список, позволяющий быстро решить, что заполнять дальше.
Уровень 0 — админ-аккаунты, домен, почта
MFA · домен · DNS · почта · платежи
Уровень 1 — секреты и код
секреты вне git · обнаружение в pre-commit · разделение/ротация ключей
Уровень 2 — само приложение
валидация ввода · аутентификация/сессии · TLS/заголовки · аутентификация почты
Уровень 3 — патчи, обнаружение, восстановление
CVE зависимостей · обновления ОС · SSH/FW · логи · резервные копии
Уровень 0: защитите админ-аккаунты, домен и почту (первым делом)
Это предпосылка для всего остального. Если ваш домен, почта или панель хостинга захвачены, любая другая мера обнуляется. Атакующий сбрасывает пароли от вашего имени, переписывает DNS, входит на ваш сервер. Поэтому это вы запираете в первую очередь.
Поставьте устойчивую к фишингу MFA
Защищайте почту строже всего
Храните коды восстановления и резервные коды безопасно
Разделяйте аккаунты, чтобы снизить единые точки отказа
Уровень 1: не дайте утечь секретам или коду
Учредительный инцидент этого сайта, как и многие в мире, происходит из пробела здесь: секреты вроде файлов .env и API-ключей, проскальзывающие в код или публичный репозиторий.
Держите секреты вне исходников и документов
.env и исключайте их из git (.gitignore). Вообще не вписывать их — сильнейшая мера.Останавливайте секреты машинно до коммита
Если утекло, считайте, что утекло ВСЁ — ротируйте всё
Ограничивайте токены узко и держите их короткоживущими
Самохостинг Git? Дополнительная осторожность
Самохостинг из-за того, что «случайно публичный» в GitHub пугает, не убирает случайный коммит. Без встроенной блокировки секретов GitHub хук pre-commit для секретов обязателен на самохостинге. См. самохостинг Git vs GitHub: что безопаснее.
Уровень 2: укрепите само приложение
Минимум для веб-приложения, которое вы выставляете наружу. Суть не в остановке новых атак, а в закрытии распространённых, хорошо известных уязвимостей. Этот сайт переформулирует каждую в защиту на своих страницах глоссария.
Никогда не доверяйте вводу (предотвращайте распространённые уязвимости)
Сделайте правильными аутентификацию, сессии и доступ
Сделайте TLS и заголовки безопасности значимыми
Предотвратите подделку почты
Уровень 3: патчи, обнаружение, восстановление
Фундамент для «держать ущерб малым и быстро восстановиться даже после взлома». Мониторинг зависимостей вроде osv-scanner живёт здесь.
Машинно отслеживайте CVE зависимостей непрерывно
Автообновляйте ОС и сервер
Укрепите SSH и фаервол
Используйте наименьшие привилегии, чтобы ограничить распространение взлома
Резервные копии 3-2-1 + проверенное восстановление
Храните логи, чтобы замечать аномалии
С чего начать
«Всё, прямо сейчас» нереалистично. Сравните порядок, который люди обычно берут, с тем, что рекомендует этот сайт.
Порядок, который люди обычно берут (неэффективно)
- начинают с эффектной работы над уязвимостями приложения
- оставляют MFA «на потом» бесконечно
- есть резервные копии, но восстановление ни разу не пробовали
- секреты в
.env, но нет хука обнаружения
Порядок, который рекомендует этот сайт
- Уровень 0: сначала защитить админ-аккаунты, почту и домен с помощью MFA
- Уровень 1: структурно остановить утечки секретов (обнаружение в pre-commit + политика ротировать-всё)
- Уровень 2: закрыть распространённые уязвимости приложения
- Уровень 3: дойти до «восстановимого» через мониторинг зависимостей, обновления, проверенные восстановлением резервные копии
Этот сайт тоже защищается в этом порядке
Этот сайт применяет те же меры к себе: приложение и БД в отдельных контейнерах, БД только во внутренней сети (ограничение масштаба последствий на уровне контейнеров/сети) / отдельный ключ на хост / секреты никогда в git или документах / мониторинг CVE зависимостей перед каждым развёртыванием и ежедневно / резервные копии вне площадки на отдельный сервер / внешние запросы через границу безопасности. Сайт, который учит безопасности, не может оставлять уязвимости в собственной конфигурации, поэтому мы прогоняем этот порядок приоритетов на себе первыми. Наш учредительный инцидент тоже произошёл не из новой атаки, а из единственного пробела в этих базовых мерах. Поэтому мы и повторяем: основы прежде эффектной работы.
Читать дальше
- Версия для организаций / команд: базовая безопасность для средних и крупных организаций
- Самохостинг: самохостинг Git vs GitHub: что безопаснее
- Зависимости: установка и использование osv-scanner · не отставать от CVE
- Секреты: файлы .env и секреты · инцидент ключ утёк и пошли мошеннические счета
- Инструменты: проверка заголовков безопасности · проверка аутентификации почты · поиск CVE/KEV
- По фреймворкам: безопасность по фреймворкам (тот же фундамент, изложенный на языке вашего стека)
- Общая картина: частые ошибки — это ошибки допущений (четыре убеждения, которые раз за разом подводят)
- Заголовки: заголовки безопасности — не список, который нужно наращивать (в том числе какие убрать)