通信制限システムにおける TCP セッションの途中切替と安全なリモートアクセス機能の実装
M2008MM007 福井麻美
指導教員：河野浩之

1

はじめに

通信制限は，内部ネットワーク側のホストが設定したフィルタリングルールに基づいて施される．

近年，インターネットの安全性が重要視されている [4]．
GK
トラフィックを増大させ，相手先のコンピュータに多大なNAT
NIC 1
負荷をかける DoS 攻撃などの不正アクセスが多発し，業務やサービスに深刻な被害をもたらしているが，現状でNIC 0
Receiver
Senderはその正確な検知と防御が困難である．
この対策手段として，南山大学 後藤研究室では，「通信FilterTimer
制限システム」[1][6](以下，既存システムまたは GK とする) を開発している．このシステムは，正常な通信か攻Rule
Updater
撃かの判断が難しい通信に対して，遅延やパケット損失
RemoteCommander
HostList
Hostを発生させ，攻撃と断定したら通信を遮断する．しかし，
図 2 既存システム GK の構成
TCP 通信の場合に応用層の通信を途中でハニーポットに切り替える機能やフィルタリングルール設定要求時のリ
図 2 は，片方向の中継処理のみの構成である．点線で囲
モートアクセスにおける認証機能が未完成である．
われた部分の待ち行列の処理には，GINE 論文の Queue
本研究では，既存システムにおいて実装が不十分な点 処理の手法 [7] を用いた．
を改良する．ネットワークエミュレータ GINE[7] のライ
GK は主に，Receiver，Sender，Commander，Filter，ブラリクラスを用いてシステムを再設計し，より安定的 NAT のクラスによって構成される．にシステムが稼働することを目標とする．主な改良点は，
2.2 既存システムと新システムの比較攻撃の手法を監視，分析するためのハニーポットの利用システムを再設計するにあたって，旧システム (GK) とを想定した TCP 通信の途中切替機能，リモートホストか新システム(NewGK) の違いを表 1 にまとめる．改良点
ら安全にルールを設定するためのホスト認証機能，途中でシステムが停止した時に設定されているルールを保存 は，GINE ライブラリクラスの使用，通信途中切替，リするためのルールオブジェクトの保存機能の実装である． モートアクセス機能，Queue 処理，IPv6 への対応の 5 つ
これらの機能を実装したシステムに対して，動作確認 である．
表 1 既存システムと新システムの比較と処理性能の評価，操作方法の利便性を評価する．
THROUGH
Queue

DELAY
Queue

LOSS
Queue

LIMIT
Queue

Reference

Reference

LIMIT
Queue

UpdateAdd / Delete

DROP

Referencelist / update2

システムの概要

既存システムと本研究で提案するシステム (以下，新システムまたは NewGK とする) を比較し，既存システムの問題点と改善方法について説明する．

2.1

既存システムの概要

既存システムの概要を説明する．システムのネットワー
ク構成は，図 1 のようになる．

変更箇所

GK

NewGK

変更理由/目的

GINE
ライブラリ
TCP 通信の途中切替機能
パスワード
認証
ルール保存機能GINE の Queue
処理手法のみ使用

GINE クラスを利用システムの安定性を高めるため無し実装未実装のため

平文パスワード

SSL クライアント

安定性向上のため

無し

実装

Queue

ルールごと往復各 3 種

IPv6未対応

IPv6 処理を導入

システム停止時にリセットされるためメモリ節約
処理効率向上のため
IPv6 ネットワーク対応のため

表 1 からわかるように，既存システムでは Queue 処理に GINE の手法を利用していただけで，プログラムのほAttacker
GK
Router
とんどを GK 用に作成したクラスによって構成していた．
192.168.1.2
eth2
eth2
Honey
そこで，新システムでは，システムの安定性を図るため
192.168.2.1
192.168.2.254
192.168.1.3に GINE のライブラリを使用するように変更する．また，
Remote未実装であった通信の途中切替機能を実装した．不完全Hostであったリモートアクセス機能は，安全性を高めるため
図 1 システムのネットワーク構成に SSLv3(TLS) を用いたクライアント認証を採用する．
システムをブリッジとして動作させるため，GK の eth0
図 3 は，NewGK の構成を表した図である．既存シスと eth1 には IP アドレスを付与しない．そのため，内部 テムではルール毎に Queue を作成していたが，効率化ネットワークからルール設定を要求できない．内部ネット を図るために，THROUGH，DELAY，LIMIT の 3 種類
ワークと GK が通信出来るようにするため，GK の eth2 の Queue を Inbound(NIC0 から NIC1 への通信) と Outと Router の eth2 のそれぞれに IP アドレスを付与した． bound(NIC1 から NIC0 への通信) の各方向に用意した．
192.168.1.1

