未検証入力
データ型とセキュアコーディング
このブログではどのように”データ型”の概念とセキュアコーディングが関連しているのか、Webサーバーアプリを主体に説明します。 セキュアコーディングの基本を理解している必要がありますが、難しくはないです。原則を知っているだけで十分です。セキュアコーディングの10原則は次の通りです。 第1 入力をバリデーションする第2 コンパイラの警告に用心する第3 セキュリテ…
ソフトウェアに入力バリデーションは必要ない 〜 ただし条件付きで
「ソフトウェアには入力バリデーションは必要ない」そんな事がある訳けないだろう?!いつも言っている事と真逆でしょ?!と思うでしょう。 しかし、「入力バリデーションが必要ないソフトウェア(=コード)」は沢山あります、条件付きですが。 (さらに…)
MITREがCWEを大幅更新 〜 セキュアコーディング対応を強化 〜
CWEはセキュアなソフトウェア開発を行う開発者にとっては欠かせない情報源です。2019年1月3日にCWE (Common Weakness Enumeration - 共通脆弱性タイプ) 3.2が公開されました。大幅更新と言える内容になっています。 この更新を一言で言うと「セキュアコーディング対応の強化」でしょう。 (さらに…)
エラーと例外とセキュアコーディング/セキュアプログラミング
エラーと例外の使い方は異なります。エラーより例外が推奨されていますが、これはセキュアコーディング/セキュアプログラミングの考え方とも関連しています。この辺りを整理してみます。 (さらに…)
マイクロサービスアーキテクチャーのSSRF問題とセキュアコーディング
Webシステムアーキテクチャーとしてマイクロサービスを利用しているケースは随分増えていると思います。従来から一般的に見られるWebアプリの作り方をすると、マイクロサービスではSSRF問題が簡単に発生します。 2017年版OWASP TOP 10ではA10 Insufficient Logging and Monitoringを新しく追加しました。一言でいうと…
コードで学ぶセキュアコーディング 〜 SQLインジェクション編
セキュアコーディング原則において、インジェクション対策の為に重要な原則は 原則1: 全ての入力をバリデーションする原則7: 全ての出力を無害化する の2つです。これらに、一般的なプログラミング原則であるフェイルファースト原則とフェイルセーフ原則、ゼロトラストを適用するとセキュアコーディングになります。 簡単なSQLインジェクション対策コードを使ってセキュアコ…
遅すぎるサニタイズではダメな例
PostgreSQL 11がリリースされました。このリリースでto_number()、to_char()、to_date()、to_timestamp()関数の仕様が変更されました。これらは名前の通り入力を変換する関数です。その際に サニタイズ - ダメな形式のデータを使える/安全なデータ形式に変換する を行います。保存されるデータ形式は、保存可能な形に変換…
究極のセキュリティ要求事項とは?
前のブログでリスク分析について書きました。リスク分析方法を書く前にセキュリティ要求について書きます。ISO 27000では6つのセキュリティ要素が情報セキュリティに必要であるとしています。 Confidentiality - 機密性Integrity - 完全性Availability - 可用性Reliability - 信頼性Authenticity -…
無視されているリスク分析
炎上プロジェクトの主な原因の1つに、システム要求定義が不明確であること、があります。何を作ったらよいのか、よく分らない状態で作って上手く行くのを願うのは、サイコロを振るのと変りありません。 これと同じことが情報セキュリティ対策でも起きています。 致命的な脆弱性が残っているシステムの主たる原因の1つに、セキュリティ要求定義が不明確、ならまだよいのですがセキュリ…
Railsのリモートコード実行脆弱性、今昔
去年、今年とStruts2、Drupalのリモートコード実行脆弱性が問題になりました。記憶に新しい方も多いと思います。Railsにもリモートコード実行脆弱性が複数レポートされており、Railsユーザーであればよくご存知だと思います。 ざっと思い付く昔の脆弱性から最近の脆弱性まで簡単にまとめてみます。 (さらに…)