Аудит кода и архитектуры: можно ли развивать систему, которая уже работает

Аудит кода и архитектуры отвечает на три вопроса: можно ли безопасно менять эту систему, что в ней сломается первым и с чего начинать починку. Мы читаем исходники, смотрим, как система развёрнута и как обменивается данными, запускаем её на отдельном стенде и отдаём заключение, которое можно унести к любому подрядчику. Цена и срок называются до начала работ.

Фиксированная цена — от 200 000 ₽, срок 2–6 недельЗаключение с оценкой по каждому замечанию и порядком исправленияРаботаем на вашем стенде, под NDA, исходники не копируем к себе

С чем приходят

Когда аудит нужен, а когда достаточно спросить разработчика

Подрядчик ушёл, система осталась

Код есть, документации нет, и никто не знает, что произойдёт, если поменять одну таблицу. Прежде чем отдавать систему в сопровождение, нужен паспорт и оценка риска.

Перед приёмкой разработки

Подрядчик сдаёт систему, она «работает на демонстрации». Аудит показывает, выдержит ли она рост данных, правки и смену команды, пока акт ещё не подписан.

Система тормозит или падает без видимой причины

Каждый месяц добавляется ещё одна заплатка. Нужно понять, это одна узкая точка или устройство системы целиком, и от этого зависит, чинить или переписывать.

Перед миграцией или покупкой

Переход на другую базу, на отечественную ОС или передача системы новому владельцу. Аудит заранее показывает, какая часть завязана на конкретную версию, библиотеку или чужой сервис.

Что проверяем

Шесть областей аудита: что смотрим и что получаете на выходе

Если системе нужна только часть проверок, берём часть: перечень согласуем на созвоне. Проверка защищённости ИИ-моделей вынесена в отдельную услугу, см. защиту и аудит ИИ.

Область
Что смотрим
Признаки проблемы
Что получаете
ОбластьАрхитектураграницы и зависимости
Что смотримИз чего состоит система, где проходят границы модулей, что от чего зависит, где лежат данные
Признаки проблемыВсё держится на одном модуле, вызовы идут «через базу», логика размазана между интерфейсом и сервером
Что получаетеСхема системы «как есть», список слабых мест и вариант целевой схемы
ОбластьКодчитаемость и изменяемость
Что смотримСтруктура, повторяющиеся куски, размер функций, понятность имён, обработка ошибок
Признаки проблемыОдна правка ломает три места, одинаковый код скопирован в десяти файлах, ошибки молча глотаются
Что получаетеСписок замечаний с примерами из вашего кода и оценкой трудоёмкости
ОбластьДанные и базасхема и запросы
Что смотримСхема базы, индексы, медленные запросы, миграции, как хранятся пароли и персональные данные
Признаки проблемыНет внешних ключей, запросы в цикле, схему меняют руками на боевой базе
Что получаетеСписок запросов и таблиц, которые тормозят сейчас или начнут при росте данных
ОбластьБезопасность кодатиповые уязвимости
Что смотримПроверка прав на сервере, ввод пользователя, секреты в репозитории, зависимости с известными дырами
Признаки проблемыПароли лежат в исходниках, права проверяет только интерфейс, зависимости не обновлялись годами
Что получаетеПеречень замечаний по степени серьёзности. Это ревью кода, а не аттестация и не пентест
ОбластьСборка и развёртываниеможно ли воспроизвести
Что смотримКак собирается и выкладывается система, есть ли тесты, как восстановить её после сбоя
Признаки проблемыСборка работает только на машине одного человека, выкладка вручную, резервную копию не восстанавливали
Что получаетеПроверка, что систему можно поднять с нуля на чистом стенде по записанным шагам
ОбластьЗависимости и лицензиичто внутри
Что смотримБиблиотеки и их версии, закрытые и устаревшие компоненты, привязка к иностранному сервису
Признаки проблемыБиблиотека больше не поддерживается, часть логики живёт в чужом облаке, лицензия не позволяет передачу
Что получаетеРеестр зависимостей с пометками «заменить сейчас», «заменить в плановом порядке», «оставить»
Метод

