Процессы и архитектура AppSec
Безопасный SDLC, ревью кода на безопасность, моделирование угроз, разделение обязанностей, триаж уязвимостей и проектирование защищённой архитектуры.
24 вопросов
JuniorТеорияОчень частоЧто такое эшелонированная защита и почему единственный периметровый контроль — плохая ставка?
Что такое эшелонированная защита и почему единственный периметровый контроль — плохая ставка?
Контроли выстраивают слоями, чтобы ни один отказ не был фатальным — атакующему нужно пройти несколько независимых, и каждый слой даёт время на обнаружение. Единственный периметровый контроль — точка отказа: обошли один раз или начали изнутри, и путь к данным больше ничем не оспаривается.
Типичные ошибки
- ✗Приравнивать слои к дублированию одного и того же механизма дважды
- ✗Считать, что внутренняя система может слепо доверять решению периметра
- ✗Игнорировать, что многие атаки начинаются уже изнутри периметра
Уточняющие вопросы
- →Чем помогает дополнительный слой, даже если он не останавливает атаку?
- →Почему два слоя с общей зависимостью считаются одним?
JuniorТеорияОчень частоПочему валидация входных данных по allowlist — не то же самое, что контекстное кодирование вывода?
Почему валидация входных данных по allowlist — не то же самое, что контекстное кодирование вывода?
Валидация на границе решает, приемлемы ли данные, и allowlist разрешённого лучше denylist запрещённого. Кодирование происходит позже, когда данные попадают в HTML, SQL или в shell, и делает их безопасными для конкретного интерпретатора.
Типичные ошибки
- ✗Считать, что строгая валидация снимает необходимость кодировать вывод
- ✗Кодировать один раз на входе вместо кодирования под контекст назначения
- ✗Доверять клиентской валидации как средству защиты
Уточняющие вопросы
- →Почему одно и то же значение требует разного кодирования для HTML и для shell?
- →Когда denylist — единственный вариант и чем это компенсируют?
MiddleДизайнОчень частоПоток загрузки аватарок: пользователь → API загрузки → имя файла в БД → картинка в файловое хранилище → отдача в браузер. Опишите векторы атак, отсортируйте их по критичности и подберите защиту для каждого. Учтите вредоносный файл, SQLi через имя файла, слишком большой файл, неавторизованную загрузку и чтение, раскрытие внутренней информации через ошибки.
Поток загрузки аватарок: пользователь → API загрузки → имя файла в БД → картинка в файловое хранилище → отдача в браузер. Опишите векторы атак, отсортируйте их по критичности и подберите защиту для каждого. Учтите вредоносный файл, SQLi через имя файла, слишком большой файл, неавторизованную загрузку и чтение, раскрытие внутренней информации через ошибки.
Высокая: вредоносная загрузка — антивирус, проверка реального типа, хранение вне web-root; SQLi через имя файла — параметризованные запросы; неавторизованное чтение — авторизация отдачи. Средняя: DoS большим файлом — лимит на тело POST; неавторизованная загрузка — авторизация. Низкая: перехват — TLS.
Типичные ошибки
- ✗Определять тип файла по расширению, а не по реальному содержимому
- ✗Хранить загруженные файлы внутри web-root с возможностью исполнения
- ✗Ранжировать векторы по простоте попытки вместо импакта
Уточняющие вопросы
- →Почему хранение загруженных файлов вне web-root важнее проверки расширения?
- →Как имя файла из запроса может привести к SQL-инъекции?
MiddleДизайнОчень частоПеред вами две формы перевода: между своими счетами (включая валютные) и на сторонние карты по номеру. Проведите моделирование угроз: перечислите векторы атак и контроль для каждого. Учтите подмену счёта отправителя, перевод отрицательной суммы, просмотр чужих балансов, перебор номеров карт, подмену параметра конвертации, ошибки округления, состояние гонки, SQLi, CSRF, XSS и DoS через числа в экспоненциальной записи.
Перед вами две формы перевода: между своими счетами (включая валютные) и на сторонние карты по номеру. Проведите моделирование угроз: перечислите векторы атак и контроль для каждого. Учтите подмену счёта отправителя, перевод отрицательной суммы, просмотр чужих балансов, перебор номеров карт, подмену параметра конвертации, ошибки округления, состояние гонки, SQLi, CSRF, XSS и DoS через числа в экспоненциальной записи.
Сопоставить каждому вектору контроль: авторизация на уровне объекта по счёту отправителя; отклонять неположительные суммы; авторизовать просмотр баланса; rate-limit на перебор карт; фиксировать курс на сервере; точные decimal-типы; транзакция с блокировкой; параметризованные запросы; анти-CSRF токены; экранирование; валидация диапазона чисел.
Типичные ошибки
- ✗Полагаться на клиентскую валидацию вместо серверных проверок
- ✗Считать факт логина достаточной авторизацией на доступ к конкретному счёту
- ✗Хранить деньги в float и забывать про ошибки округления
Уточняющие вопросы
- →Почему проверки на клиенте не считаются контролем безопасности здесь?
- →Чем перевод отрицательной суммы отличается от подмены счёта отправителя по типу контроля?
MiddleТеорияОчень частоГде проходят границы доверия в трёхзвенном веб-приложении и что должно находиться на доверенной стороне?
Где проходят границы доверия в трёхзвенном веб-приложении и что должно находиться на доверенной стороне?
Граница — любой переход, где данные меняют владельца — браузер к серверу, сервер к базе, сервер к внешнему сервису. Всё, что нельзя обойти, живёт на дальней стороне, поэтому авторизация и валидация пересчитываются на сервере, а клиент — лишь удобство.
Типичные ошибки
- ✗Считать сетевой периметр единственной границей в системе
- ✗Засчитывать клиентские проверки как серверную проверку
- ✗Доверять внутреннему вызову только потому, что он не покидает дата-центр
Уточняющие вопросы
- →Почему вызов от вашего сервера к внешнему API — тоже граница доверия?
- →Какие проверки можно оставить на клиенте и исключительно ради чего?
JuniorТеорияЧастоПочему безопасные по умолчанию настройки лучше опциональной защиты при отказе проверки или зависимости?
Почему безопасные по умолчанию настройки лучше опциональной защиты при отказе проверки или зависимости?
Ответ по умолчанию — запрет, и доступ есть только там, где его явно разрешает правило; если проверка падает или сервис авторизации не отвечает, запрос отклоняется. При опциональной защите каждый забытый переключатель остаётся небезопасным, а забывают часто.
Типичные ошибки
- ✗Пропускать запрос, когда сервис авторизации недоступен
- ✗Верить, что чек-лист харденинга заменяет безопасную настройку из коробки
- ✗Считать запрет по умолчанию лишь неудобством для поддержки
Уточняющие вопросы
- →Когда отказ в открытое состояние — осознанный и защитимый выбор?
- →Почему запрет по умолчанию проще проверять аудитом, чем список включений?
JuniorТеорияЧастоПочему принцип наименьших привилегий ограничивает радиус поражения и как он вырождается при накоплении ролей?
Почему принцип наименьших привилегий ограничивает радиус поражения и как он вырождается при накоплении ролей?
Каждая учётная запись получает только права, нужные для её задачи, поэтому компрометация или ошибка достаёт до части данных, а не до всей системы. Принцип вырождается потому, что права выдают по запросу и не отзывают, и учётки копят разрешения до пересмотра доступов.
Типичные ошибки
- ✗Считать выдачу безопасной навсегда, потому что однажды она была обоснована
- ✗Путать наименьшие привилегии с периметровой защитой, которая не пускает внутрь
- ✗Не пересматривать доступы, из-за чего перешедшие и ушедшие хранят старые права
Уточняющие вопросы
- →Как пересмотр прав доступа на практике находит накопленные разрешения?
- →Почему временное повышение прав безопаснее постоянной выдачи роли?
JuniorТеорияЧастоКак мнемоника классификации угроз STRIDE превращает диаграмму потоков данных в конкретные угрозы?
Как мнемоника классификации угроз STRIDE превращает диаграмму потоков данных в конкретные угрозы?
Диаграмма называет процессы, хранилища, потоки и границы доверия, поэтому каждая угроза привязана к конкретному элементу. STRIDE проходит по элементам — подмена, искажение, отказ от авторства, раскрытие, отказ в обслуживании и повышение привилегий.
Типичные ошибки
- ✗Считать STRIDE оценкой критичности, а не помощником в перечислении угроз
- ✗Рисовать диаграмму без границ доверия, из-за чего угрозы остаются абстрактными
- ✗Начинать моделирование угроз только после готовой реализации
Уточняющие вопросы
- →Почему граница доверия на диаграмме меняет то, какие угрозы вы ищете?
- →Какая категория STRIDE отвечает за отсутствующий аудит действий и почему?
JuniorДизайнЧастоВы триажите отчёт bug bounty. Репорт: SQL-инъекция в поиске курсов (параметр q), PoC ' UNION SELECT 1,1,1 -- возвращает 1 1 1. Какие вопросы задать репортёру и команде и как оценить критичность, если на учётке БД реализован принцип наименьших привилегий?
Вы триажите отчёт bug bounty. Репорт: SQL-инъекция в поиске курсов (параметр q), PoC ' UNION SELECT 1,1,1 -- возвращает 1 1 1. Какие вопросы задать репортёру и команде и как оценить критичность, если на учётке БД реализован принцип наименьших привилегий?
Подтвердить воспроизводимость PoC, затем оценить импакт: к каким таблицам учётка имеет доступ, есть ли запись, достижимы ли ПДн. Если наименьшие привилегии соблюдены (только чтение публичного каталога) — инъекция реальна, но низкой критичности. Severity задаёт импакт.
Типичные ошибки
- ✗Ставить критичность по классу уязвимости, не оценивая реальный импакт
- ✗Отклонять валидный PoC, требуя сразу полный дамп данных
- ✗Игнорировать привилегии учётки БД и достижимость ПДн/секретов
Уточняющие вопросы
- →Почему наименьшие привилегии учётки БД снижают критичность инъекции, не убирая баг?
- →Какие вопросы зададите, если та же учётка имеет право записи?
MiddleДизайнЧастоPull request меняет аутентификацию во внутренней админ-консоли. Он добавляет cookie remember-me на 90 дней, переносит идентификатор сессии в параметр URL, чтобы его мог передавать легаси-инструмент отчётности, и пропускает второй фактор, когда запрос приходит из офисного диапазона IP. У вас час на ревью безопасности, и заблокировать релиз ради полной переделки нельзя. Опишите, как вы расставите приоритеты ревью: что смотрите первым и почему, какое из трёх изменений отклоняете сразу, какое принимаете с условиями и какие доказательства просите у команды до релиза.
Pull request меняет аутентификацию во внутренней админ-консоли. Он добавляет cookie remember-me на 90 дней, переносит идентификатор сессии в параметр URL, чтобы его мог передавать легаси-инструмент отчётности, и пропускает второй фактор, когда запрос приходит из офисного диапазона IP. У вас час на ревью безопасности, и заблокировать релиз ради полной переделки нельзя. Опишите, как вы расставите приоритеты ревью: что смотрите первым и почему, какое из трёх изменений отклоняете сразу, какое принимаете с условиями и какие доказательства просите у команды до релиза.
Ревью ведут по радиусу поражения, а не по порядку диффа. Идентификатор сессии в URL отклоняем — он утекает через логи, referer и ссылки. Обход фактора по IP отклоняем — сетевой диапазон не личность. Долгую cookie принимаем лишь как отдельный токен с малыми правами и серверным отзывом.
Типичные ошибки
- ✗Считать внутреннюю консоль вне области ревью аутентификации
- ✗Принимать сетевой диапазон как доказательство личности для пропуска фактора
- ✗Верить, что фильтр на шлюзе компенсирует сломанный дизайн сессий
Уточняющие вопросы
- →Почему идентификатор сессии в URL утекает так, как cookie не утекает?
- →При каких условиях долгоживущий токен remember-me становится приемлемым?
MiddleДизайнЧастоОпишите SDLC с точки зрения безопасности: какие контроли встроить на каждом этапе — от бизнес-требований до поддержки прода — и зачем. Где применяются SAST, фаззинг, SCA (анализ состава ПО), DAST и пентест, и почему именно на этих стадиях?
Опишите SDLC с точки зрения безопасности: какие контроли встроить на каждом этапе — от бизнес-требований до поддержки прода — и зачем. Где применяются SAST, фаззинг, SCA (анализ состава ПО), DAST и пентест, и почему именно на этих стадиях?
Сдвигаем безопасность влево, сопоставляя этапу контроль по доступному: требования → требования ИБ; дизайн → ревью архитектуры; код → SAST; тесты → фаззинг; сборка → SCA; тест → DAST; e2e → пентест; прод → smoke-тесты; поддержка → патчинг.
Типичные ошибки
- ✗Сводить безопасность к единственному пентесту перед релизом
- ✗Путать стадии применения SAST (код) и DAST (запущенное приложение)
- ✗Забывать про этап поддержки — патчинг, анализ логов и сканирование
Уточняющие вопросы
- →Чем покрытие SAST на этапе кода отличается от DAST на запущенном приложении?
- →Зачем SCA (анализ состава ПО) ставят на стадию сборки артефакта?
MiddleДизайнЧастоВы проектируете работу с сессиями для платёжного веб-приложения. Пользователь входит по паролю, может добавить получателя, поднять себе лимит перевода, а оператору на время звонка в поддержку выдают повышенную роль. Фронтенд — одностраничное приложение, а сессия сегодня это одна cookie, выданная при входе и живущая до закрытия браузера. Спроектируйте слой сессий так, чтобы украденная или зафиксированная сессия не пережила смену привилегий: что происходит с идентификатором при входе, при повышении прав, при выходе, по бездействию и по абсолютному таймауту, где хранится авторитетное состояние сессии и как защищена сама cookie.
Вы проектируете работу с сессиями для платёжного веб-приложения. Пользователь входит по паролю, может добавить получателя, поднять себе лимит перевода, а оператору на время звонка в поддержку выдают повышенную роль. Фронтенд — одностраничное приложение, а сессия сегодня это одна cookie, выданная при входе и живущая до закрытия браузера. Спроектируйте слой сессий так, чтобы украденная или зафиксированная сессия не пережила смену привилегий: что происходит с идентификатором при входе, при повышении прав, при выходе, по бездействию и по абсолютному таймауту, где хранится авторитетное состояние сессии и как защищена сама cookie.
Новый идентификатор выдаётся при входе и при каждой смене привилегий, а прежний аннулируется — убивает фиксацию и устаревшее повышение. Состояние сессии авторитетно на сервере, поэтому выход и отзыв реальны; действуют таймаут бездействия и абсолютный, а cookie помечена HttpOnly, Secure и SameSite.
Типичные ошибки
- ✗Сохранять один идентификатор при входе или смене привилегий
- ✗Считать, что удаление cookie на клиенте отзывает stateless-токен
- ✗Заменять абсолютный таймаут привязкой к IP как средством обнаружения кражи
Уточняющие вопросы
- →Почему фиксация сессии перестаёт работать после перевыпуска идентификатора?
- →Что ломается, если повышенная роль живёт только в токене на клиенте?
SeniorДизайнЧастоВ продукте сильная аутентификация: пароль, захэшированный memory-hard функцией Argon2id, плюс обязательный второй фактор из приложения-аутентификатора. Поддержка постоянно эскалирует пользователей, потерявших телефон, и предлагаемое решение — процедура восстановления, где оператор проверяет звонящего по дате рождения и последним четырём цифрам карты, а затем сразу снимает второй фактор. Спроектируйте восстановление доступа так, чтобы оно не стало слабейшим путём в аккаунт: какие доказательства принимаются, что оператор может и не может делать один, какие варианты восстановления вы предлагаете взамен и что пользователь видит после попытки восстановления.
В продукте сильная аутентификация: пароль, захэшированный memory-hard функцией Argon2id, плюс обязательный второй фактор из приложения-аутентификатора. Поддержка постоянно эскалирует пользователей, потерявших телефон, и предлагаемое решение — процедура восстановления, где оператор проверяет звонящего по дате рождения и последним четырём цифрам карты, а затем сразу снимает второй фактор. Спроектируйте восстановление доступа так, чтобы оно не стало слабейшим путём в аккаунт: какие доказательства принимаются, что оператор может и не может делать один, какие варианты восстановления вы предлагаете взамен и что пользователь видит после попытки восстановления.
Восстановление должно быть не слабее входа, иначе атакующие пойдут именно им. Лучше коды восстановления или второй зарегистрированный фактор, чем решение оператора — ответы на вопросы публичны. Оператор не снимает фактор один — нужны задержка, неотключаемое уведомление и аудит.
Типичные ошибки
- ✗Принимать как доказательство ответы, которые есть в открытых или утёкших данных
- ✗Позволять одному оператору снять фактор без задержки и второго согласующего
- ✗Подавлять уведомление, из-за чего настоящий владелец не узнает о попытке
Уточняющие вопросы
- →Чем задержка перед завершением восстановления помогает настоящему владельцу?
- →Почему заранее выданные коды восстановления — более сильное доказательство, чем звонок оператору?
SeniorДизайнЧастоВы проектируете подсистему аудит-логов для сервиса, работающего с платежами и персональными данными. Расследующий должен восстановить, кто что сделал с какой записью, те же логи читают разработчики при инцидентах, а служба безопасности хочет отправлять события в SIEM (платформу управления событиями безопасности), к которой обращаются несколько команд. Разработчик предлагает логировать тело каждого запроса и ответа целиком, чтобы ничего не потерялось. Спроектируйте подсистему: что несёт каждое событие, что не должно попадать в лог никогда, кто может читать и кто удалять и как запись остаётся достоверной против инсайдера.
Вы проектируете подсистему аудит-логов для сервиса, работающего с платежами и персональными данными. Расследующий должен восстановить, кто что сделал с какой записью, те же логи читают разработчики при инцидентах, а служба безопасности хочет отправлять события в SIEM (платформу управления событиями безопасности), к которой обращаются несколько команд. Разработчик предлагает логировать тело каждого запроса и ответа целиком, чтобы ничего не потерялось. Спроектируйте подсистему: что несёт каждое событие, что не должно попадать в лог никогда, кто может читать и кто удалять и как запись остаётся достоверной против инсайдера.
Логируются события безопасности — кто, что, над чем, откуда, результат и время, а не сырые тела. Учётные данные, токены, ключи, полные номера карт и лишние персональные данные не пишутся никогда. Пишущий не удаляет — только дозапись в неперезаписываемое хранилище.
Типичные ошибки
- ✗Логировать тела запросов целиком и тем самым писать секреты и персональные данные
- ✗Давать пишущему сервису права на удаление или изменение собственного аудита
- ✗Путать шифрование на диске с защитой от изменения записей инсайдером
Уточняющие вопросы
- →Почему доступ на чтение аудита сам по себе является решением о приватности?
- →Что делает конвейер только на дозапись убедительным, если его ведёт та же команда?
SeniorДебаггингЧастоНайдите уязвимости в money-transfer сервисе на Spring
Найдите уязвимости в money-transfer сервисе на Spring
Гонка: чтение-проверка-запись не атомарны — фикс транзакцией с пессимистичной блокировкой. Валидация: отрицательный amount обходит проверку остатка. Авторизация: нет проверки владения fromId, а Actuator (heapdump) и H2 утекают данные. DoS: неограниченный BigDecimal — лимит. Добавить @ControllerAdvice.
Типичные ошибки
- ✗Лечить гонку через synchronized вместо транзакции с блокировкой в БД
- ✗Считать Actuator и консоль H2 безопасными по умолчанию
- ✗Пропускать проверку владения счётом и знаком суммы
Уточняющие вопросы
- →Почему пессимистичная блокировка в транзакции надёжнее synchronized для перевода?
- →Как отрицательная сумма обходит проверку остатка в этом коде?
SeniorДизайнЧастоВаш сервис интегрируется со сторонним платёжным провайдером. Он хранит учётные данные API этого провайдера, ключ подписи исходящих webhook и ключ данных, которым шифруются реквизиты выплат. Сегодня все три лежат в переменных окружения, вшитых в образ контейнера, их значения знает один инженер эксплуатации, и ротации не было два года. Спроектируйте архитектуру управления секретами и ключами: где живёт материал, как приложение получает его во время работы, как проходит ротация без простоя для учётных данных провайдера и для ключа данных и как ограничивается ущерб при утечке ровно одного из трёх.
Ваш сервис интегрируется со сторонним платёжным провайдером. Он хранит учётные данные API этого провайдера, ключ подписи исходящих webhook и ключ данных, которым шифруются реквизиты выплат. Сегодня все три лежат в переменных окружения, вшитых в образ контейнера, их значения знает один инженер эксплуатации, и ротации не было два года. Спроектируйте архитектуру управления секретами и ключами: где живёт материал, как приложение получает его во время работы, как проходит ротация без простоя для учётных данных провайдера и для ключа данных и как ограничивается ущерб при утечке ровно одного из трёх.
Ключи держат в управляемом KMS или HSM, а сервис получает короткоживущие учётные данные по идентичности нагрузки, а не из образа. Конвертное шифрование заворачивает ключи данных в ключ, не покидающий KMS. Две версии живут одновременно ради ротации внахлёст, и каждый ключ служит одной цели.
Типичные ошибки
- ✗Вшивать секреты в образ или репозиторий вместо получения во время работы
- ✗Ротировать с единственной живой версией, что даёт простой или неудачную проверку
- ✗Переиспользовать один секрет для разных целей, из-за чего утечка задевает всё
Уточняющие вопросы
- →Почему конвертное шифрование делает смену ключа для сохранённых данных дешёвой?
- →Каким должен быть механизм идентичности нагрузки, чтобы такой дизайн работал?
SeniorДизайнЧастоМультиарендный SaaS-продукт аналитики держит всех клиентов в одной базе PostgreSQL и одном общем бакете объектного хранилища, разделяя их лишь колонкой идентификатора арендатора, которую приложение подставляет в каждый запрос. Новый корпоративный клиент требует доказательств, что другой арендатор не прочитает его данные даже при ошибке в приложении или компрометации учётки поддержки. Перейти на базу на арендатора в этом квартале нельзя. Спроектируйте архитектуру изоляции: откуда берётся идентичность арендатора, что обеспечивает её ниже приложения, как обнаруживается межарендное чтение и что вы честно можете пообещать клиенту.
Мультиарендный SaaS-продукт аналитики держит всех клиентов в одной базе PostgreSQL и одном общем бакете объектного хранилища, разделяя их лишь колонкой идентификатора арендатора, которую приложение подставляет в каждый запрос. Новый корпоративный клиент требует доказательств, что другой арендатор не прочитает его данные даже при ошибке в приложении или компрометации учётки поддержки. Перейти на базу на арендатора в этом квартале нельзя. Спроектируйте архитектуру изоляции: откуда берётся идентичность арендатора, что обеспечивает её ниже приложения, как обнаруживается межарендное чтение и что вы честно можете пообещать клиенту.
Арендатор выводится из аутентифицированной сессии, а не из параметра запроса, и проверяется ниже приложения — row-level security или учётными данными на арендатора, — поэтому забытый фильтр вернёт пустоту, а не всё. Межарендный доступ даёт алерт, а границу проверяют тестами.
Типичные ошибки
- ✗Брать идентификатор арендатора из поля запроса, пришедшего от клиента
- ✗Обеспечивать изоляцию только кодом приложения, который обходит одна ошибка
- ✗Обещать гарантии изоляции, которых общая архитектура не обеспечивает
Уточняющие вопросы
- →Почему сбой в приложении становится безобидным при row-level security?
- →Как автоматически проверять границу арендаторов при каждом развёртывании?
JuniorДизайнИногдаЗаказчик хочет вывести новую систему в прод. Подготовьте перечень вопросов от информационной безопасности перед запуском. Что нужно выяснить про назначение системы, обрабатываемые данные, взаимодействие с критичными системами (платёжка, банковская тайна, ПДн), модель управления доступом, логирование, публикацию наружу и архитектуру публикация-приложение-БД?
Заказчик хочет вывести новую систему в прод. Подготовьте перечень вопросов от информационной безопасности перед запуском. Что нужно выяснить про назначение системы, обрабатываемые данные, взаимодействие с критичными системами (платёжка, банковская тайна, ПДн), модель управления доступом, логирование, публикацию наружу и архитектуру публикация-приложение-БД?
Спросить, что система делает и с какими критичными системами взаимодействует (платёжка, ПДн), какие данные обрабатывает, модель доступа (AD/IDM), публикацию наружу, полноту логирования, где хранятся чувствительные данные, и архитектуру (кто авторизует переход).
Типичные ошибки
- ✗Сводить интейк к функциональному QA, не выясняя классификацию данных
- ✗Считать наличие HTTPS достаточным и не спрашивать про модель доступа и сегментацию
- ✗Не уточнять полноту логирования, без которой невозможно расследование инцидента
Уточняющие вопросы
- →Почему классификация обрабатываемых данных определяет глубину остальных проверок?
- →Какие вопросы добавятся, если система взаимодействует с платёжным контуром?
MiddleТеорияИногдаКогда при триаже можно понизить оценку по стандарту CVSS из-за эксплуатируемости или достижимости?
Когда при триаже можно понизить оценку по стандарту CVSS из-за эксплуатируемости или достижимости?
Базовая оценка описывает уязвимость абстрактно, а средовые и временные метрики — вашу инсталляцию. Понижайте, когда уязвимый путь недостижим, предусловия не выполняются или компенсирующий контроль блокирует её, но не из-за отсутствия эксплойта.
Типичные ошибки
- ✗Понижать оценку только потому, что публичного эксплойта ещё нет
- ✗Отказываться от средовых метрик и передавать сырую базовую оценку
- ✗Считать зависимость безопасной, раз компонент не смотрит в интернет
Уточняющие вопросы
- →Как доказать, что уязвимый путь кода действительно недостижим?
- →Почему компенсирующий контроль нужно фиксировать вместе с пониженной оценкой?
MiddleДизайнИногдаБД управляется администраторами с super-admin аккаунтами, а приложение имеет owner-доступ к данным. Как защитить чувствительные столбцы от чтения и изменения самими DB-админами (разделение обязанностей)? Когда выбрать хэширование, когда симметричное, когда асимметричное шифрование, и как обеспечить целостность строк и их последовательности?
БД управляется администраторами с super-admin аккаунтами, а приложение имеет owner-доступ к данным. Как защитить чувствительные столбцы от чтения и изменения самими DB-админами (разделение обязанностей)? Когда выбрать хэширование, когда симметричное, когда асимметричное шифрование, и как обеспечить целостность строк и их последовательности?
Защищать на стороне приложения, не в СУБД (шифрование СУБД спасает лишь от backup-админов). Хэширование там, где нужна только проверка (пароли); асимметрию — когда один пишет, другой читает; иначе симметрию. Ключи держит приложение, поэтому админы видят лишь шифртекст. Целостность — keyed-хэш строки, сцепленный с предыдущей.
Типичные ошибки
- ✗Полагаться на шифрование в СУБД, которое спасает лишь от backup-админов
- ✗Хранить хэш целостности без секретной соли, известной только приложению
- ✗Не различать сценарии для хэширования, симметрии и асимметрии
Уточняющие вопросы
- →Почему шифрование на уровне СУБД не защищает данные от самих DB-админов?
- →Зачем цепочка хэшей строк нужна для защиты их последовательности?
SeniorДизайнИногдаБанк интегрируется с биржей: серверы автоматической торговли ходят на биржу через API, а оператор работает через терминал. Спроектируйте безопасную интеграцию. Какие вопросы задать, какие средства защиты применить, какие требования к АРМ оператора, серверам и передаче данных? Когда выбрать mTLS, а когда IPsec с OAuth, и как обеспечить целостность торговых заявок?
Банк интегрируется с биржей: серверы автоматической торговли ходят на биржу через API, а оператор работает через терминал. Спроектируйте безопасную интеграцию. Какие вопросы задать, какие средства защиты применить, какие требования к АРМ оператора, серверам и передаче данных? Когда выбрать mTLS, а когда IPsec с OAuth, и как обеспечить целостность торговых заявок?
Сначала уточнить рамки (требования биржи, функции оператора, данные, ОС/БД), затем контроли: endpoint-защита, DLP, мониторинг SOC. Сегментировать сеть; изолировать АРМ оператора (без интернета) с 2FA; API за WAF; БД не публиковать. mTLS при непостоянной связи или IPsec + OAuth при постоянном канале; подписывать каждую заявку.
Типичные ошибки
- ✗Публиковать торговый API и БД наружу вместо сегментации и WAF/ACL
- ✗Выбирать транспорт без учёта постоянства связи (mTLS против IPsec+OAuth)
- ✗Считать шифрование канала достаточным, без подписи заявок для целостности
Уточняющие вопросы
- →Почему mTLS уместнее при непостоянной связи, а IPsec+OAuth — при постоянной?
- →Зачем подписывать каждую заявку сертификатом поверх шифрования канала?
SeniorДизайнИногдаВнутренняя платформа держит сорок сервисов в одной плоской сети. Любой сервис ходит в любой, вызовы не несут идентичности кроме того, что вызывающий внутри VPN, а авторизация происходит только на публичном API-шлюзе. После фишингового инцидента, давшего атакующему опору на одном build-агенте, руководство просит дизайн в парадигме zero trust. Сервисы должны работать всю миграцию, и переписать их разом нельзя. Спроектируйте целевое состояние и первые два шага миграции: какую идентичность несёт вызов, где принимается решение об авторизации, чему вы перестаёте доверять и как избежать простоя при включении запрета по умолчанию.
Внутренняя платформа держит сорок сервисов в одной плоской сети. Любой сервис ходит в любой, вызовы не несут идентичности кроме того, что вызывающий внутри VPN, а авторизация происходит только на публичном API-шлюзе. После фишингового инцидента, давшего атакующему опору на одном build-агенте, руководство просит дизайн в парадигме zero trust. Сервисы должны работать всю миграцию, и переписать их разом нельзя. Спроектируйте целевое состояние и первые два шага миграции: какую идентичность несёт вызов, где принимается решение об авторизации, чему вы перестаёте доверять и как избежать простоя при включении запрета по умолчанию.
Сетевое расположение перестаёт быть идентичностью. Каждый вызов несёт проверяемую идентичность нагрузки — сертификаты mTLS с автоматической ротацией, — и сервис сам авторизует вызывающего на каждый запрос с контекстом пользователя. Сначала режим наблюдения, затем запрет по умолчанию.
Типичные ошибки
- ✗Считать одну лишь сетевую сегментацию архитектурой zero trust
- ✗Выдавать один сертификат на все сервисы, что уничтожает идентичность нагрузки
- ✗Включать запрет по умолчанию без фазы наблюдения и получать простой
Уточняющие вопросы
- →Почему контекст конечного пользователя должен идти с вызовом, а не останавливаться на шлюзе?
- →Что должна показать фаза наблюдения, прежде чем запрет по умолчанию станет безопасным?
SeniorДизайнРедкоВы новый CISO в компании, где информационной безопасности раньше не было. Из доменов (Стратегия, Архитектура, AppSec, Управление доступом, Инвентаризация активов, Сетевая/Периметровая/Endpoint/Data Security, Управление уязвимостями, Мониторинг, Реагирование на инциденты, Пентест, Форензика, Комплаенс, Управление подрядчиками, Защита ПДн, Стандарты и политики, BCM, Антифрод) выберите по три процесса в первую, вторую и третью очередь на 6 месяцев, 1 год и 3 года. Как обосновать порядок?
Вы новый CISO в компании, где информационной безопасности раньше не было. Из доменов (Стратегия, Архитектура, AppSec, Управление доступом, Инвентаризация активов, Сетевая/Периметровая/Endpoint/Data Security, Управление уязвимостями, Мониторинг, Реагирование на инциденты, Пентест, Форензика, Комплаенс, Управление подрядчиками, Защита ПДн, Стандарты и политики, BCM, Антифрод) выберите по три процесса в первую, вторую и третью очередь на 6 месяцев, 1 год и 3 года. Как обосновать порядок?
Обосновать порядок контекстом, а не заучить. Изучить бизнес и активы, спросить IT и стейкхолдеров про реальные инциденты и требования регуляторов и строить стратегию от этих проблем. Защитимая первая очередь — Инвентаризация → Стратегия → Архитектура (нельзя защищать неизвестные активы); добавить Комплаенс, если доминирует регуляторика.
Типичные ошибки
- ✗Начинать с мониторинга/SOC до инвентаризации активов и стратегии
- ✗Копировать фиксированный список без привязки к контексту бизнеса и регуляторам
- ✗Подменять стратегию одним отчётом пентеста
Уточняющие вопросы
- →Почему инвентаризация активов обычно предшествует мониторингу и реагированию?
- →Как требования регулятора могут изменить вашу первую очередь процессов?