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 3Palestra 2: âControle de ataques de hackersâ
Parte 1 /
Parte 2 /
Parte 3Aula 3: âEstouros de Buffer: ExploraçÔes e Proteçãoâ
Parte 1 /
Parte 2 /
Parte 3Palestra 4: âSeparação de PrivilĂ©giosâ
Parte 1 /
Parte 2 /
Parte 3Palestra 5: âDe onde vĂȘm os sistemas de segurança?â
Parte 1 /
Parte 2Palestra 6: âOportunidadesâ
Parte 1 /
Parte 2 /
Parte 3Palestra 7: âSandbox do Cliente Nativoâ
Parte 1 /
Parte 2 /
Parte 3Aula 8: âModelo de Segurança de Redeâ
Parte 1 /
Parte 2 /
Parte 3Aula 9: âSegurança de aplicativos da Webâ
Parte 1 /
Parte 2 /
Parte 3Palestra 10: âExecução SimbĂłlicaâ
Parte 1 /
Parte 2 /
Parte 3Aula 11: âLinguagem de Programação Ur / Webâ
Parte 1 /
Parte 2 /
Parte 3Aula 12: Segurança de rede
Parte 1 /
Parte 2 /
Parte 3 Aluno: talvez vocĂȘ ainda tenha um problema de conflito de interesses, porque poderia usar 32 bits para endereços pares e ter muitas portas para cada um deles. VocĂȘ provavelmente tem um conflito de nĂșmeros de sequĂȘncia de todas essas conexĂ”es que obtĂ©m?
Professor: verifica
- se que esses nĂșmeros de sequĂȘncia sĂŁo especĂficos para o endereço IP e o nĂșmero da porta do par de origem / destino. Portanto, se essas sĂŁo portas diferentes, elas nĂŁo interferem uma com a outra. Especificamente, as portas tĂȘm nĂșmeros de sĂ©rie mais baixos.
Aluno: se os nĂșmeros de sĂ©rie forem globais, o invasor poderĂĄ entrar na conexĂŁo entre outros clientes?
Professor: Sim, este Ă© um bom ponto. De fato, se o servidor aumenta o nĂșmero de sĂ©rie, por exemplo, em 64k para cada conexĂŁo, vocĂȘ se conecta ao servidor e, em seguida, outras 5 pessoas se conectam a ele, e aqui vocĂȘ pode organizar um ataque. EntĂŁo, atĂ© certo ponto, vocĂȘ estĂĄ certo, Ă© um pouco problemĂĄtico. Por outro lado, vocĂȘ provavelmente poderia fazer com que um pacote da Ășltima linha de S-> A fosse entregue imediatamente antes desse pacote na primeira linha de C-> S. Se vocĂȘ enviar seus pacotes um apĂłs o outro, hĂĄ uma boa chance de que eles cheguem ao servidor um por um tambĂ©m.
O servidor receberĂĄ S-> A e responderĂĄ com este nĂșmero de sequĂȘncia (SNs). SerĂĄ diferente dos (SNs) na segunda linha, mas com o nĂșmero de sĂ©rie imediatamente a seguir. E entĂŁo vocĂȘ saberĂĄ exatamente qual nĂșmero de sequĂȘncia (SNs) deve ser incluĂdo no terceiro pacote da sua sequĂȘncia.
Portanto, acho que essa nĂŁo Ă© uma maneira muito confiĂĄvel de conectar-se ao servidor, Ă© baseada em suposiçÔes. Mas se vocĂȘ organizar cuidadosamente seus pacotes da maneira certa, poderĂĄ adivinhar facilmente a sequĂȘncia. Ou talvez vocĂȘ tente vĂĄrias vezes e tenha sorte.
Aluno: mesmo que os nĂșmeros sejam gerados por acaso, vocĂȘ precisa adivinhar um dos 4 bilhĂ”es de nĂșmeros possĂveis. Isso nĂŁo Ă© demais, certo? Eu acho que dentro de um ano vocĂȘ provavelmente poderĂĄ entrar nessa rede.
Professor: sim, vocĂȘ estĂĄ absolutamente certo. VocĂȘ nĂŁo deve confiar muito no TCP em termos de segurança. Porque vocĂȘ estĂĄ certo, sĂŁo apenas 4 bilhĂ”es de palpites. E vocĂȘ provavelmente pode enviar muitos pacotes durante o dia se tiver uma conexĂŁo razoavelmente rĂĄpida.
EntĂŁo, aqui temos um tipo de argumento interessante sobre a falta de confiabilidade do TCP, porque sĂł temos 32 bits. NĂŁo podemos protegĂȘ-lo de nenhuma maneira. Mas acho que muitos aplicativos que dependem desse protocolo suficientemente nĂŁo pensam em segurança, e isso realmente se torna um problema.
Mas vocĂȘ estĂĄ absolutamente certo. Na prĂĄtica, vocĂȘ deseja usar algum tipo de criptografia, alĂ©m de obter garantias mais sĂ©rias de que ninguĂ©m falsificou seus dados, pois vocĂȘ usa chaves de criptografia com mais de 32 bits. Na maioria dos casos, isso ainda Ă© eficaz na prevenção de violaçÔes da conexĂŁo TCP.
Vamos ver agora por que é ruim se as pessoas podem falsificar conexÔes TCP a partir de endereços arbitrårios?
Uma das razÔes pelas quais isso é ruim é que ela pode afetar a autorização com base no endereço IP quando o servidor verifica qual o endereço da solicitação. Se um servidor decidir se deve permitir ou negar a conexão com base no endereço IP, isso pode ser um problema para um invasor que falsificou a conexão a partir de um endereço de origem arbitrårio.
Portanto, um exemplo em que isso foi um problema, hoje esse problema estĂĄ basicamente resolvido, Ă© o uso de uma famĂlia de comandos r, como o rlogin. Antes, era possĂvel executar algo como o rlogin em um computador em, digamos, athena.dialup.mit.edu. E se sua conexĂŁo vier do host do MIT, esse comando rlogin serĂĄ bem-sucedido se vocĂȘ disser: "Sim, sou o usuĂĄrio de Alice neste computador, deixe-me fazer login como usuĂĄrio de Alice em outro computador". E essa operação serĂĄ permitida, pois todos os computadores da rede mit.edu sĂŁo confiĂĄveis ââpara fazer essas declaraçÔes.
Devo dizer que a conexĂŁo discada nunca teve esse problema. Este composto usou Cerberus desde o inĂcio. Mas outros sistemas, Ă© claro, tinham esses problemas. E este Ă© um exemplo de uso de um endereço IP em um mecanismo de autenticação de conexĂŁo quando o sistema verifica se o cliente que estĂĄ chamando o servidor Ă© confiĂĄvel. EntĂŁo, o que costumava ser um problema nĂŁo Ă© mais um problema. Mas confiar no IP ainda parece um plano ruim.

