Saltar a contenido

Hodei-Shield Agent: guía beta para Windows

Instala la versión 2.20.0 (Windows requiere 2.13.0 o posterior) en Windows 10/11 o Server 2016 y posteriores, x64. Usa Windows PowerShell 5.1 como Administrador. Necesitas HTTPS a la URL de tu plataforma y a hs-agent-releases.s3.gra.io.cloud.ovh.net, un token de inscripción (sirve una vez; lo crea en la consola el administrador de tu organización o el de tu MSSP), un id de agente (letras, dígitos, . _ : -; será el nombre permanente de la máquina), la URL de la plataforma (https://…) y OpenSSL 3 (Git for Windows lo incluye; un Windows limpio no lo trae, ver paso 2). MEASURED (medido): ejecutado en un equipo Windows limpio. Si un paso falla, detente y escribe a info@hodeitek.com. Los informes de error van a Sentry por defecto: para desactivarlos, crea la marca justo después de instalar el .msi (final de esta guía).

1. Descarga

MEASURED (con una versión publicada anterior en $V). Solo desde el almacén de versiones, nunca desde un enlace de correo o chat.

$V = '<versión>'
$B = 'https://hs-agent-releases.s3.gra.io.cloud.ovh.net'
$file = "hodei-shield-$V-x86_64.msi"
New-Item -ItemType Directory hodei-install | Out-Null; cd hodei-install
foreach ($n in $file, 'SHA256SUMS', 'SHA256SUMS.sig') { Invoke-WebRequest "$B/agent/$V/$n" -OutFile $n }

Antes de ejecutar nada, comprueba que la descarga es auténtica: verificar una versión del agente y verificar la descarga.

2. Verificar e instalar

El .msi lleva firma Authenticode (editor Hodeitek S.L.) y SHA256SUMS.sig es la firma de versión (Ed25519) sobre SHA256SUMS. Guarda la clave de versión (página independiente; su huella, no el checksum del paquete (el paquete se comprueba con SHA256SUMS), es el SHA-256 de sus 32 bytes crudos: 8b730d2fcbd90e2656bd9b3f265638f1e8e8ac2379d48b0636feb5efe5a88f07):

@'
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAEUqKd+ot7BESwk+vf6EVBKudMi6F6jmY3dJeHXfCWkQ=
-----END PUBLIC KEY-----
'@ | Set-Content -Encoding ascii hodei-shield-release.pub.pem
Pega el bloque entero de una vez en una consola PowerShell (no línea a línea ni en el ISE); solo instala si todas las comprobaciones pasan. MEASURED: las comprobaciones, el rechazo de ficheros alterados y una instalación correcta del conjunto firmado 2.13.0.
& { $ErrorActionPreference = 'Stop'
  if (-not (Test-Path -LiteralPath $file)) { throw "$file is not in this folder" }
  $auth = Get-AuthenticodeSignature .\$file
  $auth | Format-List Status, SignerCertificate, TimeStamperCertificate
  if ($auth.Status -ne 'Valid' -or $auth.SignerCertificate.Subject -notmatch 'CN=Hodeitek S\.L\.') { throw 'Authenticode: not Valid or not signed by Hodeitek S.L.' }
  $ssl = 'C:\Program Files\Git\usr\bin\openssl.exe'
  if (-not (Test-Path -LiteralPath $ssl)) { throw "OpenSSL 3 not found at $ssl" }
  if (-not (Test-Path -LiteralPath hodei-shield-release.pub.pem)) { throw 'hodei-shield-release.pub.pem is missing: write it first' }
  & $ssl version
  & $ssl base64 -d -A -in SHA256SUMS.sig -out SHA256SUMS.sig.raw
  if ($LASTEXITCODE -ne 0) { throw 'SHA256SUMS.sig is not valid base64' }
  (Get-Item SHA256SUMS.sig.raw).Length
  & $ssl pkeyutl -verify -rawin -pubin -inkey hodei-shield-release.pub.pem -sigfile SHA256SUMS.sig.raw -in SHA256SUMS
  if ($LASTEXITCODE -ne 0) { throw 'Signature Verification Failure: do not install' }
  $want = ((Get-Content SHA256SUMS | Where-Object { $_ -match ('  ' + [regex]::Escape($file) + '$') }) -split '\s+')[0]
  if ($file -notmatch '\.msi$' -or -not $want) { throw "$file is not an .msi listed in SHA256SUMS" }
  if ((Get-FileHash $file -Algorithm SHA256).Hash -ieq $want) { 'OK' } else { throw 'checksum mismatch: do not install' }
  $p = Start-Process msiexec.exe -ArgumentList '/i', "`"$PWD\$file`"", '/qn', '/l*v', "`"$PWD\install.log`"" -Wait -PassThru
  if ($p.ExitCode -ne 0) { throw "msiexec exit $($p.ExitCode): see install.log" }
}

¿No hay OpenSSL en este equipo? Un Windows recién instalado no lo trae. Instala Git for Windows (incluye OpenSSL 3 en esa ruta) o haz esta comprobación de firma en otro equipo que tenga OpenSSL 3, con los mismos tres ficheros. La firma Authenticode del instalador se comprueba aparte (Get-AuthenticodeSignature debe decir Valid, firmante Hodeitek S.L.): esa no te la saltes.

Debes ver 64, Signature Verified Successfully, OK. Nunca ejecutes un msiexec suelto ni pongas el token en el instalador. El servicio espera hasta que te inscribas.

3. Configurar e inscribir

MEASURED. El token se teclea en un aviso y se guarda en un fichero solo para administradores.

@'
platform_url = "https://app.hodeishield.com"
state_dir = 'C:\ProgramData\Hodei-Shield\state'
'@ | Set-Content -Encoding ascii 'C:\Program Files\Hodei-Shield\Agent\hodei-shield.toml'
$ErrorActionPreference = 'Stop'
New-Item -ItemType Directory C:\ProgramData\Hodei-Shield\token -ErrorAction Stop | Out-Null
icacls C:\ProgramData\Hodei-Shield\token /inheritance:r /grant:r '*S-1-5-32-544:(OI)(CI)F' '*S-1-5-18:(OI)(CI)F'
if ($LASTEXITCODE -ne 0) { throw 'icacls failed' }
$secure = Read-Host -AsSecureString 'Enrollment token for THIS machine'
[Net.NetworkCredential]::new('', $secure).Password | Set-Content -NoNewline -Encoding ascii C:\ProgramData\Hodei-Shield\token\enroll.token
$secure.Dispose()
cd 'C:\Program Files\Hodei-Shield\Agent'
try {
Get-Content -Raw C:\ProgramData\Hodei-Shield\token\enroll.token | & '.\hodei-shield.exe' enroll --token-stdin --agent-id '<el id que anotaste para ESTA máquina>'
} finally { Remove-Item -Recurse -Force C:\ProgramData\Hodei-Shield\token }
Restart-Service hodei-shield
Si va bien, imprime esto (también salen unas líneas de registro JSON como secret store ACL measured and ACCEPTED y enrolled as a signing producer; los ids son de ejemplo):
enrolled: producer=endpoint_agent:<your-agent-id> public_key_id=<uuid> tenant_id=<uuid>
self-update: after checking these against the console, run from an elevated prompt (Run as administrator) in the agent's install folder (<Program Files>\Hodei-Shield\Agent):
  hodei-shield.exe pin-update-identity --tenant <uuid> --producer "endpoint_agent:<your-agent-id>" --public-key-id <uuid>
If the agent service is stopped, start it: Start-Service hodei-shield. If it is running and was waiting for this enrollment, it will pick it up within 5 minutes; to pick it up now: Restart-Service hodei-shield
Comprueba que el tenant_id y el id del agente coinciden con lo que muestra la consola y ejecuta la línea pin-update-identity que imprime, tal cual, desde una consola elevada en C:\Program Files\Hodei-Shield\Agent. Registra qué inquilino e identidad pueden autorizar las futuras actualizaciones de este agente; no cambia nada más. Después, Restart-Service hodei-shield para que empiece a informar ya. El primer envío puede tardar varios minutos en Windows.

Si falla, no reutilices el token: pide uno nuevo. Error de certificado o TLS: no añadas ningún certificado ni desactives comprobaciones; el agente solo confía en C:\ProgramData\Hodei-Shield\state\platform-ca.pem. Envía la salida de hodei-shield.exe diagnose a tu administrador. MEASURED (Windows 11, 2026-10-28): una instalación silenciosa sale con 1603 y Error 1925 en install.log si no ejecutas como Administrador; no se instala nada (no medido en Server). Otros fallos: resolución de problemas.

4. Comprobar en la consola

MEASURED. Running y self-test con salida 0 (imprime líneas INFO):

Get-Service hodei-shield; & 'C:\Program Files\Hodei-Shield\Agent\hodei-shield.exe' self-test
La máquina aparece en Endpoints de la consola tras su primer ciclo.

Aviso esperado: las versiones estables de macOS y Windows no se actualizan solas. Aproximadamente una vez por hora el registro muestra una línea WARN update poll/apply did not succeed; continuing on current version con el motivo self-update is not supported on this OS by this release. Es lo esperado y no indica un problema: se actualiza instalando el paquete nuevo. (Una versión posterior lo registra una sola vez, como información.)

Controles en «Error» en esta beta: algunos controles pueden aparecer como «Error» en sistemas cuyo idioma no es el inglés, o porque el agente se ejecuta sin permisos de administrador. No significa que el control esté fallando: el agente no pudo leerlo con fiabilidad y no lo cuenta como cumplido. La próxima versión beta lo corrige.

Problema conocido (OpenSSH Server en Windows): si tu servicio sshd arranca con un fichero de configuración distinto del predeterminado (-f <ruta> en la línea de comandos del servicio) en un Windows cuyo idioma de visualización no es el inglés, los controles de SSH pueden evaluarse contra C:\ProgramData\ssh\sshd_config en lugar de tu fichero. La configuración predeterminada no se ve afectada. Se corrige en la próxima versión; mientras tanto, avísanos si usas -f.

5. Actualizar a mano

No te inscribas de nuevo. La versión estable 2.20.0 no aplica sola las actualizaciones de Windows: actualiza a mano con el .msi nuevo, sin token nuevo. (Las compilaciones del canal beta pueden actualizarse solas, solo si la política firmada de la consola aprueba el digest del MSI nuevo y un administrador ha fijado una vez la identidad de actualización; si no, identity_unpinned; MEASURED el 2026-10-27 por Hodeitek en Windows 11, 2.17.0-beta.1 a beta.3.) MEASURED (2.12.3 a 2.12.4: configuración y estado conservados, siguiente envío aceptado). Copia la configuración, descarga el nuevo .msi (paso 1) y ejecuta de nuevo el bloque del paso 2 con el nuevo $V y $file. El instalador rechaza versiones anteriores (salida 1603).

Copy-Item 'C:\Program Files\Hodei-Shield\Agent\hodei-shield.toml' "$HOME\hodei-shield.toml.bak"
Después, Get-Service hodei-shield debe decir Running; en la carpeta del agente, version imprime la versión nueva y self-test sale con 0. Si falta hodei-shield.toml, restaura la copia y Restart-Service hodei-shield.

6. Desinstalación

MEASURED. Antes, pide a tu administrador que revoque la máquina (consola: Endpoints, el endpoint, Revoke enrolment). Usa la ruta absoluta del .msi que guardaste. Queda: C:\ProgramData\Hodei-Shield\state (clave privada, cola, CA), la carpeta de registros C:\Program Files\Hodei-Shield\Agent\logs (MEASURED, Windows 11 y Server 2022, 2026-10-28), Agent\hodei-shield.toml solo si lo creaste, telemetry-off y %APPDATA%\Hodei-Shield por usuario.

$msi = (Resolve-Path '<carpeta donde lo descargaste>\hodei-shield-<version>-x86_64.msi').Path
(Start-Process msiexec.exe -ArgumentList '/x', "`"$msi`"", '/qn' -Wait -PassThru).ExitCode
Purga (MEASURED, Windows 11, 2026-10-29; irreversible, solo tras revocar). La carpeta de estado está protegida para que solo la abran Administradores, SYSTEM y la cuenta del servicio, y una carpeta protegida puede negar el borrado incluso a un PowerShell elevado. La guarda se detiene si una carpeta fue sustituida por un enlace:
foreach ($p in 'C:\ProgramData\Hodei-Shield', 'C:\Program Files\Hodei-Shield') {
  if (Test-Path -LiteralPath $p) {
    if ((Get-Item -LiteralPath $p -Force).Attributes -band [IO.FileAttributes]::ReparsePoint) { throw "$p is a link: stop and ask for help" }
    Remove-Item -LiteralPath $p -Recurse -Force
  }
}
Remove-Item -LiteralPath "$env:APPDATA\Hodei-Shield" -Recurse -Force -ErrorAction SilentlyContinue   # por usuario
Privacidad y ayuda. Los informes de error (solo fallos, sin datos personales) van a Sentry; desactívalos con New-Item -ItemType File -Force "$env:ProgramData\Hodei-Shield\telemetry-off" | Out-Null; Restart-Service hodei-shield (MEASURED). Ayuda: info@hodeitek.com o el botón Beta de la consola.