Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

MBSD Cybersecurity Challenges 2017 最終審査会 発表スライド

8ayac
December 13, 2017

MBSD Cybersecurity Challenges 2017 最終審査会 発表スライド

チームIPFactoryとして発表したもの

8ayac

December 13, 2017
Tweet

More Decks by 8ayac

Other Decks in Technology

Transcript

  1. • SQLインジェクション • SNMPデフォルトコミュニティ名の付与 • phpinfoが公開されている • Directory Indexが閲覧可能 •

    SSL/TLS証明書が自己署名証明書 • HTTP Strict Transport Securityヘッダが設定されていない • X-XSS-Protectionヘッダの不備によるブラウザ保護機能の無効化 • X-Content-Type-Optionsヘッダの不備によるブラウザ保護機能の 無効化 • ログイン画面でのSQLインジェクション • ログイン試行が何回でも可能 • Login時のアカウント情報漏えい • ユーザ登録時、基幹システムに渡す情報が空でもユーザ登録可 能 • 誰でも任意のWebAPIを利用することができる • ping が通る • activateが完了していないアカウントの銀行口座を任意の残高で activateすることができる • activate.phpにSQLインジェクション • activate.phpにtype confusion • tomcatに任意のファイルアップロード及び任意のコード実行の脆 弱性 • Apache TomcatにJSPソースコードを閲覧できる脆弱性 • Apache Tomcatにキャッシュポイズニングの脆弱性 • Apache Tomcatに情報漏えいの脆弱性 • Tomcatのデフォルトページが表示されている • Tomcatの認証で推測されやすいパスワードを使用している • Tomcatのshutdownポートがデフォルトのまま使用されている • HTTPレスポンスヘッダにtomcatのサーバ情報が表示される • branchlist.phpにSQLインジェクション • banklist.phpのAPIから銀行情報を閲覧できる • branchlist.phpのAPIから支店情報を閲覧できる • user.phpにSQLインジェクション[1] • user.phpにSQLインジェクション[2] • transfer.phpにSQLインジェクション[1] • transfer.phpにSQLインジェクション[2] • transfer.phpにtest用のパラメータが実装されたままになっている • JSONパラメータへの5000byteの文字列挿入による SystemError[1] • JSONパラメータへの5000byteの文字列挿入による SystemError[2] • transactionlist.phpにSQLインジェクション • verify.phpにSQLインジェクション[1] • verify.phpにSQLインジェクション[2] • verify.phpにtype confusion • 誰でもencrypt機能を利用できる • 誰でもdencrypt機能を利用できる • decrypt.phpでクロスサイトスクリプティング
  2. • hidden_server.phpにSQLインジェクション[1] • hidden_server.phpにSQLインジェクション[2] • hidden_server.phpにSQLインジェクション[3] • hidden_server.phpに銀行残高を任意の数値だけ増やすことがで きる •

    xinetdで動いているプログラムにOSコマンドインジェクションの脆 弱性 • getrealip.phpで認証回避が可能 • ワンタイムパスワードベースが予測可能 • MySQLサーバーコンポーネントに脆弱性[1] • MySQLサーバーコンポーネントに脆弱性[2] • MySQLサーバーコンポーネントに脆弱性[3] • MySQLサーバーコンポーネントに脆弱性[4] • MySQLサーバーコンポーネントに脆弱性[5] • MySQLサーバーコンポーネントに脆弱性[6] • MySQLサーバーコンポーネントに脆弱性[7] • MySQLサーバーコンポーネントに脆弱性[8] • MySQLサーバーコンポーネントに脆弱性[9] • MySQLサーバーコンポーネントに脆弱性[10] • MySQLサーバーコンポーネントに脆弱性[11] • MySQLサーバーコンポーネントに脆弱性[12] • MySQLサーバーコンポーネントに脆弱性[13] • MySQLサーバーコンポーネントに脆弱性[14] • MySQLサーバーコンポーネントに脆弱性[15] • glibcにヒープベースのバッファオーバーフローの脆弱性 • glibcにGLOB_TILDEを使用したglob.c • ApacheのUserDirモジュールが有効になっている • SSHで弱い暗号化アルゴリズムがサポートされている • TCPタイムスタンプが実装されている • Apacheのディレクトリリスティングが有効になっている • Tomcatサーブレット/JSPコンテナのデフォルトファイル • PHP5.6.31にインタプリタのクラッシュが発生する脆弱性 • PHP5.6.31にアプリケーションのクラッシュが発生する脆弱性 • PHP5.6.31にインタプリタを利用した情報の窃取を行われる脆弱 性 • phpのtimlib_meridian()に境界外読み取りの脆弱性 • PHP5.6.31にインタプリタのクラッシュを起こす脆弱性 • ホスト上で任意のコードを実行してシステム上の特権を得る可能 性 • カーネルにUse-After-Freeの脆弱性
  3. • hidden_server.phpにSQLインジェクション[1] • hidden_server.phpにSQLインジェクション[2] • hidden_server.phpにSQLインジェクション[3] • hidden_server.phpに銀行残高を任意の数値だけ増やすことがで きる •

    xinetdで動いているプログラムにOSコマンドインジェクションの脆 弱性 • getrealip.phpで認証回避が可能 • ワンタイムパスワードベースが予測可能 • MySQLサーバーコンポーネントに脆弱性[1] • MySQLサーバーコンポーネントに脆弱性[2] • MySQLサーバーコンポーネントに脆弱性[3] • MySQLサーバーコンポーネントに脆弱性[4] • MySQLサーバーコンポーネントに脆弱性[5] • MySQLサーバーコンポーネントに脆弱性[6] • MySQLサーバーコンポーネントに脆弱性[7] • MySQLサーバーコンポーネントに脆弱性[8] • MySQLサーバーコンポーネントに脆弱性[9] • MySQLサーバーコンポーネントに脆弱性[10] • MySQLサーバーコンポーネントに脆弱性[11] • MySQLサーバーコンポーネントに脆弱性[12] • MySQLサーバーコンポーネントに脆弱性[13] • MySQLサーバーコンポーネントに脆弱性[14] • MySQLサーバーコンポーネントに脆弱性[15] • glibcにヒープベースのバッファオーバーフローの脆弱性 • glibcにGLOB_TILDEを使用したglob.c • ApacheのUserDirモジュールが有効になっている • SSHで弱い暗号化アルゴリズムがサポートされている • TCPタイムスタンプが実装されている • Apacheのディレクトリリスティングが有効になっている • Tomcatサーブレット/JSPコンテナのデフォルトファイル • PHP5.6.31にインタプリタのクラッシュが発生する脆弱性 • PHP5.6.31にアプリケーションのクラッシュが発生する脆弱性 • PHP5.6.31にインタプリタを利用した情報の窃取を行われる脆弱 性 • phpのtimlib_meridian()に境界外読み取りの脆弱性 • PHP5.6.31にインタプリタのクラッシュを起こす脆弱性 • ホスト上で任意のコードを実行してシステム上の特権を得る可能 性 • カーネルにUse-After-Freeの脆弱性 以上 件
  4. 想定されるリスク • 攻撃のための情報収集 • 機密情報の漏えい • 管理者権限の奪取 • 不正なプログラムの埋め込み •

    システムやデータの破壊・改ざん • 他の攻撃のための踏み台 参考: MBSD セキュリティ診断項目解説 「OSコマンドインジェクション」 https://www.mbsd.jp/security_glossary/security_glossary_oscommand.html
  5. ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64

    bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.031ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.139ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.043ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.038ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 3002ms rtt min/avg/max/mdev = 0.031/0.062/0.139/0.045 ms $ nc 192.168.56.101 34567
  6. system(“ping -c 4 -W 1 localhost;bash”) $ ping -c 4

    -W 1 localhost $ ping -c 4 -W 1 localhost
  7. ping localhost;bash PING localhost (127.0.0.1) 56(84) bytes of data. 64

    bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.057ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.048/0.057/0.012 ms $ nc 192.168.56.101 34567
  8. ping localhost;bash PING localhost (127.0.0.1) 56(84) bytes of data. 64

    bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.057ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.048/0.057/0.012 ms httpd -v $ nc 192.168.56.101 34567
  9. ping localhost;bash PING localhost (127.0.0.1) 56(84) bytes of data. 64

    bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.057ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.048/0.057/0.012 ms httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Oct 11 2017 17:16:47 $ nc 192.168.56.101 34567
  10. PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from

    localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.057ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.048/0.057/0.012 ms httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Oct 11 2017 17:16:47 :(){ :| :&};: $ nc 192.168.56.101 34567
  11. PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from

    localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.057ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.048/0.057/0.012 ms httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Oct 11 2017 17:16:47 :(){ :| :&};: $ nc 192.168.56.101 34567
  12. PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from

    localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.026ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.054ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.057ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.055ms --- localhost ping statistics --- 4packets transmited, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.048/0.057/0.012 ms httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Oct 11 2017 17:16:47 :(){ :| :&};: $ nc 192.168.56.101 34567
  13. 対策 1. OSコマンド呼び出しを使わない 2. シェル呼び出し機能のある関数の利用を避ける  例) open関数 -> sysopen関数

    3. 外部からの入力をOSコマンドのパラメータに渡さない 4. OSコマンドに渡すパラメータのエスケープを実施  例) quotemeta関数 (perl言語) 参考: OSコマンドインジェクション 「OSコマンドインジェクションの脅威」 http://senmon.cfc.ac.jp/studentreport/report2/OS.html
  14. アクセス制御について 認証 (Authentication) 認可 (Authorization) 識別 (Identification) 1 2 3

    説明責任 (Accountability)  記録  コントロール  モニタリング 4
  15. F F アクセス制御の概念 • ID管理 • 認証の3要素 • 記録(ログなど) •

    テスト • 監査 ルール・ポリシー 機能要件 保証要件 アクセス制御
  16. 脆弱性タイプ CWE識別子 件数 割合 SQLインジェクション CWE-89 14 18% 環境設定 CWE-16

    12 15% 情報漏洩 CWE-200 8 10% 設計上の問題 CWE-DesignError 6 8% 認可・権限・アクセス制御 CWE-264 5 6% 型の取り違え CWE-843 2 3% 証明書・パスワード管理 CWE-255 2 3% 不適切な入力確認 CWE-20 2 3% バッファエラー CWE-119 2 3% 解放済みメモリの使用 CWE-416 2 3% OSコマンドインジェクション CWE-78 1 1% クロスサイトスクリプティング CWE-79 1 1% 危険なタイプのファイルの無制限アップロード CWE-434 1 1% データの信頼性についての不十分な検証 CWE-345 1 1% 不適切なアクセス制御 CWE-284 1 1% XML 外部エンティティ参照の不適切な制限 CWE-611 1 1% 暗号の問題 CWE-310 1 1% 信頼性のないデータのデシリアライゼーション CWE-502 1 1% 例外的な状態における不適切なチェック CWE-754 1 1% 境界外読み取り CWE-125 1 1% パス・トラバーサル CWE-22 1 1% 情報不足 CWE-noinfo 13 16% 合計 79 100%
  17. 脆弱性タイプ CWE識別子 件数 割合 SQLインジェクション CWE-89 14 18% 環境設定 CWE-16

    12 15% 情報漏洩 CWE-200 8 10% 設計上の問題 CWE-DesignError 6 8% 認可・権限・アクセス制御 CWE-264 5 6% 型の取り違え CWE-843 2 3% 証明書・パスワード管理 CWE-255 2 3% 不適切な入力確認 CWE-20 2 3% バッファエラー CWE-119 2 3% 解放済みメモリの使用 CWE-416 2 3% OSコマンドインジェクション CWE-78 1 1% クロスサイトスクリプティング CWE-79 1 1% 危険なタイプのファイルの無制限アップロード CWE-434 1 1% データの信頼性についての不十分な検証 CWE-345 1 1% 不適切なアクセス制御 CWE-284 1 1% XML 外部エンティティ参照の不適切な制限 CWE-611 1 1% 暗号の問題 CWE-310 1 1% 信頼性のないデータのデシリアライゼーション CWE-502 1 1% 例外的な状態における不適切なチェック CWE-754 1 1% 境界外読み取り CWE-125 1 1% パス・トラバーサル CWE-22 1 1% 情報不足 CWE-noinfo 13 16% 合計 79 100%
  18. 脆弱性タイプ CWE識別子 件数 割合 SQLインジェクション CWE-89 14 18% 環境設定 CWE-16

    12 15% 情報漏洩 CWE-200 8 10% 設計上の問題 CWE-DesignError 6 8% 認可・権限・アクセス制御 CWE-264 5 6% 型の取り違え CWE-843 2 3% 証明書・パスワード管理 CWE-255 2 3% 不適切な入力確認 CWE-20 2 3% バッファエラー CWE-119 2 3% 解放済みメモリの使用 CWE-416 2 3% OSコマンドインジェクション CWE-78 1 1% クロスサイトスクリプティング CWE-79 1 1% 危険なタイプのファイルの無制限アップロード CWE-434 1 1% データの信頼性についての不十分な検証 CWE-345 1 1% 不適切なアクセス制御 CWE-284 1 1% XML 外部エンティティ参照の不適切な制限 CWE-611 1 1% 暗号の問題 CWE-310 1 1% 信頼性のないデータのデシリアライゼーション CWE-502 1 1% 例外的な状態における不適切なチェック CWE-754 1 1% 境界外読み取り CWE-125 1 1% パス・トラバーサル CWE-22 1 1% 情報不足 CWE-noinfo 13 16% 合計 79 100%
  19. 参考資料 – 1 • 情報処理推進機構 IPA 「共通脆弱性評価システムCVSS v3概説」 https://www.ipa.go.jp/security/vuln/CVSSv3.html •

    情報処理推進機構 IPA 「共通脆弱性タイプ一覧CWE概説」 https://www.ipa.go.jp/security/vuln/CWE.html • OSコマンドインジェクション 「OSコマンドインジェクションの脅威」 http://senmon.cfc.ac.jp/studentreport/report2/OS.html • MBSD セキュリティ診断項目解説 「OSコマンドインジェクション」 https://www.mbsd.jp/security_glossary/security_glossary_oscommand.html • JVN iPedia 脆弱性対策情報データベース 「CWE-78 OSコマンドインジェクション」 http://jvndb.jvn.jp/ja/cwe/CWE-78.html • 情報処理推進機構 IPA 「情報セキュリティ評価のためのコモンクライテリア」 https://www.ipa.go.jp/security/jisec/cc/documents/CCPART3V3.1R4-J1.0.pdf
  20. 参考資料 - 2 • (ISC)2 「CISSP CBK8ドメイン概要」 https://japan.isc2.org/cissp_gaiyou.html • 情報処理推進機構

    IPA 「セキュリティ機能と保証レベル」 https://www.ipa.go.jp/security/jisec/forusers/abouteal.html