狠狠撸

狠狠撸Share a Scribd company logo
5分で解る
セキュアコーディング
エレクトロニック?サービス?イニシアチブ
? 氏名: 大垣 靖男
? SNS:yohgaki(FB/G+/TW)
? https://blog.ohgaki.net/
? yohgaki@ohgaki.net
? https://www.es-i.jp/
? エレクトロニック?サービス?イニシアチブ
有限会社 代表取締役社長、
PostgreSQLユーザー会 理事、
PHP技術者認定 顧問、
BOSSCON CTO、岡山大学大学
院 非常勤講師
? Webシステム開発のコンサルティング、
テクニカルサポート、セキュリティ検査
など
? PHPコミッター
2017/7/8? Electronic Service Initiative, Ltd. 2
セキュアコーディング
?セキュアプログラミングとも呼ばれる
?古くは防御的プログラミングと呼ばれる
?攻撃可能なコードはセキュアコーディングを行っ
ていない
?論理的に正しい設計+仕様的に正しいコード
2017/7/8? Electronic Service Initiative, Ltd. 3
セキュアコーディングの目的
?攻撃されないコード
?“確実”に正しく動作するコード
? Electronic Service Initiative, Ltd. 2017/7/8 4
一般的に安全(とされる)コードの論理
? プログラムの処理(ロジック)は正しい物と
する
? プログラムが正常動作する必要十分条件
? 命題p プログラムが正常動作する
? 命題q プログラムの出力が正しい
? p ? q かつ q ? p
? 一見正しいが、 「出力先で不正な操作が行
われない」を満たすだけでは「プログラムが正常
動作する」とは言えない
? 「数値IDのHTML出力箇所に”
<script>alert(‘xss’)</script>”が
表示」
? 「電話番号に“or 1=1; --”が保存」
これら明らかに正しくない
2017/7/8? Electronic Service Initiative, Ltd. 5
現在、一般的なセキュリティ対策が意味する
「出力が正しい」は「出力先で不正な操作が行われない」
という狭い意味で使われることが多い
セキュアコーディングの基盤論理
? プログラムの処理(ロジック)は正しい物と
する
? プログラムが正常動作する必要十分条件
? 命題p プログラムが正常動作する
? 命題q プログラムの入力と出力が正しい
? p ? q かつ q ? p
? 「数値IDのHTML出力箇所
に”<script>alert(‘xss’)</script>”が表
示」「電話番号に“or 1=1; --” が保存」され
ることはない
2017/7/8? Electronic Service Initiative, Ltd. 6
正しい入力と正しい出力が
正しいコード実行の必要十分条件
セキュアコーディングと脆弱性対策
セキュア
コーディング
脆弱性
対策
2017/7/8? Electronic Service Initiative, Ltd. 7
一般に攻撃可能な
脆弱性と言われるモノ
実際はセキュリティ対策はより広
い概念で、セキュアコーディング
より広い範囲のセキュリティ対策
となる
セキュリティ対策
出力 出力攻撃 出力出力出力
脆弱性対策だけでセキュアにならない理由
2015/5/30 8
入力 入力入力入力入力
処理 処理 処理 処理 処理
処理 処理 処理 処理
処理 処理 処理 処理 処理
処理 処理 処理 処理
今のアプリの作り方は
「不正な入力」を受け入
れるので、攻撃可能経路
を見つけるだけでOK
※ 出力などの不備で簡単に攻撃可能!
しかも「処理」は改修、
アップグレードなどで常に
変化?変更
セキュアなコードのアーキテクチャー
入力 (HTML/JavaScript/JSON/データベース/OS/WebAPIなど)
入力処理
ロジック処
理
出力処理
出力 (HTML/JavaScript/JSON/データベース/OS/WebAPIなど)
アプリケーション
入力処理
ロジック処
理
出力処理
入力処理
ロジック処
理
出力処理
モジュール 関数?メソッド
信頼境界外の入力から
不正な入力を完全に排除
信頼境界線
正しく動作するロジックを
セキュアコーディング標準
として定義
2017/7/8? Electronic Service Initiative, Ltd. 9
信頼境界内からの
出力を完全に無害化
攻撃不可
正しく動作するアプリの作り方
2015/5/30 10
入力 入力入力入力入力
処理 処理 処理 処理 処理
処理 処理 処理 処理
処理 処理 処理 処理 処理
処理 処理 処理 処理
信頼境界線で厳格
にバリデーション
未知の場所で、安
全な処理をしてい
ない場合でも、不
攻撃可能に
信頼境界線
※ 入力バリデーションで対応できる場合、出力コードに問題があった場合も緩和
出力の安全性は出力コードの責任
信頼境界線
出力 出力出力出力
よくある(時々見かける?)間違い
?入力バリデーションはできない!
?入力バリデーションはセキュリティ対策とは言え
ない!
?入力バリデーションはセキュリティ対策として脆
弱で問題のある対策!
2017/7/8? Electronic Service Initiative, Ltd. 11
これらは論理的にあり
得ない認識
コードが正常動作しない入力受入れは厳禁
不正な
入力値
入力ミス
の入力値
正しい
入力値
入力バリデーション
エラーの入力値は
「拒否すべき入力」
仕様上、あり得ない入力
入力ミスの入力値は
「受け入れるべき入力」
仕様上、あり得る入力
入力値には右の三種類しかない
入力バリデーションエラーと
入力ミスエラーの違いは明白
だが、区別ができないケース
も時々見かけるので注意!
2017/7/8? Electronic Service Initiative, Ltd. 12
攻撃者の攻撃方法と防御方法
13
入力 入力入力入力入力
処理 処理 処理 処理 処理
処理 処理 処理 処理
処理 処理 処理 処理 処理
処理 処理 処理 処理
信頼境界線で
不正な入力
を完全に排除
信頼境界線
信頼境界線
出力 出力出力出力
信頼境界線で
出力を完全に
無害化
※ 入力として妥当かつ安全でも「出力として安全」とは限らない
セキュアコーディング
標準で安全性を確保
※ 実際のアプリでは脆弱な処理も残る(参考:契約プログラミング)
攻撃者はありとあらゆ
る方法で不正な入力を
インジェクション
攻撃者はありとあらゆ
る方法で不正な出力を
インジェクション
セキュアなソフトウェアのアーキテクチャー
2017/5/20? Electronic Service Initiative, Ltd. https://es-i.jp/ 14
入力 (HTML/JavaScript/JSON/データベース/OS/WebAPIなど)
入力処理
ロジック処
理
出力処理
出力 (HTML/JavaScript/JSON/データベース/OS/WebAPIなど)
アプリケーション
入力処理
ロジック処
理
出力処理
入力処理
ロジック処
理
出力処理
モジュール 関数?メソッド
信頼境界線
信頼境界線はセキュリティの
基礎の基礎だが、多くのソフ
トウェアであまり意識されて
いない
【セキュリティ対策の基本概念】
? 信頼境界とは信頼する部分とそ
れ以外に分ける境界
? 信頼境界ではセキュリティ対策
(入力?出力対策)を行う
? セキュアコーディング標準で入
力?ロジック?出力の間違いを
防止する
セキュアコーディング標準
? ゼロトラスト、ホワイトリスト
正しい入力処理
? エスケープ、エスケープが不必要なAPI、バリデーション
正しい出力処理
? 変数処理、セッション管理、認証?認可、暗号など
正しいロジック
コーディングのベストプラクティスと
アンチプラクティス、
セキュアコーディング標準は
環境に合わせて作る物!
2017/7/8? Electronic Service Initiative, Ltd. 15
参考資料
? CERT TOP 10 Secure Coding Practices
? CERT Secure Coding Standard(C/C++/Java/Android/Perl)
? OWASP Secure Coding Practices – Quick Reference Guide
? その他:契約プログラミング(契約による設計)、OWASP SAMM
2017/7/8? Electronic Service Initiative, Ltd. 16
CERT TOP 10 Secure Coding Practices
1. 入力をバリデーション
7. 出力を無害化
10. セキュアコーディング標準を確立
入力処理が最優先
出力処理が7番目
標準確立が最後
2017/7/8? Electronic Service Initiative, Ltd. 17
CERTが見た今のソフトウェアセキュリティ
2017/7/8? Electronic Service Initiative, Ltd. 18
CERTが見た今のソフトウェアセキュリティ
2017/7/8? Electronic Service Initiative, Ltd. 19
今のソフトウェアは境界
防御が無いに等しい
セキュアコーディングで最も重要な入力対策
? CERT, ISO, NIST, MITRE, SANS, OWASP
などのセキュリティ専門家集団は長年に渡り入力対策
をソフトウェアセキュリティ対策の最重要項目として啓
蒙している
? しかし、現実はほとんどのアプリケーションには入力対
策が無いか、在っても不十分
2017/7/8? Electronic Service Initiative, Ltd. 20
お問い合わせ先
記載事項は予告なく変更される場合がございます。
最新情報はお問い合わせください。
2017/7/8? Electronic Service Initiative, Ltd. 21
http://www.es-i.jp/
info@es-i.jp
エレクトロニック?サービス?イニシアチブ有限会社
岡山県総社市西坂台228
TEL: 0866-90-2131 FAX: 0866-90-2133

More Related Content

5分で解るセキュアコーディング

Editor's Notes

  1. (さらっと流す)