Alternativa D - Separação de funções
Introdução
A questão aborda os princípios de design de software seguro, pedindo para identificar aquele que utiliza a técnica de programação em camadas aliada à atribuição de responsabilidades específicas.
Para responder corretamente, é necessário diferenciar os principais conceitos de segurança aplicados à arquitetura de sistemas.
Desenvolvimento
O princípio correto é a Separação de Funções (ou Separação de Competências). Vamos entender por que esta é a resposta certa e por que as outras alternativas não se encaixam perfeitamente na descrição dada.
Por que Alternativa D?
A Separação de Funções é um princípio de segurança que visa dividir um sistema em componentes distintos, onde cada componente possui uma responsabilidade específica e limitada.
- Objetivo: Garantir que nenhuma única parte do sistema (ou usuário) tenha controle total sobre todas as operações críticas.
- Implementação: No design de software, isso é frequentemente realizado através de uma arquitetura em camadas (ex: apresentação, lógica de negócio, dados), onde cada camada tem uma função clara e isolada.
- Benefício: Se uma camada for comprometida, a separação de responsabilidades limita o dano e impede que o atacante assuma o controle total do sistema imediatamente.
Por que as outras alternativas estão incorretas?
- A) Privilégio Mínimo: Este princípio foca estritamente em permissões de acesso. Ele determina que um usuário ou processo deve ter apenas as mínimas permissões necessárias para realizar sua tarefa, e nada além disso. Não trata diretamente da estrutura de camadas do design.
- B) Defesa em Profundidade: Embora utilize o conceito de "camadas", a Defesa em Profundidade foca na redundância de barreiras de segurança (físicas, lógicas, administrativas). A ideia é que, se uma camada falhar, outra esteja disponível para proteger. O foco é a "proteção adicional", não necessariamente a "atribuição de responsabilidades operacionais específicas" entre as camadas.
- C) Práticas de software seguro: É um termo genérico que abrange diversas atividades (codificação, revisão, teste), não sendo um princípio de design específico como o descrito.
- E) Definição de testes: Refere-se à fase de validação do software, não ao princípio de design arquitetural.
Conclusão
A descrição "programação em camadas com a atribuição de responsabilidades específicas" define classicamente o princípio de Separação de Funções aplicado à engenharia de software seguro, visando o isolamento de riscos através da divisão de tarefas.
Alternativa D.