Как мы читаем систему, чтобы заключение можно было проверить

Заключение без доказательств превращается в мнение. Поэтому каждое замечание привязано к месту в коде, к запуску или к измерению.

Сначала запуск, потом чтение

Система поднимается на отдельном стенде по тем шагам, которые вы нам передали. Уже на этом этапе видно многое: сколько времени ушло на запуск, чего в инструкции не хватило, какие доступы оказались неописанными. Если систему не удалось собрать с нуля, это первое замечание заключения, и оно важнее десятка мелких.

Чтение идёт от рисков, а не от первого файла

Мы не читаем репозиторий подряд. Сначала определяем, где система может нанести ущерб: учёт денег и остатков, права доступа, обмен с другими системами, выгрузки наружу. Там читаем глубоко и построчно. Остальной код оцениваем по выборке и по автоматическим проверкам, и в заключении прямо пишем, что просмотрено глубоко, а что выборочно.

Каждое замечание имеет три поля

  • Где: файл, модуль, таблица или шаг развёртывания.
  • Чем грозит: что именно сломается или утечёт и при каком условии.
  • Сколько стоит исправить: оценка трудоёмкости в днях и порядок: до чего нельзя трогать систему, а что подождёт.

Оценка трудоёмкости не заменяет оценку проекта, но показывает порядок величины. Её хватает, чтобы понять, чинить систему или переписывать, и принять решение до того, как потрачен первый рубль на правки.

Глубина и цена

Три уровня аудита: размер системы, срок и цена

Аудит стоит на той же шкале, что и обследование и дорожная карта. Ориентир один: объём того, что нужно прочитать и проверить.

Уровень
Пример
Цена и срок
Что получаете
УровеньОдна системаодин репозиторий, одна база
ПримерСайт с кабинетом, внутренний сервис, обмен между двумя системами
Цена и срок200 000 ₽ · 2–3 недели
Что получаетеЗаключение, паспорт системы, список замечаний и порядок исправления
УровеньНесколько системсвязка из нескольких частей
ПримерУчёт, сайт, склад, интеграции между ними, несколько репозиториев
Цена и срок350 000 ₽ · 3–4 недели
Что получаетеТо же плюс схема обменов, матрица источников данных и карта точек отказа
УровеньКрупный контурмного систем и закрытая среда
ПримерПроизводственный или корпоративный контур, ограничения по категорированию
Цена и срок500 000 ₽ · 4–6 недель
Что получаетеТо же плюс требования к инфраструктуре, план миграции по очереди и оценка рисков
УровеньПовторная проверкачерез 1–3 месяца
ПримерВы исправили замечания и хотите убедиться
Цена и срокпо согласованию
Что получаетеКороткая записка: что закрыто, что осталось и что появилось нового
Решения

На какие вопросы отвечает заключение

Чинить, переписывать или оставить

Для каждой части системы называем вариант и условия, при которых он перестаёт работать. Переписывание рекомендуем реже, чем кажется: чаще хватает вынести одну часть.

С чего начинать

Замечания упорядочены: что опасно прямо сейчас, что станет проблемой при росте, что можно отложить. Первый шаг обычно укладывается в две-три недели работы одного инженера.

Сколько это будет стоить

Вилка трудоёмкости по каждому блоку работ. Это не смета, но с ней можно идти в тендер и сравнивать предложения, в том числе не наши.

Можно ли отдать систему на сопровождение

Проверяем, достаточно ли у неё паспорта, мониторинга и проверенных копий. Если нет, называем, что нужно сделать до <a href="../soprovozhdenie-po/">передачи в сопровождение</a>.

Можно ли развивать дальше

Выдержит ли архитектура новые функции, второго клиента или рост данных, и что придётся изменить заранее. Для продуктов смотрим и границы данных между клиентами.

Что мешает миграции

Привязку к конкретной базе, версии операционной системы или иностранному сервису. Результат пригодится при <a href="../migraciya-na-postgresql/">переходе на PostgreSQL</a> и <a href="../importozameshenie-po/">импортозамещении</a>.

Решение