192.168.0.1

eth0
NoIP

eth1 192.168.0.254 192.168.1.254
eth1
NoIP eth0ServerGK
PFPacketIn

FrameQueue

GK
BridgeFilter

NAT

Q

in

TCPInfolist / updatein
Delay
Q

SSL
Commanderin
Limit
QThoroughframe input

Q

PFPacketOut

NIC 0inThorough

inIn
Q

inIn

drop / loss

FilteroutOutframe output

PFPacketOut

inOut

NIC 1
frameinput

frame output

inDelayQ
inLimitQ

list / update

outIn
Q

outIn

GK
BridgeFrameQueue

Timer

ProcessQueue

その後の通信でも，常に Server より先に Honey にフレームを転送する．これは，Honey が ACK seq を補正に初回時の Server と Honey の seq の差を利用しており，Honeyからの返信前に Attacker からの応答があると Honey への通信が確立できなくなるためである．
CLONEdrop / loss

RemoteHostAll
FrameQueue1B) 4A) 以前に Server と Honey の seq の差を取得できるように，10msec 程度の遅延を加え Server に SYN を転送する．

図 3 新システム NewGK の構成

2) Honey からの SYN+ACK 応答の seq H を保存し，フレームを廃棄する．

GKBridge，Filter，NAT，TCPInfo，SSLCommander
クラスは，GK 用のクラスである．これらのクラスのほかに，Filter の内部クラスであり，フィルタリングルールである Rule クラスも GK 用のクラスである．

3) Server からの SYN+ACK 応答の seq S を保存し，Attacker に転送する．
4A) Attacker からの TCP 接続完了の ACK seq を S+1+H−Sに補正し，Honey に転送する．
—– Honey の TCP 接続完了． —–4B) Attacker からの TCP 接続完了 ACK を Server に転送する．
—– Server の TCP 接続完了． ——システムの実現

3

本節では，提案するシステムの実現方法について述べる．

3.1

5A) Attacker からのフレームの NAT 変換，ACK seq 補正，TCP，IP ヘッダチェックサム補正後，Honey に転送する．

TCP 通信の途中切り替え機能5B) Attacker からのフレームは，Server にそのまま転送する．

図 4 は実際は攻撃ホストと保護ホスト間で通信しているが，ハニーポットにもフレームのコピーを転送する場
合の TCP 通信の流れを示したものである．
Attacker

NAT

Honey(pot)Server(CLONE)
SYN(A)
delay to record
A and H

1A) SYN(A) with NAPTSYN(S)+ACK(A+1)
ACK(S+1)

6) CLONE での Honey からの応答は廃棄する．

2) SYN(H)+ACK(A+1)

8A) 5A) と同様に Attacker からのフレームを NAT 変換，ACK
seq 補正，TCP，IP ヘッダチェックサム補正後，Honey に転送する．

4A) ACK(S+1 + H - S)
4B) ACK(S+1)

DATA+ACK

connected5A) DATA + ACK(+ H - S)

X 6) DATA+ACK
DATA+ACK

8B) Server の TCP 接続終了のために、TCP FIN flag を 1(ON)に変更して転送する

connected

9) Honey からの応答は，逆方向の NAT 変換，ACK seq 補正，チェックサム補正後，Attacker に転送する．

5B) DATA + ACK

10) Server は，8B) に対し FIN+ACK を応答する．

DATA+ACK

11) NAT 内で 10) の MAC，IP アドレス，ポートの Src/Dst
を逆にして LastACK を生成し，Server に送る．
—– Server の TCP 接続終了． —–(SWITCH)
7) DATA + ACK
9) DATA+ACK(+S - H)with reverse NAPT

7) Attacker は，Server にフレームを送信する．

1B) SYN
3) SYN(S)+ACK(A+1)

connected

Attacker から Server へ送信されるフレームを NAT 変換処理し，Honey へ転送する SWITCH に切り替える．
初期状態が SWITCH の場合は，2) のフレームは廃棄せず，逆方向に NAT 変換処理して，Attacker に転送する．
SWITCH

create TcpInfoX1A) Attacker から届いた SYN パケットの DstIP，DstPort をHoney のものに変更し，TCP チェックサム，IP ヘッダチェッ
クサム補正後，Honey に送信する．
(この接続の状態を記録する TcpInfo を生成する．)

