Curso MIT "Segurança de sistemas de computadores". Aula 12: Segurança de Rede, Parte 3

Instituto de Tecnologia de Massachusetts. Curso de Aula nÂș 6.858. "Segurança de sistemas de computador". Nikolai Zeldovich, James Mickens. 2014 ano


Computer Systems Security é um curso sobre o desenvolvimento e implementação de sistemas de computador seguros. As palestras abrangem modelos de ameaças, ataques que comprometem a segurança e técnicas de segurança baseadas em trabalhos científicos recentes. Os tópicos incluem segurança do sistema operacional (SO), recursos, gerenciamento de fluxo de informaçÔes, segurança de idiomas, protocolos de rede, segurança de hardware e segurança de aplicativos da web.

Palestra 1: “Introdução: modelos de ameaças” Parte 1 / Parte 2 / Parte 3
Palestra 2: “Controle de ataques de hackers” Parte 1 / Parte 2 / Parte 3
Aula 3: “Estouros de Buffer: ExploraçÔes e Proteção” Parte 1 / Parte 2 / Parte 3
Palestra 4: “Separação de PrivilĂ©gios” Parte 1 / Parte 2 / Parte 3
Palestra 5: “De onde vĂȘm os sistemas de segurança?” Parte 1 / Parte 2
Palestra 6: “Oportunidades” Parte 1 / Parte 2 / Parte 3
Palestra 7: “Sandbox do Cliente Nativo” Parte 1 / Parte 2 / Parte 3
Aula 8: “Modelo de Segurança de Rede” Parte 1 / Parte 2 / Parte 3
Aula 9: “Segurança de aplicativos da Web” Parte 1 / Parte 2 / Parte 3
Palestra 10: “Execução Simbólica” Parte 1 / Parte 2 / Parte 3
Aula 11: “Linguagem de Programação Ur / Web” Parte 1 / Parte 2 / Parte 3
Aula 12: Segurança de rede Parte 1 / Parte 2 / Parte 3

Aluno: existe algum tipo de assinatura para domĂ­nios de nĂ­vel superior inexistentes?

Professor: Eu acho que sim. Um domínio de ponto é apenas outro domínio e implementa o mesmo mecanismo. Atualmente, os domínios "ponto" e "ponto.com" usam a SEC DNS, e existem todos esses registros que dizem, por exemplo, que .in é o nome de domínio que existe e o nome "ponto" também existe, e não hå mais nada entre eles. Portanto, nos domínios de nível superior, todas essas coisas estão presentes.



Aluno: além do perigo de ataques de DoS, por que nos preocupamos tanto com a repetição de nomes de domínio no mit.edu?

Professor: nĂŁo sei ao certo. De qualquer forma, o AFS possui um arquivo de texto que lista todos esses nomes de domĂ­nio do MIT. Mas acho que, em geral, algumas empresas se sentem um pouco estranhas nesse sentido, porque geralmente tĂȘm nomes internos que estĂŁo no DNS e que nĂŁo podem ser dados a pessoas de fora. Penso que, de fato, esta Ă© uma ĂĄrea confusa que nunca foi formalizada e que nĂŁo explica exatamente o que garante que os usuĂĄrios do DNS ofereçam. Geralmente, as pessoas assumem que, se existir um nome confidencial, no caso do DNS, ele nĂŁo serĂĄ divulgado.

Penso que este é outro local em que este sistema não possui uma especificação clara em termos do que deve ou não fornecer.

Aluno: Ă© possĂ­vel definir o perĂ­odo de validade de uma assinatura destacando-a de alguma forma?

Professor: essas coisas tĂȘm uma data de validade, por exemplo, vocĂȘ pode assinar que esse conjunto de nomes Ă© vĂĄlido por uma semana e, em seguida, os clientes, se tiverem um relĂłgio sincronizado, podem rejeitar as mensagens antigas assinadas.