Чинить, выносить часть или переписывать: как мы читаем признаки

Таблица показывает логику решения. На вашей системе вердикт зависит от данных и бюджета, а не от одного признака.

Что видим
Что это значит
Обычный вариант
Когда вариант не годится
Что видимОдна узкая точкатормозит один запрос или модуль
Что это значитОстальное работает стабильно, жалобы приходят из одного раздела
Обычный вариантИсправить место и добавить проверку на рост данных
Когда вариант не годитсяУзкая точка лежит в самой модели данных, тогда правка затронет всё
Что видимХорошее ядро, слабая обвязкасборка, тесты, документация
Что это значитЛогика написана внятно, но систему нельзя собрать и проверить без автора
Обычный вариантПривести в порядок сборку, написать паспорт и тесты на критичные места
Когда вариант не годитсяАвтор недоступен и пробелов в знаниях больше, чем кода
Что видимОдин модуль тянет остальноесильная связанность
Что это значитЛюбая правка требует трогать десять файлов в разных местах
Обычный вариантВынести модуль за границу и менять его независимо
Когда вариант не годитсяГраницу нельзя провести, потому что данные общие по всей системе
Что видимУстаревшая основанет поддержки языка или библиотеки
Что это значитОбновления безопасности не выходят, часть компонентов нельзя заменить
Обычный вариантПереписывать по частям, начиная с самых рискованных
Когда вариант не годитсяНет бюджета на постепенную замену, тогда живёт заплатками и риск растёт
Процесс

Как идёт аудит

До начала — Рамки и доступы

Подписываем NDA, уточняем объём и уровень, согласуем с вашей службой безопасности, где мы работаем с кодом: у вас, в вашем контуре или на выданном стенде.

Дни 1–3 — Запуск системы

Собираем и запускаем систему по вашим инструкциям. Фиксируем всё, что пришлось выяснять устно, это пойдёт в паспорт.

Неделя 1–2 — Чтение и измерения

Глубокое чтение рискованных участков, автоматические проверки зависимостей и кода, разбор схемы базы и медленных запросов, проверка прав и секретов.

Конец срока — Заключение

Документ с замечаниями, оценкой и порядком исправления, схема системы и паспорт. Отдаём вам, не публикуем и не передаём третьим лицам.

После — Разбор на созвоне

Проходим заключение вместе с вашими специалистами, отвечаем на вопросы, помогаем составить задание на исправление. Участие нашего инженера в исправлении по желанию, отдельным этапом.

Что делаем

Из чего состоит работа и сколько она стоит

Аудит одной системы

Запуск, чтение, проверка базы и безопасности кода, заключение, паспорт и порядок исправления.

от 200 000 ₽ · 2–3 недели

Аудит нескольких систем

Плюс схема обменов, матрица источников данных, карта точек отказа и оценка очередности работ.

от 350 000 ₽ · 3–4 недели

Аудит крупного контура

Плюс требования к инфраструктуре, план миграции по очереди и учёт ограничений закрытой среды.

от 500 000 ₽ · 4–6 недель

Сопровождение после аудита

Если систему нужно принять на поддержку, подбираем пакет по нашей шкале сопровождения.

от 20 000 ₽ в месяц
Цена

Что двигает цену аудита внутри вилки

Размер и язык кода

Чем больше репозиториев и разных технологий, тем дольше чтение. Редкий язык или собственный фреймворк требуют времени на вхождение, и это видно уже на созвоне.

Доступность людей

Если автор системы или её администратор отвечает в течение дня, срок короче. Если никого нет и всё выясняется по коду, срок растёт.

Закрытая среда

Работа внутри контура заказчика без выноса кода занимает больше времени на согласование доступов и подготовку стенда.

Глубина проверки безопасности

Ревью типовых уязвимостей входит. Моделирование атак, проверка защиты сети и аттестация не входят: это отдельные работы, часть из них требует лицензии, которой у нас нет.

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Заключение, схема системы и паспорт передаются вам по акту; наши черновики после сдачи не хранятся.
  • Исходный код остаётся в вашем контуре; на свои машины мы его не копируем без вашего письменного согласия.
  • Список замечаний с оценкой, по которому можно работать с любым подрядчиком, в том числе с прежним.
  • Право остановиться после аудита: исправление не обязательно заказывать у нас.
  • Письменный критерий приёмки аудита до начала: что должно быть в заключении.

