JavaScript стал основой современного веба, с браузерами, полагающимися на оптимизированные движки, такие как V8, SpiderMonkey и JavaScriptCore. Эти движки используют компиляторы just-in-time, чтобы достичь производительности, подобной родной, но это создало огромную поверхность атаки с молчаливыми ошибками JIT, являющимися серьезной проблемой. Молчаливые ошибки JIT - это логические ошибки, которые могут избежать традиционных средств безопасности и быть использованы для удаленного выполнения кода. Обеспечение безопасности движков JIT сложно из-за ограничений традиционных методов тестирования, которые часто не замечают семантической правильности. Традиционные стратегии фаззинга не справляются из-за молчаливых сбоев, слепоты санитайзеров и шума между движками. Чтобы решить эту проблему, JIT-Picking вводит архитектуру дифференциального фаззинга, ориентированную на точность, которая использует движок JavaScript против самого себя. Этот подход включает в себя выполнение одного и того же входного кода JavaScript в режиме только интерпретатора и в режиме с включенным JIT, внедрение проб, чтобы захватить значения локальных переменных, и хеширование захваченных значений, чтобы обнаружить ошибки вычислений. JIT-Picking был оценен на производственных движках и выявил 32 ошибки, из которых 27 были специфичны для JIT, и оказался эффективным в обнаружении ошибок в оптимизациях циклов. Этот подход отлично подходит для захвата транзиторных ошибок вычислений, которые традиционные фаззеры могут пропустить, и его эффективность была продемонстрирована через 10-месячную оценку на производственных движках. Будущее безопасности браузеров лежит в семантически-осведомленном тестировании, с фокусом на логической правильности как на первоклассной границе безопасности, и автоматизированное дифференциальное тестирование может стать обязательным в конвейерах непрерывной интеграции и доставки браузеров, чтобы обеспечить безопасность браузеров.
dev.to
JIT-Picking: Exploiting the Logic Gap in Modern JavaScript Engines
