Upload
vothuan
View
256
Download
1
Embed Size (px)
Citation preview
セキュアなソフトウェアをつくるために……
CERT コーディングスタンダードご紹介
JPCERT コーディネーションセンター
情報流通対策グループ リードアナリスト
戸田 洋三
2016年11月17日(木)
Copyright ©2016 JPCERT/CC All rights reserved.
http://www.tomo.gr.jp/root/e9706.html
JPCERT/CC 情報流通対策グループ リードアナリスト 戸田 洋三
脆弱性情報分析, セキュアコーディング普及啓発活動……
に努めています
2
自己紹介
書籍「C/C++セキュアコーディング」、「CERT C セキュアコーディングスタンダード」、
「Java セキュアコーディングスタンダード」など
Codezine 連載
「実例で学ぶ脆弱性対策コーディング」
atmarkIT 連載
「もう一度知りたい、セキュアコーディングの基本」
Copyright ©2016 JPCERT/CC All rights reserved. 3
JPCERT/CC の主な活動
Copyright ©2016 JPCERT/CC All rights reserved.
JPCERT/CC の活動
重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信 早期警戒情報
海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運用支援 CSIRT構築支援
脆弱性情報ハンドリング
未公開の脆弱性関連情報を製品開発者へ提供し、対応依頼
関係機関と連携し、国際的に情報公開日を調整 セキュアなコーディング手法の普及 制御システムに関する脆弱性関連情報の適切な流通
マルウエア(不正プログラム)等の攻撃手法の分析、解析 アーティファクト分析
各種業務を円滑に行うための海外関係機関との連携 国際連携
インシデントの予測と捕捉 インシデント予防 発生したインシデントへの対応
制御システムに関するインシデントハンドリング、情報収集・分析発信 制御システムセキュリティ
日本シーサート協議会、フィッシング対策協議会の事務局運営等 国内外関係者との連携
マルウエアの接続先等の攻撃関連サイト等の閉鎖等による被害最小化
攻撃手法の分析支援による被害可能性の確認、拡散抑止
再発防止に向けた関係各関の情報交換及び情報共有
インシデントハンドリング (インシデント対応調整支援)
情報収集・分析・発信 定点観測(TSUBAME)
ネットワークトラフィック情報の収集分析 セキュリティ上の脅威情報の収集、分析、必要とする組織への提供
4
Copyright ©2016 JPCERT/CC All rights reserved.
JVN: Japan Vulnerability Notes
5
https://jvn.jp/ http://jvndb.jvn.jp/
Copyright ©2016 JPCERT/CC All rights reserved.
脆弱性の数
実際の数は不明
脆弱性の共通識別子 (CVE) が割り振られたものは米国 NIST
が データを提供している (2015年は6488件)
6
https://nvd.nist.gov/ の statistics から
Copyright ©2016 JPCERT/CC All rights reserved.
セキュアなソフトウェア開発
7
セキュアデザイン
動的コード解析
セキュアな実行環境
静的コード解析
デザイン コーディング テスト 実行
セキュアコーディングスタンダード
セキュアコーディングスタンダード
Copyright ©2016 JPCERT/CC All rights reserved.
プログラミング言語Cの問題
8
C言語の精神: プログラマを信頼し、やりたいことができるように 言語仕様には未規定、未定義、処理系定義事項が存在する
言語仕様の詳細を知らないプログラマが 未定義動作などの問題のあるコードを書き、 脆弱性を作り込む
セキュアなコードを書くための 道しるべ・ガイドラインが必要!
Copyright ©2016 JPCERT/CC All rights reserved.
GNU coding standards
https://www.gnu.org/prep/standards/
FLEX SDK coding conventions and best practices
https://sourceforge.net/adobe/flexsdk/wiki/Coding%20Conventions/
Zend Framework PHP 標準コーディング規約https://framework.zend.com/manual/2.4/en/ref/coding.standard.html
組込みソフトウェア開発向けコーディング作法ガイド[C言語版]
https://www.ipa.go.jp/sec/publish/tn13-001.html
The NetBSD source code style guide http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=HEAD
コーディングスタイル
Developer’s Guide to oracle Solaris 11 Security
Appendix A (Secure Coding Guidelines for Developers)
https://docs.oracle.com/cd/E26502_01/html/E29016/scode-1.html
などなど…
JPL Institutional Coding Standard for the C Programming Language
http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
MISRA C:2012
Guidelines for the Use of the C Language in Critical Systems
コーディング規約
Google Style Guides
https://github.com/google/styleguide
ガイドラインって?
9
Programming Style
https://en.wikipedia.org/wiki/Programming_style
Copyright ©2016 JPCERT/CC All rights reserved. 10
https://www.securecoding.cert.org/
CERT (セキュア)コーディングスタンダード集
Copyright ©2016 JPCERT/CC All rights reserved.
セキュアコーディングスタンダード
11
セキュアなソフトウェアをつくる ためのコーディングガイドライン集
- 攻撃可能な脆弱性を作り込まない - コードの保守性向上 = プログラマが理解しやすい = 移植性向上
対象: ソフトウェア開発やメンテナンスに携わる人々
Copyright ©2016 JPCERT/CC All rights reserved.
- コンパイラ作者向けでなくCプログラマ向け
-第一目的: 今後の開発に役立つガイドライン =第二目的: 既存のレガシーコードのメンテナンスに役立つ ガイドライン
- できるだけOSや実行環境に依存しない = 環境依存な方法に言及する場合、おもに POSIX(Unix)およびWindowsにおけるコード例を示す
- C99およびC11に基づく
12
CERT C コーディングスタンダード
Copyright ©2016 JPCERT/CC All rights reserved. 13
CERT (セキュア)コーディングスタンダード集
https://www.securecoding.cert.org/
Copyright ©2016 JPCERT/CC All rights reserved.
開発に携わる人々
14
CERT Secure Coding Initiative 言語仕様関係者、コンパイラベンダ、開発者など、 多様な人々を含むコミュニティベースでの議論と開発
CMU/SEI CERT division のWikiサイト上で開発中 https://www.securecoding.cert.org/
実際に発見された脆弱性を反映 商用ソースコード解析ツールも対応 Coverity, Fortify, Klocwork, LDRA, ...
JPCERT/CC にて日本語版を提供
https://www.jpcert.or.jp/sc-rules/
https://www.jpcert.or.jp/java-rules/
Copyright ©2016 JPCERT/CC All rights reserved.
セキュアコーディングスタンダード日本語版
15
https://www.jpcert.or.jp/sc-rules/
Copyright ©2016 JPCERT/CC All rights reserved.
セキュアコーディングスタンダード日本語版
16
https://www.jpcert.or.jp/sc-rules/ https://www.jpcert.or.jp/java-rules/
Copyright ©2016 JPCERT/CC All rights reserved.
GNU Coding Standards との比較
17
GNU Coding Standards - GNUシステムをクリーンに、一貫性のある、 インストールしやすいものにするため ("to make the GNU system clean, consistent, and easy to install")
- ポータブルで頑丈で高信頼性なプログラムを書くためのガイドにもなる ("also be read as a guide to writing portable, robust, and reliable programs")
CERT C セキュアコーディングスタンダード - C を使う全ての人のために - 攻撃に使われるような脆弱性を作り込まないようにするためのガイドライン ポータブル、頑丈、高信頼性と重なる部分あり
Copyright ©2016 JPCERT/CC All rights reserved.
MISRA-C:2012 との比較
18
MISRA-C:2012 (Guidelines for the use of the C language in critical systems) - 組み込みや重要インフラ系システムにおけるC使用に関するガイドライン - 安全性、移植性、信頼性向上のため - C90およびC99に基づく
CERT C セキュアコーディングスタンダード - OSや実行環境などを特定せずC を使う全ての人のために - 脆弱性をつくりこまないように → 安全性、移植性、信頼性と重なる
- C99およびC11に基づく
MISRA-C:2012 ルール数: 143 (義務10, 必須101, 推奨32)
CERT C コーディングスタンダード カテゴリ数: 17 ルール数: 306 (必要120, 推奨186)
Copyright ©2016 JPCERT/CC All rights reserved.
CERT C と国際標準化
ISO/IEC TS 17961
C Secure Coding Rules
—CERT C セキュアコーディングスタンダードをベースに国際標準化されたセキュアコーディングルール集
ルール:検出(diagnose)されるべきコーディング
— 例: “Accessing an object through a pointer to an incompatible type
(other than unsigned char) shall be diagnosed”
根拠(rationale):言語仕様書の典拠
違反コード例
19
JTC1/SC22/WG14 - C
コンパイルは通っても安全な動作が保証されないケースをまとめた言語仕様書の副読本
参考: ISO/IEC TS 17961 C Secure Coding Rules (https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=140705863)
Copyright ©2016 JPCERT/CC All rights reserved.
まとめ
20
SEI CERT コーディングスタンダード
—セキュアなソフトウェアをつくるためのコーディングガイドライン集
—C, Java, C++, Perl, Android
—解説、違反コード例、適合コード例
想定読者層: ソフトウェア開発やメンテナンスに携わる人々一般
日本語版もあるから活用してね!
—https://www.jpcert.or.jp/sc-rules/
—https://www.jpcert.or.jp/java-rules/
Copyright ©2016 JPCERT/CC All rights reserved.
セキュアコーディングに関するお問合せ、インシデント対応のご依頼は
21
JPCERTコーディネーションセンター
—Tel:03-3518-4600
—https://www.jpcert.or.jp/
セキュアコーディングに関するお問い合わせ
—Email:[email protected]
—https://www.jpcert.or.jp/securecoding/
インシデントの報告
—Email:[email protected]
—https://www.jpcert.or.jp/form/