Índice:
- Não faça suposições sobre a entrada do usuário
- Manipular falhas Graciosamente
- Manter um registro de programas
- Siga um bom processo de desenvolvimento
- Implementar o controle de boa versão
- Autenticar usuários de forma segura
- Gerenciar sessões remotas
- Obfuscate seu código
- Assine seu código com um certificado digital
- Use criptografia segura sempre que necessário
Vídeo: CS:GO | Como CONFIGURAR um HACK Legit // Como Burlar VAC NET 2024
Como um programador C ++, você precisa aprender as coisas que você deve fazer em seu código C ++ para evitar escrever programas vulneráveis a hackers. Também descreve recursos que você pode ativar se o seu sistema operacional os suportar, como o Randomization Layout (ASLR) e a prevenção de execução de dados (DEP).
Não faça suposições sobre a entrada do usuário
A visão do túnel do programador está bem durante a fase de desenvolvimento inicial. Em algum momento, no entanto, o programador (ou, melhor ainda, algum outro programador que não teve nada a ver com o desenvolvimento do código) precisa sentar-se e esquecer o problema imediato. Ela precisa se perguntar: "Como esse programa reagirá a insumos ilegais? "
Aqui estão algumas das regras para verificar a entrada:
-
Não faça suposições sobre o comprimento da entrada.
-
Não aceite mais entradas do que você tem espaço em seus buffers de comprimento fixo (ou buffers usados de tamanho variável).
-
Verifique o alcance de cada valor numérico para se certificar de que faz sentido.
-
Verifique e filtre os caracteres especiais que podem ser usados por um hacker para injetar código.
-
Não transmita a entrada bruta para outro serviço, como um servidor de banco de dados.
E execute todas as mesmas verificações nos valores retornados de serviços remotos. O hacker pode não estar no lado da entrada, ele pode estar no lado da resposta.
Manipular falhas Graciosamente
Seu programa deve responder razoavelmente às falhas que ocorrem dentro do programa. Por exemplo, se sua chamada para uma função de biblioteca retorna um nullptr, o programa deve detectar isso e fazer algo razoável.
Razoável aqui deve ser entendido de forma bastante liberal. O programa não precisa cheirar para descobrir exatamente por que a função não retornou um endereço razoável. Pode ser que o pedido tenha sido muito memória devido a uma entrada não razoável. Ou poderia ser que o construtor detectou algum tipo de entrada ilegal.
Não importa. O ponto é que o programa deve restaurar seu estado o melhor que pode e configurar para o próximo bit de entrada sem falhar ou corromper estruturas de dados existentes, como o heap.
Manter um registro de programas
Crie e mantenha logs de tempo de execução que permitem a alguém reconstruir o que aconteceu no caso de uma falha de segurança. (Na verdade, isso é tão verdadeiro no caso de qualquer tipo de falha.) Por exemplo, você provavelmente deseja registrar todas as vezes que alguém assina dentro ou fora do seu sistema.
Você definitivamente quer saber quem foi logado em seu sistema quando ocorreu um evento de segurança - este é o grupo que corre o risco de uma perda de segurança e quem é mais suspeito quando procura por culpas.Além disso, você quer registrar todos os erros do sistema que incluirão a maioria das exceções.
Um programa de produção do mundo real contém um grande número de chamadas que se parecem com o seguinte:
log (DEBUG, "User% s password legal entrada", sUser);
Este é apenas um exemplo. Todo programa precisará de algum tipo de função de log. Seja ou não chamado log () é imaterial.
Siga um bom processo de desenvolvimento
Cada programa deve seguir um processo de desenvolvimento formal bem pensado. Esse processo deve incluir pelo menos as seguintes etapas:
-
Recolher e documentar os requisitos, incluindo os requisitos de segurança.
-
Rever o design.
-
Aderir a um padrão de codificação.
-
submete o teste de unidade.
-
Realizar testes de aceitação formal baseados nos requisitos originais.
Além disso, as avaliações pelos pares devem ser conduzidas em pontos-chave para verificar se os requisitos, design, código e procedimentos de teste são de alta qualidade e atendem aos padrões da empresa.
Implementar o controle de boa versão
O controle de versão é uma coisa estranha. É natural não se preocupar com a versão 1. 1 quando estiver sob a arma para obter a versão 1. 0 na porta e nas mãos estendidas dos usuários aguardando. No entanto, o controle de versão é um tópico importante que deve ser abordado antecipadamente porque ele deve ser incorporado ao projeto inicial do programa e não foi atacado mais tarde.
Um aspecto quase trivial do controle de versão é saber qual versão do programa que um usuário está usando. Quando um usuário chama e diz: "Isso faz isso quando eu clico nisso", a mesa de ajuda realmente precisa saber qual versão do programa o usuário está usando. Ele poderia estar descrevendo um problema na sua versão que já foi corrigido na versão atual.
Autenticar usuários de forma segura
A autenticação do usuário deve ser direta: o usuário fornece um nome de conta e uma senha, e seu programa procura o nome da conta em uma tabela e compara as senhas. Se as senhas coincidirem, o usuário será autenticado. Mas quando se trata de anti-abatimento, nada é tão simples.
Primeiro, nunca armazene as próprias senhas no banco de dados. Isso é chamado armazenando-os no clear e é considerado uma forma muito ruim. É muito fácil para um hacker colocar as mãos no arquivo de senha. Em vez disso, salve uma transformação segura da senha.
Gerenciar sessões remotas
Você pode assumir determinados pressupostos quando todo seu aplicativo é executado em um único computador. Por um lado, uma vez que o usuário se autenticou, você não precisa se preocupar com o fato de ele ser transformado em uma pessoa diferente. Os aplicativos que se comunicam com um servidor remoto não podem fazer essa suposição - um hacker que está ouvindo a linha pode esperar até que o usuário se autentique e depois seqüestra a sessão.
O que o programador de segurança mental pode fazer para evitar essa situação? Você não quer repetidamente pedir ao usuário sua senha apenas para se certificar de que a conexão não foi seqüestrada. A solução alternativa é estabelecer e gerenciar uma sessão . Você faz isso fazendo com que o servidor envie o aplicativo remoto um cookie de sessão uma vez que o usuário se autenticou com sucesso.
Obfuscate seu código
O ofuscamento do código é o ato de tornar o executável como difícil para um hacker entender o possível.
A lógica é simples. Quanto mais fácil é para um hacker entender como seu código funciona, mais fácil será para o hacker descobrir vulnerabilidades.
O único passo mais simples que você pode tomar é certificar-se de que você apenas distribua uma versão do seu programa que não inclui informações de símbolos de depuração. Quando você primeiro cria o arquivo de projeto, certifique-se de selecionar que uma Debug e uma Versão de lançamento devem ser criadas.
Nunca, nunca, distribua versões do seu aplicativo com informações de símbolos incluídas.
Assine seu código com um certificado digital
A assinatura de código funciona gerando um hash seguro do código executável e combinando-o com um certificado emitido por uma autoridade de certificação válida. O processo funciona assim: a empresa que cria o programa deve primeiro se registrar com uma das autoridades de certificação.
Uma vez que a autoridade de certificação está convencida de que a Minha Empresa é uma entidade de software válida, ela emite um certificado. Este é um número longo que qualquer um pode usar para verificar se o titular deste certificado é o famoso My Company of San Antonio.
Use criptografia segura sempre que necessário
Como qualquer bom aviso, esta admoestação tem várias partes. Primeiro, "Use criptografia sempre que necessário. "Isso tende a trazer a mente pensamentos sobre a comunicação de informações da conta bancária pela Internet, mas você deve pensar mais geral do que isso.
Os dados que estão sendo comunicados, seja por internet ou em algum menor alcance, são geralmente conhecidos como Dados em movimento. Dados em movimento devem ser criptografados, a menos que seja inútil para um hacker.
Os dados armazenados no disco são conhecidos como Dados em repouso. Estes dados também devem ser criptografados se houver uma chance de o disco ser perdido, roubado ou copiado. As empresas rastreiam rotineiramente os discos rígidos em seus laptops da empresa, caso um laptop seja roubado no scanner de segurança no aeroporto ou deixado em um taxi em algum lugar.
Pequenos dispositivos de armazenamento portáteis, como drives de polegar, são especialmente susceptíveis de serem perdidos - os dados desses dispositivos devem ser criptografados.