Portanto, podemos assumir que discutimos ataques adivinhando os nĂșmeros de sequĂȘncia TCP SYN. Outra questĂŁo interessante sobre o TCP Ă© o ataque DDoS, que explora o fato de o servidor estar em algum estado. Se vocĂȘ observar esse handshake, que foi desenhado anteriormente no quadro, verĂĄ que, quando o cliente estabelece uma conexĂŁo com o servidor, o servidor deve lembrar o nĂșmero de sĂ©rie do cliente SNc. Portanto, o servidor deve suportar alguma estrutura de dados em um bloco separado, o que mostra que esse nĂșmero de sequĂȘncia Ă© usado para esta conexĂŁo.



Este Ă© um tipo de tabela em que o nĂșmero de sequĂȘncia SN Ă© armazenado e que a conexĂŁo cliente-servidor possui o nĂșmero de sequĂȘncia SNc. O motivo pelo qual o servidor deve manter essa tabela Ă© porque ele precisa descobrir qual o nĂșmero de sequĂȘncia SNc correto deve levar posteriormente, por exemplo, SNc + 1. AlĂ©m disso, o servidor tambĂ©m precisa armazenar nĂșmeros de SNs, que sĂŁo muito mais importantes, pois mostram ao servidor que a conexĂŁo Ă© estabelecida com o "cara certo".

O problema Ă© que esta tabela nĂŁo possui uma borda real. Dessa forma, vocĂȘ pode obter pacotes de alguma mĂĄquina sem saber quem os estĂĄ enviando. VocĂȘ acaba de obter um pacote que se parece com C-> S com um endereço de origem que afirma ser C. Para potencialmente aceitar essa conexĂŁo desse endereço IP, vocĂȘ deve criar uma entrada na tabela. AlĂ©m disso, esses registros existem por um longo tempo, porque, talvez, alguĂ©m estabeleça uma conexĂŁo com vocĂȘ a partir de um local muito distante e, ao mesmo tempo, muitos pacotes sejam perdidos. Na pior das hipĂłteses, pode levar, por exemplo, um minuto atĂ© que alguĂ©m termine esse handshake TCP. Portanto, vocĂȘ deve manter esse estado na pilha TCP por um tempo relativamente longo e nĂŁo hĂĄ como adivinhar se serĂĄ vĂĄlido ou nĂŁo.

Portanto, o ataque de DoS mais comum contra a maioria das pilhas TCP criadas pelas pessoas Ă© a transmissĂŁo simples de um grande nĂșmero de pacotes. Se eu sou um invasor, basta enviar um grande nĂșmero de pacotes SYN para um servidor especĂ­fico e causar o estouro dessa tabela.

O problema Ă© que, na melhor das hipĂłteses, um invasor simplesmente usa o mesmo endereço IP de origem. Nesse caso, vocĂȘ pode simplesmente dizer que cada cliente tem permissĂŁo apenas para duas entradas, ou algo assim. E entĂŁo o invasor pode usar no mĂĄximo 2 duas entradas na tabela.

O problema, é claro, é que um invasor pode falsificar endereços IP de clientes e fazer com que pareçam aleatórios. Então, serå muito difícil para o servidor distinguir quem estå tentando estabelecer uma conexão com ele - um invasor ou algum cliente que o servidor nunca ouviu falar antes.

Portanto, se vocĂȘ procurar algum site que aceite conexĂ”es de qualquer lugar do mundo, isso serĂĄ um grande problema. Como vocĂȘ nega o acesso a todos ou deve poder armazenar o estado para a maioria das tentativas de conexĂŁo falsas.

Portanto, esse é um problema para o TCP e a maioria dos protocolos que permitem um tipo de iniciação de conexão, no qual o servidor deve salvar o estado. Mas hå algumas correçÔes implementadas no TCP sobre as quais falaremos em um segundo, e elas tentarão lidar com esse problema, chamado SYN Flooding in TCP.



Em geral, esse Ă© um problema que vocĂȘ deve conhecer e tentar evitar em qualquer protocolo que esteja desenvolvendo. VocĂȘ deve especificar que o servidor nĂŁo deve salvar o estado atĂ© poder autenticar e identificar o cliente. Porque somente apĂłs a autenticação do cliente Ă© possĂ­vel tomar uma decisĂŁo se Ă© permitido conectar-se, por exemplo, apenas uma vez; nesse caso, o servidor nĂŁo precisa salvar o estado para esta conexĂŁo.

