Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

標的型攻撃からどのように身を守るのか

4,589 views

Published on

July Tech Festa2017

Published in: Engineering
  • Hi there! Essay Help For Students | Discount 10% for your first order! - Check our website! https://vk.cc/80SakO
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

標的型攻撃からどのように身を守るのか

  1. 1. 自己紹介 小河 哲之 Twitter:abend@number3to4 所属:三井物産セキュアディレクション セキュリティエンジニア • ISOG-WG1 • Burp Suite Japan User Group • Prosit • July Tech Festa2015登壇 • Software Design寄稿
  2. 2. 標的型攻撃からどのように身を 守るのか? 問題です。
  3. 3. 結論
  4. 4. どうすればいいのか
  5. 5. 標的型攻撃で悪用されているであると推測される手 法に対して、どのように守るのかという点で本資料は記 載しています。標的型攻撃の実際の攻撃手法と異な る場合があります。また、一部攻撃手法が出てきます が、管理されている環境または許可を得られた環境以 外には実施しないでください。 !!注意!!
  6. 6. 標的型攻撃は、明確な意思と目的を持った人間 (攻撃者)が特定の組織に対して特定の目的(情 報の窃取や削除)のために行うサイバー攻撃の一種 をいうようになっている。 by wikipedia 標的型攻撃
  7. 7. 標的型攻撃にはいくつかのステップがあります。 準備 潜入 横断的 侵害 活動 ターゲットの組織を定め情報収集し(準備)、ターゲット の組織に侵入(潜入)。重要なサーバへ侵入し(横断 的侵害)、機密情報の窃取・隠ぺいを行う(活動)。 JPCERT/CC ログを活用したActive Directoryに対する攻撃の検知と対策より 標的型攻撃のステップ
  8. 8. 横断的侵害にフォーカスして、どうやってリスクを軽減す るのかや、攻撃にいかに早く気付くのかためのポイントを 紹介したいと思います。 今日の内容
  9. 9. 準備は、攻撃者がどこの組織に対して攻撃するのかと いうフェーズなので、被害者はどうすることもできない。 なぜ横断的侵害? 準備 潜入 横断的 侵害 活動
  10. 10. 潜入は、日々新しいマルウェアなどが出てくる中で、アン チウィルスだけでは侵入を防ぐことは非常に難しくなって きています。 なぜ横断的侵害? 準備 潜入 横断的 侵害 活動
  11. 11. 横断的侵害は、脆弱性などを悪用して他の端末に侵 入して情報収集し、目的となるサーバへの侵入を行い ます。 今回、フォーカスするフェーズ。 なぜ横断的侵害? 準備 潜入 横断的 侵害 活動
  12. 12. 活動は、情報の持ち出し及び証拠隠滅で今回は特に 触れません。 なぜ横断的侵害? 準備 潜入 横断的 侵害 活動
  13. 13. わたしが、この部分に技術的興味を持ったから。 なぜ横断的侵害?
  14. 14. ITエンジニアリングの本質を極める 今年のJTF2017のテーマ
  15. 15. 興味がないと本質を極められない。 ※まだ極めたわけではない 今年のJTF2017のテーマ
  16. 16. 数々の難事件を解決する高校生探偵が幼馴染の女 の子とデート中に怪しい黒ずくめの組織の取引現場を 目撃する。 取引に夢中になっていた高校生探偵は、背後から黒 ずくめの組織に襲われ毒薬を飲まされてしまう。 目が覚めると、体が小さくなっていた。小学生として、天 性のずば抜けた推理力を使って、難事件に挑むという 架空のストーリーにあわせて本資料は進めていきます。 本資料のコンセプト
  17. 17. 横断的に侵入するために 多くの企業ではWindowsが利用されており、 侵入するためにWindowsの認証の仕組みを理 解する必要があります。また、管理のために 導入されているActive Directoryも重要です。
  18. 18. アカウント名、パスワードまたは証明書など で認証を行い、ログオンする。認証の中核を 担うのがLSA(Local Security Authority)。 Windowsの認証 アクションによる認証 PINによる認証
  19. 19. Login UI etc... LSA LSA Server Service Netlogon SAM DC etc... Windowsの認証
  20. 20. Windowsでは、パスワードを平文のまま保存 することはなく、Hash化された状態で管理さ れます。LM Hash、NTLM Hashが存在してお り、それぞれsaltはありません。 Administrator:500:aad3b435b51404eeaad3b435b51404ee: 0d4004f922985039f449d220c0ae5ac6::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cf e0d16ae931b73c59d7e0c089c0::: 赤字:LM Hash 黒字:NTLM Hash Windowsの認証
  21. 21. 脆弱なhash関数で、簡単にパスワードを特定 することが可能。Vista以降は利用しないよう になっています。 ・14byteに制限 ・大文字小文字区別なし ・7byteごとに暗号化 LM Hash
  22. 22. パスワードをUnicodeとしてMD4でhashした 128bitの値。LM Hashと比較するとセキュリ ティの強度は高くなっています。 NTLM Hash import hashlib,binascii hash = hashlib.new('md4', "P@ssword".encode('utf- 16le')).digest() print binascii.hexlify(hash)
  23. 23. アカウント、グループやコンピュータなどの リソースをドメイン(管理するための大きな集 合体)で一元管理できるディレクトリサービス を提供します。 一元管理するサーバをドメインコントローラ (DC)という。 Active Directory(AD)
  24. 24. AD ドメインコントローラ ユーザアカウント コンピュータアカウント Webサーバ ファイルサーバ グループ ポリシ ドメイン ユーザアカウントやコンピュータ アカウントなどを一元管理 認証基盤を提供しており シングルサインオンが可能 グループポリシを用いて 設定を管理することが可能
  25. 25. 認証にはKerberosを利用して、利用者は認証 されたアカウントのTicketを用いてファイル サーバなどのリソースにアクセスできるよう になる。 AD Ticket 再度認証せずアクセス ができる Ticket 認証 未認証アカウント 認証済みアカウント
  26. 26. MITで開発されたネットワーク認証方式。 Au thentication Server(AS)、Ticket Granting Service(TGS) などの機能から構成されるKey Distribution Center(KDC)が発行するTicket Granting Ticket(TGT)を用いて、認証・認可 を行っています。 Kerberos認証 DC AS TGS KDC
  27. 27. 認証は以下の流れで行われる。認証により TGTが発行され、TGTを提示し、Service Ticketを配布してもらいます。 ①AS-REQ ②AS-REP ③TGS-REQ ④TGS-REP クライアント KDC TGT TGT Service Ticket Kerberos認証の流れ
  28. 28. 利用するリソースごとにService Ticketが必 要になります。 クライアント Webサーバ ファイルサーバ Service Ticket① Service Ticket② Ticket 様々なTicketを 保持している Kerberos認証の流れ
  29. 29. ユーザ名、コンピュータ名を送付し、TGTを 要求するが、ERR-PREAUTH-REQUIREDと なってしまう。これは、事前認証を行ってい ないためです。 ①AS-REQ クライアント KDC ①AS-REQ
  30. 30. デフォルトの設定だと、事前認証を求められ ます。 ①AS-REQ ②AS-REP ③TGS-REQ ④TGS-REP クライアント KDC TGT TGT Service Ticket Kerberos認証の流れ ⓪AS-REQ ⓪’ ERR-PREAUTH-REQUIRED 事前認証
  31. 31. ERR-PREAUTH-REQUIREDとなってしまう が、その際にKDCはtimestampを返します。 クライアント KDC ⓪’ERR-PREAUTH-REQUIRED ⓪’ ERR-PREAUTH-REQUIRED timestamp
  32. 32. 2度目のAS-REQでは、KDCから送られてきた timestampをクライアントのパスワードhash で暗号化したものを送付し、KDCはそれを復 号化することで正当なクライアントであるこ とを確認します(事前認証)。 クライアント KDC 暗号化された timestamp クライアントのパスワードhash ①AS-REQ
  33. 33. 事前認証が必要な理由は、攻撃者がダミーリ クエストを送付し、暗号化されたTGTをオフ ラインでブルートフォースされることによる パスワード特定の可能性を低減させるため。 https://social.technet.microsoft.com/wiki/contents/articles/23559.kerbe ros-pre-authentication-why-it-should-not-be-disabled.aspx ①AS-REQ 事前認証の必要性
  34. 34. ADで事前認証の有無を設定可能。 ①AS-REQ 事前認証の必要性
  35. 35. 事前認証に利用される暗号化された timestampはpadataに格納されています。 ①AS-REQ 事前認証の必要性 事前認証あり 事前認証なし
  36. 36. KDCはTGTとしてSession Key①をTGSのパ スワードhashで暗号化し、TGTとSession Keyをユーザのパスワードhashで暗号化して クライアントに送信します。 ②AS-REP クライアント KDC TGT ②AS-REP
  37. 37. Session Key① TGSのパスワードhashで暗号 クライアントのパスワードhashで暗号 TGT AS-REP クライアント、TGSのそれぞれのパスワード hashで暗号化されており、正当性の確認を行 えるようになっています。 クライアント名 IPアドレス Timestamp etc Session Key① ②AS-REP
  38. 38. クライアント名などの情報をSession Key① で暗号化したものとTGTをTGSに送付します。 ③TGS-REQ クライアント KDC TGT ③TGS-REQ
  39. 39. TGSはTGTからSession Key①を取り出し、 アクセス元のIPアドレスや有効期限などの確 認を行います。 クライアント名 IPアドレス timestamp Session Key①で暗号 TGS-REQ Session Key① etc... TGSのパスワードhashで暗号 TGT ③TGS-REQ
  40. 40. TGTを提示してもらい、利用したいサービス に応じたService Ticketを受け取ります。 ④TGS-REP クライアント KDC Service Ticket ④TGS-REP
  41. 41. TGSはSession Key②を生成し、クライアン トのIPアドレスなどをサービスごとのマス ターキーで暗号化します。 クライアント名 IPアドレス timestamp TGS-REPSession Key② Service Master Keyで暗号 Service Ticket Session Key①で暗号 ④TGS-REP
  42. 42. クライアントは、サービスを利用する際に Service Ticketを提示することでサービスを 利用できるようになります。 ⑤AP-REQ ⑥AP-REP クライアント ファイルサーバ Service Ticket ファイルサーバなどへのアクセス
  43. 43. 以下の攻撃シナリオを想定。 1. ターゲットとする組織内の社員に不正プログラムを実行 させる 2. C&Cサーバから指令を受けられるようにする 3. 情報収集し、管理者権限へ昇格する 4. ターゲットとなる機密情報へアクセスする 5. 永続的な攻撃のための準備を行う 6. 機密情報を外部へ送信する 7. アクセスしたログを隠ぺいする 攻撃の想定シナリオ
  44. 44. 3. 情報収集し、管理者権限へ昇格する • 侵入したアカウント(不正プログラムを実行したアカウン ト)がどういう権限を有しているのか。 • 管理者権限がないのであれば、残存する認証情報の取得に よる権限昇格、脆弱性による権限昇格を行う。 4. ターゲットとなる機密情報へアクセスする • 機密情報がどこに保存されているのか。ファイルサーバや データベース上にある情報へアクセスする。 5. 永続的な攻撃のための準備を行う • パスワード変更による侵入不可とならないように永続的な 攻撃が行えるようにする。 攻撃の想定シナリオ
  45. 45. 攻撃者は、効率よく攻撃を行うために情報収集を行い ますが、収集する情報の中にアカウント一覧やその権 限もあります。 情報収集 UserA DomainUsers UserB DomainAdmins UserC DomainUsers ターゲット
  46. 46. ADでユーザ一覧を収集し、攻撃の対象を特定するこ とで攻撃にかかる時間が短縮されます。また、ドメインア カウントだけではなくローカルアカウントについても同様に 調査します。 情報収集 C:¥> net user /domain --------------------------------------- Administrator Guest krbtgt use03 user01 user02 useradmin
  47. 47. アカウントの詳細情報やグループの情報を収集します。 情報収集 C:¥> net user /domain useradmin ユーザー名 useradmin フル ネーム useradmin ーーー 省略 ーーー 所属しているグローバル グループ *Domain Admins *Domain Users
  48. 48. 侵入した環境(不正プログラムを実行したアカ ウント)がローカル管理者権限を有するかどう かで、その後の手順が大きく変わってきます。 ローカル管理者権限の有無 • システムファイルへのアクセス • メモリ上の認証情報へのアクセス • レジストリへのアクセス • 各種設定変更 ローカル管理者権限がない
  49. 49. 攻撃手法が限定されてしまうため、ローカル 管理者権限を取得する必要があります。権限 昇格するには以下の方法があります。 • クレデンシャル情報の残存 • 脆弱性を悪用した権限昇格 • クレデンシャル情報管理の不備 ローカル管理者権限がない場合
  50. 50. SysprepによるWindows環境を構築時にログ オンシーケンスに活用するためにC:Window ssystem32PantherUnttached.xmlなど に認証情報が残されている場合があります。 クレデンシャル情報の残存 パスワードが記載されたファイ ルが残存している場合がある
  51. 51. パスワードがBASE64でエンコードされた文 字列がセットされています。 クレデンシャル情報の残存 以下、抜粋 <AutoLogon> <Password> <Value>UEBzc3cwcmQ=</Value> <PlainText>false</PlainText> </Password> <Enabled>true</Enabled> <LogonCount>1</LogonCount> <Username>Administrator</Username> </AutoLogon>
  52. 52. MS14-068、MS17-010などのOSの脆弱性や SKYSEA Clientの脆弱性(CVE-2016-7836) などのインストールされているアプリケー ションの脆弱性を悪用することで、管理者権 限の取得される可能性があります。 脆弱性を悪用した権限昇格
  53. 53. MS14-068は特権のないアカウントが管理者 アカウントに権限昇格が可能です。 #python ms14-068.py -u user01@apt.local ****** ****** Password: [+] Building AS-REQ for 192.168.175.154... Done! ~ ~ ~ ~ ~省略~ ~ ~ ~ ~ [+] Parsing TGS-REP from 192.168.175.154... Done! [+] Creating ccache file 'TGT_user01@apt.local.ccache'... Done! mimikatz # kerberos::ptc TGT_user01@apt.local.ccache Start/End/MaxRenew: 2017/07/19 5:02:32 ; 2017/07/19 15:02:32 ; 2017/07/26 5:02:32 Service Name (01) : krbtgt ; APT.LOCAL ; @ APT.LOCAL Target Name (01) : krbtgt ; APT.LOCAL ; @ APT.LOCAL Client Name (01) : user01 ; @ APT.LOCAL Flags 50a00000 : pre_authent ; renewable ; proxiable ; forwardable ; Session Key : 0x00000017 - rc4_hmac_nt 2ef1173411225b67631ce66964f7c478 Ticket : 0x00000000 - null ; kvno = 2 [...] * Injecting ticket : OK >dir APTDC.APT.LOCALc$ ドライブ APTDC.APT.LOCALc$ のボリューム ラベルがありません。 ボリューム シリアル番号は DE13-FB18 です APTDC.APT.LOCALc$ のディレクトリ 2009/07/14 12:20 <DIR> PerfLogs 2017/07/15 23:08 <DIR> Program Files 2017/07/15 23:08 <DIR> Program Files (x86) 2017/07/15 23:06 <DIR> Users 2017/07/15 23:49 <DIR> Windows 0 個のファイル 0 バイト 5 個のディレクトリ 32,835,375,104 バイトの空き領域 MS14-068の場合 権限昇格済みのCredential Cacheを生成 生成したCredential Cacheを取り込む Administratorとしてアクセス
  54. 54. 資産管理や運用管理などのソフトウエアは、クライアン ト端末を管理するために管理者権限で動作し、多くの 端末にインストールされるため、問題があった場合に影 響が広範囲になる可能性が高いです。 資産管理などのソフトウエアの問題 メモリやレジストリなど重要な箇所への アクセスを許してしまう可能性がある 問題のあるアプリ
  55. 55. クレデンシャル情報は、いろんな箇所に残っていることが 多い。特に、ファイルサーバやNASはお宝の山と言って いいほど、重要情報が適切にアクセス制限かけられて いないことが多い。 クレデンシャル情報管理の不備  ユーザ名、パスワードの一覧  パスワードが記載されたプログラ ムファイル  コンフィグファイル  IPアドレス一覧  ネットワーク構成図  メールのバックアップ 部門単位でフォルダ管理 されているが、Domain Userが読込み可となっ ていることがある
  56. 56. startup用プログラムのバックアップをそのまま残存させ ているケースがありました。 クレデンシャル情報管理の不備 net use i fileservershare P@ssw0rd /user:mente Textファイル、batファイル、ps1ファイル、shファイルなど にパスワードがそのまま記載されているケースがあります。
  57. 57. これまでの経験だと、多くは運用上の問題に分類され ます。 どうすればいいのか
  58. 58. 共通すると思われるローカルアカウントを探 し出し、該当するアカウントのパスワード hashを取得することでPass the Hash(PtH) による侵入が可能となります。 ローカル管理者権限がある場合 PtH 多くの端末に侵入可 能となる
  59. 59. 各社の運用状況によって異なるが、極力ローカル管理 者権限は一般ユーザに与えないほうが好ましい。 どうすればいいのか
  60. 60. パスワードのhashを用いて、侵入しコマンド を実行する手法。 NTLM Hash、LM Hash は saltを使用していないため、パスワードが同じ だと同じhashになります。 Pass the Hash(PtH) 文字列:P@ssw0rd LM Hash:921988BA001DC8E14A3B108F3FA6CB6D NTLM Hash:E19CCF75EE54E06B06A5907AF13CEF42
  61. 61. どんなに複雑なパスワードを利用していても、 hash値にしてしまうと意味はなくパスワード の使い回しによる影響を受けます。 PtH Host1 admin : ????? Host2 admin : ????? パスワードが 分からなくて も認証突破で きてしまう。 hash値 hash値
  62. 62. PtHを行えるアカウントの権限によっては、完 全に支配することが可能となります。 Host admin : ?????hash値 コマンド コマンドが実行 される。 PtH
  63. 63. WindowsVista以降に導入されたUACは、不正プロ グラムの実行を抑止するために有効なセキュリティ機能 で、レジストリやシステムの変更時にダイアログによる確 認が行われます。 User Account Control(UAC)
  64. 64. PtHによるコマンド実行もUACによりブロックすることが 可能です。 UAC Host admin : ????? hash値 コマンド UAC UACがコマンド実行を防ぐ 以下、抜粋 HASH PASS: Substituting user supplied NTLM HASH... ERROR: CreateService failed. NT_STATUS_ACCESS_DENIED. E_md4hash wrapper called. HASH PASS: Substituting user supplied NTLM HASH...
  65. 65. ただし、UACはデフォルトの設定ではビルトインの Administratorは対象の範囲外であるため、該当ア カウントが有効になっている場合、PtHされる可能性が あります。Administratorを別名に変更していても UACは適用されない。 UAC Host Administartor : ????? hash値 コマンド UAC Administratorの場合、UACは 適用されない
  66. 66. 管理者権限を有していても、作成されたアカウントは UACが有効であれば、UACをbypassされない限り PtHは受けない。 ただ、何らかの理由でパスワードが漏れた場合に被害 が拡大する。 • ファイルサーバにパスワードが平文で保存 • 不正プログラムを実行してしまった端末のメモリ上に 残存 共通アカウントの利用
  67. 67. PtHには以下のいずれかの対策が必要になります。 どうすればいいのか 2番目の対策は、何らかの理由でパスワードが漏洩した場合を考慮し実 施することを推奨します。
  68. 68. LAPSは、ローカル管理者アカウントのパスワードを管 理するための機能を提供しています。ADに参加するコ ンピュータアカウントに対して、ローカル管理者アカウント のパスワードをランダムなものに変更します。 Local Administrator Password Solution(LAPS) https://www.microsoft.com/en- us/download/details.aspx?id=468 99 DCで一元管理し、定期的に異なる パスワードを自動的に変更する。
  69. 69. LAPSでは、管理する側と管理される側でインストール する内容が変わります。管理する側は、「Manageme nt Tools」以下のものをすべてインストールします。 LAPS
  70. 70. 管理される側は「AdmPwd GPO Extension」だけ で大丈夫。サイレントインストールも可能。 LAPS msiexec /i serversharelaps.x64.msi /queit
  71. 71. 管理する側(DC)では、以下を行う必要があります。 • スキーマの拡張 • ADでOUを作成し、対象とするコンピュータアカウン トを所属させる • 権限設定 • グループポリシーでLAPSの設定を行う LAPS
  72. 72. 管理する側(DC)では、以下のスキーマ拡張処理を行 う必要があります。 LAPS  Import-Module AdmPwd.PS  Update-AdmPwdADSchema
  73. 73. DCで、適当なOUを作成し管理したいコンピュータアカ ウントを所属させ、権限の設定を行います。 LAPS  Set-AdmPwdComputerSelfPermission –Orgunit OU名  Set-AdmPwdReadPasswordPermission –Orgunit OU 名 –AllowedPrincipals 許可するグループ  Set-AdmPwdResetPasswordPermission –Orgunit OU 名 –AllowedPrincipals 許可するグループ
  74. 74. LAPSの設定は、グループポリシで行います。 LAPS
  75. 75. GPOのLAPSには以下の項目があります。 • PasswordSettings →設定するパスワードの複雑さや長さ、有効期間を設定 • Name of administrator account to manage →独自に管理者アカウントを作成している場合にアカウント名を指定する。 Administratorの場合、未設定。 • Do not allow password expiration time・・・ →グループポリシなどでパスワード期限が設定されていても変更する。 • Enable local admin password management →有効に設定する LAPS
  76. 76. 設定されるパスワードは、[表示]-[詳細設定]でコン ピュータアカウントの[Attributes Editor]の[ms-Mc s-AdmPwd]にパスワードが記載されています。 LAPS
  77. 77. [ms-Mcs-AdmPwdExpirationTime ]にパスワー ドの期限がセットされている。以下のコマンドで期限を 確認できます。 LAPS w32tm /ntte 131437074331114635 152126 05:50:33.1114635 - 2017/07/05 14:5 0:33
  78. 78. ADで認可に用いられるTicketを何らかの方法で、偽 造したり、正当なユーザから搾取することで、認証を行 われずに当該ユーザになりすましたり、権限昇格が行う ことができてしまう。その手法を一般的にPass the Ticketと呼ばれています。 Pass the Ticket(PtT) TGT 偽造 Service Ticket
  79. 79. PtTには3つのタイプが存在します。 1. 既存のTicketを用いたPtT 2. Golden Ticketを用いたPtT 3. Silver Ticketを用いたPtT 影響はそれぞれ異なります。 PtTのタイプ
  80. 80. それぞれ利用するTicketが異なります。 PtTのタイプ TGT Service Ticket クライアント TGT Service Ticket 攻撃者 1.既存のTicketを用いたPtT 搾取し、利用 2.Golden Ticketを用いたPtT 3. Silver Ticketを用いたPtT 偽造 偽造
  81. 81. 1. 既存のTicketを用いたPtT → 取得するアカウントの権限に依存します。 2. Golden Ticketを用いたPtT → 管理者になりすますことが可能。 3. Silver Ticketを用いたPtT → 特定のサービスでなりすますことが可能。 PtTの影響
  82. 82. クライアントPCのメモリ上にTicketがキャッシュされます。 1.既存のTicketを用いたPtT C:Usersuser01>klist 現在のログオン ID: 0:0x226f1 キャッシュされたチケット: (2) #0> クライアント: user01 @ PENTEST.LOCAL サーバー: krbtgt/PENTEST.LOCAL @ PENTEST.LOCAL Kerberos チケットの暗号化の種類: AES-256-CTS-HMAC-SHA1-96 チケットのフラグ 0x40c10000 -> forwardable renewable initial name_canonicalize 開始時刻: 7/22/2017 9:42:36 (ローカル) 終了時刻: 7/22/2017 19:42:36 (ローカル) 更新期限: 7/29/2017 9:42:36 (ローカル) セッション キーの種類: AES-256-CTS-HMAC-SHA1-96 ~~ 以下略 ~~
  83. 83. キャッシュされたTicketを取得することが可能です。 1.既存のTicketを用いたPtT
  84. 84. AdministratorのTicketのみ読み込ませる。 1.既存のTicketを用いたPtT C:>klist 現在のログオン ID: 0:0xe0853 キャッシュされたチケット: (4) #0> クライアント: Administrator @ PENTEST.LOCAL サーバー: krbtgt/PENTEST.LOCAL @ PENTEST.LOCAL Kerberos チケットの暗号化の種類: AES-256-CTS-HMAC-SHA1-96 チケットのフラグ 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize 開始時刻: 7/22/2017 9:59:34 (ローカル) 終了時刻: 7/22/2017 19:59:34 (ローカル) 更新期限: 7/29/2017 9:59:34 (ローカル) セッション キーの種類: AES-256-CTS-HMAC-SHA1-96 ~~ 以下略 ~~
  85. 85. Administratorとしてアクセスできるようになります。 1.既存のTicketを用いたPtT C:>dir pen-dcc$ ドライブ pen-dcc$ のボリューム ラベルがありません。 ボリューム シリアル番号は 2C16-D0EF です pen-dcc$ のディレクトリ 2013/08/23 00:52 <DIR> PerfLogs 2017/07/16 16:25 <DIR> Program Files 2017/07/10 20:55 <DIR> Program Files (x86) 2017/06/07 08:25 <DIR> Users 2017/07/18 10:50 <DIR> Windows 0 個のファイル 0 バイト 5 個のディレクトリ 50,545,819,648 バイトの空き領域
  86. 86. 想定される攻撃シナリオは以下です。 1. 攻撃者がPtHで管理者の利用している端末に対し て、TicketをExportさせる。 2. 攻撃者がExportしたTicketを読み込ませる。 3. 管理者としてアクセスする。 1.既存のTicketを用いたPtT
  87. 87. どうすればいいのか 既存のTicketを使わせないようにする直接的な対策 はないです。
  88. 88. TGTがあればService Ticketも取得可能であるため、 特定アカウントになりすますことが可能となります。なり すまされた場合、アカウントのパスワードを変えても防ぐ ことはできない。 2.Golden Ticket Administr atorのTGT Administratorに なりすましてアクセス TGTを保有している=正当なユーザとして、再度認証 を求められることなく、利用可能。
  89. 89. Golden Ticketを偽造する際にアカウント名などを指 定します。存在しないアカウント名でも悪用可能な Golden Ticketを偽造することが可能。 2.Golden Ticket 存在しないアカウント名のGolden Ticketを用いてアクセスした際のサー バ側での出力 C:¥Users¥Administrator>net session コンピューター ユーザー名 クライアント オープン アイドル時間 ------------------------------------------------------------------------------- ¥¥192.168.175.179 test 0 00:00:08 コマンドは正常に終了しました。
  90. 90. イベントビューアーでも存在しないアカウント名として出 力されているが、セキュリティIDはAdministratorとし て表示されています。 2.Golden Ticket Golden Ticket作成時にSIDを明示的に指定しないとAdministratorになる
  91. 91. Golden Ticketを用いたアクセスと通常のアクセスでは 違いがないため、見分けがつかない。 2.Golden Ticket 通常のアクセス Golden Ticketを用いた アクセス
  92. 92. Golden Ticketを不正に作成するためには、TGSの パスワードhashなどの情報が必要となります。この hashは、krbtgtアカウントのパスワードhashを指して います。 2.Golden Ticket Session Key① TGSのパスワードhashで暗号 TGTクライアント名 IPアドレス Timestamp
  93. 93. Session KeyがnullでもGolden Ticketとして利用 することができることから、ADではSession Keyの正 当性について確認されていないと推測しています。 2.Golden Ticket Kerberos TGT of current session : Start/End/MaxRenew: 2017/08/08 20:26:40 ; 2027/08/06 20:26:40 ; 2027/ 08/06 20:26:40 Service Name (02) : krbtgt ; PENTEST.LOCAL ; @ PENTEST.LOCAL Target Name (--) : @ PENTEST.LOCAL Client Name (01) : nonenuser ; @ PENTEST.LOCAL Flags 40e00000 : pre_authent ; initial ; renewable ; forwardable ; Session Key : 0x00000012 - aes256_hmac 0000000000000000000000000000000000000000000000000000000000000000 Ticket : 0x00000012 - aes256_hmac ; kvno = 0 [...] ** Session key is NULL! It means allowtgtsessionkey is not set to 1 **
  94. 94. どうすればいいのか Golden Ticketを使われない・使わせない対策はなく、 krbtgtアカウントのパスワードhashを取得されないよう にする必要があります。 krbtgtアカウントのパスワードhashは管理者権限でな いと取得できないため。
  95. 95. 攻撃者が社内ネットワークに侵入された可能性がある 場合、Golden Ticketを作成されている可能性を考 慮する。 2.Golden Ticket Golden Ticketが使われたかどうかを検知することが 非常に難しいため、使われたことを前提に対処すること が好ましいと考えます。
  96. 96. なぜkrbtgtアカウントのパスワードを2回変更する必要 があるかというと、krbtgtアカウントのパスワードは2回 分履歴を保有しており、前回のパスワードも有効であ るため、2回変更する必要があります。 2.Golden Ticket DC パスワード hash Krbtgtアカウントは2回 分の履歴を保持
  97. 97. 特定のアカウントとしてService Ticketを偽造し、当 該アカウントになりすまして特定サービスを利用する。 Golden Ticket同様にパスワードを変えても防御する ことはできない。 Administrat orのService Ticket Administratorに なりすましてアクセス 特定のサービスに対してのアクセスをなりすますことが可能 3.Silver Ticket
  98. 98. Golden Ticketは特定のアカウントになりすまして、当 該アカウントが許可されているサービスを利用可能であ ることに対して、Silver Ticketは特定のサービスのみ 利用可能です。 3.Silver Ticket Golden Ticket Silver Ticket 特定のアカウントが 許可されたサービス を利用可能 特定のサービスに対 して特定のアカウント として利用可能 なりすましてアクセス なりすましてアクセス
  99. 99. AD内のファイルサーバやWebサーバへのアクセスに悪 用される可能性があります。Golden Ticketよりもやっ かいな点として、ログがファイルサーバやWebサーバなど のサービスを提供している箇所にしか残りません。また、 そのログも正当なユーザとの違いを見分けるのが困難。 3.Silver Ticket
  100. 100. 下記のSilver Ticketは対象サーバ(WIN2008R2. pentest.local)のCIFS(445/tcp)でAdministrat orとしてアクセスできるもの。 3.Silver Ticket #0> クライアント: Administrator @ PENTEST.LOCAL サーバー: cifs/WIN2008R2.pentest.local @ PENTEST.LOCAL Kerberos チケットの暗号化の種類: RSADSI RC4-HMAC(NT) チケットのフラグ 0x40a00000 -> forwardable renewable pre_authent 開始時刻: 8/18/2017 13:04:10 (ローカル) 終了時刻: 8/16/2027 13:04:10 (ローカル) 更新期限: 8/16/2027 13:04:10 (ローカル) セッション キーの種類: RSADSI RC4-HMAC(NT)
  101. 101. CIFS(445/tcp)に対するSilver Ticketを利用し、 psexec.exeを用いて任意のコマンド実行も可能とな ります。 3.Silver Ticket C:>PsExec.exe win2008r2 hostname PsExec v2.2 - Execute processes remotely Copyright (C) 2001-2016 Mark Russinovich Sysinternals - www.sysinternals.com WIN2008R2 hostname exited on win2008r2 with error code 0.
  102. 102. 任意のスケジュールタスクを作成・登録することができて しまいます。 3.Silver Ticket C:>schtasks /create /S win2008r2.pentest .local /SC DAILY /RU "NT AuthoritySystem" /TN "Daily Evil Task" /TR "c:windows system32cmd.exe" #0> クライアント: Administrator @ PENTEST.LOCAL サーバー: HOST/WIN2008R2.pentest.local @ PENTEST.LOCAL Kerberos チケットの暗号化の種類: RSADSI RC4- HMAC(NT) 以下、省略
  103. 103. Golden Ticket同様に根本的な対策は存在しない。 3.Silver Ticket
  104. 104. ドメインコントローラを介さずにアクセスされるため、検知 しにくい。攻撃者にネットワーク内に侵入された場合、 悪用されていることを考慮し、サービス提供しているアカ ウントやコンピュータアカウントのパスワードを2回変更す ることを推奨します。 3.Silver Ticket
  105. 105. Microsoft社がリリースしているアプリケーションでPtH やPtTなどの攻撃を可視化することが可能。 Microsoft Advanced Threat Analytics(ATA)
  106. 106. どこから、どのアカウントで、どこに対して攻撃されている のかを可視化することが可能。 ATA
  107. 107. Golden Ticketを利用された場合も検出することが 可能。 ATA
  108. 108. ATAですべての攻撃を検知できるわけではなく、Black Hat USA2017で発表のあった通り、Golden Ticke tの生成時のオプションによっては検知できない。また、S ilver Ticketについても検知ができない。 完璧に検知できるわけではない http://www.mbsd.jp/blog/ 20170802.html
  109. 109. 2017年8月14日時点で、ユーザー単位で28,300 円とあり、千人規模の会社で導入に3000万近くの費 用が掛かってしまう。 https://www.microsoft.com/ja-jp/cloud-platform/products-Microsoft-Advanced- Threat-Analytics-Purchasing.aspx 費用対効果
  110. 110. 自分で作る
  111. 111. イベントログ(security)から特権ユーザがどこにログイン したか監視し、Slackに通知するPowerShellを作成 してみました。 WindowsEventCheck https://github.com/abend9999/WindowsEventCheck
  112. 112. 5分間のログ(イベントID:4624)を抽出し、指定する 特権ユーザがどのIPアドレスからログインしたかをSlack に通知します。DCでこのps1ファイルを5分ごとに実行 するタスク登録することで、常時監視可能となります。 WindowsEventCheck DC ps15分ごとに実行す るタスクを登録 Slack 指定されたユーザ名が除外対象 のIPアドレスからログインがあった 場合に、Slackへ通知
  113. 113. 出力するSecurityIDは、SID(AD内でユニークな識 別子)をもとにユーザ名を出力。攻撃ツールなどで偽造 したTicketを用いた場合、Accountに存在しないユー ザ名が出力される可能性もある。 WindowsEventCheck
  114. 114. AccountがSecurityIDから取得したユーザ名と異な る場合、不正なアクセスである可能性が高いため、メッ セージを出力します。 WindowsEventCheck
  115. 115. このps1ファイルも完全に検知ができるわけではありませ ん。特権ユーザが多数存在する場合や一般ユーザに 特権を割り当てている場合など運用の状況によっては、 不正なアクセスか判断ができない可能性が高いです。 • 除外対象としたIPアドレスからの攻撃 • 監視対象外のアカウントへのなりすまし etc... WindowsEventCheck
  116. 116. 完璧に守るのは非常に難しい。日頃の運用を適切に 行い、問題に早く気付けることが被害拡大を抑えること になると考えています。 • 認証情報の管理 → 一括管理し、管理している箇所のセキュリティレベルを高める。 • アカウント管理 → 管理者権限を有するアカウントは最小限にする。 • セキュリティ対策の管理 → 定期的にセキュリティパッチを適用する。また、定期的に作業ができる ような環境づくり(冗長化やテスト環境の整備など)も重要と考えます。 まとめ
  117. 117. これまで経験から以下と考えています。 まとめ
  118. 118. • http://www.eventhelix.com/RealtimeMantra/Networking/kerberos/kerberos-sequence- diagram.pdf • https://msdn.microsoft.com/ja-jp/library/dn751047(v=ws.11).aspx • https://stackoverflow.com/questions/15603628/how-to-calculate-ntlm-hash-in-python • https://www.blackhat.com/docs/us-15/materials/us-15-Metcalf-Red-Vs-Blue-Modern- Active-Directory-Attacks-Detection-And-Protection-wp.pdf • https://www.microsoft.com/en-us/download/details.aspx?id=46899 • https://social.technet.microsoft.com/wiki/contents/articles/23559.kerberos-pre- authentication-why-it-should-not-be-disabled.aspx • https://technet.microsoft.com/en-us/mt227395.aspx • https://gallery.technet.microsoft.com/Reset-the-krbtgt-account-581a9e51 • https://blogs.technet.microsoft.com/janelewis/2006/12/19/the-krbtgt-account-what-is- it/ • https://adsecurity.org/?p=2011 参考URL

×