PFPacketIn12) Attacker からの FIN を Honey に転送する．
8A) DATA + ACK(+ H - S)

13) Attacker からの LastACK を Honey に転送後，この接続の状態を記録する TcpInfo を削除して，処理を完了する．
—– Honey の TCP 接続終了． —–DATA+ACK8B) FIN

10) FIN+ACK
11) (Last)ACK

3.2

SSL(TLS) を用いたホスト認証機能

既存システムにも，平文パスワード認証機能は実装されている．しかし，このパスワード認証機能はホスト毎
12)FINFINにパスワードを設定することが出来ず，パスワードを知っ
FIN+ACKFIN+ACK(+S - H)ていれば，誰でもルールの設定をすることが出来てしま
13) (Last)ACK(Last)ACK
Timeう．そこで，SSL クライアント認証を利用してホスト認
delete TCPInfo
connection
connection
connection
証機能を実現する．
closedclosedclosed既存システムの Commander に SSL クライアント認証
図 4 TCP 通信の途中切替の流れ機能を追加し，新たに SSL Commander クラスを作成しAttacker から Server へ送信されるフレームをコピーした．SSL クライアント認証の実装には，C++プログラミて Honey に送信する CLONE の状態からスタートする．
ング言語で使用でき，SSL のすべての機能を実装していNAT 変換時のシーケンス番号 (seq)，確認応答番号るオープンソースである openssl[8] を使用した．openssl(ACK seq) の補正には，Server と Honey の seq の差を利でクライアント/サーバ方式の通信を実装するにあたり，用する．そのため，Server と Honey の seq の差を取得す
SSLCommander をサーバとし，新たにクライアントプロるために，初回の通信時は Honey に SYN を転送した後，グラムを作成し，SSL クライアント認証を実装した．
10msec 程度の遅延を加えて Server に SYN を転送する．
connection
closedSSLCommander は，SSL クライアント認証を用いた通信と外部ホストからの要求でフィルタ操作をするスレッドのクラスである．SSLCommander に，SSL クライアン
ト認証でサーバとして通信をするスレッド実行内容の run
メソッドと要求されたフィルタ操作をする accessFilter メ
ソッドを準備した．作成した SSLCommander オブジェク
トはスレッドとして動作する．
3.3

Attacker と Router の間を Kernel Bridge で接続した状
態と NewGK，GK を配置した状態の RTT を比較して，NewGK がブリッジとして高速に動作するかを判断する．
表 2 ブリッジと NewGK の RTT 測定結果

FilterRulewrite()
read()

write()
read()

図 5 Rule オブジェクト保存の継承関係
そのため，図 5 のように，Filter，Rule クラスにオブジェクトの保存を指示する write メソッド，読み出しを指示する read メソッドを実装した．

性能評価

旧システムと本研究で試作した新システムの実験結果を比較し，その性能を評価する．また，改良した機能について，その動作を確認する．
実験ネットワークの構成

192.168.1.254/24 192.168.2.254/24(bridge)
192.168.3.1/24

システムが通信を妨害しないかどうか，TCP スループッ
トを測定して評価する．測定結果は表 3 の通りである．
TCP スループット測定のウインドウサイズは，iperf のデフォルト値を使用した．デフォルト値は，クライアン
ト側は 16.0KBytes，サーバ側は 85.3KBytes である．それぞれ 10 回ずつ測定し，その最大値と最小値，平均値をまとめた．
表 3 TCP スループット測定

帯域幅 (Mbps)

Kernel Bridge
min max ave

min9426371126973

NewGKmax ave
697677min

GKmaxave

7011000873

表 3 の TCP スループットの測定値を見ると，NewGKは，Kernel Bridge，GK と比較するとスループットが小さいことが分かるが，最大値と最小値の差は，NewGK が一番小さく，安定している．また，NewGK は平均 670Mbps程度のスループットを保つことができており，GINE クラスの再利用でシステムの安定性が向上したといえる．

システムに DELAY，LOSS，LIMIT のそれぞれのルールを設定し，設定したルール通りに通信制限が出来ているかどうかを確認する．測定結果を表 4 に示す．
表 4 通信制限の測定

Server制限

設定値

Router
192.168.2.2/24
192.168.3.254/24

TCP with SSL
Client authentication

損失率
(%)

0.037

-

00.501-0DELAY

50.051100.057
200.047300.041-