O problema Ă© que vocĂȘ garante a preservação do estado antes mesmo de saber quem estĂĄ se conectando a vocĂȘ. Vamos ver como podemos combater o ataque de inundação do SYN Flooding, que Ă© o servidor que estĂĄ acumulando muito estado.

VocĂȘ pode alterar o TCP novamente, por exemplo, corrigi-lo facilmente com criptografia ou outra coisa ou alterar o que Ă© responsĂĄvel por salvar algum estado. Mas o fato Ă© que precisamos usar o TCP como ele Ă©. PoderĂ­amos resolver esse problema sem modificar o protocolo TCP existente?

Este é novamente um exercício para tentar descobrir exatamente quais truques poderíamos executar, ou melhor, quais suposiçÔes poderíamos deixar em paz e ainda assim aderir ao formato de cabeçalho TCP existente ao trabalhar com eles.

E o truque Ă© encontrar uma maneira inteligente de criar um servidor sem estado, para que ele nĂŁo precise armazenar esta tabela na memĂłria. Isso pode ser feito escolhendo SNs com cuidado, ou seja, em vez da fĂłrmula que consideramos anteriormente e onde tivemos que adicionar essa função, escolheremos os nĂșmeros de sĂ©rie de uma maneira completamente diferente. Vou lhe dar a fĂłrmula exata, e depois falaremos sobre por que Ă© realmente interessante e quais sĂŁo as boas propriedades.

Se o servidor detectar que estå sofrendo um ataque desse tipo, entrarå no modo em que seleciona SNs usando a fórmula com a mesma função F que consideramos anteriormente.



Esta função possui o endereço IP de origem, o endereço IP de destino, da mesma forma que antes - porta de origem, porta de destino, carimbo de data e hora e chave. E vamos combinar essa função com um carimbo de data / hora, em vez de "granulação grossa", com alguns minutos de tamanho. HĂĄ uma separação entre essas duas partes do cabeçalho - a função e o registro de data e hora, que nĂŁo precisam de muitos bits. Esqueci como exatamente esse protocolo funciona em um computador real, mas vocĂȘ pode imaginar que o carimbo de data / hora leva 8 bits e o restante da fĂłrmula do nĂșmero de sequĂȘncia Ă© de 24 bits.

EntĂŁo, por que esse Ă© um bom plano? O que estĂĄ acontecendo aqui? Por que essa fĂłrmula estranha Ă© necessĂĄria? VocĂȘ deve se lembrar do que tentamos obter dos nĂșmeros de sĂ©rie. Duas coisas acontecem aqui.

O primeiro Ă© a proteção contra pacotes duplicados. Permaneceu na placa um circuito com esse nĂșmero de sĂ©rie Ă  moda antiga, ao qual adicionamos uma função para impedir a duplicação de pacotes de conexĂ”es anteriores.



Acontece que as pessoas nĂŁo conseguiram encontrar uma maneira melhor de se proteger de ataques como o SYN Flooding, exceto usar esse plano de ação, que funciona bem em algumas situaçÔes. Era um plano, mas outro era uma função de data e hora em que abandonamos esse componente do estilo antigo. Em vez disso, focaremos em garantir que, se alguĂ©m nos fornecer esse nĂșmero de sequĂȘncia ACK (SNs) em resposta ao pacote, essa pessoa serĂĄ o cliente "certo".

VocĂȘ se lembra que, para evitar ataques de falsificação de IP, meio que confiamos nesse valor (SNs). Afinal, se o servidor enviar esse valor de SNs para o cliente na segunda etapa, esperamos que somente esse cliente possa nos enviar o valor corrigido de SNs na terceira etapa, concluindo a conexĂŁo.

É por isso que vocĂȘ teve que armazenar esse nĂșmero de sĂ©rie em uma tabela, porque, caso contrĂĄrio, como vocĂȘ saberia se essa Ă© uma resposta real ou falsa? A razĂŁo para usar esta função F Ă© que agora nĂŁo podemos salvar esta tabela na memĂłria.

