第11回 NETMARKで不正な通信をシャットアウト
面 和毅サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ
2006/10/5
前回はvsftpdを例にして、LIDSのACL/ケーパビリティを設定する方法をステップバイステップで紹介しました。今回は、LIDS-1系列で説明していなかったもう1つの機能「NETMARK」の説明と、実際の応用例をお見せします。
今回も説明のためにVMwareイメージを用いて解説を行いますので、実際に手元で設定ファイル等を確認したい場合には以下のURLからVMwareイメージをダウンロードしてください。
【atmarkIT VMware Images】 http://www.selinux.gr.jp/LIDS-JP/atmarkit.html (第10回と同じVMwareイメージを利用します) |
iptablesとMARKマッチ
Linuxではiptablesを用いてパケットフィルタリングなどを行っていますが、そのiptablesに「MARKマッチ」という機能があります。
iptablesチュートリアルにはMARKマッチのことが説明されています。MARKはカーネルの中でのみ維持管理できる特別なフィールドで、パケットがコンピュータの中を通過している間だけ、識別に利用することができます。MARKマッチ機能は、mangle テーブルのみで定義されていますので、通常iptablesで-t mangleとして設定を行います。
【Iptablesチュートリアル 1.2.0】 Table 10-16. Markマッチオプション |
例えば図1のようなiptablesの設定を行います。
/sbin/iptables -t mangle -P OUTPUT DROP /sbin/iptables -t mangle -A OUTPUT -p tcp -d 192.168.0.1 --dport 22 -j MARK --set-mark 1 /sbin/iptables -t mangle -A OUTPUT -m mark --mark 1 -j ACCEPT |
図1 |
- 1行目で、すべてのOUTPUTチェーンのパケットをDROPにしています。
- 2行目で、あて先が192.168.0.1、あて先ポートが22番のものに関しては「1」というMARKを付けます。MARKフィールドは符号なしの整数で、4294967296通りの値を取ることができます。
- 3行目で、MARKフィールドが「1」になっているOUTPUTチェーンのパケットを許可しています。これにより、あて先が192.168.0.1:22となっているパケットのみを送ることが可能となります。
上述の例は簡単なものですので、MARKを使っていない場合と大差がないと思われるかもしれませんが、このMARKマッチ機能をiproute2と組み合わせることにより、動的にルーティングを変更したり、帯域制限やClass Based Queuingに使用することができます。
NETFILTERはパケットをmangle tableを通して制御するという、とても良い方法を提供してくれます。mangle tableでは、NETFILTERがパケットをフックして変更したり、パケットに値をラベルし、特別な値に適合するパケットに対して動作を決めることができます。また、PID、UID、GID、あるいはセッションベースでのマッチングも提供します。NETFILTERを使うことにより、LIDSが提供する動作にとてもよく似た動作を提供できますが、サポートするためのダイナミックルールがいくつか必要になります。
このようなMARKマッチ機能に関しては、@ITの以下の記事でも取り上げられています。
【習うより慣れろ! iptablesテンプレート集(3)】 iptablesによる負荷分散とDoS対策 |
LIDSとMARKマッチ機能
LIDS-1系列では、このMARK機能をサポートしており、特定のプロセスがソケットを生成した際にMARKフィールドにMARKを付けることができます。これにより、プロセスが生成したパケットを、iptablesなどを用いて制御することができます。
実際には、LIDS-1系列では図2のようにlinux/net/socket.cにパッチが当たっており、ソケットを生成した後にCONFIG_LIDS_NETWORKが指定されていた場合には「lids_socket_post_create()」関数を呼び出します。この「lids_socket_post_create()」関数の中で、markinfoにあらかじめACLで指定した(tsk_sys_acl構造体中の)MARKを代入することにより、ソケット生成後にMARKを付けています。
linux/net/socket.c) 840 int sock_create(int family, int type, int protocol, struct socket **res) 841 { 842 int i; 843 struct socket *sock; ・ ・ ・ 917 #ifdef CONFIG_LIDS_NETWORK 918 lids_socket_post_create(sock, family, type, protocol); 919 #endif linux/kernel/lids_socket.c) 62 lids_socket_post_create(struct socket *sock, int family, int type, int p rotocol) 63 { 64 #ifdef CONFIG_LIDS_NF_MARK ・ ・ ・ 76 markinfo->mark = tsk_sys_acl->mark; |
図2 |
このMARKの値も、lidsconfコマンドで設定することができ、
# lidsconf -A [ステート] -s [サブジェクト] -o LIDS_SOCKET_NF_MAEK [MARK] -j DISABLE |
として設定します。
例えば、図3のように、httpdに対してパケットに「MARK 3」が付くようにします。このhttpdは、mysqlと連携しているとします。
lidsconf -A -s /usr/sbin/httpd -o LIDS_SOCKET_NF_MARK 3 -j DISABLE iptables -A OUTPUT -t mangle -j MARK --set-mark 0 iptables -A OUTPUT -d 10.0.0.2 --protocol tcp --destination-port 3306 -m --mark 3 -j ACCEPT iptables -A OUTPUT -m mark --mark 3 -j DROP |
図3 |
- 1行目で、httpdがソケットを作成した際に、パケットに「MARK 3」が付くように設定します
- OUTPUTチェーンで、すべてのパケットには「MARK 0」が付くようにします
- httpdが出した「MARK 3」が付いているパケットでも、mysql(ポート番号3306/TCP)へのOUTPUTは許可します
- それ以外の「MARK 3」が付いているパケットはDROPします
これを用いることにより、例えばApacheのSSL Slapperワームなどが拡散していくことを阻止することができます。Slapperワームなどは、攻撃先コンピュータの侵入に成功した場合、遠隔シェルを起動してUDP ポート 2002 経由で連絡できるバックドアを開きます。しかし、LIDSとiptablesを用いて上述のように設定をしておけば、httpd経由でプログラムを実行してソケットを作成しようとした際には、パケットのMARKが「3」になります。外部に接続しようとする際にはmysqlあて以外のものはすべてDROPされますので、結果として不正な通信を遮断することが可能となります。
後ほど例でお見せしますが、そのほかにもsshd経由でログインしたユーザーと、ローカルにログインしたユーザーのそれぞれで異なったルーティングを提供するといったこともできます。
LIDSでMARKマッチ機能を使うためには
LIDSでMARKマッチ機能を使うためには、カーネルオプションで、
[*] Linux Intrusion Detection System support (EXPERIMENTAL) [*] Enable security network [*] Enable NETFILTER MARK |
を選択します。
また、lids-1.2.2-2.4.30とlids-1.2.2-2.4.31-skではバグがあり、このままではMARKが使えませんので、ここからパッチをダウンロードして使用してください(この問題はすでに報告済みですので、次回のリリースでは修正されると思います)。
【lids_nfmark.patch】 http://www.selinux.gr.jp/LIDS-JP/patch.download.html |
なお、LIDS-JPサイトからダウンロードできるVMwareイメージでは、この問題が修正されています。
1/3 |
Index | |
NETMARKで不正な通信をシャットアウト | |
Page1 iptablesとMARKマッチ LIDSとMARKマッチ機能 LIDSでMARKマッチ機能を使うためには |
|
Page2 sshdでの実例 |
|
Page3 sshdでの実験 |
Security&Trust記事一覧 |
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|