Protegendo o servidor contra hackers. Qualquer versão Proteção abrangente contra ataques (OOG e outros) Instale as atualizações mais recentes regularmente

É impossível proteger o servidor de acessos externos de uma vez por todas, pois a cada dia novas vulnerabilidades são descobertas e novas formas de hackear o servidor aparecem. Falaremos sobre como proteger servidores contra acesso não autorizado neste artigo.

Os servidores de qualquer empresa podem, mais cedo ou mais tarde, tornar-se alvo de hackers ou ataques de vírus. Normalmente, o resultado de tal ataque é a perda de dados, danos à reputação ou financeiros, portanto, as questões de segurança do servidor devem receber atenção prioritária.

Deve-se entender que a proteção contra hackers de servidores é um conjunto de medidas que inclui monitoramento constante da operação do servidor e trabalho para melhorar a proteção. É impossível proteger o servidor de acessos externos de uma vez por todas, pois a cada dia novas vulnerabilidades são descobertas e novas formas de hackear o servidor aparecem.

Falaremos sobre como proteger servidores contra acesso não autorizado neste artigo.

Formas e métodos de proteger servidores contra acesso não autorizado

Proteção física do servidor

Proteção física. É aconselhável que o servidor esteja localizado em um data center seguro, uma sala fechada e vigiada não deve ter acesso ao servidor;

Configurar autenticação SSH

Ao configurar o acesso ao servidor, use a autenticação por chave SSH em vez de uma senha, pois essas chaves são muito mais difíceis e às vezes simplesmente impossíveis de serem quebradas usando força bruta.

Se você acha que ainda precisa de uma senha, limite o número de tentativas para digitá-la.

Observe se você vir uma mensagem como esta ao fazer login:

Última falha de login: terça-feira, 28 de setembro 12:42:35 MSK 2017 de 52.15.194.10 em ssh:notty
Houve 8.243 tentativas de login malsucedidas desde o último login bem-sucedido.

Isso pode indicar que alguém tentou hackear seu servidor. Neste caso, para configurar a segurança do servidor, altere a porta SSH, limite a lista de IPs a partir dos quais é possível o acesso ao servidor ou instale um software que bloqueie automaticamente atividades excessivamente frequentes e suspeitas.

Instale as atualizações mais recentes regularmente

Para garantir a proteção do servidor, instale imediatamente os patches e atualizações mais recentes para o software de servidor que você usa - sistema operacional, hipervisor, servidor de banco de dados.

É aconselhável verificar novos patches, atualizações e relatórios de bugs/vulnerabilidades todos os dias para evitar ataques que exploram vulnerabilidades de dia zero. Para isso, assine as novidades da empresa desenvolvedora de software, acompanhe suas páginas nas redes sociais.

Proteja suas senhas

Até agora, uma das formas mais comuns de obter acesso a um servidor é hackear a senha do servidor. Portanto, siga recomendações conhecidas, mas relevantes, para não deixar o servidor desprotegido:

  • Não utilize senhas fáceis de adivinhar, como o nome da sua empresa;
  • se você ainda estiver usando a senha padrão do console do administrador, altere-a imediatamente;
  • senhas para serviços diferentes deve ser diferente;
  • se precisar passar uma senha para alguém, nunca envie o endereço IP, login e senha no mesmo e-mail ou mensagem do messenger;
  • Você pode configurar a autenticação de dois fatores para fazer login na sua conta de administrador.

Firewall

  • Certifique-se de que o servidor tenha , esteja configurado e em execução o tempo todo.
  • Proteja o tráfego de entrada e saída.
  • Acompanhe quais portas estão abertas e para quais finalidades, não abra nada desnecessário, a fim de reduzir o número de possíveis vulnerabilidades para hackear o servidor.

Em particular, um firewall é muito útil para proteger o servidor contra ataques ddos, porque você pode criar rapidamente regras de firewall proibitivas e adicionar os endereços IP de onde vem o ataque ou bloquear o acesso a determinados aplicativos usando determinados protocolos.