Мы этого не делаем

  • Не называем систему «плохой» или «хорошей» одной оценкой: в заключении замечания, а не баллы.
  • Не проводим аттестацию и испытания на соответствие требованиям регуляторов, лицензии ФСТЭК у нас нет.
  • Не атакуем ваши боевые системы и не проверяем защиту сети; ревью кода и пентест это разные работы.
  • Не пересказываем чужие рыночные вилки и не обещаем заранее, что код придётся переписать.
  • Не берём работы дешевле 150 000 ₽ и не дежурим круглосуточно.
Материалы

Материалы по теме

Статья

Стоимость владения ИТ-системой: что считать кроме разработки

Из чего складывается цена системы за несколько лет. Помогает понять, сколько стоит жить с найденными замечаниями.

  • Сопровождение
  • Доработки
  • Простои
Читать →
Статья

Как выбрать подрядчика на разработку

Вопросы, которые стоит задать до подписания договора, и признаки подрядчика, который оставит вас без исходников.

  • Вопросы
  • Исходники
  • Приёмка
Читать →
Статья

Коробка или заказная разработка

Когда готовая система выгоднее, а когда придётся писать своё. Пригодится, если аудит покажет, что основа не годится.

  • Критерии
  • Стоимость
  • Риски
Читать →
Заявка

Расскажите, какую систему нужно посмотреть

Сорок минут созвона: что за система, кто её писал, есть ли исходники и документация. По итогам скажем, какой уровень аудита подходит, и назовём цену и срок.

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: аудит кода и архитектуры

Сколько стоит аудит кода и архитектуры?

Цена зависит от размера системы и называется до начала. Одна система с одной базой: 200 000 ₽ и 2–3 недели. Несколько связанных систем: 350 000 ₽ и 3–4 недели. Крупный контур с закрытой средой: 500 000 ₽ и 4–6 недель. Если после аудита вы продолжаете работать с нами, сумма вычитается из первого этапа.

Что я получу по итогам аудита?

Заключение со списком замечаний, где у каждого указано место в системе, чем оно грозит и сколько стоит исправить, схему системы «как есть», паспорт системы и порядок исправления. С этим документом можно идти к любому подрядчику.

Нужны ли исходники и доступ к боевой системе?

Исходники нужны. К боевой системе доступ не требуется: запускаем её на отдельном стенде с копией структуры данных. Если реальные данные нельзя передавать, работаем на обезличенных или тестовых, и мы говорим об этом в заключении как об ограничении.

Можно ли провести аудит, если автор системы недоступен?

Да, но срок и цена выше, потому что многое приходится выяснять по коду. В заключении отдельно перечисляем, что не удалось установить без автора, и это обычно становится первым пунктом плана.

Это то же самое, что пентест или проверка безопасности?

Нет. Мы проверяем исходный код и конфигурацию на типовые уязвимости. Моделирование атак, проверка сети и аттестация объектов в аудит не входят, лицензии ФСТЭК у нас нет. Для ИИ-моделей отдельная услуга: защита и аудит ИИ.

Вы будете исправлять найденное сами?

Только если вы захотите. Исправление оценивается отдельно, по шкале сопровождения или как этап разработки. Аудит можно купить и не покупать ничего дальше.

Как вы работаете с закрытым контуром?

Работаем на вашем стенде или внутри вашего контура, без выноса кода. Порядок доступа и требования безопасности согласуем на старте с вашей службой безопасности, всё записывается в договоре и NDA.

Чем аудит отличается от обследования?

Обследование смотрит на процессы и данные и отвечает, что автоматизировать. Аудит кода и архитектуры смотрит на уже существующую систему и отвечает, можно ли её менять. Часто они идут вместе: сначала аудит, потом дорожная карта.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и аудит согласуем на старте с вашей службой безопасности.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.