12

OS X 10.5を使用していて、アプリケーションがインターネットにアクセスしようとしているかどうかを検出する方法を探しています。この時点で、定義する一連のルールに一致するアプリケーションをブロックしたいと思います。

特定のポートへのアクセスをブロックするために使用できると私が認識しているipfwUnixコマンドがありますが、これはすべてのアプリケーションに影響します。マニュアルページを読みましたが、ipfwを使用してアクセスをブロックする方法はわかりませんでしたが、特定のアプリケーションに制限しました。

私の主な問題は、ネットワークへの外部アクセスを取得しようとしているアプリケーションを検出することです。プログラムでこれを行う方法が必要です。MacOSXAPIまたはUnixコマンドを使用するかどうかにかかわらず、これをどのように実現できますか?

更新: 基本的にはリトルスニッチがやっていることをやりたいのですが、リトルスニッチが好きではないので自分で一から書きたいと思っています。アプリケーションネットワークのサンドボックス化を実現できるAPIと、Little Snitchがこれをどのように正確に実行できるかを知る必要がありますか?

4

5 に答える 5

13

これは1年遅れていることに気づきましたが、似たようなものを探していて、答えだと思うものに出くわしました. うまくいけば、これは他の誰かを助けることができます。

Little Snitch は、Network Kernel Extensionsを使用して、システムに入ってくるトラフィックをフィルタリングしているようです。ボックスにカーネル拡張機能がインストールされることを発見して、これを検証しました。

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

別のアプリケーションへのネットワーク アクセスをプログラムで防止したい場合は、これが最善の策と思われます。ただし、他のアプリによるネットワークの使用状況を単に監視したい場合は、libpcap.

于 2010-08-17T02:45:10.333 に答える
2

OS X 10.5 (Leopard) をターゲットにしている場合は、サンドボックス API を使用できます。sandbox_initはおそらく開始するのに適した場所です。このオプションを使用して、kSBXProfileNoInternetインターネット アクセスを停止できます。

ここには、シートベルトエクステンションを使用したよりきめ細かい制御の例を示す、より詳細な記事もあります。

于 2009-07-09T19:32:17.643 に答える
1

Mac OS X 10.5のアプリケーションファイアウォールは同様のことを行いますが、現在Appleは、特定のアプリケーションが着信接続を受け入れることを許可/ブロックするためにのみそれを使用することをサポートしています。これは、デーモンを介して制御されるカーネル拡張を介して実行されます。デーモン/usr/libexec/ApplicationFirewall/socketfilterfwは、ファイアウォール設定ペインを使用して構成されます。

于 2009-07-09T22:32:42.210 に答える
1

ユーザー空間プロセスがあなたが説明したことを実行できる方法はありません。ルートとして実行されているプロセスでさえないと思います。注意: ここでは Windows を実行していません。たとえそうだとしても、Cocoa がそれをサポートすることを期待すべきではないでしょう。Cocoa は、Mac OS X の使いやすい GUI 用です。低レベルのシステム開発用ではありません。

あなたが説明したことを達成する唯一の方法は、カーネルを拡張することです。これは、Little Snitch が行うことです。他に何か賢い方法があれば、リトル・スニッチは違ったやり方をしていただろう. カーネル拡張は、気弱な人向けではありません。カーネル エクステンションがクラッシュすると、システム全体がクラッシュします。だから、あなたは自分が何をしているのかをよく知っています。

ただし、ユーザー空間からプロセスとそのソケットに関する情報を取得することはできますが、Cocoa を使用することはできません。アプリケーションがルートとして実行されていない場合は、ユーザー自身のプロセスのみ。Apple によって文書化されていない libproc を使用する必要があります。lsofがどのようにそれを行うかを理解する必要があります。そして、あなたはまだあなたが得るものを改ざんすることができません.

リトル スニッチを使ったほうがいいと思います。Little Snitch によって追加されるオーバーヘッドはわずかに小さく、違いを感じることはないでしょう。ユーザーまたはソフトウェアによって決定が下されるまで、ソケット接続を保留するだけです。

それでも独自のカーネル拡張機能を作成したい場合は、Appleの The Network Kernel Extension Programming Guideが必要です。「ソケット フィルタ」のセクションでは、Little Snitch が使用するインターフェイスについて説明します。

于 2011-01-24T23:49:54.297 に答える
0

申し訳ありませんが、このニーズを解決するために独自のプログラムを作成したいのか、それとも同じ役割を果たすプログラムが既に存在するかどうかを単に尋ねているだけなのか、この質問では明確になりません。

後者の場合、Little Snitch はまさにあなたが求めていることを実行します。外部のインターネットにアクセスしようとしているアプリケーションを通知し、ルール セットに基づいてアクセスを許可するか拒否するかを選択できます。ただし、完全自動ではありません。

于 2009-07-14T05:16:59.687 に答える