Аудит безопасности исходного кода
Находим уязвимости в исходном коде до того, как до него доберутся злоумышленники. Статический и композиционный анализ, ручной taint-анализ, фаззинг и обязательная проверка эксплуатируемости — на выходе короткий отчёт только с подтверждёнными находками.
- Объект
- Приложения и сервисы, библиотеки, middleware, микросервисы, смарт-контракты, криптографические библиотеки, прошивки HSM и IoT
- Языки
- Java, C#, PHP, Python, JavaScript, TypeScript, Go, C++, Rust, Solidity и другие
- Методы
- SAST, SCA, ручной taint-анализ, динамический анализ и фаззинг, проверка эксплуатируемости
- Сроки
- 1–3 недели для отдельного сервиса или библиотеки, от 4 недель для крупной кодовой базы
- Результат
- Лаконичный отчёт с подтверждёнными уязвимостями, PoC, оценкой риска и рекомендациями под ваш проект
- Доступ к коду
- Под NDA; через репозиторий заказчика, архив или работу в его инфраструктуре
Экспертный анализ исходного кода
Аудит кода — единственный способ проверить то, что снаружи не видно: ветки логики без проверок прав, собственную криптографию, обработку редких форматов ввода, зависимости, до которых не доходит трафик пентеста. Мы имеем опыт анализа кода любой сложности на множестве языков программирования: Java, C#, PHP, Python, JavaScript, Go, TypeScript, C++, Rust, Solidity и других.
Среди проектов были аудиты различных middleware-компонентов, микросервисов, смарт-контрактов, криптографических библиотек, прошивок HSM-модулей и IoT-устройств; по результатам ручных исследований команда получила CVE в популярном ПО — ещё до эпохи ИИ-инструментов. Инструментарий подбираем под стек, а ручной анализ одинаково применим к любому коду.
Выявление уязвимостей на этапе разработки обходится значительно дешевле, чем их обнаружение в продакшене: исправление делается до релиза, без инцидента и без срочного патча. Поэтому аудит чаще всего заказывают перед выпуском новой версии, при смене команды или подрядчика и при подготовке к сертификации.
Что входит в аудит
- Анализ документации
- Изучаем архитектуру, спецификации и требования к безопасности, чтобы понимать контекст и выделить критические компоненты: обработку аутентификации, платежей, внешнего ввода и секретов.
- Автоматизированный анализ (SAST)
- Применяем специализированные инструменты статического анализа — коммерческие, открытые и собственные правила DeteAct — для выявления потенциальных уязвимостей по всей кодовой базе.
- Композиционный анализ (SCA)
- Проверяем зависимости и сторонние компоненты на наличие известных уязвимостей, устаревших версий и лицензионных рисков; оцениваем, достижим ли уязвимый код из вашего приложения.
- Ручной taint-анализ
- Отслеживаем пути данных от точек входа до опасных операций: запросов к базе, файловой системе, команд ОС, десериализации, криптографии. Так находятся векторы атак, которые инструменты не связывают между собой.
- Динамический анализ и фаззинг
- Дополняем статический анализ динамическими методами: запускаем код на стенде, фаззим парсеры и обработчики ввода, проверяем поведение в реальных условиях.
- Проверка эксплуатируемости
- Для каждой потенциальной уязвимости подтверждаем реальный риск: собираем PoC или обосновываем недостижимость, отсеивая ложные срабатывания до того, как они попадут в отчёт.
Какие дефекты находим
| Класс | Что ищем | Последствия |
|---|---|---|
| Инъекции | SQL, NoSQL, команды ОС, LDAP, шаблоны, XPath; небезопасные запросы, собранные конкатенацией | Чтение и изменение данных, выполнение команд на сервере |
| Аутентификация и управление доступом | Проверки прав, пропущенные в отдельных ветках кода, небезопасные сравнения токенов, ошибки в реализации OAuth и JWT | Доступ к чужим данным, подъём привилегий |
| Криптография | Слабые алгоритмы и режимы, предсказуемые ключи и IV, собственные реализации примитивов, ошибки в протоколах | Расшифровка данных, подделка подписей и токенов |
| Обработка внешнего ввода | Десериализация, парсеры XML и JSON, загрузка файлов, path traversal, SSRF в интеграциях | Выполнение кода, доступ во внутреннюю сеть и к файлам |
| Память и низкоуровневый код | Переполнения буфера, use-after-free, целочисленные переполнения, состояния гонки в C, C++ и Rust-unsafe | Выполнение кода, отказ в обслуживании |
| Бизнес-логика | Состояния гонки в платёжных операциях, обход лимитов и проверок, ошибки округления и порядка операций | Прямые финансовые потери |
| Секреты и конфигурация | Ключи и пароли в коде и истории репозитория, отладочные режимы, небезопасные значения по умолчанию | Компрометация сторонних сервисов и окружений |
| Смарт-контракты | Reentrancy, ошибки контроля доступа, арифметика, оракулы и фронтраннинг, ошибки обновляемых контрактов | Потеря средств, блокировка контракта |
Отчёт, а не выдача сканера
Вы получаете не выдачу сканера с сотнями ложных срабатываний, а лаконичный документ, в котором каждая уязвимость подтверждена и описана с реальным риском.
Лаконичный отчёт
Только подтверждённые уязвимости с описанием, местом в коде, условиями эксплуатации и оценкой реального риска.
Экспертная оценка
Каждая находка проверена вручную опытными специалистами для подтверждения её реального воздействия, а не теоретической возможности.
Рекомендации по исправлению
Для каждой уязвимости — конкретная рекомендация с учётом специфики вашего проекта, стека и архитектуры, при необходимости с примером исправления.
Раннее обнаружение
Находки приходят до релиза, когда исправление стоит дешевле всего; сложные уязвимости, которые пропускают автоматические инструменты, не доживают до продакшена.
Что нужно от вас
Аудит начинается после подписания NDA. Минимальный набор — код и инструкция по сборке; документация и стенд повышают глубину проверки.
- Код
- Доступ к репозиторию (чтение) или архив с фиксированной версией и историей коммитов, если она нужна для поиска секретов
- Сборка
- Инструкции по сборке и запуску, зависимости, переменные окружения; Docker-окружение ускоряет динамическую часть
- Документация
- Архитектура, спецификации API, модель угроз или перечень компонентов, работающих с чувствительными данными
- Стенд
- Не обязателен. Тестовое окружение позволяет подтверждать находки динамически и фаззить реальные обработчики
- Контакт разработки
- Инженер, который ответит на вопросы по коду в ходе проекта и примет результаты на разборе
Вопросы об аудите кода
Как защищён исходный код, который мы передаём на аудит?
Какие языки программирования вы анализируете?
Сколько стоит аудит кода и от чего зависит цена?
Сколько длится аудит?
Чем аудит кода отличается от SAST, который у нас уже есть в CI?
Что нужно предоставить для начала работ?
Аудируете ли вы смарт-контракты и прошивки?
Можно ли совместить аудит кода с пентестом?
Заказать аудит исходного кода
Опишите, что за код, на каких языках, примерный объём и что для вас критично. Уточним границы аудита, предложим глубину проверки и зафиксируем стоимость в течение одного-двух рабочих дней. Доступ к коду запрашиваем только после подписания NDA.
- Почта
- info@deteact.ru
- Телефон
- +7 499 444-12-46
- Офис
- Москва, Пресненская набережная, 10с2 (IQ-квартал, Москва-Сити)
- Лицензия
- ФСТЭК России №Л024-00107-00/00581935
