Странная машина - Weird machine

Концепция чего-либо странная машина теоретическая основа для понимания существования подвиги на наличие уязвимостей в системе безопасности. Эксплойты существуют эмпирически, но не изучались с теоретической точки зрения до появления структуры странных машин.

В компьютерная безопасность, странная машина - это вычислительный артефакт, в котором дополнительное выполнение кода может происходить вне исходной спецификации программы.[1] Это тесно связано с концепцией странные инструкции, которые являются строительными блоками эксплуатировать на основе созданных входных данных.[2]

Теория

С теоретической точки зрения появление странных машин становится очевидным, если рассматривать программное обеспечение как способ ограничивать число доступных состояний и переходов между состояниями компьютера: ЦП общего назначения с помощью программного обеспечения специализируется на моделировании конечного автомата (с потенциально очень большим пространством состояний). Многие состояния, в которых может находиться ЦП, исключены, а определенные переходы между состояниями исключены - например, те, которые нарушают требования безопасности программного обеспечения. Когда система каким-то образом переводится в состояние, которое «не имеет смысла», если смотреть с точки зрения предполагаемого конечного автомата (из-за повреждения памяти, сбоя оборудования или других ошибок программирования), программное обеспечение будет продолжать преобразовывать неисправное состояние в новые неработающие состояния, вызванные дальнейшим пользовательским вводом. Возникает новое вычислительное устройство: странная машина, которая может достигать состояний ЦП, отличных от ожиданий программиста, и которая делает это в ответ на вводимые данные.

Приложения

Функциональность странной машины вызывается неожиданными вводами.

В то время как ожидалось, действительный ввод активирует нормальные предполагаемые функции в компьютерная программа, ввод, который был неожиданным для программы разработчик может активировать непредусмотренную функциональность. Странная машина состоит из этих непреднамеренных функций, которые могут быть запрограммированный с выбранными входами в эксплуатировать.

В классической атаке с преимуществом переполнение буфера стека, ввод, переданный уязвимой программе, создается и доставляется так, что сам запускается как программный код. Однако, если области данных в программной памяти были защищены так, чтобы они не может быть выполнен прямо таким образом, входные данные могут вместо этого принимать форму указателей на части существующего программного кода, которые затем выполняются в неожиданном порядке для создания функциональных возможностей эксплойта. Эти фрагменты кода, используемые эксплойтом, называются гаджеты в контексте возвратно-ориентированное программирование.

Посредством интерпретации данных как кода странные машинные функции, которые по определению выходят за рамки исходной спецификации программы, также могут быть достигнуты код подтверждения (PCC), которая, как было официально доказано, функционирует определенным образом.[3] Это несоответствие по существу вызвано несоответствием между формальным абстрактным моделированием компьютерной программы и ее реальным экземпляром, на которое могут влиять события, не отраженные в исходной абстракции, такие как ошибки памяти или отключения электроэнергии.

Странное поведение машин наблюдается даже в оборудовании. Например, было показано, что в x86 можно выполнять вычисления только с инструкциями MOV.[4]

Смягчение

Две основные категории смягчения проблем, вызванных странной функциональностью машины, включают проверку входных данных в программном обеспечении и защиту от проблем, возникающих из-за платформы, на которой работает программа, таких как ошибки памяти. Проверка ввода направлен на ограничение объема и форм неожиданных вводов, например через белые списки разрешенных входов, чтобы сама программа не оказалась в неожиданном состоянии из-за внутренней интерпретации данных. Что не менее важно, безопасные методы программирования, такие как защита от переполнение буфера снизить вероятность того, что входные данные будут непреднамеренно интерпретироваться нижними уровнями, такими как оборудование, на котором выполняется программа.

Смотрите также

Рекомендации

  1. ^ Братусь, Сергей; Locasto, Майкл Э .; Patterson, Meredith L .; Сассаман, Лен; Шубина, Анна (декабрь 2011 г.). «Программирование эксплойтов - от переполнения буфера до« странных машин »и теории вычислений» (PDF). Авторизоваться.
  2. ^ Братусь, Сергей; Дарли, Трей; Locasto, Майкл Э .; Patterson, Meredith L .; Шабиро, Ребекка; Шубина, Анна (январь 2014). «За пределами установленных ошибок в« Доверие доверия »: граница обработки ввода». Безопасность и конфиденциальность IEEE. 12: 83–87. Дои:10.1109 / MSP.2014.1.
  3. ^ Ванег, Жюльен (2014). "Странные машины в коде подтверждения" (PDF). IEEE Security and Privacy LangSec Workshop: 209–213.
  4. ^ Стивен, Долан. "mov является полным по Тьюрингу" (PDF).