Agora o rlogin nĂŁo estĂĄ mais em uso, foi recentemente substituĂdo pelo shell SSH seguro, que Ă© um excelente protocolo de camada de rede. Por outro lado, existem muitos outros exemplos de protocolos que dependem de autorização baseada em endereço IP. Um deles Ă© o SMTP. Ao enviar um email, vocĂȘ usa o SMTP para conversar com algum servidor de email para enviar mensagens. Para evitar spam, muitos servidores SMTP aceitam apenas mensagens recebidas de um endereço IP de origem especĂfico. Por exemplo, o servidor de email Comcast aceita apenas emails de endereços IP da Comcast. O mesmo vale para servidores de correio MIT - eles aceitarĂŁo apenas emails de endereços IP do MIT. Mas tĂnhamos pelo menos um servidor que nĂŁo funcionava como deveria, usando autenticação IP.
Tudo aqui nĂŁo Ă© tĂŁo ruim. Na pior das hipĂłteses, vocĂȘ enviarĂĄ algum spam pelo servidor de email. Portanto, Ă© provavelmente por isso que eles ainda estĂŁo usando o rlogin, enquanto as coisas que permitem que vocĂȘ efetue login em uma conta arbitrĂĄria pararam de usar a autenticação baseada em IP.
EntĂŁo, por que esse mecanismo de autenticação Ă© um plano ruim? Como suposição, suponha que algum servidor usasse rlogin. O que vocĂȘ faria para atacar? Que mal poderia acontecer?
Aluno: um invasor pode simplesmente entrar no seu computador, falsificar um usuĂĄrio que entrarĂĄ na rede com seu nome de usuĂĄrio e obter acesso Ă rede.
Professor: sim, basicamente um invasor assume o controle de um computador. Ele sintetiza dados que se parecem com um conjunto vĂĄlido de comandos rlogin que dizem: "Efetue login como usuĂĄrio e execute este comando no meu shell Unix".
VocĂȘ sintetiza esses dados (SNc + 1), monta todo o ataque e envia esses dados como se um usuĂĄrio legĂtimo interagisse com o cliente rlogin e, em seguida, continue.

