Capa do Ebook gratuito Escriturário do Banco do Brasil - Agente de Tecnologia: Preparação para Concurso

Escriturário do Banco do Brasil - Agente de Tecnologia: Preparação para Concurso

Novo curso

16 páginas

Gestão de identidades, acesso e segurança de aplicações para o Escriturário do Banco do Brasil – Agente de Tecnologia

Capítulo 11

Tempo estimado de leitura: 10 minutos

+ Exercício

IAM (Identity and Access Management): visão prática para aplicações

IAM é o conjunto de processos e controles para garantir que: (1) uma identidade seja corretamente reconhecida (quem é) e (2) receba apenas os acessos necessários (o que pode fazer). Em aplicações, IAM aparece em cadastro, login, recuperação de senha, controle de sessão, emissão/validação de tokens, autorização por perfis e registro de auditoria.

Autenticação vs autorização

Autenticação responde “quem é você?”. Exemplos: senha, biometria, certificado, OTP (código temporário), autenticação multifator (MFA).

Autorização responde “o que você pode fazer?”. Exemplos: acessar tela de administração, aprovar transação, consultar apenas sua própria conta, executar uma API específica.

Erro comum em provas e na prática: confundir “usuário logado” com “usuário autorizado”. Estar autenticado não implica ter permissão para executar uma ação.

Modelos de controle de acesso: RBAC e ABAC

RBAC (Role-Based Access Control)

No RBAC, permissões são atribuídas a papéis (roles), e usuários recebem um ou mais papéis. É simples de administrar e muito usado em sistemas corporativos.

Continue em nosso aplicativo

Você poderá ouvir o audiobook com a tela desligada, ganhar gratuitamente o certificado deste curso e ainda ter acesso a outros 5.000 cursos online gratuitos.

ou continue lendo abaixo...
Download App

Baixar o aplicativo

  • Exemplo: roles “Atendente”, “Supervisor”, “Administrador”. A permissão “aprovar operação” pertence ao role “Supervisor”.
  • Ponto de atenção: “explosão de roles” quando se tenta representar muitas variações de regras apenas com papéis.

ABAC (Attribute-Based Access Control)

No ABAC, a decisão de acesso considera atributos do usuário, do recurso, da ação e do contexto (horário, canal, local, risco). É mais flexível e expressivo.

  • Exemplo: permitir “aprovar operação” se (cargo=supervisor) E (valor<=limiteSupervisor) E (horário dentro do expediente) E (canal=rede interna).
  • Ponto de atenção: exige boa governança de atributos e políticas bem testadas para evitar negações indevidas ou permissões excessivas.

Princípios essenciais: menor privilégio e segregação de funções

Privilégio mínimo (Least Privilege)

Conceder apenas as permissões estritamente necessárias para a tarefa. Isso reduz o impacto de credenciais comprometidas e limita danos por erro operacional.

  • Exemplo: um serviço que apenas consulta dados não deve ter permissão de escrita no banco.
  • Aplicação prática: separar contas de uso humano (administração) de contas de serviço (APIs), com escopos mínimos e rotação de segredos.

Segregação de funções (SoD – Segregation of Duties)

Evita que uma única pessoa (ou identidade) consiga executar todas as etapas críticas de um processo, reduzindo risco de fraude e erro.

  • Exemplo: quem cadastra um beneficiário não deve ser o mesmo que aprova a transferência para esse beneficiário.
  • Em sistemas: implementar regras de workflow e autorização por etapa (criar, revisar, aprovar), com trilha de auditoria.

Trilhas de auditoria (Audit Trails)

Auditoria registra “quem fez o quê, quando, de onde e com qual resultado”. É fundamental para investigação, conformidade e detecção de abuso.

  • Boas práticas: registrar ID do usuário/serviço, IP/origem, user-agent (quando aplicável), identificador da transação, ação executada, recurso afetado, status (sucesso/erro) e motivo de negação.
  • Cuidados: não registrar senhas, tokens completos, CVV, ou dados sensíveis desnecessários. Preferir mascaramento e correlação por IDs.

Fluxos conceituais de login, sessão e tokens

Fluxo de login baseado em sessão (cookie de sessão)

Nesse modelo, após autenticar, o servidor cria uma sessão e envia ao cliente um identificador (geralmente em cookie). O servidor mantém o estado da sessão.

