waqur: (Default)
[personal profile] waqur
Берклиевский пакетный фильтр (bpf) — это программа (фильтрующая машина), которая удовлетворяет следующим ограничениям:
1) Это программа для виртуальной машины с инструкциями фиксированного размера в трёхадресном коде
2) Ветвления разрешены, но только вперёд; таким образом вычислительная модель bpf не обладает Тьюринг-полнотой: в нет ней циклов и процедур, а время работы bpf-программы линейно зависит от её размера (в худшем случае)
3) Кроме переходов, bpf-программа может читать входной пакет (вектор байт), читать и писать в scratch memory фиксированного размера, выполнять арифметико-логические операции над 1-, 2- и 4-байтными беззнаковыми целыми
4) scratch memory обнуляется между вызовами bpf-программы
5) Результат работы программы — это булево значение (допуск или отклонение пакета)
6) bpf-программа может выполняться путём интерпретации на виртуальной машине или транслироваться в машинный код (JIT-компилироваться) и далее получать прямое управление в контексте ядра ОС
7) bpf-программа может выполняться "в железе" (FPGA), что имеет смысл в высокопроизводительных аппаратных файерволлах

Теоретически, мощность вычислительной модели bpf эквивалентна мощности регулярных языков; в практическом смысле она удобнее, т.к. можно писать императивный код и пользоваться перезаписываемыми переменными, а не городить несопровождаемые регэкспы вроде этого.

Основное назначение bpf — фильтрация сетевых пакетов в файерволлах BSD-систем и Linux.

В новом ядре Linux версии 3.5 также добавили режим песочницы для приложений, где фильтрация вызовов ядра происходит с помощью разновидности bpf. Довольно интересное обобщение, так как существующая в BSD-системах реализация песочницы capsicum, считавшаяся до сего дня наиболее мощной, может быть реализована как частный случай Seccomp Filters. Другой частный случай — это предыдущая версия Seccomp, которая допускала только exit, sigreturn, read и write на уже открытых файловых дескрипторах. Kernel Capabilities в их нынешнем линуксовом виде, в принципе, тоже уже не нужны (точнее, они могут мутировать в bpf-фильтры, быть выдавлены в юзерспейс и обобщены — это третий частный случай).
Linux 3.5 Release Summary
Linux Kernel Documentation: Secure Computing with filters
Судя по копирайтам в исходном коде, эту замечательную фишку запилили разработчики Chromium OS из Гугла.

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Автор стиля

Развернуть

No cut tags
Page generated 2026-03-07 10:40 pm
Powered by Dreamwidth Studios