180 likes | 320 Vues
ソースコードセキュリティを 自動的に向上させる方法. Ben Chelf CTO. 10,000 フィートビュー. マジック静的アナライザボックス データフロー分析、ポインタエイリアス分析、抽象的解釈、モデルチェック、フローセンシティブ、フローインセンシティブ、コンテキストセンシティブ、コンテキストインセンシティブ、インタープロシージュラル、イントラプロシージュラル、制限の解除. PHP Code. セキュリティの 脆弱性. C Code. Java Code. C++ Code. 着目点 - What to look for?. {
E N D
ソースコードセキュリティを 自動的に向上させる方法 Ben ChelfCTO
10,000 フィートビュー マジック静的アナライザボックス データフロー分析、ポインタエイリアス分析、抽象的解釈、モデルチェック、フローセンシティブ、フローインセンシティブ、コンテキストセンシティブ、コンテキストインセンシティブ、インタープロシージュラル、イントラプロシージュラル、制限の解除 PHP Code セキュリティの 脆弱性 C Code Java Code C++ Code Coverity Confidential: Do not distribute
着目点 - What to look for? { strcpy(dest, src); } Coverity Confidential: Do not distribute
着目点 - What to look for? { char src[100]; char dest[50]; strcpy(dest, src); } Coverity Confidential: Do not distribute
着目点 - What to look for? { char src[50]; char dest[50]; strcpy(dest, src); } Coverity Confidential: Do not distribute
着目点 - What to look for? { char src[50]; char dest[50]; src[sizeof(dest) – 1] = 0; strcpy(dest, src); } Coverity Confidential: Do not distribute
スタティック分析ツールの有用性 ソフトウェア開発プロセス デザイン コーディング QA リリース インテグレート Static Analysis 有用な点 システム構築ライフサイクル早期において問題発見 テストケースの必要が無い コードの行を指し示す 規則正しい動作 バグ セキュリティの 脆弱性 Coverity Confidential: Do not distribute
リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) Coverity Confidential: Do not distribute
リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) Coverity Confidential: Do not distribute
リサーチテクニック (not exhaustive) • Shankar, Talwar, Foster, Wagner (2001) • Ashcraft, Engler (2002) • Yang, Kremenek, Xie, Engler (2003) Coverity Confidential: Do not distribute
リサーチテクニック (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
リサーチテクニック (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
リサーチテクニック (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
リサーチテクニック (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
リサーチテクニック (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
実世界で活用する システムの構築 コード解析 分析時間 コードの構成 ノイズと誤検出 何を報告するか 結果の再確認 PHP Code C Code Java Code C++ Code Coverity Confidential: Do not distribute
邪悪なテトリス /* * 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
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