Блокировать доступ приложения к сети через API-интерфейс Cocoa (API LittleSnitch)? - PullRequest
11 голосов
/ 09 июля 2009

Я использую OS X 10.5 и ищу способ определить, пытается ли приложение получить доступ к Интернету. На этом этапе я хотел бы заблокировать приложение, если оно соответствует набору правил, которые я определю.

Существует команда Unix ipfw , которую, как я понимаю, можно использовать для блокировки доступа к определенным портам, но она влияет на ВСЕ приложения. Я прочитал справочные страницы и не нашел способа использовать ipfw для блокировки доступа, но ограничил его приложением * .

Моя основная проблема заключается в том, чтобы определить, какое приложение пытается получить внешний доступ к сети. Программно должен быть способ сделать это, может ли это быть достигнуто с помощью какого-либо API-интерфейса Mac OS X или команды Unix?

Обновление: По сути, я хочу делать то, что делает Little Snitch, но я хочу написать это с нуля, потому что мне не нравится Little Snitch. Мне просто нужно знать, какие API могут позволить мне выполнять изолированную программную среду приложений и как именно Little Snitch делает это?

Ответы [ 5 ]

10 голосов
/ 17 августа 2010

Я понимаю, что это год с опозданием, но я искал что-то подобное и наткнулся на то, что я думаю, что ответ. Надеюсь, это может помочь кому-то еще.

Little Snitch использует Расширения сетевого ядра для фильтрации трафика, поступающего в систему. Я проверил это, обнаружив, что на коробке установлено расширение ядра:

[~] kextstat
...
55 0 0x687000 0x2b000 0x2a000 at.obdev.nke.LittleSnitch (2.0.46) <7 6 5 4 2>
...

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

2 голосов
/ 09 июля 2009

Если вы ориентируетесь на OS X 10.5 (Leopard), вы можете использовать API песочницы. sandbox_init , вероятно, хорошее место для начала; Вы можете использовать опцию kSBXProfileNoInternet, чтобы остановить доступ в Интернет.

Здесь также есть более подробная статья здесь , в которой приведены некоторые примеры более тонкой настройки с использованием расширений Ремень безопасности .

1 голос
/ 25 января 2011

Нет способа, которым пользовательский процесс сможет сделать то, что вы описываете. Я полагаю, даже не процессы, выполняющиеся от имени пользователя root. Помните: у нас не работает Windows. И даже если это так, вы, вероятно, не должны ожидать, что Какао поддержит его. Какао предназначено для простого в использовании графического интерфейса Mac OS X. Не для низкоуровневой разработки системы.

Единственный способ выполнить то, что вы описываете, - это расширить ядро, что делает Little Snitch. Если бы был какой-то другой умный способ, уверяю вас, Маленький Снитч сделал бы это по-другому. Расширения ядра не для слабонервных. При падении расширения ядра вся система падает . Так что тебе лучше знать, что ты делаешь.

Вы можете, однако, получать информацию о процессах и их сокетах из пространства пользователя, но не используя Какао. И только собственные процессы пользователя, если ваше приложение не работает от имени пользователя root. Вам нужно использовать libproc, который не задокументирован Apple. Вы должны выяснить, как это делает lsof . И вы до сих пор не можете вмешиваться в то, что вы получаете.

Полагаю, тебе лучше использовать Little Snitch. Накладные расходы, добавленные Little Snitch, незначительно малы, и я обещаю, вы не почувствуете разницу. Он просто удерживает сокетное соединение до тех пор, пока не будет принято решение - вами или программным обеспечением.

Если, тем не менее, вы все еще испытываете желание написать свои собственные расширения ядра, Руководство по программированию расширений сетевого ядра от Apple - это то, что вам нужно. Раздел «Socket Filters» описывает интерфейсы, которые использует Little Snitch.

1 голос
/ 10 июля 2009

Брандмауэр приложений в Mac OS X 10.5 делает что-то похожее, но в настоящее время Apple поддерживает его использование только для разрешения / блокировки определенных приложений от приема входящих соединений. Это делается с помощью расширения ядра, которое управляется демоном /usr/libexec/ApplicationFirewall/socketfilterfw, который, в свою очередь, настраивается с помощью панели настроек брандмауэра.

0 голосов
/ 14 июля 2009

Извините, вопрос не проясняет, хотите ли вы написать свою собственную программу, чтобы решить эту проблему, или если вы просто спрашиваете, есть ли какая-либо программа, которая уже выполняет эту роль.

Если это последнее, то Little Snitch делает именно то, что вы просите. Он сообщит вам, какое приложение пытается получить доступ к внешнему Интернету, и даст вам возможность разрешить или запретить доступ на основе установленных правил. Это не полностью автоматически, хотя.

...