REBELION_EN_LA_GRANJA/README.md
s1to d9919caafb Matizar la atestación: imitable por niveles, no a escala
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
2026-08-08 20:15:50 +02:00

116 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
![Arquitectura de la granja](assets/arquitectura.svg)
```
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
![Dell PowerEdge M1000e](assets/chasis.svg)
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
![Stack de software](assets/stack-software.svg)
| 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
![Los dos modos de red](assets/red-modos.svg)
## 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,63,6 kW · 7085 dB · 6 fuentes C20 · 9 ventiladores |
| Térmico | 1035 °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).