Em vez disso, quando a tentativa de conexĂŁo Ă© mostrada, mostrada na primeira etapa, na segunda etapa calculamos os SNs usando essa fĂłrmula e simplesmente os enviamos de volta ao cliente que deseja entrar em contato conosco, e esquecemos essa conexĂŁo.



EntĂŁo, quando o terceiro pacote chegar e seu valor (SNs) corresponder ao que esperamos ver, significa que alguĂ©m recebeu nossa resposta na segunda etapa e finalmente a enviou para nĂłs. Finalmente, apĂłs esta terceira etapa, podemos colocar o registro real dessa conexĂŁo TCP na memĂłria. Essa Ă© uma maneira de adiar a persistĂȘncia do servidor atĂ© que o cliente envie o valor exato do nĂșmero de sĂ©rie. A construção dessa construção possibilita verificar se o cliente enviou ao servidor exatamente a resposta que se espera dele e nĂŁo algum valor arbitrĂĄrio.

Aluno: o SNc dura apenas um tempo limitado?

Professor: sim, o servidor nĂŁo armazena o valor SNc permanentemente, e isso nĂŁo Ă© muito bom. Eu nĂŁo mostrei isso no diagrama, mas aqui no final da terceira linha hĂĄ um campo que mostra que esse pacote nĂŁo possui dados, mas inclui o nĂșmero de sequĂȘncia SNc apenas porque possui esse campo.



Assim, o servidor pode restaurar o valor do SNc, porque o cliente o incluirĂĄ neste pacote de qualquer maneira. Anteriormente, isso nĂŁo importava, mas agora Ă© como se fosse relevante. NĂŁo vamos verificar nada aqui, mas a existĂȘncia de tal campo Ă© em si uma coisa boa. No entanto, tem algumas conseqĂŒĂȘncias tristes. Por exemplo, se vocĂȘ usar algumas coisas complicadas que podem ser abusadas aqui. Mas isso nĂŁo Ă© tĂŁo ruim quanto sobrecarregar a memĂłria do servidor com solicitaçÔes do cliente.

Porque a Ășnica coisa que nos preocupa Ă© liberar o armazenamento dessa tabela e a confiança de que as conexĂ”es sĂŁo estabelecidas com clientes genuĂ­nos. E se esse cliente estabelecer um milhĂŁo de conexĂ”es comigo, pararei de aceitar solicitaçÔes dele, Ă© bastante simples. O problema Ă© que Ă© difĂ­cil distinguir endereços falsos de endereços de clientes genuĂ­nos.

Aluno: preciso manter um registro de data e hora?

Professor: sim, hĂĄ uma coisa inteligente! Quando obtemos o valor dos SNs na terceira etapa, precisamos descobrir como calcular os dados de entrada para esta função F, a fim de verificar se esse valor estĂĄ correto. Portanto, pegamos o carimbo de data / hora localizado no final da embalagem e o usamos para calcular dentro da função. Tudo o resto podemos restaurar. Sabemos quem acabou de nos enviar o terceiro passo e pacote, temos todos esses campos e nossa chave, que, novamente, ainda Ă© secreta, e o carimbo de data e hora dos Ășltimos 8 bits da sequĂȘncia. Nesse caso, pode acontecer que excluamos carimbos de data / hora muito antigos, simplesmente banindo conexĂ”es antigas.

Aluno: Eu acredito que vocĂȘ usa isso quando Ă© atacado, apenas porque perde 8 bits de segurança ou por algum outro motivo?

Professor: sim, isso não é muito bom, tem muitas propriedades ruins. De certa forma, estamos realmente perdendo 8 bits de segurança. Porque agora a parte indiscutível é de apenas 24 bits em vez de 32.

Outro problema Ă© o que acontece se vocĂȘ perder determinados pacotes? No TCP, geralmente Ă© aceito que, se o terceiro pacote for perdido, o cliente poderĂĄ estar esperando por nada. Ou, desculpe-me, talvez o protocolo que executamos sobre essa conexĂŁo TCP seja um protocolo que pressupĂ”e que o servidor inicialmente pretenda dizer algo, entĂŁo eu me conecto e apenas ouço a resposta. E no SMTP, por exemplo, o servidor deve me enviar algo como uma saudação por meio do protocolo. Suponha que eu me conecte ao servidor SMTP, envie o terceiro pacote, acho que fiz tudo e apenas aguarde o servidor me responder, por exemplo:

