> For the complete documentation index, see [llms.txt](https://snowyowls-organization.gitbook.io/snowyowl644-hacklog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://snowyowls-organization.gitbook.io/snowyowl644-hacklog/sekyuriti/the-concept-of-attacks.md).

# The Concept of Attacks

## 攻撃の概念

大きく、この4つに分かれてる ![](https://i.imgur.com/wlYVhqg.png)

### 概要

* サービスへの攻撃を理解するには、それらがどのように攻撃されるかを知る必要がある
* コンセプトとは、将来のプロジェクトに適用される計画のこと
  * 例: 家を建てるコンセプト
    * 地下室、4つの壁、屋根
    * 素材やデザインは状況に応じて変更可能
* 攻撃のコンセプトを作成し、すべてのサービスをカテゴリー化する
  * SSH、FTP、SMB、HTTPの共通点を見つけ、攻撃ポイントを特定
  * 共通点を分析し、パターンテンプレートを作成
  * パターンテンプレートは完成品ではなく、継続的に成長するプロセス

### 攻撃の概念の4つのカテゴリ

* Source（情報源）
  * 特定のリクエストを実行する
* Process（処理）
  * 脆弱性が発生する処理
* Privileges（権限）
  * 各プロセスが持つ特定の権限
* Destination（目的地）
  * データの計算や転送のためのタスクの目的

### Source（情報源）

* 情報源の定義: プロセスの特定のタスクで使用される情報の供給源
* 情報の受け渡し方法の例
  * コード: 実行済みのプログラムコードの結果
  * ライブラリ: 設定データ、メッセージテンプレート、事前構築されたコードなど
  * 設定ファイル（Config）: プロセスの動作を決定する静的な値
  * API: プログラムのインターフェースとして情報の取得や提供を行う
  * ユーザー入力: ユーザーが手動で入力するデータ

#### Log4jの例

* Log4jは、Javaなどのプログラムでログを記録するライブラリ
* HTTP User-Agentヘッダーを改ざんし、JNDIルックアップコマンドを挿入
* User-Agentの本来の値（例: Mozilla 5.0）が処理されず、JNDIルックアップが実行される

### Process（処理）

* プロセスの定義: 情報を処理する仕組み
* 主なプロセスの構成要素
  * PID（プロセスID）: 実行中または新規起動されるプロセスの識別子
  * 入力（Input）: ユーザーやプログラムの関数から渡されるデータ
  * データ処理: ハードコードされた関数がどのように情報を処理するか
  * 変数（Variables）: タスクの処理中に使用されるプレースホルダー
  * ロギング（Logging）: 記録されたイベントがシステム内に保持される

#### Log4jの例

* User-Agentを文字列としてログに記録する関数を使用
* 文字列の誤解釈により、ログ記録ではなくコマンドが実行される
* このプロセスの欠陥が攻撃の発生源

### Privileges（権限）

* 権限の定義: システム内のプロセスを制御する許可設定
* 主な権限の種類
  * システム（System）: WindowsのSYSTEMやLinuxのrootなど、最上位の権限
  * ユーザー（User）: 特定のユーザーに割り当てられた権限
  * グループ（Groups）: ユーザーをグループ化し、特定の権限を割り当てる
  * ポリシー（Policies）: アプリケーションごとのルールセット
  * ルール（Rules）: アプリケーション内部の許可設定

#### Log4jの例

* Log4jのログは管理者権限で実行されることが多い
* 攻撃者はこれを利用し、権限の高いプロセスで不正コードを実行

### Destination（目的地）

* 目的地の定義: タスクが完了するための目標地点
* データの保存先の種類
  * ローカル（Local）: システム内でデータが保存・変更される
  * ネットワーク（Network）: データがリモートのサーバーやネットワークに送信される

#### Log4jの例

* JNDIルックアップが攻撃者のサーバーを指すように変更
* サーバーから攻撃者が準備したJavaクラスを取得
* 攻撃者が作成したJavaコードが実行され、リモートコード実行（RCE）が発生

### Log4j攻撃の流れ

#### 攻撃の開始

1. 攻撃者がUser-AgentをJNDIルックアップコマンドに改ざん → Source
2. プロセスが誤ってUser-Agentを解析し、コマンドを実行 → Process
3. 管理者権限でJNDIルックアップが実行される → Privileges
4. 攻撃者のサーバーから悪意のあるJavaクラスを取得 → Destination

#### リモートコード実行の発動

5. 取得したJavaクラスが新たなソースとなり、次のプロセスに供給される → Source
6. Javaクラス内のコードが読み込まれ、システムにリモートアクセスが確立 → Process
7. コードが管理者権限で実行される → Privileges
8. 攻撃者のサーバーに接続し、遠隔操作が可能になる → Destination

## 機密情報の発見 (Finding Sensitive Information)

### 概要

* サービスを攻撃する際、探偵のように情報を収集し、細部まで注意深く観察する必要がある
* どんな小さな情報も重要となる

### 例: クライアント環境での攻撃シナリオ

1. 目標: **メール、FTP、データベース、ストレージを標的** にし、いずれかのサービスでリモートコード実行（RCE）を取得する
2. 情報収集開始
   * すべてのサービスに匿名アクセスを試行
   * **FTPに匿名アクセスが可能**
3. FTPサービス内で「johnsmith」という名前の空のファイルを発見
   * ユーザー名とパスワードに「johnsmith」を試すがログイン不可
4. メールサービスで同じ認証情報を試行し、ログイン成功
   * メールを検索し、「password」を含むメッセージを探す
   * 多数のメールを発見、その中の1つに**MSSQLデータベースのJohnの認証情報**が記載
5. MSSQLデータベースにログインし、組み込み機能を利用してコマンドを実行
   * **データベースサーバーでRCE取得に成功**
6. 結果: 目標達成

### 重要なポイント

* **誤設定されたサービス** により、一見すると些細な情報が得られることがある
* 「johnsmith」という単純な情報が、最終的に**RCE取得への突破口**となった
* すべての情報を細かく調査し、関連する情報をつなぎ合わせることが重要

### 機密情報の種類

機密情報には、以下のようなものが含まれる（ただし、これに限定されない）。

* ユーザー名
* メールアドレス
* パスワード
* DNSレコード
* IPアドレス
* ソースコード
* 設定ファイル
* 個人識別情報（PII）

### 機密情報を見つけるための一般的なサービス

以下のようなサービスに機密情報が含まれることが多い。

* **ファイル共有**
* **メール**
* **データベース**

### 何を探すべきかの理解

* **ターゲットごとに特性が異なる**
  * ターゲットのプロセス、手順、ビジネスモデル、目的を理解する
  * どの情報がターゲットにとって重要かを考える
* **機密情報を見つけるための2つの要素**
  1. **サービスを理解し、その動作を把握する**
  2. **何を探すべきかを明確にする**

このモジュールでは、一般的なサービスから機密情報を発見する方法を学び、**情報収集を自動化するためのツールや手法** を紹介する。
