【TryHackMeウォークスルー】Linux Shells

 

Introduction to Linux Shells


普段、私たちがパソコンやスマートフォンを操作するとき、多くの場合は グラフィカルユーザーインターフェース(GUI) を使っています。アイコンやメニューをクリックすれば、簡単に作業が完了します。

しかし、実はGUIを使わなくても、コマンドライン(CLI)に命令を入力することで、ほとんどの操作を実行することができます。シェルはCLIで入力したコマンドを解釈して実行してくれる仕組みであり、これにより効率的で軽量な操作が可能になります。


レストランの例え

Linuxシステムを理解するために、レストランを例に考えてみましょう。

  • GUIを使う場合 → メニューを見て料理を注文し、店員さんが持ってきてくれる。

  • CLIを使う場合 → 自分で厨房(OS)に入って料理を作る。

このときシェルは、料理を作るときの「レシピ」を教えてくれる存在です。CLIを通して操作すると、より自由度が高く、細かいコントロールができるようになります。


映画のハッカーシーンとの関係

映画やドラマで、黒い画面にコマンドが次々と流れる「ハッキングシーン」を見たことがあるかもしれません。これは多くのLinuxユーザーが、GUIよりもシェルを使ったCLI操作を好んで行っているためです。

このルームでは、実際にLinuxシェルと対話する方法を学び、利用可能なシェルの種類を知り、最後には簡単なシェルスクリプトを書けるようになることを目指します。


学習目標

  • Linuxシェルとの対話方法を学ぶ

  • 基本的なシェルコマンドを使えるようになる

  • Linuxで利用できるシェルの種類を知る

  • 簡単なシェルスクリプトを書けるようになる

Answer the questions below

Who is the facilitator between the user and the OS?

Shell


How To Interact With a Shell?


実習用マシンの起動

このルーム用に、演習で利用する仮想マシン(VM)が用意されています。
まずは下にある 「Start Machine」ボタン を押して、仮想マシンを起動しましょう。マシンは画面分割(split view)で表示されます。

もしマシンが表示されない場合は、画面上部にある青い 「Show Split View」ボタン を押してください。GUI付きの環境が開きます。
また、AttackBoxや自分のVPN接続済み端末から、以下のSSH認証情報を使って接続することも可能です。

THM 接続情報

  • ユーザー名: user

  • パスワード: user@Tryhackme

  • IP: MACHINE_IP

仮想マシンが起動すると、以下のようにシェルのプロンプトが表示され、コマンドを入力できる状態になります。

LinuxShell
user@tryhackme:~$ 

多くのLinuxディストリビューションでは、デフォルトのシェルとして Bash (Bourne Again Shell) が使われています。ただし、実際に起動するシェルはディストリビューションによって異なる場合があります。

※次のタスクでは、Linuxで利用できるさまざまなシェルについて詳しく見ていきます。


基本的なLinuxコマンド

このルームの前提知識として紹介されている Linux Fundamentalsモジュール では、すでに基本的なコマンドを学んでいるはずです。ここでは、その中でも特によく使うコマンドを簡単におさらいしましょう。

1. 現在の作業ディレクトリを確認する (pwd)

シェルで作業する際は、「どのディレクトリで操作するか」が重要です。
ほとんどのLinuxディストリビューションでは、シェルを開くとデフォルトで自分のホームディレクトリに入ります。

現在の作業ディレクトリを確認するには、pwd(Print Working Directory)を実行します。

Check Current Working Directory
user@tryhackme:~$ pwd
/home/user

この例では、現在のディレクトリが /home/user であることが分かります。


2. ディレクトリを移動する (cd)

別のディレクトリに移動するには、cd(Change Directory)を使います。

Change Directory
user@tryhackme:~$ cd Desktop
user@tryhackme:~$/Desktop$

3. ディレクトリの中身を確認する (ls)

GUIではフォルダを開けば中身が見えますが、シェルでは ls コマンドを使います。

List Directory Contents
user@tryhackme:~$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

4. ファイルの内容を表示する (cat)

テキストファイルの中身を確認するには cat を使います。

Displaying File Contents
user@tryhackme:~$ cat filename.txt
this is a sample file
this is the second line of the file

5. ファイル内の特定の文字列を検索する (grep)

