1 / 18

ソースコードセキュリティを 自動的に向上させる方法

ソースコードセキュリティを 自動的に向上させる方法. Ben Chelf CTO. 10,000 フィートビュー. マジック静的アナライザボックス データフロー分析、ポインタエイリアス分析、抽象的解釈、モデルチェック、フローセンシティブ、フローインセンシティブ、コンテキストセンシティブ、コンテキストインセンシティブ、インタープロシージュラル、イントラプロシージュラル、制限の解除. PHP Code. セキュリティの 脆弱性. C Code. Java Code. C++ Code. 着目点 - What to look for?. {

ansel
Download Presentation

ソースコードセキュリティを 自動的に向上させる方法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ソースコードセキュリティを 自動的に向上させる方法 Ben ChelfCTO

  2. 10,000 フィートビュー マジック静的アナライザボックス データフロー分析、ポインタエイリアス分析、抽象的解釈、モデルチェック、フローセンシティブ、フローインセンシティブ、コンテキストセンシティブ、コンテキストインセンシティブ、インタープロシージュラル、イントラプロシージュラル、制限の解除 PHP Code セキュリティの 脆弱性 C Code Java Code C++ Code Coverity Confidential: Do not distribute

  3. 着目点 - What to look for? { strcpy(dest, src); } Coverity Confidential: Do not distribute

  4. 着目点 - What to look for? { char src[100]; char dest[50]; strcpy(dest, src); } Coverity Confidential: Do not distribute

  5. 着目点 - What to look for? { char src[50]; char dest[50]; strcpy(dest, src); } Coverity Confidential: Do not distribute

  6. 着目点 - What to look for? { char src[50]; char dest[50]; src[sizeof(dest) – 1] = 0; strcpy(dest, src); } Coverity Confidential: Do not distribute

  7. スタティック分析ツールの有用性 ソフトウェア開発プロセス デザイン コーディング QA リリース インテグレート Static Analysis 有用な点 システム構築ライフサイクル早期において問題発見 テストケースの必要が無い コードの行を指し示す 規則正しい動作 バグ セキュリティの 脆弱性 Coverity Confidential: Do not distribute

  8. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) Coverity Confidential: Do not distribute

  9. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) Coverity Confidential: Do not distribute

  10. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) Coverity Confidential: Do not distribute

  11. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) • Huang, Yu, Hang, Tsai, Lee (2004) Coverity Confidential: Do not distribute

  12. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) • Huang, Yu, Hang, Tsai, Lee (2004) • Livshits and Lam (2005) Coverity Confidential: Do not distribute

  13. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) • Huang, Yu, Hang, Tsai, Lee (2004) • Livshits and Lam (2005) • Xie and Aiken (2006) Coverity Confidential: Do not distribute

  14. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) • Huang, Yu, Hang, Tsai, Lee (2004) • Livshits and Lam (2005) • Xie and Aiken (2006) • Jovanovic, Kuregel, Kirda (2006) Coverity Confidential: Do not distribute

  15. リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) • Huang, Yu, Hang, Tsai, Lee (2004) • Livshits and Lam (2005) • Xie and Aiken (2006) • Jovanovic, Kuregel, Kirda (2006) • …他多数 Coverity Confidential: Do not distribute

  16. 実世界で活用する システムの構築 コード解析 分析時間 コードの構成 ノイズと誤検出 何を報告するか 結果の再確認 PHP Code C Code Java Code C++ Code Coverity Confidential: Do not distribute

  17. 邪悪なテトリス /* * Set times to 0 except for * high score on each level. */ for (i = MINLEVEL; i < NLEVELS; i++)   levelfound[i] = 0; for (i = 0, sp = scores; i < nscores; i++, sp++) {   if (levelfound[sp->hs_level])     sp->hs_time = 0;   else {     sp->hs_time = 1;     levelfound[sp->hs_level] = 1;   } } Coverity Confidential: Do not distribute

  18. Do you use X? if (getuid() != 0 && geteuid == 0) {      ErrorF(“only root”);      exit(1); } 括弧が無い場合、コードはlibc内のgeteuidファンクションが、Address 0以外のところに読み込まれたかをチェックし(ほぼそうなるとと確証するが)全ユーザーに対しリスクの高いオプションを許可することが安全だと報告する為、セキュリティホールが生みだされる。 - Alan Coopersmith, Sun Developer Coverity Confidential: Do not distribute

More Related