é o Safe Source e nós vamos falar agora da correção que foi feita em 2022 do programa da Voyager 1. A Voyager 1, para quem não sabe, é uma espaçonave lançada aqui a partir da Terra e que neste momento está a não sei quantos mil aqui da Terra. Aqui, ó, distância da Terra, eh, 15 trilhões de milhas.
É bastante longe, né? E tá viajando a 38. 000 1000 milhas por hora se afastando da Terra.
Então, é impressionante mesmo. Essas sondas foram lançadas em 77, 1977 e fizeram no início uma série de explorações aqui no sistema solar e agora elas estão se afastando do sistema solar. São muito antigas, evidentemente, né?
Feitas em 77, imagina software de 77, processador de 77. A gente vai ver aqui o o programa tinha 8 KB. É, na época, isso é na memória, meu amigo.
É 8 KB, não é? Não é, é 8. 000 bytes.
Não tem nada mais do que isso não, tá? Não tem, não é gigabyte, não é Migb, é 8K byt, né? E isso era, era normal.
Eu tinha, eu tinha processador nessa época, eu tinha um computador, nessa época era 4 KB de memória, era memória de computador era 4 KB e acabou. E a memória total, tá, de armazenamento e tudo, né? Enfim, eh, essa espaçonave teve um problema, teve um problema de hardware, um pedaço da memória dela parou de funcionar e aí, lógico, deu bug, né?
parou de funcionar, parou de de enviar telemetria paraa Terra. E aí o interessante é que agora, né, isso aconteceu em 2022, mas agora os engenheiros da NASA colocaram aqui a explicação de como é que eles conseguiram corrigir isso, cara. Imagina você depurar um código assembly numa linguagem assembly feita sob medida em 77, que não tem mais nenhuma pessoa que tenha qualquer ideia de como é que isso funciona hoje em dia.
Os caras depuraram a distância, descobriram como corrigir, conseguiram corrigir o problema e a nave voltou a mandar informação de telemetria. Só para entender o bug que deu, ela continuou funcionando. A a a Voyager não continua funcionando, mas ela não mandava mais informações pra terra.
a informação que ela mandava, normalmente ela mandaria de tempos em tempos uma tabela com um monte de informações e coisas e tal e vinha tudo zerado ou tudo zero ou tudo um, ou seja, não servia para nada, né? Tinha algum bug, deu algum bug lá nela, tinha que descobrir que bug que foi esse. Vamos entender esse caso aqui que é muito interessante e lembra muito o trabalho de você fazer um exploit, de você criar um exploit.
Para quem já trabalhou com meta exploit para fazer exploits, né, fazer coisa, lembra muito esse tipo de trabalho. Essa notícia não foi sugerida por ninguém, não, tá? Eu que tava procurando aqui na internet, acabei caindo nesse vídeo, achei super interessante e resolvi falar para vocês aqui.
Eu vou deixar o link do vídeo aqui na descrição do meu vídeo, tá? Ele foi liberado há cerca de um mês atrás. Eh, e justamente fala sobre o cara explicando como é que eles diagnosticaram o problema, porque lembra, em princípio quando quando deu o problema, eles acharam que, ah, acabou, já era, não vai ter, né?
Mas enfim, eh, o explica tudinho aqui. Muito interessante o vídeo. Eh, eh, não, ninguém sugeriu a notícia, mas eu agradeço a todo mundo que sugere notícias lá no nosso site, no safesource.
com, é safesrc. com. E agradeço também a você que tá assistindo o nosso vídeo.
Se você gosta do nosso conteúdo, por favor, deixa o seu like, se inscreva aqui no canal, né? Então, realmente é fascinante isso daqui, porque para pensar, é um hardware de 77, meu amigo. É hardware velho para caramba.
Isso daqui quando deu o problema, quando eles começaram a receber esse monte de lixo da da sonda, não, já era, né? Acabou, né? Ferrou, né?
O negócio que tá e a a e ela foi ela foi programada para durar 20 anos, então já tá durando já 50 anos, ou seja, já tá muito depois da vida útil dela, já tava na hora de aposentar mesmo a Voage, né? Mas aí os engenheiros começaram a pensar assim: "Não, pera aí, mas ela ainda tá funcionando porque ela tá mandando os dados direitinho, né? é que os dados estão vindo corrompidos.
Alguma coisa tá acontecendo na hora de mandar os dados que tá corrompendo esse dado. E aí eles decidiram fazer uma, bom, vamos tentar, né? Porque assim, eh, o custo de uma aeronave dessa, de uma espaçonave dessa, é assim, é enorme para lançar outra, para chegar na distância, é, como ela é muito antiga, ela é a o artefato humano mais longe do planeta Terra neste momento, né?
Então, no primeiro momento eles falar: "Não, não tem jeito, vamos tentar, vamos ver se a gente consegue descobrir uma maneira de resolver o problema, né? " E, e aí que descreve aqui nesse vídeo dos caras, ele tá escrevendo aqui, ó, no dia 14 de novembro de 2023, a Voyager 1 parou de mandar dados significativos. A gente continuava se recebendo o sinal, mas era tudo zero e um, ou seja, não tinha dado significativo, né?
E aí eles começaram a fazer e a entender a coisa. Bom, primeira coisa, descobriram que o problema era num software chamado FSW. A Voyager, como era comum naquela época, você tinha componentes totalmente separados, três sistemas independentes na Voyager.
O problema era nesse FSW. Esse FSW, ele tinha dois bancos de memória para redundância e o processador e coisa e tal. E e o banco de memória B já tinha falhado lá em 81, ou seja, né, a a nave foi lançada em 77, em 81 já deu problema nesse banco de memória B.
Ele tava desligado porque já queimou, né? Então agora não tem mais redundância, só tem a memória A mesmo, não tem outra memória. 8K de memória sem redundância é o que eles têm para trabalhar nisso daqui, né?
E eh e nessa nessa coisa eles começaram a estudar o assunto, ninguém mais sabia, não tinha nenhum programador que fez isso da época, não tinha mais ninguém vivo. E aí eles eh foram foram estudar a coisa, era uma linguagem de assembly eh própria daquele processador, um processador que foi feito para essa essa viagem, né, pelo JPL, que é o Jet Propulsion laboratory lá na Califórnia. Então é um processador próprio deles, com linguagem assemble própria deles.
Ninguém sabia como é que funciona, funcionava porcaria nenhuma, mas eles tinham impresso, em papel o código, né? Então tinha o código inclusive com comentários aqui, ó. Tem os comentários aqui, tem o code, aqui tá a memória, aqui tá o endereço de memória, o upcode aqui que tá naquela memória e aqui a linguagem assembly, né?
Para quem não sabe, linguagem assembly, na verdade é uma é um mero mnemônico, tá? Ou seja, e eh a linguagem em si são os upcodes que estão aqui, ó. Isso daqui é a instrução que o processador usa para interpretar a coisa.
Apenas para facilitar você usa um upcode, né? Então essa é a situação disso daqui, uma linguagem que ninguém sabia, não tem nenhuma referência, não tem nenhum manual de nada para coisa alguma e o pessoal teve que fazer a engenharia reversa disso na unha, né, descobrindo como é que isso funcionava no final das contas. eh, fizeram isso, né?
E de novo, isso aqui é muito parecido como trabalha um hacker que faz um exploit. Por quê? Porque geralmente você conhece a linguagem, assembleia que você tá tratando, mas nem sempre é a mesma coisa.
Depende da, do processador que você tá rodando, depende da situação que você tá rodando. Então, é muito um trabalho de e de tentativa e erro, né? E aí, o que que eles descobriram?
Eh, primeira coisa que eles tinham que fazer é como é que eles iam conseguir fazer para meramente mandar código para essa essa espaçonave. Porque lembra, se eles vão consertar alguma coisa na espaçonave, eles têm que ter uma maneira de mandar código para lá, né? Mandar alguma coisa para lá.
Só que adivinha qual é o sistema que justamente recebia os códigos e alterava o software na aeronave? Era o FSW, era o mesmo sistema que tava com defeito. Então, não tinha como eles usarem isso, né?
E aí eles descobriram depois de muita, muito truque, que tinha uma maneira de mandar um pokreto na memória byte a bite, então você mandava uma mensagem, altere o byte tal para tal valor, então você teria como alterar a memória que tá lá, né? Só que antes disso você tinha que saber o que que tá errado, o que que deu de problema nessa história. Então eles mandaram ele, eles criaram uma espécie de eh hello world, um programa que eles poderiam mandar rapidinho para lá, pequenininho, só para ver se eles conseguiram mandar alguma coisa e mandar algum aviso pra Terra para tentar saber se eles conseguir se funcionou, porque porque lembra, né, e e a espaçonave tá muitos e muitos minutos luz de distância, mais de horas luz de distância.
Então, quando você manda um comando desse, né, eh eh ela não vai retornar alguma coisa, porque a telemetria tá toda Como é que você sabe que ela que você alterou alguma coisa nela? Como é que você sabe que esse comando foi para lá e coisa e tal, né? E no final das contas eles não tinham muito como fazer isso, mas acabaram criando, conseguindo depois de muito sufoco, acharam um código objeto de um código que faria alguma coisa assim.
E aí começaram a testar esse tipo de coisa, mandaram essa rotina 10 SCZ eh SC06 BBB. Era uma rotina que eles conseguiam alterar lá, né? E aí depois de muito tempo, eh, a telemetria não resolveu.
Então, eles tentaram vários, tentaram esse Hello Word deles para alterar a memória, mas não funcionou na telemetria. Aqui eles estão falando aqui uma lista de comandos com resultados negativos para todos eles. Então, nada disso aqui funcionou.
resultado muito desapontador, né? Só que eles repararam que eh tinha alguma coisa na OLR, que é um um chamado canal diferente. Além de você ter a telemetria que eles mandam, você tem também as informações de e eh de posicionamento da do rádio, da antena de rádio.
Ali eles conseguiram ter alguma dica de que tinha alguma coisa alterando. Então eles conseguiam a a partir das ondas de rádio saber que eles estavam alterando alguma coisa lá na sonda, né? Olha que coisa maluca, né?
E é lógico, eles sabiam que se eles errassem alguma coisa, eh, corria o risco deles errarem e acabou. A sonda já era, virou, né, bricou, como o pessoal fala, né? Virou um tijolo, né?
Vira um tijolo e não serve mais para nada. Mas a verdade é a seguinte, naquele momento a sonda já era um tijolo porque ela não tava mandando nenhum dado mais operacional, então não tinha como resolver nada, né? Então eles conseguiram dessa forma saber que estavam alterando aquilo ali.
Aí faltava eles fazerem. Agora que eles têm essa capacidade de botar um Hello Word lá, um codigozinho pequenininho para mandar alguma coisa, eles começaram a fazer a ah o teste para identificar o diagnóstico, o que que tava dando de errado, né? E aí eles identificaram aqui no dia 9 de março de 2023 que havia um conjunto de instruções entre 1000 400 e 114 FF que tava eh corrompido.
Aqui ó, eles mostram aqui, ó, todas as instruções estavam com o bit 1 ligado, ou seja, a instrução que era para tá 789, o bit aqui tava três, né? Porque o 2 pro tr vocês sabem, é um bit um a mais, né? As instruções que o Bit1 já estava ligado naturalmente não mudaram, mas as outras que não tinham o Bit1, todas foram pro Bit1 nesse conjunto entre 100 e um 4F.
Então isso corrompeu o código. Eles tinham um espaço de 256 bytes em que todos os bits estavam e era um defeito de hardware, ou seja, eles não tinham como corrigir isso daqui, não dava para corrigir isso daqui. Que que eles tinham que fazer?
Eles tinham que achar outra parte da memória, usar essa outra parte da memória para receber esse código aqui e depois mudar todas as referências no código que apontavam para este ponto aqui da memória, passando para apontar pro outro código de memória, que era a alternativa que eles tinham, né? Então aqui eles falam aqui sobre qual que era o código e coisa e tal. Então é é esse trechozinho aqui, ó.
Um negócio pequenininho, poucos bytes estavam com problema, mas era um trecho que dava o problema geral da coisa. Aí, beleza, descobriram qual era o problema. Agora eles tinham que descobrir como resolver o problema, porque lembra de novo, eles não podiam usar esse 256 byt, esse aqui tá quebrado, a memória pifou, né?
Poxa, o negócio que era para durar 20 anos, durou 50 anos, já tá bom para caramba, né? Mas esse pedaço da memória lá foi pro saco, né? Perdeu, né?
E aí, ou seja, tinha que achar outro espaço de 256 bytes na memória, que eles pudessem realocar esse código para que para esses outros bytes, corrigindo, né, a coisa correta e mudar todas as alterações de todos os jumps, todos os acessos que tem no código original para aprontar para esses outros 256 bytes. E aí que é o problema, porque lembra, é um programa que roda em 8 KB, então cada bytezinho de programa é tudo usado, não tinha 256 bytes para usar. livre, né?
Então eles tiveram que começar a procurar um monte de coisa para ver o que que eles iam jogar fora para liberar 256 bytes para poder botar essa rotina, que essa rotina era importante, era que mandava telemetria pra tela. Então eles decidiram sacrificar o código da EH12, que era um canal de 1200 bytes usado para engenharia e não sei que lá. Isso nos deu os os 256 bytes requeridos na memória alta, porque tem isso também.
Ah, a memória era dividida em memória baixa, que era os primeiros 200 primeiros 4096 bytes e o segundo 4096 by. Ou seja, o primeiro 4 KB era memória baixa, os segundos 4 KB era memória alta, somados dava 8 KB. E só que pela natureza do processador você não podia acessar da memória alta para baixa.
Isso hoje em dia ninguém tem mais esse problema. Hoje em dia é tudo virtualizado, né? Tá tudo modo protegido, você trabalha com a memória direto, mas eu vivi essa época, tá?
Eu trabalhei com doos com limitação de 640k. Repara, a limitação deles aqui é de 4K. Eu penei na minha época para trabalhar com 640k do DOS.
É por isso que quando por isso que tive esse esse bug do DOS, porque quando fizeram o DOS com 640k era uma coisa enorme, era um negócio, caramba, ninguém nunca vai usar 640 KB de memória, né? Hoje em dia 640 KB você, o pen drive de 640 KB você joga no lixo porque é uma porcaria que não serve para nada. Naquela época era toda a memória que você tinha, né?
E aí, e as versões depois do DOS que tinham mais memória aqui, que ficar chaveando a memória, né? Chaveando a memória para usar a memória toda que você tinha no processador. Dá um trabalho danado fazer isso.
Eles tinham esse problema com os dois blocos de 4K. Então eles sacrificaram essa essa parte aqui do EH12 para poder ter uma memória, uma memória contínua que eles pudessem usar. Aí eh eh realocaram o código eh corrompido que tinha da EL40.
L40 era a rotina que era crucial. L40 é aquela rotina que tinha lá no 1400 até 1400 FF que mandava telemetria, né? Que tratava telemetria.
Então, ou seja, essa eles não podiam perder, botaram lá. Aí vem o a segunda parte que é o mais complicado. Eles tinham que agora ajustar para todo o código do eh da do módulo espacial tem que apontar pro novo código, né?
E lembra, a gente tá falando de assembly, né? A gente tá falando de assembly. Aqui, ó, jump, não sei que lá, jump pro endereço tal.
Você tem que achar todo o jump que tem para essa área de 100 e mudar agora o jump para uma outra área, que é essa outra área que você realocou a rotina, né? Mas não é só isso não, porque isso daqui é o jump absoluto que você vai pular para aquela área. Você tem o jump relativo também.
É, pula 40 byes pra frente e aí para para pensar, se você tava no endereço 13,80, pula 20 bytes pra frente, você vai dar no 14 alguma coisa, que é que é o memória que ele relocaram. Então agora esse jump e eh relativo, eles tem que botar uma memória, um valor maior para pegar, chegar na área que realmente tá aquela rotina. Imagina a dor de cabeça que foi isso numa linguagem que ninguém dominava mais.
Nenhum programador vivo tinha no nessa linguagem. E enfim, e de novo, né? E a todo momento, toda alteração que eles faziam, havia o risco de bricar a a nave, né?
Porque se fizer alguma coisa e corromper, lembra? E era o próprio eh eh a própria parte desse software de voo que tavam que eles estavam usando para alterar aquilo ali, né? enfim, fizeram essa essa alteração toda e felizmente no final das contas conseguiram resolver o problema.
Aqui, ó. Aí eles mostram aqui que eles fizeram a realção, como é que eles alteraram as as eh instruções, tiveram que alterar praticamente todo o código porque tinha referência para essa EL40 em tudo quanto é lugar do código. E finalmente conseguiram a parada aqui.
Eh, eh, no final das contas eles conseguiram voltar a funcionar. Depois de de muito tempo, eh, eles conseguiram receber telemetria de novo, né? Então assim, um um trabalho que é muito interessante e eh eu aconselho vocês a verem o vídeo e também eh muito parecido com quem usa o metaxploit e outras ferramentas de você criar exploits e coisa e tal.
Envolve muito trabalho de desenvolvimento em assembly, muito teste, erro, muita coisa que você faz, tem que alterar e não sei que lá, porque você não pode manter essas coisas, não. Quando você tem um exploit, você tem, está explorando um erro do código da outra pessoa. Você não tem controle sobre aquele código.
Então, por exemplo, você quer fazer um jump para algum lugar, você não sabe em que lugar você tá no código. Você não pode fazer um jump relativo porque você não sabe onde é que você tá. Aí você não pode fazer um jump absoluto, porque um jump absoluto tipicamente vai ter e 0 zer no código e 0 e você não consegue usar em exploit, né?
Vocês sabem disso, né? O exploit não pode ter 0 zer porque tipicamente eles vão explorar algum buffer overflow, alguma coisa assim que se tiver zer zer ele para a string e você não tem como como continuar esse exploit, né? Então, ou seja, tem toda uma jogada que você tem que fazer para mascarar o seu código, para tentar achar uma maneira de usar, de alterar o código que tá rodando lá na máquina que você tá atacando para fazer ele fazer as coisas que você quer que ele faça, né?
No caso aqui, o pessoal da NASA tava fazendo isso para tentar corrigir o código para ele voltar a funcionar no que e no que era esperado. Mas é muito parecido com isso mesmo. É bem essa essa coisa, né?
É bem assim que funciona a criação de expoits. Da mesma forma, leva muitos meses, às vezes anos para você desenvolver um troço desse, né? Se chegou até aqui e gostou do conteúdo, clique no like, se inscreva no canal.
Isso me ajuda a ganhar relevância no YouTube e levar o tema da segurança no desenvolvimento de software a mais pessoas. Obrigado. Considere também clicar no sininho e pedir para ser notificado dos novos vídeos.
Caso queira sugerir uma notícia para falarmos aqui, é só ir no nosso site https2. 2/ssafesource. com / safesource.
comrc. com e clicar em sugerir uma pauta, colocar o link da notícia ali.