IoT時代のセキュリティ対策に必須 – ISOでも定義する入力バリデーションの方法

Computer, PHP Security, Security 2月 7, 2015
(Last Updated On: 2018年8月4日)

項目を切り出して独立したブログエントリにしておく方が良いと思い書きました。IoT時代(IoT時代でなくてもですが)に最も必要なセキュリティ対策は厳格な入力バリデーションです。

  • IoTソフトウェアのバージョンアップは非常に困難、不可能である場合も多い
  • ソフトウェアには未知の危険性が存在している

セキュリティ対策としの入力バリデーションはIoTでは更に厳格に行う必要があります。

IoT時代のセキュリティ対策として入力バリデーションが強化が必要なのは、クラウドやレンタルサーバーサービスでWAFを導入する必要性が高いことと同じ理由です。これらのサービス業者はIoTと同様にソフトウェアをバージョンアップすることが非常に困難です。入力バリデーションを強化するのはソフトウェアのバージョンアップより更に困難です。このため、効率悪くや確実な防御が困難なWAFであっても導入しているサービスが多いです。

IoTデバイスを作る場合、非常に厳格な入力バリデーションを行うべきです。

参考:Onion Omega

本来、現在のISO 27000を紹介するべきですが元のブログは敢えて古い標準を使いたかったのでISO 17799を紹介しています。基本的な部分は変わっていません。

ISO 17799の入力バリデーション

入力バリデーションはセキュリティ仕様です。ISOやJISでもそのように記述されています。

セキュリティ仕様もアプリケーション仕様の一つです。随分前から国際標準規格として採用されていることを明らかにする為にISO 27000の前身であるISO 17799から紹介します。ISO 17799はJIS X 5080の国内規格としても採用されています。

10.2.1 入力データの妥当性確認
業務用システムに入力されるデータは、正確で適切であることを確実にするために、その妥当性を確認することが望ましい。業務取引処理(transaction)、常備データ(名前、住所、信用限度、顧客参照番号)およびパラメタ(売価、通貨交換レート、税率)の入力を、検査することが望ましい。次の管理策を考慮することが望ましい。
a) 次の誤りを検出するために二重入力又はその他の入力検査。
1) 範囲外の値
2) データフィールド中の無効文字
3) 入力漏れデータまたは不完全なデータ
4) データ量の上限及び下限からの超過
5) 認可されていない又は一貫しない制御データ
b) その妥当性及び完全性を確認するために重要なフィールド又はデータファイルの内容の定期的見直し
c) 入力データに認可されていない変更があるかとうかについての紙に印刷した入力文書の点検
d) 妥当性確認の誤りに対応する手順
e) 入力データのもっともらしさを試験する手順
f) データ入力過程に携わっているすべての要員の責任を明確に定めること

備考:ISO 17799のセクション10にはセキュアなプログラム開発に役立つ良い指針が記述されています。是非、一度読んでみてください。(ISO 17799は古いのでISO 27000を参照することを推奨)

ISO 17799の基となったBS 7799 (英国のJISのような規格)が銀行などの業務システムに対するセキュリティ対策として作られたので、このような記述になっていますがアプリケーション一般に適用できるセキュリティ対策です。

「あなたの作っているアプリケーションは業務システムではないので、国際セキュリティ標準規格に書いてあっても実装しなくても構いません」とセキュリティ専門家が顧客にアドバイスするのは問題です。「あなたの作っているアプリケーションは業務システムではないですが、国際セキュリティ標準規格に書いてあるように入力バリデーションの実装をお薦めします」とアドバイスすべきなのがセキュリティ専門家ではないでしょうか?

またBS 7799が想定していた「業務アプリケーション」を明確に区別することにも意味はあまりありません。Webサイトでサービスを提供している会社にとってはWebアプリも業務アプリケーションです。

 

入力バリデーションと入力エラー

入力バリデーションでは「あり得ない入力」をアプリケーションでは受け付けない処理、つまり処理を継続できない致命的な問題として処理します。

  • テキストフィールドなのにテキスト以外の文字がある
  • テキストなのに文字エンコーディングが想定外だったりエラーがある
  • 最大でも1KBサイズの入力なのに1KB以上の入力がある
  • 特定の形式(電話番号など)なのに形式が異る

これらは入力バリデーションエラーになります。

入力エラーでは「あり得る入力」で「ユーザーの入力ミス」などを処理します。

  • 電話番号なのに000-000-0000が入力されている
  • 仮名入力のフィールドに漢字が入っている
  • 名前入力のフィールドに数字が入っている
  • 郵便番号に対して住所がおかしい

これらは入力ミスによる入力エラーとなります。

アプリケーションを作る時には入力バリデーションエラーとユーザーの入力ミスによるエラーは区別して作ると分かり易いです。

 

まとめ

IoT時代に開発者が先ずすべきセキュリティ対策は入力バリデーションです。

セキュリティの概念についてもう少し知りたい方は標準と基本概念から学ぶ正しいセキュリティの基礎知識もどうぞ。

投稿者: yohgaki