サーバー攻撃手法:コマンドインジェクション攻撃について

今回はサーバーの攻撃手法についてです。サーバーを攻撃しましょう、という話ではなく、こういった攻撃があるので気を付けましょう、気に留めておいてください、という話です。

例えばウェブサイトに文字を入力する箇所があるとしましょう。ネットショッピングやサービスへのログインなどでは必ず入力する箇所(テキストボックス)がありますね。
そのテキストボックスは●●と数字を入力すると、「●●才です。」とただ表示するだけのものだとしましょう。24と数字を入力すれば「24才です。」と表示する。

世界には色々な人がいまして、ここに文字を入力したりする。
【数字を入力して下さい】→【天】→【天才です。】としてみたり、
【数字を入力して下さい】→【まだまだ青二】→【まだまだ青二才です。】としてみたり。
【数字を入力して下さい】→【昔々あるところにおじいさんとおばあさんが住んでいました。おじいさんは山へ芝刈りに、おばあさんは川へ洗濯に行きました。おばあさんが川で洗濯をしていると、川上から大きな桃がどんぶらこ、どんぶらこと流れてきたとき、おばあさんはちょうど80】などと、とんでもない入力をしたりします。

テキストボックスには数値しか入れてほしくないので、そもそものプログラムとして、数値以外は受け付けないというプログラムにしないといけません。数値以外を入力したときはエラーメッセージを表示させて「数字を入力してください」のような表示を設ける。
また、数値の上限下限を設けて、それ以外をはじく。

先ほどの物語のくだりは、お遊びではなく、意図的にエラーを起こしサーバーを乗っ取るなどという攻撃手法となります。プログラムは入力された箇所を「変数」という文字に置き換えますが、この「変数」はプログラム時に桁を決めておきます(整数型や長整数型など)。それを超えた値が入った場合、サービスが停止したり、予期せぬ動作をすることがあります。場合によってはサーバー内部への侵入を許しかねません。予めそのような不測の動作を狙ってテキストボックスなどに特殊な入力をすることをインジェクション攻撃(コマンドインジェクション攻撃)、といいます。

予め想定された値以外をはじく、という処理をバリデーションといいます。(特にこの場合は数値でないものをはじく場合に使います)そのほかに、エクセルなどにあるように「=、イコール」であるとか、「$、ドルマーク・ダラーマーク」であるとかは特殊な意味を持ちますので、プログラムによって持っている特殊な意味を持つ記号を全角に変換するとか、別の文字に置き換えることも必要になります。これをエスケープや、サニタイジングと言います。色々なインジェクション攻撃がありますが、バリデーションやサニタイジングを含めたセキュアプログラミングを行うことで、これらの攻撃を予防することが可能です。

サーバー攻撃手法:サービス停止攻撃(DoS攻撃)について

今回はサーバーの攻撃手法についてです。サーバーを攻撃しましょう、という話ではなく、こういった攻撃があるので気を付けましょう、気に留めておいてください、という話です。
結論から言うと、対策を取るには大掛かりな話になります。

インターネット上にウェブサーバーについてですが、私たちがアクセスするとほんの少し、サーバーの処理が発生するため、負荷がかかります。パソコンで「F5」キーなどを押すと更新機能が働き、サーバーにもう一度表示処理を依頼することになり、負荷がかかります。
例えば「F5」キーを見えないくらいの速さで連打する。えーと、私のページでやるのはやめてください。すると、まぁ、机上の空論ですが、サーバーには相当の負荷がかかります(実際にそれでダウンするサーバーはありません)。こういうイメージのことを行ってサーバーをダウンさせる、あるいはサービスを提供できなくする攻撃、Denial of Service、通称DoS攻撃と言います。

もっと凶悪な(というかこちらが一般的ですが)方法が、複数のコンピューターなどの端末にウイルスを仕込んで置き、あらかじめ管理下に置いておきます。これをゾンビ化といいますが、ゾンビ化された端末は知らず知らずのうちにコントロールされ、命令と同時にサーバーを攻撃する。分散型サービス停止攻撃です。Distributed Denial of Serviceといい、DDoS攻撃と言われます。

以前、嫌いな人や有名人宛てに同時に出前が届くようにした事件が報じられていました。夕方6時頃とかにピザ、蕎麦、ラーメン、寿司などが同時に届く。これがDDoS攻撃に似てますね。1箇所のピザ屋から20枚のピザが届くのはDoS攻撃ですかね。

私も以前ゾンビ化していたことがありまして・・・プロバイダーからの連絡で分かったのですが、なんとNASAを攻撃していた模様です。
その後はちゃんとセキュリティ対策ソフトを入れて、しっかりやっています・・・NASAごめん・・・

DoS攻撃を受けないようにする対策はありません。受けないようにするには例えばCDN(Contents Delivery Network)サービスの導入を行い、自分のサーバー(オリジンサーバー)に直接アクセスが来るようにするのではなく、別の複数サーバーにコンテンツを常時コピーするように置き、複数台体制を取る方法などがあります。

また、IPSなど攻撃検知のサービスを導入し、通常とは異なるアクセスを検知した場合には直ちに遮断するなどの方法もあります。