ペネトレーションテスト実施検討中の企業担当者が実施前に読む記事
はじめに
「近々ペネトレーションテストを実施したい!」と思っている会社、たくさんあるんじゃないでしょうか。
そこで質問、
あなたの会社は本当にペネトレーションテストを実施する準備ができていますか?
セキュリティをよく考えないまま、監視製品を導入しているだけじゃないですか?
はっきりいいます。
基本的なセキュリティ対策を行わないままペネトレーションテストを行なっても、有意義な調査結果は得られません。
せっかく高額な費用を払ってテストをするのであれば、有意義な調査結果を得るためにも、基本的なセキュリティ対策だけでもしっかり事前に実施し、準備を行なった上でテストを依頼すべきです。
対象の読者
企業の情報システム、特にエンタープライズネットワークなど、Windows Active Directoryに関連するネットワークのペネトレーションテストやレッドチーム演習、TLPTの実施を検討している会社の担当者向けにこの記事を書いています。
ペネトレーションテストがどういうものかや脆弱性診断との違いについては、ほとんど述べませんのでそれについて知りたい方は違う記事を探してください。
Windows Active Directoryネットワークのペネトレーションテスト
Windows Active Direcroty環境のペネトレーションテストでは、職員があやまってマルウェアを実行するなどしてマシンがマルウェアに感染してしまったことを前提に行うことが一般的です。つまり、攻撃者は感染したマシンに対しては一般権限のドメインユーザアカウントでの操作やファイルへのアクセスが可能な状態ということです。そのため、ペネトレーションテストにおいては、一般権限のドメインユーザアカウント(Domain Usersグループ所属)が攻撃の起点として調査を開始します。
この記事で書くこと
ペネトレーションテストを実施する前に、少なくとも見直しておくべき事項をまとめます。また、ここでまとめる事項は特にパスワード設定に関するものです。
パスワード設定の強化は基本的なセキュリティ対策なので、ペンテスター(専門家)が調査する前に対策しておくべき事項です。でないと、調査結果に「基本的なセキュリティ対策が未実施のため侵害範囲の拡大に成功した」というような文言が記載されることになります。
ペネトレーションテストは、網羅的に調査を行うような脆弱性診断ではないので、侵害範囲の拡大につながるより技術的に高度な問題点が存在していたとしても、指摘されない場合があります。
ペネトレーションテスト実施前に対策すべき事項
マシン内にパスワードが記載されたスクリプトやバッチファイルが存在しないか?
キッティング時の初期設定やログオン時のスケジュールタスクなどで実行するスクリプトやバッチファイルに、他のアカウントのユーザ名やパスワードなどの認証情報を記載しており、かつそのファイルにアクセス可能な状態であれば、ペンテスターはその情報をつかってログオンを試します。
このような自動実行に使用するアカウントには、しばしばマシンのローカル管理者権限が付与されていなど、現在持っているアカウントより高い権限を持っている場合があり、ローカル管理者権限昇格に悪用されます。
よって、ペネトレーションテスト実施前にこのようなファイルがマシン内に存在しないか確認し、不要であれば削除すべきです。
ユーザ名とパスワードの文字列が同一のドメインユーザアカウントが存在しないか?
ユーザ名とパスワードの文字列が同一なアカウントは、Joe(ジョー)アカウントと呼びます。どういう理由か定かではありませんが、このようなパスワードをドメイン管理者アカウント(Domain Adminsグループ所属アカウント)などドメインの重要アカウントで設定している場合が多くあります。
ペネトレーションテストでは、推測したパスワードでログオン可能かたしかめる行為を行ますが、この行為では、このJoeアカウントをあぶり出すため、ユーザ名と同一の文字列でのログオンも試します。
よって、ペネトレーションテスト実施前にはこのようなアカウントがドメインに存在していないか確認し、パスワードの変更を行うべきです。
このようなJoeアカウントの調査は、パスワードスプレー攻撃を行うツールに実装されていることがあります。例えば、DomainPasswordSprayツールでは、以下のコマンドで調査できます。
Invoke-DomainPasswordSpray -UsernameAsPassword
脆弱なパスワードを設定しているドメインユーザアカウント(特にサービス向けアカウント)が存在しないか?
SPNを設定しサービス向けに構成されているドメインユーザアカウントは、Kerberosの仕様上、そのドメインユーザアカウントに設定しているパスワードのソルト化ハッシュ値をDomain Usersグループ権限で取得可能です。これをKerberoastと言います。ただし、ソルト化ハッシュ値なので総当たりには時間がかかるため、長くて複雑なパスワードを設定している場合は解析は困難です。
しかしながら、このようなアカウントに設定しているパスワードが短かったり人名や広く普及しているパスワード辞書(SecListsなど)に記載されているなど、よく知られた単語が使用されている場合、非常に解析が容易です。
よって、ペネトレーションテスト実施前にこのようなアカウントを棚卸しし、設定されているパスワードが適切なパスワードポリシーの下で強固なパスワードが設定させているか確認すべきです。
Domain UsersでログオンしたPowerShellでPowerViewツールを使用することで、確認の対象となるアカウントを、以下のコマンドで確認できます。
Invoke-Kerberoast
Domain Usersグループをローカル管理者グループに所属させているマシンが存在しないか?
ペネトレーションテストの起点となるアカウントは、Domain Usersグループに所属している一般ユーザアカウントです。ドメイン上では一般ユーザアカウントであっても、マシンにおいてローカル管理者グループ(Administratorsグループ)にDomain Usersグループを所属させていた場合、すべてのDomain Usersアカウントがそのマシンの管理者権限を持つことになります。
すなわち、Domain Usersグループの一般ユーザアカウントを初期段階で掌握できているペンテスターも、Domain Usersグループをローカル管理者グループに所属させているマシンをネットワーク内から見つけることで、そのマシンに侵害範囲を拡大でき、かつネットワーク内で管理者権限を行使可能な状態になれてしまいます。
よって、ペネトレーションテスト実施前にはDomain Usersのような母集団の大きいグループがローカル管理者グループに所属していないか確認すべきです。
マシン上では、以下のようにnetコマンドを使用してローカル管理者権限をもっているアカウントをリストアップできます。この中にDomain Usersグループ自体が所属していないか確認しましょう。
net localgroup Administrators
また、Domain UsersでログオンしたPowerShellでPowerViewツールを使用することで、Domain Usersがローカル管理者グループに所属していると考えられるマシンを以下のコマンドで確認できます。
Find-LocalAdminAccess
ビルトイン管理者アカウントを有効にしており、かつ他マシンで同じパスワードを設定していないか?
Windowsには、もともと存在する管理者アカウント(ビルトイン管理者アカウント)として、Administratorアカウントがあります。WindowsのクライアントOSではデフォルトで無効化されていますが、マシンの管理運用などで有効化している場合も多いかと思います。
そもそもビルトイン管理者アカウントは一部のセキュリティ機能が適用されないため、アカウントは無効にしたまま、別のユーザを作成しそのアカウントを管理者グループに所属させてローカル管理者アカウントを別に作成する運用をすべきですが、それは今回は置いておきます。
このように、ビルトイン管理者アカウントが有効で、また、他のマシンのビルトイン管理者アカウントにも同じパスワードを設定してしまっている場合、ペンテスターは掌握しているマシンからアカウント情報を抽出することで、簡単に他のマシンに横展開できてしまいます。
よって、ペネトレーションテスト実施前にはビルトイン管理者アカウントのパスワードが、マシンごとに違うパスワードが設定されていることを確認すべきです。
Domain Adminsグループのドメインユーザアカウントのパスワードが使いまわされて設定されていないか?
テスト中に発見したパスワードやNTLMハッシュなどは、アカウントロックがかからない程度にですがドメイン管理者アカウントなど高権限アカウントを含め他のアカウントでログオン可能かどうか調査します。
もし、他のアカウントで設定されているパスワードを見つけることができ、そのパスワードがドメイン管理者アカウントでも使いまわされていた場合、ペンテスターはドメイン管理者アカウントも入手可能になりドメインでの権限昇格が達成できます。
よって、ペネトレーションテスト実施前にDomain Adminsグループのアカウントを棚卸しし、設定されているパスワードが適切なパスワードポリシーの下で強固なパスワードが設定させているか確認すべきです。
おわりに
今回は、ペネトレーションテスト実施検討中の企業担当者が実施前に対策すべき基本的なセキュリティ対策について紹介しました。
すくなくともこの記事で紹介している対策がすべて実施できていない場合は、ペネトレーションテストを行なっても即座にシナリオが達成されることが見込まれます。
有意義なペネトレーションテスト結果の報告を受け取るためにもしっかり準備した上で実施を依頼しましょう。
Discussion