21
セキュアなソフトウェアをつくるために…… CERT コーディングスタンダードご紹介 JPCERT コーディネーションセンター 情報流通対策グループ リードアナリスト 戸田 洋三 20161117()

セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

  • Upload
    vothuan

  • View
    264

  • Download
    1

Embed Size (px)

Citation preview

Page 1: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

セキュアなソフトウェアをつくるために……

CERT コーディングスタンダードご紹介

JPCERT コーディネーションセンター

情報流通対策グループ リードアナリスト

戸田 洋三

2016年11月17日(木)

Page 2: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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 連載

「もう一度知りたい、セキュアコーディングの基本」

Page 3: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved. 3

JPCERT/CC の主な活動

Page 4: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

JPCERT/CC の活動

重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信 早期警戒情報

海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運用支援 CSIRT構築支援

脆弱性情報ハンドリング

未公開の脆弱性関連情報を製品開発者へ提供し、対応依頼

関係機関と連携し、国際的に情報公開日を調整 セキュアなコーディング手法の普及 制御システムに関する脆弱性関連情報の適切な流通

マルウエア(不正プログラム)等の攻撃手法の分析、解析 アーティファクト分析

各種業務を円滑に行うための海外関係機関との連携 国際連携

インシデントの予測と捕捉 インシデント予防 発生したインシデントへの対応

制御システムに関するインシデントハンドリング、情報収集・分析発信 制御システムセキュリティ

日本シーサート協議会、フィッシング対策協議会の事務局運営等 国内外関係者との連携

マルウエアの接続先等の攻撃関連サイト等の閉鎖等による被害最小化

攻撃手法の分析支援による被害可能性の確認、拡散抑止

再発防止に向けた関係各関の情報交換及び情報共有

インシデントハンドリング (インシデント対応調整支援)

情報収集・分析・発信 定点観測(TSUBAME)

ネットワークトラフィック情報の収集分析 セキュリティ上の脅威情報の収集、分析、必要とする組織への提供

4

Page 5: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

JVN: Japan Vulnerability Notes

5

https://jvn.jp/ http://jvndb.jvn.jp/

Page 6: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

脆弱性の数

実際の数は不明

脆弱性の共通識別子 (CVE) が割り振られたものは米国 NIST

が データを提供している (2015年は6488件)

6

https://nvd.nist.gov/ の statistics から

Page 7: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

セキュアなソフトウェア開発

7

セキュアデザイン

動的コード解析

セキュアな実行環境

静的コード解析

デザイン コーディング テスト 実行

セキュアコーディングスタンダード

セキュアコーディングスタンダード

Page 8: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

プログラミング言語Cの問題

8

C言語の精神: プログラマを信頼し、やりたいことができるように 言語仕様には未規定、未定義、処理系定義事項が存在する

言語仕様の詳細を知らないプログラマが 未定義動作などの問題のあるコードを書き、 脆弱性を作り込む

セキュアなコードを書くための 道しるべ・ガイドラインが必要!

Page 9: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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

Page 10: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved. 10

https://www.securecoding.cert.org/

CERT (セキュア)コーディングスタンダード集

Page 11: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

セキュアコーディングスタンダード

11

セキュアなソフトウェアをつくる ためのコーディングガイドライン集

- 攻撃可能な脆弱性を作り込まない - コードの保守性向上 = プログラマが理解しやすい = 移植性向上

対象: ソフトウェア開発やメンテナンスに携わる人々

Page 12: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

- コンパイラ作者向けでなくCプログラマ向け

-第一目的: 今後の開発に役立つガイドライン =第二目的: 既存のレガシーコードのメンテナンスに役立つ ガイドライン

- できるだけOSや実行環境に依存しない = 環境依存な方法に言及する場合、おもに POSIX(Unix)およびWindowsにおけるコード例を示す

- C99およびC11に基づく

12

CERT C コーディングスタンダード

Page 13: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved. 13

CERT (セキュア)コーディングスタンダード集

https://www.securecoding.cert.org/

Page 14: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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/

Page 15: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

セキュアコーディングスタンダード日本語版

15

https://www.jpcert.or.jp/sc-rules/

Page 16: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

Copyright ©2016 JPCERT/CC All rights reserved.

セキュアコーディングスタンダード日本語版

16

https://www.jpcert.or.jp/sc-rules/ https://www.jpcert.or.jp/java-rules/

Page 17: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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 を使う全ての人のために - 攻撃に使われるような脆弱性を作り込まないようにするためのガイドライン ポータブル、頑丈、高信頼性と重なる部分あり

Page 18: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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)

Page 19: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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)

Page 20: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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/

Page 21: セキュアなソフトウェアをつくるために CERT コー … · セキュアなソフトウェアをつくるために…… cert コーディングスタンダードご紹介

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/