> 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/pentest_technique/file-encryption.md).

# File Encryption

## Windows

### Invoke-AESEncryption.ps1

Invoke-AESEncryption.ps1　Powershellスクリプト

* 小さくて、ファイルの暗号化と文字列の暗号化を行う
* AES（Advanced Encryption Standard）を使用したファイル・テキストの暗号化
* Windows環境で PowerShell を使って簡単に実行可能
* Base64 形式でエンコードされた暗号文を出力
* ファイルの暗号化・復号も可能

#### 使い方

1. ペネトレーションテストでターゲット環境に `Invoke-AESEncryption.ps1` を転送し、PowerShell でモジュールとして読み込む。

```sh
Import-Module .\Invoke-AESEncryption.ps1
```

2. テキストの暗号化

* `Secret Text` が AES 暗号化され、Base64 形式で出力される

```sh
Invoke-AESEncryption -Mode Encrypt -Key "p@ssw0rd" -Text "Secret Text"
```

3. テキストの復号化

* 暗号化されたテキストを復号し、元の文字列 `"Secret Text"` を出力

```sh
Invoke-AESEncryption -Mode Decrypt -Key "p@ssw0rd" -Text "LtxcRelxrDLrDB9rBD6JrfX/czKjZ2CUJkrg++kAMfs="
```

4. ファイルの暗号化

* scan-results.txt を暗号化し、scan-results.txt.aes として保存

```sh
Invoke-AESEncryption -Mode Encrypt -Key "p@ssw0rd" -Path .\scan-results.txt
```

暗号化後のファイルリスト

```c:\htb\
│── Invoke-AESEncryption.ps1
│── scan-results.txt
│── scan-results.txt.aes  <-- 暗号化されたファイル
```

5. ファイルの復号化

```sh
Invoke-AESEncryption -Mode Decrypt -Key "p@ssw0rd" -Path .\scan-results.txt.aes
```

重要ポイント

* 強力なパスワードを使用する
* 異なる会社で同じパスワードを使い回さない（パスワードが漏洩すると、全データが復号可能になる）
* 必要に応じて暗号化したデータを安全に削除
* データの漏洩リスクを防ぐため、使用後のデータは削除する
* 事前に適切なファイル転送方法を選定
* scp / rsync / SFTP など 暗号化通信が可能な手段を優先
* 使えない場合は、事前に暗号化して転送
* 許可なく個人情報や機密情報を持ち出さない。DLP（データ流出防止）のテストにはダミーデータを使う
* ペネトレーションテストでは機密データを扱うため、必ず暗号化してから転送する

## Linux

### OpenSSL

* ファイルを「ncスタイル」で送信し、ファイルを暗号化できる
* **`-aes256` を使用すると、AES-256による強力な暗号化** が可能
* `-iter` や `-pbkdf2` オプションを追加すると、セキュリティを強化できる

#### 使い方

ファイルの暗号化

#### AES-256でファイルを暗号化

```sh
openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -salt -in plaintext.txt -out encrypted.txt.aes
```

| オプション                    | 説明                              |
| ------------------------ | ------------------------------- |
| `enc`                    | 暗号化を実行                          |
| `-aes-256-cbc`           | AES-256（CBCモード）を使用              |
| `-pbkdf2`                | PBKDF2アルゴリズムを使用（より安全なキー生成）      |
| `-iter 100000`           | キー導出の反復回数を10万回に設定（ブルートフォース攻撃対策） |
| `-salt`                  | 暗号化時にランダムなソルトを追加（セキュリティ強化）      |
| `-in plaintext.txt`      | 暗号化するファイル                       |
| `-out encrypted.txt.aes` | 出力する暗号化ファイル                     |

実行後、パスワードを入力すると暗号化が完了！

ファイルの復号化

```sh
openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -d -in encrypted.txt.aes -out decrypted.txt
```

| オプション                   | 説明            |
| ----------------------- | ------------- |
| `-d`                    | 復号化を実行        |
| `-in encrypted.txt.aes` | 復号するファイル      |
| `-out decrypted.txt`    | 出力する復号化後のファイル |

暗号化時と同じパスワードを入力すれば復号できる！

📌 なぜ `-pbkdf2` と `-iter 100000` を使うのか？

1. PBKDF2（Password-Based Key Derivation Function 2） を使うことで、パスワードの強度を向上
2. 反復回数（`-iter 100000`）を増やすと、ブルートフォース攻撃に強くなる
   * デフォルトの回数は少ないため、より安全な値に変更するのが推奨

* OpenSSL を使うと、簡単にファイルを暗号化できる
* AES-256（`-aes-256-cbc`）で強力な暗号化
* `-pbkdf2` + `-iter 100000` を使うと、より安全
* 暗号化と復号時には、同じパスワードを入力する必要がある
* データ転送前に暗号化すると、盗聴や漏洩のリスクを減らせる

シンプルで安全
