ロード・オブ・ザ・ホワイトハッカー

ホワイトハッカーはじめました

KaliにOpenVAS ⇒ GVMをセットアップ

GVMについて

GVM(Greenbone-Vulnerability-Manager)は、かつてはOpenVASと呼ばれていた。Openと名が付くらいなので、オープンソース脆弱性スキャナー。

 

ライセンスは、GNU Affero General Public License v3.0 or later.と、良く分かりませんが、IPAが解説してくれています。

www.ipa.go.jp

 

GVMのセットアップ

0.Kaliのアップデート

apt update

いきなりGVMをインストールしようとしたら、apt updateをせよ、と怒られた。

f:id:chikuwamaruX:20210722205741p:plain

 

1.インストールの実行

apt install -y gvm

gvm-setup

ダウンロードに時間がかかる。年代別のCVE情報を取得している?

f:id:chikuwamaruX:20210722221656p:plain

この後、adminユーザーが作成され、パスワードが表示されるので、メモするらしい。

 

2.サービス確認

gvm-start

ブラウザが自動起動して、https://127.0.0.1:9392/ へアクセス 

本来なら、これでセットアップ完了するようです。しかし、エラーが出てブラウザ起動しない。

 

サービスが起動しなかった対処

gvm-startコマンドを実行しても、以下のメッセージが表示され、ブラウザが自動起動しない。

Job for gvmd.service failed because a timeout was exceeded.
See "systemctl status gvmd.service" and "journalctl -xe" for details.

これぞ、オープンソースの醍醐味。

 

 sudo gvm-check-setup

を叩くと、セットアップの状況を教えてくれる。

