9月9日午前から起こった広範囲なSIPポートへの攻撃(IP電話に無言電話が着信する現象が多発,原因はインターネット上からの不正攻撃)は,日本でのVoIPシステムに対する攻撃として,大きく報道され広く知られることとなった。

身近に発生したSIPの攻撃

 この問題は,現象としては無言電話ととらえられているが,筆者は実はもっと大きな問題が潜んでいると考えている。前回(SIPスタックの実装の未熟さを突く攻撃(前編))から説明している“ファジー”なSIPメッセージが到達しているのだ。

 今回の事例では,SIPのINVITEリクエストがブルガリアやマレーシアから送出されている。これらのヘッダーには,一般的なSIPメッセージの数倍の長さのパラメータが見つかっている。このため,古いVoIP端末やゲートウエイでは無言電話の着信処理ではなく,ダウンしているものもあると考えられる。多くのSIPエンティティは自動的に再起動するため,通話中でなければエンドユーザーは問題があったことに気が付かない。たとえ途中で切れたとしても,ほとんどのSIPエンティティは20~40秒程度で再起動されるため,かけ直している際には既に復旧しており,ユーザーは気が付かないという状況だと推測している。

 いずれにせよ,今回の事例はどちらかと言えばまだ“おとなしい”攻撃だ。初回(実はぜい弱なVoIP/SIPシステム)にも述べた通り,SIPメッセージはテキストベースで生成しやすい。そのため,今後こうした攻撃で使われるSIPメッセージの中身は,より過激になっていく可能性が十分ある。VoIP端末やゲートウエイのユーザーはファームウエアの最新版が出ているかを確認し,アップデートしておくべきだ。さらに,機器ベンダーは,以下のような攻撃パターンに耐えうるかの検証を進めていただきたい。

問題が発生しがちなメッセージ内容

 筆者が勤めるネクストジェンのテスターでは,試験項目を以下の7種類に分類している。下記の例ではINVITEリクエストのFrom行における種類をそれぞれ一例ずつ載せているが,問題となる文字列の挿入個所,文字種,挿入先ヘッダー,メソッド種別を変えることにより,現在テスターに添付している試験項目は150万パターン以上存在する。

 蛇足だが,当初の試験項目は最初250万程存在した。だが,これでは1コールずつ試験していく必要があるSIP端末に対しては,一通り試験を終えるのに1カ月弱もの間自動試験をし続けなければならない。このため,効率よく問題を見つけるために,省略できると考えられる項目は割愛し,一方で今まで見つけてきた問題と類似の試験パターンを追加しながら現在の項目数になっている。

パターン1:特殊文字列の挿入
 ヘッダーのトークンの前後,およびトークン中にバッファオーバーフローなどの問題を起こす可能性のある文字列を挿入する。挿入文字列としては,数値(整数値のサイズを超えるもの)や記号類(半角の記号類),空白文字列(改行や半角スペース,タブ),プログラミング言語で意味を持つ文字列(”%s”,や”\n”など)を用いる。図1で例を示す。

図1●特殊文字の挿入例(Fromヘッダへ“%s”を挿入)

パターン2:header-valueの繰り返しや削除
 ヘッダー名のコロン以降を繰り返した文字列を挿入する。繰り返し回数を変えて,1つのヘッダ出現パターンから複数の改変ヘッダを作成する。図2で例を示す。

図2●ヘッダーの中身の繰り返し例(Fromヘッダを繰り返し10回)