たれながし.info

とあるITエンジニアの備忘録

Windows Insider Programに参加してみた

直近リリース予定の「Windows11 22H2」を利用したかったので、Windows Insider Programに参加してRelease PreviewのISOをDLしてみました。

Windows Insider Programへ参加

Windows Insider Program」のページにアクセスして「登録する」を押下する

MSアカウントでサインインして、規約を確認する

規約同意後の画面でISO DL用のリンクをクリックする

ISOのDL

Windows Insider Preview Downloads」にアクセスする
Windows Insider Program」に参加したMSアカウントでサインインする

「Edition」と「言語」を選択する
※Windows11のRelease Previewの日本語版を選択しました。

ISOのDLボタンが表示されるのでDLする

Kali LInuxにxrdpをインストールしてRDPでリモート接続



はじめに

ISOからインストールしたKali LinuxにxrdpをインストールしてRDPで接続する手順です。

まぁ、Kali Linuxの公式サイトで手順が公開されているんですけども。
(KaliがWSL環境、Docker環境で動いている場合の手順も記載があります。)

www.kali.org

ちなみに、Kali LinuxのISOイメージは日本だと山形大学北陸先端科学技術大学院大学FTPサーバで公開されています。
山形大学http://ftp.yz.yamagata-u.ac.jp/pub/linux/kali-images
北陸先端科学技術大学院大学http://ftp.jaist.ac.jp/pub/Linux/kali-images

環境

Kali Linux 2022.2
※ISOからインストール

設定

インストールとxrdp起動

必用なパッケージをインストールして、xrpdを起動します。

sudo apt-get install -y kali-desktop-xfce xorg xrdp
sudo systemctl enable xrdp --now

接続

「mstsc.exe」で接続してログインします。


カラーマネジメントされたデバイスを作成するには認証が必要です。」の対応

上画像のように「カラーマネジメントされたデバイスを作成するには認証が必要です。」という認証画面が表示されることがよくあります。
(英語だと「Authentication Required to Create Managed Color Device」)

これはPolkitという機能が表示してるらしいです。
認証したりキャンセルしても、OS再起動すると繰り返し表示されたりします。
以下のように許可を設定すると表示されなくなるらしい。

cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF

UbuntuにPTF(The PenTesters Framework)をインストール


はじめに

Ubuntu 22.04.1にPTFをインストールする方法を紹介します。

PTFについて

PTF(The PenTesters Framework)は、Debian/Ubuntu/ArchLinux用のペネトレーションフレームワークです。

PTFを使うと、ペネトレーションテストでよく使うツールをまとめてインストールしたり更新できます。
PTFはPythonで実装されていて、GitHubで公開されています。

github.com

PTFのインストール

インストール手順

■パッケージのインストール
sudo su -
apt-get install git python3-pip

■PTFのダウンロード
git clone https://github.com/trustedsec/ptf.git /opt/ptf

■Pythonパッケージのインストール
pip install -r /opt/ptf/requirements.txt

ツールのインストール場所指定

ツールのインストール場所はデフォルトで「/pentest」、コンフィグファイルから変更が可能

grep "BASE_INSTALL_PATH=" /opt/ptf/config/ptf.config
BASE_INSTALL_PATH="/pentest"

PTFの起動とモジュールインストール

「./ptf」でPTFを起動します。rootでないと起動できません。

sudo su -
cd /opt/ptf
./ptf


「use modules/.../install_update_all」でモジュールをインストールします。
モジュールに紐づいたツールがインストールされます。
モジュールのインストールには結構時間が掛かります。ディスク容量も消費します。

■特定のモジュールのみインストールする例
ptf> use modules/exploitation/install_update_all
ptf> use modules/intelligence-gathering/install_update_all
ptf> use modules/post-exploitation/install_update_all
ptf> use modules/powershell/install_update_all
ptf> use modules/vulnerability-analysis/install_update_all

■全部のモジュールをインストールする場合
ptf> use modules/install_update_all


モジュールやツールの情報はshowコマンドで確認が可能です。

■モジュールの一覧
ptf> show modules

■インストール済みツール
ptf> show installed

ツールの利用

ツールはデフォルトで「/pentest」にインストールされるので、そこから使います。

cd /pentest
ls