Bem, essa Ă© uma das razĂ”es pelas quais vocĂȘ nĂŁo deseja que seus nĂșmeros de sequĂȘncia TCP sejam adivinhados. Outro problema Ă© que esses ataques de redefinição redefinem o ataque. Da mesma maneira que poderĂamos enviar um pacote SYN, se soubermos o nĂșmero de sĂ©rie de alguĂ©m, podemos enviar um pacote de redefinição da mesma maneira.
Mencionamos brevemente um cliente legal que envia um pacote de redefinição de conexĂŁo falso que um invasor estabeleceu. Um invasor pode tentar enviar pacotes de descarte para uma conexĂŁo existente, se de alguma forma souber que o seu nĂșmero de sequĂȘncia estĂĄ nessa conexĂŁo. De fato, nĂŁo estĂĄ claro o tamanho desse problema.
Em algum nĂvel, vocĂȘ deve assumir que todas as suas conexĂ”es TCP podem ser interrompidas em qualquer caso e a qualquer momento, ou seja, nĂŁo parece que sua rede Ă© confiĂĄvel. Portanto, talvez vocĂȘ deva esperar uma desconexĂŁo.
No caso em que os roteadores "conversam" entre si, essa suposição Ă© especialmente crĂtica. Se vocĂȘ possui muitos roteadores que se comunicam usando alguns protocolos de roteamento, existem algumas conexĂ”es fĂsicas entre eles. Mas, alĂ©m dessas conexĂ”es fĂsicas, eles se comunicam atravĂ©s de um protocolo de rede que funciona atravĂ©s de TCP. De fato, em cada uma dessas conexĂ”es fĂsicas que os roteadores usam para trocar informaçÔes de roteamento, uma sessĂŁo TCP Ă© iniciada. O protocolo BGP Ă© usado aqui, sobre o qual falaremos mais adiante.
Este protocolo BGP usa o fato de que, se a conexĂŁo TCP estiver ativa, a conexĂŁo fĂsica tambĂ©m estarĂĄ ativa. Portanto, se uma conexĂŁo TCP for interrompida, o roteador acredita que a conexĂŁo estĂĄ interrompida e começa a recontar todas as suas tabelas de roteamento.

Portanto, se o adversĂĄrio deseja organizar algum tipo de ataque de negação de serviço do DoS, ele pode tentar adivinhar os nĂșmeros de sĂ©rie desses roteadores e interromper essas sessĂ”es. Se a sessĂŁo TCP entre os dois roteadores estiver desativada, os dois roteadores consideram esta conexĂŁo morta e devem recontar todas as tabelas de roteamento, o que farĂĄ com que as rotas mudem. Depois disso, o invasor pode redefinir outra conexĂŁo e assim por diante.
Portanto, este Ă© um ataque um tanto alarmante, e nĂŁo porque viola o segredo de outra pessoa e assim por diante, pelo menos nĂŁo diretamente, mas porque realmente causa muitos problemas de acesso para outros usuĂĄrios do sistema.
Aluno: se vocĂȘ Ă© um invasor e deseja organizar um ataque direcionado contra um usuĂĄrio especĂfico, vocĂȘ pode simplesmente continuar enviando solicitaçÔes para se conectar ao servidor em nome do endereço IP e forçå-lo a redefinir a conexĂŁo com o servidor?
Professor: suponha que eu use o Gmail e vocĂȘ queira impedir que eu receba qualquer informação do Gmail; basta enviar pacotes para minha mĂĄquina, fingindo que eles vĂȘm do servidor do Gmail. Nesse caso, vocĂȘ deve adivinhar os nĂșmeros de porta de origem e destino corretos.
O nĂșmero da porta de destino Ă© provavelmente 443 porque eu uso HTTPS. Mas o nĂșmero da porta de origem serĂĄ algo aleatĂłrio de 16 bits. AlĂ©m disso, os nĂșmeros de sĂ©rie variam. Portanto, se vocĂȘ nĂŁo adivinhar o nĂșmero de sequĂȘncia que estĂĄ na minha janela TCP e que Ă© dezenas de kilobytes, nĂŁo terĂĄ ĂȘxito.
EntĂŁo vocĂȘ tem que adivinhar uma quantidade razoĂĄvel de coisas. NĂŁo hĂĄ acesso Oracle aqui. VocĂȘ nĂŁo pode simplesmente pedir ao servidor o nĂșmero de sĂ©rie desse cara. Esta Ă© a razĂŁo pela qual isso tambĂ©m nĂŁo funcionarĂĄ.
Portanto, muitos desses problemas foram corrigidos, incluindo esse item baseado em RST, especialmente para roteadores BGP. Na verdade, havia duas correçÔes engraçadas. Uma coisa realmente mostra como vocĂȘ pode explorar coisas existentes ou usĂĄ-las para corrigir problemas especĂficos. Ele usa a propriedade que esses roteadores se comunicam apenas entre si e nĂŁo com mais ninguĂ©m na rede. Como resultado, se o pacote nĂŁo chegar de um roteador localizado na outra extremidade da conexĂŁo, esse pacote serĂĄ descartado.
A implementação bem-sucedida dos desenvolvedores desses protocolos é uma årea maravilhosa do pacote chamada "tempo de vida", ou TTL. Este é um campo de 8 bits decrementado por cada roteador para garantir que os pacotes não terminem em um loop infinito. O valor TTL måximo é 255 e diminui ainda mais.
EntĂŁo, o que estou fazendo com esses protocolos inteligentes? Eles descartam qualquer pacote com um valor TTL que nĂŁo seja igual a 255. Como se o pacote tiver um valor de 255, ele poderĂĄ vir apenas de um roteador do outro lado desta conexĂŁo. E se o adversĂĄrio tentar injetar qualquer outro pacote na conexĂŁo BGP existente, ele terĂĄ um valor TTL menor que 255, porque esse valor serĂĄ reduzido por outros roteadores localizados ao longo do caminho de roteamento, incluindo este roteador. Portanto, este pacote serĂĄ simplesmente rejeitado pelo destinatĂĄrio.
Portanto, este Ă© um exemplo de uma combinação inteligente de tĂ©cnicas compatĂveis com versĂ”es anteriores que resolvem esse problema muito especĂfico.
Aluno: O roteador inferior direito nĂŁo envia algo com um TTL de 255?
Professor: Este Ă© um roteador fĂsico. E ele sabe que essas sĂŁo conexĂ”es separadas, entĂŁo ele analisa o TTL e de onde veio o pacote. Portanto, se o pacote vier do roteador superior esquerdo, ele nĂŁo serĂĄ aceito para uma conexĂŁo TCP entre ele e o roteador superior direito.
Na maioria das vezes, esses roteadores confiam nos vizinhos imediatos e esse processo pode ser controlado usando o mecanismo de roteamento de caminhos mĂșltiplos do Auto Pan.
Outras correçÔes para o BGP sĂŁo implementar alguma forma de cabeçalho de autenticação, incluindo um cabeçalho de autenticação MD5. Mas, na realidade, os desenvolvedores se concentraram nesse aplicativo em particular, para o qual um ataque de redefinição Ă© especialmente crĂtico.
Esse problema persiste hoje. Se houver alguma conexĂŁo de longo prazo e eu quero interrompĂȘ-la, sĂł preciso enviar um grande nĂșmero de pacotes RST, aproximadamente centenas de milhares, mas provavelmente nĂŁo 4 bilhĂ”es. Como os servidores sĂŁo realmente um pouco vulnerĂĄveis ââa qual nĂșmero de sequĂȘncia eles aceitam para redefinição.
Pode ser qualquer pacote em uma janela especĂfica. Nesse caso, o invasor pode interromper essa conexĂŁo sem muito esforço. Esse ainda Ă© um problema para o qual nĂŁo existe uma solução realmente boa.
E a Ășltima coisa ruim que pode acontecer devido Ă previsibilidade dos nĂșmeros de sequĂȘncia Ă© a injeção de dados nas conexĂ”es existentes. Suponha que tenhamos um protocolo hipotĂ©tico semelhante ao rlogin, que na verdade nĂŁo executa autenticação baseada em IP, portanto, vocĂȘ deve digitar sua senha para efetuar login.
O problema Ă© que, assim que vocĂȘ digita sua senha, talvez sua conexĂŁo TCP seja simplesmente estabelecida e possa aceitar dados arbitrĂĄrios. Portanto, o invasor sĂł precisa esperar atĂ© que um de vocĂȘs faça logon no computador digitando sua senha.
O invasor nĂŁo sabe qual Ă© a senha, mas assim que vocĂȘ estabelece uma conexĂŁo TCP, ele imediatamente tenta adivinhar seu nĂșmero de sĂ©rie e insere alguns dados na conexĂŁo existente. Portanto, se eu puder adivinhar corretamente seu nĂșmero de sĂ©rie, isso permitirĂĄ que eu finja que nĂŁo sou eu, mas vocĂȘ inseriu algum comando depois de se autenticar corretamente com uma senha.

