mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-16 01:38:20 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
5874a200c7
commit
0a2779ec45
3 changed files with 125 additions and 84 deletions
|
@ -4,67 +4,87 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricks swag**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有する**ために、[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
||||
|
||||
{% hint style="danger" %}
|
||||
**dyldのコードはオープンソース**であり、[https://opensource.apple.com/source/dyld/](https://opensource.apple.com/source/dyld/)で見つけることができ、**URL**を使用してtarをダウンロードすることができます。例:[https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
|
||||
**dyldのコードはオープンソース**であり、[https://opensource.apple.com/source/dyld/](https://opensource.apple.com/source/dyld/)で見つけることができ、**URL**(例:[https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz))を使用してtarをダウンロードすることができます。
|
||||
{% endhint %}
|
||||
|
||||
## **DYLD\_INSERT\_LIBRARIES**
|
||||
|
||||
> これは、プログラムで指定されたライブラリの前に**ロードする動的ライブラリのリスト**です。これにより、フラットネームスペースイメージで使用される既存の動的共有ライブラリの新しいモジュールをテストすることができます。ただし、DYLD\_FORCE\_FLAT\_NAMESPACEも使用しない限り、これは2レベルの名前空間イメージを使用するイメージには影響しません。
|
||||
> これは、プログラムで指定されたライブラリの前に**ロードする動的ライブラリのリスト**です。これにより、フラットネームスペースイメージで使用される既存の動的共有ライブラリの新しいモジュールをテストすることができます。新しいモジュールだけを持つ一時的な動的共有ライブラリをロードすることで実現します。ただし、これは、DYLD\_FORCE\_FLAT\_NAMESPACEも使用されていない限り、2レベルの名前空間イメージを使用してビルドされたイメージには影響しません。
|
||||
|
||||
これは、[**LinuxのLD\_PRELOAD**](../../../../linux-hardening/privilege-escalation#ld\_preload)のようなものです。
|
||||
これは、[**LinuxのLD\_PRELOAD**](../../../../linux-hardening/privilege-escalation#ld\_preload)と似ています。
|
||||
|
||||
このテクニックは、ASEPテクニックとしても使用できます。インストールされたすべてのアプリケーションには、`LSEnvironmental`というキーを使用して環境変数を割り当てることができる「Info.plist」というplistがあります。
|
||||
このテクニックは、**ASEPテクニック**としても使用できます。インストールされているすべてのアプリケーションには、"Info.plist"というplistがあり、`LSEnvironmental`というキーを使用して環境変数を割り当てることができます。
|
||||
|
||||
{% hint style="info" %}
|
||||
2012年以降、**Appleは`DYLD_INSERT_LIBRARIES`の権限を大幅に制限**しています。
|
||||
|
||||
コードに移動し、**`src/dyld.cpp`**を確認してください。関数**`pruneEnvironmentVariables`**では、**`DYLD_*`**変数が削除されていることがわかります。
|
||||
コードに移動して、**`src/dyld.cpp`**を確認してください。関数**`pruneEnvironmentVariables`**では、**`DYLD_*`**変数が削除されていることがわかります。
|
||||
|
||||
関数**`processRestricted`**では、制限の理由が設定されています。そのコードをチェックすると、理由は次のとおりです。
|
||||
|
||||
* バイナリが`setuid/setgid`である
|
||||
* machoバイナリに`__RESTRICT/__restrict`セクションが存在する
|
||||
* ソフトウェアには、[`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)エンタイトルメントまたは[`com.apple.security.cs.disable-library-validation`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)`/` [`com.apple.private.security.clear-library-validation`](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)エンタイトルメントがあります。
|
||||
* バイナリのエンタイトルメントを次のコマンドで確認します:`codesign -dv --entitlements :- </path/to/bin>`
|
||||
* ライブラリがバイナリと異なる証明書で署名されている場合
|
||||
* ライブラリとバイナリが同じ証明書で署名されている場合、これにより前の制限がバイパスされます
|
||||
* エンタイトルメント**`system.install.apple-software`**および**`system.install.apple-software.standar-user`**を持つプログラムは、ユーザーにパスワードを求めずにAppleによって署名されたソフトウェアを**インストール**できます(特権昇格)
|
||||
* ソフトウェアには、[`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)エンタイトルメントがある(ハード化されたランタイム)
|
||||
* バイナリのエンタイトルメントを確認するには:`codesign -dv --entitlements :- </path/to/bin>`
|
||||
|
||||
より新しいバージョンでは、このロジックは関数**`configureProcessRestrictions`**の2番目の部分で見つけることができます。ただし、新しいバージョンでは、関数の**最初のチェック**が実行されます(iOSやシミュレーションに関連するif文は使用されないため、それらを削除できます)。
|
||||
より最新のバージョンでは、このロジックを関数**`configureProcessRestrictions`**の後半で見つけることができます。ただし、新しいバージョンでは、関数の**最初のチェックが実行**されます(iOSやシミュレーションに関連するif文は削除してもかまいません)。
|
||||
{% endhint %}
|
||||
|
||||
バイナリに**ハードランタイム**があるかどうかは、`codesign --display --verbose <bin>`で**runtime**フラグを**`CodeDirectory`**の中でチェックすることで確認できます。例:**`CodeDirectory v=20500 size=767 flags=0x10000(runtime) hashes=13+7 location=embedded`**
|
||||
### ライブラリの検証
|
||||
|
||||
これを悪用する方法の例と制限のチェック方法は次の場所にあります:
|
||||
バイナリが**`DYLD_INSERT_LIBRARIES`**環境変数を使用することを許可していても、バイナリはライブラリの署名をチェックしてカスタムライブラリをロードしません。
|
||||
|
||||
カスタムライブラリをロードするためには、バイナリに次のいずれかのエンタイトルメントが必要です。
|
||||
|
||||
*  [`com.apple.security.cs.disable-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.security.cs.disable-library-validation)
|
||||
* [`com.apple.private.security.clear-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.private.security.clear-library-validation)
|
||||
|
||||
または、バイナリには**ハード化されたランタイムフラグ**または**ライブラリの検証フラグ**がない必要があります。
|
||||
|
||||
`codesign --display --verbose <bin>`を使用してバイナリが**ハード化されたランタイム**を持っているかどうかを確認し、**`CodeDirectory`**のランタイムフラグをチェックします。例:**`CodeDirectory v=20500 size=767 flags=0x10000(runtime) hashes=13+7 location=embedded`**
|
||||
|
||||
また、バイナリが**バイナリと同じ証明書で署名されている場合**も、ライブラリをロードすることができます。
|
||||
|
||||
これを悪用する方法の例と制限を確認するには、次を参照してください:
|
||||
|
||||
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
|
||||
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Dylibハイジャッキング
|
||||
|
||||
{% hint style="danger" %}
|
||||
Dylibハイジャッキング攻撃を実行するには、**前述の制限も適用**することを忘れないでください。
|
||||
**以前のライブラリ検証の制限も適用**されることを忘れないでください。Dylibハイジャッキング攻撃を実行するために。
|
||||
{% endhint %}
|
||||
|
||||
Windowsと同様に、MacOSでも**dylibをハイジャック**して、**アプリケーションが任意のコードを実行**することができます。ただし、MacOSのアプリケーションがライブラリをロードする方法は、Windowsよりも**制限が多い**です。これは、**マルウェア**開発者がこのテクニックを**ステルス**に使用できる可能性がある一方で、特権昇格に悪用する可能性はずっと低いということを意味します。
|
||||
Windowsと同様に、MacOSでも**dylibをハイジャック**して、**アプリケーション**が**任意のコードを実行**することができます。\
|
||||
ただし、MacOSアプリケーションがライブラリをロードする方法は、Windowsよりも**制限が厳しい**です。これは、**マルウェア**開発者がこの技術を**ステルス**に使用することはできますが、特権をエスカレートするためにこれを悪用する可能性はずっと低いということを意味します。
|
||||
|
||||
まず、**MacOSバイナリがライブラリをロードする際には、完全なパスを指定**することが**より一般的**です。そして、**MacOSは決して**$PATH**のフォルダを検索しません。
|
||||
まず、**MacOSバイナリがロードするライブラリの完全なパスを示す**ことが**より一般的**です。そして、**MacOSは決して**`$PATH`のフォルダを検索しません。
|
||||
|
||||
この機能に関連する**コードの主な部分**は、`ImageLoader.cpp`
|
||||
* **弱リンクされたライブラリが見つからない**: これは、アプリケーションが存在しないライブラリを**LC\_LOAD\_WEAK\_DYLIB**で設定してロードしようとすることを意味します。その後、**攻撃者が期待される場所にdylibを配置すると、ロードされます**。
|
||||
* リンクが「弱い」ということは、ライブラリが見つからなくてもアプリケーションが続行されることを意味します。
|
||||
* これに関連する**コード**は、`ImageLoaderMachO.cpp`の`ImageLoaderMachO::doGetDependentLibraries`関数にあります。ここでは、`lib->required`は`LC_LOAD_WEAK_DYLIB`がtrueの場合にのみ`false`です。
|
||||
* バイナリ内の**弱リンクされたライブラリを検索**するには(後でハイジャックライブラリの作成方法の例があります):
|
||||
この機能に関連する**コード**の**主な**部分は、`ImageLoader.cpp`の**`ImageLoader::recursiveLoadLibraries`**にあります。
|
||||
|
||||
machoバイナリがライブラリをロードするために使用できる**4つの異なるヘッダコマンド**があります。
|
||||
|
||||
* **`LC_LOAD_DYLIB`**コマンドは、dylibをロードするための一般的なコマンドです。
|
||||
* **`LC_LOAD_WEAK_DYLIB`**コマンドは、前のコマンドと同様に機能しますが、dylibが見つからない場合でもエラーなしで実行が続行されます。
|
||||
* **`LC_REEXPORT_DYLIB`**コマンドは、別のライブラリからシンボルをプロキシ(または再エクスポート)します。
|
||||
* **`LC_LOAD_UPWARD_DYLIB`**コマンドは、2つのライブラリが互いに依存している場合に使用されます(これは_上向きの依存性_と呼ばれます)。
|
||||
|
||||
ただし、**2種類のdylibハイジャッキング**があります。
|
||||
|
||||
* **弱リンクされたライブラリが見つからない場合**:これは、アプリケーションが**`LC_LOAD_WEAK_DYLIB`**で構成された存在しないライブラリをロードしようとすることを意味します。その後、**攻撃者が期待される場所にdylibを配置すると、ロードされます**。
|
||||
* リンクが「弱い」という事実は、ライブラリが見つからなくてもアプリケーションが実行を続けることを意味します。
|
||||
* これに関連する**コード**は、`ImageLoaderMachO.cpp`の`ImageLoaderMachO::doGetDependentLibraries`関数にあります。ここでは、`lib->required`が`LC_LOAD_WEAK_DYLIB`がtrueの場合にのみ`false`です。
|
||||
* バイナリ内の**弱リンクされたライブラリを見つける**:(ハイジャッキングライブラリを作成する方法の後で例があります)
|
||||
* ```bash
|
||||
otool -l </path/to/bin> | grep LC_LOAD_WEAK_DYLIB -A 5 cmd LC_LOAD_WEAK_DYLIB
|
||||
cmdsize 56
|
||||
|
@ -73,22 +93,22 @@ time stamp 2 Wed Jun 21 12:23:31 1969
|
|||
current version 1.0.0
|
||||
compatibility version 1.0.0
|
||||
```
|
||||
* **@rpathで設定された**: Mach-Oバイナリには、**`LC_RPATH`**と**`LC_LOAD_DYLIB`**というコマンドがあります。これらのコマンドの**値**に基づいて、**異なるディレクトリ**から**ライブラリがロード**されます。
|
||||
* **`@rpath`で構成**された:Mach-Oバイナリには、**`LC_RPATH`**と**`LC_LOAD_DYLIB`**というコマンドがあります。これらのコマンドの**値**に基づいて、**ライブラリ**が**異なるディレクトリ**から**ロード**されます。
|
||||
* **`LC_RPATH`**には、バイナリでライブラリをロードするために使用されるいくつかのフォルダのパスが含まれています。
|
||||
* **`LC_LOAD_DYLIB`**には、ロードする特定のライブラリのパスが含まれています。これらのパスには**`@rpath`**が含まれる場合、**`LC_RPATH`**の値で置き換えられます。**`LC_RPATH`**に複数のパスがある場合、すべてのパスが使用されてライブラリの検索に使用されます。例:
|
||||
* **`LC_LOAD_DYLIB`**に`@rpath/library.dylib`が含まれ、**`LC_RPATH`**に`/application/app.app/Contents/Framework/v1/`と`/application/app.app/Contents/Framework/v2/`が含まれている場合、両方のフォルダが`library.dylib`をロードするために使用されます。**`LC_LOAD_DYLIB`**のパスの順序に従います。
|
||||
* **`LC_LOAD_DYLIB`**には、ロードする特定のライブラリのパスが含まれています。これらのパスには**`@rpath`**が含まれる場合、**`LC_RPATH`**の値で置き換えられます。**`LC_RPATH`**に複数のパスがある場合、すべてのパスが使用されてライブラリを検索します。例:
|
||||
* **`LC_LOAD_DYLIB`**に`@rpath/library.dylib`が含まれ、**`LC_RPATH`**に`/application/app.app/Contents/Framework/v1/`と`/application/app.app/Contents/Framework/v2/`が含まれている場合。両方のフォルダが`library.dylib`をロードするために使用されます。**`LC_LOAD_DYLIB`**のパスの順序に従って、ライブラリが`[...]/v1/`に存在しない場合、攻撃者は`[...]/v2/`に配置してライブラリのロードをハイジャックすることができます。
|
||||
* バイナリ内の**rpathパスとライブラリ**を検索するには:`otool -l </path/to/binary> | grep -E "LC_RPATH|LC_LOAD_DYLIB" -A 5`
|
||||
|
||||
{% hint style="info" %}
|
||||
**`@executable_path`**:**メインの実行可能ファイル**を含むディレクトリへの**パス**です。
|
||||
**`@executable_path`**:**メイン実行ファイル**を含むディレクトリへの**パス**です。
|
||||
|
||||
**`@loader_path`**:**Mach-Oバイナリ**を含む**ディレクトリ**への**パス**です。
|
||||
**`@loader_path`**:**ロードコマンド**を含む**Mach-Oバイナリ**を含む**ディレクトリ**への**パス**です。
|
||||
|
||||
* 実行可能ファイルで使用される場合、**`@loader_path`**は**`@executable_path`**と**同じ**です。
|
||||
* **dylib**で使用される場合、**`@loader_path`**は**dylib**への**パス**を与えます。
|
||||
{% endhint %}
|
||||
|
||||
この機能を悪用して特権をエスカレーションする方法は、**root**によって実行される**アプリケーション**が、**攻撃者が書き込み権限を持つフォルダ**でライブラリを検索している**珍しいケース**です。
|
||||
この機能を悪用して**特権をエスカレート**する方法は、**root**によって実行される**アプリケーション**が**攻撃者が書き込み権限を持つフォルダ**で**ライブラリを検索**している**珍しいケース**です。
|
||||
|
||||
{% hint style="success" %}
|
||||
アプリケーション内の**欠落しているライブラリ**を見つけるための素晴らしい**スキャナ**は、[**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html)または[**CLIバージョン**](https://github.com/pandazheng/DylibHijack)です。\
|
||||
|
@ -101,50 +121,56 @@ compatibility version 1.0.0
|
|||
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Dlopenハイジャック
|
||||
## Dlopenハイジャッキング
|
||||
|
||||
{% hint style="danger" %}
|
||||
**以前のライブラリ検証の制限も適用**されることを忘れないでください。Dlopenハイジャッキング攻撃を実行するために。
|
||||
{% endhint %}
|
||||
|
||||
**`man dlopen`**から:
|
||||
|
||||
* パスに**スラッシュ文字が含まれていない**場合(つまり、単なるリーフ名である場合)、**dlopen()は検索**を行います。**`$DYLD_LIBRARY_PATH`**が起動時に設定されている場合、dyldはまずそのディレクトリを検索します。次に、呼び出し元のmach-oファイルまたはメインの実行可能ファイルが**`LC_RPATH`**を指定している場合、dyldはそれらのディレクトリを検索します。次に、プロセスが**制限されていない**場合、dyldは**カレントワーキングディレクトリ**を検索します。最後に、古いバイナリの場合、dyldはいくつかのフォールバックを試みます。**`$DYLD_FALLBACK_LIBRARY_PATH`**が起動時に設定されている場合、dyldはそれらのディレクトリを検索します。そうでなければ、dyldは**`/usr/local/lib/`**(プロセスが制限されていない場合)を検索し、次に**`/usr/lib/`**を検索します(この情報は**`man dlopen`**から取得されました)。
|
||||
1. `$DYLD_LIBRARY_PATH`
|
||||
2. `LC_RPATH`
|
||||
3. `CWD`(制限されていない場合)
|
||||
4. `$DYLD_FALLBACK_LIBRARY_PATH`
|
||||
5. `/usr/local/lib/`(制限されていない場合)
|
||||
6. `/usr/lib/`
|
||||
* パスに**スラッシュ文字が含まれていない**場合(つまり、単なるリーフ名である場合)、**dlopen()は検索**を行います。**`$DYLD_LIBRARY_PATH`**が起動時に
|
||||
* パスがフレームワークのパスのように見える場合(例:`/stuff/foo.framework/foo`)、もし起動時に`$DYLD_FRAMEWORK_PATH`が設定されていた場合、dyldはまずそのディレクトリ内でフレームワークの部分パス(例:`foo.framework/foo`)を探します。次に、dyldは指定されたパスをそのまま試します(相対パスの場合は現在の作業ディレクトリを使用します)。最後に、古いバイナリの場合、dyldはいくつかのフォールバックを試みます。もし起動時に`$DYLD_FALLBACK_FRAMEWORK_PATH`が設定されていた場合、dyldはそれらのディレクトリを検索します。そうでなければ、dyldは`/Library/Frameworks`(プロセスが制限されていない場合はmacOS上)を検索し、次に`/System/Library/Frameworks`を検索します。
|
||||
|
||||
1. `$DYLD_FRAMEWORK_PATH`
|
||||
2. 指定されたパス(制限がない場合は現在の作業ディレクトリを使用した相対パス)
|
||||
3. `$DYLD_FALLBACK_FRAMEWORK_PATH`
|
||||
4. `/Library/Frameworks`(制限がない場合)
|
||||
5. `/System/Library/Frameworks`
|
||||
|
||||
{% hint style="danger" %}
|
||||
名前にスラッシュが含まれていない場合、ハイジャックする方法は2つあります:
|
||||
フレームワークのパスの場合、乗っ取りの方法は次のとおりです:
|
||||
|
||||
* いずれかの**`LC_RPATH`**が**書き込み可能**(ただし、署名がチェックされるため、これにはバイナリが制限されていない必要もあります)
|
||||
* バイナリが**制限されていない**場合、CWDから何かをロードすることが可能です(または、言及されていないかもしれませんが、制限されていない場合、DYLD\_\*環境変数は削除されます)
|
||||
* プロセスが**制限されていない**場合、CWDからの**相対パス**を悪用する(ドキュメントには明記されていませんが、プロセスが制限されている場合、DYLD\_\*環境変数は削除されます)
|
||||
{% endhint %}
|
||||
|
||||
* パスが**フレームワークのパスのように見える場合**(例:`/stuff/foo.framework/foo`)、**`$DYLD_FRAMEWORK_PATH`**が起動時に設定されている場合、dyldは最初にそのディレクトリをフレームワークの部分パス(`foo.framework/foo`など)で検索します。次に、dyldは**提供されたパスをそのまま**試します(相対パスの場合はカレントワーキングディレクトリを使用)。最後に、古いバイナリの場合、dyldはいくつかのフォールバックを試みます。**`$DYLD
|
||||
2. 供給されたパス(制限がない場合は相対パスの場合はカレントディレクトリを使用)
|
||||
* パスにスラッシュが含まれているがフレームワークのパスではない場合(つまり、完全なパスまたはdylibへの部分パス)、dlopen()はまず(設定されている場合)**`$DYLD_LIBRARY_PATH`**(パスの末尾部分を使用)を検索します。次に、dyldは指定されたパスを試します(制限されているプロセスの場合は現在の作業ディレクトリを使用しますが、相対パスの場合は制限されていないプロセスのみ)。最後に、古いバイナリの場合、dyldはフォールバックを試みます。もし起動時に`$DYLD_FALLBACK_LIBRARY_PATH`が設定されていた場合、dyldはそれらのディレクトリを検索します。そうでなければ、dyldは`/usr/local/lib/`(制限がない場合)を検索し、次に`/usr/lib/`を検索します。
|
||||
|
||||
1. `$DYLD_LIBRARY_PATH`
|
||||
2. 指定されたパス(制限がない場合は現在の作業ディレクトリを使用した相対パス)
|
||||
3. `$DYLD_FALLBACK_LIBRARY_PATH`
|
||||
4. `/usr/local/lib/`(制限がない場合)
|
||||
5. `/usr/lib/`
|
||||
|
||||
{% hint style="danger" %}
|
||||
名前にスラッシュが含まれており、フレームワークではない場合、それを乗っ取る方法は次のとおりです:
|
||||
スラッシュが含まれていてフレームワークではない場合、乗っ取りの方法は次のとおりです:
|
||||
|
||||
* バイナリが**制限されていない**場合、CWDまたは`/usr/local/lib`から何かをロードすることが可能です(または、言及された環境変数のいずれかを乱用する)
|
||||
* バイナリが**制限されていない**場合、CWDまたは`/usr/local/lib`から何かをロードすることが可能です(または、上記の環境変数のいずれかを悪用する)
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
注意:**dlopenの検索を制御する**設定ファイルは**存在しません**。
|
||||
注意:**dlopenの検索を制御する**設定ファイルはありません。
|
||||
|
||||
注意:メインの実行可能ファイルが**set\[ug]idバイナリまたはエンタイトルメントで署名**されている場合、**すべての環境変数は無視**され、完全なパスのみ使用できます(詳細な情報については、[DYLD\_INSERT\_LIBRARIESの制限を確認](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md#check-dyld\_insert\_librery-restrictions)してください)。
|
||||
注意:メインの実行可能ファイルが**set\[ug]idバイナリまたはエンタイトルメントで署名**されている場合、**すべての環境変数は無視**され、フルパスのみ使用できます(詳細な情報については、[DYLD\_INSERT\_LIBRARIESの制限を確認](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md#check-dyld\_insert\_librery-restrictions)してください)。
|
||||
|
||||
注意:Appleプラットフォームでは、32ビットと64ビットのライブラリを組み合わせるために「ユニバーサル」ファイルが使用されます。これは、**別々の32ビットと64ビットの検索パスは存在しない**ことを意味します。
|
||||
注意:Appleのプラットフォームでは、32ビットと64ビットのライブラリを組み合わせるために「ユニバーサル」ファイルが使用されます。これは、**別々の32ビットと64ビットの検索パスは存在しない**ことを意味します。
|
||||
|
||||
注意:Appleプラットフォームでは、ほとんどのOS dylibは**dyldキャッシュに統合**されており、ディスク上に存在しません。したがって、OS dylibが存在するかどうかを事前に確認するために**`stat()`**を呼び出すことは**機能しません**。ただし、**`dlopen_preflight()`**は、互換性のあるmach-oファイルを見つけるために**`dlopen()`**と同じ手順を使用します。
|
||||
注意:Appleのプラットフォームでは、ほとんどのOS dylibは**dyldキャッシュに統合**されており、ディスク上に存在しません。したがって、OS dylibが存在するかどうかを事前に確認するために**`stat()`**を呼び出すことはできません。ただし、**`dlopen_preflight()`**は、互換性のあるmach-oファイルを見つけるために**`dlopen()`**と同じ手順を使用します。
|
||||
{% endhint %}
|
||||
|
||||
**パスの確認**
|
||||
**パスをチェックする**
|
||||
|
||||
次のコードですべてのオプションを確認しましょう:
|
||||
以下のコードですべてのオプションをチェックしましょう:
|
||||
```c
|
||||
// gcc dlopentest.c -o dlopentest -Wl,-rpath,/tmp/test
|
||||
#include <dlfcn.h>
|
||||
|
@ -253,9 +279,13 @@ sudo chmod -s hello
|
|||
```
|
||||
### セクション `__RESTRICT` とセグメント `__restrict`
|
||||
|
||||
The `__RESTRICT` section is a special section in macOS that is used for library injection and privilege escalation techniques. It is located within the `__restrict` segment.
|
||||
The `__RESTRICT` section is a special section in macOS that is used for library injection and privilege escalation techniques. It is located within the `__restrict` segment, which is a protected segment of memory.
|
||||
|
||||
セクション `__RESTRICT` は、macOS においてライブラリインジェクションや特権エスカレーションの技術に使用される特別なセクションです。これは `__restrict` セグメント内に位置しています。
|
||||
The purpose of the `__RESTRICT` section is to restrict the execution of certain code or functions within a process. By injecting malicious code into this section, an attacker can gain unauthorized access and escalate their privileges within the system.
|
||||
|
||||
It is important to note that manipulating the `__RESTRICT` section requires advanced knowledge of macOS internals and memory manipulation techniques. This technique is commonly used by hackers to bypass security measures and gain control over a compromised system.
|
||||
|
||||
To protect against library injection and privilege escalation attacks, it is recommended to implement strong security measures, such as regular software updates, code signing, and strict access controls. Additionally, monitoring for any suspicious activity or unauthorized modifications to the `__RESTRICT` section can help detect and mitigate potential attacks.
|
||||
```bash
|
||||
gcc -sectcreate __RESTRICT __restrict /dev/null hello.c -o hello-restrict
|
||||
DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# macOS危険な権限とTCCの許可
|
||||
# macOS 危険な権限とTCCの許可
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -16,47 +16,51 @@
|
|||
**`com.apple`**で始まる権限は、サードパーティには利用できません。Appleのみがそれらを付与できます。
|
||||
{% endhint %}
|
||||
|
||||
## 高
|
||||
## High
|
||||
|
||||
### `com.apple.rootless.install.heritable`
|
||||
|
||||
権限**`com.apple.rootless.install.heritable`**は**SIPをバイパス**することができます。詳細については[こちらを参照](macos-sip.md#com.apple.rootless.install.heritable)してください。
|
||||
権限**`com.apple.rootless.install.heritable`**は**SIPをバイパス**することができます。詳細については[こちらを参照してください](macos-sip.md#com.apple.rootless.install.heritable)。
|
||||
|
||||
### **`com.apple.rootless.install`**
|
||||
|
||||
権限**`com.apple.rootless.install`**は**SIPをバイパス**することができます。詳細については[こちらを参照](macos-sip.md#com.apple.rootless.install)してください。
|
||||
権限**`com.apple.rootless.install`**は**SIPをバイパス**することができます。詳細については[こちらを参照してください](macos-sip.md#com.apple.rootless.install)。
|
||||
|
||||
### **`com.apple.system-task-ports`(以前は`task_for_pid-allow`と呼ばれていました)**
|
||||
|
||||
この権限は、カーネルを除く**任意の**プロセスの**タスクポートを取得**することができます。詳細については[**こちらを参照**](../mac-os-architecture/macos-ipc-inter-process-communication/)してください。
|
||||
この権限は、**カーネルを除く**すべてのプロセスの**タスクポートを取得**することができます。詳細については[**こちらを参照してください**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
|
||||
|
||||
### `com.apple.security.get-task-allow`
|
||||
|
||||
この権限は、**`com.apple.security.cs.debugger`**権限を持つ他のプロセスが、この権限を持つバイナリで実行されるプロセスのタスクポートを取得し、それにコードを**インジェクト**することができます。詳細については[**こちらを参照**](../mac-os-architecture/macos-ipc-inter-process-communication/)してください。
|
||||
この権限は、**`com.apple.security.cs.debugger`**権限を持つ他のプロセスが、この権限を持つバイナリで実行されるプロセスのタスクポートを取得し、**コードを注入**することができます。詳細については[**こちらを参照してください**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
|
||||
|
||||
### `com.apple.security.cs.debugger`
|
||||
|
||||
デバッグツール権限を持つアプリは、`Get Task Allow`権限が`true`に設定された署名されていないサードパーティアプリに対して`task_for_pid()`を呼び出して有効なタスクポートを取得することができます。ただし、デバッガは、**`Get Task Allow`権限を持たないプロセスのタスクポート**を取得することはできません。これにより、システム整合性保護によって保護されているプロセスのタスクポートを取得することはできません。詳細については[**こちらを参照**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)してください。
|
||||
デバッグツール権限を持つアプリは、`Get Task Allow`権限が`true`に設定された未署名のサードパーティアプリに対して`task_for_pid()`を呼び出して有効なタスクポートを取得することができます。ただし、デバッグツール権限を持っていても、デバッガは**`Get Task Allow`権限を持たないプロセスのタスクポート**を取得することはできません。したがって、これらのプロセスはシステム整合性保護によって保護されています。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)。
|
||||
|
||||
### `com.apple.security.cs.disable-library-validation`
|
||||
|
||||
この権限は、Appleによって署名されていないか、メインの実行可能ファイルと同じチームIDで署名されていないフレームワーク、プラグイン、またはライブラリを**ロードすることができます**。したがって、攻撃者は任意のライブラリのロードを悪用してコードをインジェクトすることができます。詳細については[**こちらを参照**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)してください。
|
||||
この権限は、Appleによって署名されていないか、メインの実行可能ファイルと同じチームIDで署名されていないフレームワーク、プラグイン、またはライブラリを**ロードすることができます**。したがって、攻撃者は任意のライブラリのロードを悪用してコードを注入することができます。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)。
|
||||
|
||||
### `com.apple.private.security.clear-library-validation`
|
||||
|
||||
この権限は、**`com.apple.security.cs.disable-library-validation`**と非常に似ていますが、**ライブラリの検証を直接無効にする**代わりに、プロセスがそれを無効にするために`csops`システムコールを呼び出すことを許可します。詳細については[**こちらを参照**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)してください。
|
||||
この権限は、**`com.apple.security.cs.disable-library-validation`**と非常に似ていますが、**ライブラリの検証を直接無効にする**代わりに、プロセスが**`csops`システムコールを呼び出して無効にする**ことができます。詳細については[**こちらを参照してください**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)。
|
||||
|
||||
### `com.apple.security.cs.allow-dyld-environment-variables`
|
||||
|
||||
この権限は、ライブラリやコードをインジェクトするために使用される可能性のある**DYLD環境変数**の使用を許可します。詳細については[**こちらを参照**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)してください。
|
||||
この権限は、ライブラリやコードを注入するために使用される可能性のある**DYLD環境変数**を使用することができます。詳細については[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)。
|
||||
|
||||
### `com.apple.private.tcc.manager`および`com.apple.rootless.storage`.`TCC`
|
||||
|
||||
[**このブログによると**](https://objective-see.org/blog/blog\_0x4C.html)、これらの権限は**TCC**データベースを**変更**することを許可します。
|
||||
|
||||
### com.apple.private.security.kext-management
|
||||
### **`system.install.apple-software`**および**`system.install.apple-software.standar-user`**
|
||||
|
||||
カーネルに**カーネル拡張をロードするように要求**するための権限が必要です。
|
||||
これらの権限は、ユーザーの許可を求めることなくソフトウェアを**インストール**することができます。これは特権エスカレーションに役立ちます。
|
||||
|
||||
### `com.apple.private.security.kext-management`
|
||||
|
||||
カーネル拡張をロードするために必要な権限です。
|
||||
|
||||
### `com.apple.private.tcc.manager.check-by-audit-token`
|
||||
|
||||
|
@ -64,11 +68,11 @@ TODO: これが何を許可するかわかりません
|
|||
|
||||
### `com.apple.private.apfs.revert-to-snapshot`
|
||||
|
||||
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)には、再起動後にSSVで保護されたコンテンツを更新するために使用できると記載されています。詳細がわかる場合は、PRを送信してください!
|
||||
|
||||
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **には、再起動後にSSVで保護されたコンテンツを更新するために使用できる可能性があると記載されています。詳細がわかる場合は、PRを送信してください!
|
||||
### `com.apple.private.apfs.create-sealed-snapshot`
|
||||
|
||||
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)には、再起動後にSSVで保護されたコンテンツを更新するために使用できると記載されています。詳細がわかる場合は、PRを送信してください!
|
||||
TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **には、再起動後にSSVで保護されたコンテンツを更新するために使用できる可能性があると述べられています。PRを送信する方法を知っている場合は、お知らせください!**
|
||||
|
||||
### `keychain-access-groups`
|
||||
|
||||
このエンタイトルメントは、アプリケーションがアクセスできる**キーチェーン**グループのリストです:
|
||||
|
@ -88,7 +92,7 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
|
|||
|
||||
### **`kTCCServiceAppleEvents`**
|
||||
|
||||
アプリが他のアプリケーションにイベントを送信することを許可します。これは一般的にタスクの自動化に使用されるアプリケーションに対して行われます。他のアプリケーションを制御することで、これらの他のアプリケーションに付与された権限を悪用することができます。
|
||||
アプリが他のアプリケーションにイベントを送信することを許可します。これは一般的にタスクの自動化に使用されるアプリケーションに対して行われます。他のアプリを制御することで、これらの他のアプリに付与された権限を悪用することができます。
|
||||
|
||||
### **`kTCCServiceSystemPolicySysAdminFiles`**
|
||||
|
||||
|
@ -116,10 +120,10 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
|
|||
|
||||
### `com.apple.security.cs.disable-executable-page-protection`
|
||||
|
||||
このエンタイトルメントは、自身の実行可能ファイルのセクションを変更して強制的に終了することを許可します。詳細については、[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection)。
|
||||
このエンタイトルメントは、ディスク上の自身の実行可能ファイルのセクションを変更して強制的に終了することを許可します。詳細については、[**こちらを参照してください**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection)。
|
||||
|
||||
{% hint style="danger" %}
|
||||
Disable Executable Memory Protectionエンタイトルメントは、アプリから基本的なセキュリティ保護を削除し、攻撃者が検出されずにアプリの実行可能コードを書き換えることが可能になる極端なエンタイトルメントです。可能な限り狭いエンタイトルメントを使用してください。
|
||||
Disable Executable Memory Protectionエンタイトルメントは、アプリから基本的なセキュリティ保護を削除し、攻撃者が検出されずにアプリの実行可能コードを書き換えることが可能になる極端なエンタイトルメントです。可能な場合は、より狭いエンタイトルメントを選択してください。
|
||||
{% endhint %}
|
||||
|
||||
### `com.apple.security.cs.allow-relative-library-loads`
|
||||
|
@ -132,7 +136,7 @@ TODO
|
|||
|
||||
* **サイバーセキュリティ企業で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたりしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!**
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのスワッグ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**公式のPEASS&HackTricks swag**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
* **読み取り** - ディレクトリのエントリを**列挙**できます。
|
||||
* **書き込み** - ディレクトリに**ファイルを削除/書き込み**できます。
|
||||
* **実行** - ディレクトリを**トラバース**することができます。この権限がない場合、そのディレクトリ内またはサブディレクトリ内のファイルにアクセスできません。
|
||||
* **実行** - ディレクトリを**トラバース**することができます。この権限がない場合、そのディレクトリ内または任意のサブディレクトリ内のファイルにアクセスできません。
|
||||
|
||||
### 危険な組み合わせ
|
||||
|
||||
|
@ -32,19 +32,19 @@
|
|||
|
||||
### フォルダのルートR+X特殊ケース
|
||||
|
||||
**rootだけがR+Xアクセス権限を持つディレクトリ**にファイルがある場合、それらは**他の誰にもアクセスできません**。したがって、ユーザーが読み取り可能なファイルを持つが、その**制限**のために読み取ることができないフォルダから、別のフォルダにファイルを**移動**する脆弱性がある場合、これらのファイルを読み取るために悪用することができます。
|
||||
**rootのみがR+Xアクセス権限を持つディレクトリ**にファイルがある場合、それらは**他の誰にもアクセスできません**。したがって、ユーザーが読み取り可能なファイルを移動する脆弱性がある場合、その制限のために読み取ることができないこのフォルダから**別のフォルダ**に移動することで、これらのファイルを読み取るために悪用することができます。
|
||||
|
||||
例:[https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
||||
|
||||
## シンボリックリンク/ハードリンク
|
||||
|
||||
特権プロセスが**制御可能なファイル**にデータを書き込んでいる場合、または**低特権ユーザー**によって**事前に作成**されたファイルにデータを書き込んでいる場合、ユーザーはシンボリックリンクまたはハードリンクを介してそれを別のファイルに**ポイント**することができ、特権プロセスはそのファイルに書き込みます。
|
||||
特権プロセスが**制御可能なファイル**にデータを書き込んでいる場合、それを**低特権ユーザー**が**別のファイル**に向けるだけで、シンボリックリンクまたはハードリンクを介して、特権プロセスはそのファイルに書き込みます。
|
||||
|
||||
特権の任意の書き込みを悪用して特権をエスカレーションする方法については、他のセクションを確認してください。
|
||||
|
||||
## 任意のFD
|
||||
|
||||
**プロセスが高い特権でファイルまたはフォルダを開く**ことができる場合、**`crontab`**を悪用して`/etc/sudoers.d`内のファイルを**`EDITOR=exploit.py`**で開くことができます。そのため、`exploit.py`は`/etc/sudoers`内のファイルへのFDを取得し、それを悪用します。
|
||||
**プロセスが高特権でファイルまたはフォルダを開く**ことができる場合、**`crontab`**を悪用して、`/etc/sudoers.d`内のファイルを**`EDITOR=exploit.py`**で開くことができます。そのため、`exploit.py`は`/etc/sudoers`内のファイルへのFDを取得し、それを悪用します。
|
||||
|
||||
例:[https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||
|
||||
|
@ -56,7 +56,7 @@ xattr -d com.apple.quarantine /path/to/file_or_app
|
|||
```
|
||||
### uchg / uchange / uimmutable フラグ
|
||||
|
||||
ファイル/フォルダにこの不変属性がある場合、それに xattr を設定することはできません。
|
||||
ファイル/フォルダにこの immutable 属性がある場合、それに xattr を設定することはできません。
|
||||
```bash
|
||||
echo asd > /tmp/asd
|
||||
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
|
||||
|
@ -138,7 +138,7 @@ ls -le test
|
|||
|
||||
バンドルには、**`_CodeSignature/CodeResources`**というファイルが含まれており、バンドル内のすべての**ファイル**の**ハッシュ**が含まれています。ただし、CodeResourcesのハッシュは**実行可能ファイルに埋め込まれている**ため、それには手を出せません。
|
||||
|
||||
ただし、いくつかのファイルの署名はチェックされないため、これらのファイルにはplist内のomitキーがあります。
|
||||
ただし、いくつかのファイルの署名はチェックされないため、これらのファイルにはplist内のomitというキーがあります。
|
||||
```xml
|
||||
<dict>
|
||||
...
|
||||
|
@ -182,11 +182,18 @@ ls -le test
|
|||
...
|
||||
</dict>
|
||||
```
|
||||
CLIからリソースの署名を計算することが可能です。以下のコマンドを使用します:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64
|
||||
```
|
||||
## DMGのマウント
|
||||
|
||||
ユーザーは、既存のフォルダの上にカスタムDMGを作成してマウントすることができます。以下は、カスタムコンテンツを含むカスタムDMGパッケージを作成する方法です:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```overflow="wrap"
|
||||
```
|
||||
```bash
|
||||
# Create the volume
|
||||
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
|
||||
|
@ -249,9 +256,9 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? HackTricksであなたの**企業を宣伝**したいですか?または、**PEASSの最新バージョンやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **および** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue