はじめに
このラボでは、Bash スクリプトと Python スクリプトを使用して Kali Linux でのタスク自動化を学習します。焦点は、Nmap によるネットワークスキャンやログ解析といった、反復的なセキュリティ監査タスクの効率化にあります。スクリプトの作成、パーミッションの設定、Cron ジョブによる自動タスクのスケジュール設定、およびそれらの実行テストを行います。このラボは、Kali Linux コンテナ内で自動化の基礎スキルを構築するための詳細な手順を提供します。ターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続され、すぐに開始できます。
環境設定とツールのインストール
最初のステップでは、必要なツールをインストールして、Kali Linux コンテナ内の作業環境を準備します。これは、今後の自動化タスクに必要なすべてのソフトウェアが揃っていることを確認するための基礎的なステップです。
ターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続されています。すぐに作業を開始できます。
まず、ソフトウェアの最新バージョンを取得できるように、パッケージリストを更新します。
apt update
次に、ネットワークスキャン用のnmapとスクリプティング用のpython3をインストールします。これらのツールは、このラボのタスクにとって極めて重要です。
apt install -y nmap python3 nano
インストールには数分かかる場合があります。完了したら、nmapのバージョンを確認して、インストールされていることを検証します。
nmap --version
出力は以下と似ており、nmapが使用可能であることを確認できます。
Nmap version 7.x ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.4.6 openssl-3.0.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available NSE scripts: 655
次に、python3のインストールを確認します。
python3 --version
出力には、以下のようなインストールされている Python のバージョンが表示されます。
Python 3.x.x
これらのツールがインストールされたことで、Kali Linux 環境は今後の自動化タスクの準備が整いました。
Nmap スキャン用の Bash スクリプトの作成
環境設定が完了したので、Nmap スキャンを自動化するための Bash スクリプトを作成します。Bash スクリプティングは、Linux でコマンドラインタスクを自動化するための強力な方法です。このステップでは、localhostに対して Nmap スキャンを実行する簡単なスクリプトを作成します。
まず、nanoテキストエディタを使用して、/rootディレクトリ内にnmap_scan.shという名前の新しいファイルを作成します。
nano /root/nmap_scan.sh
このコマンドはnanoエディタで空のファイルを開きます。エディタに以下の内容を入力または貼り付けます。
#!/bin/bash
echo "Starting Nmap scan on localhost..."
nmap localhost
echo "Scan completed."
このスクリプトは主に 3 つの部分で構成されています。
#!/bin/bash: この行はシバン(shebang)と呼ばれ、スクリプトが Bash インタープリタで実行されることを指定します。echo "...": これらのコマンドは、ステータスメッセージをターミナルに出力します。nmap localhost: このコマンドは、練習用の安全なターゲットであるローカルマシンに対して基本的な Nmap スキャンを実行します。
nanoでファイルを保存するには、Ctrl+Oを押し、次にEnterを押してファイル名を確認します。エディタを終了するには、Ctrl+Xを押します。
ターミナルに戻ったら、/rootディレクトリの内容を一覧表示して、ファイルが正常に作成されたことを確認します。
ls -l /root
出力には、以下のように新しいスクリプトが表示されるはずです。
-rw-r--r-- 1 root root 85 Oct 20 10:15 nmap_scan.sh
これにより、ファイルnmap_scan.shが存在することが確認できました。次のステップでは、このスクリプトに実行権限を付与し、テストします。
ログ解析のための Python スクリプトの作成
次に、ログ解析を自動化するための Python スクリプトを作成します。ログ解析は、ログファイルから特定の情報を抽出する、セキュリティ分析において一般的なタスクです。Python はその強力なテキスト処理能力により、この目的に非常に適しています。
まず、スクリプトが解析するためのサンプルログファイルを作成します。以下のコマンドを実行して、/rootディレクトリ内にsample.logという名前のファイルを作成し、いくつかのサンプルログエントリを書き込みます。
echo -e "2023-10-20 10:00:00 INFO System started\n2023-10-20 10:01:00 ERROR Connection failed\n2023-10-20 10:02:00 INFO User logged in" > /root/sample.log
次に、Python スクリプトを作成します。nanoを使用して、log_parser.pyという名前の新しいファイルを作成します。
nano /root/log_parser.py
nanoエディタ内で、以下の Python コードを入力または貼り付けます。
#!/usr/bin/env python3
print("Starting log parsing...")
with open('/root/sample.log', 'r') as file:
for line in file:
if 'ERROR' in line:
print(line.strip())
print("Log parsing completed.")
このスクリプトは/root/sample.logを開き、行ごとに読み込み、ERRORという単語を含む行のみを出力します。strip()メソッドは、行から前後の空白文字を削除します。
Ctrl+OとEnterを押してファイルを保存し、Ctrl+Xを押してnanoを終了します。
/rootディレクトリ内にログファイルと Python スクリプトの両方が存在することを確認します。
ls -l /root
出力には、両方のファイルがリストされるはずです。
-rw-r--r-- 1 root root 150 Oct 20 10:22 log_parser.py
-rw-r--r-- 1 root root 85 Oct 20 10:15 nmap_scan.sh
-rw-r--r-- 1 root root 112 Oct 20 10:20 sample.log
ログ解析のための Python スクリプトの作成に成功しました。次のステップでは、両方のスクリプトに適切なパーミッションを設定します。
パーミッションの設定とスクリプトのテスト
両方のスクリプトが作成されたので、次はそれらを実行可能にするためにテストします。Linux では、スクリプトをターミナルから直接実行するには実行権限が必要です。
まず、ファイルの現在のパーミッションを確認します。
ls -l /root
出力の最初の列にパーミッションが表示されます。-rw-r--r--は、ファイルが読み取り可能かつ書き込み可能であり、実行可能ではないことを示しています。
-rw-r--r-- 1 root root 150 Oct 20 10:22 log_parser.py
-rw-r--r-- 1 root root 85 Oct 20 10:15 nmap_scan.sh
-rw-r--r-- 1 root root 112 Oct 20 10:20 sample.log
chmodコマンドと+xフラグを使用して、両方のスクリプトに実行権限を追加します。
chmod +x /root/nmap_scan.sh
chmod +x /root/log_parser.py
次に、パーミッションを再度確認します。
ls -l /root
パーミッション文字列のx(-rwxr-xr-x)は、ファイルが実行可能になったことを確認します。
-rwxr-xr-x 1 root root 150 Oct 20 10:22 log_parser.py
-rwxr-xr-x 1 root root 85 Oct 20 10:15 nmap_scan.sh
-rw-r--r-- 1 root root 112 Oct 20 10:20 sample.log
パーミッションが設定されたので、Bash スクリプトを実行してテストします。
/root/nmap_scan.sh
スクリプトは Nmap スキャンを実行し、結果を出力します。出力は以下と似ているはずです。
Starting Nmap scan on localhost...
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-20 10:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up, received user-set (0.00010s latency).
Other addresses for localhost (not scanned): ::1
rDNS record for 127.0.0.1: localhost
Not shown: 999 closed tcp ports (conn-refused)
PORT STATE SERVICE
...
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
Scan completed.
次に、Python スクリプトをテストします。
/root/log_parser.py
スクリプトはログファイルを解析し、「ERROR」を含む行のみを出力します。
Starting log parsing...
2023-10-20 10:01:00 ERROR Connection failed
Log parsing completed.
両方のスクリプトが正しく動作するようになりました。最後のステップは、これらを自動的に実行するようにスケジュールすることです。
Cron ジョブによるスクリプトのスケジュール設定
この最後のステップでは、Cron を使用してスクリプトの実行を自動化します。Cron は Linux の時刻ベースのジョブスケジューラであり、指定した間隔でコマンドやスクリプトを実行できるようにします。
ジョブをスケジュールするには、crontab ファイルを編集する必要があります。以下のコマンドを実行して、crontab エディタを開きます。
crontab -e
エディタの選択を求められた場合は、対応する番号を入力してEnterを押し、nanoを選択します。
ファイルの末尾までスクロールし、以下の行を追加します。これらの行は、両方のスクリプトが毎分実行されるようにスケジュールします。
* * * * * /root/nmap_scan.sh >> /root/nmap_scan.log 2>&1
* * * * * /root/log_parser.py >> /root/log_parser.log 2>&1
この設定内容を分解してみましょう。
* * * * *: これはスケジュールです。5 つのアスタリスクは、分、時、日(月)、月、曜日を表します。すべてアスタリスクの場合、ジョブは毎日、毎時、毎分実行されます。/root/nmap_scan.sh: 実行されるコマンドです。>> /root/nmap_scan.log: スクリプトの標準出力をリダイレクトし、ログファイルに追加します。2>&1: 標準エラー出力を標準出力にリダイレクトし、エラーメッセージもログファイルにキャプチャされるようにします。
nanoで変更を保存するにはCtrl+OとEnterを押し、Ctrl+Xで終了します。確認メッセージが表示されるはずです。
crontab: installing new crontab
スケジュールされたジョブを確認するには、現在の crontab エントリを一覧表示します。
crontab -l
出力には、追加した行が表示されるはずです。
* * * * * /root/nmap_scan.sh >> /root/nmap_scan.log 2>&1
* * * * * /root/log_parser.py >> /root/log_parser.log 2>&1
Cron ジョブの設定が完了しました。1 分後、ログファイルを確認して、自動化されたスクリプト実行の出力を確認できます。
cat /root/nmap_scan.log
cat /root/log_parser.log
これにより、スクリプトがスケジュール通りに自動実行されていることが確認できました。
まとめ
このラボでは、Bash と Python を使用して Kali Linux でタスクを自動化するための基礎を学びました。環境の準備と Nmap や Python などの必須ツールのインストールから始めました。次に、ネットワークスキャンを自動化するための Bash スクリプトと、ログ解析のための Python スクリプトを作成しました。さらに、実行権限の設定方法、スクリプトのテスト方法、そして Cron ジョブを使用して自動実行をスケジュールする方法を学びました。これらのスキルは、サイバーセキュリティやシステム管理における反復的なタスクを自動化するための強固な基盤となります。


