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

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

ActiveDirectoryとAzure AD連携

ゼロトラストの初手

ゼロトラストを実現しようとすると、認証管理=Identity and Access Management(IAM)がインターネット上に必要。

オンプレ環境にあるActiveDirectoryと連携するソリューションは多いが、一番、親和性が高そうで、コスパの良いAzure ADが最有力候補になる。

 

Azure AD Connect

qiita.com

こんな記事もあるように、ActiveDirectoryとAzure ADとの連携自体はすんなりできる。

ただ、いろいろと考慮事項は多い。

 

サインオン方式の選択が悩む。

f:id:chikuwamaruX:20211016135649p:plain

 

こちらの資料の助けを借りて、明確に認証方式が選択できました。

www.slideshare.net

クラウドにパスワードを保管することへの不安についても、しっかりと答えてくれています。

既にAzureADにアカウントが存在するケース

AzureADでは、MS365を使うため、アカウントがメールアドレスになっていた。

一方で、ActiveDirectoryでは、社員番号がアカウントとして割り振られている。この場合、ActiveDirectoryのパスワードをAzure ADに同期できるのか?

結論としては、出来た。

 

こちらを参考にさせていただきました。

jpazureid.github.io

 

電子メールをユーザープリンシパル名と一致させておけばよい。

f:id:chikuwamaruX:20211016140807j:plain

 

タダより怖いものはない?

現状、Azure ADは、無料の範囲で使用しているが、他のクラウドサービスに対してSAML認証を提供できるので、シングルサインオンが実現できてしまう。

PCへのログインも、AzureADで認証とかIntuneという機能を使うとPCの管理もクラウド上で出来てしまう。当然、追加費用が発生します。

 

いろんなものがクラウドに出ていくと、そのセキュリティを管理するサービスもクラウド上で提供されていて、クラウドセキュリティポスチャーマネジメント(CSPM)、と呼ばれる。

 

クラウドでの設定が適切か、システム的にチェックして、意図しない情報の公開などを防止できたりするようです。確かに、日々進化していくクラウドサービスで、設定項目も増えていくなかで、ミスの発見は困難なので必要になる。

 

セキュリティの費用対効果、というものが益々、難しくなってきます。

Burp Suiteな1か月

Burp三昧

「burp」の意味を検索すると「げっぷ」、だそうです。

げっぷの擬音語がそのまま、単語になったとか。

なぜWeb脆弱性診断ツールにその名前を付けるのか理解に苦しむところです。

 

前回から1か月ほど、Web Security AcademyでBurp Suiteを使いながら勉強していますが、まさに「げっぷ」がしたくなるほど、お腹いっぱいです。

chikuwamarux.hatenablog.com

 

ラーニングコース詳細

Web Security Academyのラーニングコースを表にしてみました。

大分類 中分類 ラボの
Server-side topics SQL injection 16
Authentication 14
Directory traversal 6
command injection 5
Business logic vulnerabilities 11
Information disclosure 5
Access control 13
Server-side request forgery (SSRF) 7
XML external entity (XXE) injection 9
Client-side topics Cross-site scripting(XSS) 30
Cross-site request forgery (CSRF) 8
Cross-origin resource sharing (CORS) 4
Clickjacking (UI redressing) 5
DOM-based vulnerabilities 7
WebSockets 3
Advanced topics Insecure deserialization 10
Server-side template injection 7
Web cache poisoning 13
HTTP Host header attacks 6
HTTP request smuggling 12
OAuth authentication 6
     

 

上記コースが用意されていて、上から順番にやっていきました。

1日2-5個づつのラボ、30分-2時間でこなしていくペースで、なんとかAdvanced topicsに到達しました。

 

こんな進捗画面も表示されると、コンプリートを目指したくなる。

f:id:chikuwamaruX:20211009093724p:plain

1か月やってみて

以下3点の気づきがありました。

  1. すべて動画のレクチャーがあるわけでない
  2. 無料のBurp Suite Community Editionではクリアできないものがある
  3. Burp Suiteのみの講座ではない

順番に記載します。

 

1. すべて動画のレクチャーがあるわけでない

基本、英語の説明なので、分からない場合は動画を見て、Burp Suiteの使い方を学びました。動画も基本的に英語なのですが、画面キャプチャーなので、音声無しでOK。ただ、後半のラボから動画がないことが多い。

けれども、検索するとyoutube動画が見つかることもあるが、少しバージョンが古かったりする。

動画のリンクが「Community solutions」となっているので、コミュニティの善意に支えられているのでしょうか。

 