000050.361
100.335
200.277
300.285-

000050-0-

100-0-500-0-255075100-

244974100-

LIMIT

4.1 節の図 6 に示した実験環境の Attacker から Serverに対して，ICMP 通信の ping と TCP，UDP 通信の iperf

測定値 (GK)
帯域幅(Mbps)-図 6 実験ネットワークの構成

NewGK の性能評価

RTT(msec)

50100200300

RemoteHost

仮想ネットワーク上のホストには，Network Namespace(NETNS) を使用した．GK(NewGK) は OS で直接実行する．処理速度以外は現実と同じ構成である．
GK(NewGK) の Timer は NANOSLEEP を使用した．

測定値 (NewGK)
RTT
帯域幅
損失率(msec)(Mbps)(%)

THROUGH

Honey
192.168.2.3/24

4.20.501○ NewGK が通信自体を妨害しないか

192.168.2.1/24

GKGK0.037

表 2 の RTT の測定値を見ると，Kernel Bridge よりもNewGK の方が遅延時間が小さくなっているが，その誤差は 0.031msec と非常に小さなものである．また，GK のRTT と比較すると NewGK の方が 0.464msec 小さくなっていることから，GK よりも NewGK の方が高速に動作していることがわかる．

Virtual Hosts and Switch in the Emulator

Attacker

NewGK

0.006

○ 各通信制限が設定値通りの挙動を示すか

図 6 で示すように，実験環境に実機を用いると，最低 5台の PC が必要となる．そこで，実験環境は，後藤研究室で開発中のネットワークエミュレータ GINE[7] を用いて 1 台だけで構築した．
192.168.1.1/24

Kernel Bridge
RTT(msec)

BaseObject

4.1○ NewGK がブリッジとして高速に動作するか設定済みルールの保存機能

本研究では，ルールの追加や削除，変更時に設定したルールを自動的に保存する機能を追加する．
Rule オブジェクトの保存は GINE のオブジェクト保存機
能 [2] を参考に，GNU common C++の Persistence を用いて実装する [3]．本研究では，Persistence ライブラリクラスの直列化を可能にする Engine クラスと Persistence オブジェクトを生成するためにタイプを定義する BaseObjectクラスを使用する．
Filter が Rule リストを持つため，Filter の保存時に Ruleリストを保存すれば Rule がすべて保存できる．

4を用いて，往復遅延時間 (RTT)，スループットを測定する．

LOSS(UDP)48.8(TCP)47.9(UDP)98.0(TCP)95.7(UDP)490(TCP)478-(UDP)48.8(TCP)47.9(UDP)98.0(TCP)95.7(UDP)489(TCP)482-000275275
100

NewGK の測定値と GK の測定値のどちらとも，設定値に近い値が測定できた．この結果から，設定したルール通りに通信制限ができていることがわかる．

改良した機能の動作確認

4.35

おわりに○ TCP 通信途中切替の評価

本研究によって，通信制限システムに TCP 通信の途中切替，SSL クライアント認証を用いた安全なリモートア
4.1 節の図 6 に示した実験環境の Attacker から Serverに対して独自に作成した TCP 通信のサーバ，クライアン クセス，システム停止時のルール保存機能を実装した．
実験結果から，GINE のライブラリクラスを再利用しトプログラムを用いて通信した．設定した NAT ルール通てシステムを再設計することで，システムの安定性を高りに Honey に転送，切替ができているかどうか，3.1 節めることができたと考える．通信の終了処理に問題は残の図 4 と同様の流れで実験し，確認する．
Router で tcpdump を起動し，パケットを表示して期待 るが，TCP 通信の途中切替機能も実装することができた．
通りに通信切替が動作しているかを確認した．tcpdump また，外部ホストのリモートアクセスに，SSL クライアの一部を次に示す．
ント認証を用いたことで，システムのセキュリティの向
上にもつながった．さらに，LOSS や NAT のルール保存// 接続開始
はまだ不完全であるが，設定済みルール保存機能も実装
18:33:52.166146 IP 192.168.1.1.42463 > 192.168.2.2.60000:S
18:33:52.170249 IP 192.168.2.2.60000 > 192.168.1.1.42463:S// Attacker から Server，Honey に SYN を送信することができた．
18:33:52.176121 IP 192.168.1.1.42463 > 192.168.2.1.60000:S
18:33:52.178733 IP 192.168.2.1.60000 > 192.168.1.1.42463:S
今後の課題として，TCP 通信の途中切替機能の終了処// Server，Honey が応答
18:33:52.178781 IP 192.168.1.1.42463 > 192.168.2.2.60000: . ack 1 win 92理，LOSS や NAT のルールの保存方法の改良がある．ま
18:33:52.188780 IP 192.168.1.1.42463 > 192.168.2.1.60000: . ack 1 win 92// Server，Honey ともに TCP による通信を確立た，IPv6 環境での性能評価や，実ネットワークにおける// CLONE から SWITCH に切替運用実験も必要である．
18:34:22.186231 IP 192.168.1.1.42463 > 192.168.2.1.60000: FP 31:37(6) ack 31
18:34:22.186266 IP 192.168.2.1.60000 > 192.168.1.1.42463: P 31:37(6) ack 38
18:34:22.186297 IP 192.168.2.1.60000 > 192.168.1.1.42463: F 37:37(0) ack 38
さらに，後藤研究室，松永氏の研究 [5] である Web 経// Attacker から Server に FIN 送信し，TCP 通信終了
由での遠隔操作手法を組み込むとさらに使いやすいシス// 接続終了
18:34:41.770859 IP 192.168.1.1.42463 > 192.168.2.2.60000: F 55:55(0) ack 55
テムになると考える．
18:34:41.770914 IP 192.168.2.2.60000 > 192.168.1.1.42463: F 55:55(0) ack 56
18:34:41.770983 IP 192.168.1.1.42463 > 192.168.2.2.60000: . ack 56// Attacker から Honey に FIN 送信し，TCP 通信終了

