文字列処理とセキュリティ

プログラム内で文字列処理を誤った際に引き起こされるセキュリティ上の問題としては、「バッファオーバーフロー」と「危険な文字列のチェック漏れ」に大別できます。もちろん、文字列処理によるセキュリティ問題の要因はこの2つだけではないでしょうが、この2つを防ぐことにより、多くの問題が対策できるのではないかと思います。

バッファオーバーフロー

多くのアプリケーションで発生しているバッファオーバーフローは、ほとんどの場合、アプリケション内で文字列およびそれを受け入れる変数の長さを適切に管理していないことに起因します。逆に言えば、文字列および変数の長さを適切に管理さえできれば、大半のバッファオーバーフローを防ぐことができます。
本稿に興味を示すような方にいまさらバッファオーバーフローのメカニズムや危険性を説明する必要はないでしょうし、最近ではバッファオーバーフローを防ぐ有用なツール類も増えてきていますので、本稿ではバッファオーバーフローを防ぐ手段よりも、どのような場合にバッファオーバーフローを起こしやすいかに重点を置いて説明しています。

危険な文字列のチェック漏れ

セキュリティを考慮しなければならないプログラムにとって、外部から入力された文字列のチェックというのは、基本中の基本であり、ほとんどのプログラムにおいて必須の行為だといえます。しかしながら、Unicode を扱う場合、外部からやってきた文字列を正確にチェックし、不適切な文字列をフィルタリングするためには、これまでの strcmp() のような単純なバイト列の比較だけでは不充分であり、Unicode 特有の事情を考慮しながらの各文字の適切なチェックが必要となります。