Linuxユーザーに非常に人気があるコマンドが grep です。ファイルの中から特定の単語やパターンを探し出すことができます。

例えば、大きなテキストファイルの中から「THM」という単語を検索する場合は以下のようにします。

Searching a Word In File
user@tryhackme:~$ grep THM dictionary.txt
The flag is THM

出力結果には、その単語を含む行が表示されます。


Answer the questions below

What is the default shell in most Linux distributions?

bash

Which command utility is used to list down the contents of a directory?

ls

Which command utility can help you search for anything in a file?

grep


Types of Linux Shells


Linuxのシェルの種類

Windows OSに「コマンドプロンプト」や「PowerShell」があるように、Linuxにも複数のシェルが存在し、それぞれ異なる機能や特徴を持っています。


現在使用中のシェルを確認する

Linuxディストリビューションには複数のシェルがインストールされています。
自分が今どのシェルを使っているか確認するには、次のコマンドを実行します。

Current Shell
user@tryhackme:~$ echo $SHELL
/bin/bash

利用可能なシェルを確認する

Linuxにインストールされているシェルは /etc/shells ファイルに一覧として記録されています。
以下のコマンドで確認できます。

Available Shells
user@tryhackme:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh
/usr/bin/zsh

シェルを切り替える

利用可能なシェルは、名前を入力することで切り替えることができます。

Switch Shell
user@tryhackme:~$ zsh
tryhackme% 

デフォルトのシェルを恒久的に変更したい場合は、以下のコマンドを使用します。

chsh -s /usr/bin/zsh

これで次回以降、端末を開いたときに zsh が標準のシェルとして起動します。


主なLinuxシェルと特徴

Linuxには多くの種類のシェルがありますが、ここでは代表的な3つを紹介します。


1. Bourne Again Shell (Bash)

ほとんどのLinuxディストリビューションでデフォルトとして使われているシェルです。
古い shkshcsh などの機能を引き継ぎつつ改良され、多くの機能を備えています。

主な特徴

  • スクリプトの互換性が高く、豊富なドキュメントが存在する

  • タブ補完機能(Tabキーでコマンドを補完)

  • コマンド履歴機能(↑↓キーで過去のコマンドを呼び出し可能)

  • history コマンドで入力履歴を一覧表示できる


2. Friendly Interactive Shell (Fish)

多くのディストリビューションでは標準搭載されていませんが、名前の通りユーザーフレンドリーなシェルです。

主な特徴

  • シンプルな構文で初心者に分かりやすい

  • コマンドの自動スペル修正機能

  • カスタムテーマでプロンプトを自由に変更可能

  • 構文ハイライト機能により、コマンドの役割ごとに色分けされ、エラーも見つけやすい

  • Bashと同様にスクリプト、タブ補完、履歴機能をサポート


3. Z Shell (Zsh)

標準ではインストールされていない場合が多いですが、モダンなシェルとして人気があります。

主な特徴

  • 高度なタブ補完とスクリプト機能

  • Fishと同様のスペル修正機能

  • 豊富なカスタマイズ性(例:oh-my-zshフレームワーク)

  • コマンド履歴や補完など多彩な機能


Bash / Fish / Zsh の比較表

機能BashFishZsh
正式名称Bourne Again ShellFriendly Interactive ShellZ Shell
スクリプト機能高い互換性、豊富なドキュメント機能は制限ありBash機能に加え追加要素
タブ補完基本的な補完過去コマンドに基づく高度な補完プラグインで大幅拡張可能
カスタマイズ基本的なカスタマイズのみインタラクティブツールで簡単に変更可能oh-my-zshなどで高度に可能
ユーザーフレンドリー標準的で慣れやすい最も初心者向けカスタマイズ次第で使いやすさ向上
構文ハイライトなし標準で搭載プラグイン導入で利用可能

まとめ

どのシェルを選ぶかは利用目的や好みによって異なります。
今回紹介した Bash / Fish / Zsh は、Linuxユーザーに特に人気の高いシェルです。
それぞれの特徴を理解し、自分の作業スタイルに合ったものを選びましょう。


Answer the questions below

Which shell comes with syntax highlighting as an out-of-the-box feature?

Fish

Which shell does not have auto spell correction?

Bash

Which command displays all the previously executed commands of the current session?

history


Shell Scripting and Components


シェルスクリプト入門

シェルスクリプトとは?

シェルスクリプトとは、複数のコマンドをまとめて記述したファイル のことです。
例えば、同じ処理を繰り返し行う場合、毎回コマンドを1つずつ入力すると時間がかかります。そこで、必要なコマンドをスクリプトとして保存しておけば、スクリプトを1回実行するだけでまとめて処理を行えます。

前のタスクで紹介したすべてのシェルにはスクリプト機能があります。スクリプトを使うことで、タスクの自動化が可能になります。


スクリプトの作成手順

まずはターミナルを開き、シェルを選択します。ここでは最も一般的な bash を使います。

通常のコマンドとは違い、スクリプトは テキストエディタでファイルを作成 します。拡張子は .sh を付けるのが慣例です。

Create Script File
user@tryhackme:~$ nano first_script.sh

シバン (Shebang)

すべてのスクリプトは シバン (shebang) から始める必要があります。
シバンは #! で始まり、続けてスクリプトを実行するインタプリタを指定します。

例:bashを使う場合

first_script.sh
#!/bin/bash

変数と入力

次の例は、ユーザーに名前を聞いて挨拶する簡単なスクリプトです。

# Defining the Interpreter 
#!/bin/bash
echo "Hey, what’s your name?"
read name
echo "Welcome, $name"
  • read name でユーザー入力を受け取り、変数 name に格納

  • echo で変数を展開し、メッセージを表示

保存は CTRL+X → Y → ENTER で行います。


実行権限の付与と実行

作成したスクリプトには、実行権限を与える必要があります。

Execution Permission to Script
user@tryhackme:~$ chmod +x first_script.sh

実行は ./ を付けて行います。

Script Execution
user@ubuntu:~$ ./first_script.sh
Hey, What's your name?
John
Welcome, John

./ を付けるのは、カレントディレクトリから実行することを明示するためです。


ループ (Loops)

ループとは「繰り返し処理」のことです。例えば、1から10までの数字を順に表示するスクリプトは以下のようになります。

# Defining the Interpreter 
#!/bin/bash
for i in {1..10};
do
echo $i
done
  • for i in {1..10} → 変数 i に1〜10を順に代入

  • do ... done → ループ内で実行する処理を囲む

実行すると以下のように出力されます。

Script Execution
user@tryhackme:~$ ./loop_script.sh
1
2
3

条件分岐 (Conditional Statements)

条件分岐は「特定の条件を満たす場合のみ処理を実行」する仕組みです。
以下は、特定のユーザー名を入力したときだけ秘密を表示する例です。

# Defining the Interpreter 
#!/bin/bash
echo "Please enter your name first:"
read name
if [ "$name" = "Stewart" ]; then
        echo "Welcome Stewart! Here is the secret: THM_Script"
else
        echo "Sorry! You are not authorized to access the secret."
fi

実行例(条件一致)

conditional_script.sh
user@tryhackme:~$ ./conditional_script.sh
Please enter your name first:
Stewart
Welcome, Stewart! Here is the secret: THM_Script

実行例(条件不一致)

conditional_script.sh
user@tryhackme:~$ ./conditional_script.sh
Please enter your name first:
Alex
Sorry! You are not authorized to access the secret.

コメント (Comments)

コードが長くなると分かりにくくなるため、コメント を入れて整理します。
コメントは # で始まり、その行は実行されません。

例:条件分岐スクリプトにコメントを追加

# Defining the Interpreter
#!/bin/bash

# Asking the user to enter a value.
echo "Please enter your name first:"

# Storing the user input value in a variable.
read name

# Checking if the name the user entered is equal to our required name.
if [ "$name" = "Stewart" ]; then

# If it equals the required name, the following line will be displayed.
echo "Welcome Stewart! Here is the secret: THM_Script"

# Defining the sentence to be displayed if the condition fails.
else
        echo "Sorry! You are not authorized to access the secret."
fi

コメントを入れることで、後から見返すときや他人に共有するときに理解しやすくなります。


まとめ

  • 変数 を使って値を保存・利用できる

  • ループ で繰り返し処理を自動化できる

  • 条件分岐 で状況に応じた処理を実行できる

  • コメント を使えば、スクリプトの可読性が向上する

シェルスクリプトを使えば、Linuxでの作業を効率的に自動化できます。


Answer the questions below

What is the shebang used in a Bash script?

#!/bin/bash

Which command gives executable permissions to a script?

chmod +x

Which scripting functionality helps us configure iterative tasks?

loops


The Locker Script


総合演習:ロッカースクリプトの作成

前回のタスクでは、変数ループ条件分岐 を学びました。
ここでは、それらを組み合わせて一つの実用的なシェルスクリプトを作成してみましょう。


要件

銀行のロッカーを利用するユーザーを想定します。
ロッカーにアクセスするには本人確認が必要です。
スクリプトを実行すると、以下の3つの入力を求めます。

  • ユーザー名

  • 会社名

  • PINコード

入力が以下と一致した場合のみ、認証を成功としロッカーを開けられるようにします。

  • Username: John

  • Company name: Tryhackme

  • PIN: 7385


スクリプト例

# Defining the Interpreter 
#!/bin/bash 

# Defining the variables
username=""
companyname=""
pin=""

# Defining the loop
for i in {1..3}; do
# Defining the conditional statements
        if [ "$i" -eq 1 ]; then
                echo "Enter your Username:"
                read username
        elif [ "$i" -eq 2 ]; then
                echo "Enter your Company name:"
                read companyname
        else
                echo "Enter your PIN:"
                read pin
        fi
done

# Checking if the user entered the correct details
if [ "$username" = "John" ] && [ "$companyname" = "Tryhackme" ] && [ "$pin" = "7385" ]; then
        echo "Authentication Successful. You can now access your locker, John."
else
        echo "Authentication Denied!!"
fi

実行例

認証失敗のケース:

Executing the Locker Script
user@tryhackme:~$ ./locker_script.sh
Enter your Username:
John
Enter your Company name:
Tryhackme
Enter your PIN:
1349
Authentication Denied!!

正しい情報を入力した場合は、次のように認証が成功します。

Executing the Locker Script
user@tryhackme:~$ ./locker_script.sh
Enter your Username:
John
Enter your Company name:
Tryhackme
Enter your PIN:
7385
Authentication Successful. You can now access your locker, John.


👉 このスクリプトは、変数の利用(入力値の保持)、ループ処理(複数回の入力受付)、条件分岐(入力内容の検証)を組み合わせた実践的な例です。


Answer the questions below

What would be the correct PIN to authenticate in the locker script?

7385


Practical Exercise


付属Ubuntuマシン上のスクリプトについて

このルームに付属のUbuntuマシンでは、デフォルトユーザーのホームディレクトリ/home/user)にスクリプトを配置しています。
このスクリプトは、指定ディレクトリ内の .log 拡張子のファイルを対象に、特定のキーワードを検索します。

※実行前に、スクリプト内にいくつか修正が必要です。


権限について(root推奨)

Task #2 の手順でマシンを起動すると、通常ユーザー権限でシェルに入れます。
ただし、指定ディレクトリ配下のすべてのファイルを確実に検索するため、rootユーザーになることを推奨します。

以下のコマンドでrootへ昇格し、パスワードを入力してください(認証情報は Task 2 を参照)。

Become Root User
user@tryhackme:~$ sudo su
[sudo] password for user: 
root@tryhackme:/home/user#

スクリプト修正のヒント(必読)

  • Flagthm-flag01-script

  • 検索対象ディレクトリ/var/log

  • ヒント:スクリプト内に空の二重引用符"")があります。

    • その中を正しい値で埋めてください。

    • 引用符の内側にスペースは入れないでください(例:"thm-flag01-script""/var/log")。

例:grep -R "thm-flag01-script" /var/log --include="*.log" のような形に近づけるイメージです(実際のスクリプトの構成に合わせて置き換えてください)。


推奨手順(サマリ)

  1. /home/user にあるスクリプトをテキストエディタで開く

  2. "" の中を FlagDirectory の値で埋める

  3. 必要なら実行権限を付与:chmod +x script_name.sh

  4. root になって実行:

    user@tryhackme:~$ sudo su root@tryhackme:/home/user# ./script_name.sh
  5. /var/log 配下の .log ファイルから thm-flag01-script を検索できればOK


Answer the questions below

Which file has the keyword?

authentication.log

Where is the cat sleeping?

under the table


Conclusion

このルームでは、シェルの重要性を学び、Linuxシェルの世界に触れながら主要な種類を探索しました。

また、シェルスクリプトの役割とタスク自動化への活用について理解を深めました。

最後には、いくつかの実用的なシェルスクリプトを作成し、複数のディレクトリから「謎のフラグ」を探し出す実践的なラボにも取り組みました。


出典:Linux Shells

セキュリティ調査を加速するUnix系アーティファクト収集ツール『UAC』

 

1. 導入:なぜ今、UACなのか?

インシデント発生時、迅速かつ確実な証拠収集が求められます。LinuxやmacOSをはじめとするUnix系システムでは、ログファイルや設定情報、揮発性データなど、調査対象が多岐にわたります。UAC(Unix‑like Artifacts Collector)は、そうしたデータを自動収集し、インシデント対応やフォレンジックの現場での動きを飛躍的に効率化してくれるツールです。


2. UACとは?

UACは、法執行機関、フォレンジック調査担当者、セキュリティアナリスト向けに設計された、強力かつ拡張可能なインシデントレスポンス用コレクションツールです。Unix系システム全般(AIX、ESXi、FreeBSD、Linux、macOS、NetBSD、NetScaler、OpenBSD、Solaris)に対応し、IoTやNASといった環境にも展開可能です。完全に依存関係不要で、軽量かつポータブルな点が特徴です。SANS Internet Storm Center+11GitHub+11Reddit+11


3. 主な特長

  • インストール不要・軽量・ポータブル:シェルが動く環境なら動作可能GitHubtclahr.github.io

  • YAMLでカスタマイズ可能なプロファイル:用途に応じて収集対象を柔軟に定義GitHubtclahr.github.io

  • 揮発性の順序(order of volatility)に配慮した収集:重要度とタイミングを考慮したデータ取得GitHubtclahr.github.io

  • 実行中プロセスの情報収集とハッシュ化:ディスク上にバイナリがないプロセスも対象にGitHubtclahr.github.io

  • Bodyfile形式のファイル/ディレクトリ情報抽出:後続分析のタイムライン整備に有効GitHub+2SANS Internet Storm Center+2

  • メモリ(揮発性)データの取得方法も複数対応(Linuxのみ)GitHubtclahr.github.io

  • クラウドへの出力にも対応(S3、Azure、SFTP等)Cyber Triage+1


4. 対応OS/環境

UACは、以下のような多彩なUnix系OSに対応:

  • AIX、ESXi、FreeBSD、Linux、macOS、NetBSD、NetScaler、OpenBSD、Solaris
    さらにはNAS機器、OpenWrt、IoTデバイスなどにも対応可能な軽快さが魅力です。CyberSecTools+4GitHub+4tclahr.github.io+4


5. インストール不要!実行までの流れ

  1. GitHubのReleasesページから最新のアーカイブを入手(v3.2.0が最新、2025年8月時点)tclahr.github.io+12GitHub+12X (formerly Twitter)+12

  2. 解凍して、シェル上で ./uac を実行

  3. プロファイル(-p)やアーティファクト指定(-a)を組み合わせて利用docs.velociraptor.app+5tclahr.github.io+5SANS Internet Storm Center+5

実行例:

./uac -p ir_triage /tmp ./uac -a ./artifacts/memory_dump/avml.yaml -p full /tmp ./uac -p full -a \!artifacts/bodyfile/bodyfile.yaml .

GitHubtclahr.github.io


6. 実務での活用シーン

  • インシデントレスポンス:侵害を受けたUnix系システムから迅速に証拠収集

  • フォレンジック調査:揮発性データやプロセス情報、ログを体系的に取得

  • セキュリティ演習/CTF:再現性ある収集ワークフロー構築

  • エッジ環境対応:IoTやNAS、ネットワーク機器の記録取得にも最適

Cyber Triageでは、収集したデータを自動解析パイプラインに取り込む運用も可能です。Cyber Triage


7. 注意点・応用Tips

  • 信頼できないバイナリの利用リスク:被害システムの標準バイナリが改ざんされている可能性あり。静的リンクの信頼済バイナリを同梱するのが望ましいCyber Triage

  • アクセス日時の上書き:ツール実行時にファイルのアクセス(atime)が更新されるため、先にタイムスタンプベースの収集が必要なケースありSANS Internet Storm Center

  • プロファイルやアーティファクトの追加・編集も柔軟に対応可能。独自プロファイル作成や、systemdタイマー情報の追加などユーザーによる拡張も簡単Righteous IT


8. まとめ:UACがもたらす価値

UACは、Unix系システムにおける証拠収集を自動化・迅速化する強力なツールです。
インストール不要、軽量、オープンソース、クラウド対応、カスタマイズ自在と、その汎用性は非常に高く、インシデントレスポンスやフォレンジック調査の現場で即戦力となるでしょう。皆さんのツールキットにぜひ加えていただきたい一品です。

無料で使える!企業のセキュリティ防御に効くオープンソースツール


オンラインゲームに「キャプチャー・ザ・フラッグ(CTF)」というモードがあります。旗を守る側と奪う側に分かれて戦うシンプルなルールですが、実はこの仕組みはセキュリティ演習にも応用されています。

企業が自らの防御力を試すために、攻撃者を模したチームと防御側のチームが対戦し、侵入検知やインシデント対応の精度を高めていくのです。こうしたシミュレーションは、弱点の洗い出しや訓練に欠かせない取り組みになっています。

本記事では、防御側が活用できる「無料のオープンソースツール」を6つ紹介します。どれもセキュリティ担当者にとって心強い武器になるはずです。


ネットワーク解析ツール

Arkime

大規模なパケットキャプチャ(PCAP)を効率的に扱える解析ツールです。直感的なWebインターフェースから検索やエクスポートが可能で、Wiresharkなど他の解析ツールとの連携も容易。数十Gbps級のトラフィック処理にも対応しており、柔軟にスケールできるのが強みです。


Snort

オープンソースの侵入防止システム(IPS)として世界的に有名なツール。ネットワークトラフィックを監視・解析し、不審な挙動をリアルタイムで検知します。ルールセットは「無料利用」「登録ユーザー向け」「有料サブスク向け」と複数用意されており、脅威の精度に応じて使い分けられるのが特徴です。




インシデント管理ツール

TheHive

セキュリティインシデント対応を効率化するプラットフォーム。SOCやCSIRTなどの現場で利用され、MISP(マルウェア情報共有基盤)と連携することで、調査・分析から対応までをスムーズに進められます。ケース管理やタスク割り当てをテンプレート化でき、チーム間のリアルタイム連携にも強いのが魅力です。


GRR Rapid Response

リモートでのフォレンジック調査を可能にするフレームワーク。クライアントを導入した端末から、ファイルシステムやメモリ、レジストリなどの証拠データを収集できます。大規模環境にも対応しており、広範囲なITインフラを持つ企業に適しています。




OS解析・脅威ハンティングツール

HELK

「Hunting ELK」の名の通り、Elasticsearch・Logstash・Kibana(ELKスタック)をベースにしたセキュリティ分析基盤です。ログ分析に加えて脅威ハンティングやインシデント対応を一元的に行えるのが強み。研究用途から大規模環境まで、柔軟に展開可能です。


Volatility

システムの揮発性メモリ(RAM)からデジタル証拠を抽出するフレームワーク。メモリダンプを解析することで、不正プロセスやマルウェアの痕跡を追跡できます。Windows、Linux、macOSなど幅広いOSに対応し、仮想環境のメモリ解析にも利用可能です。




まとめ

今回紹介した6つのオープンソースツールは、企業がサイバー攻撃に備えるうえで強力な武器となります。攻撃を想定した演習や日常のセキュリティ監視に組み込むことで、組織全体の防御力を大きく引き上げることができるでしょう。

また、こうした演習は単なる訓練にとどまらず、セキュリティ人材のスキル強化やコンプライアンス対応にも直結します。コストをかけずに導入できるオープンソースの利点を活かし、ぜひ自社の防御戦略に取り入れてみてください。

出典:Blue Team toolkit: 6 open-source tools to assess and enhance corporate defenses