Существуют ли концепции «песочницы» для проприетарных бинарных модулей ядра в Linux?

Давайте сделаем это в Perl:

perl -e '
use POSIX "strftime";

$start=$ARGV[0];
$end=$ARGV[1];
if(! ($start =~ /^(\d\d\d\d)(\d\d)(\d\d)$/)){
  die "bad format for first arg";
}
$epoch=(($1-1970)*365+($2-1)*28+$3-1)*24*60*60;
if(! ($end =~ /^(\d\d\d\d)(\d\d)(\d\d)$/)){
  die "bad format for first arg";
}

while(1){
  $cur=strftime("%Y%m%d", gmtime $epoch);
  if($cur ge $start){last;};
  $epoch += 24*60*60;
}

while(1){
  $wd = strftime("%u", gmtime $epoch);
  $cur = strftime("%Y%m%d", gmtime $epoch);
  if($cur >= $end){last;}
  if($wd == 6){
    printf "$cur\n";
  }
  $epoch += 24*60*60;
}' 20170101 20170630
1
27.02.2016, 09:36
2 ответа

Да, для проприетарных драйверов существует концепция "песочницы". Это называется пользовательскими драйверами.

Если вы запускаете код внутри ядра, он имеет доступ ко всему, поэтому его невозможно изолировать. (Невозможно в отношении системы Linux - эта система могла бы работать на виртуальной машине, а затем виртуальная машина выполняла бы «песочницу».)

Драйверы Userland возможны для некоторых видов периферийных устройств. Например, некоторые периферийные USB-устройства могут управляться из пользовательской среды через libusb и usbfs . Файловые системы могут быть реализованы в пользовательском пространстве через FUSE .

Учитывая, что вредоносный драйвер для периферийного устройства обычно может использовать свой доступ к периферийному устройству для доступа к остальной части системы (например, путем настройки периферийного устройства для DMA и, таким образом, доступа к произвольной памяти), нет Нет смысла пытаться изолировать драйвер.Если вы не доверяете водителю, не используйте его.

Можно выполнить некоторую песочницу, запустив драйвер внутри виртуальной машины и настроив гипервизор, чтобы разрешить виртуальной машине доступ только к определенному периферийному устройству. Это полезно только в том случае, если само периферийное устройство имеет доступ только к определенной части памяти, что можно сделать с помощью IOMMU (конечно, IOMMU должен оставаться под контролем гипервизора). Не все системы поддерживают такую ​​песочницу - опять же, если вы не доверяете периферийным устройствам, зачем они вам нужны на вашем компьютере?

3
27.01.2020, 23:20

Я думаю, что это возможно, и процессоры предоставляют некоторую поддержку для ограничения доступа к части кодов ядра.

Но есть две трудности: проприетарные модули ядра программируются производителями оборудования, поэтому, даже если ядро ​​может ограничивать доступ к определенным адресам, аппаратная сторона может иметь неограниченный доступ.

Вторая трудность: я сомневаюсь, что разработчики ядра будут реализовывать такой план: неявное правило ядра Linux гласит: «Не любите людей с закрытым кодом», и такой план сделает их задачи проще / более приемлемыми.

1
27.01.2020, 23:20

Теги

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