Monitoramento e detecção de intrusão

  • Limite o software e os serviços em execução no seu servidor. Verifique periodicamente tudo o que você está executando e, se encontrar algum processo desconhecido, exclua-o imediatamente e comece a verificar se há vírus.
  • Verifique periodicamente se há sinais de adulteração. Novas informações podem indicar hack contas usuários que você não criou, movendo ou excluindo um arquivo /etc/syslog.conf, arquivos excluídos/etc/sombra E /etc/senha.
  • Monitore o desempenho do seu servidor, veja sua velocidade normal e rendimento, para que você possa notar desvios, por exemplo, quando a carga no servidor se tornar significativamente maior do que o normal.

Usando criptografia VPN e SSL/TLS

Se necessário acesso remoto ao servidor, só deve ser permitido a partir de determinados endereços IP e ocorrer através de uma VPN.

O próximo passo para garantir a segurança pode ser a configuração do SSL, que permitirá não só criptografar dados, mas também verificar a identidade de outros participantes da infraestrutura de rede, emitindo-lhes os certificados apropriados.

Verificação de segurança do servidor

Seria uma boa ideia verificar de forma independente a segurança do servidor usando um método pentest, ou seja, modelagem de ataque para encontrar vulnerabilidades potenciais e eliminá-las em tempo hábil. É aconselhável envolver especialistas neste segurança da informação, porém, alguns testes podem ser feitos de forma independente, utilizando programas para hackear servidores.

O que mais ameaça os servidores além de hackear?

Um servidor pode falhar por vários motivos além de hackers. Por exemplo, pode ser uma infecção por malware ou simplesmente uma falha física de qualquer um dos componentes.

Portanto, as medidas para proteger o servidor devem incluir:

  • Instalação e atualização de programas de proteção do servidor - antivírus.
  • Cópias criptografadas regulares de dados, pelo menos uma vez por semana, pois, segundo as estatísticas, os discos rígidos dos servidores estão em primeiro lugar na frequência de falhas. Certificar-se backup armazenados em um ambiente fisicamente seguro.
  • Garantir fornecimento de energia ininterrupto para a sala do servidor.
  • Prevenção física oportuna de servidores, incluindo limpeza de poeira e substituição de pasta térmica.

A experiência dos especialistas da Integrus diz-nos que a melhor proteção contra este tipo de ameaça é a aplicação das melhores práticas no domínio dos sistemas de proteção de servidores.

Para garantir a segurança dos servidores dos nossos clientes, utilizamos uma combinação de ferramentas: firewalls, antivírus, tecnologias de segurança/gestão de eventos (SIM/SEM), tecnologias de deteção/proteção de intrusão (IDS/IPS), tecnologias de análise de comportamento de rede (NBA). , é claro, manutenção preventiva regular de servidores e organização de salas de servidores seguras prontas para uso. Isso permite reduzir ao mínimo os riscos de invasão ou falha do servidor por outros motivos.

Estamos prontos para realizar uma auditoria de segurança nos servidores da sua empresa, consultar especialistas e realizar todo tipo de trabalho para configurar a proteção dos equipamentos dos servidores.

Olá a todos da equipe UNITWAY PW. Com este tópico gostaríamos de demonstrar a ausência de concorrência desleal da nossa parte e a ausência de concorrência negra, feia e enganosa do projeto NewDestiny.

Aqui está uma lista de soluções para ataques que já foram usados ​​​​pelos administradores do NewDestiny loko9988, TyrikMan (o ataque OOG de ontem foi do endereço IP de Yoshkar Ola), Killer_Pooh (um ataque da cidade de Volzhsky também foi registrado). Além dos ataques contra nós, recebemos informações sobre um ataque a vários outros servidores, que esteve associado à nossa descoberta. Ao publicar uma série de correções para esses ataques, demonstramos nosso não envolvimento em ataques a ninguém, apesar da posição claramente preocupada do administrador do Zzebra PW (mirthost) em relação ao nosso projeto. Não guardamos absolutamente nenhum rancor de todos que caíram no artigo amarelo sobre nós; cada um tem sua própria cabeça sobre os ombros;