参考文献


この結果から，期待通りに TCP 通信の途中切替が実装 [1] Aoyama, M., Kojima, M., Goto, K.: Design and Implementation of a Traﬃc Limiter for Network Secuできていることが確認できた．しかし，iperf を使用した
rity, Proc. of 16th International Conference on Sys場合，Server の端末では通信切替後にきちんと通信が終
tems Science, Vol.II, pp.213-220 (2007).
了しないという問題があることがわかった．その原因は
NewGK プログラムの TCP 通信の終了処理にある．通信の終了処理は図 7 のように Server からの FIN と ACK を同時に送信するように実装したが，正式な処理は図 8 のようにの FIN と ACK を別々に送信するためである．
ServerNAT

Server

NAT
FIN

FIN

FIN

FIN+ACKACK(Last)ACK(Last)ACK
Time

Time

delete TCPInfo

connection closed

connection closed

図 7 NewGK の終了処理

delete TCPInfo

connection closed

connection closed

図 8 正式な終了処理○ ホスト認証機能
登録されている CN からの通信であり，証明した認証局が同じときのみ認証を突破することがわかった．この結果から，期待通りにホスト認証機能が動作していることが確認できた．
○ 設定済みルール保存機能
設定したルールがきちんとファイルに保存できていることを確認した．また，保存したファイルを読み出し，ルールの設定ができることも確認できた．
しかし，LOSS や NAT のルールの時は，再起動後に正常に通信制限を施すことができないという問題があることもわかった．これは，LossGenerater や NAT オブジェ
クトを保存できていないことが原因であると考える．

[2] 浅野 洋介: 大規模ネットワーク構築のための GINEの管理機能の追加, 修士論文, 南山大学 大学院 数理情報研究科 数理情報専攻 (2010).
[3] Free Software Foundation: Gnu common C++，
http://www.gnu.org/software/commoncpp/(accessed Aug. 2009)．
[4] 警察庁セキュリティポータルサイト＠ police: 平
成 21 年上半期におけるインターネット治安情勢,
http://www.cyberpolice.go.jp/detect/pdf/H kamihanki.pdf (accessed Aug. 2009)．
[5] 松永 龍太朗: 通信制限システムの Web 経由での安全な遠隔操作, 卒業論文, 南山大学 数理情報学部 情報通信学科 (2010).
[6] 中西 忠夫, 坂口 由佳: 段階的通信制限システムの拡張, 卒業論文, 南山大学 数理情報学部 情報通信学科(2009).
[7] Sugiyama, Y. and Goto, K.: Design and Implementation of a Network Emulator using Virtual Network Stack, Proc. of the Seventh International Symposium on Operations Research and Its Applications (ISORA2008), Lecture Notes in Operations
Research，Vol.8, pp.351-358 (2008).
[8] Viega, J., Messier, M. and Chandra, P.: OpenSSL
暗号・PKI・SSL/TLS ライブラリの詳細, オーム社,(2004).