Tudo isso indica por que vocĂȘ realmente nĂŁo deseja confiar nesses nĂșmeros de sequĂȘncia de 32 bits no sentido de segurança. Mas vamos ver o que as modernas pilhas TCP realmente fazem para mitigar esse problema. Uma abordagem para o problema que abordaremos nas prĂłximas 2 palestras Ă© implementar algum grau de segurança no nĂvel do aplicativo. Nesse nĂvel, usaremos criptografia para autenticar, criptografar, assinar e verificar mensagens sem muito envolvimento do TCP.
Alguns dos aplicativos existentes tambĂ©m ajudam a resolver problemas de segurança ou, pelo menos, tornam mais difĂcil para um invasor explorar esses problemas. As pessoas colocam isso em prĂĄtica hoje, por exemplo, no Linux e Windows, mantendo diferentes nĂșmeros de sequĂȘncia inicial para cada par de origem / destino.
Portanto, a maioria das implementaçÔes TCP SYN ainda calcula esse nĂșmero de sequĂȘncia ISN inicial da mesma maneira que fizemos anteriormente. Portanto, este Ă© um estilo antigo do ISN, digamos assim. E para realmente gerar um nĂșmero de sĂ©rie para qualquer conexĂŁo em particular, adicionamos a esse ISN antigo um deslocamento aleatĂłrio de 32 bits. Ou seja, adicionamos uma função a ela - algo como uma função hash ou SHA-1, ou algo melhor.