gvm-check-setup 21.4.1
Test completeness and readiness of GVM-21.4.1
Step 1: Checking OpenVAS (Scanner)...
OK: OpenVAS Scanner is present in version 21.4.1.
OK: Server CA Certificate is present as /var/lib/gvm/CA/servercert.pem.
Checking permissions of /var/lib/openvas/gnupg/*
OK: _gvm owns all files in /var/lib/openvas/gnupg
OK: redis-server is present.
OK: scanner (db_address setting) is configured properly using the redis-server socket: /var/run/redis-openvas/redis-server.sock
OK: redis-server is running and listening on socket: /var/run/redis-openvas/redis-server.sock.
OK: redis-server configuration is OK and redis-server is running.
OK: _gvm owns all files in /var/lib/openvas/plugins
OK: NVT collection in /var/lib/openvas/plugins contains 75056 NVTs.
Checking that the obsolete redis database has been removed
OK: No old Redis DB
OK: ospd-OpenVAS is present in version 21.4.1.
Step 2: Checking GVMD Manager ...
OK: GVM Manager (gvmd) is present in version 21.4.2.
Step 3: Checking Certificates ...
OK: GVM client certificate is valid and present as /var/lib/gvm/CA/clientcert.pem.
OK: Your GVM certificate infrastructure passed validation.
Step 4: Checking data ...
OK: SCAP data found in /var/lib/gvm/scap-data.
OK: CERT data found in /var/lib/gvm/cert-data.
Step 5: Checking Postgresql DB and user ...
OK: Postgresql version and default port are OK.
ERROR: The Postgresql DB does not exist.
FIX: Run 'sudo runuser -u postgres -- /usr/share/gvm/create-postgresql-database'

ERROR: Your GVM-21.4.1 installation is not yet complete!

Please follow the instructions marked with FIX above and run this
script again.

  Postresqlのエラーらしく、コマンドを叩けと、とのことなので、コピペして実行。

sudo runuser -u postgres -- /usr/share/gvm/create-postgresql-database
CREATE ROLE
GRANT ROLE
CREATE EXTENSION
CREATE EXTENSION

 

再度、gvm-check-setupを叩くと、今度はユーザーを作成しろと。

gvm-check-setup 21.4.1
Test completeness and readiness of GVM-21.4.1
Step 1: Checking OpenVAS (Scanner)...
OK: OpenVAS Scanner is present in version 21.4.1.
OK: Server CA Certificate is present as /var/lib/gvm/CA/servercert.pem.
Checking permissions of /var/lib/openvas/gnupg/*
OK: _gvm owns all files in /var/lib/openvas/gnupg
OK: redis-server is present.
OK: scanner (db_address setting) is configured properly using the redis-server socket: /var/run/redis-openvas/redis-server.sock
OK: redis-server is running and listening on socket: /var/run/redis-openvas/redis-server.sock.
OK: redis-server configuration is OK and redis-server is running.
OK: _gvm owns all files in /var/lib/openvas/plugins
OK: NVT collection in /var/lib/openvas/plugins contains 75056 NVTs.
Checking that the obsolete redis database has been removed
OK: No old Redis DB
OK: ospd-OpenVAS is present in version 21.4.1.
Step 2: Checking GVMD Manager ...
OK: GVM Manager (gvmd) is present in version 21.4.2.
Step 3: Checking Certificates ...
OK: GVM client certificate is valid and present as /var/lib/gvm/CA/clientcert.pem.
OK: Your GVM certificate infrastructure passed validation.
Step 4: Checking data ...
OK: SCAP data found in /var/lib/gvm/scap-data.
OK: CERT data found in /var/lib/gvm/cert-data.
Step 5: Checking Postgresql DB and user ...
OK: Postgresql version and default port are OK.
gvmd | _gvm | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
ERROR: No users found. You need to create at least one user to log in.
FIX: create a user by running 'sudo runuser -u _gvm -- gvmd --create-user=<name> --password=<password>'

ERROR: Your GVM-21.4.1 installation is not yet complete!

Please follow the instructions marked with FIX above and run this
script again.

 

コピペして実行して、またまた gvm-check-setupを叩くと、意味不明なエラーが。

gvm-check-setup 21.4.1
Test completeness and readiness of GVM-21.4.1
Step 1: Checking OpenVAS (Scanner)...
OK: OpenVAS Scanner is present in version 21.4.1.
OK: Server CA Certificate is present as /var/lib/gvm/CA/servercert.pem.
Checking permissions of /var/lib/openvas/gnupg/*
OK: _gvm owns all files in /var/lib/openvas/gnupg
OK: redis-server is present.
OK: scanner (db_address setting) is configured properly using the redis-server socket: /var/run/redis-openvas/redis-server.sock
OK: redis-server is running and listening on socket: /var/run/redis-openvas/redis-server.sock.
OK: redis-server configuration is OK and redis-server is running.
OK: _gvm owns all files in /var/lib/openvas/plugins
OK: NVT collection in /var/lib/openvas/plugins contains 75056 NVTs.
Checking that the obsolete redis database has been removed
OK: No old Redis DB
OK: ospd-OpenVAS is present in version 21.4.1.
Step 2: Checking GVMD Manager ...
OK: GVM Manager (gvmd) is present in version 21.4.2.
Step 3: Checking Certificates ...
OK: GVM client certificate is valid and present as /var/lib/gvm/CA/clientcert.pem.
OK: Your GVM certificate infrastructure passed validation.
Step 4: Checking data ...
OK: SCAP data found in /var/lib/gvm/scap-data.
OK: CERT data found in /var/lib/gvm/cert-data.
Step 5: Checking Postgresql DB and user ...
OK: Postgresql version and default port are OK.
gvmd | _gvm | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
OK: At least one user exists.
Step 6: Checking Greenbone Security Assistant (GSA) ...
Oops, secure memory pool already initialized
ERROR: Greenbone Security Assistant too old or too new: 21.4.1~dev1
FIX: Please install Greenbone Security Assistant >= 21.04.

ERROR: Your GVM-21.4.1 installation is not yet complete!

Please follow the instructions marked with FIX above and run this
script again.

なんだか、gvm-check-setupのバグらしく、エラーを無視して、gvm-startを叩けば、無事にサービスが起動して、ブラウザが起動。

f:id:chikuwamaruX:20210723102706p:plain

 

更新

gvm-feed-update

 このコマンドにより、脆弱性情報が更新される。

 

 

 

Kaliにnessusをセットアップ

nessusについて

nessusはTenableという会社が販売している。

jp.tenable.com

 

無償版は、nessus essentialと呼ばれ、IPアドレス16個に対してのスキャンが可能。有料のフル機能がnessus professionalで、お値段2,990ドル/年など、サポートや契約年数によっても増減がある。

 

インストーラーは同じものを使用してようなので、アクティベーションコードの違いでessentialとprofessionalが異なるのだろうか。

 

nessus essentialのセットアップ

1.インストーラーの取得 

Download Nessus | Tenable®

ファイルサイズは46MBほど。

f:id:chikuwamaruX:20210718132312p:plain

ダウンロード時にライセンスへの同意が必要。

 

 

2.インストールの実行

dpkg -i Nessus-8.15.0-debian6_amd64.deb

あっさり完了。

f:id:chikuwamaruX:20210718133106p:plain

 

3.インストールパラメーター入力

この時点では、なにも聞かれない。

 

4.サービスの起動

/bin/systemctl start nessusd.service

を叩いて、https://localhost:8834/にアクセスする。

 

f:id:chikuwamaruX:20210718133902p:plain

 

5.アクティベーション

こちらか申し込むとアクティベーションコードがもらえる。

www.tenable.com

 

インストールしたnessusから、アクティベーションコードの申請は出来そうですがskipしました。

f:id:chikuwamaruX:20210718134215p:plain

 

アクティベーションコードを入力

f:id:chikuwamaruX:20210718134028p:plain

 

アカウントを作成する

f:id:chikuwamaruX:20210718134049p:plain

 

ここからインストールが始まるようです。結構時間かかります。

f:id:chikuwamaruX:20210718134101p:plain

 

セットアップ完了

f:id:chikuwamaruX:20210718140049p:plain

 

おまけ

この時点で、nessus essentialもInsightVMも稼働できている。しかしKaliのvmフォルダが35GBほどになり、激太りとなりました。それだけ、脆弱性情報を持っている、ということなんでしょう。

 

 

 

KaliにNexpose ⇒ InsightVMをセットアップ

NexposeのCommunity Editionはどこ?

NexposeはMetasploitと同じく、Rapid7が販売している。

www.rapid7.com

 

Metasploitと同じく、無償版があると思ってサイト内を検索するも、見つかるのは30日トライアルの情報のみ。

 

NexposeはInsightVMという名称品に置き換わり、Community Editionは無くなり、その代わり1年間のトライアルを検討している、とか。

www.oreilly.com

 

探しても、1年間のトライアル情報はどこにも見当たらず。

 

Rapid7のサイトでは、Nexposeはオンプレのスキャンで、InsightVMは、Insightプラットフォームという販売戦略の一環、という位置づけなのか、InsightVMをやたらと推してくる。

f:id:chikuwamaruX:20210717064338p:plain

新しさに惹かれて、InsightVMをインストールすることに。

 

NexposeとInsightVMの比較は、ここが分かりやすかった。

jscom.jp

 

InsightVMのセットアップ

1.インストーラーの取得  

Download | InsightVM Documentation

ファイルサイズは1.2GBほど。

 

 

2.インストールの実行

chmod +x Rapid7Setup-Linux64.bin
./Rapid7Setup-Linux64.bin -c

※-c を外すとGUIモードでのインストール

 Nexposeのインストール手順で、service postgresql stopでDBを停止させる、という手順を踏むことを勧められるが一旦無視して実行。

f:id:chikuwamaruX:20210717074321p:plain

 

3.インストールパラメーター入力

・Security ConsoleとScan Engine か Scan Enginのみ
・インストールパスのデフォルト/opt/rapid7/nexpose ※結局、nexposeなの?
・80GBのディスクスペースが推奨だけど続ける?
・8192MGのメモリ推奨だけど続ける?
・DBのポートは5432?
・ユーザー情報入力(SSL証明書やサポートに使用)
・ログインユーザー名とパスワード

 あたりの設定が必要。

 

特に_Postgersがらみで怒られるころもなく、インストール完了。

f:id:chikuwamaruX:20210717075127p:plain

 

4.サービスの起動

systemctl start nexposeconsole.service

を叩いて、サービスを起動して、

https://localhost:3780 へアクセスする。

 

インストール時に設定したIDとパスワードでログイン。

f:id:chikuwamaruX:20210717075139p:plain

 

5.アクティベーション

ここから30日のトライアルを申し込む。すぐにメールでライセンスコードがもらえる。

www.rapid7.com

 

ライセンスコードを入力。

f:id:chikuwamaruX:20210717075914p:plain

その後、アップデートに時間とリソースを多く費やす。そもそも、Kaliのデフォルトのメモリ2GBでは、何度かハングしていたので、8GBに増やし、CPUも4コアから8コアへ。

 

ログイン完了。

f:id:chikuwamaruX:20210717084635p:plain

 

おまけ

去年、Nexposeで脆弱性が見つかったのね。脆弱性スキャナーに脆弱性って。。。

jvndb.jvn.jp

 

次は、実際にInsightVMを使ってみたいと思います。

つ・づ・く

 

Vulnerability Analysis

Vulnerability Analysis(脆弱性分析)

英語も日本語も仰々しい感じの単語ですが、脆弱性分析について。

 

脆弱性があれば、攻撃者はそこを突いてくるので、防御するためには、脆弱性を無くす。

 

攻撃者の視点を考えれば、ネットワーク経由(エージェントレス)で、認証情報なしで脆弱性をスキャンできることが望ましい。スキャン対象についても、特定のOSのみに限定したくない。

 

Metasploitで、exploitモジュールごとにcheckコマンドを叩けば、脆弱性の有無は確認できるが、かなりの手間。

 

脆弱性スキャナー

脆弱性の有無を自動で検出してくれるのが、脆弱性スキャナー。

 

Webアプリの脆弱性スキャナーは除外して、有償製品で、無償版もあって有名どころは、

  • Nexpose
  • Nessus

あたり。

 

オープンソースでは、Nessusから派生した

  • OpenVAS

の情報が豊富に掲載されている。

 

CEHのテキストには、

  • GFI LanGuard
  • Qualys
  • SAINT

なども紹介されていたが、有料で、情報が少ない印象です。

 

Nexpose・NessusはMetasploitとの連携ができるらしく、スキャン結果のインポートだけでなく、msfconsoleからプラグインを使用して、操作が可能になっている。

 

www.offensive-security.com

 

www.offensive-security.com

 

ではさっそく、脆弱性分析のスタート、と思いきや、KaliにNexpose・Nessusはインストールされていない。KaliのサイトのToolsには表示すらされていない。

 

OpenVASはと言えば、Kaliのサイトに利用法が記載されているが、どうやらインストール方法ではないらしい。

tools.kali.org

 

さらに見ていくと、OpenVASは名称が変わって、GVM(Greenbone-Vulnerability-Manager)になったとのこと。

 

Kaliのツールメニューを見ると、こんな感じになっていて、自分で準備しないと、脆弱性分析できなさそう。

f:id:chikuwamaruX:20210710100440p:plain

 

Todo

Kaliへ以下の3つをインストールして、検証。

いろんな人が言っているのは、脆弱性スキャナーは、それぞれ特徴があるので、複数組み合わせて使うべき、とのこと。

 

つ・づ・く

pandasの覚え

pandasの情報元

 この本で一通り勉強しました。

 

この本は、GitHubにサンプルコードがあります。

github.com

 

本家のドキュメントは、こちら。

pandas.pydata.org

DataFrameの3要素
  • インデックス
  • カラム
  • データ

 各要素へのアクセス方法

movie = pd.read_csv('data/movie.csv')
columns = movie.columns
index = movie.index
data = movie.values

 DataFrameの作成

クラッチでの作成

 df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD"))

 

ファイルを読み込み作成(よく使うもの)

#CSV
df = read_csv(ファイルパス)

#Excel
df = read_excel(ファイルパス)

#HTML
df = read_html(io='https://example.com/')

※readをtoに置き換えれば出力

よく使うパラメーター

index_col

encoding

 

ドキュメント 

Input/output — pandas 1.3.0 documentation (pydata.org)

 

  • DataFrameの全体の操作

df.head()

df.tail()
df.shape()
df.size()
df.ndim()
len(df)
df.count()
df.describe()
df.info()

  • <要約統計>

mix,max,mean,median,std

 

  • <欠損値の確認>

df.isnull().sum()

  

  • <ソート>

df.sort_values(['columnA','columnB'] , ascending=False)
df.nlargest(10, 'columnA').nsmallest(5, 'columnB')

  

データの部分抽出
  • インデックスが数字の場合

df.iloc[1]

df.iloc1,2,3:インデックスが1から3

df.iloc[1:10] : インデックスが1から10

df.iloc[1:10:3] : インデックスが1から10で、3個づつ

 

df.iloc[1:10,0:5] : インデックスが1から10で、すべての先頭から5つのカラム

df.iloc[1:10,:10] : インデックスが1から10で、すべての先頭から10つのカラム

  

  • インデックスが文字の場合

df.loc['A']

df.loc'A','B','C':インデックスがAからC

df.loc['A':'C'] : インデックスがAからC

df.loc['A':'Z':3] : インデックスがAからZで、3個づつ

  

  • カラムのみの選択

df.fileter(like='col')

df.filter(items=['one', 'three'])

df'colA','colB'

  

Booleanインデックス法
  • 単一条件

df_ser = df['colA'] > 10

 

  • 複数条件

criteria1 = df.colA > 8

criteria2 = df.colB == 'hoge'

final = criteria1 & criteria2

df.loc[final]

  

  • トップ5を除く

top5 = df.colA.value_counts().index[:5]

criteria=~df.colA.isin(top5)

df[criteria]

  

  • クエリメソッド

depts=['A','B']

qs = 'colA in @depts and colB > 10'

df.query(qs)

 

  • whereメソッド

df.where(criteria, other=100)

 

カラムの追加と削除

 

  • フォーマット

df['colA'] = pd.to_datetime(df['colB'], format ='%H:%M:%S.%f')

 

mapping = {'A':'123','B':'345'}df['colC'] = df['colD'].map(mapping)

 

  • lambda式

df['colE'] = df['colF'].fillna('').apply(lambda x : 'A' if x =='' else 'B')

 

  • 独自ファンクション

def cust(x): 

 if x='':   

  return 'A' 

 else:   

  return 'B'

 

df['colZ'] = df['colX'].apply(cust)

 

集約
  • 基本

group_col=['colA','colB']

agg_col={'ABC':['sum','mean'],'EFG':['mean']}

df.groupby(group_col).agg(agg_col)

※集約関数は独自ファンクション指定化

  

  • グループオブジェクトの操作

grouped =df.groupby(['colA','colB'])

grouped.get_group( ('A','B') )

 

データ再構成

df.stack

df.unstack

df.melt

df.pivot_table

 

結合
  • concat:複数のDataFrameを鉛直及び水平に連結する
  • join:複数のDataFrameを水平に結合
  • merge:2つDataFrameを水平に結合

 

  • concat

鉛直

s_list=[df2016,df2017]

pd.concat(s_list)

pd.concat(s_list, keys=['2016','2017'], names=['year','Symbols'])

 

水平

 s_list=[df2016,df2017]

pd.concat(s_list, keys=['2016','2017'], axis='colimns', names=['year','Symbols'])

pd.concat(s_list, join='inner', keys=['2016','2017'], axis='colimns', names=['year','Symbols'])

※concatのjoinパラメターはinner or outerしかない

 

  • join

ohter = [df2.add_suffix('_2017'), df3.add_suffix('_2018')]

df1.add_suuffix('_2016').join(ohter, how='outer')

 

  • merge

df1.merge(df2,on=['colA','colB'],how='left')

 

Information GatheringのInformation Gathering

Information Gathering(情報収集)

Information Gatheringは、ハッキングにおける情報収集フェーズを表すのですが、言葉が微妙に異なる。

 

CEHでは、

偵察(Reconnaissance)

スキャンニング(Scanning)

列挙(Enumeration)

が事前準備として位置づけられていて、

Footpringという概念でまとめられている感も。

 

Penetration Testing Execution Standard (PTES)という侵入テストのガイドラインでは、7ステップのうち、

事前準備(Pre-engagement Interactions)
情報収集(Intelligence Gathering)
脅威モデリング(Threat Modeling)

あたりが該当するのでしょうか。

 

Information Gatheringで使用するツール

Kaliのサイトでツールが分類されているので、情報収集フェーズで使用するツールを調査。

tools.kali.org

 

上記でリストにツールの名前があっても、Kaliにはインストールされてなかったり、Kaliのメニューにあるけど、上記にはなかったり、良く分かりません。。。

 

CEHのテキストでは、初手namp的に、いろんなことをnmapにやらせていた。

Metasploitのauxiliaryモジュールでも同等のことができる。

 

一旦、以下の表にまとめる。

 

 分野

Kaliの

ツール

NMAP Metasploit
DNS Analysis dnsrecon nmap -sSU -p 53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=example.com <target> auxiliary/gather/enum_dns
Live Host Identification masscan nmap -sP <IP Address/Subnetmask> auxiliary/scanner/ip/ipidseq
Network & Port Scanner masscan nmap <IP Address> auxiliary/scanner/portscan/syn
SMB Analysis smbmap nmap --script smb-os-discovery <Target IP address> auxiliary/scanner/smb/smb_version
SNMP Analysis snmp-check nmap -sU -p 161 --script=snmp-info 192.168.0.25 auxiliary/scanner/snmp/snmp_login
SSL Analysis sslscan nmap -v --script ssl-enum-ciphers -p 443 example.com auxiliary/scanner/http/ssl

 

いろんなツールがあるけど、結果はほとんど同じなので、個人の好みなのでしょうか。 

nmapの遅さが気になるが、masscanは数倍速いので、ここは使い分けが必要と感じるところ。

 

良く分からない分類達
  • IDS/IPS Idetification・・・ロードバランサ(lbd)とWAF(wafw00f)の検出だった
  • Route Analysis・・・netdiscoverはライブホスト検索?
  • SMTP Analysis・・・swaksはSMTPのテストに最適、という情報しか見つけれない

 

OSINT Analysisのツール
  • Maltego
  • spiderfoot
  • theharvester
  • recon-ng

Kaliでは上記が用意されているが、使用方法についての情報量が多くて、消化不良。

 

CEHでは、

なども紹介されていた。

 

この時点でお腹いっぱいですが、これらのツールがあれば必要最低限の情報収集はできる、はず。

 

Active Directoryのデータ処理

Active Directoryの管理

 Active Directoryを使用していると、ゴミデータが黙ったり、変な設定がいつまでも残っていたり、ということがある。

 GUIでマウスをポチポチしながらの確認作業も、いつの間にか気が遠のいていく。。。

 

 ユーザーとグループの出力

saku-jp.hatenablog.com

 

こちらのサイトを参考にさせていただき、ユーザーとグループの情報をCSV出力する。

 

  • ユーザーの一覧のCSVファイル出力

csvde -u -f c:\adlist_u.csv -r objectCategory=user -l cn,description,memberOf

 

  • グループの一覧のCSVファイル出力

csvde -u -f c:\adlist_g.csv -r objectCategory=group -l cn,description

 

ここまではOKだけど、出力した2つのファイルをどうやって結合するか。

 

ユーザーデータの構造

ユーザーは複数のグループに所属できる。

adlist_u.csvのデータを見ると、memberOfというフィールドに所属グループが表示されている。「;」で区切られて複数表示される。

f:id:chikuwamaruX:20210626093959p:plain

 

これを、以下のようにグループ毎のレコードに分割したい。

f:id:chikuwamaruX:20210626094358p:plain

 

Pythonでやってみる

 今後ログの分析などを考えて、あと、少しカッコつけて、Pythonでやってみる。

 

jupyter notebookの環境で以下のコードを入力して実行。 

import pandas as pd

#UTF-16エンコードする
user = pd.read_csv('adlist_u.csv',encoding='UTF-16')
#所属グループを分割する
user['GROUP']= user['memberOf'].str.split(';', expand=False)
#リスト化されたものを複数行にする
user_group=user.explode('GROUP')
#CSV出力
user_group.to_csv('user_group.csv',encoding='utf_8_sig')

explodeが一撃で行の分割をやってくれる。

 

グループの一覧とユーザーの一覧を結合させる。

#グループの一覧を読み込み
group = pd.read_csv('adlist_g.csv',encoding='UTF-16')
#結合用フィールド作成
group['GROUP']=group['DN']
#結合
mg = pd.merge(group,user_group,on='GROUP', how='outer')
#CSV出力
mg.to_csv('mg.csv',encoding='utf_8_sig')

少し欲張って

これが出来るなら、ファイルサーバーのアクセス権限も見直したい。

 

slog.wp.xdomain.jp

 

こちらを参考に、以下PowerShellコマンドでCSVを出力する。

Get-ChildItem -path \\aa-server\share\*\*\* | where {$_.mode -match "d"} | Get-Acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, AccessToString |Export-Csv acl.csv -encoding Default
※階層の深さは\*で追加する。その深さの階層しか見ないので注意
 

CSVデータの AccessToStringがアクセス許可されたグループ・ユーザーで、改行コードで分割できる。

import pandas as pd
#UTF-16エンコードする
acl = pd.read_csv('acl.csv',encoding='UTF-8')
#ACLを分割する
acl['GROUP']= acl['AccessToString'].str.split('\n', expand=False)

#リスト化されたものを複数行にする
acl_group=user.explode('GROUP')

 

先ほどのデータとマージすれば、どのユーザー、どのグループが、どのフォルダのアクセス権があるのか、というリストが作成できる。

 

今後、ログの解析から、異常値の検出や予測などできればいいなぁ。

 

つ・づ・く