Passo a passo conceitual:

  • 1) Cliente envia credenciais (ex.: usuário/senha) via HTTPS.
  • 2) Servidor valida credenciais e aplica controles (MFA, bloqueio por tentativas, verificação de risco).
  • 3) Servidor cria sessão (ex.: sessionId) e armazena no servidor (memória/redis/banco) com expiração.
  • 4) Servidor retorna cookie de sessão ao cliente (idealmente com flags HttpOnly, Secure e SameSite).
  • 5) A cada requisição, o cliente envia o cookie; o servidor recupera a sessão e aplica autorização para cada ação.

Riscos típicos: sequestro de sessão (session hijacking), fixação de sessão (session fixation), CSRF (quando cookies são usados automaticamente pelo navegador).

Fluxo baseado em token (ex.: JWT ou token opaco)

Nesse modelo, após autenticar, o servidor emite um token que o cliente apresenta nas requisições (frequentemente no header Authorization). Pode ser um token auto-contido (JWT) ou um identificador opaco validado no servidor.

Passo a passo conceitual:

  • 1) Cliente autentica e recebe um access token com expiração curta.
  • 2) Cliente chama APIs enviando o token (ex.: Authorization: Bearer ...).
  • 3) API valida token (assinatura/expiração/escopo) e aplica autorização (roles, atributos, escopos).
  • 4) Quando expira, cliente usa refresh token (mais protegido) para obter novo access token.

Cuidados: armazenar token com segurança (evitar exposição via XSS), usar expiração curta, validar audiência/issuer, e definir escopos mínimos (privilégio mínimo).

Autorização em camadas: endpoint e dado (IDOR)

Uma aplicação segura não verifica apenas “pode acessar a tela”, mas também “pode acessar este recurso específico”. Falha comum: IDOR (Insecure Direct Object Reference), quando o usuário altera um identificador e acessa dados de terceiros.

  • Exemplo: GET /api/contas/123 extrai dados da conta 123 sem checar se o usuário é dono/tem permissão.
  • Correção: validar no servidor a relação usuário-recurso (ownership) ou política ABAC (atributos do usuário e do recurso).

Vulnerabilidades comuns em aplicações e mitigação

Injeção (SQL/NoSQL/Command Injection)

Injeção ocorre quando dados de entrada são interpretados como parte de um comando/consulta. O atacante manipula a entrada para alterar a lógica, exfiltrar dados ou executar comandos.

Mitigação (ênfase em parâmetros):

  • Usar consultas parametrizadas (prepared statements) e evitar concatenar strings para montar queries.
  • Validar tipo, formato e tamanho da entrada (ex.: número, data, CPF com máscara/regex), e rejeitar o que não atende.
  • Aplicar privilégio mínimo na conta do banco (ex.: conta de leitura não deve ter DROP/ALTER).

Exemplo conceitual (errado vs correto):

// Errado (concatenação): SELECT * FROM usuarios WHERE login = ' + input + ' ...
// Correto (parâmetro): SELECT * FROM usuarios WHERE login = ?

XSS (Cross-Site Scripting)

XSS ocorre quando a aplicação insere conteúdo não confiável em uma página e o navegador executa como script. Pode roubar sessão/token, alterar telas e capturar dados.

Mitigação:

  • Escape/encode de saída conforme o contexto (HTML, atributo, JavaScript, URL). A regra prática: “validar entrada ajuda, mas a defesa principal é codificar a saída”.
  • Evitar inserir HTML/JS vindo do usuário; quando necessário, usar sanitização robusta.
  • Usar Content Security Policy (CSP) para reduzir impacto.
  • Proteger cookies de sessão com HttpOnly (reduz roubo por XSS, embora não elimine XSS).

CSRF (Cross-Site Request Forgery)

CSRF explora o fato de que o navegador envia cookies automaticamente. Um site malicioso induz o usuário logado a disparar uma ação sem intenção (ex.: transferência, alteração de e-mail).

Mitigação (passo a passo):

  • 1) Para ações sensíveis, exigir token anti-CSRF único por sessão/requisição.
  • 2) Validar o token no servidor e rejeitar se ausente/inválido.
  • 3) Configurar cookies com SameSite (Lax/Strict conforme o caso) e Secure.
  • 4) Preferir métodos corretos: GET não deve alterar estado; usar POST/PUT/DELETE com validações.

Observação: APIs consumidas por SPA/mobile que usam Authorization header (Bearer token) tendem a ser menos suscetíveis a CSRF do que cookies, mas continuam vulneráveis a XSS e roubo de token se o armazenamento for inadequado.

Falhas de autenticação e gerenciamento de sessão

Incluem senhas fracas, ausência de MFA em operações críticas, mensagens de erro que revelam demais, brute force sem bloqueio, sessão sem expiração, tokens reutilizáveis por muito tempo e reset de senha inseguro.

