Pull to refresh

Comments 8

создание red pill, позволяющей отличить голое железо от гипервизора.

А где здесь условие, позволяющее отличить голое железо от гипервизора? Все мало-мальски серьезные гипервизоры обрабатывают подобные махинации достаточно легко, ведь 99% за них делает сам процессор, а он не меняется. Качественно проэмулировать оставшийся 1% вполне возможно.
Спасибо за вопрос!
Сразу оговорюсь: я не эксперт в области виртуализации, поэтому попытаюсь ответить вам словами более компетентных людей, надеюсь, не истолкую их превратно.
1. Цитата из публикации, на которой основана моя статья:
Not a single such emulation and tracing tool reflected the entirety of hardware’s actual behavior on which we rely. We believe the reason for this limitation is that emulation-based analysis tools are primarily debugged against popular OS implementations rather than hardware specifications.
Аналогичное утверждение, с некоторыми деталями, авторы делают в своём выступлении, на 54:55. Разумеется, возникает вопрос — как тогда они записывали своё демо? Они могли запустить свой «странный вычислитель» на голом железе, но в видео явно видно окошко bochs. В другом выступлении, на 26:21, поясняется, что одному из авторов статьи изначально пришлось пропатчить этот эмулятор, чтобы он всё же повторял поведение голого железа, но в итоге, разобравшись в проблеме, он просто поместил workaround в свой компилятор, обходящий баг в bochs, чтобы их программа работала правильно и без патча.
2. Некоторые другие источники[1][2][3, слайд 8] наталкивают на мысль, что прерывания и исключения — это как раз тот аспект(тот 1%, о котором вы говорите?) взаимодействия виртуальной машины с железом, который гипервизор эмулирует программно, а значит это вполне плодородная почва для генерации red pills.
3. Если я правильно интерпретировал вашу мысль(поправьте, если это не так), то red pill создаются непросто, а если они и существуют, то их легко пофиксить, пропатчив гипервизор. Для начала, предлагаю вам ознакомиться c четвёртым абзацем моей статьи — там, а также в приведённых ссылках, есть некоторые наводки на то, почему дела обстоят не совсем так. Прибыль разработчиков гипервизоров зависит не от количества red pills, а от стабильности исполнения мейнстримных операционных систем, поэтому мотивация патчить гипервизоры для правильной обработки недостижимых при обычном использовании случаев(например, хитрости с рудиментами вроде double fault) стремится к нулю. С учётом этого, создание red pills, эксплуатирующих многочисленные баги гипервизоров, не составляет труда: для этого существуют даже автоматические инструменты.
Для различителя между реальным железом и виртуализацией здесь выбран очень сложный и не дающий никаких гарантий работоспособности подход. Конечно, в bochs могут быть ошибки, тем более это эмулятор, а не гипервизор, а полный эмулятор x86 системы написать довольно сложно, из известных я знаю только Интеловский, но они сами лучше всех знают как работают их процессоры. В гипервизорах стараются вполне себе корректно обрабатывать программно тот оставшийся 1%, потому что исключения doublefault и даже переключения задач вполне себе встречаются в реальной жизни, например в windows.

Если же говорить вообще про способы отличить реальное железо от виртуального, то их достаточно много и без таких сложных ухищрений. Например, невозможно полностью корректно виртуализовать течение времени: здесь есть неразрешимый конфликт между эмуляцией устройств реального времени (типа звука, usb и т.д.) и тем фактом, что не всё процессорное время принадлежит на 100% виртуальной машине, ведь параллельно ей что-то ещё исполняется и отнимает время — достаточно откалибровать источник виртуального времени используя эмуляцию, построенную на реальном времени с учетом времени полученного из интернета (по ntp), и у вас хороший различитель работающий для любых типов гипервизоров. И не надо при этом искать ошибки в эмуляции поведения в редких сценариях.
Я понял, о чём вы, и с вашим тезисом
Для различителя между реальным железом и виртуализацией здесь выбран очень сложный и не дающий никаких гарантий работоспособности подход
совершенно согласен. Более того, я сам в последнем комментарии привёл ссылку на статью, в которой тот же результат достигается более систематично и куда проще(вплоть до автоматизации). Замечу только, что ваша методика с синхронизацией времени(и другие, основанные на взаимодействии с внешним миром, которые сразу приходят на ум), хотя и действенна, может вызвать подозрение со стороны антивирусного ПО, поэтому вредоносное ПО старается использовать более «автономные», неприметные методы определения среды, в которой исполняется.

Я разместил в своей статье размышления на тему red pill, так как этот её пример, уступая в эффективности(поэтому, кстати, я не добавил свою статью в хаб «Защита информации» или подобный), обладает привлекательной экзотичностью. К тому же было бы попросту не совсем корректно опускать один из основных тезисов авторов оригинальной работы. Вот, какая ремарка в ней присутствует на эту тему:
Although “redpills” are plentiful and can be automatically produced, the ability to host arbitrary computations in the “red pill” space is a fresh cautionary tale.

Верно! Приведённый вами и другие примеры неожиданных тьюринг-полных систем; связанные с этим соображения безопасности; а также рассуждения об особенностях «хакерского взгляда» на вещи можно найти в заметке Surprisingly Turing-Complete(в статье я также на неё ссылаюсь).
Полюбившийся мне отрывок оттуда:
“Uncle Milton Industries has been selling ant farms to children since 1956. Some years ago, I remember opening one up with a friend. There were no actual ants included in the box. Instead, there was a card that you filled in with your address, and the company would mail you some ants. My friend expressed surprise that you could get ants sent to you in the mail. I replied: ‘What’s really interesting is that these people will send a tube of live ants to anyone you tell them to.’”

Bruce Schneier, “The Security Mindset” (2008)
Ну глубокая филисофическая идея допустим известна задолго до появления компьютера (электронного) и называется сменой перспективы. А так да, интересно!
Sign up to leave a comment.

Articles