Hardware, Segurança

Software embarcado pode ter derrubado dois Boeing 737 MAX 8

Não entendo de aviação, mas um dado me chamou a atenção sobre dois acidentes com o Boeing 737 MAX 8 : aparentemente ambos foram causados por software.

Ver dois acidentes com um avião super moderno, com menos de 6 meses de intervalo, causados pela ação do mesmo software de controle, me fez procurar saber um pouco mais sobre esse tipo de sistema.

Como pode ser possível o software derrubar um avião tão sofisticado?!

O 737 MAX 8 é sucessor do 737-800 e começou a voar comercialmente em 2017. É um avião com pouco mais de um ano de voo na aviação comercial. Portanto, é um modelo absolutamente novo no mercado.

Existem cerca de 350 MAX 8 estacionados em pátios de aeroportos pelo mundo afora. Atualmente encontram-se todos parados, impedidos de voar devido à suspeita de uma falha gravíssima no software de controle, que é o nosso objeto de interesse neste post.

Para saber mais, aventurei-me pelo Reddit e vários meios de comunicação que cobriram o acidente e vasculhei documentos técnicos da Boeing para tentar entender melhor esse sistema.

Ao que tudo indica, o moderno 737 não conseguiu ganhar altitude devido à ação de um sistema embarcado que age sobre os estabilizadores horizontais do avião, aqueles que ficam lá na cauda. Toda vez que os pilotos tentavam comandar o avião, o computador de bordo os contrariava. Pior – os pilotos talvez nem soubessem da existência desse novo sistema, contra o qual lutaram sem sucesso.

Dados

Vivemos a era da fartura de dados. Então, meu passeio pelo universo do software de aviação começou justamente por procurar levantar mais informações disponíveis publicamente sobre a queda do 737.

Abaixo temos o gráfico da altitude, em pés acima do nível do mar, vs tempo de voo do Ethiopian ET302 produzido pelo jornal The Guardian, usando dados do site FlightRadar24 :

Nota-se um comportamento errático do avião durante mais de 3 minutos. Enquanto a altitude deveria aumentar quase linearmente, com poucas oscilações, o ET302 não conseguiu submir mais que 2000 pés nesse intervalo de tempo (OBS: A escala do gráfico inicia aos 7000 pés pois o aeroporto de onde partiu encontra-se a essa altura acima do nível do mar).

Dois gráficos do site The Conversation trazem mais detalhes. No primeiro, vemos que o ET302 não parou de acelerar:

A linha azul pontilhada mostra a velocidade do ET302, e a linha cor laranja mostra a velocidade esperada em um voo normal. Vemos que no momento em que o piloto automático deveria entrar em ação, o ET302 estava 50% mais veloz do que deveria estar.

E, no segundo gráfico do The Conversation, vemos uma comparação da altura atingida versus aquela esperada em um voo normal:

A linha pontilhada azul mostra a altitude do ET302. A linha cor laranja mostra a altitude em um voo normal.

Vemos que o voo foi absolutamente anormal : o avião acelerou sem parar, porém sem conseguir ganhar altitude.

Momentos de Terror

Os dados que temos até aqui nos permitem reconstituir como foram os 6 trágicos minutos de voo do ET302.

O comandante avisou aos passageiros de que havia um problema assim que o avião decolou, então todos viveram o drama desde o primeiro instante.

O avião não ganhava altitude, os passageiros enxergavam o chão muito próximo de suas janelas, algo entre 100 e 300 metros de altura. Todos sentiram a aeronava aproximar-se e distanciar-se do chão erraticamente, enquanto a velocidade só aumentava.

Daí em diante foram 6 minutos de intensa briga entre os pilotos e o software do avião. De repente, houve uma rápida ascenção, o avião entrou em estol e despencou de uma vez só.

737 MAX 8 Banidos

Logo que se analisaram os dados do voo ET302, diversos países começaram a proibir voos com o Boeing 737 MAX 8. Alemanha, Canadá, China, um após o outro, países foram proibindo voos com o moderno 737.

Por que?

Por que uma reação tão imediata e inequívoca de todos os técnicos que analisavam os dados?

Primeiro, porque tratava-se do mesmo padrão do problema ocorrido com o voo da Lion Air poucos meses antes.

