CyberGlossary

Безопасность приложений

Символьное выполнение

Также известно как: Символьный анализ, Concolic-выполнение

Определение

Метод анализа программ, при котором код выполняется с символьными входами, а ограничения на путях решаются SMT-решателем для поиска ошибок.

Движок символьного выполнения рассматривает входные данные как математические переменные и при каждом условном переходе ветвит исполнение. На каждом пути накапливаются ограничения в логике первого порядка; SMT-решатель вроде Z3 проверяет их выполнимость и, если возможно, выдаёт конкретный вход, ведущий программу по этому пути. Это позволяет формально доказать достижимость условий ошибки (переполнение, деление на ноль, попадание taint в опасный сток), но страдает от взрыва числа путей и сложности ограничений. Инструменты KLEE, angr и Manticore используются для усиления фаззеров, поиска глубоких уязвимостей и верификации свойств безопасности бинарных файлов.

Примеры

  • Запуск KLEE по C-библиотеке для генерации входов, покрывающих каждое ветвление и срабатывающих assert-ов.
  • Связка angr и AFL++ для решения ограничений, которые сам фаззинг преодолеть не может.

Связанные термины