このコラムでは,コンピュータ・システムの「要塞化」や,システムとネットワーク・トラフィックの監視と監査について何度か解説している。これらの必要性については,多くの読者が同意するところであろう。今回のコラムでは,ネットワーク・トラフィックの監視に着目する。特に,ファイアウオールなどで通過を許可しているプロトコルに隠された,悪意あるトラフィックについて解説したい。なぜなら,こういったトラフィックを監視することが最も困難だからだ。

攻撃は隠されるものと心得よ

 まずは,悪意のあるトラフィックを発生させる「攻撃者」について考えてみよう。現在,攻撃者は以下の2通りに大別できる。

(1)何らかの手段で,外部から組織の内部ネットワークに侵入する攻撃者
(2)組織内部の攻撃者

 一般的に「攻撃者」というと,まず(1)が思い浮かぶだろう。そのため,(1)については,多くのシステム管理者が対策を施しているはずだ。しかし,(2)についてはどうだろうか。「机を並べる同僚は信頼に値するだろうか」,「組織内で作業を共にするパートナ企業の人間は信頼できるだろうか」,「自分に指示を与えている上役に,二心はないのだろうか」---。疑い始めると際限はないので,(2)の対策については,特に施していないのが現状ではないだろうか。

 しかし,それほど心配する必要はない。(1)であろうが,(2)であろうが,攻撃者であることには変わりなく,その行動パターンに大きな相違はない。管理者としては,その行動パターンを把握して,対策を講じればよいのだ。

 それでは,その行動パターンとはなんだろうか。当然,彼らは捕まりたくない。そのために,できるだけ検知されにくい攻撃を仕掛けるのである。その最たるものが,通常のトラフィックに隠された攻撃である。管理者はこれを見抜いて,その攻撃からシステムを守らなければならない。

“中身”が判断しにくいトラフィックに隠す

 攻撃者は攻撃を検知されにくくするために,その“中身”が不正であるかどうかを,すぐには判断できないようなトラフィック中に,悪意あるトラフィックを忍ばせる。判断が難しいトラフィックとしては,例えば「Loki」*と呼ばれるプログラムが作成する,ICMP(Internet Control Massage Protocol)やUDP(User Datagram Protocol)の秘密チャネルが挙げられる。HTTP(Hypertext Transfer Protocol)あるいはSMTP(Simple Mail Transfer Protocol)を利用したトンネリングもその一例である。また,暗号化されたトラフィックもすぐには判断できないものの一つである。

*「LOKI ICMP tunneling back door」「Projeto Loki (ICMP Tunneling)」などを参照のこと。

 以下,Loki や HTTP トンネリングなどを使って,どのように悪意あるトラフィックの隠すのか,その詳細について解説する。

ICMPを隠れ蓑(みの)にする

 Lokiは,クライアント/サーバー型のバックドア・プログラムである。何らかの手段で「Lokiサーバー」を攻撃対象のコンピュータにインストールすれば,「Lokiクライアント」を用いて,リモートから攻撃対象のコンピュータを操作できてしまう。

 このプログラムは,クライアントとサーバー間の通信に「ICMP echo request」と「ICMP echo reply」のパケットを利用する。そのため,一見すると,正常なpingのやり取りに見える。しかし,注意深く観測すれば,そのトラフィックには,Lokiクライアントが送るコマンドと,Lokiサーバーからの出力が隠されていることに気付くだろう。pingによるトラフィックと,Lokiのトラフィックとでは,明らかに異なる点が複数存在するからだ。

 pingのトラフィックには,以下の特徴がある。

  • トラフィックは ICMP echo request から始まり,それに対応する ICMP echo replyが1つだけ存在する
  • パケットのシーケンス番号は,ICMP echo requestを送信するたびに,特定の値が加算される
  • パケット内のデータ部分に格納されるダミー・データには規則性があり,対になるICMP echo request と ICMP echo reply は,同一のダミー・データを持つ

 一方,Loki によるトラフィックには,以下の特徴が観測されている。

  • 最初のパケットが ICMP echo requestではなく,ICMP echo replyである
  • シーケンス番号が固定されている
  • ダミー・データには規則性がなく,あるUNIXコマンドとその出力と思われる,特定のテキスト・データが含まれている

 Loki以外にも,ICMPを“隠れ蓑”に使うツールとしては,DDoS(分散サービス妨害)のエージェント・ソフトウエアが挙げられるだろう。Loki同様,ICMPパケットを利用してコマンドのやり取りを行う。

 Lokiには上記のような特徴があると述べた。しかし,シーケンス番号が固定されてなかったり,ダミー・データが一定ではない亜種も存在している。そのため,上記の特徴だけで検出することは困難な場合もある。この種のトラフィックの監視と解析については,今後さらに智恵を絞る必要があるだろう。