Mitigação (checklist prático):

  • Política de senha e armazenamento seguro (hash forte com salt; nunca armazenar senha em texto).
  • Rate limiting e detecção de tentativas (bloqueio progressivo, CAPTCHA quando aplicável).
  • MFA para elevação de privilégio e transações sensíveis.
  • Expiração de sessão e invalidação no logout; rotação de sessionId após login (mitiga fixation).
  • Reset de senha com token de uso único e curto, enviado por canal controlado; invalidar tokens antigos.
  • Mensagens de erro neutras (não indicar se usuário existe).

Validação de entradas: abordagem segura e previsível

Validação de entrada deve ser feita no servidor (validação no cliente é apenas usabilidade). A estratégia mais segura é allowlist: aceitar apenas formatos esperados.

Passo a passo para validar entradas

  • 1) Definir contrato do campo: tipo (string/número), formato (regex), tamanho mínimo/máximo, obrigatoriedade.
  • 2) Normalizar antes de validar (ex.: trim, padronizar encoding, remover caracteres invisíveis).
  • 3) Validar e rejeitar cedo (fail fast) com erro genérico e log interno detalhado.
  • 4) Usar parâmetros/ORM corretamente para consultas; nunca concatenar comandos.
  • 5) Para saída em HTML, aplicar encoding conforme o contexto (defesa contra XSS).

Questões práticas: identificar falhas e propor correções

Cenário 1: usuário acessa dados de outro cliente alterando o ID

Sintoma: ao trocar /api/cliente/100 por /api/cliente/101, o sistema retorna dados de outro cliente.

Falha provável: autorização no nível do objeto (IDOR).

Medidas corretivas:

  • Aplicar verificação de ownership/escopo: o usuário só pode acessar recursos vinculados a ele.
  • Implementar política ABAC (atributo “clienteId” do token/sessão deve coincidir com o recurso).
  • Auditar acessos negados e tentativas sequenciais (indicador de enumeração).

Cenário 2: consulta com filtro livre causa vazamento de dados

Sintoma: campo de busca aceita caracteres especiais e retorna resultados inesperados ou erro de banco.

Falha provável: injeção por concatenação de query.

Medidas corretivas:

  • Trocar concatenação por query parametrizada.
  • Restringir o filtro a padrões esperados (ex.: apenas letras/números, tamanho máximo).
  • Reduzir privilégios da conta de banco usada pela aplicação.

Cenário 3: ação sensível executa ao clicar em link externo

Sintoma: usuário logado tem dados alterados após visitar outro site.

Falha provável: CSRF em endpoint que usa cookie de sessão.

Medidas corretivas:

  • Adicionar token anti-CSRF e validar no servidor.
  • Configurar SameSite e revisar endpoints que alteram estado via GET.
  • Exigir reautenticação/MFA para ações críticas.

Cenário 4: token exposto e reutilizado por muito tempo

Sintoma: access token sem expiração efetiva ou refresh token armazenado de forma insegura.

Falha provável: gestão inadequada de ciclo de vida de tokens/sessões.

Medidas corretivas:

  • Definir expiração curta para access token e rotação de refresh token.
  • Revogação/blacklist quando necessário (ex.: suspeita de comprometimento).
  • Armazenamento seguro: evitar expor tokens a scripts (reduzir superfície de XSS) e proteger em trânsito (HTTPS).

Boas práticas de desenho de autorização em APIs

  • Autorização centralizada: políticas aplicadas de forma consistente (middleware/filtros), evitando “esquecer” endpoints.
  • Negar por padrão: se não há regra explícita, negar acesso.
  • Escopos e permissões: associar tokens a escopos (ex.: contas:ler, contas:movimentar) e validar em cada endpoint.
  • Separar autenticação de autorização: autenticar uma vez, autorizar sempre (em cada requisição/ação).
  • Logs de auditoria: registrar decisões de autorização e ações sensíveis com correlação de transação.

Agora responda o exercício sobre o conteúdo:

Em uma aplicação, um usuário está autenticado com sucesso, mas tenta executar uma ação sensível (por exemplo, aprovar uma operação). Qual abordagem está correta para garantir segurança no controle de acesso?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Autenticação confirma “quem é”, mas autorização define “o que pode fazer”. Por isso, a aplicação deve autorizar no servidor em cada ação/endpoint (por roles, atributos ou escopos), negando por padrão quando não houver permissão.

Próximo capitúlo

Infraestrutura, serviços e observabilidade na atuação do Agente de Tecnologia do Banco do Brasil

Arrow Right Icon
Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.