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

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

CSPM(Cloud Security Posture Management : クラウドセキュリティ状態管理)

CSPMとは

クラウドのセキュリティ事故の99%は人為的ミスによるもの、という話をよく聞く。

実際の統計の存在は良く分からない。

2019年のガートナーの記事で、「Through 2025, 99% of cloud security failures will be the customer’s fault.」というものがある。これの拡大解釈なのだろうか?

www.gartner.com

たしかに、クラウドの設定次第で意図していない情報の公開が漏洩になる事例はよく見る。クラウドの利用者が気づきにくい、ということもあり、そういうセキュリティ状態を管理するものがCSPMと呼ばれている。

例えば、Palo Alto Networksが提供しているCSPM、「Prism Cloud」などが有名。

www.paloaltonetworks.jp

AWSGCP、Azureなどのクラウドサービスのセキュリティ状態をチェックしてくれるクラウドサービス。クラウド脆弱性診断、と言えるだろうか。

 

VMwareは、無償ツールを提供しているようです。

atmarkit.itmedia.co.jp

美味しい話の裏があり、利用するには以下の3つの手順を踏む必要がある。

  • VMwareにメールを登録する
  • VMware Cloud Services」にアカウントを作成する
  • CloudHealth Secure Stateの「VMware Cloud Services Organization」に企業が利用しているクラウドを関連付けさせる

ということで、VMwareさんに契約しているクラウド情報が筒抜けに。

クラウド同士でAPIでの情報収集になるので、CSPMのセキュリティの確保、という話も出てこないのか。

クラウド側でのセキュリティチェック

クラウドサービス内でセキュリティチェックができるサービスは存在する。

AWS : AWS Secuirty Hub(有料)
GCP : Cloud Security Command Center(無料・有料)

クラウドサービスのことは、そのクラウドが一番詳しいはずなので、まずは、これらを実施するのが有効なのでは。

CEH v12 がリリースされました

CEH v12

EC-coucilからCEH v12のアナウンスがありました。

www.eccouncil.org

 

以前、過去のサイクルからv12を2023年3月と、勝手に予想していましたが、2022年9月リリースとなりました。

chikuwamarux.hatenablog.com

CEHのバージョンは、2年から2年半のサイクルでバージョンアップしていくようです。

v11とv12の違い

モジュールの数は変わらず、20のままで、タイトルも同じでした。

テストの形式も大きくは変わっていないように思う。

以下のパンフレットにまとめられている。

https://www.eccouncil.org/wp-content/uploads/2022/09/CEH-brochure.pdf

 

こちらのyoutube動画の方が、EC-coucilよりも詳細だったりします。

What’s New in Certified Ethical Hacker CEH v12 | Know Everything about CEH v11 vs CEHv12 Lab, Exam - YouTube

 

動画で、以下の資料が表示されているが、オリジナルを見つけられなかった。

 

パンフレットの17ページに、技術的な更新が列挙されている。

Technology Updates:
1. MITRE ATTACK Framework
2. Diamond Model of Intrusion Analysis
3. Techniques for Establishing Persistence
4. Evading NAC and Endpoint Security
5. Fog Computing
6. Edge Computing
7. Grid Computing

ダイアモンドモデル、って初耳。

 

あと気になったのは、17ページ目で、

Features:

1. New Learning Methodology: Learn – Certify – Engage – Compete

とある。

Competeの部分は、毎月CTF形式のコンペが実施されるようです。座学で習ったことを使って、出題された問題を解いて、その得点を競う。

1年分のテーマも決まっていて、多岐にわたっています。

 

ラボで、テキスト通りのハッキングスキルを試していも飽きてくるので、こういう取り組みは面白い、と思った。

まとめ

これだけセキュリティの必要性が叫ばれている中で、その資格であるCEHが2年でバージョンアップ。内容は大きく変わっていないが、より実践的な取り組みを盛り込んだ。

お値段据え置きなのか気になるところです。また、v12の日本語での学習はもう少し先になると思いますが、円安の影響が気になる。

 

 

ゼロトラストの周辺

バズワードとしてのゼロトラスト

最近のセキュリティ関係のセミナーでは、「ゼロトラスト」というワードが必ず出てくる。1年程前までは、言葉ばかりが先行して、肝心の中身は、コロナ下ということもあり、大手企業に向けて、かなり高額なサービスという印象だった。

アーリーアダプターの方々の人柱のおかげか、技術要素の整理も進み、IPAからも「ゼロトラスト移行のすゝめ」などという文書も出てきた。

www.ipa.go.jp

 

ゼロトラストの全体図としては、以下が分かりやすい。

 

図 ゼロトラストネットワークの構成要素

https://xtech.nikkei.com/atcl/nxt/column/18/01311/052200002/ から引用。

上記内容は、以下の書籍にまとめられている。