"OlĂĄ, este Ă© um servidor SMTP, por favor me envie seu email!"

Portanto, este terceiro pacote pode ser perdido. No TCP real, o servidor lembra que, na segunda etapa, respondeu ao cliente, mas nunca recebeu um terceiro pacote de resposta. Portanto, o servidor enviarĂĄ ao cliente novamente um segundo pacote para reiniciar o terceiro pacote. Obviamente, se o servidor nĂŁo armazenar nenhum estado, ele nĂŁo farĂĄ ideia do que enviar. Isso torna o estabelecimento de uma conexĂŁo um tanto problemĂĄtico, porque ambos os lados esperam um passo recĂ­proco um do outro. O servidor nem sabe que o cliente estĂĄ aguardando uma resposta e o cliente estĂĄ aguardando a resposta do servidor, embora nĂŁo atenda porque nĂŁo armazena o estado. Portanto, esse Ă© outro motivo pelo qual vocĂȘ nĂŁo usa o modo produtivo do servidor constantemente.

Aluno: vocĂȘ tambĂ©m pode ter perda de dados se estabelecer duas conexĂ”es de curta duração a partir de um host imediatamente apĂłs o outro.

Professor: sim, claro. Outra coisa Ă© que nos recusamos a usar esse estilo antigo de nĂșmero de sequĂȘncia ISN, o que aumentou a independĂȘncia dessas mĂșltiplas conexĂ”es em um curto espaço de tempo. Eu acho que hĂĄ uma sĂ©rie de compromissos aqui, acabamos de falar sobre trĂȘs deles, entĂŁo hĂĄ mais algumas razĂ”es para preocupação.

Se pudéssemos desenvolver um protocolo a partir do zero, buscando o melhor, poderíamos apenas ter um bom volume de 64 bits separado para a função F e um volume de 64 bits para o registro de data e hora, e poderíamos uså-lo constantemente, sem desistir todas essas coisas legais.

Aluno: os SNs no segundo e terceiro passo devem ser os mesmos?

Professor: Ă© claro, porque, caso contrĂĄrio, o servidor nĂŁo poderĂĄ concluir que este cliente recebeu nosso pacote. Se o servidor nĂŁo verificar se esses SNs tĂȘm o mesmo significado de antes, isso pode ser ainda pior - porque eu poderia falsificar uma conexĂŁo de um endereço IP arbitrĂĄrio na primeira etapa e obter essa resposta na segunda etapa. Ou eu nem receberia essa resposta porque ela Ă© direcionada para um endereço IP diferente. Na terceira etapa, eu estabeleço uma conexĂŁo a partir de outro endereço IP. Nesse caso, o servidor suportaria a conexĂŁo estabelecida, espere que eu envie dados e assim por diante.



Aluno: mas o timestamp serĂĄ diferente, certo? Como o servidor pode recontar isso usando um novo carimbo de data e hora se ele nĂŁo armazena o estado?

Professor: como eu disse, esses registros de data e hora sĂŁo bastante "granulares" e sĂŁo classificados em minutos. Se vocĂȘ se conectar no mesmo minuto, tudo estarĂĄ em ordem, se vocĂȘ se conectar na borda do minuto - isso Ă© muito ruim.

Outro problema com este circuito é que ele é imperfeito de vårias maneiras. Mas a maioria dos sistemas em funcionamento, incluindo Linux, tem maneiras de detectar muitas entradas nesta tabela. E quando a ameaça de seu transbordamento ocorre, o sistema muda para outro esquema.

Aluno: se um invasor controla um grande nĂșmero de endereços IP e faz o que vocĂȘ disse, mesmo se vocĂȘ alternar ...

Professor: sim, vocĂȘ realmente pode fazer pouco. A razĂŁo pela qual esse esquema nos importou tanto foi porque querĂ­amos filtrar ou de alguma forma distinguir entre os agressores e os "mocinhos". Se um invasor tiver mais endereços IP e apenas controlar mais mĂĄquinas do que os mocinhos, ele poderĂĄ se conectar ao nosso servidor, solicitar vĂĄrias pĂĄginas da web ou manter contato.

