FWKNOP の紹介#
SDP アーキテクチャの下で保護されたビジネスサービスは、合法と見なされるメッセージのみがアクセスを許可され、「不正な」メッセージは破棄されることで、ビジネスサービスの隠蔽を実現します。SDP アーキテクチャは 3 つの部分に分かれています:SDP クライアント、コントローラー、ゲートウェイ。すべてのクライアントは、リソースにアクセスする前にコントローラーサービスを通じて SPA 単一パケットの検証とアクセス制御を行い、ゲートウェイがアプリケーションに対してビジネス処理を行います。以下の図に示すように:
この記事で言及されている fwknop は、サービスを隠すための単一パケット認証(SPA)と呼ばれる認証スキームを実現しています。SPA は、単一のデータパケットを暗号化し、再生不可能にし、HMAC を使用して認証を行います。これにより、ファイアウォールの背後に隠された SPA の主要なアプリケーションシナリオは、ファイアウォールがすべての SSH などのサービストラフィックをフィルタリングすることで、脆弱性の悪用(0day や未パッチを含む)をより困難にします。ポートが開放されていないため、Nmap を使用して SPA で隠されたサービスをスキャンすることはできません。fwknop は Linux 上で iptables と firewalld をサポートし、FreeBSD と Mac OS X 上で ipfw をサポートし、OpenBSD 上で PF と libpcap をサポートしています。
SPA は、公開されているサービスポートを減らし、動的で単一のデータパケットを使用して認証を行うことでセキュリティを向上させ、攻撃者が潜在的な脆弱性を発見し利用することをより困難にします。これは、内外のネットワークを信頼せず、効果的な認証と認可を通じてリソースを保護するというゼロトラストモデルの理念に合致しています。
環境の紹介と設定#
Ubuntu 20.04
環境を使用して構築します。ubuntu イメージダウンロードリンクをクリック、依存ソースは清華源ミラーです。
ネットワークアドレス計画とシステムパスワード:
ホスト | アドレス |
---|---|
サーバー | 192.168.31.211 |
クライアント | 192.168.31.37 |
Ubuntu のソースを変更
sudo su
sudo vim /etc/apt/source.list
#以下の内容を書き込み、保存します
# デフォルトでソースミラーはコメントアウトされており、apt updateの速度を向上させるため、必要に応じてコメントを解除してください
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# プレリリースソフトウェアソースは、使用を推奨しません
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
sudo apt update
fwknop ソースコードのダウンロードとコンパイルとインストール#
GitHub からプログラムをダウンロードし、まず前提ツールをインストールします。
sudo apt install git make gcc libpcap gawk mawk libpcap-dev
git コマンドを使用してコードをローカルにダウンロードします。
git clone https://github.com/mrash/fwknop.git
cd fwknop
chmod +x configure
./configure --prefix=/usr --sysconfdir=/etc --disable-client # このステップは依存関係のインストールが完全かどうかを確認するためのものです
このステップが成功したことを示しています。
プログラムのコンパイルを続けます。注意:プログラムを実行するにはroot
権限が必要です。
sudo make
sudo make install
which fwknopd #ファイルが正常に見つかればインストール成功を示します
fwknop サーバーの設定#
fwknopd.conf
で設定する必要がある情報はネットワークインターフェース名で、40 行目にあります。
PCAP_INTF ens33
access.conf
では、ドアノックルールやクライアントのトークン、有効期限などを設定する必要があります。
キーのようなものは後でクライアントで生成します。
SOURCE ANY
OPEN_PORTS tcp/22
KEY_BASE64 TxpMVCiWRxc6IUR0rmABy2jKTDnI3SFa1MRD8fuOtgc=
HMAC_KEY_BASE64 mm+lPMq6WY8QHOcZdJ80XmDlNbWw+7zOJB87uw5wf9ShkgPiykxXDgPUeA+X6UlUF6Oa3MTEcSR0GMUZjm6sJQ==
FW_ACCESS_TIMEOUT 20
# GnuPGキーを使用する場合は、以下の変数を定義してください
#
#GPG_HOME_DIR /homedir/path/.gnupg
#GPG_DECRYPT_ID ABCD1234
#GPG_DECRYPT_PW __CHANGEME__
FW_ACCESS_TIMEOUT を 20 に設定すると、ドアノックが行われ、ドアが開いている状態が 20 秒続き、20 秒後にドアが閉じます。
開始と停止
sudo fwknopd start サービスを起動
sudo fwknopd -S サービスの実行PIDを確認
kill -9 [pid] プロセスを終了
クライアントのインストールとサービスの成功確認#
sudo apt install fwknop-client
成功裏にインストールされた後、以下のコマンドを使用して認証情報を生成します。
fwknop -A tcp/22 -a 192.168.31.37 -D 192.168.31.211 -p 62201 -P udp --key-gen --use-hmac --save-rc-stanza
-a の後はクライアント IP、-D の後はサーバー IP、-p の後はサーバーが SPA パケットをリッスンするポート、-P の後は送信する SPA パケットのプロトコルで、通常は UDP パケットを使用します。
実行後、.fwknoprc
ファイルが生成され、そこにキーが含まれます。このキーをaccess.conf
の設定情報に追加します。
iptables
を使用して 22 ポートをブロックします。このステップの意味は、手動で 22 ポートを閉じることです。ドアノックの後、プログラムは iptables ルールを作成し、22 ポートを開放します。
sudo iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -j DROP
sudo iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ポートスキャンツールを使用してテストを行い、結果は以下の図の通りです。
クライアントツールを開いてドアノックを行います。
wknop -n 192.168.31.211
認証成功
iptables の変化を観察します。ドアノック前
ドアノック後
クライアントのユーザー名と、SSH ポートを開放する iptables ルールが作成されたことが確認できます。
まとめと展望#
この文書では、fwknop 環境構築の全過程を詳細に説明しました。fwknop の単一パケット認証(SPA)の概念を説明し、セキュアダイナミックポートノッキング(SDP)アーキテクチャにおけるその重要な役割を明らかにしました。Ubuntu 20.04 システム上での環境設定、ネットワーク計画、ソフトウェアパッケージソースの更新方法について詳しく説明しました。また、GitHub から fwknop のソースコードをダウンロードし、コンパイルしてインストールする方法、fwknop サーバーの設定方法(ネットワークインターフェース、ドアノックルール、クライアントトークンの設定を含む)、最後にクライアントのインストールとサービスの実行確認プロセスについても触れました。
しかし、fwknop はネットワークセキュリティツールとして問題を抱えています。最新バージョン 2.6.11-pre1(2019 年 12 月リリース)以降、コードは長期間更新されていません。C 言語を使用しているため、Fwknop はクロスプラットフォーム能力の不足、互換性の問題、メモリ脆弱性のリスク(CVE-2012-4434、CVE-2012-4435、CVE-2012-4436 など)に直面しています。また、アメリカ国家安全保障局は C/C++ ソフトウェアの使用を避けるよう推奨しており、より安全なプログラミング言語の必要性を強調しています。
将来を展望すると、ネットワークセキュリティ分野の発展は、より先進的な技術、例えば自主的で制御可能なゼロトラストネットワーク隠蔽技術 NHP(Network Hiding Protocol)を導入する可能性があります。NHP 技術は、より厳密なセキュリティメカニズムとインテリジェントな管理を通じて、ネットワークの隠蔽性と攻撃に対する抵抗能力を効果的に向上させることができます。この技術は、今後のネットワークセキュリティの重要な発展方向になる可能性があり、特にますます複雑化するネットワーク脅威に対処し、システム全体のセキュリティを向上させる上で、NHP は大きな潜在能力を示しています。このような技術を導入することで、より安全で信頼性の高いネットワーク環境を期待することができます。
附録#
[1] Fwknop の GitHub リポジトリリンク:https://github.com/mrash/fwknop
[2] Fwknop の公式サポートドキュメント:http://www.cipherdyne.org/fwknop/
[3] CVE-2012-4436:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4436
[4] CVE-2012-4435:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4435
[5] CVE-2012-4434:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4434
[6] Fwknop 関連 CVE 脆弱性分析記事:https://ioactive.com/wp-content/uploads/2018/05/Multiple_Security_Vulnerabilities_in_Fwknop.pdf