1

Windows ファイアウォールと対話する Windows 10 用の小さな GUI アプリケーションを作成することを検討しています。

ただし、目的のアクションに関連する API を見つけるのに苦労しています。

ユースケース(状況)

Windows 10 がかなり工場出荷時のデフォルトの家庭で使用されている場合 (写真: おばあちゃんが電子メールを読んで Web を閲覧している)、ファイアウォールは次のように構成するのが一般的です。

  1. 幅広い Windows サービスとアプリケーション (Web ブラウザ、電子メール クライアントなど) のさまざまな形式のネットワーク アクセスを許可する多くのルールが存在します。
  2. おそらく、特定のアプリケーションがインターネットにまったくアクセスできないようにブロックする (または特定の制約を受ける) いくつかのルールがあります。
  3. 有効になっている可能性のあるいくつかのプロファイル/ポリシーの 1 つです。これは、以前は不明だったアプリケーションがネットワークまたはインターネットを使用しようとしたときに何をすべきかを決定します。

私の質問は、ポイント 3 を中心に展開しています。

私の目的

通常、Windows ファイアウォールのアクティブなプロファイルは、デフォルトでそのような「新しい」アプリケーションの接続を拒否するように設定されていますが、許可するかどうかをユーザーに尋ねるポップアップも表示されます。この機能はほとんどそのままにしておきたいのですが、組み込みのポップアップが表示される代わりに、ウィンドウがカスタム アプリケーションに通知し、適切なアクション (ユーザー操作の有無にかかわらず) を決定できるようにしたいと考えています。

スクリーンショット:

Windows ファイアウォール API

これまでにわかったことについては、「Windows Defender ファイアウォール」または単に「Windows ファイアウォール」(netfw.h) には、関連する多くの API/機能があります。それらは(ほとんど)https://docs.microsoft.com/en-us/windows/win32/api/netfw/で十分に文書化されています

INetFwRule (|2|3) API は、個々のファイアウォール ルールを処理します。

INetFwProfileおよびINetFwPolicy(|2) API は、次のような関心のあるものに関連する設定を処理します。

INetFwPolicy2::get_NotificationsDisabled

INetFwProfile::get_NotificationsDisabled

しかし、通知をオンまたはオフにするためのゲッター/セッターメソッドだけが、そのいずれかにフックする関数の登録に関連するものを見つけることができません。

これまでに見つかった最も有望な API はINetFwProduct(s) のようです。含む

INetFwProducts::Register -> アプリケーションまたはサービスが、サード パーティのファイアウォール製品を Windows ファイアウォールに登録するためのメソッドとプロパティにアクセスできるようにします。

INetFwProduct::get_RuleCategories -> サード パーティのファイアウォール製品の登録の場合、サード パーティのファイアウォールが Windows ファイアウォールから所有権を取得するルール カテゴリを示します。

これは明らかに、NETFW のワークロードの特定の側面を引き継ぐことができるように、サードパーティ プログラム (Zone Alarm、Norton Security などをイメージ) を登録することに関連しています。それが実際に私のアプリケーションが該当する指定、つまりセキュリティ ツールの指定である可能性は低くありません。

INetFwProductのものは、いくつかの迷惑な制約 (Authenticode 署名など) をミックスにもたらしますが、これは特に関連性や重要性はありません (ただし、後で詳しく説明します)。

私の質問

ただし、主な問題は、これでも、(架空のINetFwProductに登録された) ソフトウェアが私が望むことをどのように達成するかについて、実際には何も考えられないことです。

INetFwProductパッケージを NETFW または少なくともいくつかのネットワーク層 API などに接続するメソッドを提供する別の API がどこかにあることを期待しています。

私がいるトレイルがどこにつながるか知っている人はいますか? または、同じことを達成するためのより簡単な方法に精通しているかもしれません。

INETFWPRODUCT はやり過ぎのようです

私はまた、このINetFwProductルート全体が、NETFW のワークロードのごく一部に置き換え/フックインすることだけを本当にしたいのに、私のプログラムが多大な責任を負っているのではないかと疑い始めています。結局のところ、ルールセット/ポリシーのバックエンド全体を置き換えたり、ルールの解釈方法を変更したり、その他の凝ったものを変更したりするつもりはありません。ユーザーがポップアップ GUI で盗聴される代わりに (またはその前に)、ユーザーランド プログラムが呼び出されるようにしたいだけです。理想的には、私のプログラムが行うことは、接続を許可するかどうかについてブール値を返すことだけです (必要に応じて、INetFwRule API を使用して、同じプログラムからの将来の接続に対して永続的なルールを追加することもできます)。

認証コードの要件

私の質問とは直接関係ありませんが、INetFwProduct機能は一連の新しい制約を画像にもたらします。私のアプリケーションは (一見) Authenticode 署名が必要で、IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY ヘッダーが必要です。私はこれらのことのどちらにもあまり詳しくありませんが、無料の Lets Encrypt 証明書はこれには使用できないことを理解しました (そして確認したようです)。同じことが自己署名証明書にも当てはまる可能性があります。そして、私はこれを非常に大きな (洗練された、有料の) 製品にするつもりはなく、特に FOSS プロジェクトとしてリリースするつもりもありませんでした。認定のために少なくとも年間 150 ユーロまたは 350 ユーロを費やします。

4

0 に答える 0