0

RUST, alguém conhece essa linguagem?

Márcio Silva
Márcio Silva

Digamos que você está construindo um cliente de e-mail em C++. Seu novo aplicativo será executado em uma estação de trabalho usada por várias pessoas diferentes todos os dias. Mas em algum lugar ao longo da linha você cometeu um erro. Ao enviar-se um e-mail especialmente criado, eles podem transbordar o buffer de memória do seu aplicativo e enviar os comandos do aplicativo para recuperar e-mails das caixas de entrada de outros usuários.

Este bug de estouro de buffer é um exemplo clássico de um problema de segurança de memória, e é um dos tipos mais comuns de problemas de segurança no software. Cerca de 70% de todos os problemas de segurança corrigidos entre 2004 e 2018 em produtos da Microsoft foram problemas de segurança de memória, de acordo com uma apresentação de Matt Miller do Microsoft Security Response Centre, que trida todos os problemas de segurança relatados pela empresa.

A segurança da memória é um grande problema. Os sistemas operacionais precisam garantir que aplicativos individuais não vazem dados entre si. Os navegadores da Web precisam garantir que um aplicativo web aberto em uma guia não possa obter dados de outra guia. As plataformas de computação em nuvem precisam garantir que um usuário não possa ler dados de outro usuário.

"A segurança da memória não é apenas uma questão técnica, é uma questão social também", diretor executivo do Grupo de Pesquisa em Segurança da Internet, Joshua Aas. "Problemas de segurança de memória não produzem apenas software de buggy. Eles podem quebrar serviços que as pessoas dependem para ganhar a vida ou encontrar emprego. Falhas de segurança podem nos roubar nossa privacidade. O software pode e deve ser construído de maneiras melhores."

"A segurança da memória não é apenas uma questão técnica, é uma questão social também."

Em outubro de 2020, o Grupo de Pesquisa em Segurança da Internet lançou um programa chamado Prossimo dedicado a promover a segurança da memória na internet. Até agora, suas principais iniciativas são o uso da linguagem de programação Rust, que foi de código aberto pela Mozilla em 2010 e facilita a gravação de código seguro de memória.

C, C++e outras linguagens de programação que exigem que os desenvolvedores escrevam código para gerenciar a memória de seu software são consideradas "inseguras de memória" porque mesmo pequenos bugs podem criar problemas de segurança de memória. "Não importa o quão talentosos seus desenvolvedores sejam, eles vão cometer erros", diz Aas. "As maiores e mais competentes equipes de programação de sistemas do mundo criam rotineiramente problemas de segurança de memória. Basta olhar para as notas de patch de segurança para praticamente qualquer grande projeto e você verá exemplo após exemplo."

Como laura Thomson, VP de Engenharia da empresa de computação em borda de nuvem Fastly, diz: "Escrever C é como fazer cirurgia cerebral sem assistência".

Escrever software em linguagens "seguras à memória" que gerenciam automaticamente a memória tem sido mostrado há muito tempo para reduzir toda essa classe de vulnerabilidade de segurança. No entanto, o código C e C++ ainda está em todos os lugares. Sistemas operacionais, software de rede, navegadores da Web e drivers de hardware foram tradicionalmente escritos em C ou em seu sucessor orientado a objetos C++. Se você está usando Android, iOS, Windows, Linux ou um Mac, há muito C/C++ sob o capô, apesar do uso de linguagens seguras de memória como C#, Java e Swift em muitos aplicativos.

Há uma boa razão para isso. C e C++ são rápidos. Eles são confiáveis. Os programadores já sabem como usá-los, há milhares de bibliotecas de código aberto escritas neles, e eles têm compiladores para praticamente todos os chipsets pensantes.

Prossimo está focado na segurança da memória em geral, não apenas rust. Mas Rust pode ser mais propenso a interromper o status quo na programação de sistemas do que qualquer outra linguagem.

"A ferrugem é o primeiro de um novo conjunto de idiomas introduzidos nos últimos 20 anos que podem realmente ser usados para coisas que já estivemos presos construindo em C ou código de montagem antes", diz o CTO rápido Tyler McMullen. "É realizador de memória, e tem um sistema de tipo atraente que permite que você expresse conceitos de nível superior em uma linguagem de baixo nível." Além disso, ele interopera bem com outros idiomas e pode ser executado em muitas plataformas que vão desde sistemas incorporados até servidores.

E Rust tem tração. Rust foi classificada como a linguagem de programação "mais amada" na Pesquisa de Desenvolvedores de Stack Overflow de 2021, o quinto ano consecutivo em que o idioma assumiu o primeiro lugar. Enquanto isso, tornou-se cada vez mais popular para tudo, desde a computação científica até projetos de código aberto, como o Deno, a nova plataforma JavaScript do lado do servidor construída pelo criador .js Node, Ryan Dahl.

