Тапсырыс беруші
... дейн шешім қабылдау

22.12.25

Марапаттау нысаны

денежная

Өнім күйі

Идея

Тапсырма түрі

Задачи ИКТ

Сфера применения

Произвольный код

Область задачи

Ақпаратты өңдеу және түрлендіру

Tech-тапсырма
Өнім түрі

БҚ/АЖ

Мәселенің сипаттамасы

Рассмотрим произвольную программу P на одном из поддерживаемых языков. Определим семантическое свойство S(P): «существует исполнение P и входные данные x, при которых порождается уязвимый поток данных (например, неподготовленный SQL‑запрос с пользовательским вводом)». Требование заказчика к алгоритму Check(P): • если S(P) истинно, Check(P) обязан вернуть VULNERABLE; • если S(P) ложно, Check(P) обязан вернуть SAFE; • Check(P) всегда завершается за конечное время. Свойство S — нетривиальное семантическое свойство поведения программы, а не синтаксики исходника. Классические результаты теории вычислимости (в частности, теорема Риса) утверждают, что для любой нетривиальной семантической характеристики не существует универсального алгоритма, который корректно решает задачу для всех программ. Это напрямую бьёт в исходное требование: универсальный Check(P) в строгом смысле невозможен.

Күтілетін әсер

Фактически от нас ожидали решения класса задач, которые теоретически неразрешимы для произвольных программ. Мы можем: • жёстко ограничить поддерживаемые языки и паттерны кода; • допустить вероятностный характер выводов (эвристический режим); • опираться на комбинирование статического и динамического анализа. Но универсальный «оракул уязвимостей», который корректно отвечает SAFE/VULNERABLE для любой возможной программы, не может существовать. Именно это делает исходную задачу принципиально нерешаемой, а не просто «трудной в реализации».

Жауапты тұлғаның ТАӘ

Сергеев И.А.

Тапсырманың (жобаның) мақсаты мен сипаттамасы

К заказчику привязано несколько десятков репозиториев (Go, Kotlin, TypeScript, немного C++). Ручной code‑review не успевает отлавливать критические уязвимости. От нас потребовали спроектировать статический анализатор, который: • гарантированно находит все уязвимости определённого класса (SQL‑инъекции, XSS, утечки секретов); • не даёт ложных срабатываний (0 false positive); • работает за ограниченное время (до 60 секунд на репозиторий среднего размера); • применим к любому коду на поддерживаемых языках без дообучения под конкретный проект. Иначе говоря, от нас ожидали универсальный «оракул уязвимостей».