1

Я имею дело с клиентом Chrome Native и имею некоторые трудности в следующих точках:Native Client внутренняя/внешняя песочница

  1. Как я понял до сих пор, первые 64 КБ сегмента 256 NaCL посвящены к внутренней песочнице. Эта внутренняя песочница содержит батут и трамплин, которые передают от доверенного кода ненадежным и наоборот. Когда я нахожусь в этом первом 64 КБ, могу ли я перейти к середине 32 байтовых инструкций? например, если у меня есть 32-байтная инструкция в батуте, могу ли я перейти от этого instr к середине (а не 32 байта) другой 32-байтовой конструкции в батуте? Все инструкции в трампине и трамплине также выровнены по 32 байт?

  2. Могу ли я комбинировать несколько команд x86 в один байт 32 выровненных инструкции NaCl (например, помещая И 0xffffffe0% EAX и JMP EAX в одном 32 байта выровненной инструкции NaCl).

  3. Я понял, что время выполнения службы связано с созданием процесса, управлением памятью и т. Д. И что к нему обращаются через батут, как именно команда батута обращается к службе выполнения? где время выполнения службы находится на платформе памяти? когда время выполнения службы заканчивается, может ли он получить доступ к 32-байтовой выровненной команде в трамплине?

  4. Какова фактическая обязанность внешней песочницы? как он отслеживает и фильтрует системные вызовы? если в валидаторе встроенной песочницы есть ошибка, в каких случаях он может поймать незаконную/вредоносную инструкцию?

Спасибо всем

ответ

0
  1. Я не 100% уверен в верхней части моей головы, но я бы догадаться, глядя только на структуру каталогов в source, что они оба являются частью кода надежной службы (они находятся в каталоге src/trusted/service_runtime) и поэтому построены с системным компилятором и не подлежат проверке.

  2. Да, количество инструкций в 32-байтовом комплекте отсутствует. Ограничение просто заключается в том, что никакая команда (или многопроцессорная песочница, такая как та, которую вы указали для косвенных прыжков) может пересекать границу пучка. Поэтому в вашем примере обе эти инструкции должны быть в одном комплекте.

  3. Снова я немного неясен в деталях о том, как работают батуты, но когда управление передается с батута, оно заканчивается во время выполнения службы, которое представляет собой обычный машинный код, построенный в соответствии с исходными ABI для ОПЕРАЦИОННЫЕ СИСТЕМЫ. Таким образом, время выполнения службы может использовать любые системные вызовы (по крайней мере, разрешенные внешней песочницей) и может читать или выполнять любую часть ненадежного кода.

  4. Внешняя песочница - это, строго говоря, защита в глубину (то есть внутренняя песочница теоретически достаточна, чтобы содержать ненадежный код). Он по-разному фильтрует системные вызовы на разных ОС. В Chrome встраивания NaCl внешняя песочница является той же реализацией, что и песочница Chrome, используемая для процессов рендеринга и графического процессора.