以下は「powershell」モジュールのみインストールした場合の例です。

PTF使ってみた感想

PTFは導入するツールを固定したり、未対応のツールを導入するスクリプトを簡単に書けるらしいので
ペンテストを仕事でやっていて、決まった攻撃環境の構築が必要な人には有効かなと思いました。

半面、ツールの導入には結構な時間とディスク容量が取られるので
私のように趣味でちょっとnmap使いたいとかいうタイプの人には高機能過ぎました。
Kali Linuxとかペンテスト用のLinux使って、必要なツールは都度導入する方が自分の場合は合ってるなーって感じです。

Windowsでプロセスのコマンドラインオプションを確認する

Windowsでプロセスのコマンドラインオプションを確認する方法です。

PowerShellの場合

コマンド

# 全て表示する場合
Get-WmiObject -Class Win32_Process | Select-Object Name, ProcessID, CommandLine | Format-List

# 条件指定した場合
Get-WmiObject -Class Win32_Process | Where-Object { $_.CommandLine -like "*条件*" } | Select-Object Name, ProcessID, CommandLine | Format-List

実行結果


注意点

管理者権限で起動したプロセスの情報を見るには、PowerShellも管理者権限で起動する必要があります。
プロセスが管理者で起動しているかは、タスクマネージャの「詳細タブ」の「管理者特権」で確認可能です。


wmicコマンドの場合

コマンド

# 全て表示する場合
WMIC PROCESS GET Caption,Name,ProcessId,CommandLine /FORMAT:LIST

# 条件指定した場合
WMIC PROCESS WHERE "CommandLine like '%%条件%%'" GET Caption,Name,ProcessId,CommandLine /FORMAT:LIST

実行結果


注意点

PowerShellの場合と同様、管理者権限で起動したプロセスの情報を見るには、コマンドプロンプトも管理者権限で起動する必要があります。
プロセスが管理者で起動しているかは、タスクマネージャの「詳細タブ」の「管理者特権」で確認可能です。

タスクマネージャの場合

プロセスタブで「コマンドライン」を表示すると確認できる

Pythonの「logging」で画面とファイル両方にログ出力

Pythonの標準モジュール「logging」で画面とファイル両方にログ出力する方法

はじめに

Pythonには「logging」という、ログ出力のための標準モジュールがあることを知ったので使ってみました。
(ログをprintで画面出力、open→writeでファイル出力するよりは便利です。)

また、「logging」のデフォルト設定ではログを画面に出力するのみなので、
画面とファイル両方に同時出力する方法を調べてみました。

loggingについて

「logging」のマニュアルは以下となります。
docs.python.org

loggingの動作確認

loggingでどんなことができるのか確認してみました。

デフォルト設定でのログ出力

import logging

logging.critical("This is Critical.")
logging.error("This is Error.")
logging.warning("This is Warning.")
logging.info("This is Info.")
logging.debug("This is Debug.")


<実行結果>
デフォルト設定ではログレベルのWarning以上が画面に出力されます。
rootは「root階層にあるロガー」を意味しています。

CRITICAL:root:This is Critical.
ERROR:root:This is Error.
WARNING:root:This is Warning.

ファイルへの出力

Debug以上のログをファイル出力する例となります。

basicConfigメソッドは基本的な環境設定を行うメソッドです。
basicConfigメソッドで設定できる項目は他のメソッド(setLevelなど)でも設定可能です。

import logging

logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)

ログフォーマットの設定

ログフォーマットはbasicConfigメソッドの引数「format」で設定します。
setFormatterメソッドでも設定できます。

import logging

logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s')
logging.warning('is when this event was logged.')


<実行結果>

2022-08-22 01:10:49,044:WARNING:is when this event was logged.

ログローテート

「RotatingFileHandler」はファイルサイズ、「TimedRotatingFileHandler」は時間でログローテートできます。

import logging
import logging.handlers

rh = logging.handlers.RotatingFileHandler(filename="test.log", maxBytes=1000, backupCount=3)
formatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s")
rh.setFormatter(formatter)

logger = logging.getLogger()
logger.addHandler(rh)

while True:
    logger.warning("This is Warning.")


<実行結果>
上記例だと、1000バイトでローテートされ、現在のログ含め4世代残ります。