ステートレスTCPチャネルを隠れ蓑にする

 システム管理者ならばご存知のように,企業で導入されているファイアウオールは,そのほとんどがICMPトラフィックを遮断している。そのため,LokiのようにICMPを悪用することは難しいのが現状だろう。そこで,「stcpshell.c」というツールが考え出された。このツールはバックドアの原型と呼べるもので,“完成度”は低い。しかし,以下に述べるような攻撃が可能であることを示すのには十分である。

 stcpshell.cは,コネクションを確立することなくTCPパケットを送信する。コネクションの開始に際しては,SYNパケットを送信せず,セッションのTCPフラグも設定しない。すなわち,「ステートレスなTCPチャネル」を開くのである。このチャネルを使って攻撃用パケットを送られた場合には,単にトラフィックを監視しているだけでは,不正なものかどうかを判断することは困難だ。コネクションの状態を監視対象とするIDS(侵入検知システム)を使用しない限り,攻撃を検出することは難しい。

 とはいえ,stcpshell.c自身はデータを暗号化する機能を備えていない。また,パケットを受信するたびに新しいrawソケットをオープンするため,膨大な痕跡を残すことになる。また,既に仕込まれたstcpshell.cを悪用するには,特別なデータや認証を必要とする。これらが,「完成度が低い」と述べた理由である。

 しかしながら,これらの欠点は“暗い情熱”により,近い将来修正されるに違いない。他のクラッキング・ツールがそうであったように。

HTTPを隠れ蓑にする

 現在では,Webアクセスを監視する企業や組織は増えている。例えば,学校においては,コンテンツ・フィルタリングを実施して,アダルト・サイトなどへのアクセスを制限しているところもあるだろう。

 しかし,増えているとはいうものの,実際にはどの程度の企業や組織がWebアクセス(HTTP)を監視しているかを考えると,筆者は少々悲観的にならざるを得ない。そしてそれが,攻撃者の狙い目となる。攻撃をHTTPに隠すのである。

 HTTPトンネリングを悪用する場合も,他のプロトコルを悪用する場合と同様に,クライアント/サーバー型をとる。攻撃対象とするコンピュータに,悪意があるHTTPサーバーを仕込み,それに対して,専用のHTTPクライアントからコマンドなどを送信する。

 実際には,攻撃者は自身のコンピュータ(ローカル)からHTTPクライアントへコマンドなどのデータを送信する。そのHTTPクライアントからは,攻撃対象に仕込まれているHTTPサーバーへ,通常のHTTPに見せかけた通信を行う。

 データを受信したHTTPサーバーは,攻撃対象のコンピュータ内のデーモン・プログラム(「telnetd」である場合が多い)にリダイレクトする。

 つまり,悪意があるHTTPクライアント/サーバー・プログラムを経由することで,攻撃対象にTelnetなどでアクセスすることが可能になるのだ。もちろん,直接root権限(管理者権限)でログインすることは難しい。しかし,一般ユーザーとしてでもログインさえしてしまえば,権限を昇格できるセキュリティ・ホールを悪用することで,root 権限を奪取することはそれほど難しくはない。

 上記のようなトラフィックには,通常のHTTPトラフィックと異なり,以下の特徴を持つ。

  • HTTP のGETリクエストの対象パスが一定
  • HTTPリクエスト内に,HTTPでは定義されていないコマンドを含む
  • 通信内容に,シェルやコマンドからの出力が含まれる

 これらの特徴は,注意深くトラフィックを観察していれば検知できる。しかし,HTTPのトラフィック自体を監視していない組織が多い現状では,こういった攻撃を“成功”させてしまうケースが多いと予想される。

◇     ◇     ◇     ◇     ◇     ◇

 今回挙げた例のほかには,任意のプロトコルにおいて,将来の拡張を考えて予約されているビットを利用して通信を行うバックドアも確認されている。このように,既存のプロトコル設計の“隙間”を悪用して,不正なトラフィックを隠蔽しようとする攻撃は後を絶たない。

 では,通常のトラフィックに隠された攻撃を見つけ出すためにはどうすればよいだろうか。残念ながら,以下のような“当たり前”の手段しか取れないのが現状である。

  • 許可されたプロトコル以外のプロトコルを禁止する
  • 許可されたプロトコルのトラフィックを監視する
  • 複数の地点でトラフィックを監視する
  • 詳細にトラフィックを監視する

 万全の対応策は存在しない。ネットワーク・トラフィックのより効果的な監視技術の研究や開発が待たれる。


坂井順行(SAKAI Yoriyuki)
株式会社ラック 不正アクセス対策事業本部
sakai@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。