Save 37% off PRO during our Black Friday Sale! »

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

4357acd0098b7bd5495c9048d90c811a?s=47 8ayac
December 13, 2017

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

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

4357acd0098b7bd5495c9048d90c811a?s=128

8ayac

December 13, 2017
Tweet

Transcript

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

  2. はじめに • クライアントのシステムの脆弱性診断を実施  脆弱性の危険性の説明  対策の提案 • 評価基準 

    共通脆弱性システム CVSSv3.0  共通脆弱性タイプ一覧 CWE
  3. 報告した脆弱性の件数

  4. • 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でクロスサイトスクリプティング
  5. • 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の脆弱性
  6. • 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の脆弱性 以上 件
  7. 今回紹介する脆弱性 OSコマンドインジェクション

  8. 今回紹介する脆弱性 – CVSSv3基本値(危険度) /10.0 (CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H) CWE-78

  9. OSコマンドインジェクションとは • 攻撃手法の一種  OSコマンドを利用した攻撃

  10. OSコマンドインジェクションとは WEBサイト 脆弱なWebアプリケーション 攻撃者 OSコマンド実行 OSコマンド実行 OS コマンド

  11. 想定されるリスク 攻撃者 操作 OSコマンド ファイル

  12. 想定されるリスク • 攻撃のための情報収集 バージョン 情報 設定ファイル

  13. 想定されるリスク • 攻撃のための情報収集 • 機密情報の漏えい 個人情報 パスワード

  14. 想定されるリスク • 攻撃のための情報収集 • 機密情報の漏えい • 管理者権限の奪取 root

  15. 想定されるリスク • 攻撃のための情報収集 • 機密情報の漏えい • 管理者権限の奪取 • 不正なプログラムの埋め込み

  16. 想定されるリスク • 攻撃のための情報収集 • 機密情報の漏えい • 管理者権限の奪取 • 不正なプログラムの埋め込み •

    システムやデータの破壊・改ざん
  17. 想定されるリスク • 攻撃のための情報収集 • 機密情報の漏えい • 管理者権限の奪取 • 不正なプログラムの埋め込み •

    システムやデータの破壊・改ざん • 他の攻撃のための踏み台 参考: MBSD セキュリティ診断項目解説 「OSコマンドインジェクション」 https://www.mbsd.jp/security_glossary/security_glossary_oscommand.html
  18. 脆弱性の実例 34567番ポート (xinetd) ①接続 help echo uptime iostat exit quit

    ping ②利用可能 ユーザ
  19. pingの仕様 • 使用方法: ping [ホスト] • 機能: 対象ホストとの疎通確認 疎通してる? 疎通してるよ

  20. pingの仕様 ping => sub { my $host = shift; system(“ping

    -c 4 -W 1 $host”); },
  21. ping localhost プログラム $host = “localhost” system(“ping –c 4 -W

    1 $host”) localhost ユーザ
  22. ping localhost プログラム system(“ping –c 4 -W 1 localhost”) ユーザ

  23. ping localhost プログラム OSコマンド実行 OSコマンド実行 ping –c 4 –W 1

    localhost ユーザ
  24. 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
  25. 実際の攻撃方法

  26. $ コマンド1;コマンド2 コマンド1を実行したあとにコマンド2を実行

  27. ping localhost;bash system(“ping -c 4 -W 1 $host”)

  28. ping localhost;bash system(“ping -c 4 -W 1 localhost;bash”)

  29. system(“ping -c 4 -W 1 localhost;bash”) $ ping -c 4

    -W 1 localhost $ ping -c 4 -W 1 localhost
  30. system(“ping -c 4 -W 1 localhost;bash”) $ bash $ bash

  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 原因

  38. 原因 1. シェルを呼び出す機能のある関数の利用 • system関数 • open関数

  39. 原因 1. シェルを呼び出す機能のある関数の利用 • system関数 • open関数 2. シェルを呼び出す機能のある関数にパラメータを利用

  40. 原因 1. シェルを呼び出す機能のある関数の利用 • system関数 • open関数 2. シェルを呼び出す機能のある関数にパラメータを利用 3.

    メタ文字のエスケープの未実施 “ $ @ & ‘ ( ) ^ | [ ] { } ; * ? < > ` ¥
  41. 対策

  42. 対策 1. OSコマンド呼び出しを使わない

  43. 対策 1. OSコマンド呼び出しを使わない 2. シェル呼び出し機能のある関数の利用を避ける  例) open関数 -> sysopen関数

  44. 対策 1. OSコマンド呼び出しを使わない 2. シェル呼び出し機能のある関数の利用を避ける  例) open関数 -> sysopen関数

    3. 外部からの入力をOSコマンドのパラメータに渡さない
  45. 対策 1. OSコマンド呼び出しを使わない 2. シェル呼び出し機能のある関数の利用を避ける  例) open関数 -> sysopen関数

    3. 外部からの入力をOSコマンドのパラメータに渡さない 4. OSコマンドに渡すパラメータのエスケープを実施  例) quotemeta関数 (perl言語) 参考: OSコマンドインジェクション 「OSコマンドインジェクションの脅威」 http://senmon.cfc.ac.jp/studentreport/report2/OS.html
  46. 以上

  47. 考察

  48. 考察 • 脆弱性が生まれた原因  アクセス制御の未実施  管理者用の機能 -> 誰でも利用可能 

    設計の問題
  49. アクセス制御について

  50. アクセス制御について 認証 (Authentication) 認可 (Authorization) 識別 (Identification) 説明責任 (Accountability)

  51. アクセス制御について 認証 (Authentication) 認可 (Authorization) 識別 (Identification) 誰? 本人? OK!

    1 2 3
  52. アクセス制御について 認証 (Authentication) 認可 (Authorization) 識別 (Identification) 1 2 3

    説明責任 (Accountability)  記録  コントロール  モニタリング 4
  53. アクセス制御の未実施 • 原因  設計時点の問題  要件定義が不十分

  54. 組織で定められている ルール・ポリシー 方針・管理目的

  55. 組織で定められている ルール・ポリシー 機能要件 方針・管理目的

  56. 組織で定められている ルール・ポリシー 機能要件 保証要件 方針・管理目的 セキュリティ対策が適切か

  57. F F 管理者だけが使う アクセス制御 • テストを行う • ログを取る ルール・ポリシー 機能要件

    保証要件 今回のプログラム
  58. F F アクセス制御の概念 • ID管理 • 認証の3要素 • 記録(ログなど) •

    テスト • 監査 ルール・ポリシー 機能要件 保証要件 アクセス制御
  59. 結論 • 設計における各要件定義が不十分  アクセス制御の未実装の原因  OSコマンドインジェクションの脆弱性の発生

  60. 脆弱性タイプ 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%
  61. 脆弱性タイプ 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%
  62. 脆弱性タイプ 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%
  63. 総評 安全なシステムは 安全な設計から

  64. 参考資料 – 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
  65. 参考資料 - 2 • (ISC)2 「CISSP CBK8ドメイン概要」 https://japan.isc2.org/cissp_gaiyou.html • 情報処理推進機構

    IPA 「セキュリティ機能と保証レベル」 https://www.ipa.go.jp/security/jisec/forusers/abouteal.html
  66. ご清聴ありがとうございました。