Esse recurso inclui o endereço IP de origem, o nĂșmero da porta de origem, o endereço IP de destino, o nĂșmero da porta de destino e alguma chave secreta que apenas o servidor conhece. Assim, criamos uma boa oportunidade para qualquer conexĂŁo especĂfica determinar o endereço IP e a porta do par de origem / destino, preservando todas as boas propriedades desse algoritmo de atribuição de nĂșmero de sĂ©rie no estilo antigo.
Mas se vocĂȘ tiver conexĂ”es de diferentes conjuntos de origem / destino, nĂŁo hĂĄ nada que permita descobrir o valor exato do nĂșmero de sĂ©rie de outro conjunto de conexĂ”es. Na verdade, vocĂȘ precisa adivinhar essa chave para calcular esse valor.
Espero que o kernel do sistema operacional do servidor armazene essa chave em algum lugar da memĂłria e nĂŁo a entregue a ninguĂ©m. Ă assim que a maioria das pilhas TCP hoje resolve esse problema especĂfico no campo dos nĂșmeros de sequĂȘncia comuns de 32 bits. Isso nĂŁo Ă© muito bom, mas funciona.
Aluno: vocĂȘ poderia repetir isso de novo? Sobre a exclusividade da chave ...
Professor: quando minha mĂĄquina Ă© inicializada ou quando qualquer mĂĄquina Ă© inicializada, gera uma chave aleatĂłria. Cada vez que vocĂȘ recarrega, ele gera uma nova chave. Isso significa que cada vez que os nĂșmeros de sĂ©rie de um determinado par de origem / destino mudam com a mesma frequĂȘncia de deslocamento. Assim, para um determinado par de origem / destino, os parĂąmetros de função sĂŁo fixos. EntĂŁo, vocĂȘ segue a sequĂȘncia quando os nĂșmeros evoluem de acordo com os nĂșmeros de sequĂȘncia iniciais para novos compostos, mudando de acordo com um algoritmo especĂfico. Assim, Ă© fornecida proteção contra a injeção de pacotes antigos de conexĂ”es anteriores em novas conexĂ”es, bem como proteção contra a reatribuição de pacotes.
A Ășnica coisa para a qual precisamos desse nĂșmero de sĂ©rie da amostra antiga Ă© a escolha do algoritmo para evitar problemas com esses pacotes duplicados. Anteriormente, consideramos que, se vocĂȘ obtiver um nĂșmero de sĂ©rie para uma conexĂŁo A: A -> S: SYN (...), poderĂĄ concluir uma conclusĂŁo sobre o nĂșmero de sĂ©rie da conexĂŁo ACK (SNs).

, 32- , F. , , .
: ?
: , . F, , F , , , .
: , âŠ
: , F - -, . -, , . , , , , . , F .
, TCP, . , , - .
, . , TCP , DNS, . , DNS UDP â . UDP â , , . UDP . , , , . , , . DNS-. DNS?

, DNS- C: C53 -> S53 mit.edu, 53.
S: S53 -> C53 IP-, â .
, , , , . , mit.edu, .
, DNS- . IP-, , . IP- mit.edu IP-. , , , , . , .

, , . IP-. , , DNS- . , , IP- mit.edu.
: , , ?
: , . , , . DNS-, , . 2 . â , 16 . , 16 . ID, 16 , .
, , 32 . , , , , .

, , .
, DNS DNS . , , DNS . , DNS SEC, . , , , DNS- . , , .
origin. DNS , IP-, : â, â. , , , , , , . , , ?
, â DNS- , . , , . -, DNS-, . , DNS SEC, , , DNS- . DNS- , , , â , .
DNS SEC , NSEC. , . , NSEC , foo.mit.edu, goo.mit.edu, , .

, , , , , , â, â.
. , foo.mit.edu -> goo.mit.edu â >âŠ. : » , , gooa.mit.edu". , , .
, DNS . NSEC3, â - , - .
52:00
Curso MIT "Segurança de sistemas de computadores". 12: « », 3.
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?