Guia de Implementação da SES GO - Segurança
0.0.2 - draft Brazil flag

Guia de Implementação da SES GO - Segurança - Local Development build (v0.0.2) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Registrar auditoria

A garantia da rastreabilidade, transparência e conformidade, especialmente em operações envolvendo assinaturas digitais e validação de certificados, exige o registro de eventos de auditoria.

Objetivo

Definir o processo de registro de eventos relevantes para efeito de auditoria.

Atores

Outros atores podem usufruir do presente caso de uso, contudo, abaixo são identificados apenas aqueles no escopo do presente Guia de Implementação.

  • Criar assinatura digital: gera o evento de criação de assinatura digital.
  • Validar assinatura digital: gera evento de validação de assinatura digital.

Eventos auditáveis

  • Criação de assinatura digital.
  • Validação de assinatura digital.
  • Checagem de revogação de certificados (CRL/OCSP).
  • Acesso a registros sensíveis ou dados assinados.
  • Alterações em configurações de segurança.
  • Falhas ou tentativas de acesso não autorizado.

Fluxo principal

  1. Gatilho: ocorre um evento relevante (ex: assinatura, validação, checagem de revogação). Veja seção anterior.

  2. Registro: o sistema gera um registro de auditoria contendo:
    • Identificador do evento
    • Data e hora (timestamp)
    • Identidade do usuário ou sistema responsável
    • Descrição do evento
    • Dados relevantes (ex: ID do documento, resultado da validação, status da revogação)
    • Evidências associadas (ex: resposta OCSP, CRL utilizada)
  3. Armazenamento: o registro é armazenado em repositório seguro, com proteção contra alterações não autorizadas.

  4. Consulta: administradores/auditores podem consultar registros de auditoria conforme permissões e políticas definidas.

  5. Retenção: os registros são mantidos pelo período exigido por normas ou políticas internas.

Fluxos alternativos

  • Falha no registro de auditoria: O sistema deve alertar administradores e, se possível, bloquear operações críticas até a normalização.
  • Tentativa de acesso não autorizado aos registros: O evento é registrado e medidas de segurança são acionadas.

6. Requisitos e Considerações

  • Integridade: Os registros de auditoria devem ser imutáveis e protegidos contra alterações.
  • Confidencialidade: O acesso aos registros deve ser restrito e monitorado.
  • Retenção: Definir período mínimo de retenção conforme legislação aplicável.
  • Evidências: Armazenar evidências de checagem de revogação (CRL/OCSP) para validação futura (LTV).
  • Conformidade: Atender requisitos de normas como ICP-Brasil, LGPD, eIDAS, etc.

Exemplos de registro de auditoria (AuditEvent)

Criação de assinatura digital

{
  "resourceType": "AuditEvent",
  "type": {
    "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
    "code": "sign",
    "display": "Signature"
  },
  "action": "C",
  "recorded": "2024-06-07T14:23:00Z",
  "outcome": "0",
  "outcomeDesc": "SUCESSO",
  "purposeOfEvent": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/ValueSet/v3-PurposeOfUse",
          "code": "HLEGAL"
        }
      ]
    }
  ],
  "agent": [
    {
      "who": {
        "identifier": {
          "system": "urn:oid:1.2.3.4.5.6.7.8.9",
          "value": "estabelecimento-123"
        }
      }
    }
  ],
  "source": {
    "observer": {
      "identifier": {
        "system": "urn:oid:1.2.3.4.5.6.7.8.9",
        "value": "estabelecimento-123"
      }
    }
  },
  "entity": [
    {
      "type": {
        "code": "document"
      },
      "what": {
        "identifier": {
          "system": "urn:uuid",
          "value": "urn:uuid:abcd-1234"
        }
      }
    }
  ],
  "reason": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/ValueSet/v3-PurposeOfUse",
          "code": "HLEGAL"
        }
      ]
    }
  ]
}

Validação de assinatura digital

