「バッファーオーバーフロー攻撃」は、コンピュータプログラムの典型的な誤りである「バッファーオーバーフロー」を悪用した、ソフトウェアシステムに対する攻撃手法です。
「バッファー」とは、プログラムの実行に必要なデータの一時的なメモリ上での置き場のことです。「オーバーフロー」とは「あふれる」ことです。感覚としては、水槽の容量を上回る量の水を入れたら部屋が水浸しになってしまいます。これと似たようなことがソフトウェアでも起きてしまうということです。
通常、バッファーは大きさを指定して確保します。例えば「ユーザーIDは10文字までだから10文字分」などです。ここに、プログラム上の誤りで、10文字以上のデータを書き込んでしまうと、バッファーの後ろにあるデータが書きつぶされてしまい、いろんな不具合が生じます。これがバッファーオーバーフローです。
バッフォオーバーフローによって起きる事象とその対策についてご紹介します。
最も可能性が高い攻撃は、データが単に意図しない値に書き換えられることでプログラムの実行に失敗する(停止する)ことですが、プログラムそれ自体もデータとしてメモリ上に配置されているので、巧妙にデータを細工して意図的にバッファーオーバーフローを引き起こすことでプログラムの改竄もできてしまうかもしれません。
また、データの格納状況を推察できれば「ユーザー権限を管理者権限に昇格する」などのことも可能です。「バッファーオーバーフロー攻撃」ではこのように非常に危険な攻撃が可能になります。
データのサイズを常に意識し、確実に適切なサイズのバッファーを確保し、またデータ書き込み前にサイズをチェックできるような実装を行うことです。静的解析ツールではこのようなチェックを自動で行えます。
JavaやJavaScript、PHP、Pythonなど現代的な多くのプログラミング言語では、バッファーの大きさを自動で調整する機構が備わっているため、バッファーオーバーフローの脅威は減っているといえます。しかしながら、ハードウェアやOSといった「低レイヤー」の操作を行うには、C/C++のようなバッファーを自己管理する言語が必要であり、そのため多くのライブラリやプログラミング言語処理系、ミドルウェアはバッファーオーバーフローの可能性があります。
クラウドであればマネージドサービスの利用により、こういった周辺ソフトウェアの管理を委託することも有効です。
お見積り・ご相談など、お気軽にご相談ください
サイトTOPへ