2. 無料のBurp Suite Community Editionではクリアできないものがある

無料のCommunity Editionでどこまでできるか確認するのも、課題の一つ。

基本的に、以下の機能を使用することが多い。有料版との機能差はあまりないらしい。

  • Proxy
  • Repeater
  • Intruder
  • Decoder

これ以外に、「Burp Collaborator」を使わないといけないラボがある。これは有料版でないと使えない機能らしく、ここまでで10個程度が該当している。

 

あと、Intruderで総当たり攻撃ができるのだが、Community Editionではスピードが遅い、らしい。動画を見ると、あっという間に総当たり攻撃が完了している。

 

Community Editionでは、実行時に、毎回以下のメッセージが表示される。

f:id:chikuwamaruX:20211009095756p:plain

 

4桁の数字の総当たり攻撃の場合、10,000回のリクエストを投げることになるが、500回くらいで、リクエストの間隔がどんどん伸びていき、2-3日かかりそうな気配だったので諦めました。

 

3. Burp Suiteのため、だけの講座ではない

講座はWebアプリケーション全般の攻撃を解説している。Burp Suiteを使わなくても、やられサイトのフォームに、XSSSQLインジェクションペイロードを流し込むことでクリア、となることもある。

 

逆に、Burp Suiteだけなく、別のオープンソースを使う場合もある。「Insecure deserialization」という単元では、Javaシリアライズオープンソースのツールで行い、その結果をBurp Suiteで流し込む、というラボの課題でした。

Burp Suiteの宣伝、のみが目的という訳ではなく、Webアプリケーションの脆弱性の警鐘を鳴らす意図を感じます。

 

まとめ

Web Security Academyで、無料のBurp suite Community Editionでも十分に学習効果は得られる。

ラボをコンプリートするためには、Professional Editionが必要だが、30日無料トライアルでいけそう。

なんとか2か月で完了を目指す。

つ・づ・く

 

 

データの可視化

Pythonのデータ可視化

データの可視化のためのライブラリがたくさんある。

www.anaconda.com

 

Matplotlibが昔から有名で、そのラッパーライブラリがSeabornらしい。

使い方を眺めてみても、どうも使いづらい。

pandasのDataFrameのメソッドにplot()があり,こちらもMatplotlibをラッパーしているらしい。

 

#Seaborn
sns.jointplot(x='xdata', y='ydata', data=df)

 

#pandasのplot
df.plot.scatter(x='xdata', y='ydata')

直感的に後者の方が分かりやすいと思いつつ、パラメーターが増えたり、複雑なグラフはエクセルに逃げていたりしました。。。

 

Plotlyの登場

Plotyと呼ばれるデータ可視化ツールが最近の流行らしい。

plotly.com

PlotlyのラッパーがPlotly Expressと呼ばれている。

seabornとほぼ同等の機能を有していて、かつインタラクティブな操作ができるのが特徴らしい。

 

例えば、seabornで箱ひげ図を表示してみる。

f:id:chikuwamaruX:20211002165008p:plain

 

コードは以下の通り。

import seaborn as sns
import matplotlib.pyplot as plt
#アヤメデータの読み込み
iris = sns.load_dataset('iris')
%matplotlib inline

fig, ax = plt.subplots(figsize=(8,3))
sns.boxplot(x='sepal_length', y='species', data=iris, order=('setosa', 'versicolor', 'virginica'), ax=ax)
ax.set_title('品種毎のがく片の長さの箱ひげ図(cm)')
plt.show()

これでも、十分に簡潔なコードで記述できている。

 

Plotly Expressでは、こんな感じ。

f:id:chikuwamaruX:20211002165915p:plain

見た目もキレイなのですが、マウスを近づけると詳細データが表示されたり、表示範囲を変更できます。

 

f:id:chikuwamaruX:20211002170043p:plain

実際のコードはというと、seabornとそれほど変わらない。

#データのロード

import seaborn as sns
iris = sns.load_dataset('iris')

 

import plotly.express as px
fig = px.box(iris, y='species', x='sepal_length', color='species', orientation='h',
       category_orders={'species': ['setosa', 'versicolor', 'virginica']}, 
       title='品種毎のがく片の長さの箱ひげ図(cm)', width=600, height=400)
fig.show()

 

こんな本もあり、Dashというフレームワークを使えば、Webアプリも作れるようです。

 

もう少しPlotly Expressの使い方を調べて、ログなどの閲覧・分析に使えるようにしてみたいと思います。

つ・づ・く

 

 

