Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CERT コーディングスタンダードご紹介 (OSC2017@Osaka)

535 views

Published on

OSC2017@Osaka での講演資料です.

Published in: Internet
  • Be the first to comment

CERT コーディングスタンダードご紹介 (OSC2017@Osaka)

  1. 1. セキュアなソフトウェアをつくるために…… CERT コーディングスタンダードご紹介 JPCERT コーディネーションセンター 情報流通対策グループ リードアナリスト ⼾⽥ 洋三 2017年1⽉28⽇(⼟)
  2. 2. Copyright ©2017 JPCERT/CC All rights reserved. 本⽇の話題 ü ⾃⼰紹介 ü セキュアコーディングスタンダードって? ü 中⾝を⾒てみよう ü コーディングスタンダードの活⽤ ü まとめ ü 参考情報など 2
  3. 3. Copyright ©2017 JPCERT/CC All rights reserved. http://www.tomo.gr.jp/root/e9706.html JPCERT/CC 情報流通対策グループ リードアナリスト ⼾⽥ 洋三 脆弱性情報分析, セキュアコーディ ング普及啓発活動…… に努めています 3 ⾃⼰紹介
  4. 4. Copyright ©2017 JPCERT/CC All rights reserved. JPCERT Coordination Center 日本における情報セキュリティ対策 活動の向上に取り組んでいる組織 4
  5. 5. Copyright ©2017 JPCERT/CC All rights reserved. 過去のOSC参加履歴 (セミナーを⾏ったもの) 5 •OSC2016@Hokkaido •OWASP ASVS と Cheat Sheet(日本語版)のご紹介 •OSC2015@Hokkaido •CSRF 脆弱性とその対策について •OSC2014@Fukuoka •Lessons (to be) Learned from Handling OpenSSL Vulnerabilities •OSC2013@Kyoto •~ヒトの振り見て我が振り直せ~脆弱性事例に学ぶJavaセキュアコーディング •OSC2012@Fukuoka •Androidセキュアコーディング~安全なAndroidアプリ開発のための心得~ •OSC2011@Nagoya: セキュアコーディングノススメ(JAVA編) •OSC2010@Hokkaido: あなたのコードにセキュアコーディングスタンダード •OSC2009@Fukuoka: セキュアコーディングノススメ •OSC2008@Tokyo/Spring: セキュアコーディングノススメ •OSC2007@Fukuoka: セキュアコーディングノススメ •OSC2007@Niigata: ソフトウェア脆弱性を取り巻く状況と対策 •OSC2007@Kansai: ソフトウェア脆弱性情報流通のこれまでとこれから •OSC2005@Tokyo/Fall: ソフトウェア脆弱性情報流通への取り組み
  6. 6. Copyright ©2017 JPCERT/CC All rights reserved. JPCERT/CC の活動 重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信早期警戒情報 海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運⽤⽀援CSIRT構築⽀援 脆弱性情報ハンドリング Ø 未公開の脆弱性関連情報を製品開発者へ提供し、 対応依頼 Ø 関係機関と連携し、国際的に情報公開⽇を調整 Ø セキュアなコーディング⼿法の普及 Ø 制御システムに関する脆弱性関連情報の適切な 流通 マルウエア(不正プログラム)等の攻撃⼿法の分析、解析アーティファクト分析 各種業務を円滑に⾏うための海外関係機関との連携国際連携 インシデントの予測と捕捉インシデント予防 発⽣したインシデントへの対応 制御システムに関するインシデントハンドリング、情報収集・分析発信制御システムセキュリティ ⽇本シーサート協議会、フィッシング対策協議会の事務局運営等国内外関係者との連携 Ø マルウエアの接続先等の攻撃関連サイト等の閉 鎖等による被害最⼩化 Ø 攻撃⼿法の分析⽀援による被害可能性の確認、 拡散抑⽌ Ø 再発防⽌に向けた関係各関の情報交換及び情報 共有 インシデントハンドリング (インシデント対応調整⽀援) 情報収集・分析・発信 定点観測(TSUBAME) Ø ネットワークトラフィック情報の収集分析 Ø セキュリティ上の脅威情報の収集、分析、必要 とする組織への提供 6
  7. 7. Copyright ©2017 JPCERT/CC All rights reserved.7 JPCERT/CC の主な活動
  8. 8. Copyright ©2017 JPCERT/CC All rights reserved. JPCERT/CC セキュアコーディングのコンテンツ 8 www.jpcert.or.jp/securecoding/
  9. 9. Copyright ©2017 JPCERT/CC All rights reserved. slideshare にも講演資料やセミナコンテンツ置いてます 9 www.slideshare.net/jpcert_securecoding/presentations
  10. 10. Copyright ©2017 JPCERT/CC All rights reserved. セキュアコーディングスタンダードって? 10
  11. 11. Copyright ©2017 JPCERT/CC All rights reserved. 脆弱性の数 実際の数は不明 脆弱性の共通識別⼦ (CVE) が割り振られたものは⽶国 NIST が データを提供している (2015年は6488件) 11 https://nvd.nist.gov/ の statistics から
  12. 12. Copyright ©2017 JPCERT/CC All rights reserved. JVN: Japan Vulnerability Notes 12 https://jvn.jp/ http://jvndb.jvn.jp/
  13. 13. Copyright ©2017 JPCERT/CC All rights reserved. セキュアなソフトウェア開発 13 セキュアデザイン 動的コード解析 セキュアな実⾏環境 静的コード解析 デザイン コーディング テスト 実⾏ セキュアコーディング スタンダード セキュアコーディング スタンダード
  14. 14. Copyright ©2017 JPCERT/CC All rights reserved. プログラミング⾔語Cの問題 14 C⾔語の精神: プログラマを信頼し、やりたいことができるように ⾔語仕様には未規定、未定義、処理系定義事項が存在する ⾔語仕様の詳細を知らないプログラマが 未定義動作などの問題のあるコードを書き、 脆弱性を作り込む セキュアなコードを書くための 道しるべ・ガイドラインが必要!
  15. 15. Copyright ©2017 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 ガイドラインって? 15 Programming Style https://en.wikipedia.org/wiki/Programming_style
  16. 16. Copyright ©2017 JPCERT/CC All rights reserved.16 SEI CERT (セキュア)コーディングスタンダード集 https://www.securecoding.cert.org/
  17. 17. Copyright ©2017 JPCERT/CC All rights reserved.17 CERT (セキュア)コーディングスタンダード集
  18. 18. Copyright ©2017 JPCERT/CC All rights reserved. CERT コーディングスタンダード 18 セキュアなソフトウェアをつくる ためのコーディングガイドライン集 - 攻撃可能な脆弱性を作り込まない - コードの保守性向上 = プログラマが理解しやすい = 移植性向上 対象: ソフトウェア開発やメンテナンスに携わる⼈々
  19. 19. Copyright ©2017 JPCERT/CC All rights reserved. - コンパイラ作者向けでなくCプログラマ向け -第⼀⽬的: 今後の開発に役⽴つガイドライン =第⼆⽬的: 既存のレガシーコードのメンテナンスに役⽴つ ガイドライン - できるだけOSや実⾏環境に依存しない = 環境依存な⽅法に⾔及する場合、おもに POSIX(Unix)およびWindowsにおけるコード例を⽰す - C99およびC11に基づく 19 CERT C コーディングスタンダード
  20. 20. Copyright ©2017 JPCERT/CC All rights reserved. 開発に携わる⼈々 20 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/
  21. 21. Copyright ©2017 JPCERT/CC All rights reserved. セキュアコーディングスタンダード⽇本語版 21
  22. 22. Copyright ©2017 JPCERT/CC All rights reserved. セキュアコーディングスタンダード⽇本語版 22
  23. 23. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう 23
  24. 24. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう C コーディングスタンダード日本語版 (https://www.jpcert.or.jp/sc-rules/) •カテゴリ一覧 •ルールとレコメンデーション •各ページの構成 (説明, 違反コード, 適合コード, リスク評価, 参考情報) C コーディングスタンダード カテゴリ: 16 ガイドライン: 302 (必須118, 推奨184) 24
  25. 25. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう: カテゴリ⼀覧 01.プリプロセッサ(PRE) 02. 宣言と初期化(DCL) 03. 式(EXP) 04. 整数(INT) 05. 浮動小数点(FLP) 06. 配列(ARR) 07. 文字と文字列(STR) 08. メモリ管理(MEM) 09. 入出力(FIO) 10. 環境(ENV) 11. シグナル(SIG) 12. エラー処理(ERR) 13. Application Programming Interface(API) 14. 並行性(CON) 49. 雑則(MSC) 50. POSIX(POS) 内容に応じて分類 25
  26. 26. Copyright ©2017 JPCERT/CC All rights reserved. ☆ レコメンデーション (推奨) ☆ ルール (必須) 中⾝を⾒てみよう: 「ルール」と「レコメンデーション」 ○ コーディング作法への違反が、攻撃可能な脆弱性を生み出す セキュリティ上の欠陥につながる可能性がある。 ○ コーディング作法へ適合しているかどうかを、自動解析、 形式的方法、手作業によるソースコード検査などを通じて 確認することができる。 https://www.jpcert.or.jp/sc-rules/00.introduction.html ○ コーディング作法を適用することで、システムのセキュリティが 高まる可能性がある。 ○ コーディング作法がルールと見なされるための要件を、一つ以上 満たすことができない。 26
  27. 27. Copyright ©2017 JPCERT/CC All rights reserved. ☆ レコメンデーション (推奨) ☆ ルール (必須) 中⾝を⾒てみよう: 「ルール」と「レコメンデーション」 ○ コーディング作法への違反が、攻撃可能な脆弱性を生み出す セキュリティ上の欠陥につながる可能性がある。 ○ コーディング作法へ適合しているかどうかを、自動解析、 形式的方法、手作業によるソースコード検査などを通じて 確認することができる。 ○ コーディング作法を適用することで、システムのセキュリティが 高まる可能性がある。 ○ コーディング作法がルールと見なされるための要件を、一つ以上 満たすことができない。 セキュリティを確保するために必ず適用すべきもの ○ スタンダード準拠の必須項目 ○ 適合していることを確認できる セキュリティを向上させるガイドライン、提案 ○ スタンダード準拠には必須ではない ○ 必ずしも攻撃につながらない、適合の確認が難しい、など https://www.jpcert.or.jp/sc-rules/00.introduction.html 27
  28. 28. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう: 各ガイドラインの構成(1) 識別番号とタイトル 説明 違反コード 適合コード (例外) リスク評価 参考情報 カテゴリ名 番号-C 例: INT01-C, EXP32-C C スタンダードの場合、 0〜29までの番号はレコメンデーション 30以降の番号はルール 28
  29. 29. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう: 各ガイドラインの構成(2) 識別番号とタイトル 説明 違反コード 適合コード (例外) リスク評価 参考情報 内容の説明 「〜すべきである」「〜すべきでない」 簡単な違反コード例 違反コードの修正例や別の適切なアプローチ のコード例など このガイドラインにしたがう必要のない状況に ついての説明 29
  30. 30. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう: 各ガイドラインの構成(3) 識別番号とタイトル 説明 違反コード 適合コード 例外 リスク評価 参考情報 この評価値により、準拠すべき ガイドラインに優先順位をつけられる https://www.jpcert.or.jp/sc-rules/00.introduction.html 深刻度、攻撃可能性、修正コスト の観点から評価 ⾔語仕様の関連セクション、 解説記事、 関連するCWE番号など 30
  31. 31. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (1/8) 算術演算のオペランドとしての逆参照または動作、型のキャスト、または代入の右手側としてのポインタ の使用を含め、動的記憶域に割り当てられていたブロックがメモリ管理関数によって解放された後、解放 されたメモリを指すポインタは評価しない。 C 標準によれば、free() または realloc() 関数の呼び出しによって解放された領域を指すポインタの値を 使用しているプログラム動作は未定義である。 (附属書 J 「未定義の動作」の 177 を参照。) 解放されたメモリを指すポインタの値を読み取ると、ポインタ値は不定であり、さらにトラップ表現の場合 があるため、未定義の動作となる。 後者の場合、それによってハードウェアトラップを引き起こす可能性 がある。 一度解放されたメモリにアクセスすると、ヒープの管理に使用されているデータ構造を壊す可能性がある。 割り当てを解除されたメモリを参照するポインタはダングリングポインタと呼ばれる。 ダングリングポイン タにアクセスすると、攻撃可能な脆弱性を引き起こす可能性がある。 メモリが解放されても、メモリの内容がそのまま残りアクセス可能な場合がある。これは、解放されたブ ロックをいつ再割り当てし再使用するかは、メモリマネージャが決定するためである。解放された位置に あるデータは有効であるかのように見えるかもしれない。しかし、このデータは予期せず変更される可能 性があり、意図しないプログラム動作を引き起こしうる。そのため、一度解放したメモリへの書き込みや、 メモリの読み取りを行わないことを保証する必要がある。 31
  32. 32. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (2/8) 違反コード K & R [Kernighan 1988](邦題:『プログラミング言語C』)のこの例では、リンクリストから項目を削除する 誤った手法と正しい手法の両方を示している。 誤った手法は、p->next が参照される前に p を解放して おり、p->next はすでに解放されたメモリを読み取るため、本の中でも明白に誤りだと記されている。 for (p = head; p != NULL; p = p->next) free(p); 適合コード K & Rは正しい解決法も示している。 このエラーを修正するために、p を解放する前に p->next への参 照を q に格納している。 for (p = head; p != NULL; p = q) { q = p->next; free(p); } head = NULL; 32
  33. 33. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (3/8) 違反コード 以下のコード例では、buff が解放されたあとに、buff への書き込みが行われている。 この手の脆弱性の 悪用は容易であり、脆弱なプロセスの権限で任意のコードが実行される可能性があるが、この例ほどわ かりやすいことはまれである。一般に、割り当てと解放が行われる場所は遠く離れており、問題に気付き 原因をつきとめることはむずかしい。 int main(int argc, const char *argv[]) { char *buff; buff = (char *)malloc(BUFFERSIZE); if (!buff) { /* エラー条件の処理 */ } /* ... */ free(buff); /* ... */ strncpy(buff, argv[1], BUFFERSIZE-1); } 33
  34. 34. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (4/8) 適合コード 以下の解決法では、メモリが不要になってからメモリを解放している。 int main(int argc, const char *argv[]) { char *buff; buff = (char *)malloc(BUFFERSIZE); if (!buff) { /* エラー条件の処理 */ } /* ... */ strncpy(buff, argv[1], BUFFERSIZE-1); /* ... */ free(buff); } 34
  35. 35. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (5/8) 違反コード libwmf バージョン 0.2.8.4 の以下のコード例 (CVE-2009-1364) では、返り値 gdRealloc (im->clip->list が 指す領域を再割り当てするシンプルなラップアラウンド realloc) は more に設定される。ただし、im->clip- >list の値は後から直接コードで使用され、C 標準では realloc が指す領域を移動した場合、元の領域は解 放されると規定されている。 攻撃者は、再割り当て (十分な im->clip->count) を強制的に実行し、解放され たメモリにアクセスすることで任意のコードを実行できる [xorl 2009]。 void gdClipSetAdd(gdImagePtr im,gdClipRectanglePtr rect) { gdClipRectanglePtr more; if (im->clip == 0) { ... } if (im->clip->count == im->clip->max) { more = gdRealloc (im->clip->list,(im->clip->max + 8) * sizeof (gdClipRectangle)); if (more == 0) return; // if the realloc fails, then we have not lost the im->clip->list value im->clip->max += 8; } im->clip->list[im->clip->count] = (*rect); im->clip->count++; 35
  36. 36. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (6/8) 適合コード 適合コードでは、realloc を呼び出した後、im->clip->list を値 more に再割り当てする。 void gdClipSetAdd(gdImagePtr im,gdClipRectanglePtr rect) { gdClipRectanglePtr more; if (im->clip == 0) { ... } if (im->clip->count == im->clip->max) { more = gdRealloc (im->clip->list,(im->clip->max + 8) * sizeof (gdClipRectangle)); if (more == 0) return; im->clip->max += 8; im->clip->list = more; } im->clip->list[im->clip->count] = (*rect); im->clip->count++; 36
  37. 37. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (7/8) 解放済みのメモリを読み取ると、プログラムの異常終了やサービス運用妨害(DoS)攻撃を引き 起こす可能性がある。解放済みのメモリに書き込むと、バッファオーバーフローや、脆弱なプロ セスの権限を使った任意のコード実行につながる可能性がある。 ルール 深刻度 可能性 修正コスト 優先度 レベル MEM30-C 高 高 中 P18 L1 自動検出 ツール バージョン チェッカー 説明 Compass/ROSE Coverity 6.5 USE_AFTER_FREE メモリが複数回解放されるか、または解放 されたポインタの対象に対して読み取り/書 き込みを⾏う特定の事例を検出できる。 Fortify SCA 5.0 Klocwork 9.1 UFM.DEREF.MIGHT UFM.DEREF.MUST UFM.RETURN.MIGHT UFM.RETURN.MUST UFM.USE.MIGHT UFM.USE.MUST LDRA tool suite 8.5.4 51 D 実装済み splint 3.1.1 リスク評価 37
  38. 38. Copyright ©2017 JPCERT/CC All rights reserved. 例: MEM30-C: 解放済みメモリにアクセスしない (8/8) 関連するガイドライン CERT C++ Secure Coding Standard MEM30-CPP. Do not access freed memory ISO/IEC TR 24772:2013 Dangling References to Stack Frames [DCM] Dangling Reference to Heap [XYK] ISO/IEC TS 17961 (ドラフト) Accessing freed memory [accfree] MISRA-C Rule 17.6 MITRE CWE CWE-416, Use after free 参考資料 [Kernighan 1988] Section 7.8.5, "Storage Management" [OWASP Freed Memory] [Seacord 2013] Chapter 4, "Dynamic Memory Management" [Viega 2005] Section 5.2.19, "Using Freed Memory" [xorl 2009] CVE-2009-1364: LibWMF Pointer Use after free() 翻訳元 これは以下のページを翻訳したものです。 MEM30-C. Do not access freed memory (revision 122) 38
  39. 39. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう(Javaコーディングスタンダード) Java コーディングスタンダード日本語版 (https://www.jpcert.or.jp/sc-rules/) •カテゴリ一覧 •ルールとレコメンデーション •各ページの構成 (説明, 違反コード, 適合コード, リスク評価, 参考情報) Java コーディングスタンダード カテゴリ数: 17 ルール数: 158 (レコメンデーションは未訳) 39
  40. 40. Copyright ©2017 JPCERT/CC All rights reserved. 中⾝を⾒てみよう: カテゴリ⼀覧(Javaコーディングスタンダード) 00. 入力値検査とデータの無害化(IDS) 01. 宣言と初期化(DCL) 02. 式(EXP) 03. 数値型とその操作(NUM) 04. オブジェクト指向(OBJ) 05. メソッド(MET) 06. 例外時の動作(ERR) 07. 可視性とアトミック性(VNA) 08. ロック(LCK) 09. スレッドAPI(THI) 10. スレッドプール(TPS) 11. スレッドの安全性に関する雑則(TSM) 12. 入出力(FIO) 13. シリアライズ(SER) 14. プラットフォームのセキュリティ(SEC) 15. 実行環境(ENV) 49. 雑則(MSC) 内容に応じて分類 40
  41. 41. Copyright ©2017 JPCERT/CC All rights reserved. GNU Coding Standards との⽐較 41 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 を使う全ての⼈のために - 攻撃に使われるような脆弱性を作り込まないようにするためのガイドライン ポータブル、頑丈、⾼信頼性と重なる部分あり
  42. 42. Copyright ©2017 JPCERT/CC All rights reserved. MISRA-C:2012 との⽐較 42 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)
  43. 43. Copyright ©2017 JPCERT/CC All rights reserved. ソースコード解析ツール (C) https://www.securecoding.cert.org/confluence/x/uoFuCQ 43
  44. 44. Copyright ©2017 JPCERT/CC All rights reserved. ソースコード解析ツール (Java) https://www.securecoding.cert.org/confluence/x/xIJuCQ 44
  45. 45. Copyright ©2017 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):⾔語仕様書の典拠 違反コード例 45 JTC1/SC22/WG14 - C コンパイルは通っても安全な動作が保証されな いケースをまとめた⾔語仕様書の副読本 参考: ISO/IEC TS 17961 C Secure Coding Rules (https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=140705863) 参考: Secure Coding Validation Suite (https://github.com/SEI-CERT/scvs)
  46. 46. Copyright ©2017 JPCERT/CC All rights reserved. コーディングスタンダードの活⽤ 46
  47. 47. Copyright ©2017 JPCERT/CC All rights reserved. セキュアコーディングスタンダードの活⽤ ●セキュアコーディングの学習に ●開発チーム内の認識共有 ●製品のセキュリティ関連仕様の明確化 47
  48. 48. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: セキュアコーディングの学習資料として(1) セキュアコーディングを学ぶ教材として 使う ●「セキュアコーディングってなに?」 ●「こんなトピック知ってる?」 社内での研修や勉強会の教材に ●違反コード・適合コードでクイズ形式 48
  49. 49. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: セキュアコーディングの学習資料として(2) コード解析ツールを活⽤するための補助資料 検出結果を理解するために ツールの説明よりも分かりやすく 別の観点での説明 49
  50. 50. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: セキュアコーディングの学習資料として(3) コード解析ツールを活⽤するための補助資料 検出結果の対応を検討するために どのように修正すべきなの? ホントに修正すべきなの? セカンドオピニオンとして... 50
  51. 51. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: 開発チーム内の認識共有(1) コーディングの良し悪しの判断基準 セキュリティ確保のための⽬標を具体化 ●「ルールXXとYYには準拠しよう! 」 セキュリティ品質向上の⼿段として活⽤ 51
  52. 52. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: 開発チーム内の認識共有(2) ⾃社のコーディング規約の⼟台として ●既存の内容に不⾜がないかチェック ●命名規則やコーディングスタイルなどは独⾃に 決める必要がある 52
  53. 53. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: セキュリティ仕様明確化(1) 品質チェックの具体的な項⽬の洗い出しに ⼊⼒値チェックはきちんとやってるか ⾮推奨な関数使ってないか 可搬性の問題はないか ...... 53
  54. 54. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: セキュリティ仕様明確化(2) 要求仕様として提⽰ ●コーディング規約XXを遵守すること ●レベルL1のルールを遵守すること ●レベルL2までのルールを全て遵守すること など あいまいだったセキュリティ ⾯の仕様の内容について、 より明確な基準で議論できる 54
  55. 55. Copyright ©2017 JPCERT/CC All rights reserved. 活⽤: セキュリティ仕様明確化(3) 実装仕様として提⽰ ●コーディング規約XXを遵守してます ●レベルL1のルールを遵守してます ●レベルL2までのルールを全て遵守してます など あいまいだったセキュリティ ⾯の仕様の内容について、 より明確な基準で議論できる 55
  56. 56. Copyright ©2017 JPCERT/CC All rights reserved. まとめ 56 SEI CERT コーディングスタンダード —セキュアなソフトウェアをつくるためのコーディング ガイドライン集 —C, Java, C++, Perl, Android —解説、違反コード例、適合コード例 想定読者層: ソフトウェア開発やメンテナンスに携わ る⼈々⼀般 ⽇本語版もあるから活⽤してね! —https://www.jpcert.or.jp/sc-rules/ —https://www.jpcert.or.jp/java-rules/
  57. 57. Copyright ©2017 JPCERT/CC All rights reserved. おまけ: おすすめリーディングマップ 04. 整数(INT) 07. 文字と文字列(STR) 05. 浮動小数点(FLP) 11. シグナル(SIG) 12. エラー処理(ERR) 13. (API) 50. POSIX(POS) 06. 配列(ARR) 08. メモリ管理(MEM) 基本データ型について しっかりおさえよう! 01. プリプロセッサ(PRE) 02. 宣言と初期化(DCL) 03. 式(EXP) 10. 環境(ENV) 09. 入出力(FIO) 重要なデータ構造として、 配列と動的メモリ管理を チェック! 57
  58. 58. Copyright ©2017 JPCERT/CC All rights reserved. コーディングスタンダードの協⼒者募集中! CERTコーディングスタンダード⽇本語版の 整備に協⼒してくれる⽅を求めています。 —Java, Android, C, C++, …… —既存の⽇本語へのコメント、改善案 —英語原⽂へのコメント、改善案 —さらに編集も… 58
  59. 59. Copyright ©2017 JPCERT/CC All rights reserved. 関連リソース 59 CERT C コーディングスタンダード (https://www.jpcert.or.jp/sc-rules/) Java コーディングスタンダード CERT/Oracle 版 (https://www.jpcert.or.jp/sc-rules/) CERT Secure Coding Standards (https://www.securecoding.cert.org/) CERT/CC Secure Coding (https://www.cert.org/secure-coding/)
  60. 60. Copyright ©2017 JPCERT/CC All rights reserved. 関連リソース 【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版] (http://www.seshop.com/product/detail/7950/) MISRA-C:2004 ガイドブック (http://www.sessame.jp/workinggroup/WorkingGroup3/MISRA-C_GuigeBook2004.htm) 組込み現場の「C」プログラミング標準コーディングガイドライン (http://gihyo.jp/book/2007/978-4-7741-3254-9) 60
  61. 61. Copyright ©2017 JPCERT/CC All rights reserved. セキュアコーディングに関するお問合せ、インシデント対応のご依頼は 61 JPCERTコーディネーションセンター ̶Tel:03-3518-4600 ̶https://www.jpcert.or.jp/ セキュアコーディングに関するお問い合わせ ̶Email:secure-coding@jpcert.or.jp ̶https://www.jpcert.or.jp/securecoding/ インシデントの報告 ̶Email:info@jpcert.or.jp ̶https://www.jpcert.or.jp/form/

×