Segundo, que vários pilotos vinham relatando idêntico comportamento errático em voos anteriores que, felizmente, conseguiram concluir com sucesso – mas não sem passar por grande susto.

Em resumo, mesmo os pilotos mais experientes encontraram dificuldades para domar o 737 de última geração, e o padrão do primeiro acidente se repetiu pouco tempo depois nesse segundo acidente trágico. Engenheiros e autoridades aeroviárias de todo o mundo imediatamente desconfiaram de uma falha de projeto do avião.

E o principal suspeito é um programa de computador embarcado chamado MCAS.

Software MCAS

A sigla MCAS significa Maneuvering Characteristics Augmentation System, termo que traduzido informalmente resulta em algo como “sistema de aumento das características de manobrabilidade”.

Eis o pouco que sei sobre pilotar um 737 MAX 8, conhecimento adquirido durante esta pesquisa: há uma grande diferença entre o tamanho dos motores dos 737 anteriores e aqueles do MAX 8, bem como seu posicionamento sob as asas, o que gera uma significativa diferença na manobrabilidade dessa nova versão do clássico da Boeing. Para auxiliar os pilotos que se adaptavam a esse novo modelo do 737, foi desenvolvido o sistema MCAS – um software que deveria “aparar as arestas” para que o piloto se sentisse mais em casa pilotando a versão moderna do avião. Na prática, o MCAS comanda o estabilizador horizontal localizado na cauda traseira.

O que o sistema MCAS faz é utilizar dados coletados de sensores de AoA (sensores de Angulo de Ataque, ou Angle of Attack em inglês) para equilibrar o avião no sentido vertical. O dado emitido pelo sensor é lido e processado pelo software MCAS várias vezes por segundo.

Se um dos sensores detectar que o nariz do avião está apontando para cima, além do esperado para aquela situação, o MCAS corrige essa distorção movendo o estabilizador horizontal, fazendo o avião reduzir o angulo de ataque, apontando para baixo. Dessa forma o MCAS age como um sistema anti-estol. Sempre que a frente do avião inclinar demais, o MCAS entra em cena e aponta o avião para baixo.

A taxa de correção do MCAS, em resposta ao estímulo dos sensores AoA, é de pouco menos de 0,27 graus por segundo. Caso o MCAS determine, a partir da leitura dos sensores AoA, que o angulo está errado, ele levará pouco menos de 10 segundos para alterar o angulo de ataque em algo próximo a 2,5 graus. É, em tese, uma variação bastante suave para que os passageiros não sintam desconforto.

Essa informação tem especial relevância quando complementada pelo seguinte gráfico de altitude vs tempo do voo ET302, elaborado pelo New York Times:

Ao que tudo indica, a altura do ET302 oscilou bruscamente com período de aproximadamente 21 segundos.

Se as correções efetuadas pelo MCAS levam cerca de 10 segundos para completar, investigadores então suspeitaram que houve um ciclo onde o software puxava o avião para baixo por 10 segundos, os pilotos então corrigiam a altura para cima por mais 10 segundos, quando então o MCAS voltava a agir, iniciando nova batalha dos pilotos contra o sistema. Cada tentativa frustrada para corrigir a altura do avião consumiu aproximadamente 20 segundos, conforme vemos no gráfico acima.

Essa luta dos pilotos contra o sistema embarcado do Boeing durou 6 minutos, até que houve o estol e a queda final.

Um outro dado, este vindo do acidente do Lion Air de Out/2018, dá uma dica adicional: havia, naquele caso, uma discrepância de 20 graus entre a leitura do sensor AoA do lado esquerdo e o sensor do lado direito do 737 nas últimas leituras do sistema antes da queda. À taxa de variação de 2,5 graus a cada 10 segundos, o piloto automático do avião precisaria manobrar quase que durante 80 segundos para corrigir a leitura de 20 graus que os sensores AoA enviavam ao computador de bordo. Pelos dados que temos do ET302, parece ter ocorrido algo semelhante, com um período um pouco mais curto.

(Curiosamente o press release da Boeing sobre o acidente do voo Lion Air 610 não cita o software MCAS!)

Os pilotos da Ethiopian Airlines notaram, desde os primeiros instantes após a decolagem, que o computador de bordo estava errado e que a “correção” automática estava, na verdade, levando o avião rumo ao chão. Sabe-se disso com certeza pois oficiais da Etiópia confirmaram que os pilotos pediram para retornar ao aeroporto em caráter de emergência devido a uma pane assim que decolaram.

