• Nenhum resultado encontrado

Em 2009 um Boing 787 que estava para ser lançado no mercado possuia cerca de 6,5 milhões de linhas de código, já um carro de luxo continha algo em torno de 100 milhões de linhas de código em seu software embarcado [25]. E a tendência não é diminuir,

32

pelo contrário: novas tecnologias, novas funcionalidades e serviços, mais conectividade e integração entre os sistemas, além da crescente quantidade de linhas de código nos softwares, os sistema embarcados automotivos contam também com centenas de processadores.

O avanço da tecnologia claramente nos traz diversas melhorias: processadores mais rápidos, com menor consumo de energia e custo de produção reduzido permitem por exemplo aplicar a criptografia em vários dispositivos embarcados. Mas como dito anteriormente, o aumento da complexidade necessariamente torna os sistemas menos seguros [21], essa é uma realidade fácil de compreender quando analisamos os sistemas embarcados automotivos individualmente e também dentro do seu contexto.

Em 2005 a Toyota convocou cerca de 160 mil clientes para um recall com objetivo de corrigir uma falha de software no modelo Prius que causava o desligamento do veículo. O tempo estimado no reparo era de 90 minutos por veículo [25]. Com essa informação é possível calcular o prejuízo financeiro, além do impacto causado a imagem da empresa que poderia ser ainda maior se a falha em questão tivesse sido explorada em um ataque ao sistema.

Ao pensar sobre a segurança no desenvolvimento de um sistema é importante ter em mente sua complexidade, ameaças e riscos, analisar de forma realista o que pode dar errado, que tipos de ataques o sistema está sujeito, quais as consequências destes ataques e qual a influência do ambiente externo, seja na interação com os outros sistemas ou o fator humano. Muitos ataques são bem sucedidos quando um desses pontos é negligenciado, como por exemplo o ataque do tipo side channel que será apresentado adiante e se baseia na manipulação física do ambiente externo.

Durante a fase de desenvolvimento do sistema existe a preocupação em atender os requisitos que implementam as funcionalidades para o qual aquele sistema em específico foi desenhado na fase de projeto, por exemplo: permitir ao motorista controlar a abertura e fechamento das portas do veículo através de rádio frequência (RFID), usando um dispositivo portátil que caiba no seu bolso e consuma pouca energia durante seu funcionamento. Ao mesmo tempo, é necessário se preocupar também que essa funcionalidade não comprometa a segurança do veículo, por exemplo: garantir que somente um disposito previamente configurado efetue esse controle no acesso ao veículo.

Assim como qualquer sistema computacional, cada sistema presente nos veículos (software e hardware) já traz consigo sua própria complexidade. Os sistemas embarcados automotivos são sistemas distribuídos que interagem entre si e também com o ambiente externo através de redes de comunicação, portanto, potencializando essa complexidade individual existente em cada um.

A medida que um software cresce e se torna mais complexo, a quantidade de linhas de código aumenta e com ela também o número de falhas (bugs) que trazem problemas

de performance e comportamentos inesperados [21]. Muitas dessas falhas podem também se traduzir em falhas de segurança com potencial para ser exploradas por um agressor, por exemplo: um estouro de pilha de memória com vazamento de dados ou um problema de concorrência por recursos do sistema. Toda essa complexidade será necessariamente transferida para a fase de testes do sistema, tornando esta uma difícil e crucial tarefa na gestão da segurança da informação.

Um número grande de interações entre os módulos de um sistema, através da troca de informações e contextos, torna mais difícil a manutenção da segurança, sendo necessário o desenho de uma boa arquitetura durante a fase de projeto que separe os diversos módulos de forma clara, concisa e que favoreça a independência destes fornecendo o acoplamento adequado. Uma boa modularização através da redução da complexidade e acoplamento aumenta a testabilidade do sistema e favorece a segurança sem a necessidade de eliminar funcionalidades importantes [21].

Em geral, uma boa parte dos bugs de performance são encontrados e corrigidos durante a fase de teste dos sistemas, mas as falhas de segurança podem seguir ocultas, pois muitas vezes surgem a partir da interação entre os diferentes módulos do sistema, e principalmente, do uso incomum para o qual casos de teste não foram previstos e muitas vezes também fora do ambiente para o qual foram projetados para operar. Testar se uma informação foi criptografada com sucesso, trazendo seu conteúdo cifrado e ilegível, e depois descriptografada trazendo seu conteúdo original não é suficiente para dizer se aquele mecanismo de criptografia é realmente seguro [21].

Testes de segurança tem foco específico e procuram manipular o sistema de forma deliberada com objetivo de provocar efeitos inesperados. Em 2010 um grupo de pesquisado- res conseguiu explorar uma vulnerabilidade na comunicação sem-fio de sensores de medição de pressão de pneus (TPMS), injetando dados maliciosos que foram então enviados através do barramento CAN na rede de comunicação veicular para uma ECU. Com este ataque, foi possível não só adulterar informações que eram transmitidas para a ECU como também rastrear o veículo em questão, violando não somente a integridade como a privacidade do sistema [26] [27]. Importante frisar que hoje esses sensores são obrigatórios em veículos novos, por força da legislação, nos Estados Unidos e União Européia.

Esse exemplo demonstra a visão da segurança de sistemas ao lidar com as complexi- dades inerentes a própria natureza do sistema: garantir que este será utilizado tão somente conforme desenhado e de acordo com as premissas da confidencialidade, integridade e disponibilidade. A eficácia na segurança dos sistemas depende dos seguintes fatores [17]:

a) Política: qual é o objetivo a ser alcançado.

b) Ferramentas: soluções e mecanismos que serão utilizados para implementar garantir a política de segurança como controle de acesso, cifras criptográficas,

34

dispositivos anti fraude para hardware.

c) Garantias: quanta confiança é possível depositar em cada ferramenta.

d) Incentivos: motivações tanto por parte das pessoas envolvidas em manter o sistema seguro como também daqueles interessados em burlar a segurança do sistema.

Na prática e no mundo real isso é muito mais complexo e muitos sistemas falham ao proteger os elementos errados ou proteger os elementos corretos da maneira errada [21].

Documentos relacionados