E entĂŁo serĂĄ muito difĂ­cil para o servidor determinar se as solicitaçÔes sĂŁo recebidas de clientes legĂ­timos ou se Ă© apenas um invasor que liga os recursos do servidor. EntĂŁo vocĂȘ estĂĄ absolutamente certo. Esse esquema sĂł funciona se o invasor tiver um pequeno nĂșmero de endereços IP e desejar obter um efeito.

E isso Ă© motivo de preocupação, porque hoje alguns invasores controlam um grande nĂșmero de computadores invadidos por usuĂĄrios comuns. Isso lhes permite criar DoS com uma frota de mĂĄquinas localizadas em todo o mundo, e Ă© muito difĂ­cil se defender.

Quero mencionar mais uma coisa interessante - a negação do serviço DoS é ruim por si só, mas ainda pior quando os próprios protocolos contribuem para esse ataque. O invasor sabe disso e ataca principalmente sistemas com protocolos como o DNS. O protocolo DNS inclui um cliente enviando uma solicitação ao servidor e o servidor envia uma resposta de volta ao cliente. E, em muitos casos, o tamanho da resposta em bytes é muito maior que o volume da solicitação.



VocĂȘ perguntou sobre o servidor mit.edu. , , mit.edu — , mit.edu, , DNS SEC, .

100 , — 1000 . , «» - . , DNS- . 100 - DNS-, , , 1000 .

, . , TCP SYN Flooding, DNS- , . , , « ».

DNS. . , DNS-. , . .

: DNS- 


: , DNS- , - .

: , ?

: , DNS-, . DNS-, . 10 DNS-, , , , , . . , , DNS-, .

, DNS , , , . , .

, , , – , , , . , , . .

DNS- , . , , .

, : «, , »! , , DNS- .

, . - -, . DoS , . , , , , .



, , . , , , .

, , . .

, DHCP, . , , IP-. , , MIT DHCP, , , , IP-, , DNS-, , .

, DHCP DHCP-, , DHCP-. , , . , DHCP IP-, : «, DNS- »! DNS .

, . , BGP, IP-, . , , BGP, : «, IP-!», : „, , “.



, , , IP- . IP- , , IP- . IP- , . , . , , , IP-. , , .

DNS SEC. , , DNS, , . , , , , DNS SEC.

, , , . : , , , , , DoS — . .

Portanto, vocĂȘ deve tentar evitar coisas como ataques SYN Flooding e ataques RST que permitem desconectar um usuĂĄrio de rede arbitrĂĄrio. SĂŁo coisas realmente prejudiciais em um nĂ­vel baixo e difĂ­ceis de corrigir em um nĂ­vel alto. PorĂ©m, mais ou menos, garante a integridade e a confidencialidade dos dados usando criptografia. Falaremos sobre como fazer isso na prĂłxima palestra sobre Cerberus.


A versĂŁo completa do curso estĂĄ disponĂ­vel aqui .

Obrigado por ficar conosco. VocĂȘ gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando a seus amigos, um desconto de 30% para os usuĂĄrios da Habr em um anĂĄlogo exclusivo de servidores bĂĄsicos que inventamos para vocĂȘ: Toda a verdade sobre o VPS (KVM) E5-2650 v4 (6 nĂșcleos) 10GB DDR4 240GB SSD 1Gbps da US $ 20 ou como dividir o servidor? (as opçÔes estĂŁo disponĂ­veis com RAID1 e RAID10, atĂ© 24 nĂșcleos e atĂ© 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 nĂșcleos) 10GB DDR4 240GB SSD de 1Gbps atĂ© dezembro de graça quando pagar por um perĂ­odo de seis meses, vocĂȘ pode fazer o pedido aqui .

Dell R730xd 2 vezes mais barato? Somente nós temos 2 TVs Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 a partir de US $ 249 na Holanda e nos EUA! Leia sobre Como criar um prédio de infraestrutura. classe usando servidores Dell R730xd E5-2650 v4 custando 9.000 euros por um centavo?

Source: https://habr.com/ru/post/pt427093/


All Articles