Как сделать систему безопасности виртуальных машин?

Добрый день!

Так получилось, что мне досталась тема дипломной связанная с виртуалками. Суть такова - нужно сделать систему, которая позволит контролировать действия пользователя в гостевой ОС, например нужно узнать что он запускал, что качал, и в случае чего предпринимать необходимые действия, например выкидывать алерты или запрещать какие-нибудь действия. Короче такой антивирус на уровне гипервизора. Я знаю что такие штуки уже существуют, но мне нужны именно свои велосипеды и костыли.
Все это должно работать как минимум на ESXi и работать без агента на гостевой ОС. Собственно первоначальная задача - это исключительно мониторинг системы.

Сам лично я пока вижу 3 пути как это можно сделать:
1) При помощи vshield endpoint api - собственно при помощи этого API уже работают множество промышленных решений. Вот только я не совсем понял как можно использовать эту штуку для мониторинга.
2) Гнездовая виртуализация - написать что-то типа blue pill. Запускать эту штуку в гипервизоре, внитри запускать еще один гипервизор и собственно профит на лицо. Сам я считаю что это наиболее годное решение.
3) Разобраться с vd-x и vd-t. Разковырять его каким либо способом, ну и там видно будет что можно сделать.

Хотел спросить какие варианты еще есть, куда смотреть, куда копать, что почитать?
  • Вопрос задан
  • 811 просмотров
Решения вопроса 2
ifaustrue
@ifaustrue
Пишу интересное в теллеграмм канале @cooladmin
Краткий ликбез в то как работает виртуализация, чтобы чуть чуть продвинуть вас в вопросе про решение.
Начнём с простого, как работает x86 система?
Очень укрупнённо и упрощённо, она работает тактами. Каждый такт, процессор выполняет какие либо действия, что-то считает, что-то читает, что-то записывает.
Каждый такт, на процессор поступает набор инструкций и они выполняются.
В каждом такте у нас есть кусочек памяти, с которой мы можем работать - регистры. Какие-то мы можем читать и записывать, какие-то можем только читать, какие-то показывают нам текущее состояние. Регистров много и они разные.
У нас есть таблица прерываний - она показывает нам состояние системы, состояние оборудования и устройств ввода и вывода.
И много всего ещё. Всё это называет Контекст исполнения.
Помимо прочего, у процессора (опять же если упростить) есть система безопастности основанная на уровнях привилегий процесса. Для Windows (и многих других систем), например, это два уровня: ядро (нулевой уровень, уровень ядра) и пользовательский (User-mode). Процесс (а в данном приближении - инструкции) запущенные на разных уровнях имеют различные привилегии, различный доступ к регистрам и прочим ресурсам и имеют различный Контекст исполнения

Как работает ОС в штатном режиме?
Операционная система запускает приложения, передаёт им управление на определённое время, делит процессор между приложениями согласно их приоритетам, их потребностям, наличию фокуса на окне, прерыванием от оборудования или драйверов, забирает процессор, если есть процесс важнее или если есть ожидание чего-либо (чтение, запись диска, сеть и тыды).
Сама ОС и её драйвера, процессы, службы и прочее - работают в определённом Контексте исполнения, он частично меняется для каждого приложения, но не значительно.
ОС (её ядро), часть процессов и часть драйверов - работают на нулевом уровне, с максимальными привилегиями, могут писать\читать куски памяти, писать в любое место, могут читать большинство регистров и так далее.

С точки зрения ОС, что такое виртуальная машина?
Ничего. Ну то есть прям вот так, для ОС нет никакого процесса или представления, для ОС (хостовой ОС) виртуальной машины не существует.

А что есть? Ало?
Есть процесс - гипервизард (если чуть точнее - мониторинг виртуальной машины - VMM). В его задачи входит следить за контекстом исполнения, за прерываниями, забирать управление у гостевой или хостовой ОС. Менять контекст исполнения и возвращать всё назад.