ECE登録 ~その2~

オンラインセミナー受講編

前回、オンラインセミナーの受講票が無かったので、セミナーの画面コピーを添付したりして、ECE(EC-Council Continuing Education)ポイントを取得した。

chikuwamarux.hatenablog.com

 

ファイルアップロードで2Mのサイズ制限があるため、この方法は結構しんどい。

今回参加した、オンラインセミナーは事前予約制だったため、案内メールに受講するオンラインセミナーが記載されていた。

このメールだけで、受講証明となって、ECE(EC-Council Continuing Education)ポイントが取得できるか、確認してみた。

 

今回参加したのが、以下のセミナー。

event.shoeisha.jp

 

オンラインで登録して、セッションを申し込むと、登録完了メールが届く。

メールには以下の記載がある。

f:id:chikuwamaruX:20210923094244p:plain

40~50分のセミナーがお昼休みもなく、立て続けに実施される。

このメールのみをアップロードして、ECEポイントを登録してみた。

 

f:id:chikuwamaruX:20210923094658p:plain

Approved!、ということで、7ポイント取得。

 

オンラインセミナーの受講登録メールでECEポイントが取得できることが分かりました。

 

目指せ120ポイント、現在22ポイント。

つ・づ・く

 

 

 

ログ処理(WEBサーバー編)

WEBサーバーのログ

WEBサーバーのログについて、サーバーごとにログパーサーがあって、それで表示するのが手っ取り早い。

WEBサーバーのログ以外に、PCやネットワーク機器のログと結合させてトレースしたい場合など、標準的なログ解析ツールがあれば便利かなと思いPythonでのログ処理を実装してみる。

IISApacheのログファイルをJupyter notebookでpandasに読み込ませることを想定。

 

IISのログ

W3C形式で出力する場合、出力フィールドが変更可能、かつフィールド名がコメント行と区別なく書かれているので、独自で設定する必要がある。

以下は、w3cで出力される全フィールドなので、出力していないフィールドは削除する。

#フィールド名の設定 
log_field_names = ['date', 'time', 's-sitename', 's-computernam','s-ip', 'cs-method', 'cs-uri-stem', 'cs-uri-query', 's-port', 'cs-username', 'c-ip', 'cs(User-Agent)','cs(Cookie)', 'cs(Referer)','cs-host', 'sc-status', 'sc-substatus', 'sc-win32-status','sc-bytes', 'cs-bytes', 'time-taken']

 

ログファイルを指定して、sep=' 'で空白区切りをしていして、comment='#'でコメント行を指定して、ames=log_field_namesでフィールド名を指定すればデータフレームに収まる。

iis_log = pd.read_csv('u_ex210910.log', sep=' ', comment='#',  names=log_field_names)

 

日付と時間の型を変換しておく。

#日付・時間への変換    
iis_log['date'] = pd.to_datetime(iis_log ['date'])                                     
iis_log['time'] = pd.to_datetime(iis_log ['time'])       

 

f:id:chikuwamaruX:20210920121000p:plain

 

Apacheのログ

Apacheのログは、日付の形式が[20/Oct/2020:09:08:31 +0900]となっており、pd.to_datetimeで変換できないので、関数を使って変換する。

こちらを参考にさせて頂きました。

qiita.com

 

pytzがtimezoneの変換をしてくれるので、以下の関数を準備。

from datetime import datetime
import pytz

def parse_datetime(x):
    dt = datetime.strptime(x[1:-7], '%d/%b/%Y:%H:%M:%S')
    dt_tz = int(x[-6:-3])*60+int(x[-3:-1])
    return dt.replace(tzinfo=pytz.FixedOffset(dt_tz))

 

区切り文字のsepの指定が複雑です。

convertersに関数を指定して、日付に変換かけています。

apache_log = pd.read_csv(
    'access.log',
    sep=r'\s(?=(?:[^"]*"[^"]*")*[^"]*$)(?![^\[]*\])',
    na_values='-',
    header=None,
    usecols=[0, 3, 4, 5, 6],
    names=['ip', 'time', 'request', 'status', 'size'],
    converters={'time': parse_datetime,
                'status': int,
                'size': int})

f:id:chikuwamaruX:20210920121213p:plain

次の課題

ここまでくれば、データの集計などが簡単に出来る。その結果をグラフを使ったデータの可視化などに挑戦してみたいと思います。

Pythonで可視化と言えば、SeabornやMatplotlibが有名ですが、plotlyと呼ばれるフレームワークで、より表現力の高いインタラクティブなグラフが作成できるようです。

 

