Недавно я прочитал статью под названием «Все, что вы когда-либо хотели знать о динамическом анализе заражения и прямом символическом исполнении (но Возможно, боялся спросить) " Dr. Э. Дж. Шварц. В своей статье он в основном говорил об их приложениях в контексте безопасности двоичного уровня.
Мне любопытно, в чем разница между динамическим анализом заражения и прямым символьным исполнением.
Насколько я могу судить, анализ помеченных данных отслеживает потоки информации от объекта x (источник) к объекту y (приемник) всякий раз, когда информация, хранящаяся в x, передается в объект y. Поэтому основная проблема заключается в том, на какой объект может транзитивно воздействовать источник. В то время как символьное выполнение обрабатывает некоторые входные данные как символьные значения и пытается выразить другие переменные с помощью символьных значений; тем самым он отвечает, на каких условиях символьный ввод влияет на последующие программы.
Я вижу, что на двоичном уровне анализ заражения часто упоминается с уязвимостью, вызванной перезаписью адреса возврата; в то время как символьное выполнение может иметь дело с большим количеством типов уязвимых проблем, таких как целочисленное переполнение, ошибки утверждения времени выполнения, утечка ресурсов (например, утечка памяти, файл открыть / закрыть), переполнение буфера.
Однако кажется, что современный анализ заражения включает не только анализ потока данных, большинство из них отслеживает условия потока управления; а в нескольких сценариях обнаружения уязвимостей испорченный ввод также представляется как символическое значение и распространяется так же, как и при символьном выполнении. С другой стороны, механизмы символьного исполнения не могут полностью использовать символьные значения, разделенные различными условиями пути, из-за ограничений базовых решателей ограничений и среды выполнения выполнения / интерпретации; таким образом, они не могут достичь ожидаемого высокого покрытия ветвления или пути.
Итак, в общих случаях, можем ли мы сказать, что анализ заражения разновидностью грубого символического выполнения или символическое выполнение является сильным > Этакий точный анализ испорченности?