Lógica Fatal

Se você fosse o autor do software do 737, e tivesse que desenvolver o algoritmo para reagir à essa leitura discrepante, o que você faria?

Temos que programar o sistema para avaliar uma leitura oriunda de um sensor do lado direito e outra do lado esquerdo.

Um dado nos diz “vire o avião para cima”, a outra diz “estamos subindo muito, abaixe o angulo de ataque para evitar o estol”.

Nessa situação, qual leitura o software deveria eleger como sendo a correta?

O problema, pelo menos nessa parte do sistema, vem do fato de que, aparentemente, o Boeing 737 MAX 8 tem DOIS sensores AoA por computador de bordo. Como fazer uma eleição entre duas leituras? Não temos como formar maioria quando há apenas 2 possibilidades.

Se você possui três sensores, e dois apresentam leituras parecidas, sendo que um terceiro sensor mostra um dado outlier, descarta-se o outlier. Assim funciona o algoritmo padrão para a eleição do dado correto entre sensores redundantes.

Porém, se temos apenas 2 sensores, como determinaríamos qual é o sensor correto sem informações adicionais?

Temos, então, um ensaio de Bernoulli e o software tem 50% de probabilidade de acertar ou errar. Isso é absolutamente inaceitável para um software crítico. É evidente que mais variáveis devem participar dessa eleição do dado correto, porém isolando-se o fato do 737 MAX 8 trabalhar com pares de sensores, temos um óbvio problema de design.

Aparentemente, esta é uma das falhas gritantes que fizeram com que técnicos recomendassem a imediata suspensão de todos os voos com o 737 MAX 8.

Pilotos podiam não saber da existência do MCAS

Uma pergunta óbvia que deve ser feita é por que os pilotos da Ethiopian Airlines não desligaram o MCAS?

Talvez porque eles nem soubessem da existência desse sistema.  Você leu corretamente : o MCAS não foi oficialmente divulgado aos pilotos.

Em tese, trata-se de um subsistema que visava apenas deixar o MAX 8 mais parecido ao 737-800 e que não deveria ser sequer notado pelos pilotos, assim como incontáveis outros subsistemas que os pilotos não precisam conhecer. Como o MCAS só entraria em ação no caso de detecção de risco de estol, o piloto jamais o notaria durante a condução pelo piloto automático. Quando os sensores de AoA que acusam o angulo de risco passaram a enviar dados equivocados, o MCAS pode ter entrado em ação abaixando o bico do avião, levando-o para baixo logo no início da decolagem, quando os pilotos tentavam desesperadamente ganhar altitude.

Conclusão

E assim foi atentida, pelo menos em tese, minha curiosidade inicial: como um software pode derrubar um avião?

  1. Executando sua lógica com base em dados equivocados oriundos de sensores danificados. Dados de entrada errados, geram comandos errados na saída (princípio GIGO, ou garbage in, garbage out);
  2. Desconhecimento do sistema pelo agente humano responsável de desativá-lo em caso de emergência;
  3. Falha de design de hardware induzindo erros no software. No caso, ao utilizar pares de sensores o software não consegue eleger a leitura correta entre leituras absurdamente erradas;
  4. Ausência de testes de software que simulassem a situação de erro composta pelos itens acima.

A caixa preta do ET302 será crucial para determinar se realmente os pilotos da Ethiopian não sabiam que o MCAS existia. É possível que sequer tenham tentado desligar o sistema anti-estol.

Por fim, podemos especular que o software MCAS tenha sido dos últimos componentes adicionados ao projeto do avião como corretivo para algum detalhe técnico detectado apenas em estágio avançado do projeto.

Por falar em especulação…

Ontem encontrei-me com um amigo que trabalha com segurança da informação em um posto de grande responsabilidade no governo.

Por entre as conversas fiadas, comentei que estava escrevendo este artigo sobre o 737 e expliquei resumidamente as informações acima.

Após uma breve pausa, ele comentou:

– “Zé, você cogitou a possibilidade de alguém conseguir interferir com esse tal sistema MCAS propositalmente ou sem querer?”

Pois é. Ainda tem isso.

 

 

Foto em destaque: Acefitt via Wikimedia Commons by CC

Standard