Executando verificação de segurança...
3

Minha experiência

Já trabalhei em uma grande empresa de telecomunicações brasileira, e os sistemas internos são protegidos por login + senha + acesso via VPN + senha OTP via aplicativo (em alguns casos mais críticos), além de a VPN só ser acessível por um computador homologado da empresa e ações críticas como emissão de senha para um usuário, ou até mesmo um acesso específico deve ser autorizado por duas ou mais pessoas (geralmente o gestor da pessoa aprova e depois alguém da equipe responsável pelo sistema ou da diretoria de segurança), então acho que isso é o suficiente. Bancos também adotam um sistema semelhante de segurança para seus sistemas internos.


Sobre VPNs

Como eu citei acima, empresas utilizam VPNs para acesso de coisas mais restritas, como políticas, sistemas internos, entre outros, e é o que aparenta ser seu caso de uso. Existem vários fornecedores, como a Checkpoint, F5, OpenVPN e Wireguard, sendo estes dois últimos open-source em sua essência, o que significa que você pode utilizar gratuitamente.

Na prática, o processo para uma conectividade via VPN seria:
1 - Criar um servidor de VPN, como o OpenVPN Server
2 - Emitir credenciais para acesso a esse servidor. Geralmente o servidor de VPN ele emite um certificado próprio para cada usuário;
3 - Instalar um cliente de VPN próprio, como o OpenVPN Client.
4 - Fazer com que, quando o usuário quiser acessar o sistema, ele tenha que se logar primeiro na VPN, na qual ele precisa, além do certificado gerado, colocar uma senha
5 - Com o usuário logado na VPN e acessando o serviço, geralmente ele vai acessar utilizando um endereço IP privado e, considerando que esse IP privado é alocado dinamicamente pelo servidor de VPN, você consegue consultar o servidor de VPN pra verificar quem é o usuário. E você pode controlar, via servidor de VPN, que apenas MACs específicos possam acessar, então se alguém hackear teu usuário e usar outro computador, não vai conseguir entrar via VPN.


Autenticação multi-fatorial

Mas acredito que o que você realmente queira fazer é uma Autenticação de Múltiplos Fatores. Verificar a VPN, usuário e senha do sistema seria isso, mas geralmente também existem outros fatores de segurança.

Você pode adicionar no sistema uma autenticação via OTP, que basicamente seria enviado um código para o celular do usuário, via SMS (não recomendável) ou via algum aplicativo (como Authy ou Google Authenticator), esse código seria uma senha, geralmente de 6 dígitos numéricos aleatórios, que são resetados em um intervalo de tempo frequente (geralmente a cada 30 segundos).

Se tiver um orçamento bom para segurança e for ainda mais paranóico com segurança, você também pode ter um token físico de segurança, como o Yubikey, na qual você precisa inserir esse token (geralmente é um pen drive USB mesmo, com um certificado digital e alguns modelos tem suporte a NFC para casos de celular) no dispositivo como uma outra camada. Cada cliente teria que ter seu token físico, o que aumentaria o custo consideravelmente.

Obviamente esses critérios mais fortes de segurança fora de login e senha vão exigir um servidor dedicado de autenticação, como o Keycloak (open source), Auth0, Cognito, entre outros.


Minha sugestão de implementação do caso de uso

Então o que eu faria nesse seu caso de uso seria: estudar OpenVPN e Keycloak, integrar o Keycloak na sua aplicação (é meio chatinho, vai precisar de uma semana pra entender ele), instalar e configurar o servidor OpenVPN (também é chatinho de mexer, mas tem interfaces de usuário que facilitariam o gerenciamento), além de também instalar os clients e certificados do OpenVPN nos computadores do usuário.

Por fim, adicionaria uma lógica no backend de aplicação, para verificar se usuário é o mesmo usuário conectado à OpenVPN por meio do IP privado coletado (já que o OpenVPN aloca IPs privados dinâmicos e atribui a um usuário), além de adicionar em um firewall ou proxy reverso uma regra para o sistema ser acessível somente pelos IPs privados relacionados à VPN.


Sobre autorização dupla e conclusão

Adicionar várias camadas de segurança não vai deixar seu sistema imune, mas vai deixar ele casca grossa (principalmente se utilizar tokens físicos, como aconteceu nesse caso da Cloudflare que eles atribuem a mitigação do ataque de phishing aos tokens físicos), porém pense comigo: e se o usuário fornecer o computador homologado com usuário e senha, e também dar nas mãos do invasor o token físico ou até mesmo o celular com o aplicativo de autenticação instalado? É difícil, mas pode acontecer.

Se o sistema for crítico, você pode adicionar autorização de uma ação por duas ou mais pessoas por exemplo, o que dificulta ainda mais a chance de uma ação nociva acontecer. Um exemplo disso são os approvals de Pull Requests do próprio TabNews, na qual o PR necessita de aprovação de várias pessoas (caso a pessoa não tenha acesso de escrita ao repositório), então isso reduz muito a chance de dar problema.

Bem, sem detalhes sobre o que é o sistema não dá pra estimar quais medidas de segurança são necessárias. Obviamente passei diversas alternativas, cabe a quem for implementar entender a realidade e estimar custos para cada camada de segurança, além de estabelecer processos de segurança. Espero que eu tenha dado um direcionamento sobre o que existe no mercado que pode ser implementado no seu caso, e estou a disposição para responder futuras perguntas, se houver.

Carregando publicação patrocinada...
1

Muito obrigado pela contribuição, no caso esse sistema que vou usar essa feature é bem simples e pequeno, sem apelo para tanta complexidade, mas suas resposta certamente vai ajudar pessoas no futuro, no mínimo pra adquirir conhecimento. Abraços.