И как это работает?
Такт первый, в комнате двое ОС и VMM.
ОС, вздыхая, присаживаясь на кушетку:
- Кажется я немного устала и дел на сегодня больше нет
VMM:
- Тогда пожалуй мне пора.
Выходит из комнаты с чайником
Такт второй, улица, фонарь, двое в тени.
VMM:
- Псс, слышь, процессор интересует?
Некто:
- О! И маска процессора мне нравится и вообще круто, только регистры что-то не вижу, где, позвольте VT-D?
VMM:
- Чё сказал? Брать будешь нет?
Некто:
- Да ладно, ладно, я ж только спросил, буду конечно, быть виртуалкой меня ещё поучи
Так третий. Заключительный
В комнате накуренно, разбросаны бутылки, пахнет жжёными тряпками. Где-то смеются.
Мужчина в трусах и с пультом от PS4 уставился в монитор. Дверь срывается с петель и падает на пол.
VMM врываясь:
- Всем выйти из сумрака! Это ночной дозор!

*переводя на компьютерные термины.
Для ОС VMM это процесс. ОС передаёт ему управление, как обычному процессу. Тот, меняет контекст исполнения (меняет все все регистры. Или почти все все регистры) и передаёт управление гостевой ОС, та выполняет какую-то свою работу (заведомо зная что она виртуализирована). Дальше гипервизард ставит гостевую ОС на паузу и возвращает всё назад. ПОсле этого хостовая ОС получает свой контекст исполнения и делает свою работу.
И так такт за тактом.
Поступило прерывание? Проверили кому оно, сменили контекст исполнения, доставили прерывание, почистили таблицы, вернули назад.
**на самом деле всё чуть сложнее. И с прерываниями, и с уровнями доступа, и с регистрами, и с оборудованием, и тыды, но это выходит за пределы вопроса (и мне лень).
***речь идёт про аппаратную виртуализацию.

Возвращаясь к вашему вопросу. Как вы хотите из хостовой системы увидеть, что творится в ОС гостя без "особого вмешательства"?

Смените тему диплома. ПОкопайте как работает виртуализация. Сама по себе это очень годная тема для изучения.
Ответ написан
athacker
@athacker
vShield Endpoint работает путём анализа файловых систем внутри гостевых ОС. То есть, он в состоянии разобрать гостевую ФС, понять, что там за каталоги и файлы и прочитать их содержимое. Операции внутри ОС ("что качал и что запускал") он контролировать и даже просматривать не в состоянии. По этой схеме максимум что вы можете делать -- это отслеживать изменения каких-то критичных файлов, таких как /etc/passwd или /boot/kernel. И при их изменении выдавать предупреждение.

И ещё большой вопрос -- какой набор гостевых ФС он поддерживает. NTFS/EXT3/EXT4 -- наверняка. А если внутри будет ZFS? XFS? BTRFS? Будет облом :-)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Хорошо, а если я под виртуалкой буду запускать net/freebsd, windows, dos, os/2 прости господи? Увы и ах, контролировать виртуалку можно только косвенными путями, если у нас нет полного представления что гость назапускал:
- по файловой системе и/или дисковому обмену, да и то, если гость не использует криптографию на диске;
- сетевому трафику, и опять же, если гость его не шифрует, или там tor не запускает.
- конечно же можно с помощью vd-x и vd-t смотреть содержимое регистров и памяти, отлавливать всякое I/O.
Но это же все начинает напоминать игру в ревресинжиниринг кода с получением ключей доступа к какому нибудь платному приложению. Вроде бы приложение и запущено у нас в системе, только ключей требует для совего запуска. Вроде бы как и наш компухтер, а не мы хозяева-то приложения. И дебагеры вроде как можем запускать и менять регистры всякие, только хрен там...
Что-то не нравится мне такая тема диплома...
PS. Я вот тут намедни запускал Windows NT4.0 SP3 в виртуалке. Запустилось, грустное это занятие, скажу я вам... Драйверов нет, проброс старых PCI-плат - ужас. Новые не работают, драйверов нет, да и ПО их не поддерживает. Сама NT еще та девочка с косичками из фильмов Хичкока...
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
Все это должно работать как минимум на ESXi и работать без агента на гостевой ОС
И как же вы узнаете о действиях пользователя в ОС, без агента в ОС?
Это невозможно.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега Информационная безопасность
//COPY01 EXEC PGM=IEBGENER
agentless мониторинг невозможен. Чтобы знать, что делается в виртуалке, нужно там иметь "своего человека", иначе Вы похожи на человека, который стоит перед закрытой дверью и пытается на основе шума за ней, а также подсчета входящих-выходящих людей понять, чем заняты в помещении...
Посмотрите советский фильм "Бармен из Золотого Якоря". Сам фильм посредственный. Но в нем есть идея - целая шпионская операция проворачивается ради установки агента (датчика)!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы