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 2 Professor Nikolai Zeldovich: boa tarde, quero apresentar a você o convidado da iSec Partners, que lhe dirá qual é a segurança dos sistemas de computadores no mundo real.
Paul Yang: boa tarde, meu nome é Paul Yang, me formei no MIT em 2004, fiz mestrado em engenharia e ciência da computação e, até 2010, trabalhei na Oracle. Agora, trabalho como diretor técnico da iSec Partners. Antes, eu nem sabia que essas empresas existem. Nossa empresa está envolvida em consultoria nas áreas de segurança de computadores, testes de penetração (pentesting), segurança de rede, estudamos programas de hackers, descobrimos várias vulnerabilidades e as eliminamos.

Decidi falar sobre isso porque sei que muitos estudantes de sua especialização desejam fazer carreira na área de segurança de sistemas de computadores. O esboço da palestra de hoje é assim:
- O que são erros de segurança?
- relações de confiança;
- exemplos de erros encontrados na vida real;
- Operação Aurora
- Stuxnet
- Eu gosto de lidar com questões de segurança, o que devo fazer?
Vamos ver o que os pesquisadores pensam sobre vulnerabilidades. Quero que você entenda completamente de onde veio a vulnerabilidade depois que a descobriu. Ou seja, você deve encontrar o que causou isso. É importante entender como as vulnerabilidades afetam o sistema e como elas interagem com seus outros componentes.
Então, vamos começar analisando o que são erros de segurança. Mas antes de começarmos a falar sobre isso, primeiro definimos o que o próprio conceito de segurança significa.
Ivan Arch disse: "Um sistema é seguro se se comportar exatamente como pretendido e não fizer mais nada". Os sistemas se tornam cada vez mais complexos. Se estamos falando de sistemas operacionais, quem pode dizer para o que se destina e O que exatamente eles permitem?
Portanto, é necessário estudar todos os tipos possíveis de ataques. Sabendo quais ataques existem, os principais objetivos de segurança podem ser desenvolvidos. Portanto, os primeiros passos no campo da segurança devem ser a definição de um modelo de segurança e a definição de um modelo de ameaça.
Como exemplo, considere como o TSA determina o modelo de ameaça. O objetivo de segurança do Aeroporto Internacional de Logan é impedir que itens proibidos, como espuma de barbear, entrem na aeronave. O modelo de ameaça consiste em dois pontos:
- Quais são as formas possíveis de entrada de itens proibidos no aeroporto?
- Onde estão os "pontos de entrada" dessas coisas para o aeroporto?
Como você pode trazer itens proibidos para a segurança passada? Como você tenta atacar o sistema de segurança deles? Você pode carregá-los onde não houver cheque, usando os privilégios do passageiro VIP, escondê-los entre outras coisas ou usar o serviço de outras companhias aéreas para entregar itens proibidos no aeroporto.
Sempre fiquei chocado com o fato de que na bagagem Logan que chega de outros aeroportos não é visível nos monitores. Ou seja, você pode enviar uma substância ou objeto proibido de outro aeroporto, ele voará para Logan e lá você o receberá. Assim, aeroportos com um sistema de segurança menos rigoroso são ameaças ao sistema de segurança avançado da Logan, e nada pode ser feito sobre isso. Portanto, um momento crítico na construção de um modelo de ameaça é entender o que você se opõe especificamente. Observo que isso não incomoda muitos engenheiros adequadamente.
Os engenheiros criam erros de segurança e os encontram eles mesmos. O objetivo dos engenheiros é encontrar o maior número possível de falhas e minimizar a possibilidade de causar danos ao sistema.
A abordagem para atingir esse objetivo deve ser muito completa - é necessário cobrir todos os parâmetros do sistema de segurança ou, pelo menos, encontrar elementos que sejam facilmente acessíveis aos criminosos.
As formas de atingir o objetivo são estudar o código-fonte, usar ferramentas para depurar o aplicativo e engenharia. Além disso, é necessário dinheiro para ferramentas e equipe.
Normalmente, os desenvolvedores de software se preocupam com a funcionalidade e os recursos de seus produtos, e não com sua segurança. Todo mundo compra software por causa de seus recursos, e não por sua segurança. Portanto, a segurança sempre permanece em segundo lugar e os desenvolvedores começam a cuidar dela somente depois que o produto é danificado por intrusos. Normalmente, os engenheiros veem apenas uma pequena parte do "mosaico", não prestam atenção aos detalhes técnicos. Você pode responder à pergunta quantas linhas de código Linux 2.6.32, Windows NT4 e Adobe Acrobat contêm?
As respostas corretas na ordem de listagem dos programas são de 8 a 12,6 milhões de linhas, 11 a 12 milhões e 15 milhões. De fato, geralmente é surpreendente para todos que o Acrobat contenha mais linhas de código de programa que Linux e Windows. Assim, mesmo o software que consideramos simples é extremamente complexo na realidade.
As seguintes categorias de pessoas estão interessadas em problemas de segurança:
- engenheiros
- criminosos;
- pesquisadores de segurança;
- testadores de penetração (pentesters);
- Governos
- hacktivistas;
- representantes da comunidade científica.
Eu identifiquei apenas 6 categorias, mas provavelmente mais delas. Considere o que interessa à primeira categoria de pessoas - criminosos.

Seu objetivo são os recursos com os quais você pode se apossar do dinheiro de outras pessoas (botnet, CC # s, envio de spam de “cartas de felicidade”) e, ao mesmo tempo, não ser preso. Para atingir o objetivo, eles usam as mais recentes explorações de hackers que exploram vulnerabilidades de software. Eles não precisam de privilégios de acesso a dados, mas simplesmente os roubam usando vulnerabilidades deixadas pelos desenvolvedores. Na maioria das vezes, cartões de crédito e tudo relacionado a eles são objetos de ataque. Portanto, os criminosos têm acesso ao dinheiro de outras pessoas com a ajuda de dinheiro, comprando dados de hackers ou usando o método de teste da Caixa Preta. Este é um método de teste para software de acordo com especificações e requisitos funcionais, sem o uso da estrutura interna de código ou acesso ao banco de dados. Nesse caso, o código-fonte é desmontado em componentes, o que permite detectar lacunas na proteção do programa.

Essa técnica permite que você penetre no banco de dados de cartões de crédito, "invadindo" os sistemas de pagamento de várias lojas.
A próxima categoria são pesquisadores de segurança voluntários, um certo tipo de hacker.

Seu objetivo é conscientizar o público, publicá-lo em jornais e amigos para respeitá-lo ou admirá-lo. A ocupação deles não exige meticulosidade; ninguém o envergonhará se você não encontrar uma vulnerabilidade ou maneiras de superá-la. Eles obtêm acesso aos sistemas de segurança por meio de ferramentas amadoras e contatos casuais com engenheiros trabalhando em grandes empresas de segurança ou desenvolvendo software, e os advogados costumam servir como fonte de informação.
A terceira categoria que é mais útil em segurança são os testadores de penetração (pentesters).

O significado de seu trabalho é garantir a segurança dos clientes e usuários do software. Eles encontram as vulnerabilidades que os criminosos desejam explorar antes de serem descobertos pelos criminosos e ajudam os desenvolvedores a eliminá-las.
A abrangência de seu trabalho consiste em cobrir todos os detalhes e nuances do sistema, em encontrar locais públicos e vulnerabilidades inseguros, sujeitos à maior interferência, não corrigidos ou hackeados.
Para fazer esse tipo de trabalho, eles precisam ter acesso aos desenvolvedores, acesso ao código fonte e a todos os tipos de permissões.
A seguir, são apresentados os governos de diferentes países. A segurança os preocupa em termos de ataques, espionagem e proteção de seu próprio país de tais ações inimigas. Explorações confiáveis que podem detectar e explorar vulnerabilidades fornecem seu trabalho e, para obter acesso aos sistemas de segurança, usam dinheiro, talento e tempo que podem comprar por dinheiro.
O penúltimo grupo é hacktivista. Estes são hackers anônimos, sua atividade é uma mistura de hackers e protestos contra a violação do direito de trocar livremente qualquer informação. Estes são hackers de orientação social, geralmente sistemas de hackers que não buscam o seu enriquecimento.

Seu objetivo é fazer “algo bom”, no entendimento da palavra, e não ir para a cadeia por isso. Às vezes eu concordo com o que eles fazem, às vezes não.
Eles usam as mais modernas explorações e penetram nos sistemas de segurança graças ao seu próprio talento e a uma grande variedade de "objetivos" para aplicar suas habilidades. Eles exploram todas as vulnerabilidades possíveis e, se você pode roubar números de cartão de crédito, eles os roubam.
O último grupo é representantes da ciência. Este é um campo interessante de atividade em que o professor Nikolai Zeldovich trabalha. Explora os recursos de longo prazo e os problemas funcionais dos programas. O pessoal da ciência encontra falhas comuns e outros problemas comuns, por exemplo, erros no uso de firewalls ou criptografia, tentando tornar o software mais seguro. Geralmente, eles têm tempo e talento suficientes para a pesquisa e a profundidade do trabalho é garantida pela profundidade da abordagem.
Eles obtêm acesso aos sistemas de segurança através da criação de coisas novas e da Black Box. Há uma diferença entre desenvolvimentos teóricos e sua implementação na prática, mas, na maioria das vezes, eles agem da mesma maneira que os governos nacionais, ou seja, estão envolvidos em projetos muito ambiciosos.
Todos esses grupos de pessoas usam técnicas semelhantes e procuram a mesma coisa: sistemas vulneráveis. Se eles tiverem acesso, revisam o código fonte, usam entrevistas com engenheiros ou realizam testes em um ambiente controlado. Se não houver acesso, eles executam o teste da Caixa Preta, envolvem-se em tecnologia de difusão (por exemplo, inserem dados aleatórios e vêem como o sistema reage a ele), fazem cópias técnicas da Engenharia Reversa (usando arquivos de código binário) e fazem engenharia social.
Muitos sistemas de software complexos estão sujeitos a confusão, por exemplo, o mesmo
Acrobat Reader - ele verifica a possibilidade de estouro de buffer usando documentos volumosos especialmente criados no formato .pdf. Esse documento é "direcionado" ao "Acrobat" para verificar se é capaz de causar uma falha no sistema.
A engenharia social é a maneira mais fácil e rápida de encontrar problemas de segurança invadindo contas em redes sociais.
Então, vamos nos aprofundar no assunto da palestra e examinar as vulnerabilidades que estamos procurando.

Os engenheiros geralmente cometem erros sobre como os sistemas devem funcionar e como eles funcionarão após a criação. Um exemplo de erro catastrófico no software que levou à morte de pessoas é o programa do aparelho de terapia por radiação
Therac-25 .
A operação incorreta do sistema de segurança do dispositivo levou a pelo menos 6 pessoas recebendo grandes doses de radiação, duas pessoas fatais. Vou falar sobre isso em geral, sem mencionar os detalhes e os princípios operacionais deste irradiador.
O software deste dispositivo médico previa dois modos de uso do irradiador. A primeira imagem de
raios-X , o modo de espalhamento de elétrons, no qual a exposição à radiação era mínima, não envolvia o uso de uma tela de foco de proteção. O segundo modo de
tratamento de radiação forneceu um poderoso modo de irradiação, no qual a área afetada foi exposta a um feixe de radiação radioativa com uma potência de 25 MeV. Para isso, uma tela de foco protetora foi colocada entre o paciente e o emissor.
O próximo slide mostra como era o código do programa que controla a operação do firewall. Você vê que em uma linha havia dados de byte único informando se a tela de proteção deve ser instalada ou não. Se esse valor for 1, a tela foi instalada; se for 0, a tela foi removida. O problema era que, dentro do programa, ao inserir um parâmetro igual a 0, por exemplo, se o médico ajustava manualmente a potência de radiação para 0, o valor da radiação era dividido por 0. Como a divisão por 0 é uma operação inválida, o buffer transbordou, o programa travou e o poder de radiação assumiu automaticamente o valor máximo possível na ausência de uma tela de proteção.
Aqui, os desenvolvedores usaram a suposição errônea de que, no modo Tratamento de radiação, o parâmetro para usar a tela de proteção sempre terá um valor diferente de zero, os estouros de buffer nunca ocorrerão e o programa nunca falhará.
Como resultado dessa suposição incorreta, as pessoas morreram porque, durante uma sessão sem tela no modo Tratamento de radiação, elas receberam uma queimadura fatal por radiação.
Aprendendo sobre esse caso, meu colega disse: "Concluí por mim mesmo que nunca escreverei software médico".
Pré-requisitos incorretos para o desenvolvimento de software podem ser muito prejudiciais, por exemplo, o sistema de contas da amazon.com.Esta loja online permite:
- Você pode adicionar um cartão de crédito ou caixa de correio eletrônico com um nome e endereço físico à sua conta;
- A Amazon permite alterar a senha da sua conta através de uma caixa de correio registrada;
- A Amazon permite ver os últimos 4 dígitos de um número de cartão de crédito;
- A Apple oferece a opção de fazer login na sua conta usando os últimos 4 dígitos do número do seu cartão de crédito;
- O Gmail permite que você altere sua conta da Apple por meio da sua conta do Twitter.
Que suposições erradas tornaram possível essa cadeia viciosa? Políticas de segurança incorretas, expressas no primeiro e quarto parágrafos. Isso leva à conclusão: os componentes que afetam seu sistema geralmente estão fora de sua atenção (Facebook, Amazon, Apple). Portanto, um invasor pode controlar as informações do seu cartão de crédito por meio de uma conta no amazon.com, usando os recursos desses três sistemas independentes. Isso pode ser considerado um modelo completo de ameaça.
Portanto, responda à pergunta: sua senha da caixa de correio pessoal é mais confiável ou mais fraca que a senha usada para serviços bancários online?
Eu vejo quantas pessoas levantaram as mãos. Agora escolha aqueles que têm uma senha bancária mais forte do que uma senha de correio. Eu vejo que há mais. E isso está errado.
As pessoas acreditam que o banco on-line é um assunto sério, e aqui precisamos de uma senha mais confiável. Mas eles esquecem que o acesso à conta de pagamento é realizado através de uma caixa de correio eletrônico. O correio deve ter a senha mais confiável, e não o contrário.
Se você deseja se tornar um engenheiro que desenvolve sistemas de computadores, precisa pensar como um pesquisador de segurança pensa:
- Quais pré-requisitos devem ser usados para garantir a segurança no desenvolvimento de um design de sistema?
- quais suposições estão erradas?
- O que você pode violar se a premissa estiver errada?
O último ponto ajuda a projetar o sistema de tal maneira que, mesmo que o sistema trave, seu kernel estará protegido.
Gerenciar memória é difícil.

Como exemplo, darei a você um diagrama simplificado de um protocolo de comunicação seguro:
- evite revisar ou restabelecer o contato;
- Alice: "Bob, se você estiver aqui, diga boo!"
- Bob: "Boo!"
- Como resultado, Alice e Bob acreditam que se conhecem muito bem.
Tecnicamente, este protocolo se parece com isso:
- Alice envia um pacote contendo ping;
- um pacote tem um certo comprimento de dados;
- Bob retorna um pacote do mesmo comprimento.
Nesse caso, Bob analisa os dados enviados por Alice:

Veja o comprimento dos dados e sua localização no buffer. Em seguida, ele prepara uma resposta para Alice, adicionando 2 bytes ao tamanho da solicitação de Alice, copia o novo tamanho da solicitação de Alice em resposta e envia de volta para ela:

Você vê algum problema aqui? Onde está a vulnerabilidade aqui?

Está incluído na segunda e quarta linhas da resposta de Bob. O tamanho dos dados transmitidos pelo usuário pode não coincidir com o tamanho real dos dados.
O TSL Establishment Protocol usa o
protocolo de criptografia
SSL aberto. É assim que aproximadamente 60% dos servidores disponíveis na Internet funcionam. Bob, isto é, o servidor, nunca verifica o comprimento real dos dados recebidos. Devido ao servidor adicionar 2 bytes, o usuário pode ler cerca de 64 KB de dados de memória do servidor, incluindo chaves privadas.
Agora que encontramos esse erro, como podemos corrigi-lo? Quanto mais as pessoas souberem, maior será o vazamento de informações. Portanto, assim que as informações sobre a vulnerabilidade forem divulgadas, elas tirarão vantagem imediatamente. Portanto, para proteção, é necessário corrigir a situação o mais rápido possível.
Às vezes, as empresas se voltam para nós e dizem que descobriram essa vulnerabilidade e como ela pode ser corrigida. Nós respondemos: "De jeito nenhum, você só precisa alterar imediatamente as chaves de criptografia". Portanto, é imperativo monitorar as diferenças que ocorrem no
Open SSL durante a troca de dados.
,
TSL , , .
, , , « », , .
, . , .

2014
Yahoo , . Java-, 6 .
, java-,
Magnitude XSS .
Magnitude « »
Yahoo , - 30 2013 3 2014 27000 . .
java- «click-to-play» Chrome.
Confused Deputy – . .
Cross-Site Request Forgery (
CSRF XSRF ), « ». , .
Microsoft . ,
Cashier as a Service . , «foo…», , .
: ,
CaaS -. . .

, - , . , $10
CaaS 123. «» : « $10 TxID:123».
CaaS : « ». : «». .
- , ? ? , , ! 3 4, , , . , , – $10 $1, .

, , - , . : , , .
.
, . , «» «», . , , , , . , .
, . , . , . , , . - . , .
.

, , .
Cloud To Butt Plus Chrome . .
, , ,
java- Flash-player , . .
www.isecpartners.com , , , .
, -, - . «» .
, ,
Google , . . , . : «, $10000»! , -, . , , . , Chrome 2014 , .
, . , :
. , ? .
1password LastPass Mask Me ? .
1password , «»
HTTP . , .
LastPass ,
Mask Me ,
1password . , , , .
, , . :
- HTTP HTTPS;
- iframes;
- - ;
- ();
- .
HTTP HTTPS . , .
SSL stripping «» .
,
https:// example.com http:// example.com . , .
Mask Meé vulnerável porque usa não apenas o preenchimento automático, mas também o envio de um formulário preenchido, o que ajudará o invasor a roubar sua senha.33:35 minContinuação:Curso MIT "Segurança de sistemas de computadores". Aula 5: “De onde vêm os erros do sistema de segurança”, Parte 2A 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 de 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).
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?