RYU'S IT Room

 IT関連ニュースなどの旬な情報をもとにインターネットやコンピュータ、情報通信技術などについてわかりやすく解説を進めます。

オープンソースOS「FreeBSD」のTCP処理に脆弱性

Sponsored Link

少し前ですが、FreeBSDのTCP処理に脆弱性が発見されたという記事を目にしました。不正パケットを受け取ると、ときにカーネルがクラッシュするんだそうで、ちょっと問題ですね。

また、この脆弱性は、現在サポートされているFreeBSDのリリースすべてについて影響を受けるということなので、FreeBSDを使ってサーバーを立てていらっしゃる方は、ちょっとチェックしておく必要がありそうです。

f:id:freedomlife:20140521103403j:plain

photo credit: FAndrey via photopin cc

 

そもそもFreeBSDってなあに

FreeBSDは、PC/AT互換機用のUNIX互換OSであり、1993年にNate Williams氏、Rod Grimes氏、Jordan K. Hubbard氏の3人によって開発が始まったことを起源としています。

皆さんはUNIX互換OSとして、Linuxという名前を耳にされたことがあるかもしれません。最近ではLinuxのシェアがとっても高いんですが、FreeBSDもまた、人気のあるUNIX互換OSのひとつといえます。PC/AT互換機用のUNIX互換OSということからおわかりになるように、Windowsが動作するPCなどにインストールして使うことができます。また、これ以外のプラットフォームにも移植されていることから、さらに広いスケーラビリティを実現していたりします。

また、FreeBSDは、BSDライセンスというライセンス体系に基づいて公開されていることから、GNUプロジェクトのGPLに基づいて公開されているLinuxよりも利用に関する自由度が高いというメリットもあります。このため、プロバイダなどで用いられたりしています。

さらに、FreeBSDは、比較的軽い動作が売りとなっていて、一昔前のPCやサーバーなどでも軽快に動作してくれるなんて特徴も持っています。

なお、FreeBSDには、BDSデーモン(BSD Daemon)というとってもかわいいマスコットがいたりするんですが、この人気はとっても高いんですね。まあ、最近ロゴとしては新しいデザインが登場していますけど、このBSDデーモンには、人気がいまだ存在します。

なお、FreeBSDの最新バージョンは2014年5月現在、10.0-RELEASEとなっています。

 

TCP処理ってどういう意味?

TCPをご理解いただくには、TCP/IPについて知っておいていただく必要があります。

TCP/IPとは、インターネットなどの現在のコンピュータネットワークで標準的に用いられている通信プロトコルなんですが、ようは、コンピュータ同士が情報をやり取りする上の決まりみたいなものだと考えていただければと思います。

人と人のコミュニケーションは、多くの場合会話によってなされますが、コンピュータ同士もまた、一定の決まりに則ったやりとりをすることで、情報をやり取りしているんです。で、このやり取りの方法や、通信の方法などがあらかじめ決められていて、これを採用することにより、どのようなPC同士でも、通信ができるようになっているわけです。

ちなみにTCP/IPは、この決まりのなかの代表的なプロトコルであるTCP(Transmission Control Protocol)とIP(Internet Protocol)を組み合わせたものなんですね。

で、IP(Internet Protocol)は、ネットワークを介した情報のやり取りにおいて、相手を一意に認識するための決まりであり、ちなみにIPアドレスについては、耳にされたことがあると思います。つまりこれはIPに則って決められたネットワーク上の住所であるわけです。

また、TCPとは、情報を実際にやり取りする際の決めごとといえます。

TCPにおいては、やり取りする情報を、一旦パケットと呼ばれる小さな情報の断片に分解してネットワーク上に送り出します。これを受けた相手は、パケットを元通り組み立てることで、受信を完了します。

じゃあ、なんでそんな面倒なことするかっていうと、断片にして送り出すことで、ひとりが大量の情報を送信したとしても、みんなが断片で小出しにパケットを送り出す決まりがあるので、ネットワークが占有されることがないんですね。つまり、みんなで使いましょって感じの情報のやり取りの技術なんですね。

 

TCP処理の脆弱性ってどういうこと?

では、実際にFreeBSDにおいて発覚したTCP処理の脆弱性について解説しますね。

TCPにおいては、やり取りする情報を、一旦パケットという単位に分割して、小出しに送出するという決まりがあることについて、先に説明しましたよね。

ということは、受信側では、小出しに届いたパケットを元通りに組み立てる必要があるわけですが、パケットには元通りに組み立てるために、番号がつけられているんです。ところが、この番号に矛盾が生じていたりすると、OSの核でもあるカーネルの部分が、バグによってクラッシュしちゃうんですね。つまり、動かなくなっちゃうわけです。これが発見されたわけです。

で、じゃあなんでそれが不味いかってこと何ですが、特定の不正パケットを送りつければ良いことがわかれば、その不正パケットを送出するツールを作って、FreeBSDが動作しているサーバに対して使えば、そのサーバーを停止状態に陥れることができちゃうことになるわけです。

つまり、標的になっちゃうわけですね。これってちょっとまずいですよね。

 

この脆弱性はどうやったら直るわけ?

方法はいくつかあります。すべてを解説するのはちょっと大事なのでここでは控えますが、イカの対応策がアナウンスされています。

 

1)この脆弱性が修正された、最新のソースコードを取得してビルドする

2)既存のシステムに、セキュリティアドバイザリーで紹介されているパッチを適用する

3)「freebsd-update」というツールを使ってシステムを更新する

 

また、上記の対策を講じることが難しいユーザーの場合は、ファイアウオールを利用した回避策もあるんだそうです。FreeBSDで、パケットフィルターを設定をすればよいとのことです。

つまり、脆弱性を直せないというユーザの場合は、その脆弱性を突いたパケットを検知して、これを受け付けないようにフィルタリングすることで、対応してくださいねっていうことですね。