Validación estática
Cómo se clasifica cada fichero de reglas antes de medirlo.
Estados
rulecheck.py asigna a cada fichero examinado uno de cuatro estados finales: VALIDATED, QUARANTINED, REJECTED o DEPRECATED. Solo VALIDATED puede publicarse.
Dibujando el diagrama…
flowchart TD
F["rule file"]:::src --> H{"hard criteria?<br/>binary, empty, no rules,<br/>over 1 MB, rejected before"}:::val
H -->|yes| REJ["REJECTED"]:::qua
H -->|no| T{"truncated, corrupt,<br/>compile error?"}:::val
T -->|yes| QUA["QUARANTINED"]:::qua
T -->|no| J{"judgement findings?<br/>blocked module, costly regex,<br/>filesize loop, licence changed,<br/>needs a non validated file"}:::val
J -->|yes| QUA
J -->|no| DEP{"deprecated in its metadata?"}:::val
DEP -->|yes| DE["DEPRECATED"]:::qua
DEP -->|no| OK["VALIDATED"]:::sec
classDef src fill:#cfe3ff,stroke:#2f6df0,color:#0b1b33
classDef val fill:#ffe9b8,stroke:#b8860b,color:#2b1d00
classDef sec fill:#cdeedd,stroke:#1b6e3c,color:#08210f
classDef pub fill:#e4d7ff,stroke:#6a3fd1,color:#1b0b3b
classDef qua fill:#ffd4cc,stroke:#c0392b,color:#33100b
classDef gate fill:#ffffff,stroke:#111111,stroke-width:3px,color:#111111Descripción del diagrama
Cada fichero se lee como texto y se compila. Los criterios duros (binario, vacío, sin reglas, demasiado grande, mismo contenido rechazado antes) lo rechazan. Truncamiento, corrupción, error de compilación, módulo bloqueado o desconocido, expresión regular costosa, bucle sobre todo el fichero, licencia cambiada o dependencia no validada lo envían a cuarentena. Un fichero marcado como obsoleto en sus metadatos queda como obsoleto. El resto se valida.
Código Mermaid
flowchart TD
F["rule file"]:::src --> H{"hard criteria?<br/>binary, empty, no rules,<br/>over 1 MB, rejected before"}:::val
H -->|yes| REJ["REJECTED"]:::qua
H -->|no| T{"truncated, corrupt,<br/>compile error?"}:::val
T -->|yes| QUA["QUARANTINED"]:::qua
T -->|no| J{"judgement findings?<br/>blocked module, costly regex,<br/>filesize loop, licence changed,<br/>needs a non validated file"}:::val
J -->|yes| QUA
J -->|no| DEP{"deprecated in its metadata?"}:::val
DEP -->|yes| DE["DEPRECATED"]:::qua
DEP -->|no| OK["VALIDATED"]:::sec
classDef src fill:#cfe3ff,stroke:#2f6df0,color:#0b1b33
classDef val fill:#ffe9b8,stroke:#b8860b,color:#2b1d00
classDef sec fill:#cdeedd,stroke:#1b6e3c,color:#08210f
classDef pub fill:#e4d7ff,stroke:#6a3fd1,color:#1b0b3b
classDef qua fill:#ffd4cc,stroke:#c0392b,color:#33100b
classDef gate fill:#ffffff,stroke:#111111,stroke-width:3px,color:#111111Criterios
| Resultado | Motivo |
|---|---|
| REJECTED | Criterios duros: binario, vacío, sin reglas, más de 1 MB o contenido ya rechazado antes. |
| QUARANTINED | Truncado, corrupto, error de compilación, módulo bloqueado (cuckoo, magic, androguard) o desconocido, expresión regular costosa, bucle sobre todo el fichero, licencia cambiada o dependencia no validada. |
| DEPRECATED | El fichero se marca como obsoleto en sus propios metadatos. |
| VALIDATED | Ningún criterio anterior se cumple. |
Módulos permitidos: pe, elf, macho, math, hash, dotnet, time, string. El módulo cuckoo necesita un informe de sandbox que MacGuard no genera, por eso no tiene uso en el canal. Los umbrales viven en config/policy.json.
Dependencias entre ficheros
Muchos ficheros usan reglas de otros (include o nombres de regla). El candidato conserva esa relación como depends_on firmado; cada fichero se compila en su propio espacio de nombres con sus dependencias, porque 227 ficheros repiten nombres de regla y un único espacio de nombres no compilaría.
LÍMITE «Validada» no es una evaluación de calidad de detección. No se mide falsos positivos más allá de las pruebas con un corpus benigno y los canarios.