Песочница для проверки вирусов
В таких ситуациях отличную службу могут сыграть программы-песочницы, которым посвящен этот обзор. Принцип работы песочниц отчасти сопоставим с виртуальными машинами (Oracle VM VirtualBox и др., VMware Virtualization). Благодаря виртуализации, все процессы, инициированные программой, выполняются в песочнице — изолированной среде с жестким контролем системных ресурсов.
Данный способ изоляции кода достаточно активно применяется в антивирусном ПО (KIS 2013, avast!), в программах, таких как Google Chrome (в песочнице работает Flash). Не следует, однако, делать вывод, что программы-песочницы являются полной гарантией безопасности. Это всего лишь одно из эффективных дополнительных средств по защите ОС (файловой системы, реестра) от внешних воздействий.
Разработчик Ronen Tzur сравнивает действие программы Sandboxie с невидимым слоем, нанесенным поверх бумаги: на него можно наносить любые надписи; при снятии защиты, лист останется нетронутым.
Можно выделить 4 основных способа применения песочниц в Sandboxie:
- Защищенный интернет-серфинг
- Улучшение приватности
- Безопасная email-переписка
- Сохранение ОС в первоначальном состоянии
Последний пункт подразумевает, что в песочнице можно устанавливать и запускать любые клиентские приложения — браузеры, IM-мессенджеры, игры — без воздействия на систему. Sandboxie контролирует доступ к файлам, дисковым устройствам, ключам реестра, процессам, драйверам, портам и другим потенциально незащищенным источникам.
Прежде всего, SandboxIE полезна тем, что позволяет пользователю гибко настраивать песочницы и привилегии с помощью оболочки Sandboxie Control. Здесь, через контекстное и главного меню, доступны основные операции:
- Запуск и остановка программ под контролем Sandboxie
- Просмотр файлов внутри песочницы
- Восстановление нужных файлов из песочницы
- Удаление всех результатов работы или выборочных файлов
- Создание, удаление и настройка песочниц
Для запуска программы в песочнице достаточно перетянуть исполнимый файл в окно Sandboxie Control, в созданную по умолчанию песочницу. Есть и другие способы — например, меню Проводника Windows или область уведомлений. Окно программы, запущенной в эмулированной среде, будет заключено в желтую рамку, а в заголовке указана решетка (#).
Таким образом, можно создавать песочницы с различными параметрами. Разрешается клонировать конфигурацию уже имеющейся песочницы, для этого, при создании новой, из выпадающего списка нужно выбрать ту среду, из которой требуется перенести настройки.
С помощью приложения Sandboxie можно создавать виртуальные среды любых конфигураций, без ограничений для пользователя. Sandboxie предоставляет большое количество настроек как для отдельных приложений, так и для песочниц.
[+] Гибкая настройка каждой песочницы
[+] Создание правил для группы программ
[−] Нельзя создавать дистрибутивы
[−] Отсутствие мастера настройки
Символично, что Evalaze берет свое начало от программы Thinstall 2007, на данный момент принадлежащей компании VMware.
Evalaze не столь известна, как Sandboxie, среди программ для работы с песочницами, однако имеет ряд интересных особенностей, выделяющей ее из ряда подобных решений. Благодаря виртуализации, приложения можно запускать в автономной среде с любого компьютера, вне зависимости от наличия драйверов, библиотек, более новых версий запускаемого приложения. При этом не требуется ни предварительная настройка, ни дополнительные конфигурационные файлы или библиотеки или ключи реестра.
На странице Compatibility опубликован список приложений, протестированных на совместимость с различными ОС и версиями Evalaze. Например, такие программы, как Adobe Reader, AutoCAD, Google Earth, Outlook, Skype нельзя виртуализировать, в то же время, как большинство приложений из обширного списка полноценно работают с Evalaze.
В главном окне Evalaze доступен мастер создания проекта (Start Wizard). На первом этапе указывается имя и расположение файлов для работы в песочнице. Перед установкой нового приложения Evalaze создает снимок файловой системы и реестра. В PRO-версии можно выбрать глубину сканирования, в бесплатной данной опции нет.
Пользователь может выбрать один из трех способов изоляции новоявленного приложения — WriteCopy, Merge-Mode или Full. Для системных утилит, помещенных в песочницу, рекомендуется режим Write Copy, при котором запросы доступа для чтения передаются в песочницу, и все изменения производятся с копией реальных данных (подробнее см. здесь).
Полученная конфигурация может быть сохранена в проект. От начала и до конца процесс настройки виртуального приложения занимает больше времени, чем, скажем, в Sandboxie, однако он более последователен и понятен.
Следует отметить две дополнительные возможности Evalaze, которые, вероятно, заинтересуют разработчиков ПО, тестировщиков: это работа с виртуальной файловой системой и виртуальным реестром. Данные автономные среды Evalaze можно редактировать на свое усмотрение, добавляя файлы, директории, ключи, необходимые для функционирования той или иной виртуальной программы.
Программа, с помощью которой можно создавать автономные приложения, которые удобно использовать во всевозможных ситуациях, что в целом облегчает миграцию, совместимость, безопасность. Увы, бесплатная версия практически бесполезна, она интересна только для очень поверхностного изучения функций Evalaze.
[−] Малофункциональная ознакомительная версия
[−] Высокая цена Pro-версии
[+] Присутствует мастер настройки
[+] Виртуальные файловая система и реестр
Программа Enigma Virtual Box предназначена для запуска приложений в изолированной виртуальной среде. Список поддерживаемых форматов включает в себя dll, ocx (библиотеки), avi, mp3 (мультимедиа), txt, doc (документы) и др.
Enigma Virtual Box моделирует виртуальную среду вокруг приложения следующим образом. Перед запуском приложения срабатывает загрузчик Virtual Box, который считывает информацию, которая необходима для работы программы: библиотеки и другие компоненты — и предоставляет их приложению вместо системных. В результате программа работает автономно по отношению к ОС.
На конфигурацию песочниц Sandboxie или Evalaze, как правило, уходит минут 5. На первый взгляд, в Virtual Box также не предполагается длительная настройка. В документации использование программы вмещается фактически в одно предложение.
Таким образом, в Enigma Virtual Box нет анализа ОС до установки приложения и после, как в случае с Evalaze. Акцент смещен в сторону разработки — поэтому, скорее, Virtual Box полезен для тестирования, проверки совместимости, создания искусственных условий для запуска программы. Виртуализация неизвестных приложений вызовет затруднения, поскольку пользователь будет вынужден самостоятельно указывать все связи программы самостоятельно.
[−] Отсутствие удобной настройки
[+] Используемые программой ресурсы можно определить самостоятельно
Этапы создания виртуального приложения схожи с Enigma Virtual Box: вначале создается снимок системы перед установкой, затем после нее. Изменения между этими состояниями учитываются при создании песочницы. Однако, в отличие от Virtual Box, Cameyo синхронизируется с удаленным сервером и публикует приложение в облачном хранилище. Благодаря этому, приложения можно запускать на любом компьютере с предоставленным доступом к аккаунту.
Через библиотеку (Library) можно скачать для последующего запуска популярные системные приложения (Public Virtual Apps): архиваторы, браузеры, проигрыватели и даже антивирусы. При запуске предлагается выбрать исполнимый файл и указать, стабильно он работает или нет (что, видимо, как-то учитывается модераторами галереи Cameyo).
Еще одна интересная возможность — создание виртуального приложения через веб-интерфейс. Установщик можно загрузить с компьютера либо указать URL файла.
Процесс конвертации, по заявлениям, занимает от 10 до 20 минут, но часто время ожидания меньше в несколько раз. По окончании, на email приходит уведомление со ссылкой на опубликованный пакет.
При всех облачных удобствах нужно отметить два важных момента. Первый: каждая программа время ко времени обновляется, а в библиотеке присутствуют достаточно устаревшие экземпляры. Второй аспект: приложения, добавленные пользователями, может идти вразрез с лицензией отдельно взятой программы. Необходимо это понимать и учитывать при создании пользовательских дистрибутивов. И третье — никто не даст гарантии, что виртуальное приложение, выложенное в галерею, не модифицировано злоумышленником.
Впрочем, говоря о безопасности, в Cameyo есть 4 режима работы приложения:
- Data mode: программа может сохранять файлы в папке Документы и на Рабочем столе
- Isolated: возможность записи в файловой системе и реестре отсутствует
- Full access: свободный доступ к файловой системе и реестру
- Customize this app: модификация меню для запуска, выбор места хранения программы и др.
Удобный облачный сервис, к которому можно подключиться на любом компьютере, позволяющий быстро создавать портативные приложения. Настройка песочниц сведена к минимуму, не все прозрачно с проверкой на вирусы и безопасностью в целом — однако в данной ситуации достоинства способны компенсировать недостатки.
[+] Сетевая синхронизация
[+] Доступ к пользовательским приложениям
[+] Создание виртуальных приложений онлайн
[−] Отсутствие настройки песочниц
Четыре возможности, привносимые виджетом:
- Создание песочниц для файлов и приложений
- Наведение порядка на Рабочем столе посредством ярлыков, меню быстрого запуска
- Безопасное тестирование новых приложений, запуск устаревших версий поверх новых
- Отмена изменений, произведенных песочницей
Очень удобна организация десктопа: на виртуальный Рабочий стол можно перетянуть нужные файлы, которые будут синхронизироваться со spool.net. Новые песочницы можно создавать буквально двумя кликами.
[+] Интеграция виджета с Рабочим столом
[+] Быстрое создание песочниц
[−] Отсутствие настроек по ограничению виртуальных программ
Sandboxie – отличный инструмент, который заслуживает место в любой коллекции программ безопасности. Он создает изолированное пространство или песочницу в которой вы можете исполнять файлы без ущерба для основной системы.
Действия, выполняемые в песочнице, не влияют на систему Windows и другие файлы и программы. Все что произошло в Sandboxie, остается в Sandboxie.
Собственник Sandboxie менялся несколько раз. Сначала компания Invincea выкупила программу у первого разработчика, а затем она была в свою очередь приобретена Sophos. Недавно компания Sophos объявила, что программу Sandboxie можно использовать бесплатно, а в будущем планируется раскрытие исходного кода.
В данной статье разберемся, как использовать программу Sandboxie для безопасного посещения Интернета, загрузки файлов и их восстановления, а также для установки и запуска программ.
Чтобы приступить к использованию программы даже не нужно отдельно знакомиться с интерфейсом. Новичкам рекомендуется пользоваться иконкой в системном трее.
Любую программу, установленную в Windows, можно запустить внутри Sandboxie. Это касается в том числе портативным приложений и обычных файлов (которые открываются в других программах). Некоторые приложения могут не работать в Sandboxie, если вы пытаетесь установить их в песочницу.
Если вы установили Sandboxie, то вы увидите иконку программы на рабочем столе, в меню Пуск и в системном трее. Вы можете использовать любой из данных вариантов для запуска программ в песочнице. Чаще всего в изолированной среде запускают браузер. Кликните по иконки в системном трее и выберите Default box > Запустить Web-браузер. Будет запущен браузер по умолчанию. Это может быть Firefox, Chrome, Edge или любой другой браузер, который вы выбрали.
Запущенный браузер будет иметь желтую рамку (показывается при наведении курсора на границу окна). Кроме того, заголовок окна программы будет заключен в два символа [#], например [#] . Google Chrome [#]. Это индикаторы того, что программа работает внутри Sandboxie.
Вы можете использовать изолированный браузер в обычном режиме. Вы сможете отправлять электронные письма, проверять социальные сети и посещать Comss.one.
Одно из основных отличий заключается в том, что в случае заражения браузера вредоносным ПО, его действие ограничиться песочницей. Например, вы посетили сайт с вредоносной рекламой. Пока браузер будет работать, угроза не сможет распространиться на основную систему из-за использования песочницы. Песочница также ограничивает возможности отслеживания файлов cookie и другие нежелательные действия.
Вы можете использовать опцию Default box > Удалить содержимое, чтобы удалить всю песочницу и начать новый сеанс. Рекомендуется время от времени выполнять данную процедуру.
Примечание: песочница не обеспечивает анонимный серфинг, который вы получаете при использовании VPN или Tor.
Вы также можете открывать ссылки из любого приложения (почтового приложения, мессенджера и др.) в браузере в песочнице, хотя для этого вам нужно будет изменить настройки программы.
Вам нужно восстановить загрузку. Для этого выберите Default box > Быстрое восстановление. Используйте параметр Восстановить в ту же папку, чтобы файл появился в папке загрузок (и был готов к использованию в среде без песочницы). Вы также можете запустить файл сначала в песочнице, отложив его восстановление.
Если доступных объектов для восстановления нет вы можете выбрать опцию Default box > Просмотреть содержимое (которая открывает Проводник), чтобы вручную исследовать песочницу и восстановить содержимое. Данная функция особо актуальна, если вы используете пользовательскую папку загрузки вместо папки по умолчанию Windows.
Запуская подозрительную программу в Sandboxie, вы исключаете риски повреждения вашей основной системы. В песочнице можно запускать даже вредоносные программы, но обычно для этого все же используют виртуальные среды.
В случае с портативными приложениями, извлеките содержимое в папку drive в DefaultBox (Default box > Просмотреть содержимое) и запустите исполняемый файл. Чтобы выполнить установку программы в защищенной среде Sandboxie, откройте Проводник и щелкните правой кнопкой мыши по файлу установщика.
Выберите опцию Запустить в песочнице.
Примечание. При необходимости вы можете предоставить права администратора для установщика, поставив галочку для Запустить как UAC Administrator.
Вы увидите желтую рамку у окна установщика и знакомые нам символы [#] в названии. Это значит, что установка программы выполняется в песочнице.
Запустить установленную программу нужно вручную из папки Defaultbox.
В практике исследования исполняемых файлов с возможным вредоносным функционалом имеется богатый арсенал инструментария — от статического анализа с дизассемблированием до динамического анализа с отладчиками. В настоящем обзоре я не буду пытаться дать информацию по всем возможным приёмам, поскольку они требуют некоторых специфических знаний, однако я хотел бы вооружить неискушённого пользователя набором приёмов, которые позволяют довольно быстро провести анализ неизвестного файла.
Итак, ситуация: у нас есть странный файл с подозрением на вредоносность, при этом существующий мультисканеры типа VirusTotal не дают никакой информации. Что же делать?
ОНЛАЙН-ПЕСОЧНИЦЫ
В сети имеется ряд проектов по информационной безопасности, реализующий свои решения в качестве отдельно работающих виртуализированных систем для исполнения кода с последующим анализом произведённых изменений. Как правило, у этих проектов имеются онлайн-версии таких систем с бесплатным использованием. Вы можете благополучно загрузить подозрительный файл и через некоторое время получить полную информацию о том, что он делает, будучи запущен в системе.
ThreatExpert
Система ThreatExpert осуществляет сравнение снимков системы до и после запуска, а также перехват некоторых API в ходе выполнения кода. В результате, Вы получаете отчёт со следующей информацией:
• Какие новые процессы, файлы, ключи реестра и мутексы были созданы в ходе выполнения кода.
• C какими хостами и IP проводилось соединение, также приводятся шестнадцатеричные и ASCII-дампы данных обмена.
• Имеется ли детект популярных антивирусов на присланный файл и файлы, созданные в ходе выполнения.
• Какова возможная страна происхождения кода на основании языковых ресурсов и прочих следов, найденных в коде.
• Возможная категория угрозы (кейлоггер, бэкдор и т.д.) и её уровень.
• Скриншоты новых окон, если таковые были отображены в ходе выполнения.
CWSandbox — разработка University of Mannheim, которые продают эту систему. Однако, анализ можно провести в онлайн бесплатно.
Особенностью этой песочницы является то, что анализ выполняется в результате инжектирования библиотеки песочницы в исполняемый код и перехвата всех API-вызовов. Понятно, что если выполняется вызов нативных API либо работа в режиме ядра, песочница не работает. Тем не менее, благодаря тому, что проводится анализ реально работающего файла, CWSandbox иногда даёт большую информпцию, чем все остальные.
Бесплатная онлайн версия имеет ряд ограничений, по сравнению с коммерческой:
• Возможен анализ только РЕ-файлов. Платная версия позволяет анализировать BHO, zip-архивы, документы Microsoft Office.
• В бесплатной версии возможна только загрузка через веб-интерфейс. В платной возможен прим файлов на анализ по почте, через honeypot и др.
• В платной версии возможен выбор проведения анализ в виртуальной среде или на реальной системе.
• Коммерческая версия включает в себя анализ файлов, скачиваемых в ходе выполнения кода, созданный в системных папках или инжектированных в другие процессы.
Anubis
Anubis — один из самый распространённых вариантов песочницы, ставший популярный благодаря исчерпывающему содержанию отчётов и скорости ответа. Некоторые особенности этой системы:
Joebox
И наконец — он. Joebox, Великий и Ужасный. Будучи результатом трудов Стэфана Бульманна, на мой взгляд Joebox — самая мощная система для анализа. Особенностью этой системы является то, что она единственная осуществляет перехваты SSDT и EAT ядра в ходе анализа файлов. С одной стороны, это приводит к потере небольшого количества информации вызовов верхнего уровня (например, создание новых процессов посредством ShellExecute или WinExec), однако с другой стороны позволяет изучать вредоносные файлы, работающие с нативными API или в режиме ядра. Кроме того, Joebox предоставляет следующие возможности в анализе:
• Joebox поддерживает загрузку и изучение поведения исполняемых файлов, DLL, драйверов ядра, документов Microsoft Word, PDF-файлов и др.
• Вы можете выбрать среду выполнения кода:Windows XP, Windows Vista, или Windows 7.
• Вы можете выбрать выполнение кода в виртуальной среде либо на реальной системе (в последнем случае реализуется решение на базе FOG)
• Возможно получение полного дампа сетевого трафика, накопленного в ходе анализа.
• Имеется поддержка модулей популярных песочниц amun и nepenthes для автоматической загрузки новых образцов из песочниц в Joebox.
• Имеется поддержка скриптов AutoIT19 для организации контролируемой среды выполнения вредоносных файлов в Joebox.
Особенную важность, на мой взгляд, имеет именно поддержка скриптового языка. На сайте проекта имеется описание возможных функций и их толкование, укажу только на наиболее популярные.
Точно так же можно анализировать BHO — достаточно прописать нужные ключи в реестр. Однако часто возникает проблема: AppInit_DLLs справедлив только для вновь созданных процессов, как быть, если инжект нужно сделать в explorer.exe? Для этого подойдёт следующий скрипт:
Script
Func KillProcess($process)
Local $hproc
Local $pid = ProcessExists($process)
If $pid = 0 Then
Return
EndIf
$hproc = DllCall(
“kernel32.dll”, “hwnd”, “OpenProcess”,
“dword”, BitOR(0x0400,0x0004,0x0001),
“int”, 0, “dword”, $pid)
If UBound($hproc) > 0 Then
If $hproc[0] = 0 Then Return
Else
Return
EndIf
$hproc = $hproc[0]
Local $code = DllStructCreate(“dword”)
$ret = DllCall(
“kernel32.dll”, “int”, “TerminateProcess”,
“hwnd”, $hproc, “uint”, DllStructGetData($code,1))
Return
EndFunc
_JBSetSystem(“xp”)
_JBStartAnalysis()
_JBStartSniffer()
$NewFile = @SystemDir & “/” & “malware.dll”
FileCopy(“c:\malware.dll”, $NewFile, 1)
RegWrite(
“HKLM\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows”,
“AppInit_DLLs”, “REG_SZ”, “malware.dll”)
KillProcess(“explorer.exe”)
; убиваем процесс, который автоматически будет перезапущен winlogon.exe
Sleep(10000)
_JBStopSniffer()
_JBStopAnalysis()
EndScript
3. Если необходимо, чтобы обращение в сеть происходило из определённой страны, можно сконфигурировать прокси в выполняемой среде Joebox:
Script
_JBSetSystem(“xp”)
_JBStartAnalysis()
_JBStartSniffer()
$ProxyServer = “1.2.3.4:8080”
; определяем нашу проксю
RegWrite(
“HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings”,
“ProxyServer”, “REG_SZ”, $ProxyServer)
RegWrite(
“HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings”,
“ProxyEnable”, “REG_DWORD”, 1)
; и включаем её в настройках
_JBLoadProvidedBin()
Sleep(10000)
_JBStopSniffer()
_JBStopAnalysis()
Безусловно, наличие такой гибкости и богатства возможностей делает Joebox одним из самых востребованных песочниц — и в этом его худшая сторона. Мне приходилось ждать иногда по несколько дней, пока придёт результат анализа. Что же, авторы предлагают купить свою собственную копию этой замечательной песочницы, но довольно за дорого. Как же построить свою собственную систему для анализа файлов без особенных затрат — об этом будет в следующей статье, если, конечно, Хабраобщество одобрит этот опус и у меня окончательно не растает карма ;)
P.S. Примеры других онлайн-песочниц:
Спасибо ahtox74 за напоминание.
UPD: Joebox ввели обязательную регистрацию: если Вы хотите бесплатно пользоваться услугами этой онлайн-песочницы, то отправьте на адрес [email protected] электронное письмо со следующей информацией на английском языке:
1. Ваше имя
2. Цель регистрации и краткое описание, что Вы будете исследовать на Joebox
3. Электронная почта для отправки отчётов об исследовании (она впредь будет указываться в первом поле Вашего запроса).
После подачи заявки обещают, что откроют доступ для указанного ящика.
В основе работы почти всех применяемых сегодня песочниц для изоляции приложений, будь то песочницы Firejail, песочницы iOS, Android или даже системы Docker, лежит один простой принцип: запереть приложение в его каталоге и отрезать ему доступ к информации об остальной части системы и ее API. Как это реализуется — с помощью chroot, пространств имен и seccomp-bpf, как в большинстве песочниц Linux, или с помощью запуска каждого приложения с правaми созданного специально для него юзера и своей собственной системы ограничения прав, как в Android, — неважно. А важно то, что в каждом из этих случаев за изоляцию приложений отвечает ядро ОС, общее для всех них.
Благодаря использованию встроенных в ядро механизмов изоляции такие песочницы очень дешевы в создании и обслуживании, они не приводят к существенному увеличению расхода оперативной памяти, не съедают место на диске и вообще отличаются высокой эффективностью. Однако платить, как известно, приходится за все, и в данном случае расплата бьет по тому самому месту, которое песочницы и призваны охранять, — безопасности основной системы.
Запуская софт в пeсочнице, мы рассчитываем оградить его от других песочниц и операционной системы, просто для того, чтобы взлом этой софтины или наличие в ней малвари не привели к компрометации всех остальных данных. И в большинстве случаев это работает, но ровно до тех пор, пока взломщик не найдет способ из нее выбраться. А способ этот в грамотно спроектированной песочнице обычно один — уязвимость в ядре ОС. Почти вся малвaрь для Android, способная получить права root, и большинство джейлбрейков iOS эксплуатируют дыры в ядре. А ядро настольного Linux почти ничем не отличается от ядра того же Android. И дыры в нем находят хоть и чуть реже (благодаря меньшему количеству блобов от производителей железа), но регулярно.
Разработчикам песочниц и операционных систем, запускающих софт в песочницах, это хорошо известно, как и последствия. Поэтому Apple и Google, все операционки которых используют идею песочниц, борются с этой угрозой при помощи апдейтов: появилась информация о дыре — быстро ее исправляем и выкатываем обновление. У Apple это получается хорошо, у Google плoхо, но в любом случае, если информации о дыре нет, не будет исправления. И если на твоем смартфоне оно не так уж и важно, то в Linux-системе, где хранится твой Bitcoin-кошелек и куча другой конфиденциальной информации, взлом системы через запущенный в песочнице браузер может привести к очень печальным последствиям.
Один из способов борьбы с 0day-уязвимостями в ядре — виртуальная машина, такая как VirtualBox, QEMU или Parallels. Запускаем небезопасное приложение внутри виртуальной машины вместо классической песочницы, и вуаля — взлом самого приложения и возможный взлом ядра никак не затрагивают основную ОС. В таком подходе уязвимым местом оказывается не ядро, а гипервизор и код, эмулирующий различные железные подсистемы: сетевую карту, USB- и SATA-контроллеры. И еcли посмотреть на статистику уязвимостей того же VirtualBox, то становится ясно, что в целом критических уязвимостей здeсь намного меньше, чем, например, в ядре Linux. Но что более интереcно: почти все из них находят именно в коде эмуляции железа.
И здесь мы подходим к самoму интересному вопросу: а можно ли создать настолько простую виртуальную машину (в идеале вообще без кода эмуляции железа), чтобы она была практически неуязвима, но тем не менее способна запускать стандартный пользовательский софт?
Несмотря на то что Cappsule использует в своей работе механизмы виртуализации Intel VT-x и EPT, назвать ее полноценной виртуальнoй машиной крайне сложно. Это система изоляции, построенная на технологиях виртуализации. Она использует простой и компактный гипервизор (всего 15 тысяч строк кода), позволяющий запустить копию ядра Linux основной ОС и выбранное приложение внутри виртуального окружения с полной интеграцией приложения в текущий графический интерфейс.
Cappsule не эмулирует железо и не оперирует полноценными виртуальными машинами с собственным ядром, виртуальными дисками, сетевой картой и другими кoмпонентами обычного ПК, как это делает VirtualBox или QEMU. Она действует намного хитрее: сразу после своей загрузки загружает в ядро текущей ОС модуль с гипервизором и отдает ему управление. Гипервизор в свою очередь создает новое виртуальное окружение и размещает внутри него текущую ОС. Этот метод называется Blue Pill (он был описан Йоанной Рутковской в 2006 году) и нужен для того, чтобы получить контроль над исполнением текущей ОС.
После этого гипервизор Cappsule останавливает исполнение ядра ОС, переводит в офлайн все ядра процессора, кроме текущего, делает снимок пaмяти, занимаемой ядром ОС, затем возвращает ядру управление. Позднее, получив запрос на запуск приложения в песочнице, гипервизор создает еще одно виртуальное окружение с копией памяти ядра, запускает в нем несколько служебных процессов и указанное приложение.
Для приложения такая виртуальнaя система выглядит настоящей. Оно может работать с файловой системой, выполнять сетевые запросы, выводить на экран картинку и выполнять системные вызовы ядра. Но так как Cappsule не эмулирует железные компоненты классической виртуальной машины и не предоставляет доступ к реальному железу (фактически запрещены любые операции ввода-вывода), для того чтобы дать приложению возможность доступа к файловой системе, сетевому адаптеру и GUI-подсистеме, Cappsule запускает внутри виртуального окружения три специальных процесса:
Fsclient для проброса файловой системы (точнeе, иерархии) основной системы внутрь виртуальной. Fsclient имеет клиент-серверную архитектуру и общается с демоном fsserver, запущенным в хост-системе. При доступе к тому или иному файлу fsclient отправляет запрос fsserver, а тот в ответ выдает результат запроса или ошибку доступа, если доступ к этому файлу запрещен в настройках. Естественно, виртуальное окружение может выполнять запись файлов, поэтому, чтобы не скомпрометировать хост-систему, fsserver модифицирует файлы в режиме copy-on-write (для этого он использует технологию OverlayFS ядра Linux, ту же, на которой построена система слоев в Docker). Другими словами, все модификации файлов из виртуального окружения будут уникальны только для этого виртуального окружения; изменить файлы напрямую оно не может.
Netclient для проброса внутрь виртуального окружения сетевого интеpфейса. В этом случае используется схожая схема: netclient создает внутри виртуального окружения сетевой интеpфейс tun0, все операции чтения и записи в который отправляются демону netserver, работающему в хоcт-системе. С помощью настроек брандмауэра netserver перенаправляeт эти данные на реальный физический сетевой интерфейс машины, опять же консультируясь с настройками.
Guiclient для доступа приложения к графической подсистеме хоста. Принцип работы примерно тот же. Guiclient запускает внутри окружения виртуальный X-сервер, запросы к которому перенаправляются в guiserver на хост-системе, а тот, в свою очередь, перенаправляет эти запpосы настоящему X-серверу. Guiclient создан на базе графической подсистемы операционной системы Qubes OS и так же, как последняя, позволяет бесшовно вписать окно запущенного внутри песочницы приложения в графический интерфейс хост-системы.
Читайте также: