当社は、本日当社ネットワークが第三者による不正アクセスを受けたことを確認しました。
現在、全社対策本部を設置し、外部専門家の助言を受けながら、影響の範囲などの調査と復旧への対応を進めております。また、警察などの関係機関への相談を開始しています。
個人情報、お客様情報含めた重要な情報、情報流出の有無など詳細について確認中です。引き続き皆様へのご迷惑を最小限に止めるべく取り組んでまいります。
お取引先様、関係先の皆様に多大なるご心配とご迷惑をおかけすることになり、深くお詫び申し上げます。
雑記系ブログ。セキュリティとか、マイルとか、投資とか、、、 / Miscellaneous Blogs. Security, miles, investments, etc
当社は、本日当社ネットワークが第三者による不正アクセスを受けたことを確認しました。
現在、全社対策本部を設置し、外部専門家の助言を受けながら、影響の範囲などの調査と復旧への対応を進めております。また、警察などの関係機関への相談を開始しています。
個人情報、お客様情報含めた重要な情報、情報流出の有無など詳細について確認中です。引き続き皆様へのご迷惑を最小限に止めるべく取り組んでまいります。
お取引先様、関係先の皆様に多大なるご心配とご迷惑をおかけすることになり、深くお詫び申し上げます。
日本時間 7 月 29 日(深夜)、当社の米国グループ会社である Encore Automation LLC において、一部サーバが暗号化されるランサムウェア被害が発生していることが判明いたしました。
現在、外部専門機関の協力のもと、原因の究明および詳細な調査を進めております。なお、日本国内および他の海外関係会社においては、本件による業務への影響は確認されておりません。
今回の事象を厳粛に受け止め、被害拡大の防止に努めるとともに、大気社グループ全体で情報セキュリティの強化および再発防止に向けて、より一層の取り組みを進めてまいります。
このたび、弊社が運営するサイト「asue」(以下、当サイトといいます)におきまして、第三者による不正アクセスを受けていたことが発覚いたしました。
現時点では個人情報漏洩の被害は確認されておりませんが、漏洩の可能性が否定できないため、引き続き、調査ならびに必要な対応をとるとともに再発防止の対策を講じて参ります。
お客様には多大なるご迷惑とご心配をお掛けいたしますこと、深くお詫び申し上げます。
8月5日(火) に当サイトにレイアウト崩れの発生を確認し、同日に外部委託業者に連絡の上、対応を完了しました。
弊社夏季休暇(8月9日~8月17日)後、8月18日(月)に事象の再発を確認しました。
再度、外部委託業者に連絡の上、調査しました結果、不正アクセスの形跡及び情報漏洩の可能性は否定できない事を確認いたしました。
・asueブランドサイト(https://www.asue-ncl.jp/)
・asueオンラインショップ(https://shop.asue-ncl.jp/)
・8月19日(火)に当サイトを閉鎖しました。
・当サイトに会員登録いただいておりますお客様には個別にご連絡申し上げております。
・外部専門調査会社に調査を依頼し、調査を実施いたします。
・調査結果が判明次第ご報告いたします。
拝啓 時下ますますご清祥のこととお慶び申し上げます。平素は格別のご高配を賜り厚く御礼申し上げます
さて、このたび弊社システムがランサムウェアに感染したことにより、8 月 25 日(月)以降にご注文いただいた分の出荷ができない状況が発生いたしました。お得意先様には多大なるご不便とご迷惑をお掛けしておりますことを、深くお詫び申し上げます。
現在、専門機関の協力を得ながら原因調査および復旧作業を進めておりますが、現時点においてお客様の個人情報が外部へ流出した事実は確認できておりません。今後も引き続き監視を強化し、万一新たな事実が判明した場合には速やかにご報告申し上げます。
8 月 27 日(水)以降につきましては、順次出荷させていただく予定です。進捗につきましては、状況が判明次第、随時ご案内申し上げます。
また、今回のランサムウェア感染を重く受け止め、情報セキュリティ体制の一層の強化と再発防止に努めてまいる所存でございます。
改めまして、このたびの不具合によりご迷惑をお掛けしておりますことを重ねてお詫び申し上げますとともに、今後とも変わらぬご愛顧を賜りますよう、何卒よろしくお願い申し上げます。
敬具
記
8 月 25 日(月) ランサムウェア感染により受注および出荷業務が停止
8 月 26 日(火) 受注システムの復旧作業
8 月 27 日(水) 受注システム復旧・ご注文残順次出荷開始(予定)
この度、当社の一部のサーバーにおきまして、第三者からの不正アクセスが行われたことを確認しており、現在、社内のネットワークの稼働を見合わせております。
本件につきましては、現在外部専門家の助言を受けながら影響の範囲等の調査と復旧への対応を進めております。
被害の全容を把握するには、いましばらく時間を要する見込みですが、現時点で判明している内容について、下記の通りご報告いたします。
お取引先様、関係先の皆様には多大なるご心配とご迷惑をおかけすることになり、深くお詫び申し上げます。
8 月 9 日(土)、当社サーバーにおいて、第三者からの不正アクセスが行われたことを確認いたしました。迅速に対応を進めるべく、直ちに対策本部を立ち上げるとともに外部専門家の協力のもと、調査を進めています。
今回の被害に対応するため、不正アクセスが疑われるサーバー及びイントラネット、PCは休止させました。現時点で、情報の漏洩は確認されておりませんが、更なる調査を続けております。
現在、外部専門家と連携の上、システムの保護と復旧に向けて作業を続けております。
また、被害に遭っていることは警察へ報告を行っております。
引き続き、皆様へのご迷惑を最小限に止めるべく、取組んでまいります。
普段、私たちがパソコンやスマートフォンを操作するとき、多くの場合は グラフィカルユーザーインターフェース(GUI) を使っています。アイコンやメニューをクリックすれば、簡単に作業が完了します。
しかし、実はGUIを使わなくても、コマンドライン(CLI)に命令を入力することで、ほとんどの操作を実行することができます。シェルはCLIで入力したコマンドを解釈して実行してくれる仕組みであり、これにより効率的で軽量な操作が可能になります。
Linuxシステムを理解するために、レストランを例に考えてみましょう。
GUIを使う場合 → メニューを見て料理を注文し、店員さんが持ってきてくれる。
CLIを使う場合 → 自分で厨房(OS)に入って料理を作る。
このときシェルは、料理を作るときの「レシピ」を教えてくれる存在です。CLIを通して操作すると、より自由度が高く、細かいコントロールができるようになります。
映画やドラマで、黒い画面にコマンドが次々と流れる「ハッキングシーン」を見たことがあるかもしれません。これは多くのLinuxユーザーが、GUIよりもシェルを使ったCLI操作を好んで行っているためです。
このルームでは、実際にLinuxシェルと対話する方法を学び、利用可能なシェルの種類を知り、最後には簡単なシェルスクリプトを書けるようになることを目指します。
Linuxシェルとの対話方法を学ぶ
基本的なシェルコマンドを使えるようになる
Linuxで利用できるシェルの種類を知る
簡単なシェルスクリプトを書けるようになる
Who is the facilitator between the user and the OS?
Shell
このルーム用に、演習で利用する仮想マシン(VM)が用意されています。
まずは下にある 「Start Machine」ボタン を押して、仮想マシンを起動しましょう。マシンは画面分割(split view)で表示されます。
もしマシンが表示されない場合は、画面上部にある青い 「Show Split View」ボタン を押してください。GUI付きの環境が開きます。
また、AttackBoxや自分のVPN接続済み端末から、以下のSSH認証情報を使って接続することも可能です。
THM 接続情報
ユーザー名: user
パスワード: user@Tryhackme
IP: MACHINE_IP
仮想マシンが起動すると、以下のようにシェルのプロンプトが表示され、コマンドを入力できる状態になります。
user@tryhackme:~$
多くのLinuxディストリビューションでは、デフォルトのシェルとして Bash (Bourne Again Shell) が使われています。ただし、実際に起動するシェルはディストリビューションによって異なる場合があります。
※次のタスクでは、Linuxで利用できるさまざまなシェルについて詳しく見ていきます。
このルームの前提知識として紹介されている Linux Fundamentalsモジュール では、すでに基本的なコマンドを学んでいるはずです。ここでは、その中でも特によく使うコマンドを簡単におさらいしましょう。
pwd
)シェルで作業する際は、「どのディレクトリで操作するか」が重要です。
ほとんどのLinuxディストリビューションでは、シェルを開くとデフォルトで自分のホームディレクトリに入ります。
現在の作業ディレクトリを確認するには、pwd
(Print Working Directory)を実行します。
user@tryhackme:~$ pwd
/home/user
この例では、現在のディレクトリが /home/user
であることが分かります。
cd
)別のディレクトリに移動するには、cd
(Change Directory)を使います。
user@tryhackme:~$ cd Desktop
user@tryhackme:~$/Desktop$
ls
)GUIではフォルダを開けば中身が見えますが、シェルでは ls
コマンドを使います。
user@tryhackme:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
cat
)テキストファイルの中身を確認するには cat
を使います。
user@tryhackme:~$ cat filename.txt
this is a sample file
this is the second line of the file
grep
)Linuxユーザーに非常に人気があるコマンドが grep
です。ファイルの中から特定の単語やパターンを探し出すことができます。
例えば、大きなテキストファイルの中から「THM」という単語を検索する場合は以下のようにします。
user@tryhackme:~$ grep THM dictionary.txt
The flag is THM
出力結果には、その単語を含む行が表示されます。
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
Windows OSに「コマンドプロンプト」や「PowerShell」があるように、Linuxにも複数のシェルが存在し、それぞれ異なる機能や特徴を持っています。
Linuxディストリビューションには複数のシェルがインストールされています。
自分が今どのシェルを使っているか確認するには、次のコマンドを実行します。
user@tryhackme:~$ echo $SHELL
/bin/bash
Linuxにインストールされているシェルは /etc/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
利用可能なシェルは、名前を入力することで切り替えることができます。
user@tryhackme:~$ zsh
tryhackme%
デフォルトのシェルを恒久的に変更したい場合は、以下のコマンドを使用します。
chsh -s /usr/bin/zsh
これで次回以降、端末を開いたときに zsh
が標準のシェルとして起動します。
Linuxには多くの種類のシェルがありますが、ここでは代表的な3つを紹介します。
ほとんどのLinuxディストリビューションでデフォルトとして使われているシェルです。
古い sh
、ksh
、csh
などの機能を引き継ぎつつ改良され、多くの機能を備えています。
主な特徴
スクリプトの互換性が高く、豊富なドキュメントが存在する
タブ補完機能(Tabキーでコマンドを補完)
コマンド履歴機能(↑↓キーで過去のコマンドを呼び出し可能)
history
コマンドで入力履歴を一覧表示できる
多くのディストリビューションでは標準搭載されていませんが、名前の通りユーザーフレンドリーなシェルです。
主な特徴
シンプルな構文で初心者に分かりやすい
コマンドの自動スペル修正機能
カスタムテーマでプロンプトを自由に変更可能
構文ハイライト機能により、コマンドの役割ごとに色分けされ、エラーも見つけやすい
Bashと同様にスクリプト、タブ補完、履歴機能をサポート
標準ではインストールされていない場合が多いですが、モダンなシェルとして人気があります。
主な特徴
高度なタブ補完とスクリプト機能
Fishと同様のスペル修正機能
豊富なカスタマイズ性(例:oh-my-zshフレームワーク)
コマンド履歴や補完など多彩な機能
機能 | Bash | Fish | Zsh |
---|---|---|---|
正式名称 | Bourne Again Shell | Friendly Interactive Shell | Z Shell |
スクリプト機能 | 高い互換性、豊富なドキュメント | 機能は制限あり | Bash機能に加え追加要素 |
タブ補完 | 基本的な補完 | 過去コマンドに基づく高度な補完 | プラグインで大幅拡張可能 |
カスタマイズ | 基本的なカスタマイズのみ | インタラクティブツールで簡単に変更可能 | oh-my-zshなどで高度に可能 |
ユーザーフレンドリー | 標準的で慣れやすい | 最も初心者向け | カスタマイズ次第で使いやすさ向上 |
構文ハイライト | なし | 標準で搭載 | プラグイン導入で利用可能 |
どのシェルを選ぶかは利用目的や好みによって異なります。
今回紹介した Bash / Fish / Zsh は、Linuxユーザーに特に人気の高いシェルです。
それぞれの特徴を理解し、自分の作業スタイルに合ったものを選びましょう。
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
シェルスクリプトとは、複数のコマンドをまとめて記述したファイル のことです。
例えば、同じ処理を繰り返し行う場合、毎回コマンドを1つずつ入力すると時間がかかります。そこで、必要なコマンドをスクリプトとして保存しておけば、スクリプトを1回実行するだけでまとめて処理を行えます。
前のタスクで紹介したすべてのシェルにはスクリプト機能があります。スクリプトを使うことで、タスクの自動化が可能になります。
まずはターミナルを開き、シェルを選択します。ここでは最も一般的な bash を使います。
通常のコマンドとは違い、スクリプトは テキストエディタでファイルを作成 します。拡張子は .sh を付けるのが慣例です。
user@tryhackme:~$ nano first_script.sh
すべてのスクリプトは シバン (shebang) から始める必要があります。
シバンは #!
で始まり、続けてスクリプトを実行するインタプリタを指定します。
例:bashを使う場合
#!/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 で行います。
作成したスクリプトには、実行権限を与える必要があります。
user@tryhackme:~$ chmod +x first_script.sh
実行は ./
を付けて行います。
user@ubuntu:~$ ./first_script.sh
Hey, What's your name?
John
Welcome, John
./
を付けるのは、カレントディレクトリから実行することを明示するためです。
ループとは「繰り返し処理」のことです。例えば、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
→ ループ内で実行する処理を囲む
実行すると以下のように出力されます。
user@tryhackme:~$ ./loop_script.sh
1
2
3
条件分岐は「特定の条件を満たす場合のみ処理を実行」する仕組みです。
以下は、特定のユーザー名を入力したときだけ秘密を表示する例です。
# 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
user@tryhackme:~$ ./conditional_script.sh
Please enter your name first:
Stewart
Welcome, Stewart! Here is the secret: THM_Script
user@tryhackme:~$ ./conditional_script.sh
Please enter your name first:
Alex
Sorry! You are not authorized to access the secret.
コードが長くなると分かりにくくなるため、コメント を入れて整理します。
コメントは #
で始まり、その行は実行されません。
例:条件分岐スクリプトにコメントを追加
# 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での作業を効率的に自動化できます。
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
前回のタスクでは、変数、ループ、条件分岐 を学びました。
ここでは、それらを組み合わせて一つの実用的なシェルスクリプトを作成してみましょう。
銀行のロッカーを利用するユーザーを想定します。
ロッカーにアクセスするには本人確認が必要です。
スクリプトを実行すると、以下の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
認証失敗のケース:
user@tryhackme:~$ ./locker_script.sh Enter your Username: John Enter your Company name: Tryhackme Enter your PIN: 1349 Authentication Denied!!
正しい情報を入力した場合は、次のように認証が成功します。
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.
👉 このスクリプトは、変数の利用(入力値の保持)、ループ処理(複数回の入力受付)、条件分岐(入力内容の検証)を組み合わせた実践的な例です。
What would be the correct PIN to authenticate in the locker script?
7385
このルームに付属のUbuntuマシンでは、デフォルトユーザーのホームディレクトリ(/home/user
)にスクリプトを配置しています。
このスクリプトは、指定ディレクトリ内の .log
拡張子のファイルを対象に、特定のキーワードを検索します。
※実行前に、スクリプト内にいくつか修正が必要です。
Task #2 の手順でマシンを起動すると、通常ユーザー権限でシェルに入れます。
ただし、指定ディレクトリ配下のすべてのファイルを確実に検索するため、rootユーザーになることを推奨します。
以下のコマンドでrootへ昇格し、パスワードを入力してください(認証情報は Task 2 を参照)。
user@tryhackme:~$ sudo su
[sudo] password for user:
root@tryhackme:/home/user#
Flag:thm-flag01-script
検索対象ディレクトリ:/var/log
ヒント:スクリプト内に空の二重引用符(""
)があります。
その中を正しい値で埋めてください。
引用符の内側にスペースは入れないでください(例:"thm-flag01-script"
、"/var/log"
)。
例:
grep -R "thm-flag01-script" /var/log --include="*.log"
のような形に近づけるイメージです(実際のスクリプトの構成に合わせて置き換えてください)。
/home/user
にあるスクリプトをテキストエディタで開く
""
の中を Flag と Directory の値で埋める
必要なら実行権限を付与:chmod +x script_name.sh
root になって実行:
user@tryhackme:~$ sudo su
root@tryhackme:/home/user# ./script_name.sh
/var/log
配下の .log ファイルから thm-flag01-script
を検索できればOK
Which file has the keyword?
authentication.log
Where is the cat sleeping?
under the table
このルームでは、シェルの重要性を学び、Linuxシェルの世界に触れながら主要な種類を探索しました。
また、シェルスクリプトの役割とタスク自動化への活用について理解を深めました。
最後には、いくつかの実用的なシェルスクリプトを作成し、複数のディレクトリから「謎のフラグ」を探し出す実践的なラボにも取り組みました。
出典:Linux Shells