
アプリケーションプロトコルを介した任意の通信のためのオープンソースのスイスアーミーナイフ
![]() |
|---|
| Mística ロゴ 作成 JoelGMSec |
Mística は、アプリケーション層プロトコルのフィールドにデータを埋め込み、任意の通信のための双方向チャネルを確立することを目的としたツールです。 現在、HTTP、HTTPS、DNS、ICMP プロトコルへのカプセル化が実装されていますが、近い将来さらに多くのプロトコルが導入される予定です。
Mística は、SOTP (Simple Overlay Transport Protocol) と呼ばれるカスタムトランスポートプロトコルを中心に構築されたモジュラーデザインを採用しています。データは暗号化され、チャンク化されて SOTP パケットに格納されます。SOTP パケットはエンコードされ、アプリケーションプロトコルの目的のフィールドに埋め込まれて、もう一方の端に送信されます。
SOTP レイヤーの目標は、最小限のオーバーヘッドで汎用的なバイナリトランスポートプロトコルを提供することです。SOTP パケットは、正当なアプリケーションプロトコルに簡単に隠蔽または埋め込むことができます。また、SOTP はパケットが相手に確実に届くようにし、RC4 を使用してデータを暗号化し(将来変更される可能性があります)、ポーリングメカニズムを使用して情報が双方向に透過的に流れるようにします。
モジュールはさまざまな目的で SOTP レイヤーと対話します。
ラッパーモジュールとオーバーレイモジュールは連携してカスタムアプリケーションを構築します。例: DNS 経由の入力リダイレクションや HTTP 経由のリモートポートフォワーディング。
Mística のモジュラーデザインにより、新しいモジュールの開発が容易になります。また、ユーザーは既存のモジュールを簡単にフォークして、カスタムフィールドやエンコーディングを使用したり、オーバーレイモジュールの動作を変更したりできます。
主なソフトウェアは2つあります。
ms.py): 目的のアプリケーション層プロトコル(HTTP、HTTPS、DNS、ICMP...)のサーバーとして機能するモジュールを使用します。また、ms.py の単一インスタンスで複数のサーバー、ラッパー、オーバーレイを同時に実行できるように設計されていますが、この機能はまだ完全には実装されていません。mc.py): 目的のアプリケーション層プロトコル(HTTP、HTTPS、DNS、ICMP...)のクライアントとして機能するモジュールを使用します。同時に1つのオーバーレイと1つのラッパーのみを使用できます。以下の プレイリスト で Mística のデモをご覧いただけます。
このプロジェクトの依存関係は非常に少ないです。現在:
dnslib が必要です。```
python3.7 -m pip install pip --user
pip3.7 install dnslib --userPythonをシステムにインストールしたくない場合は、以下のポータブル版のいずれかを使用できます:
- https://www.anaconda.com/distribution/#download-section (Windows、Linux、macOS対応)
- https://github.com/winpython/winpython/releases/tag/2.1.20190928 (Windowsのみ)
## 現在のモジュール
オーバーレイモジュール:
- `io`: 標準入力から読み取り、SOTP接続経由で送信。SOTP接続から読み取り、標準出力に出力
- `shell`: SOTP接続経由で受信したコマンドを実行し、出力を返す。ioモジュールと互換性あり
- `tcpconnect`: TCPポートに接続。ソケットから読み取り、SOTP接続経由で送信。SOTP接続から読み取り、ソケット経由で送信
- `tcplisten`: TCPポートにバインド。ソケットから読み取り、SOTP接続経由で送信。SOTP接続から読み取り、ソケット経由で送信
ラップモジュール:
- `dns`: 異なる方式でDNSクエリ/レスポンスのデータをエンコード/デコード
- `http`: 異なる方式でHTTPまたはHTTPSリクエスト/レスポンスのデータをエンコード/デコード
- `icmp`: ICMPエコーリクエスト/レスポンスのデータ部でデータをエンコード/デコード
## 使用方法
`ms.py`: Mística サーバー
ヘルプメッセージは以下のようになります:```txt
usage: ms.py [-h] [-k KEY] [-l LIST] [-m MODULES] [-w WRAPPER_ARGS]
[-o OVERLAY_ARGS] [-s WRAP_SERVER_ARGS]
Mistica server. Anything is a tunnel if you're brave enough. Run without
parameters to launch multi-handler mode.
optional arguments:
-h, --help show this help message and exit
-k KEY, --key KEY RC4 key used to encrypt the comunications
-l LIST, --list LIST Lists modules or parameters. Options are: all,
overlays, wrappers, <overlay name>, <wrapper name>
-m MODULES, --modules MODULES
Module pair in single-handler mode. format:
'overlay:wrapper'
-w WRAPPER_ARGS, --wrapper-args WRAPPER_ARGS
args for the selected overlay module (Single-handler
mode)
-o OVERLAY_ARGS, --overlay-args OVERLAY_ARGS
args for the selected wrapper module (Single-handler
mode)
-s WRAP_SERVER_ARGS, --wrap-server-args WRAP_SERVER_ARGS
args for the selected wrap server (Single-handler
mode)
-v, --verbose Level of verbosity in logger (no -v None, -v Low, -vv
Medium, -vvv High)
Mística Serverには2つの主要なモードがあります:
ms.pyがパラメータ付きで起動されると、1つのオーバーレイモジュールが1つのラッパーモジュールと対話できるようになります。ms.pyがパラメータなしで実行されると、ユーザーはインタラクティブコンソールに入り、複数のオーバーレイモジュールとラッパーモジュールを起動できます。これらのモジュールは、いくつかの制限付きで相互に対話できます。mc.py: Místicaクライアント
ヘルプメッセージは次のようになります:```txt usage: mc.py [-h] [-k KEY] [-l LIST] [-m MODULES] [-w WRAPPER_ARGS] [-o OVERLAY_ARGS]
Mistica client.
optional arguments: -h, --help show this help message and exit -k KEY, --key KEY RC4 key used to encrypt the comunications -l LIST, --list LIST Lists modules or parameters. Options are: all, overlays, wrappers, , -m MODULES, --modules MODULES Module pair. Format: 'overlay:wrapper' -w WRAPPER_ARGS, --wrapper-args WRAPPER_ARGS args for the selected overlay module -o OVERLAY_ARGS, --overlay-args OVERLAY_ARGS args for the selected wrapper module -v, --verbose Level of verbosity in logger (no -v None, -v Low, -vv Medium, -vvv High)
### パラメータ
- `-l, --list` は、`all` モジュールを一覧表示するか、1つのタイプ(`overlays` または `wrappers`)のみを一覧表示するか、`-o`、`-w`、`-s` を通じて特定のモジュールが受け入れ可能なパラメータを一覧表示するために使用されます。
- `-k, --key` は、オーバーレイ通信を暗号化するために使用する鍵を指定するために使用します。これはクライアントとサーバーで同じである必要があり、現在は必須です。将来的に秘密分散スキームが実装されれば変更される可能性があります。
- `-m, --modules` は、使用するモジュールペアを指定するために使用します。次の形式を使用する必要があります:**overlay_module** + **:** + **wrap_module**。このパラメータも必須です。
- `-w, --wrapper-args` を使用すると、ラップモジュールの特定の設定を指定できます。
- `-o, --overlay-args` を使用すると、オーバーレイモジュールの特定の設定を指定できます。
- `-s, --wrap-server-args` は `ms.py` にのみ存在します。これにより、ラップサーバーの特定の設定を指定できます。各ラップモジュールはラップサーバーに依存しており、両方の設定を調整できます。
## 使用例と高度な使い方
> モジュールの受け入れ可能なパラメータはすべて、`-l <module_name>`(例:`./ms.py -l dns`)と入力することで確認できることを忘れないでください。また、通信を保護するために、長く複雑な鍵を使用することを忘れないでください!
### HTTP
HTTPカプセル化のさまざまな方法を説明するために、すべての例でIOリダイレクションオーバーレイモジュール(`io`)を使用します。