Este ano, a Mozilla transferiu a administração da Rust para a Rust Foundation, uma coalizão fundada pela Amazon Web Services, Facebook, Google, Huawei, Microsoft e Mozilla. É um sinal de que os maiores jogadores da indústria estão falando sério sobre o futuro de Rust.

O Facebook, por exemplo, agora tem mais de 100 desenvolvedores trabalhando com rust, incluindo alguns contribuintes para a linguagem de programação principal Rust. O Facebook não está abandonando outros idiomas, mas Rust é usado para projetos em toda a empresa, incluindo o blockchain Diem, a linguagem de programação Move e a próxima versão de sua ferramenta Buck. "Um de nossos principais objetivos estar envolvidos na fundação é trabalhar em estreita colaboração com os outros excelentes membros da fundação, e a comunidade Rust, para ajudar os mantenedores da Ferrugem a fazer seu grande trabalho de forma mais eficiente, a fim de tornar a Rust uma linguagem tradicional de escolha para a programação de sistemas e além", diz Joel Marcey, advogado de desenvolvedores de código aberto do Facebook e diretor membro da Rust Foundation.

Muitas empresas agora estão usando rust para ajudar a proteger suas plataformas de computação em nuvem, incluindo Amazon Web Services, Cloudflare,Fastly e Microsoft Azure.

"Eu não fui vendido nele há alguns anos", diz McMullen. Mas a equipe da Fastly WebAssembly pediu para construir alguns projetos usando Rust e McMullen ficou impressionado com o desempenho e a segurança do idioma. Agora Rust é uma parte central da pilha da empresa. "Basicamente, tudo de novo que fazemos no backend está escrito em Rust", diz Thomson. "Os serviços de computação que nossos clientes usam para executar o código são todos construídos sobre rust."

"Basicamente tudo de novo que fazemos no backend está escrito em Rust."

McMullen diz que seu objetivo é tornar a memória do gasoduto de plano de dados segura. "Este é o tipo de ambiente em que não podemos confiar em ninguém", diz ele. "Não podemos confiar no tráfego que está chegando, não podemos confiar no código em execução nos servidores. Escrever em uma língua como Rust torna mais fácil não ter que confiar."

A AWS usa rust nas pilhas de rede de vários serviços, incluindo EC2, S3 e CloudFront, diz Shane Miller, chefe da equipe da Rust Platform na Amazon Web Services. A plataforma em nuvem construiu grande parte de seu sistema de virtualização de código aberto, orientado a contêineres Firecracker in Rust, bem como seu sistema operacional de contêineres baseado em Linux Bottlerocket. "A ferrugem rapidamente se tornou fundamental para fornecer infraestrutura em escala na AWS", diz Miller, que também é presidente da Rust Foundation.

Fazer o desenvolvimento greenfield em línguas seguras à memória é um bom começo. Mas tornar a web mais segura de memória exigirá o refatoramento de softwares mais antigos também. Um dos esforços mais ambiciosos da linguagem de programação rust é o impulso para adicionar suporte para Rust in Linux, um compromisso ainda não endossado por Linus Torvalds, que disse ao ZDnet que quando se trata de Rust ele está no "espere e veja o acampamento".

Enquanto isso, a equipe Rust for Linux está trabalhando para fazer Rust e o kernel jogarem bem juntos. Por exemplo, a biblioteca padrão Rust assume que as alocações de memória nunca retornam erros — um conceito conhecido como "alocação infalível". Quando as alocações de memória falham, os processos são encerrados. A pegadinha é que isso pode causar pânico no kernel — em outras palavras, o sistema operacional pára completamente em resposta ao que considera um erro fatal. Isso é uma má notícia se você está executando várias cargas de trabalho em paralelo. A equipe rust for Linux, patrocinada pelo Google, recentemente trabalhou em torno do assunto usando uma biblioteca rust personalizada, mas o líder do projeto Miguel Ojeda escreveu que ele espera ver o problema fixo upstream na própria Rust. "Já iniciamos esse processo e algumas mudanças já foram aceitas rio acima", escreveu ele à lista de discussão do kernel.

Se e quando Rust for Linux for fundido, será a primeira vez que o kernel Linux suporta oficialmente um idioma diferente de C ou montagem, diz o desenvolvedor de kernel Greg Kroah-Hartman.

O Linux não é o único sistema operacional que usa rust. Em 2019, Adam Burch, da equipe de engenharia Hyper-V da Microsoft, anunciou em um post no blog que estava reescrevendo um componente de sistema de baixo nível da base de código do Windows em Rust, embora ele não pudesse dizer qual componente. "Embora o projeto ainda não esteja concluído, posso dizer que minha experiência com Rust tem sido geralmente positiva. É uma boa escolha para quem quer evitar erros comuns que muitas vezes levam a vulnerabilidades de segurança em bases de código C++."

Enferrujando todas as coisas

Se você está pronto para colocar Rust para usar a si mesmo, a comunidade Rust oferece uma grande variedade de recursos para aprender o idioma. Mas fique atento. Por mais que os fãs de Rust amem a linguagem, ela vem com uma pegadinha: muitos programadores reclamam que Rust tem uma curva de aprendizado íngreme em comparação com outras línguas modernas. "Os engenheiros comparam o aprendizado de Ferrugem com o aprendizado para comer seus vegetais", diz Miller. "Eles adoram quando entendem, mas pode ser assustador. Então uma coisa que estou focando é transformar o brócolis em um brownie. Tornando a experiência de aprendizado incrível."

Para abordar o assunto, a Amazon Web Services está contratando especialistas em educação em ciência da computação para consultar sobre o design do idioma. Algumas das melhorias são simples, como fornecer exemplos adicionais de código na documentação. Outras ideias que a empresa espera contribuir para a Ferrugem são mais complexas. Por exemplo, repensando os compiladores de Rust.

Mas mesmo para os maiores fãs de Rust ainda é difícil imaginar todo o código inseguro da memória do mundo sendo reescrito em Rust. Leva muito tempo para que o antigo código seja aposentado, especialmente se já funciona bem. A Thompson Reuters estima que ainda existam cerca de 220 bilhões de linhas de COBOL, uma linguagem ainda mais antiga que remonta à década de 1950, em produção, alimentando cerca de 43% dos sistemas bancários e 95% dos golpes de caixa eletrônico. O Fortran também ainda é comum em aplicações de negócios em todo o mundo.

Dito isto, nem todo código C/C++ antigo precisa ser reescrito. "Não estamos tentando abordar milhares de projetos", diz Aas. "Estamos focados nos componentes críticos que quase todos usam. Coisas como servidores web, kernels, TLS, DNS, NTP — o tecido central da internet."

Estamos focados nos componentes críticos que quase todos usam. 

"Em alguns casos, você pode substituir o componente de software por componente", explica Aas. "Você pode substituir uma biblioteca de memória insegura por uma segura de memória e, com o tempo, tornar todo o aplicativo mais seguro de memória."

O trabalho de Prossimo com a Curl é um grande exemplo disso. Curl é escrito principalmente em C, mas a Prossimo patrocinou esforços para adicionar suporte para bibliotecas de rede TLS e HTTP baseadas em Ferrugem em Curl. Isso torna possível usar rust para as partes do aplicativo que tocam na borda da rede sem ter que reescrever completamente Curl. A Curl não é padrão para usar as bibliotecas baseadas em Ferrugem, mas qualquer um que os prefira pode ligá-las. "Nossa esperança é que, à medida que os módulos seguros de memória sejam testados e melhorados, eles eventualmente se tornem o padrão em todas as principais distribuições Linux", diz Aas.

Enquanto isso, existem maneiras de sandbox memória código inseguro para minimizar os riscos associados a ele. Por exemplo, o Fastly está executando grande parte de seu software baseado em C/C++através de seu tempo de execução do WebAssembly baseado em ferrugem. "É uma maneira pura de colocar todo esse software na Rust", diz McMullen.

Bugs, incluindo vulnerabilidades de segurança, são, naturalmente, inevitáveis. Mas é inteiramente possível eliminar uma grande faixa de problemas de segurança de memória escolhendo uma linguagem de programação que protege contra eles. Rust oferece uma linguagem cada vez mais popular que não só é performática, poderosa e de código aberto, mas também torna a internet mais segura para todos.

Link Original Fonte: Github ReadME Click

0
0

Comentários (2)

0
Rogerio Ferreira

Rogerio Ferreira

18/11/2021 08:19

Opa, bom eu conheço sim.

O esquema de Ownership do rust evita muitos problemas de gerenciamento de memória deixados pelo c e c++ puros. Sem contar que ele não depende de um GC para manter a memória limpa, o que torna muito mais performático que outras...

EU sou fã de Rust então sou suspeito aqui kkk

0
Mauricio Gebrim

Mauricio Gebrim

18/10/2021 23:24

Bom artigo. Eu achava os ponteiros do C davam muito poder e desespero também, fora implementação de estruturas de dados com ponteiros.

Estudante de Front-end JS | C# .NET em formação na área de Tecnologia em Análise e Desenvolvimento de Sistemas.

Brasil