DoS(denial of service)攻撃とはサービス妨害攻撃のことで,一般的に大量のパケットを送りつけるものであることは既にご存知だろう。SIP(session initation protocol)/VoIP(voice over IP)といった音声を扱う世界でも,同じような攻撃が存在する。SIPやRTPといった特定のプロトコルを使うアプリケーションを攻撃するものから,回線容量を超えるようなメッセージ量やパケット・サイズを送りつけるものなどその攻撃手法は様々だ。

 DoS攻撃自体はインターネットの世界では古くから存在している攻撃であり,これに対する防御方法もよく知られている。インターネットに接続されている環境では機器の種別によらず,いつでも起こり得る攻撃である。にもかかわらず,VoIP/SIPエンティティ(機器)はDoS攻撃を想定していない製品が多い。

三つに分かれる攻撃方法

 VoIP/SIP機器では,大きく分けて3つの攻撃手法が考えられる。以下で説明していこう。

(1)SIPポートを狙ったDoS攻撃

 攻撃の手法としては非常にシンプルである。SIPメッセージを作りUDPに載せる。例えば「5060/udp」など,SIPで使われているポートに送出するだけである。

 今まで確認されたSIPメッセージによるDoS攻撃には,大規模なものは知られていない。だが,Webサーバーを狙ったHTTPリクエストでのDoS攻撃の場合,数万~数十万/秒もの大量のリクエストが送りつけられた例もある。第1回の記事に書いた通り,こうしたWebサーバー向けの悪意のあるツールがSIP用に転用されつつあり,VoIP/SIP機器も十分攻撃対象となる。

(2)RTP/RTCP使用ポートを狙ったDoS攻撃

 この攻撃手法自体はあり得るものの,現状はほとんどないと言っていいだろう。RTP/RTCPはVoIP/SIP機器の機種によって,使われているポート番号が異なる。通常は発着信から通話の間だけ該当するポートは開かれており,それ以外はDoS攻撃を受けても影響はない。

 ただし,通話している最中に該当するポートが狙われれば,SIPのポートよりもずっと脆弱である。RTPはその名称(real-time transport protocol)の通り「リアルタイム」で処理する必要があるため,防御機能は具備されていないものが多い。今のところ問題はなさそうだが,危険性は認識しておいた方がよいだろう。

(3)ICMPやL3/L4レイヤーを使ったDoS攻撃

 これらは古くから存在する攻撃手法であるため詳細は省くが,前述の通りこうした低レイヤーに対する攻撃で動作不良を起こすVoIP/SIP機器は,筆者の経験上多い。また,VoIP/SIP機器に限らず,IPアドレスの範囲全体に攻撃をしてくるケースもあり,この中でVoIP/SIP機器の挙動だけがおかしくなった,という例も過去に経験している。

DoS攻撃を防ぐ対策

 送出されるメッセージ量やパケット・サイズにもよるが,SIPサーバーやゲートウエイなどはアプリケーション上での対策だけでは不足する場合がある。例えば,回線容量を超えるパケット・サイズのICMP DoS攻撃を受けた場合,攻撃を受けているVoIP/SIP機器自体がダウンしていなくても,電話の発着は不可能になる。また,そこまで帯域を圧迫しなくても,音声は遅延に敏感であるため,ブツブツ途切れたりする。

 このため,DoS攻撃への対処は多段階で考える必要がある。基本的な考え方は,出来るだけ攻撃を受ける可能性のある機器から遠いところ,あるいは出来るだけ低いレイヤーで処理することが望ましい。ここでは3段階で考える。番号が若いほど効果が高いが,(1)は運用で変更する必要があるのに対し,(2)と(3)はある程度固定的に設定しておけばよい。これらを組み合わせて防御すると効果的である。

(1)ネットワークで必要な対処

 前述した通り,回線容量を超えるDoS攻撃は,VoIP/SIP機器側では一般的に制御できない。VoIP/SIP機器がダウンしなくても(ダウンしないように作る必要はあるが),ネットワーク帯域が消費されつくされれば,通信は不可能だからである。このような攻撃には,より攻撃元に近い機器で止めるしかない。具体的には機器が接続されているL2スイッチやL3スイッチで,アクセス・コントロール・リストなどを使って攻撃元IPアドレスによる通信を遮断することが有用だ。

