脆弱性とは、なぜ発生するのか。

この業界にいると必ず付きまとう脆弱性、様々なものにありますがそもそも脆弱性ってなに?なんでなくならないの?
気になって調べたので軽くまとめていこうと思います!

●脆弱性とは

そもそも脆弱性とはコンピュータのオペレーティングシステム(OS)やソフトウェアにおける、セキュリティ上の欠陥(セキュリティ上のバグや弱点、考慮漏れ等の欠陥のこと)のことを呼び「セキュリティホール」とも言います。

●脆弱性はなぜ発生するの

そもそも開発時にしっかりしていれば起きないのでは?というのは前提として脆弱性の原因には主に次の様なものがあります。

①設計上の見落とし(ミス)
個人的に一番気を付けるが一番発生するイメージがあります、仕様の見落としなどでシステムの単体動作に問題は無いが外部連携が発生するとフローのチェック漏れなどから不正アクセスを受けたりする可能性があります。

②プログラムのコーディングミス
①と近しい内容ですがプログラムコードを入力していく段階で、誤って本来とは違うコードを入力してしまい一見設計通りに動いている(その実、コードは間違っていてセキュリティに不備がある)というケースだと、そのままリリースされてしまう可能性がある。

③想定外の動き
設計どおりの仕様でバグなどもなかったとしても、開発者の想定していないアクセス方法や、データの変更方法などがあったことが判明するというケースです。
攻撃者は、常にこうしたソフトウェアの「アラ」を探しています。

●対策するには

様々な要因から発生する脆弱性ですがどのような対応・対策を行えばよいのでしょうか。

OSやアプリケーションの更新の遅れをなくすために定期的な更新は不可欠です。最新のセキュリティパッチを適用することで、既知の脆弱性を迅速に修正し、システムの安全性を確保することができます。

対象がソフトウェアである場合は一時的に、または別の製品に乗り替えるなどして削除してしまうという方法もあります。
更新プログラムはユーザーから見れば無料ですが、開発側から見れば作成にかなりのコストを要するため、フリーソフトなどの場合は更新プログラムのリリースがかなり先になったり、そのまま放置されてしまったりすることがあります。
開発が終了したソフトウェアも同様で、そうしたケースには有効な手段といえるでしょう。

メーカー製品で脆弱性対応のプログラムの配布など告知を確認せず放置していたがために攻撃の標的にされるといったケースも珍しくありません。

今回は開発時における脆弱性について書きましたが運用上の脆弱性や管理上の脆弱性といったものも多く存在します。
その多くにいえるのは購入・導入・開発して終わりではなくこまめなメンテナンスや情報の確認が必要ということです。