まず、表紙に書かれている3-4文字の略称が覚えられず、苦労する。

IAM:アイデンティティ&アクセス管理

IAP:アイデンティティ認証型プロキシー

SWG:セキュアWebゲートウェイ

SIEM:セキュリティ情報イベント管理

CASB:クラウド・アクセス・セキュリティ・ブローカ

MDM:モバイルデイバス管理

EDR:エンドポイント・ディテクション&レスポンス

DLP:情報漏洩防止

SASE:セキュア・アクセス・サービスエッジ

SDP:ソフトウェアで定義された境界

書籍の中で、具体例などを用いて、説明されており、理解が進んだ。

上記概念が全て提供されているサービスはなく、ベンダーで個別に提供されていたり、複数の機能を併せ持つサービスも提供されていて、混沌としている。

さらに混乱するのが、EDRやSDPなど、似た概念が増えていること。

EDR(EndPoint Detection and Response)周辺

EDRは、

EPP(Endpoint Protection Platform:従来のウイルス対策ソフト)や
NGAV(Next Generation Anti Virus:NGAVは次世代アンチウイルス

では守れきれなかった場合に、隔離・根絶・復旧までを行う仕組み。

MDR(Managed Detection and Response)は外部の専門家のサポートを受け、EDRをはじめとしたセキュリティ製品によっていち早く脅威を検知し、インシデント対応をするためのサービス。

NDR(Network Detection and Response)とは、ネットワーク上のさまざまな情報(ログ)を収集し、分析することで危険なものを検知するソリューション

XDR(Extended Detection and Response)とは、EDRの機能を拡張することで、エンドポイントだけでなく、ネットワーク、アプリケーションスイート、ユーザーペルソナ、オンプレミスのデータセンター、クラウドホスティングされているワークロード全体を通じて、サイバー攻撃の検知と防止を実現できるようにするセキュリティアプローチです。

EDRNDRを併せてXDRという場合もあるようです。

米調査会社ガートナーは、EDRNDRとSIEMの3つを「SOC Visibility Triad」として、重要な組み合わせであるとしています。

引用:https://medium.com/anton-on-security/back-in-2015-while-working-on-a-gartner-soc-paper-i-coined-the-concept-of-soc-nuclear-triad-8961004c734

 

SDP(Software Defined Perimeter)の周辺

SDPは、集中的なアクセス制御を「ソフトウェア」で実現することで、物理的な境界では防ぎきれない脅威の防御を可能にする仕組み。

サーバーの仮想化では、以下の単語が出てきた。

SDC:Software Defined Compute
SDS:Software Defined Storage
SDN:Software Defined Network

物理的なリソースを仮想化して、ソフトウェアで制御する

上記以外に、

SDDC:Software Defined Data Center
SDI:Software Defined Infrastructure
SD-WAN:Software Defined Wide Area Network

など、もう少し広い概念となる。

 

SDP≒ゼロトラスト、と言える気もするが、やはり、ゼロトラスト、という曖昧な概念でなければ、包括的な考えとして、全体を網羅することは難しいのでしょう。

 

Windows Management Instrumentation (WMI)について

Windows Management Instrumentation (WMI)とは

WMIは、OSやコンピュータの設定・状態を参照したり変更したりするための仕組みのこと。Windows95とかでも稼働していた。

ローカルだけでなくリモートも管理できるため、複数のサーバーを管理するためにスクリプトを書いたり、WMIを利用したサーバー管理ツールが多々ある。

便利な反面、セキュリティ面での考慮が必要になる。

 

MTIRE ATT&CKのTechniqueの一つに挙げられて、Procedure Examplesでは88の攻撃事例が紹介されている。4つの対策が挙げられている。

attack.mitre.org

ファイルレスマルウェアの代名詞として、PowerShellとWMIの名が挙げられることも。

 

CVE-2021-26414

CVE-2021-26414はDCOMのセキュリティをバイパスする脆弱性。WMIのリモート接続でDCOMを使用するので影響を受けることになる。

詳細については、CVEにある以下のリンクで、具体的に説明されている。

認証がスルーされて、Kerberosチケットが発行されるらしい。

packetstormsecurity.com

 

マイクロソフトは、以下の3段階での対応を発表。

2021 年 6 月 8 日

セキュリティ強化の変更は既定では無効になっていますが、レジストリ キーを使用して有効にできます。

2022 年 6 月 14 日

セキュリティ強化の変更は既定で有効になっていますが、レジストリ キーを使用して無効にすることができます。

2023 年 3 月 14 日

既定で有効になっている変更のセキュリティを強化し、無効にする機能はありません。 この時点で、環境内のセキュリティ強化の変更とアプリケーションに関する互換性の問題を解決する必要があります。

KB5004442 - Windows DCOM Server セキュリティ機能バイパスの変更を管理する (CVE-2021-26414) (microsoft.com)

 

Windows製品同士であれば、サーバーとクライアントでアップデートをすれば、問題なく接続できる。しかし、Windows以外のサーバーから、WMIを使用すると、接続できなくなる場合がある。

Windows側には、以下のログが出力される。

イベント ID

メッセージ

10036

"サーバー側の認証レベル ポリシーでは、ユーザー %1\%2 SID (%3) がアドレス %4 から DCOM サーバーをアクティブ化することはできません。 少なくともクライアント アプリケーションでライセンス認証レベルをRPC_C_AUTHN_LEVEL_PKT_INTEGRITYに上げてください。

(%1 – ドメイン、%2 – ユーザー名、%3 – ユーザー SID、%4 – クライアント IP アドレス)

2023年3月14日までは、レジストリを変更することで回避できるが、それ以降はOSの標準として、ライセンス認証レベルがRPC_C_AUTHN_LEVEL_PKT_INTEGRITYになる。

そのレベルに対応していないクライアントからのRMI接続はできなくなる。

 

認証レベルについて、以下に記載がある。

docs.microsoft.com

 

 

実は、CVE-2021-26414の影響を軽視していて、Windows Updateをしたら、オープンソースLinuxベースの監視ツールが機能しなくなり、慌ててしまった状況です。

セキュリティ診断ツールなどで、DCOMを使っている場合にも影響があると思われる。

Windowsのリモート管理には、WinRM (Windows Remote Management)と呼ばれるHTTP・HTTPSベースのものもあるようです。

今後とも注視していく必要がありそうです。

Tabnabbing

Tabnabbing(タブナビング)とは

Tabnabbingブラウザで、リンク先を別のタブで開くアクションを使った攻撃手法。フィッシッングに用いられる。ブラウザでの対策も進んでおり、改めて再確認をする。

 

HTMLで以下のように記述すると、hoge.htmlを新しいタブで開くことができる。

<a href=hoge.html target=_blank>新しいタブで開く</a>

この時、hoge.htmlからリンクを開いた元のページを操作することが可能。

 

具体的には、以下をhoge.htmlで実行すると、リンク元のページを書き替えることができる。

window.opener.location = "https://www.yahooo.co.jp/login"

再ログインを求められている、と利用者に誤認させられれば、IDとパスワードを詐取できる。

 

Tabnabbing対策

具体的な対策として、rel="noopener noreferrer"を追加する方法が一般的。

<a href=hoge.html target=_blank>新しいタブで開く</a>

<a href=hoge.html target=_blank rel="noopener noreferrer">新しいタブで開く</a>

と書き換えることでTabnabbing攻撃を防げる。

noopenerとnoreferrerの役割は以下。

  • noopener:window.opener経由での参照を不可能にする。
  • noreferrer:"noopener"の機能に加えて「参照元のリンク情報を渡さないようにする」という役割がある

 

noreferrerの方が、サポートしているブラウザが若干多い。

https://caniuse.com/?search=norefer

 

また、IE11はnoopenerをサポートしていないようです。

 

noreferrerだけ設定しておけば良い気もします。副作用として、リンク元が取得できないため、アクセス解析アフィリエイトをしている方には不都合があるようです。

 

また、最近のChrome, Edge, FireFoxなどでは、リンクを自動的にnoopenerとして開くようになっているようです。

chromestatus.com

 

noopenerで開くことにより、パフォーマンスの影響を受けにくくなる、という効果もあるようです。

結論

Tabnabbing対策として、rel="noopener noreferrer"を付与するのは過去の対策となり、設定しなくても問題無さそう、という意見が多い。理由としては、ブラウザでnoopenerとして開くから。

セキュリティ的には、最新のブラウザを使っていれば大丈夫、ということになる。

しかし、IEモードが生き残っている状況を考えると、noreferrer付与の検討も必要で、その場合は、リンク元が取れない副作用とのトレードオフになる。

 

フィッシングデータのディープラーニング

フィッシングサイトのデータでディープラーニング

こちらで、ランダムフォレストによる機械学習をしてみた。

chikuwamarux.hatenablog.com

 

ランダムフォレストの方が、ロジスティック回帰よりも精度が高かった。ディープラーニングではどうか?

 

基本的な流れは、通常の機械学習と同じ。ディープラーニングのライブラリはkerasを使用する。

 

データセットのResult(正解データ)に-1(フィッシングサイト)と0(通常サイト)というデータが入っているが、ディープラーニングでは、0,1にする必要がある。

#Resultの値が-1を0に変える ⇒ディープラーニングでは必須
training_data['Result']=training_data['Result'].apply(lambda x : 0 if x ==-1 else 1)

 

kerasをロードして、隠れ層を500持ち、relu関数を活性化関数とするモデルを作成。

from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout

# モデルの作成
model = Sequential()

model.add(Dense(500, input_shape=(30,), activation='relu'))
model.add(Dropout(0.2))

model.add(Dense(500, activation='relu'))
model.add(Dropout(0.2))


model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
過学習を防ぐため、EarlyStoppingを設定して実行と評価。
from keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(monitor='val_loss', patience=5)

# 訓練
hist = model.fit(X_train, y_train,
                 batch_size=64,
                 verbose=1,
                 epochs=200,
                 validation_split=0.1,
                 callbacks=[early_stopping])

# 評価
score = model.evaluate(X_test, y_test, verbose=1)
print("Test score", score[0])
print("Test accuracy", score[1])


結果は、95%の精度でランダムフォレストよりも悪かった。

課題

EarlyStoppingにより、早々に学習が打ち切られてしまう。

活性化関数の詳細などをもう少し理解して、元データの加工をして、モデルの作成なども工夫する必要があるのかもしれない。

 

 

フィッシングデータの機械学習

フィッシングデータの機械学習

以前、フィッシングサイトのデータセットを調べた。

chikuwamarux.hatenablog.com

 

これを使って、機械学習をしてみる。

 

この書籍を参考にさせてもらう。

www.oreilly.co.jp

 

サンプルコードは以下にある。

github.com

 

サンプルコードでは、ロジステック回帰のアルゴリズムを利用して、ハイパーパラメーターを検索して、その後、決定木のアルゴリズムを使っている。

 

ロジステック回帰では、92%程度の精度が出て、決定木では95%ほどになる。

別のアルゴリズムである、ランダムフォレストを試してみる。

 

ランダムフォレストによる機械学習

サンプルコードの一部を変更した。元のデータをdata.xlsxに格納して、データ格納先をnumpy配列からDataFrameに変更して、RandomForestClassifierでの機械学習

コードは以下の通り。

 

#データロード
import pandas as pd
training_data = pd.read_excel('data.xlsx')


# Xに特徴量30個を格納、yにフィッシングサイトか、どうかResultを格納
X = training_data.iloc[:,0:30]
y = training_data.iloc[:,30]


#訓練用データを8割、検証用データを2割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True, random_state=101)


from sklearn.ensemble import RandomForestClassifier
# ランダムフォレスト 学習モデルを作成(他のアルゴリズムはここが変わる)
model = RandomForestClassifier()


# 訓練用データを使って検出器を訓練する。
model.fit(X_train, y_train)
 
# 予測させる。
predictions = model.predict(X_test)


# このフィッシング検出器の正解率を出力させる。
from sklearn.metrics import accuracy_score 
accuracy = 100.0 * accuracy_score(y_test, predictions)
print("精度: {}".format(accuracy))
 

これで、96%以上の精度が出る。やはり正確性という点では、ランダムフォレストに軍配が上がる。

ただ、ハイパーパラメーターを検索して、適用しても精度が下がる。

 

ランダムフォレストのハイパーパラメーターは以下。

scikit-learn.org

 

よく使用されるのは、以下の2つ。

  • n_estimators=Treeの数
  • max_depth=深さ

デフォルトでは、

  • n_estimators=100
  • max_depth=none

となっている。

 

ハイパーパラメーターを探索すると、

  • n_estimators=900くらい
  • max_depth=21くらい

となる。

これを適用すると、デフォルトパラメーターよりも精度が下がるので、過学習しているのかもしれない。

 

ランダムフォレストの利点としては、重要な特徴量が分かること。つまり、どの特徴量が結果に影響を与えているのか、が分かる。

コードは以下の通り。

import numpy as np
import matplotlib.pyplot as plt

# Feature Importanceの抽出
feature = model.feature_importances_   

#特徴量の名前
label = training_data.columns[0:]

#特徴量の重要度順(降順)
indices = np.argsort(feature)[::-1]

for i in range(len(feature)):
    print(str(i + 1) + "   " + str(label[indices[i]]) + "   " + str(feature[indices[i]]))


#グラフ表示
plt.title('Feature Importance')
plt.bar(range(len(feature)),feature[indices], color='lightblue', align='center')
plt.xticks(range(len(feature)), label[indices], rotation=90)
plt.xlim([-1len(feature)])
plt.tight_layout()
plt.show()

上記コードにより、下記グラフが得られる。

 

以下2つの項目で半分以上の重要度を占めている。
SSLfinal_State : 0.331481451216863
URL_of_Anchor : 0.24362546519501826

 

SSLfinal_Stateは、サーバー証明書の状態。が信頼できるもので、有効期限が1年以上のもの、自己証明書、それ以外、という区分け。

URL_of_Anchorは、ページ内のリンクがリンク先が無いものの割合。31%未満、31%~67%、それ以外という区分け。

 

ランダムフォレストは、上記2つを重視して判定していることが分かるので、人間も同様にそこを重点的に見るとフィッシングと判定できる精度が上がる。