Какие встроенные инструменты используются в приложениях, подобных Little Snitch?

Little Snitch — известная программа, которая позволяет пользователям Mac блокировать исходящие соединения из определенного приложения.

Теперь, всякий раз, когда я спрашиваю, как сделать то же самое со встроенными инструментами OS X, я получаю ответ типа: "Вы не можете сделать это без Little Snitch. Встроенный брандмауэр PF не является брандмауэром приложений, а встроенный -in AF может блокировать только входящий трафик. Ни один инструмент OS X не позволяет этого».

Это не может быть правдой. Я имею в виду, как в этом случае Little Snitch, или Hands Off!, или небольшие приложения, такие как RadioSilence , добились бы этого? Сами эти приложения, безусловно, должны использовать какие-то встроенные инструменты для блокировки трафика для каждого приложения. Я искал альтернативы с открытым исходным кодом с идеей взглянуть на их источники и узнать, «как они это делают». Но... Я не нашел альтернативы с открытым исходным кодом. Есть идеи?

Ответы (1)

Little Snitch использует расширение сетевого ядра для перехвата сетевого трафика.

NKE позволяют создавать модули, которые можно динамически загружать и выгружать в определенных позициях в сетевой иерархии. Эти модули могут отслеживать и изменять сетевой трафик , а также получать уведомления об асинхронных событиях от уровня драйвера, например об изменении статуса интерфейса.

Каждый из сетевых механизмов KPI выполняет определенную задачу. Основные сетевые механизмы KPI:

  • KPI фильтра сокетов, который позволяет KEXT фильтровать входящий или исходящий трафик для данного сокета в зависимости от того, как они подключены. Фильтры сокетов также могут фильтровать внеполосную связь, такую ​​как вызовы setsockopt или bind. Результирующие фильтры лежат между уровнем сокетов и протоколом.
  • KPI фильтра интерфейса, который позволяет KEXT добавлять фильтр к определенному сетевому интерфейсу . Эти интерфейсные фильтры (ранее известные как NKE канала передачи данных) могут пассивно наблюдать за трафиком (независимо от типа пакета), когда он поступает в систему и выходит из нее. Они также могут изменять трафик (например, шифруя или выполняя преобразование адресов). По сути, они действуют как фильтры между стеком протоколов и устройством.

Как вы упомянули, существуют альтернативы расширениям сетевого ядра, но только для определенных случаев использования.

Поскольку даже незначительные ошибки в коде уровня ядра могут привести к серьезным последствиям, включая нестабильность приложения, повреждение данных и даже панику ядра, методы, описанные в этом документе, следует использовать только в том случае, если не существует другого механизма. Например, по возможности IP-фильтрация должна выполняться с использованием файловipfw . Точно так же регистрация пакетов обычно должна выполняться с использованиемbpf .

Расширения сетевого ядра намного мощнее и позволяют осуществлять более детальный контроль.

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