{
  "resourceType": "AuditEvent",
  "type": {
    "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
    "code": "verify",
    "display": "Verification"
  },
  "action": "E",
  "recorded": "2024-06-07T15:00:00Z",
  "outcome": "0",
  "outcomeDesc": "SUCESSO",
  "purposeOfEvent": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/ValueSet/v3-PurposeOfUse",
          "code": "HLEGAL"
        }
      ]
    }
  ],
  "agent": [
    {
      "who": {
        "identifier": {
          "system": "urn:oid:1.2.3.4.5.6.7.8.9",
          "value": "estabelecimento-456"
        }
      }
    }
  ],
  "source": {
    "observer": {
      "identifier": {
        "system": "urn:oid:1.2.3.4.5.6.7.8.9",
        "value": "estabelecimento-456"
      }
    }
  },
  "entity": [
    {
      "type": {
        "code": "document"
      },
      "what": {
        "identifier": {
          "system": "urn:uuid",
          "value": "urn:uuid:abcd-1234"
        }
      }
    }
  ],
  "identifier": {
    "system": "urn:ses-go",
    "value": "id-logico-5678"
  },
  "reason": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/ValueSet/v3-PurposeOfUse",
          "code": "HLEGAL"
        }
      ]
    }
  ]
}

Checagem de revogação de certificados (CRL/OCSP)

{
  "resourceType": "AuditEvent",
  "type": {
    "system": "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle",
    "code": "verify",
    "display": "Verification"
  },
  "action": "E",
  "recorded": "2024-06-07T15:10:00Z",
  "outcome": "0",
  "outcomeDesc": "SUCESSO",
  "purposeOfEvent": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/ValueSet/v3-PurposeOfUse",
          "code": "HLEGAL"
        }
      ]
    }
  ],
  "agent": [
    {
      "who": {
        "identifier": {
          "system": "urn:oid:1.2.3.4.5.6.7.8.9",
          "value": "estabelecimento-456"
        }
      }
    }
  ],
  "entity": [
    {
      "type": {
        "code": "certificate"
      },
      "what": {
        "identifier": {
          "system": "urn:uuid",
          "value": "urn:uuid:cert-9999"
        }
      }
    }
  ],
  "reason": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/ValueSet/v3-PurposeOfUse",
          "code": "HLEGAL"
        }
      ]
    }
  ]
}

Acesso a registros sensíveis ou dados assinados

{
  "resourceType": "AuditEvent",
  "type": {
    "system": "http://terminology.hl7.org/CodeSystem/audit-event-type",
    "code": "rest",
    "display": "RESTful Operation"
  },
  "action": "R",
  "recorded": "2024-06-07T15:20:00Z",
  "outcome": "0",
  "outcomeDesc": "SUCESSO",
  "agent": [
    {
      "who": {
        "identifier": {
          "system": "urn:oid:1.2.3.4.5.6.7.8.9",
          "value": "estabelecimento-789"
        }
      }
    }
  ],
  "entity": [
    {
      "type": {
        "code": "document"
      },
      "what": {
        "identifier": {
          "system": "urn:uuid",
          "value": "urn:uuid:abcd-1234"
        }
      }
    }
  ]
}

Alterações em configurações de segurança

{
  "resourceType": "AuditEvent",
  "type": {
    "system": "http://terminology.hl7.org/CodeSystem/audit-event-type",
    "code": "security",
    "display": "Security Alert"
  },
  "action": "U",
  "recorded": "2024-06-07T15:30:00Z",
  "outcome": "0",
  "outcomeDesc": "SUCESSO",
  "agent": [
    {
      "who": {
        "identifier": {
          "system": "urn:oid:1.2.3.4.5.6.7.8.9",
          "value": "estabelecimento-999"
        }
      }
    }
  ],
  "entity": [
    {
      "type": {
        "code": "config"
      },
      "what": {
        "identifier": {
          "system": "urn:uuid",
          "value": "urn:uuid:config-0001"
        }
      }
    }
  ]
}

Falhas ou tentativas de acesso não autorizado

{
  "resourceType": "AuditEvent",
  "type": {
    "system": "http://terminology.hl7.org/CodeSystem/audit-event-type",
    "code": "rest",
    "display": "RESTful Operation"
  },
  "action": "E",
  "recorded": "2024-06-07T15:40:00Z",
  "outcome": "8",
  "outcomeDesc": "FALHA",
  "agent": [
    {
      "who": {
        "identifier": {
          "system": "urn:oid:1.2.3.4.5.6.7.8.9",
          "value": "estabelecimento-789"
        }
      }
    }
  ],
  "entity": [
    {
      "type": {
        "code": "document"
      },
      "what": {
        "identifier": {
          "system": "urn:uuid",
          "value": "urn:uuid:abcd-1234"
        }
      }
    }
  ]
}

Estrutura técnica para AuditEvent

Para validação de assinaturas digitais com evidências LTV

Esta seção define a estrutura técnica específica para registros de auditoria de operações de assinatura digital, incluindo validação com evidências Long Term Validation (LTV).

Elemento FHIR Uso específico para assinatura digital Tipo de dado Observações
AuditEvent.recorded Data/hora da operação de assinatura ou validação instant (timestamp) Data confiável da operação; prova de quando foi executada
AuditEvent.agent Identidade do sistema ou pessoa que realizou a operação AuditEvent.agent Deve indicar quem realizou a operação (sistema automático ou operador)
AuditEvent.source Sistema onde a operação ocorreu AuditEvent.source Pode incluir identificador do sistema, hostname, etc.
AuditEvent.outcome Resultado da operação code Valores como 0 (sucesso), 4 (erro grave), conforme FHIR
AuditEvent.outcomeDesc Descrição textual do resultado string Ex: "Assinatura criada com sucesso", "Cadeia válida até a AC Raiz"
AuditEvent.entity[n].what Referência para o recurso Provenance contendo a assinatura (JWS) Reference(Provenance) Provenance contém Signature.data, que inclui JWS e cadeia x5c
AuditEvent.entity[n].type Tipo do recurso referenciado (assinatura, conteúdo assinado, etc.) Coding Ex: Provenance, Bundle, Observation
AuditEvent.entity[n].role Papel da entidade no contexto da auditoria Coding Ex: "signed-resource", "signature-source", "evidence"
AuditEvent.entity[n].detail Detalhes chave-valor da operação key-value Exemplos abaixo
└─ detail[0].type "operationResult" string Ex: "success", "validation-failed", "signature-created"
└─ detail[1].type "operationDate" string (timestamp ISO 8601) Redundante com recorded, mas pode reforçar a evidência
└─ detail[2].type "hashAlgorithm" string Ex: "SHA-256"
└─ detail[3].type "signatureAlgorithm" string Ex: "RS256", "ES256"
└─ detail[4].type "policyUsed" string URI da política de assinatura utilizada
└─ detail[5].type "certificateFingerprint" string SHA-256 fingerprint do certificado signatário
└─ detail[6].type "timestampStrategy" string Ex: "iat" (auto-declarado) ou "tsa" (TSA)
└─ detail[7].type "ocspResponseCertX" base64Binary ou referência Resposta OCSP assinada (pode ser binária ou apontar para Binary no contained)
└─ detail[8].type "crlUsedCertX" base64Binary ou referência CRL usada na validação do certificado X
AuditEvent.contained[n] Recurso Binary com evidências binárias (ex: CRL, resposta OCSP) Binary Armazena objetos assinados que não estão contidos no Provenance
└─ Binary.contentType Tipo MIME do conteúdo string Ex: "application/pkix-crl" ou "application/ocsp-response"
└─ Binary.data Conteúdo binário codificado em base64 base64Binary CRL ou OCSP em base64

Códigos de auditoria específicos

Para operações de assinatura digital, utilize os seguintes códigos nos elementos AuditEvent.type e AuditEvent.subtype:

Tipos de operação (AuditEvent.type):

  • "create": Para criação de assinaturas digitais
  • "read": Para validação/verificação de assinaturas digitais
  • "update": Para operações de re-assinatura ou atualização de evidências LTV

Subtipos (AuditEvent.subtype):

  • "digital-signature-creation": Criação de assinatura digital
  • "digital-signature-validation": Validação de assinatura digital
  • "certificate-revocation-check": Verificação de revogação de certificados
  • "ltv-evidence-collection": Coleta de evidências para Long Term Validation

Requisitos de segurança para auditoria

Integridade dos registros:

  • Registros de auditoria devem ser protegidos contra alteração
  • Considere assinatura digital dos próprios registros de auditoria
  • Use armazenamento append-only quando possível

Confidencialidade:

  • Informações sensíveis (como PINs) nunca devem ser registradas
  • Considere pseudonimização de dados pessoais quando apropriado
  • Proteja acesso aos registros conforme políticas de privacidade

Disponibilidade:

  • Implemente redundância adequada para os registros
  • Estabeleça procedimentos de backup e recuperação
  • Monitore a capacidade de armazenamento dos logs

Retenção:

  • Mantenha registros pelo período exigido por regulamentações
  • Para contexto de saúde, recomenda-se mínimo de 7 anos
  • Implemente procedimentos seguros de descarte após o período de retenção