La documentación cerraba el tema en "imposible". Es impreciso: la imitación derrota comprobaciones de propiedades pero no de firma. - Nueva subsección en capa_identidad.md que mapea cada veredicto de Play Integrity a imitable/no imitable y explica por qué: los niveles software se falsean, el de hardware no, y los keyboxes filtrados caducan porque Google los revoca. Redroid parte peor que un móvil rooteado por no tener TEE - README: el cierre remite al matiz por niveles en vez de decir "no puede tenerla" a secas - fuentes.md: Play Integrity, Key Attestation, Verified Boot y el paper de extracción de claves del Keymaster de Samsung
116 lines
4.5 KiB
Markdown
116 lines
4.5 KiB
Markdown
# Rebelión en la granja
|
||
|
||
Laboratorio de dispositivos Android sobre un chasis de blades Dell PowerEdge M1000e, más la
|
||
investigación sobre granjas de dispositivos que llevó a montarlo así.
|
||
|
||
Sin móviles físicos: cada dispositivo es un contenedor
|
||
[redroid](https://github.com/remote-android/redroid-doc) — Android real sobre el kernel del blade.
|
||
|
||
## Arquitectura
|
||
|
||

|
||
|
||
```
|
||
Dell PowerEdge M1000e — 16 blades (8 arriba + 8 abajo)
|
||
│
|
||
├── blade-01 ................ coordinador: adb + fleet
|
||
│
|
||
└── blade-02 .. blade-16 .... nodos de carga
|
||
└── Debian 12
|
||
└── Docker
|
||
└── N × redroid
|
||
|
||
8 GB/blade → 3 instancias → 45 Android
|
||
32 GB/blade → 14 instancias → 210 Android
|
||
```
|
||
|
||
Debian va directo sobre el hierro. Sin Proxmox, sin VMs, sin LXC anidado: con 8 GB por blade cada
|
||
capa de hipervisor se come una instancia entera.
|
||
|
||
## Hardware
|
||
|
||

|
||
|
||
Datos del manual del propietario del M1000e (Dell, modelo BMX01, rev. A06, oct. 2019). Dos
|
||
exigencias del manual condicionan el proyecto entero: las seis fuentes y los nueve ventiladores son
|
||
obligatorios, se usen 3 blades o 16. No se puede arrancar el chasis a medias.
|
||
|
||
Detalle en [02_device_lab/hardware_m1000e.md](02_device_lab/hardware_m1000e.md).
|
||
|
||
## Software
|
||
|
||

|
||
|
||
| Capa | Tecnología |
|
||
|---|---|
|
||
| SO | Debian 12 bookworm |
|
||
| Kernel | `binder_linux` con devices `binder,hwbinder,vndbinder` (Debian no trae binderfs) |
|
||
| Contenedores | Docker CE + Compose v2 |
|
||
| Android | redroid 13 |
|
||
| Orquestación | Ansible, solo `ansible.builtin` |
|
||
| Control | adb sobre TCP + `fleet` |
|
||
| Red | `portmap` (NAT) o `macvlan` (IP real de LAN por Fabric A) |
|
||
|
||
## Red
|
||
|
||

|
||
|
||
## Números
|
||
|
||
| | |
|
||
|---|---|
|
||
| Capacidad | 45 Android; 210 con la RAM ampliada |
|
||
| Chasis | 10U · 44,0 × 44,7 × 75,5 cm · 200,5 kg cargado |
|
||
| Consumo | 2,6–3,6 kW · 70–85 dB · 6 fuentes C20 · 9 ventiladores |
|
||
| Térmico | 10–35 °C en continuo |
|
||
| Coste 24/7 | ~360 €/mes |
|
||
| Coste por ventanas de 4 h/día | ~59 €/mes |
|
||
| Coste por dispositivo | 8,0 €/mes; 1,8 €/mes con la RAM ampliada |
|
||
|
||
## Arranque
|
||
|
||
```bash
|
||
git clone https://gitea.laenre.net/hacklab/REBELION_EN_LA_GRANJA.git
|
||
cd REBELION_EN_LA_GRANJA/02_device_lab/ansible
|
||
|
||
sudo apt install ansible
|
||
cp inventory/hosts.yml.example inventory/hosts.yml # poner las IPs reales
|
||
|
||
ansible-playbook playbooks/preflight.yml # solo lectura, no toca nada
|
||
ansible-playbook site.yml
|
||
ansible-playbook playbooks/status.yml
|
||
```
|
||
|
||
El preflight va primero. Identifica el modelo de blade leyéndolo del DMI, comprueba si esas CPUs
|
||
sirven para Android x86_64 y calcula cuántas instancias caben.
|
||
|
||
Para probar sin encender el chasis, el inventario incluye un bloque de piloto de un nodo que
|
||
levanta todo el pipeline en un sobremesa.
|
||
|
||
## Contenido
|
||
|
||
| | |
|
||
|---|---|
|
||
| [GUIA.md](GUIA.md) | Estado, qué está verificado y qué no, siguientes pasos |
|
||
| [docs/requisitos.md](docs/requisitos.md) | Eléctrico, físico, red, tiempo. Checklist de bloqueantes |
|
||
| [docs/costes.md](docs/costes.md) | Consumo y coste por escenario |
|
||
| [docs/seguridad.md](docs/seguridad.md) | 11 hallazgos, uno crítico |
|
||
| [docs/usabilidad.md](docs/usabilidad.md) | Cómo se opera la flota |
|
||
| [02_device_lab/ansible/](02_device_lab/ansible/) | La automatización |
|
||
| [02_device_lab/hardware_m1000e.md](02_device_lab/hardware_m1000e.md) | El chasis según el manual |
|
||
| [01_investigacion/](01_investigacion/) | Mercado, stack, capa de identidad, marco legal |
|
||
|
||
## Por qué esto no sirve para plataformas sociales
|
||
|
||
La atestación de dispositivo dejó de ser estadística y pasó a ser criptográfica. Un Android
|
||
certificado lleva una clave privada grabada en el TEE de fábrica, con cadena de certificados hasta
|
||
una raíz de Google. Un contenedor no la tiene, y el nivel de integridad respaldado por hardware
|
||
verifica una firma, no una apariencia: no hay imitación que valga. Los niveles que solo inspeccionan
|
||
propiedades sí se falsean por software, pero con recursos que caducan y nunca a escala — el matiz
|
||
por niveles está en [01_investigacion/capa_identidad.md](01_investigacion/capa_identidad.md).
|
||
|
||
Por eso el mercado vende teléfonos físicos de 400 $ en lugar de software para racks, y por eso este
|
||
laboratorio sirve para probar apps propias y no para otra cosa.
|
||
|
||
Este repositorio no contiene operativa de alta masiva de cuentas. Contexto legal en
|
||
[01_investigacion/legal_ue.md](01_investigacion/legal_ue.md).
|