はじめに
この実験(Lab)では、情報セキュリティの基本原則である CIA トライアド(機密性、完全性、可用性)について実践的な経験を積みます。Linux 環境内で作業を行い、データの保護とシステム信頼性の確保に関する実践的なスキルを習得します。この実験では、ファイルパーミッションの設定、暗号学的ハッシュを用いたファイル完全性の実証、そして基本的なサービス監視のシミュレーションを通じて、これらのコアコンセプトが実際のシナリオでどのように適用されるかを学びます。
まず、機密性の高いファイルに対して機密性(Confidentiality)と完全性(Integrity)を強制するためにchmodコマンドを使用して Linux ファイルパーミッションを操作し、権限のあるユーザーのみがアクセスおよび変更できるようにします。次に、MD5 および SHA256 ハッシュを生成してベースラインを作成し、ファイルが改変されていないことを確認することで、ファイル完全性(File Integrity)を探求します。最後に、簡単なサービスをシミュレートし、基本的な監視コマンドを使用して可用性(Availability)の概念と、サービスの中断を検出する方法を理解します。
機密性と完全性のための Linux ファイルパーミッション設定
このステップでは、情報セキュリティの重要な原則である機密性 (Confidentiality) と完全性 (Integrity) を実施するために、基本的な Linux ファイルパーミッションの使用方法を学びます。機密性とは、データが承認されたユーザーのみにアクセス可能であることを保証し、完全性とは、データが無許可で変更されないことを保証します。ファイルを作成し、そのデフォルトのパーミッションを確認し、次に chmod コマンドを使用してアクセスを制限し、変更を防ぎます。すべての操作は、ホームプロジェクトディレクトリ ~/project で実行されます。
次に、~/project ディレクトリ内で、機密データを表すサンプルファイルを作成します。echo コマンドを使用して、ファイル内にテキストを配置します。
echo "Top Secret Details" > confidential_data.txt
ls -l コマンドを使用して、ファイルが作成されたことを確認し、そのデフォルトのパーミッションを表示しましょう。このコマンドは、詳細なリスト形式で表示します。
ls -l confidential_data.txt
以下のような出力が表示されるはずです。正確な時刻とサイズは異なる場合があります。
-rw-rw-r-- 1 labex labex 19 Jul 21 15:09 confidential_data.txt
パーミッション文字列 -rw-rw-r-- を分解してみましょう。
- 最初の文字
-は、それが通常のファイルであることを示します。 - 次の 3 文字
rw-は、所有者 (ユーザーlabex) のパーミッションです。rは読み取り、wは書き込みを意味します。 - 次の 3 文字
rw-は、グループ (グループlabex) のパーミッションです。グループはファイルを読み書きできます。 - 最後の 3 文字
r--は、その他 (システム上の他のすべてのユーザー) のパーミッションです。彼らもファイルを読み取ることしかできません。
このデフォルト設定は、システム上のどのユーザーでも「Top Secret」ファイルを読み取ることができるため、機密性を侵害しています。所有者のみが読み書きできるようにパーミッションを変更して、これを修正しましょう。数値 (8 進数) コードを使用する chmod コマンドを使用します。4 は読み取り、2 は書き込み、1 は実行です。所有者に読み書きアクセス (4+2=6) を与え、グループ (0) とその他 (0) のすべてのアクセスを削除するには、コード 600 を使用します。
chmod 600 confidential_data.txt
パーミッションを再度確認します。
ls -l confidential_data.txt
出力は、機密性を実施する新しい、より安全なパーミッションを反映しています。
-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt
次に、所有者であってもファイルを読み取り専用にすることで、ファイルの完全性を保護しましょう。これにより、誤った変更を防ぐことができます。パーミッションを 400 に設定します。これは、所有者のみが読み取り専用であることを意味し、機密性と完全性の両方を維持します。
chmod 400 confidential_data.txt
次に、新しいテキストをファイルに追加して、ファイルを変更してみましょう。
echo "This should not be added." >> confidential_data.txt
操作は失敗し、「Permission denied」というエラーが表示されます。これは、ファイルの完全性が変更から保護されていることを示しています。
zsh: permission denied: confidential_data.txt
最後に、読み取り専用の状態を確認するために、もう一度パーミッションを確認します。
ls -l confidential_data.txt
-r-------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt
ファイルの機密性と完全性の両方を保護するために、ファイルパーミッションを正常に設定しました。
ハッシュ(MD5/SHA256)によるファイル完全性の実証
このステップでは、暗号学的ハッシュを使用してファイル整合性を検証する方法を学びます。ファイルパーミッションは、権限のないユーザーがファイルを変更することを防ぐことができますが、権限のあるユーザーによる偶発的な変更や、より高度な攻撃から保護するものではありません。ハッシュ関数は、ファイルに対してユニークなデジタル指紋(固定長の文字列)を作成します。ファイル内の 1 ビットの変更でさえ、完全に異なるハッシュを生成するため、改ざんを検出するための優れたツールとなります。ここでは、Linux の標準的で安全なハッシュツールであるsha256sumコマンドを使用します。
まず、正しいディレクトリにいることを確認してください。前のステップから続けている場合は、~/projectにいるはずです。
前のステップで、confidential_data.txtを読み取り専用にして整合性を保護しました。ハッシュの仕組みを実証するために、まず所有者に対してファイルを書き込み可能に戻す必要があります。chmodを使用して、ユーザー(u+w)に書き込み権限を戻します。
chmod u+w confidential_data.txt
ls -l confidential_data.txt
パーミッションは-rw-------となり、所有者がファイルを再び書き込めるようになったことを示しつつ、機密性は維持されています。
-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt
次に、元の信頼できるファイルの SHA256 ハッシュを生成しましょう。このハッシュは、整合性チェックのベースラインとして機能します。
sha256sum confidential_data.txt
コマンドは、ハッシュである長い文字列と、その後にファイル名を出力します。
106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d confidential_data.txt
後で検証を容易にするために、この信頼できるハッシュ値を別のファイルに保存するのが一般的な慣習です。コマンドの出力をhashes.sha256という新しいファイルにリダイレクトしましょう。
sha256sum confidential_data.txt > hashes.sha256
この新しいファイルのコンテンツを表示して、ハッシュが保存されたことを確認できます。
cat hashes.sha256
106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d confidential_data.txt
次に、不正な変更をシミュレートしましょう。機密ファイルに新しいテキスト行を追加します。
echo "This is an unauthorized modification." >> confidential_data.txt
confidential_data.txtファイルは変更されました。その整合性を検証するために、sha256sumに-c(または--check)フラグを使用し、hashes.sha256に保存されている信頼できる値と比較するように指示できます。
sha256sum -c hashes.sha256
ファイルの内容が変更されたため、新しいハッシュは保存されたハッシュと一致しません。コマンドは失敗を報告し、ファイルの整合性が侵害されたことを証明します。
confidential_data.txt: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
この強力な技術により、ファイルが元の状態から変更されていないかどうかを迅速かつ確実にチェックできます。
サービス可用性と基本監視のシミュレーション
このステップでは、CIA セキュリティトライアドの 3 番目の要素である可用性(Availability)の原則を探求します。可用性とは、システムやサービスが必要なときに運用可能であり、アクセス可能であることを保証します。簡単な Web サービスをシミュレートし、それが実行されているかを確認する方法、サービス障害をシミュレートする方法、そして可用性チェックを自動化する基本的な監視スクリプトを作成します。
まず、~/projectディレクトリにいることを確認してください。
組み込みの Python Web サーバーを使用して、実行中のサービスをシミュレートします。このコマンドはポート8000で Web サーバーを開始し、現在のディレクトリのファイルを配信します。末尾の&は、プロセスをバックグラウンドで実行するため、ターミナルを使い続けることができます。
python3 -m http.server 8000 &
プロセスが開始されたことを示すメッセージと、そのプロセス ID(PID)が表示されます。
[1] 12345
続行するにはEnterキーを押してください。
サービスは現在実行中です。サービスが実行されているかを確認する基本的な方法は、そのプロセスが存在するかどうかを確認することです。pgrepコマンドを使用して、プロセス名を基にプロセスの PID を見つけることができます。
pgrep -f http.server
これにより、サーバープロセスの PID が返され、メモリ内で実行されていることが確認されます。
12345
ただし、実行中のプロセスがサービスが正しく機能していることを保証するわけではありません。より良い確認方法は、ユーザーが行うように、それに接続してみることです。curlコマンドを使用して、ローカルサーバーにリクエストを送信します。
curl http://localhost:8000/confidential_data.txt
サービスが利用可能であるため、前のステップで作成したファイルのコンテンツで応答します。
Top Secret Details
This is an unauthorized modification.
次に、サービス障害をシミュレートしましょう。killコマンドを使用して Web サーバープロセスを終了します。以前に見つけた PID が必要です。
## pgrepコマンドから取得した実際のPIDを12345に置き換えてください
kill 12345
killを実行した後、バックグラウンドジョブに対して「Terminated」というメッセージが表示される場合があります。次に、curlで再度サービスにアクセスしてみましょう。
curl http://localhost:8000/confidential_data.txt
今回は、サービスが実行されておらず接続を受け付けられないため、コマンドは失敗します。これは可用性の欠如を示しています。
curl: (7) Failed to connect to localhost port 8000 after 0 ms: Connection refused
最後に、このチェックを自動化するための簡単な監視スクリプトを作成しましょう。nanoを使用してmonitor.shという名前の新しいファイルを作成します。
nano monitor.sh
エディタに次のスクリプトを入力します。このスクリプトはcurlを使用してサービスをチェックします。成功した応答(200 OK)が得られた場合は「UP」、それ以外の場合は「DOWN」と報告します。
#!/bin/bash
## localhost:8000 のサービスが応答しているか確認します
if curl -s --head http://localhost:8000 | grep "200 OK" > /dev/null; then
echo "Service Status: UP"
else
echo "Service Status: DOWN"
fi
ファイルを保存し、Ctrl+X、次にY、そしてEnterを押してnanoを終了します。
chmodを使用してスクリプトを実行可能にします。
chmod +x monitor.sh
それでは、監視スクリプトを実行してください。サービスは停止しているため、「DOWN」と報告されるはずです。
./monitor.sh
Service Status: DOWN
これで、サービスを開始し、その可用性をチェックし、障害をシミュレートし、それを監視するための基本的なスクリプトを作成する方法を学びました。
まとめ
この実験では、一般的な Linux ツールを使用して、CIA(機密性、完全性、可用性)セキュリティトライアドの基本原則を実践的に体験しました。chmodコマンドを使用して Linux ファイルパーミッションを操作することで機密性を強制し、機密ファイルへのアクセスを制限して、権限のある所有者のみがその内容を表示できるようにしました。さらに、ファイルパーミッションを設定して不正な変更を防ぎ、次に MD5 や SHA256 のようなハッシュアルゴリズムを使用して一意のチェックサムを生成することで完全性を探求し、ファイルが改ざんされていないことを確認できるようにしました。
可用性の概念は、サービスの運用状況をシミュレートし、基本的な監視を実行してアクセス可能であることを確認することで実証されました。これらの実践的なステップを通じて、基本的な Linux コマンドを適用し、情報セキュリティの核となる教義を実践的に実装および理解しました。



