
애플리케이션 프로토콜을 통한 임의의 통신을 위한 오픈소스 만능 도구
![]() |
|---|
| 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를 통한 원격 포트 포워딩.
Mistica의 모듈식 설계는 새로운 모듈 개발을 용이하게 합니다. 또한 사용자는 현재 모듈을 쉽게 포크하여 사용자 정의 필드나 인코딩을 사용하거나 오버레이 모듈의 동작을 수정할 수 있습니다.
두 가지 주요 소프트웨어가 있습니다:
ms.py): 원하는 애플리케이션 계층 프로토콜(HTTP, HTTPS, DNS, ICMP...)의 서버 역할을 하는 모듈을 사용합니다. 또한 여러 서버, 래퍼 및 오버레이를 ms.py 단일 인스턴스로 동시에 실행할 수 있도록 설계되었지만, 이 기능은 아직 완전히 구현되지 않았습니다.mc.py): 원하는 애플리케이션 계층 프로토콜(HTTP, HTTPS, DNS, ICMP...)의 클라이언트 역할을 하는 모듈을 사용합니다. 한 번에 하나의 오버레이와 하나의 래퍼만 사용할 수 있습니다.Mística 데모는 다음 재생 목록에서 확인할 수 있습니다.
이 프로젝트는 의존성이 매우 적습니다. 현재:
dnslib가 필요합니다.```
python3.7 -m pip install pip --user
pip3.7 install dnslib --user시스템에 Python을 설치하고 싶지 않다면, 다음 휴대용 버전 중 하나를 사용할 수 있습니다:
- https://www.anaconda.com/distribution/#download-section (Windows, Linux 및 macOS용)
- https://github.com/winpython/winpython/releases/tag/2.1.20190928 (Windows 전용)
## 현재 모듈
오버레이 모듈:
- `io`: stdin에서 읽어 SOTP 연결을 통해 전송합니다. SOTP 연결에서 읽어 stdout에 출력합니다.
- `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 서버에는 두 가지 주요 모드가 있습니다:
ms.py가 매개변수와 함께 실행되면, 단일 오버레이 모듈이 단일 래퍼 모듈과 상호작용할 수 있습니다.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`), 한 가지 유형만 나열(`overlays` 또는 `wrappers`)하거나 `-o`, `-w` 또는 `-s`를 통해 특정 모듈이 허용하는 매개변수를 나열하는 데 사용됩니다.
- `-k, --key`는 오버레이 통신을 암호화하는 데 사용할 키를 지정합니다. 이 키는 클라이언트와 서버에서 동일해야 하며 현재는 필수입니다. 향후 비밀 공유(secret-sharing) 방식이 구현되면 변경될 수 있습니다.
- `-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`)을 사용하겠습니다.