E isso é apenas parte de suas contas.

Um dos motivos para a publicação deste tópico foram os rumores que chegaram até nós. A essência desses rumores é que loko9988 ataca servidores não apenas por causa da concorrência, mas também para oferecer proteção a esses servidores através dele.

Proteção contra ataques OOG baseados em iptables:
Em primeiro lugar, criamos regras de firewall com script, você pode chamá-las como quiser.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m comprimento --length 500:65535 -j LOG --log-prefix "PW"

Clique para expandir...

Com esta regra, gravamos todos os pacotes de jogos da porta 29000 com tamanhos variando de 500 a 65535 bytes.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m comprimento --length 500:65535 -m recentes --name pacotes --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recentes --name pacotes --update --seconds 1 --hitcount 100 -j REJECT

Clique para expandir...

Com essas regras, bloqueamos um usuário se o servidor recebeu dele mais de 100 pacotes de tamanho 500 - 65535 bytes em 1 segundo na porta 29000 (jogo).

iptables -A INPUT -p tcp -m multiport --dports 29000 -m comprimento --length SIZE -m recente --nome pacote1 --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recente --name packet1 --update --seconds 15 --hitcount 3 -j REJECT

Clique para expandir...

Com essas regras, bloqueamos usuários que enviaram mais de 3 pacotes em 15 segundos para a porta 29000. SIZE - tamanho do pacote em bytes.
Como rastrear o tamanho do pacote em bytes?
Após a primeira regra, onde registramos todos os pacotes do jogo, você poderá vê-los no arquivo /var/log/syslog ou equipe dmesg no console do servidor.
Quando houver um ataque no syslog, haverá muitos pacotes idênticos em pouco tempo.

PW IN=ipip1 OUT= MAC= SRC= ENDEREÇO ​​IP DO USUÁRIO DST=*.*.*.* LEN=547 TOS=0x00 PREC=0x00 TTL=241 ID=13328 DF PROTO=TCP SPT=22511 DPT=63947 WINDOW=254 RES=0x00 ACK PSH URGP=0

Clique para expandir...

No exemplo acima, o tamanho do pacote é “LEN=547”.

Resolvemos a proteção OOG. Vamos passar para outras maneiras pelas quais o NewDestiny compete.
Contas brutais. Tudo é completamente simples aqui:
#bloquear login de força bruta

iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NOVO -m recente --name bruto --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NOVO -m recente --name bruto --update --seconds 30 --hitcount 3 -j REJECT

Clique para expandir...

Com esta regra, bloqueamos o IP de um usuário por 30 segundos se ele tiver feito mais de 3 solicitações para se conectar à porta 29000.
  • Faça uma restrição completa nas portas, exceto a de jogos via iptables.
  • Conecte-se ao servidor usando a chave ssh (chaves) com uma palavra de código.
  • Usar versões mais recentes mysql, apache2 e outros pacotes importantes.
  • Após carregar via OOG, use logrotate, caso contrário, quando backup covis BATER Seu servidor será totalmente utilizado. Isso pode resultar em um hack.
  • Não use software de terceiros no servidor do jogo.
  • Use um filtro de senha de jogador personalizado. Em apenas algumas horas, ocorreram mais de 50.000 tentativas de autorização inválidas em nosso login. 30% dos nossos jogadores tinham os mesmos logins desses pares de login-senha.
Preferimos uma concorrência leal; não temos tempo nem recursos financeiros extras para atacar. Não mexa com essas pessoas, isso pode acabar mal.

A maioria dos programas deve interagir com o usuário inserindo determinados dados, seja nome completo, altura, peso a ser inserido no banco de dados ou dimensões geométricas de algum objeto para o qual algo precisa ser calculado. Todos esses dados são inseridos pelo usuário - uma pessoa, o que significa que qualquer coisa pode vir em resposta. Qual será o resultado do programa se o usuário escrever em palavras em vez da idade necessária? Muito provavelmente, o programa irá travar ou congelar, mas não se tiver “proteção contra tolos”.

Por que um programa pode falhar ou congelar? O programa tentará converter o conjunto de caracteres em um número, o que não será possível, o que significa que o posterior funcionamento da aplicação não está definido. Portanto, é muito importante organizar a estrutura do programa para que ao entrar inesperado para o programa de dados (incorreto do ponto de vista do formato requerido: é necessário um número, mas uma palavra é inserida), o aplicativo não travou, mas informou ao usuário que havia ocorrido um erro e pediu para repetir a entrada. Isto é “à prova de idiotas”.

Implementando proteção contra falhas em C

Para implementar uma boa segurança na inserção de vários dados numéricos (int, double...), é necessário ler não os números em si, mas toda a string de entrada e só então analisar a entrada. A linguagem C tem uma função muito boa sscanf(const char *, const char *, args) , que funciona de forma semelhante à função scanf(const char *, args), retornando o número de argumentos lidos com sucesso, apenas os dados são lidos não do fluxo de entrada padrão, mas da string passada para ele como o primeiro argumento.

Vejamos alguns exemplos de funções que implementam a prova de erros usando a função sscanf.

Inserindo um número inteiro com verificação de entrada incorreta

int get_integer(const char *msg) ( char answer; // linha para leitura int n; // inteiro final printf("%s", msg); // exibe prompt fgets(answer, sizeof(answer), stdin); // lê a linha // até que um número inteiro seja lido while (sscanf(answer, "%d", &n) != 1) ( printf("Entrada incorreta. Tente novamente: "); // imprime uma mensagem sobre o erro fgets (resposta, sizeof(resposta), stdin); // e leia a linha novamente) return n;

Para ler um número inteiro, o algoritmo lê a string inteira e então tenta obter um número inteiro dela. Se isso falhar, a função exibirá uma mensagem de erro solicitando que você repita a entrada até que o valor inteiro correto seja inserido.

Inserindo um número real com verificação de entrada incorreta

double get_double(const char *msg) ( char answer; // linha para ler double x; // número real final printf("%s", msg); // exibe um prompt de entrada fgets(answer, sizeof(answer), stdin); // lê a linha // até que um número real seja lido while (sscanf(answer, "%lf", &x) != 1) ( printf("Entrada incorreta. Tente novamente: "); // imprime um mensagem sobre erro fgets(answer, sizeof(answer), stdin); // e leia a linha novamente) return x // retorna o número real correto)

Inserindo um ponto no plano de coordenadas (estrutura com dois campos reais)

// descrição da estrutura de dados typedef struct point_t ( double x; // coordenada x double y; // coordenada y ) point_t; point_t get_point(const char *msg) ( char answer; // linha para ler point_t point; // ponto final printf("%s", msg); // exibe um prompt de entrada fgets(answer, sizeof(answer), stdin ); // lê a linha // até que ambas as coordenadas do ponto sejam lidas while (sscanf(answer, "(%lf,%lf)", &point.x, &point.y) != 2) ( printf("Incorrect input. Tente novamente: "); // exibe uma mensagem de erro fgets(answer, sizeof(answer), stdin); // e lê a linha novamente ) return point; // retorna o ponto correto )

Como pode ser visto nos exemplos, o recurso da função sscanf que retorna o número de argumentos lidos permite controlar a exatidão dos dados inseridos no formato especificado, e a leitura de toda a linha protege contra o fato de caracteres de espaço ou quebras de linha "\n" permanecerá no fluxo de entrada, o que muitas vezes força você a desperdiçar. Não leva uma hora ou mesmo um dia para encontrar um erro.

Análise