BitVisor 内蔵の lwip で Alkanet ログの送信を試みる 命館 学システムソフトウェア研究室 下雄也, 明 修平, 瀧本栄, 利公 1
はじめに (1/4) 近年, マルウェアが増加しており, マルウェアの脅威が問題となっている マルウェアの脅威に対抗するためには, 多数のマルウェアを迅速に解析する必要がある システムコールトレーサ Alkanet Windows 上で動作するマルウェアを対象とし, マルウェアが発 したシステムコールのログ (Alkanet ログ ) を作成 VMM である BitVisor ベース アンチデバッグ機能を持つマルウェアでもスレッド単位で短時間にトレース可能 勇, 瀧本栄, 齋藤彰, 利公 : マルウェア観測のための仮想計算機モニタを いたシステムコールトレース 法, 情報処理学会論 誌, Vol.55, No.9, pp.2034 2046 (2014). 2
はじめに (2/4) Alkanet によるトレースでは,IEEE 1394 ケーブルを いる IEEE 1394 の問題点 柔軟な端末の構成が難しい (1) Windows (2) (4)SIGINT Alkanet (3)Alkanet IEEE 1394 Linux (5) (6)Alkanet 3
はじめに (3/4) 前スライドで述べた問題を解決するため, Ethernet 版 Alkanetを提案 (1) Windows (2) (4)SIGINT (3)Alkanet Alkanet (Ethernet) Ethernet Linux (5) IEEE 1394 (6)Alkanet 4
はじめに (4/4) 本発表では,Ethernet 版 Alkanet の開発を進める中で得られた知 について発表する NIC の隠蔽設定や送信に特化した lwip のチューニングによる性能差 lwip を いて複数のパケットを送信する場合, ARP を考慮する必要がある 5
使 する TCP/IP プロトコルスタック Ethernet 経由での Alkanet ログ送信を実現するためには, TCP/IP プロトコルスタックが必要 現 の BitVisor には,TCP/IP プロトコルスタック lwip が移植されている lwip を いて, Ethernet 経由での Alkanet ログ送信機能を実装 lwip (lightweight IP) 組込みシステムを対象とした TCP/IP プロトコルスタック 設計 標 : メモリ等のリソース使 量を可能な限り削減する 6
各種設定による送信性能の差 7
送信スループットの計測 lwip が, どれほどの送信性能を持っているか調べるため, 送信スループットの計測を った 以下の 6 つを対象に, 計測を った プロトコル NICの隠蔽設定 データサイズ /pkt 送信バッファサイズ (TCP, ip) TCP net=ip 536B 1072B (tuned TCP, ip) TCP net=ip 1460B 65535B (TCP, ippass) TCP net=ippass 536B 1072B (tuned TCP, ippass) TCP net=ippass 1460B 65535B (UDP, ip) UDP net=ip 1472B (UDP, ippass) UDP net=ippass 1472B 8
送信スループットの計測 lwip が, どれほどの送信性能を持っているか調べるため, 送信スループットの計測を った 以下の 6 つを対象に, 計測を った プロトコル NICの隠蔽設定 データサイズ /pkt 送信バッファサイズ (TCP, ip) TCP net=ip 536B 1072B (tuned TCP, ip) TCP net=ip 1460B 65535B (TCP, ippass) TCP net=ippass 536B 1072B (tuned TCP, ippass) TCP net=ippass 1460B 65535B (UDP, ip) UDP net=ip 1472B (UDP, ippass) UDP net=ippass 1472B 9
NIC の隠蔽設定 BitVisor は,NIC をゲスト OS に対して隠蔽する機能を持っている net=ip: NIC を隠蔽する net=ippass: NIC を隠蔽しない NIC を隠蔽するか否かが, 送信性能にどの程度影響を与えるのか知りたい NIC の隠蔽設定を計測対象に加えた 10
送信スループットの計測 lwip が, どれほどの送信性能を持っているか調べるため, 送信スループットの計測を った 以下の 6 つを対象に, 計測を った プロトコル NICの隠蔽設定 データサイズ /pkt 送信バッファサイズ (TCP, ip) TCP net=ip 536B 1072B (tuned TCP, ip) TCP net=ip 1460B 65535B (TCP, ippass) TCP net=ippass 536B 1072B (tuned TCP, ippass) TCP net=ippass 1460B 65535B (UDP, ip) UDP net=ip 1472B (UDP, ippass) UDP net=ippass 1472B 11
TCP のチューニング lwip は, チューニング の #define 定数マクロを多数 意している チューニングを うことで, どの程度 速になるのか知りたい 以下の 2 つのチューニングを った tuned TCP を計測対象に加えた MSS を 536B から 1460B に変更 (TCP_MSS) TCP が持つ送信バッファのサイズを 1072B から 65535B に変更 (TCP_SND_BUF, TCP_SND_QUEUELEN, MEMP_NUM_TCP_SEG) 12
送信スループットの計測 lwip が, どれほどの送信性能を持っているか調べるため, 送信スループットの計測を った 以下の 6 つを対象に, 計測を った プロトコル NICの隠蔽設定 データサイズ /pkt 送信バッファサイズ (TCP, ip) TCP net=ip 536B 1072B (tuned TCP, ip) TCP net=ip 1460B 65535B (TCP, ippass) TCP net=ippass 536B 1072B (tuned TCP, ippass) TCP net=ippass 1460B 65535B (UDP, ip) UDP net=ip 1472B (UDP, ippass) UDP net=ippass 1472B 13
計測環境 項 値 VMM BitVisor 1.4 ゲスト OS CPU メモリ NIC Debian 8.6 (Linux 3.16.0-4.amd64) Intel (R) Core(TM) i5-2320 CPU @ 3.00GHz 4GB Intel Corporation PRO/1000 PT Dual Port Server Adapter (1Gbps) 1 パケットあたりのデータサイズ 1460B (TCP),1472B (UDP) 1 実験あたりの合計送信データサイズ 100MB 実験回数 5 回 14
計測 法 (1)dbgsh を いて, 送信 関数を呼び出す Debian BitVisor (2) パケット 100MB 送信 Ethernet ケーブル Ubuntu (3)sys_now() を いて, 全パケットの送信に要した時間を計測 送信した合計バイト数と送信に要した時間から送信スループットを算出 5 回計測し, その平均値を結果とする 15
計測結果と考察 (TCP, ip) (tuned TCP, ip) (TCP, ippass) (tuned TCP, ippass) (UDP, ip) (UDP, ippass) 138.3Kbps 21.2Mbps 33.8Mbps 874Mbps 953Mbps 981Mbps 0.0041 倍 0.024 倍 0.97 倍 特に,TCP の送信スループットが極端に低下する TCP は, ウィンドウサイズ以上のデータを送信する場合,ACK を待つ必要がある NIC を隠蔽することで,VM に割込みが らない ACK の受信処理を円滑に えないことが原因 16
計測結果と考察 (TCP, ip) (tuned TCP, ip) (TCP, ippass) (tuned TCP, ippass) (UDP, ip) (UDP, ippass) 138.3Kbps 21.2Mbps 33.8Mbps 874Mbps 953Mbps 981Mbps 153 倍 26 倍 チューニングに関する参考サイト Tuning TCP lwip Wiki Fandom powered by Wikia (http://lwip.wikia.com/wiki/tuning_tcp) Maximizing throughput lwip Wiki Fandom powered by Wikia (http://lwip.wikia.com/wiki/maximizing_throughput) 17
計測結果と考察 (TCP, ip) (tuned TCP, ip) (TCP, ippass) (tuned TCP, ippass) (UDP, ip) (UDP, ippass) 138.3Kbps 21.2Mbps 33.8Mbps 874Mbps 953Mbps 981Mbps Ethernet 版 Alkanetでは,(UDP, ip) を採 ロギング 端末への攻撃の対策 膨 なログを素早く送信する必要がある 有線なので, パケットロスは滅多に発 しない 18
ARP に関する問題 19
ARP に関する問題 ARP によるアドレス解決が完了する前に, 複数のパケットを送信しようとするとパケットの破棄が発 する 複数のパケットを送信する場合, ARP を考慮する必要がある 問題の原因と対策について述べる 20
lwip の送信処理の流れ lwip は, 以下の 順で送信処理を う 1. TCP or UDP ヘッダを作成 2. IP ヘッダを作成 3. ARP テーブルを検索 該当するエントリあり 4. Ethernet ヘッダを作成してパケットを送信 該当するエントリなし 4. ARP Reply 待ちキュー (ARP エントリ毎に存在 ) にパケットを 時的に格納 5. ARP Request を送信 6. ARP Reply 受信後,4 で格納したパケットを送信 21
ARP に関する問題の原因 キューサイズは 1 パケット分 パケット 2 enqueue パケット 1 パケット 1 は上書きされる ARP Reply 待ちキュー n パケット送信した場合, 1 番 から n-1 番 までのパケットは破棄される Ethernet 版 Alkanet では問題にならない 起動パケットを受信した段階で, アドレス解決が完了しているため 22
複数の TCP パケット送信 法 tcp_connect() を いることで,ARP アドレス解決や 3 ウェイハンドシェイクと同期が取れる err_t tcp_connect(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port, tcp_connected_fn connected) SYN パケットを送信する (ARP Request も送信 ) connected には, コネクション確 後に呼び出されるコールバック関数を指定可能 connected にデータ送信 関数を指定することで, 複数の TCP パケットを送信できる コネクション確 後には,ARP アドレス解決が完了しているため 23
複数の UDP パケット送信 法 TCP のように, コールバック関数で同期を取ることができない ARP に関して何かしらの対応は必要 1 パケット と 2 パケット の間に待機処理を れる lwip を拡張し,ARP Reply 受信時にコールバック関数が呼ばれるようにする ARP Reply 待ちキューのサイズを増やす ARP Reply 待ちキューのサイズの増やし ARP_QUEUEING を 1 に設定 MEMP_NUM_ARP_QUEUE にサイズを設定 ( パケット単位 ) 24
Ethernet 版 Alkanet の現状 基本的な機能については実装完了 Alkanet ログ送信機能 起動 / 終了パケット受信機能 Ethernet 版ログ取得ツール 今後は,Ethernet 版 Alkanet 上でマルウェアを動作させ, IEEE 1394 版 Alkanet と同様のログを取得できるか確認 25
おわりに Ethernet 版 Alkanet の開発を進める中で得られた知 について発表 NIC の隠蔽設定や lwip のチューニングによる送信性能の差 NIC を隠蔽すると, 特に TCP の送信スループットが極端に低下する lwip が提供するチューニング 定数を使 することで, 送信スループットの向上が可能 lwip を いて複数のパケットを送信する場合, ARP を考慮する必要がある TCP では, コールバック関数を いて解決可能 UDP では, これといった解決策が存在しない 26