ばぁど・うぉっちんぐ

セキュリティに強いWeb屋。自由と春を求めて羽ばたく渡り鳥。

このブログはGoogle Analyticsを利用しています

闇の魔術に対抗するための正攻法

どーも。ばぁどです。

ハリーポッターは好きよりの好きです。 2023年のビッグニュースとして、ハリーポッターが年末(12月31日)より、配信がされるとのことです!!! 2023年の年末と、2024年の年始はハリーポッター見ながら実家でまったりと過ごそうと思います。

Amazon Prime Video 12月は「スーパーマリオ」や「ハリポタ」など魔法ワールド11作 - AV Watch

さて、IT業界にはさまざま闇の魔術があります。 その闇の魔術一つが、プロジェクトに埋め込まれる致命的なバグや緊急性の高い脆弱性が埋め込まれやすくする方法というものがあります。 今回は、これらのバグや脆弱性が埋め込まれないための正攻法をご紹介します。

余計な開発をするな。既にあるものを使いなさい。

要は実業務において「車輪の再開発」は行わないようにしましょう、ということです。 人間はミスをする生き物です。どんなに完璧だと思っていても、開発規模が大きくなるとそこに含まれるバグは多くなるのが定石です。 既に作成されているライブラリがインターネット上にあるのであれば、そのライブラリを使いましょう。

世界中に優秀なエンジニアがいます。顔も知らない誰かですし、言語が通じるかもわかりません。それでも、世界中にはたくさんの優秀なエンジニアがおり、常に新しい便利なライブラリを開発し続けてくれています。

筆者が新人の時にカレンダーのUIで日付を選択したい場合に自前で実装しようとした時に、近くにいた先輩に便利なライブラリがあることを教えてもらって感動をした覚えがあります。

jqueryui.com

もちろんライブラリを使用する際は、バグがないかや、本当にセキュリティ的に安全なのか、脆弱性が埋め込まれていないかは確認する必要はありますが、一般的に利用頻度が多いことが確認されているライブラリであれば、基本的には問題ないと考えて良いと思います。

仮に、既に開発がされているライブラリがあるにもかかわらず、自前でそれらの機能を実装しようとすると、そこにはバグや脆弱性が含まれる温床となります。 もちろん、安全な開発をできる環境があり、ソースコードレビューを適切に行い、それらの関数の脆弱性チェックなどができ、万全の体制を整えることができるチームなら杞憂で終わると思います。 しかし、大半のプロジェクトチームは運用チームからの新しい要望や、サービス拡大に伴うシステム改修で手一杯なはずです。それらのライブラリに対して、莫大なコストを支払う余裕ないのであれば、大人しく既存のライブラリを使いましょう。

身の丈のあった技術選定を

技術選定はプロジェクト開発において非常に重要です。 プログラム言語を何にするか?使用するフレームワークは何にするか?クラウド技術はAWSにするかGCPにするか? さまざまな場面で判断が迫られます。

技術選定を行う際は、さまざまな事情を考慮して選定されるのですが、稀に「技術的なチャレンジをするために最新技術を用いた開発」を行うという名目上、新しい技術が採用される場合があります。 しかし、この挑戦的な技術選定は稀に大量のバグと脆弱性を埋め込む可能性があります。

メンバーが不慣れな技術だと、開発する際に遅延が発生する可能性はあり、技術仕様を把握しきれていないことからくるセキュリティバグが埋め込まれる可能性が上がります。

しかし新しい挑戦をしないと技術的な成長が止まってしまうということも事実です。 新しい技術に挑戦する際は、事前にメンバーにはチュートリアルを回すことを徹底したり、挑戦したい技術の入門書を買ったり、一人でも良いので熟練者をプロジェクトチームに入れるなど、むやみに挑戦するのではなく、ある程度のリスクヘッジをした上で、挑戦するのが良いと思います。

奇を衒わず、正攻法で行きなさい

プロジェクト開発は常に基本を疎かにしないことをお勧めします。 奇を衒って、設計したプロジェクトはたいていがバグや脆弱性の温床になることが多くあります。

例えば、サーバから値を返却してクライアント側で描画する際は、フレームワークのルールに従って実装することで大抵の脆弱性は考慮せ図にWebアプリケーションを開発することができます。 特にXSSなどの画面に描画する際に発火するような脆弱性であれば、フレームワークのルールに従って実装することで無害化(エスケープ処理)された状態で、画面に出力されます。 しかしフレームワークのルールに従わずに実装した場合は、これらのバグや脆弱性が埋め込まれる可能性が高まります。

他にもGETメソッドでリソースの更新を行なったり、何でもかんでもPOSTメソッドで実装したりするなど、本来の利用目的とは違う場合や、開発者が意図した使用方法ではない場合などは、大体設計の仕方が変だったり、仕様を達成するために少々無茶な設計をしていることも多くあります。

このような設計があった場合や、ソースコードがあった場合はバグや脆弱性の温床となります。 常に技術は正しく使い、常に用法用量をお守りください。

まとめ

少しでも世の中のプロダクトがセキュアになりますように。