
보안 교육 플랫폼에서 모바일 구성 요소의 통합을 가능하게 하는 컨테이너 기반 프레임워크
Dockerized Android는 Docker 내에서 Android 에뮬레이터를 실행하고 브라우저를 통해 제어할 수 있는 컨테이너 기반 프레임워크입니다. 이 프로젝트는 모바일 보안 구성 요소를 Cyber Range에 통합하기 위한 시작점을 제공하기 위해 개발되었지만, 어떤 목적으로든 사용할 수 있습니다. 다만 개발 및 테스트 목적으로는 docker-android 프로젝트를 권장합니다.
위의 간략한 설명에서 언급했듯이 이 프로젝트는 Cyber Range에 모바일 보안 구성 요소를 도입하기 위한 시작점을 제공하기 위해 만들어졌습니다. 이러한 이유로 이미 개발된 기능과 앞으로 추가될 기능은 사용자가 실제 시뮬레이션(예: 보안 훈련)을 더 쉽게 설정할 수 있도록 도와줄 것입니다. 이 README는 상당히 길기 때문에 "실행 방법" 부분으로 바로 건너뛰고 싶을 수도 있습니다.
현재 다음 기능을 사용할 수 있습니다:
| 초기 설정 | 인스턴스 관리자 설정 | 수동 설정 |
|---|---|---|
| initial-setup | instance-manager-setup | manual-setup |
| 도구 상자 기능 | 인스턴스 전환 |
|---|---|
| toolbox | instance-switch |
이 프로젝트는 세 가지 주요 부분으로 구성됩니다:
핵심 구성 요소는 Docker 컨테이너 내에서 Android 구성 요소(에뮬레이트 또는 실제)를 실행하는 데 필요한 모든 프로세스를 실행하고 외부에 일부 기능을 노출하는 구성 요소입니다. 여러 프로세스를 관리하여 기능 세트를 제공해야 하기 때문에 의심할 여지 없이 가장 복잡한 부분입니다. 위 그림은 장기 실행 프로세스, 시작 프로세스 및 유틸 스크립트 간의 명확한 구분을 보여줍니다. 또한 이 그림에는 6개의 장기 실행 프로세스가 있다고 표시되어 있는데, 이는 핵심 구성 요소에 대한 일반적인 개요를 제공하기 위해 추가된 약간의 부정확성입니다. 실제로는 핵심 구성 요소에는 두 가지 변형이 있습니다:
주요 아키텍처 차이점은 장기 실행 프로세스와 관련이 있습니다. 에뮬레이터용 Core는 장기 실행 emulator 프로세스를 실행하는 반면, 실제 장치용 Core는 물리적 장치를 표시하고 제어하기 위해 장기 실행 scrcpy 프로세스를 실행합니다. 다른 부분은 Core 구성 요소의 유형에 따라 다른 동작을 따르는 일부 로직을 제외하면 상당히 유사합니다.
UI 구성 요소는 백엔드가 노출하는 모든 기능을 간편하게 사용할 수 있는 방법을 제공하며 장치를 표시하고 제어하는 기능도 추가합니다. 사용자는 Core 구성 요소의 주소와 해당 포트(백엔드가 노출하는 포트와 websockify가 노출하는 포트)를 수동으로 입력해야 합니다. 이 수동 설정을 통해 기본 포트(백엔드의 경우 4242, websockify의 경우 6080)를 변경할 수 있습니다.
인스턴스 관리자 구성 요소는 단일 REST API를 통해 실행 중인 Core에 대한 모든 정보(주소 및 포트)를 제공하는 역할을 합니다. 이는 docker-compose에 있는 Core에 대한 모든 정보를 포함하는 간단한 JSON 구성 파일을 작성하여 수행되며, 하나씩 수동으로 추가하는 번거로운 작업을 피할 수 있습니다. JSON 구성 파일의 구조는 다음과 같습니다:
{
"instances": [
{
"name": [장치를 식별하는 일반 문자열],
"address": [구성 요소의 주소],
"core_port": [백엔드의 포트],
"vnc_port": [VNC의 포트]
}
]
}
| Android 버전 | API | 이미지 |
|---|---|---|
| 5.0.1 | 21 | secsi/dockerized-android-core-emulator-5.0.1 |
| 5.1.1 | 22 | secsi/dockerized-android-core-emulator-5.1.1 |
| 6.0 | 23 | secsi/dockerized-android-core-emulator-6.0 |
| 7.0 | 24 | secsi/dockerized-android-core-emulator-7.0 |
| 7.1.1 | 25 | secsi/dockerized-android-core-emulator-7.1.1 |
| 8.0 | 26 | secsi/dockerized-android-core-emulator-8.0 |
| 8.1 | 27 | secsi/dockerized-android-core-emulator-8.1 |
| 9.0 | 28 | secsi/dockerized-android-core-emulator-9.0 |
| 10.0 | 29 | secsi/dockerized-android-core-emulator-10.0 |
| 11.0 | 30 | secsi/dockerized-android-core-emulator-11.0 |
| - | - | secsi/dockerized-android-core-bare |
| - | - | secsi/docker-android-core-real-device |
secsi/dockerized-android-core-bare는 시스템 이미지를 다운로드하지 않으며, 모든 SDK 폴더가 있는 호스트 머신의 폴더를 마운트할 수 있습니다.
플랫폼을 실행하는 방법에 대한 전체 예제를 보려면 examples 디렉토리의 docker-compose를 참조하십시오. 이 디렉토리에는 세 가지 다른 구성이 포함되어 있습니다:
작동 방식을 이해한 후에는 필요에 맞게 변경할 수 있습니다.
머신에 Docker와 Docker Compose가 설치되어 있어야 합니다.
이 플랫폼은 호스트 OS에 따라 다르게 동작합니다. 다음 표는 현재 호환성을 요약한 것입니다:
| Linux | Windows | OS X | |
|---|---|---|---|
| 에뮬레이터용 Core | 완벽 호환 | 아직 지원되지 않음 | 지원되지 않음 |
| 실제 장치용 Core | 완벽 호환 | 완벽 호환 | 우회 방법 |
Windows 및 OS X의 경우 중첩 가상화를 지원하는 Linux VM을 사용해야 합니다.
Linux 머신이 중첩 가상화를 지원하는지 확인하려면 다음 명령을 실행할 수 있습니다:
sudo apt install cpu-checker
kvm-ok
OS X에서 실제 장치용 Core를 사용하려면:
무선 연결을 위해 Google은 간단한 튜토리얼을 제공합니다. 컨테이너 내에서 호스트 adb에 연결하려면 컨테이너에 수동으로 들어가서 다음을 실행해야 합니다:
adb -H host.docker.internal devices
프레임워크를 시작하는 명령은 다음과 같습니다:
cp ./examples/docker-compose-core.yml docker-compose.yml
docker-compose up
더 간단하게 다음 명령을 사용할 수도 있습니다:
docker-compose -f ./examples/docker-compose-core.yml up
이제 브라우저에서 http://127.0.0.1:8080 주소로 이동하여 현재 구성을 설정하기만 하면 됩니다:
Instance Manager를 사용하지 않은 경우 수동 설정을 클릭하고 다음 정보를 입력합니다:
Instance Manager를 사용하는 경우 "Instance Manager"를 클릭하고 IP 주소와 포트 번호(예: 193.21.1.100:7373)를 입력하기만 하면 됩니다.
이제 브라우저 내에서 프레임워크를 사용할 수 있습니다.
utils 폴더에 있는 스크립트를 통해 이미지를 직접 빌드할 수도 있습니다.
ENV 변수를 통해 일부 기능을 구성하여 설정을 사용자 지정할 수 있습니다. 다음 표는 모든 변수 목록을 제공합니다: