Estudante, como é bom lhe ter de volta! Após você aprender sobre requisitos operacionais e de desempenho na última lição, nosso objetivo agora é aprender e conhecer os requisitos de segurança de um software que, basicamente, são um conjunto de especificações e diretrizes definidoras das medidas de segurança que um sistema, seja software, seja hardware, seja uma combinação de ambos, deve atender. Esses requisitos são estabelecidos para proteger o sistema e seus dados contra ameaças, ataques e violações de segurança, garantindo a confidencialidade, integridade e disponibilidade das informações e dos recursos do sistema.
Os requisitos de segurança de sistemas abrangem uma ampla gama de áreas e preocupações de segurança, incluindo: autenticação e controle de acesso, criptografia, auditoria e rastreamento, proteção contra malware e vírus, firewalls e controles de rede, entre outros. Estes são apenas alguns exemplos dos muitos aspectos abordados por esses requisitos.
A definição e implementação adequadas desses requisitos são vitais para proteger os sistemas contra ameaças cada vez mais sofisticadas no ambiente digital atual. Gostou? Então, corre para saber mais sobre o assunto na problematização desta lição.
Requisitos de segurança são projetados para resolver uma variedade de problemas relacionados à proteção de sistemas, dados e informações sensíveis contra ameaças cibernéticas e violações de segurança. Esses requisitos abordam uma série de desafios e cenários que podem comprometer a integridade, confidencialidade e disponibilidade de sistemas e dados.
Abordarei, neste item, somente um problema muito recorrente em nossa vida digital, que é o acesso não autorizado. Os requisitos de segurança podem resolver esse problema de acesso não autorizado a sistemas e dados, por meio da implementação de autenticação robusta, controle de acesso e autorização, a fim de garantir que apenas pessoas autorizadas tenham permissão para acessar informações sensíveis.
Esse é apenas um exemplo dos muitos problemas que requisitos de segurança são capazes de resolver. Em geral, tais requisitos visam a garantir a confiabilidade, confidencialidade e integridade dos sistemas e dados, protegendo-os contra uma variedade de ameaças e riscos.
Nesta lição, lhe apresentarei um case fictício, abordando o tema de nossa lição: requisitos de segurança. Considere a empresa Fin Secure que desenvolve um software de gestão financeira utilizado por empresas com o objetivo de controlar suas finanças, monitorar transações e gerenciar contas. Dado o ambiente sensível e altamente regulamentado onde as operações financeiras ocorrem, a segurança dos dados é de extrema importância.
A Fin Secure enfrenta o desafio crítico de garantir a integridade dos dados financeiros manipulados por seu software. Isso significa que as informações financeiras devem ser protegidas contra qualquer tipo de manipulação, adulteração ou acesso não autorizado.
A implementação de requisitos de segurança adequados, como criptografia dos dados, costuma ser uma peça-chave para abordar esse desafio, pois a criptografia dos dados sensíveis armazenados no software, bem como a transmissão deles entre o software e os usuários, protege os dados contra interceptação e garante que apenas pessoas autorizadas possam entender as informações.
Ao incorporar requisitos de segurança abrangentes em seu software de gestão financeira, a Fin Secure fortalece significativamente a integridade dos dados manipulados pelos usuários, o que cria um ambiente de confiança nas empresas que utilizam o software para gerenciar suas finanças, pois elas sabem que suas informações críticas estão protegidas contra acesso não autorizado, manipulação indevida e violações de segurança. A existência desses requisitos de segurança não apenas protege os dados, mas também fortalece a reputação da Fin Secure como uma fornecedora de soluções financeiras tão confiável quanto responsável.
Requisitos de segurança são especificações que descrevem as medidas, controles e políticas necessárias para proteger um sistema, aplicação ou dados contra ameaças e riscos de segurança. Pressman e Maxim (2016) dizem que os requisitos de segurança de software são determinados pelo trabalho junto ao cliente com o fim de identificar os ativos que precisam ser protegidos e o custo associado à perda desses ativos, caso ocorra uma brecha na segurança. Dessa forma, uma parte importante da construção de sistemas seguros é antecipar condições ou ameaças capazes de serem utilizadas para danificar recursos do sistema ou para torná-los inacessíveis a usuários autorizados.
Os três pilares da segurança da informação — confidencialidade, integridade e disponibilidade — formam a base de qualquer estratégia eficaz de segurança de dados e sistemas. Esses pilares representam os principais objetivos que uma organização busca alcançar para proteger suas informações e recursos contra ameaças cibernéticas e riscos de segurança. Vejamos, com mais detalhes, cada um dos pilares:
Ela se concentra na ideia de manter informações sensíveis e restritas acessíveis apenas a pessoas autorizadas. Isso significa que os dados confidenciais devem ser protegidos contra o acesso, a visualização ou divulgação por pessoas não autorizadas.
Ela se refere à qualidade dos dados, garantindo que eles não sejam alterados ou corrompidos de maneira não autorizada. Para manter a integridade dos dados, as organizações implementam controles que detectam qualquer modificação não autorizada nos dados e garantem que somente pessoas autorizadas possam fazer alterações.
Diz respeito à acessibilidade de recursos e dados quando necessário, ou seja, os sistemas e informações devem estar prontamente disponíveis e funcionando sem interrupções não planejadas. Para garantir a disponibilidade, as organizações implementam medidas voltadas a prevenir e mitigar interrupções, como redundância de hardware, backups regulares, planos de recuperação de desastres e monitoramento constante dos sistemas, a fim de identificar e resolver problemas rapidamente.
As ameaças cibernéticas representam riscos significativos a sistemas de computador, redes e dados, e os requisitos de segurança são projetados para mitigar essas ameaças. São algumas delas:
Malware: requisitos de segurança incluem a implementação de software antivírus e a verificação regular de atualizações para detectar e remover malware. Também podem envolver a educação dos usuários sobre como evitar o download de software suspeito.
Ataques de negação de serviço (DDoS): os ataques DDoS visam a sobrecarregar um sistema ou uma rede com tráfego de dados, tornando-o inacessível a usuários legítimos. Requisitos de segurança costumam incluir a implementação de sistemas de detecção e mitigação de DDoS bem como a redundância de sistemas, para garantir a disponibilidade contínua, mesmo durante um ataque.
Phishing: envolve tentativas de enganar os usuários para revelar informações confidenciais, como senhas e informações de cartão de crédito. Os requisitos de segurança abordam a conscientização do usuário, fornecendo treinamento que visam a identificar e evitar ataques de phishing.
Ransomware: é um tipo de malware que criptografa os dados de um sistema e exige um resgate para descriptografá-los. Requisitos de segurança envolvem a implementação de backups regulares e seguros para que os dados possam ser restaurados sem pagar o resgate. A prevenção de ransomware também inclui a educação dos usuários, com o objetivo de fazê-los evitar a abertura de anexos de e-mail suspeitos.
Ataques de força bruta: envolvem tentativas repetitivas de adivinhar senhas, geralmente, automatizadas. Requisitos de segurança incluem políticas de senha forte, bloqueio de contas após várias tentativas malsucedidas e implementação de medidas de autenticação multifatorial.
Injeção de SQL: envolve a inserção de código SQL malicioso em campos de entrada de um aplicativo, para manipular o banco de dados. Os requisitos de segurança envolvem a validação e a filtragem de entradas de usuário bem como o uso de consultas parametrizadas, a fim de evitar a injeção de SQL.
A maioria dos softwares salvam informações de usuários, tais como dados pessoais, portanto, o desenvolvimento de requisitos de segurança passará pela conformidade com regulamentações, como a GDPR (Regulamento Geral de Proteção de dados), na Europa, e a LGPD (Lei Geral de Proteção de Dados), no Brasil, e tal conformidade é de suma importância às organizações, por várias razões. Os requisitos de segurança, frequentemente, estão alinhados com essas regulamentações, para garantir o cumprimento legal, e essa conformidade desempenha um papel vital na proteção dos direitos e privacidade dos indivíduos bem como na reputação e responsabilidade das empresas.
A criptografia e a autenticação são dois pilares fundamentais da segurança da informação e desempenham papéis essenciais na proteção de dados confidenciais. Explicarei a você como cada um deles é usado para garantir a segurança dos dados em trânsito e em repouso:
Proteção de dados em trânsito: quando os dados estão em trânsito, ou seja, sendo transferidos pela rede de um local para outro, a criptografia é usada com o intuito de garantir que terceiros não autorizados nem interceptem nem leiam esses dados. Isso é especialmente importante durante a transmissão de informações pela internet, como login em sites, transações bancárias ou troca de mensagens de e-mail.
Proteção de dados em repouso: quando os dados estão em repouso, isto é, armazenados em dispositivos de armazenamento, como discos rígidos, bancos de dados ou dispositivos móveis, a criptografia é usada para garantir que se alguém obtiver acesso físico aos dispositivos, não seja possível acessar os dados sem a chave de descriptografia apropriada, o que protege os dados em caso de roubo de hardware ou acesso não autorizado a servidores.
Funcionamento: envolve a transformação dos dados originais em uma forma ilegível, chamada de texto cifrado, por meio de um algoritmo matemático e uma chave de criptografia. Somente quem possui a chave de descriptografia adequada pode reverter o processo e ler os dados originais. Esta ação garante a confidencialidade dos dados, mesmo se alguém obtiver acesso àqueles que estão criptografados.
Garantia de que apenas usuários autorizados tenham acesso: é o processo pelo qual um sistema verifica a identidade de um usuário para determinar se ele é quem diz ser, assim, somente pessoas autorizadas têm acesso aos recursos do sistema.
Métodos de autenticação: existem vários métodos de autenticação, incluindo algo que o usuário sabe (como senha), algo que o usuário possui (como um token de autenticação), algo que o usuário é (como uma impressão digital ou reconhecimento facial) ou uma combinação destes fatores.
Proteção contra acesso não autorizado: a autenticação ajuda a prevenir o acesso não autorizado a sistemas e dados confidenciais. Mesmo que alguém obtenha acesso físico a um dispositivo ou rede, essa pessoa, para acessar informações sensíveis, ainda precisará passar pelo processo de autenticação.
Autenticação de dois fatores (2FA) e multifatorial (MFA): para ampliar a segurança, muitos sistemas implementam autenticação de dois fatores ou multifatorial, exigindo não apenas uma senha, mas também uma segunda forma de autenticação, como um código gerado por aplicativo móvel ou enviado por mensagem SMS.
O controle de acesso desempenha um papel crítico na segurança da informação, garantindo que apenas usuários autorizados tenham permissões adequadas para acessar recursos e realizar ações específicas, o que evita acessos não autorizados, reduz o risco de violações de segurança e assegura que as operações do sistema estejam alinhadas com as políticas e regulamentações estabelecidas.
A necessidade de registros de auditoria e monitoramento contínuo é fundamental na segurança da informação, pois essas práticas desempenham um papel crítico na detecção precoce e resposta eficaz a atividades suspeitas ou violações de segurança. Registros de auditoria relacionam eventos e ações no sistema, fornecendo um histórico completo das atividades e permitindo a análise forense e a identificação de ameaças em potencial. O monitoramento contínuo, por sua vez, acompanha ativamente o tráfego de rede e a atividade do sistema em tempo real, a fim de alertar quaisquer anomalias. Combinados, registros de auditoria e monitoramento contínuo ajudam a identificar e mitigar ameaças em estágio inicial, protegendo dados e recursos críticos, além de facilitar o cumprimento regulatório, ao documentar a conformidade com políticas de segurança.
A OWASP (Open Web Application Security Project) é uma organização sem fins lucrativos que se concentra em melhorar a segurança de software. Ela fornece recursos e diretrizes amplamente reconhecidos para ajudar as organizações a desenvolver, adquirir e manter os softwares seguros.
As técnicas da OWASP são diretrizes e melhores práticas desenvolvidas por especialistas em segurança cibernética para lidar com vulnerabilidades comuns em aplicativos da web. Um dos seus projetos mais utilizados é o OWASP Top Ten, uma compilação das dez ameaças de segurança mais críticas enfrentadas por aplicativos da web (OWASP, 2023, on-line).
Ela é atualizada periodicamente com o objetivo de refletir as tendências atuais em segurança cibernética. A lista inclui ameaças como injeção SQL, autenticação inadequada, exposição de dados confidenciais, entre outras.
Nesta lição, você implementará um código em Python que simula uma verificação de autenticação como parte dos requisitos de segurança de um sistema. Primeiro, acesse o ambiente para codificar, neste caso, usaremos o site OnlineGDB (clique aqui para acessar). Com o site aberto, selecione, no canto superior direito, na opção Language, a linguagem de programação Python 3. Selecione todo o código que vem automaticamente no arquivo main.py e digite o seguinte código, conforme a Figura 1:
O funcionamento do código da Figura 1 possui o seguinte fluxo:
Linhas 1 a 4: criação da função “autenticar”, a qual recebe login e senha como parâmetros e os compara com “usuario” e “senha”, respectivamente, retornando true ou false.
Linha 6: inicializa a variável numero_de_tentativas com valor 3.
Linhas 8 a 16: realiza um laço de repetição validando o valor da variável numero_de_tentativas, onde, nas linhas 9 e 10, recebe a entrada dos valores pelo usuários e nas linhas 12 a 16s faz a tentativa de autenticação com o uso da função autenticar().
Linhas 18 e 19: se a função não conseguir retornar verdadeiro no máximo das tentativas possíveis, retorna a seguinte mensagem para o usuário “Número máximo de tentativas atingido. Acesso bloqueado”.
Neste código, a função “autenticar” simula um processo de autenticação. O usuário tem um número limitado de tentativas (“numero_de_tentativas”) para inserir um nome de usuário e senha corretos. Se a autenticação for bem-sucedida, o acesso é concedido. Caso contrário, o usuário tem mais tentativas ou, após exceder o número máximo, tem o acesso bloqueado.
Com isso, você acaba de exemplificar, na prática, um requisito de segurança. Parabéns!
OWASP. OWASP Top Ten, [s. l.], 2023. Disponível em: https://owasp.org/www-project-top-ten/. Acesso em: 28 nov. 2023.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: Uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016.