{"id":20461,"date":"2022-12-15T15:31:16","date_gmt":"2022-12-15T18:31:16","guid":{"rendered":"https:\/\/www.kaspersky.com.br\/blog\/?p=20461"},"modified":"2022-12-15T15:31:16","modified_gmt":"2022-12-15T18:31:16","slug":"the-long-road-to-memory-safety","status":"publish","type":"post","link":"https:\/\/www.kaspersky.com.br\/blog\/the-long-road-to-memory-safety\/20461\/","title":{"rendered":"A longa jornada da manipula\u00e7\u00e3o segura de RAM"},"content":{"rendered":"<p>Em novembro de 2022, a Ag\u00eancia de Seguran\u00e7a Nacional dos EUA (NSA, na sigla em ingl\u00eas) emitiu um <a href=\"https:\/\/www.nsa.gov\/Press-Room\/News-Highlights\/Article\/Article\/3215760\/nsa-releases-guidance-on-how-to-protect-against-software-memory-safety-issues\/\" target=\"_blank\" rel=\"noopener nofollow\">boletim<\/a> sobre a seguran\u00e7a do manuseio de RAM. Se voc\u00ea observar <a href=\"https:\/\/www.nsa.gov\/Press-Room\/Cybersecurity-Advisories-Guidance\/\" target=\"_blank\" rel=\"noopener nofollow\">outros<\/a> boletins da NSA sobre o assunto, notar\u00e1 que eles se concentram principalmente na criptografia de dados ou na prote\u00e7\u00e3o do loop de produ\u00e7\u00e3o e em outras quest\u00f5es organizacionais. Abordar os desenvolvedores de software diretamente \u00e9 um movimento bastante incomum para a ag\u00eancia. Mas, considerando que foi feito, \u00e9 porque claramente trata-se de um tema particularmente importante. De forma geral, a NSA est\u00e1 sugerindo fortemente aos desenvolvedores de software que mudem para linguagens de programa\u00e7\u00e3o cuja arquitetura implique maior seguran\u00e7a ao trabalhar com mem\u00f3ria. E, de fato, parem de usar C e C++. Caso contr\u00e1rio, \u00e9 recomend\u00e1vel que um conjunto de medidas seja implementado para testar os softwares quanto a vulnerabilidades e evitar sua explora\u00e7\u00e3o.<\/p>\n<p>Para os programadores, essas s\u00e3o coisas bastante \u00f3bvias, e o alerta da NSA n\u00e3o \u00e9 dirigido a eles, mas sim \u00e0s ger\u00eancias ou aos representantes comerciais. Foi elaborado em linguagem did\u00e1tica para as empresas. Vamos tentar analisar os argumentos apresentados sem ser muito t\u00e9cnicos.<\/p>\n<h2>Seguran\u00e7a da mem\u00f3ria<\/h2>\n<p>Vamos abrir nosso \u00faltimo <a href=\"https:\/\/securelist.com\/it-threat-evolution-in-q3-2022-non-mobile-statistics\/107963\/\" target=\"_blank\" rel=\"noopener\">relat\u00f3rio<\/a> sobre a evolu\u00e7\u00e3o das amea\u00e7as para o terceiro trimestre de 2022 e dar uma olhada nas vulnerabilidades mais usadas em ciberataques. Na primeira linha ainda est\u00e1 a <a href=\"https:\/\/msrc.microsoft.com\/update-guide\/en-US\/vulnerability\/CVE-2018-0802\" target=\"_blank\" rel=\"noopener nofollow\">vulnerabilidade CVE-2018-0802<\/a> no componente Equation Editor do Microsoft Office, descoberta em 2018. \u00c9 causada pelo processamento incorreto de dados na RAM, como resultado da abertura de um documento malicioso do Microsoft Word levar ao lan\u00e7amento de c\u00f3digo arbitr\u00e1rio. Outra vulnerabilidade popular entre os criminosos \u00e9 a <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-2294\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2022-2294<\/a> no componente WebRTC do navegador Google Chrome. Isso leva \u00e0 execu\u00e7\u00e3o de c\u00f3digo arbitr\u00e1rio como resultado de um erro de <a href=\"https:\/\/encyclopedia.kaspersky.com\/glossary\/buffer-overflow\/\" target=\"_blank\" rel=\"noopener\">estouro de buffer<\/a>. Outra vulnerabilidade \u2013 <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-2624\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2022-2624<\/a> \u2013 contida na ferramenta de visualiza\u00e7\u00e3o de PDF do Chrome, tamb\u00e9m pode levar ao estouro do buffer.<\/p>\n<p>Obviamente, nem todas as vulnerabilidades de software s\u00e3o causadas pelo uso inseguro da RAM, mas muitas delas s\u00e3o. O NSA Bulletin cita as estat\u00edsticas da Microsoft de que os erros de manipula\u00e7\u00e3o de mem\u00f3ria causam 70% das vulnerabilidades descobertas.<\/p>\n<div id=\"attachment_20463\" style=\"width: 2010px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-20463\" class=\"wp-image-20463 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/94\/2022\/12\/15152728\/the-long-road-to-memory-safety-statistics.jpg\" alt='De acordo com as estat\u00edsticas da Microsoft, dois ter\u00e7os das vulnerabilidades ocorrem em decorr\u00eancia de bugs na mem\u00f3ria. &lt;a href=\"https:\/\/github.com\/Microsoft\/MSRC-Security-Research\/blob\/master\/presentations\/2019_02_BlueHatIL\/2019_01%20-%20BlueHatIL%20-%20Trends%2C%20challenge%2C%20and%20shifts%20in%20software%20vulnerability%20mitigation.pdf\" target=\"_blank\"&gt;Fonte&lt;\/a&gt;.' width=\"2000\" height=\"1125\"><p id=\"caption-attachment-20463\" class=\"wp-caption-text\">De acordo com as estat\u00edsticas da Microsoft, dois ter\u00e7os das vulnerabilidades ocorrem em decorr\u00eancia de bugs na mem\u00f3ria. <a href=\"https:\/\/github.com\/Microsoft\/MSRC-Security-Research\/blob\/master\/presentations\/2019_02_BlueHatIL\/2019_01%20-%20BlueHatIL%20-%20Trends%2C%20challenge%2C%20and%20shifts%20in%20software%20vulnerability%20mitigation.pdf\" target=\"_blank\" rel=\"noopener nofollow\">Fonte<\/a>.<\/p><\/div>\n<p>Por que isso acontece? Se a quest\u00e3o dos vazamentos de mem\u00f3ria \u00e9 t\u00e3o s\u00e9ria, por que n\u00e3o podemos de alguma forma \u201cparar\u201d de escrever c\u00f3digo vulner\u00e1vel? A raiz do problema \u00e9 o uso das linguagens de programa\u00e7\u00e3o C e C++. Sua arquitetura d\u00e1 aos desenvolvedores muita liberdade para trabalhar com RAM. Mas junto com a liberdade vem a responsabilidade. Os programadores de C\/C++ precisam implementar mecanismos para a escrita e leitura segura de dados. Ao mesmo tempo, linguagens de programa\u00e7\u00e3o de alto n\u00edvel como C#, Rust, Go e outras j\u00e1 cuidam disso. O ponto \u00e9 que, ao compilar o c\u00f3digo-fonte do programa, os meios de manipula\u00e7\u00e3o segura da mem\u00f3ria s\u00e3o introduzidos automaticamente e os desenvolvedores n\u00e3o precisam perder tempo com isso. Rust usa ainda mais meios para melhorar a seguran\u00e7a, at\u00e9 restringir a compila\u00e7\u00e3o de c\u00f3digos potencialmente perigosos, enquanto exibe um erro para o programador.<\/p>\n<p>\u00c9 claro que simplesmente desistir de usar C\/C++ n\u00e3o \u00e9 vi\u00e1vel enquanto essas linguagens permanecerem indispens\u00e1veis \u200b\u200bpara certas tarefas, como quando o c\u00f3digo \u00e9 necess\u00e1rio para MCUs ou outros dispositivos com s\u00e9rias limita\u00e7\u00f5es de poder de computa\u00e7\u00e3o e tamanho de mem\u00f3ria. Outras coisas sendo iguais, linguagens de programa\u00e7\u00e3o de alto n\u00edvel podem levar \u00e0 cria\u00e7\u00e3o de programas com uso intensivo de recursos. Mas as estat\u00edsticas de amea\u00e7as comuns nos mostram que os ataques visam com mais frequ\u00eancia software de usu\u00e1rio comum (como navegadores e editores de texto), que s\u00e3o executados em computadores muito poderosos (em compara\u00e7\u00e3o com MCUs, \u00e9 claro).<\/p>\n<h2>Voc\u00ea n\u00e3o pode simplesmente mudar a linguagem de programa\u00e7\u00e3o<\/h2>\n<p>A NSA est\u00e1 bem ciente disso. Um enorme banco de dados de software escrito em linguagens de programa\u00e7\u00e3o \u201cinseguras\u201d n\u00e3o pode ser transferido para outra linguagem da noite para o dia. Mesmo se estivermos falando sobre escrever um produto de software do zero, pode haver uma equipe estabelecida, infraestrutura e m\u00e9todos de desenvolvimento em torno de uma linguagem de programa\u00e7\u00e3o espec\u00edfica.<\/p>\n<p>Se voc\u00ea quiser uma analogia, imagine ser convidado a sair de sua casa s\u00f3 porque ela foi constru\u00edda h\u00e1 muito tempo. Voc\u00ea sabe que a estrutura est\u00e1 perfeitamente s\u00f3lida, e que s\u00f3 iria desabar com um grande terremoto e, al\u00e9m disso, voc\u00ea est\u00e1 acostumado a morar l\u00e1. A equipe de desenvolvedores do Google Chrome tem uma <a href=\"https:\/\/security.googleblog.com\/2021\/09\/an-update-on-memory-safety-in-chrome.html\" target=\"_blank\" rel=\"noopener nofollow\">postagem<\/a> que afirma explicitamente que eles n\u00e3o podem agora mudar para outra linguagem de programa\u00e7\u00e3o (neste caso, Rust) na qual a seguran\u00e7a est\u00e1 incorporada \u00e0 arquitetura. Pode ser poss\u00edvel no futuro. Mas, por agora, eles precisam de outras solu\u00e7\u00f5es.<\/p>\n<p>A mesma publica\u00e7\u00e3o dos desenvolvedores do Google Chrome tamb\u00e9m explica os motivos pelos quais voc\u00ea n\u00e3o pode alterar fundamentalmente a seguran\u00e7a do c\u00f3digo C\/C++. Essas linguagens de programa\u00e7\u00e3o simplesmente n\u00e3o foram projetadas para resolver todos os problemas de compila\u00e7\u00e3o de uma s\u00f3 vez. \u00c9 por isso que o boletim da NSA menciona dois conjuntos de medidas como alternativa:<\/p>\n<ul>\n<li>Teste de c\u00f3digo para poss\u00edveis vulnerabilidades com t\u00e9cnicas de an\u00e1lise din\u00e2mica e est\u00e1tica;<\/li>\n<li>Uso de recursos que impedem a explora\u00e7\u00e3o de um erro de c\u00f3digo, mesmo que j\u00e1 exista.<\/li>\n<\/ul>\n<h2>Desafios de transi\u00e7\u00e3o<\/h2>\n<p>Os especialistas t\u00e9cnicos concordam, de um modo geral, com a opini\u00e3o da NSA. Os especialistas podem ter opini\u00f5es variadas sobre como exatamente podemos mudar para linguagens de programa\u00e7\u00e3o de alto n\u00edvel nos casos em que a necessidade surge, entre outras coisas, de requisitos de seguran\u00e7a. Em primeiro lugar, \u00e9 importante entender que, se tal movimento ocorrer, levar\u00e1 muitos anos. Em segundo lugar, uma evolu\u00e7\u00e3o como essa tem um pre\u00e7o \u2013 nem todas as empresas est\u00e3o dispostas a pagar. O problema do manuseio inseguro de mem\u00f3ria em linguagens de programa\u00e7\u00e3o com baixo n\u00edvel de abstra\u00e7\u00e3o \u00e9 um problema sist\u00eamico. Chamar por uma solu\u00e7\u00e3o radical \u00e9 necess\u00e1rio, mas n\u00e3o espere que todos mudem amanh\u00e3 para desenvolver em C#, Go, Java, Ruby, Rust ou Swift. Assim como voc\u00ea dificilmente poderia fazer uma cidade ou pa\u00eds inteiro mudar para se adequar a, por exemplo, o veganismo ou alguma outra mudan\u00e7a extrema da noite para o dia.<\/p>\n<p>Por fim, o problema do manuseio inseguro da mem\u00f3ria pode ser enorme, mas est\u00e1 longe de ser o \u00fanico problema relacionado \u00e0 seguran\u00e7a do software. Nas v\u00e1rias d\u00e9cadas de exist\u00eancia da ind\u00fastria de TI, nunca foi poss\u00edvel criar um sistema universal e completamente seguro para todas as tarefas (exceto solu\u00e7\u00f5es altamente especializadas). Do ponto de vista empresarial, faz sentido investir tanto em novas tecnologias (desenvolvendo compet\u00eancias correspondentes e contratando especialistas com experi\u00eancia) como na prote\u00e7\u00e3o m\u00e1xima das tecnologias existentes. Para desenvolvimento de software, podem ser novas linguagens de programa\u00e7\u00e3o e tecnologias para testar o c\u00f3digo existente. Para qualquer outro neg\u00f3cio, podemos falar em investir em novas tecnologias para prote\u00e7\u00e3o contra ciberataques, bem como testar constantemente a for\u00e7a da infraestrutura existente. Em outras palavras, uma abordagem abrangente de seguran\u00e7a \u00e9 ideal e assim permanecer\u00e1 por muito tempo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Investigamos a conex\u00e3o entre seguran\u00e7a de software e vazamentos ao lidar com RAM.<\/p>\n","protected":false},"author":665,"featured_media":20462,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1119,1655,1656],"tags":[3087,267],"class_list":{"0":"post-20461","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-ram","11":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/the-long-road-to-memory-safety\/20461\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/the-long-road-to-memory-safety\/24957\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/the-long-road-to-memory-safety\/20453\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/the-long-road-to-memory-safety\/27517\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/the-long-road-to-memory-safety\/25287\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/the-long-road-to-memory-safety\/25609\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/the-long-road-to-memory-safety\/28167\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/the-long-road-to-memory-safety\/34357\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/the-long-road-to-memory-safety\/46511\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/the-long-road-to-memory-safety\/19876\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/the-long-road-to-memory-safety\/29583\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/the-long-road-to-memory-safety\/25649\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/the-long-road-to-memory-safety\/31334\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/the-long-road-to-memory-safety\/31043\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.com.br\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/comments?post=20461"}],"version-history":[{"count":3,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20461\/revisions"}],"predecessor-version":[{"id":20466,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20461\/revisions\/20466"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media\/20462"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media?parent=20461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/categories?post=20461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/tags?post=20461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}