> ls test.log*

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2022/03/01     23:21              0 test.log
-a----        2022/03/01     23:21            990 test.log.1
-a----        2022/03/01     23:21            990 test.log.2
-a----        2022/03/01     23:21            990 test.log.3

画面とファイル両方にログ出力

下記条件で、画面とファイル両方にログ出力する例です。

  • ログフォーマットは時間、ログレベル、メッセージを指定
  • ログレベルinfo以上を記録
  • 画面とファイル両方に出力
  • ファイルは追記モード、文字コードutf-8

流れとしては、まずgetLoggerでrootロガーを取得し、ログレベルを設定します。
その後、画面出力用(StreamHandler)とファイル出力用(FileHandler)のそれぞれのハンドラーを作成し、ログフォーマットを設定の上、ロガーに追加します。

import logging

# ロガーの取得、ログレベル設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# ログフォーマット
logFormatter = logging.Formatter('%(asctime)s:%(levelname)s:%(message)s')

# 画面出力設定
consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(logFormatter)
logger.addHandler(consoleHandler)

# ファイル出力設定
fileHandler = logging.FileHandler("test.log", mode="a", encording="utf_8")
fileHandler.setFormatter(logFormatter)
logger.addHandler(fileHandler)

# ログ出力
logger.info("This is info")

Log AnalyticsからPowerShellで分析結果をCSVへエクスポートする

Log AnalyticsからPowerShellを使ってログ分析結果をCSVエクスポートしてみる。

はじめに

AzureにはLog Analyticsというログ管理ソリューションがあります。
Log Analyticsを使うと、クラウド上にログを保管してKQLというクエリでログを分析するといったことができます。

AzureにはMicrosoft SentinelというSIEM/SOARソリューションがありますが
Microsoft Sentinelも構成要素として、Log Analyticsを利用します。

この記事では、Log AnalyticsからPowerShellを使ってログ分析結果をCSVエクスポートする手順を記載します。


ログのCSVエクスポート実施方法

Azure Azモジュールのインストール

まず「Azure Azモジュール」をインストールします。
「Azure Azモジュール」はAzure関連のPowerShellを実行するのに必要です。

PowerShellを起動して、下記を実行します。完了まで数分掛かります。

Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force


インストールに関する説明は、MSの公式サイトにあります。
docs.microsoft.com

ワークスペースIDの確認

Log Analyticsのログ保管場所を「ワークスペース」と言います。
ワークスペース」には一意のIDが付与されているので、Azure Portalから確認します。


CSVエクスポートの実行

ワークスペースID」と「KQLクエリ」を指定して「Invoke-AzOperationalInsightsQuery」を実行することで分析結果を取得します。
その後「Export-CSV」で結果をCSVで出力します。

下記は「Azure ADの対話型サインインログ(SigninLogs)」から直近1日分を出力する例です。

$workspaceid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$query = @"
    SigninLogs
    | where TimeGenerated > ago(1d)
"@

# Azureに接続する
Connect-AzAccount 

# Log Analyticsから分析結果を取得
$queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceid -Query $query
$queryResults.Results | Export-CSV -Path out.csv -Encoding Default

最後に

今回利用した「Connect-AzAccount」「Invoke-AzOperationalInsightsQuery」の仕様は以下の通りです。

docs.microsoft.com

docs.microsoft.com

OpenSSLで自己署名証明書を作る

はじめに

OpenSSLを使った自己署名証明書の作り方をメモします。

自己署名証明書とは、公開鍵に対して、対になる秘密鍵で署名して作成した証明書を言います。
公開鍵は秘密鍵から生成されるので、自分で自分に署名した状態となり、自己署名証明書オレオレ証明書といいます。

自己署名証明書を作る

コマンド3行で作る

秘密鍵(server.key)」作って、「CSR(server.csr)」作って、署名して「証明書(server.crt)」を作るという流れになります。

openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

コマンド1行で作る

下記コマンドだと、1行で証明書まで作れます。

openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt

ファイルとしてのCSRは作成されず、秘密鍵と証明書だけ作成されます。

# ls -l server*
-rw-r--r-- 1 root root 1220  3月 26 21:26 server.crt
-rw-r--r-- 1 root root 1708  3月 26 21:26 server.key