(2) VoIP/SIP機器(低レイヤー)

 加入者を収容しているSIPサーバーやSBC(セッション・ボーダー・コントローラ)以外,不特定多数と通信する必要のあるVoIP/SIP機器はそれほど多くはない。このような機器は,アクセス・コントロール・リストを使ってポート毎に通信先を限定しておけばよい。

 不特定多数の機器と通信する場合でも,通信相手のネットワーク・レンジ,またはパケットのサイズを見て,SIPパケットとして大きすぎるもの,小さすぎるものを遮断するなどして(Linuxでのiptablesなどを使う),出来るだけ限定した方がよい。

 (1)のアクセス・コントロール・リストでの対処がブラック・リスト的な対処であるのに対して,例えばSIPサーバーのIPアドレスとポートを指定するホワイト・リスト的な運用をすることで,新たな攻撃元が出来ても特に運用の手間をかけずにすむ。

(3)VoIP/SIP機器のアプリケーション・レイヤー

 結論から言うと,VoIP/SIP機器自身の処理能力以上に,呼の状態を保持しないようにすべきである。筆者の経験では,DoS攻撃が止んだ後も,数十分から長いものでは数時間呼処理が受け付けられない状態が続く製品が存在した。受け付けたリクエストを一生懸命処理しようとするのは分かるが,INVITEを受けて数十分も後にレスポンスが返されても,送信側はリクエストを送出した状態を既に終えているため対処できない。

 一般的にはこうした負荷が大きい場合は,「5xxレスポンス」を返送する。ただし,返送するのは,まだ少し余裕のある負荷の場合のみとし,負荷がさらに上がった場合は返送しない方がよい。レスポンスを返送しない場合は再送を受けるため,通信状況だけ見るとメッセージ数は多くなり処理が重くなっているように見える。だがあえて返送しないことで,DoS攻撃が止んだ後に,SIP/VoIP機器が速やかに復帰して使えるようになる。この方が音声を扱うシステムとしては,筆者の経験から運用上は適していることが多い。

 我々が今までコンサルティングなどで実施してきた各VoIP/SIP機器対する模擬攻撃では,DoSアタックへの対処がきちんとなされていないことが多かった。メーカーやVoIPサービス・プロバイダは,処理限界の少し上の負荷をかける試験はしているが,処理限界の数十倍~数百倍といった負荷を想定した試験はあまり実施していないのが現状である。

 そもそも前者の負荷試験は,処理能力を測定するための試験であるのに対し,後者はDoS攻撃を受けても大丈夫かという観点での試験であり,その目的は異なる。特にインターネットへのアクセスが可能なネットワークに置かれるようなVoIP/SIP機器は,低レイヤーだけでなく,SIPなどアプリケーション・レイヤーについてもDoS攻撃の模擬攻撃試験を実施すべきである。

 管理されたネットワークに設置され,外部からのアクセスがない0AB~J番号を使ったサービスの場合,これまで説明してきたような問題はほとんど発生しない。一方で,オープンな環境に設置するゲートウエイや端末,サーバーなどは日ごろからこうした危険があることを念頭に置いて,必要な設定や対策を講じてほしい。

 最後に,国内ではあまりニュースになっていないが,APEC(アジア太平洋経済協力)のテレコミュニケーション・ワーキング・グループで,“APEC TEL VoIP Security Guidlines”がまとめられている(参考URL:http://apecsecurity.com/Home/tabid/36/Default.aspx)。正直筆者はAPECでこのような活動をしていることを知らなかった。オーストラリアと韓国がメインでガイドラインを作成し,マレーシアと米国が協力しているようだ。このドキュメントは,技術的にはそれほど深くないが,VoIPにかかわる背景から,リスクの種類までよくまとまっている。英語だが興味ある方は是非見てほしい。

杉岡弘毅 (すぎおかこうき)
ネクストジェン ネットワークセキュリティ本部長
ネクストジェン起業時から参加し,SIP関連のシステム検証やSEなどに従事した後,現在はセキュリティ関連調査や技術開発に従事している。