Аудит · пентест · Польша
Аудит безопасности, после которого остаются исправления, а не PDF.
Смотрим на код, зависимости, серверы и мобильные приложения глазами атакующего, доказываем каждую находку и закрываем её.
Чтобы найти то, что ломается тихо.
- 15типичных находок ниже: обезличены и сгруппированы по месту уязвимости
- 6слоёв проверяем: от границы сети до бэкапа
- 2агента на каждую находку: один находит, второй пытается опровергнуть
Где останавливается атака
Слои, которые мы проверяем и настраиваем. Выберите слой, чтобы увидеть, что он останавливает.
Граница сети
CDN · TLS
Останавливает
Флуд, обычный HTTP, удары напрямую по адресу сервера
Как
TLS заканчивается на CDN, которая отсекает флуд. Адрес сервера нигде не опубликован, поэтому обойти CDN не через что.
Туннель и файрвол
0 открытых веб-портов
Останавливает
Сканирование портов, атаки на открытые сервисы, подбор пароля SSH
Как
Веб-трафик приходит через исходящий туннель, поэтому ни один веб-порт не открыт. Файрвол закрыт для веба; SSH принимает только ключи, пароли выключены.
Прокси
лимиты · баны
Останавливает
Сканеры уязвимостей, поток запросов с одного адреса, чтение служебных файлов
Как
У каждого адреса свой бюджет запросов в минуту. Робот банит сканеры, которые ищут известные дыры. Служебные файлы отвечают 404, заголовки безопасности уходят с каждой страницей.
Приложение
только loopback
Останавливает
Подбор паролей, доступ к чужим данным, инъекции
Как
Сервисы слушают только loopback. Три неверных пароля закрывают адрес на час. Сервер заново проверяет каждое право и экранирует вывод под HTML, CSV и письма.
Данные
каждую ночь, вне сервера
Останавливает
Потерю диска, шифровальщиков, ошибки людей
Как
Ночной архив уходит в отдельное хранилище: семь ежедневных копий и одна в месяц. Базы копируются безопасным снимком прямо на ходу.
Обновления
раз в месяц
Останавливает
Известные уязвимости с готовыми эксплойтами
Как
Раз в месяц: пакеты ОС, ядро с перезагрузкой, среды выполнения и зависимости. Каждый раунд записывается в журнал.
Что аудит находит чаще всего
Собирательные случаи, обезличенные и изменённые: ни клиента, ни продукт, ни дату по ним не восстановить. К каждому — исправление и правило, которое не даёт ошибке вернуться.
Высокая
Пароль администратора по умолчанию в исходном кодеКод
Что видим
Запасная учётная запись администратора создаётся из пароля, записанного в коде: любой, кто видел репозиторий, входит в свежую установку.
Как исправляем
Первый администратор создаётся из секрета, заданного при развёртывании, и только пока других нет.
Правило
Никаких учётных данных в коде, даже по умолчанию.
Высокая
Закрытые позиции доступны через публичный APIКод
Что видим
API верит списку, который прислал браузер, и не проверяет, какой каталог пользователю разрешён.
Как исправляем
Сервер проверяет право на каждом запросе; закрытые страницы выдают подписанный токен.
Правило
Сервер заново проверяет каждое право; кнопка на странице ничего не доказывает.
Высокая
Среда выполнения без поддержкиПакеты и версии
Что видим
Продакшен работает на среде и фреймворке, для которых закончились обновления безопасности: известные CVE применимы, а патча не будет.
Как исправляем
План обновления по степени открытости: проверка на копии, выкатка по одному сервису.
Правило
У каждой среды в инвентаризации рядом стоит дата конца поддержки.
Высокая
Файлы репозитория читаются по HTTPИнфраструктура
Что видим
Корень сайта повторяет репозиторий, и заметки с кодами доступа, скрипты и конфиги утилит лежат в одном URL от посетителя.
Как исправляем
Правило на прокси отвечает 404 на файлы репозитория; секреты уезжают из корня сайта.
Правило
Если папку отдаёт веб-сервер, всё в ней публично, пока правило не скажет иначе.
Высокая
Админка открыта всему интернетуДоступ
Что видим
Страница управления базой или хранилищем доступна отовсюду, и перед ней стоит только её собственная форма входа.
Как исправляем
Перед страницей входа встаёт VPN или шлюз нулевого доверия с одноразовым кодом.
Правило
Админка — не публичная страница, даже под паролем.
Высокая
Папки с данными вне бэкапаДанные и эксплуатация
Что видим
Загруженные файлы, база и настройки сервисов никуда не копируются: бэкап покрывает только то, что было в день его настройки.
Как исправляем
Каждая папка с данными попадает в ночной архив вне сервера, а восстановление пробуется по расписанию.
Правило
Сервис не готов, пока его данные не в бэкапе.
Средняя
Выгрузка в таблицу исполняет формулы из пользовательского вводаКод
Что видим
Имя, начинающееся с =, попадает в CSV-выгрузку администратора живой формулой (CSV-инъекция).
Как исправляем
Ячейки, начинающиеся с = + − @, обезвреживаются перед выгрузкой.
Правило
Вывод экранируется под место назначения: HTML, CSV, письмо.
Средняя
Один испорченный куки останавливает сервис для всехКод
Что видим
Куки, которого парсер не ждёт, вызывает ошибку вне обработчиков, и процесс завершается.
Как исправляем
Осторожный разбор и последний обработчик ошибок: запрос получает ошибку, процесс живёт.
Правило
Любой ввод враждебен, заголовки и куки тоже.
Средняя
Зависимости с опубликованными уязвимостямиПакеты и версии
Что видим
Lock-файлы фиксируют библиотеки с известными CVE, и ничто не сообщает команде о новых.
Как исправляем
Проверка зависимостей в CI роняет сборку на высокой важности; остальное уходит в еженедельный отчёт.
Правило
Зависимость — это код, который никто в команде не читал: следите за ней как за своим.
Средняя
Патчи безопасности установлены, но не работаютПакеты и версии
Что видим
Ядро и системные библиотеки обновлены на диске, но сервер не перезапускался месяцами, а десятки пакетов ждут в очереди.
Как исправляем
Ежемесячный раунд обновлений с перезагрузкой и записью в журнал.
Правило
Патч считается, когда процесс, которому он нужен, перезапущен.
Средняя
Старые файлы, которые выкладка не удаляетИнфраструктура
Что видим
Выкладка копирует, но не удаляет: переименованные папки, старая копия файла окружения и личные документы годами лежат на сервере.
Как исправляем
Отчёт сравнивает сервер с репозиторием; остатки удаляются, предварительно сохранены копии.
Правило
Проверяйте, что лежит на сервере, а не то, что должно лежать по репозиторию.
Средняя
Формы входа позволяют подбирать пароль без ограниченийДоступ
Что видим
Неудачные попытки не считаются, пароль сравнивается за переменное время, куки сессии уходят без флага Secure.
Как исправляем
Временная блокировка после нескольких неверных паролей, сравнение за постоянное время, куки с Secure.
Правило
Всё, что проверяет пароль, считает и неудачи.
Средняя
Общий лимит, который может исчерпать один посетительДоступ
Что видим
Мусорные запросы засчитываются в общий лимит, и один адрес может закрыть форму для настоящих пользователей.
Как исправляем
Сначала срабатывает лимит на адрес; общий лимит считает только запросы, прошедшие проверку.
Правило
Лимит защищает пользователей; проверяйте, кого он отсекает.
Средняя
Защита включена, но ни разу не запускаласьДанные и эксплуатация
Что видим
Таймер, который банит сканеры, включён при установке, но ни разу не запущен: неделями на пути стоит только лимит запросов.
Как исправляем
Сухой прогон по живому логу, затем запуск; проверка состояния показывает все таймеры.
Правило
Включено — не значит работает: проверяйте состояние, а не конфиг.
Низкая
Страница ошибки в кэше для всех посетителейИнфраструктура
Что видим
Ответ лимита запросов наследует долгий заголовок кэша картинок, и CDN отдаёт эту ошибку всем.
Как исправляем
Ответы с ошибкой не кэшируются никогда.
Правило
Защита не должна превращаться в отказ в обслуживании.
Под оба фильтра ничего не подходит.
Как идёт аудит
Каждый аудит идёт по одному конвейеру: наши скиллы для ИИ-агентов, проверки в CI и человек, который ставит подпись.
Рамки и разрешение
Договариваемся, что проверяем, откуда и что трогать нельзя. Без письменного разрешения владельца ничего не начинается.
Результат: Письмо о рамках
Инвентаризация
Каждая среда выполнения, фреймворк, пакет и сервер — с версией и датой конца поддержки.
Результат: Карта версий
Старые версии
Всё, что вышло из поддержки или имеет известные CVE, получает план обновления: по открытости, а не по количеству.
Результат: План обновлений
Ревью кода ИИ-агентами
Наши скиллы делят ревью по классам уязвимостей: доступ, инъекции, секреты, сессии, файлы, бизнес-логика. Агенты читают код параллельно, каждый свой класс.
Результат: Сырые находки
Доказательство
Каждую находку воспроизводим. Второй агент пытается её опровергнуть, устоявшее смотрит человек. Что не удалось показать, в отчёт не попадает.
Результат: Отчёт с доказательствами
Исправить и закрепить
Патчи или пул-реквесты, повторная проверка и проверки в вашем CI, чтобы та же ошибка в следующий раз роняла сборку.
Результат: Исправления и проверки в CI
Что мы проверяем
- Веб-приложения и APIOWASP ASVS · WSTG
- Вход и сессии, права доступа, инъекции, загрузка файлов, лимиты, заголовки.
- Мобильные приложенияOWASP MASVS · MASTG
- Android и iOS: хранимые данные, сетевой трафик, разрешения, правила магазинов. Сами выпускаем 18 приложений.
- Серверы и сетиCIS Benchmarks
- Открытые порты, туннели, TLS, DNS и почтовые записи (SPF, DKIM, DMARC), бэкапы, обновления.
- Код и зависимостиOWASP Top 10 · CWE
- Версии без поддержки, известные CVE, секреты в истории git, конвейер CI/CD.
- ИИ-функции и агентыOWASP Top 10 for LLM
- Промпт-инъекции, утечки данных через модель, какие инструменты агенту можно вызывать.
Что вы получаете
- Отчёт: у каждой находки оценка CVSS, класс CWE, доказательство и шаги воспроизведения
- Для каждой находки — быстрая мера и исправление причины
- Критичные находки — сразу после подтверждения, а не в конце
- План обновления старых версий по степени риска
- Исправления: правим сами или передаём патчи вашей команде
- Повторную проверку после исправлений
- Проверки в вашем конвейере, чтобы ошибка не вернулась
Проверьте себя за минуту
Семь вопросов. Ответы остаются в браузере, если вы сами не приложите их к заявке.
«Не знаю» считается риском: то, чего не видно, не защитить.
Вопросы перед заказом
Аудит безопасности или пентест: в чём разница?
Пентест атакует работающую систему за ограниченное время, как это сделал бы посторонний. Аудит добавляет код, зависимости, серверы и процессы и потому находит и то, до чего атакующий ещё не дошёл. Делаем и то и другое и заранее говорим, что именно вы получите.
Что нужно от нас для старта?
Список того, что проверять, доступ к тестовой среде и, если можно, код. Проверка начинается только после письменного разрешения владельца систем.
Будете ли вы тестировать продакшен?
Только то, что вы одобрите, в оговорённые часы и без разрушающих тестов. Лучше копия продакшена: на ней можно давить сильнее.
Нужен ли вам исходный код?
Нет. Без него проверяем снаружи, так, как вас видит атакующий (black box). С тестовыми учётками или кодом (grey или white box) находим больше и быстрее.
Сколько это стоит?
Зависит от объёма. После первого письма согласуем, что проверяем, и пришлём цену и срок до начала работ.
Подпишете NDA?
Да. Подпишем ваше или пришлём своё вместе с рамками работ.
Кто делает работу и кто выставляет счёт?
Максим Маркаров вместе с ИИ-агентами студии; каждую находку перед отправкой проверяет человек. Счёт выставляет польский ИП: JDG Maxim Markarov, NIP 8943181769.
Заказать аудит безопасности
Расскажите, что проверить. Заявка уходит на support@markarov.dev, и оттуда вам ответит человек.
- Без автоответа: через форму нельзя отправить письмо кому-то другому.
- К заявке не привязывается IP-адрес.
- Форма живёт по правилам этой страницы: лимит на адрес, проверки на сервере, никаких сторонних скриптов.