つ・づ・く

 

Burp Suiteな日々

Web Security Academy入学

Burp SuiteのCommunity Editionの使い方を覚えるため、PortSwiggerが提供するWeb Security Academyに入学、と言っても無料で、メールアドレスがあれば誰でも登録できる。

 

portswigger.net

 

Webセキュリティに関する教材と、Labと呼ばれる、実際のサーバー環境が与えられて、そこでBurp Suiteを使いながら、脆弱性の攻撃手法などを学べる。

 

教材は、

  • サーバーサイド:9
  • クライアントサイド:6
  • 上級編:6

に分かれていて、それぞれの題材に応じてLabがあり、全部197種類ほど用意されている。

 

OAuth 2.0 authentication vulnerabilitiesが一番上に表示されていたので、とりあえずやってみた。英語での説明ではあるが、動画を使ったBurp Suiteの操作方法も確認出来て、Webアプリケーションの脆弱性の理解と、Burp Suiteの操作方法、両方が学べます。

 

通常は、SQL Injectionあたりからやるのを推奨されていいます。

 

こんな感じで、受講履歴が管理されます。

f:id:chikuwamaruX:20210912104655p:plain

これが無料で提供されているのは凄いな、と感心します。

これを受講している人は、ホワイトハッカーとブラックハッカー、どちらが多いのか気になるところ。

 

Burp Suite Community Editionの限界

Web Security AcademyでLabを試していると、Burp Suite Cummunity Editionに無い機能を使わないと完了できないものが出てくる。

つまり、399ドルを払って、Professional Editionに上げてください、ということに。

 

この辺りを見ても、具体的な機能差はよく理解できない。

f:id:chikuwamaruX:20210912105140p:plain

 

実際のBurp Suiteを見ると、(Pro version only)とグレーアウトされている。

f:id:chikuwamaruX:20210912105257p:plain

 

OAuth 2.0 authentication vulnerabilitiesという単元で、Labのうち1つは、Burp Collaboratorを使用するものだった。

 

PortSwiggerの囲い込み戦略の凄さを感じます。

 

Community Editionを使いながらLabをクリアして、Professional Editionでないとクリアできないものは、30日間のFreeトライアルで挑戦してみます。

セコい話ですが、最終的には、399ドル払うべき、という結論になるんでしょうね。

 

つ・づ・く

 

Burp Suite Community Editionの初手

Burp in the middle

Burp Suiteをセットアップして、脆弱性のあるWebサイト=やられサイト、を準備してみたいと思います。

 

Burp Suiteセットアップ

以下の3ステップで完了。

  1. Burp Suiteをインストールして。
  2. ブラウザのアドオン「FoxyProxy」を設定して、プロキシ設定を簡単に。
  3. Burp Suite証明書のインポートで、警告表示もなくなる。

こちらのサイトを参考にさせて頂きました。

www.leon-tec.co.jp

 

やられサイトの準備

いろいろとあるようですが、OWASP BWA(Broken Web Applications Project)が古典的な位置づけなのでしょうか。2015年が最終リリースで、OVA形式で配布されている。

owasp.org

 

OWASP BWA(Broken Web Applications Project)の起動画面。

f:id:chikuwamaruX:20210904084915p:plain

 

各アプリケーション毎に、設問が設定されて、それをクリアしていくイメージ。正解はどこにあるのだろうか??

f:id:chikuwamaruX:20210904085733p:plain

 

こちらのBurp Suiteの公式ページでは、WebGoatという、やられサイトとBurpの具体的な使い方の情報がある。

これは、OWASP BWAに含まれるWebGoatアプリケーションのことらしい。

portswigger.net

 

OWASP BWAに含まれていたWebGoatは、別のプロジェクトに切り出されて、jarファイル単体かDockerでの提供。jarファイルでエラーになったので、Dockerで動かすことに。

owasp.org

 

Dockerコマンドを叩けば、すぐにアクセスできる。

docker pull webgoat/goatandwolf:latest

docker run -p 127.0.0.1:8080:8080 -p 127.0.0.1:9090:9090 -e TZ=Aisa/Tokyo webgoat/goatandwolf

 

こちらは今風の画面になっており、プロジェクト自体も継続されているようです。

f:id:chikuwamaruX:20210904092136p:plain

これで、Burp Suite Community Editionが使えて、やられサイトに対して、利用できる準備が整いました。

 

無償のCommunity Editionでどこまでできるのか、有料版の無料お試しをしながら見極めいていきたい。

 

つ・づ・く