Portuguese, Brazilian subtitles

← 07-25 Security

07-25 Segurança

Get Embed Code
3 Languages

Subtitles translated from English Showing Revision 1 created 02/28/2013 by Lucilia Figueiredo.

  1. Vamos dar uma parada e falar um pouco sobre segurança de computadores --
  2. um tópico em que realmente não tocamos muito nesta unidade, até agora.
  3. Segurança pode ser algumas vezes definida como computação na presença de uma adversário --
  4. alguém usando um computador, ou uma rede, ou recursos --
  5. que frustra suas expectativas de usar, ou se aproveita, de
  6. recursos que você tem disponíveis.
  7. Isso acontece -- você poderá ficar surpreso em descobrir. Eu estou avisando:
  8. a internet não é segura.
  9. Agentes maliciosos, ou adversários, podem escrever páginas web ou fragmentos de JavaScript maliciosos.
  10. A maneira mais simples de fazer isso seria escrever um fragmento JavaScritp que fica em loop indefinidamente --
  11. algum tipo de versão de Fibonacci que não tenha a condição de parada,
  12. que simplesmente continua computando e computando.
  13. Então, desde que você direcione seu browser para essa página, ela travaria.
  14. E voc6e culparia algum servidor. Você não poderia usar seu computador.
  15. Na prática, browsers frequentemente usam algum tipo de limeite de tempo para execução de um script:
  16. eu executo o script por 3 ou 4 segundos e, depois disso, se ele não teiver terminado, é melhor eu interrompê-lo.
  17. Essa é uma das razões porque otimização é tão importantes, mas tem também esse aspecto de segurança.
  18. Se eu cometer erros quando estiver projetando nosso web browser,
  19. agentes externos poderão invadir nossos computadores e obter acesso
  20. a documentos importantes: nossos pagamentos, nosso email pessoal ou o que quer que seja.
  21. Queremos nos certificar de que isso não acontecerá.
  22. Vamos ouvir alguém, que entende muito mais sobre segurança do que eu,
  23. falar sobre como isso acontece no mundo real, com web browsers.
  24. A página web pode ser um ótimo lugar, mas pode também ser um lugar perigoso.
  25. Nada impede os usuários de postar código ou ou páginas web maliciosos,
  26. ou de escrever script que irão tentar tirar ventagem do seu computador ou do seu web browser.
  27. Podem haver furos de segurança, ou buracos -- como são às vezes chamados -- que possibilitem isso.
  28. Eu gostaria de saber se você poderia falar um pouco sobe segurança no nível de linguagem, ou no nível de implementação,
  29. da perspectiva da Mozilla.
  30. Certamente. Segurança é uma preocupaçào constante na Mozilla.
  31. Quando eu era mais novo, a idéia de comprar algum software era que você realmente
  32. fosse a uma loja, olhasse nas prateleiras e pegasse uma caixa da preteleira,
  33. pagasse a alguém e a levasse para casa. E esse software era vendido a você
  34. por uma empresa na qual você confiava, um terceiro em que você confiava.
  35. Então, você sentia que esse software, que você estava prestes a instalar no seu computador,
  36. era algo que se podia acreditar que faria algo em seu favor,
  37. e não contra você.
  38. A web não funciona assim, de jeito nenhum.
  39. A maneira como aplicações web funcionam é que voc6e pode ir a qualquer website, em qualquer lugar do mundo,
  40. e alguém que voc6e nunca encontrou e nunca viu, e que ninguém pode fiar para você,
  41. irá executar algum código que ela escreveu, em seu computador.
  42. Então, isso muda o jogo.
  43. Isso significa que, para construir uma plataforma séria, em que programas possam fazer coisas importantes,
  44. em seu favor, precisamos garantir que eles não possam, também, fazer coisas que te tragam prejuízo.
  45. Quanto mais as pessoas colocam parte valiosa da suas vidas na web, como sua conta bancária,
  46. por exemplo, mais nós temos que ter recursos para nos defender.
  47. Um dos conceitos sobre o qual as pessoas falam muito em segurança é a noção de base de computação confiável.
  48. Quando você tem que baixar algum código de um terceiro, que você não conhece,
  49. se formos extremamente pessimistas, diremos: 'eu não confio neste código completamente;
  50. eu gostaria que ele fizesse algo útil para mim, mas eu não tenho certeza se ele não é malicioso'.
  51. Entretanto, esse código está executando dentro de um web browser, tal como Firefox,
  52. e eu acredito no codigo que foi escrito pela Mozilla. Eu acredito no Firefox.
  53. Para poder garantir tanto quanto pudermos a segurança de um sistema,
  54. gostaríamos que as partes so sistema em que precisamos confiar mais
  55. sejam tão pequenas quanto possível. Então, estamos falando de restringir a base computacional confiável,
  56. como sendo o objetivo de ter a menor quantidade de software em que, se algo der errado,
  57. isso possa ser desatroso -- como alguém poder roubar informação sobre seu cartào de crédito ou sua conta bancária.
  58. Todos os web browsers modernos são implementados em C++.
  59. C++ é uma linguagem muito poderosa. existem muitas coisas que se pode fazer com ela.
  60. Mas é também uma linguagem não muito segura.
  61. É uma linguagem em que, se você faz algum movimento errado, se você comete algum pequeno erro em um programa,
  62. você pode realmente deixar partes do seu sistema abertas a programas maliciosos.
  63. Por exemplo, se você escreve um programa C++ e você tem um array de dados,
  64. e você se esquece de garantir que o programa não faça referência fora dos limites do array,
  65. na maioria das linguagens, você irá obter um erro de execução que diz:
  66. "Oops! Você tentou acessas além dos limites do array."
  67. C++ não te dá essa proteção.
  68. O que C++ faz é simplesmente continuar lendo o que quer que esteja na memória,
  69. depois do final do array.
  70. Bem, o que quer que esteja na memória pode ser, de fato, alguma parte do browser
  71. que tenha informação interna, tal como uma senha de acesso.
  72. Pode também ser algum outro programa que esteja executando no sistema.
  73. E existem muitas pessoas trabalhando para encontrar maneiras de explorar
  74. esse tipo de defeitos, para usá-los para tomar controle so seu computador ou para ter acesso a seus dados privados.
  75. O projeto de construir um web browser em que as passoas possam confiar,
  76. de construir um web browser que opere em favos do usuário,
  77. é também aquele de construir software no qual possamos confiar.
  78. Para construir software no qual se possa confiar,
  79. é necessário nos basearmos em tecnologias de topo,
  80. que sabemos que possam ser efetivas para auxiliar a construir software que não seja inseguro.
  81. Temos discutido código malicioso, como JavaScript escrito por malfeitores,
  82. que poderiam ser executados em nosso interpretador. Executar código malicioso parece ser muito ruim.
  83. >> Não podemos simplesmente olhar para um código fonte e dzer se ele é ou não ruim, antes de executá-lo,
  84. e então decidir não executar o código ruim? Porque Mozilla não faz algo como isso?
  85. Infelizmente, acontece que existe uma sólida teoria da computação
  86. que mostra que se pode provar que este é um problema impossível.
  87. Eu não sei se você discutiu o problema da parada.
    >>Nós discutimos sim.
  88. Acontece que, se eu fosse capaz de provar que uma parte de código arbitrária não é maliciosa,
  89. eu poderia provar que sou capaz de resolver o problema da parada.
  90. E já sabemos que este é um problema inslúvel em ciênica da computação.
  91. Vendo isso por um lado talvez mais positivo,
  92. Isso significa que nós sempre teremos emprego:
  93. é a lei da empregabilidade do escritor de compilador.
    >>Exatamente.