SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Programação Segura
Rafael de Moura Moreira
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Aluno padrão de computação:
“Tá certinho, uai!”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Aluno espertinho:
“Se o professor não digitar m**** pra sacanear, não dá
pau...Ah, ele não vai digitar.”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 CDF chato:
“FESSOR! Ô FESSOOOOOR! E se eu fizesse um loop
pra ler letra por letra e desse malloc() pra criar um vetor
do tamanho certinho da string? ...”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 CDF chato:
“FESSOR! Ô FESSOOOOOR! E se eu fizesse um loop
pra ler letra por letra e desse malloc() pra criar um vetor
do tamanho certinho da string? Isso vale ponto extra
na prova?”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 CDF chato:
“FESSOR! Ô FESSOOOOOR! E se eu fizesse um loop
pra ler letra por letra e desse malloc() pra criar um vetor
do tamanho certinho da string? Isso vale ponto extra
na prova?”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Professor de algoritmos:
“Eles aprenderam I/O direitinho, vamos tocar a matéria.”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Desenvolvedor de embarcados:
“Com essa porcariazinha de 8 bits e 4k de memória,
verificação de segurança é um luxo que não temos.”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Chefe do desenvolvedor:
“O orçamento tá curto e o prazo tá apertado, se
funciona, vai assim mesmo!”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Usuário:
“João Henrique de Mello da Silva Santos”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Usuário:
“João Henrique de Mello da Silva Santos... Que que eu
fiz???”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Usuário:
“João Henrique de Mello da Silva Santos... Que que eu
fiz???”
Programação Segura - Introdução
 Como cada um vê o trecho de código abaixo?
 Invasor:
“Opa, aí sim!”
Programação Segura - Introdução
 Ao digitar uma string muito longa, o invasor pode
sobrescrever outras regiões da memória.
 Isso permite alterar variáveis, inserir códigos maliciosos,
desviar a execução para outro código...
 Para evitar isso, deve-se sempre conferir o tamanho de
uma entrada e ver se ela respeita o tamanho do vetor.
Programação Segura – Falhas famosas
 Aceleração Involuntária doToyota Camry (2005)
Programação Segura – Falhas famosas
 Aceleração Involuntária doToyota Camry (2005)
 Carro acelerou involuntariamente, causando a morte de
uma passageira.
 Análise do firmware encontrou bugs diversos, alguns
causados por stack overflow e não uso de mirroring em
dados importantes.
http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences
Programação Segura – Falhas famosas
 Aceleração Involuntária doToyota Camry (2005)
 Carro acelerou involuntariamente, causando a morte de
uma passageira.
 Análise do firmware encontrou bugs diversos, alguns
causados por stack overflow e não uso de mirroring em
dados importantes.
http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences
 Empresa foi condenada a pagar US$1,2 bilhão.
Programação Segura – Falhas famosas
 Ariane 5 Flight 501(1996)
Programação Segura – Falhas famosas
 Ariane 5 Flight 501(1996)
 Foguete explodiu em seu vôo de teste.
 Código-fonte reciclado do modelo Ariane 4 – modelo
com menor aceleração horizontal - causou overflow
durante uma conversão de uma variável float de 64 bits
para int de 16 bits – o erro não era tratado por software.
http://en.wikipedia.org/wiki/Ariane_5_Flight_501#Launch_failure
Programação Segura – Falhas famosas
 Ariane 5 Flight 501(1996)
Programação Segura – Falhas famosas
 Ariane 5 Flight 501(1996)
 Componente vertical (E_BV) possui proteção;
Programação Segura – Falhas famosas
 Ariane 5 Flight 501(1996)
 Componente vertical (E_BV) possui proteção.
 Componente horizontal (E_BH) não possui.
Programação Segura – Falhas famosas
 Ariane 5 Flight 501(1996)
 Foguete explodiu em seu vôo de teste.
 Código-fonte reciclado do modelo Ariane 4 – modelo
com menor aceleração horizontal - causou overflow
durante uma conversão de uma variável float de 64 bits
para int de 16 bits – o erro não era tratado por software.
http://en.wikipedia.org/wiki/Ariane_5_Flight_501#Launch_failure
 4 satélites foram perdidos, prejuízo total de US$370
milhões.
Programação Segura – Falhas famosas
 Los Angeles LAX sem memória (2014)
Programação Segura – Falhas famosas
 Los Angeles LAX sem memória (2014)
 Plano de vôo de um avião espião não informou sua
altitude.
 Sistema de controle de vôo tentou calcular rotas
possíveis para todas as altitudes “de zero a infinito” e
ficou sem memória disponível.
http://www.theregister.co.uk/2014/05/12/los_angeles_air_traffic_control_crash_caused_memory_shortage_u_2_spyplane_cia
Programação Segura – Falhas famosas
 Los Angeles LAX sem memória (2014)
 Plano de vôo de um avião espião não informou sua
altitude.
 Sistema de controle de vôo tentou calcular rotas
possíveis para todas as altitudes “de zero a infinito” e
ficou sem memória disponível.
http://www.theregister.co.uk/2014/05/12/los_angeles_air_traffic_control_crash_caused_memory_shortage_u_2_spyplane_cia
 Todas as decolagens e pousos suspensos por 46 minutos.
Programação Segura – Mãos à obra!
 Vejamos um caso real de técnicas de programação segura
aumentando a confiabilidade de um sistema
Programação Segura – Mãos à obra!
 Hardware utilizado: Dragon12P-USB
 MCU Freescale HCS12 (até 25MHz) com 256kb de
memória
 Interface USB baseada em FT232RL
Programação Segura – Mãos à obra!
 Software desenvolvido:
 RTOS preemptivo baseado em um microkernel
cooperativo desenvolvido anteriormente na UNIFEI
 Controladora de drivers de dispositivo
 Drivers para diversos periféricos da placa
 Monitor de porta serial
 Sistema de controle PID
 App em Java paraWindows para alterar parâmetros do
PID via USB e visualizar seus sinais graficamente
Programação Segura – Mãos à obra!
 Problema durante o desenvolvimento: falha nos dados
enviados via serial
 Na placa:
Programação Segura – Mãos à obra!
 Problema durante o desenvolvimento: falha nos dados
enviados via serial
 No app:
Programação Segura – Mãos à obra!
 Soluções adotadas:
Programação Segura – Mãos à obra!
 Soluções adotadas:
 01 – Converter a mensagem para ASCII
 Dados do PID são todos números
 Logo, se algum byte > 57 ou < 48, não é um dígito válido
Programação Segura – Mãos à obra!
 Soluções adotadas:
 02 – Padronizar todas as mensagens
 Todas as mensagens se iniciam com ‘$’ e terminam com
’r’ (carriage return)
 Começa a decodificar ao encontrar ‘$’, verifica o código
do comando enviado, conta-se os bytes de parâmetros e
verifica-se se o próximo byte é ‘r’
Programação Segura – Mãos à obra!
 Soluções adotadas:
 03 – Utilização de código CRC16
 Uma operação é realizada utilizando os bits da mensagem
e o seu resultado é anexado ao fim da mensagem
(detalhes: http://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks)
 Quando uma mensagem é recebida, seu CRC é calculado
e comparado com o CRC anexado a ela
Programação Segura – Mãos à obra!
 Soluções adotadas:
 04 – Confirmação de recebimento
 Quando uma mensagem é recebida e reconhecida, um
sinal é enviado informando isso
 Caso haja algum erro (no tamanho da mensagem ou no
CRC, por exemplo), é enviado um aviso solicitando o
reenvio da mesma
Programação Segura – Mãos à obra!
 Resultado:
 Formas de onda observada no osciloscópio:
Programação Segura – Mãos à obra!
 Resultado:
 Gráficos gerados por dados enviados pela serial:
Programação Segura – Considerações finais
 Programação segura aumenta a complexidade do código
– mais verificações a serem feitas.
SEGURO
NÃO-SEGURO
Programação Segura – Considerações finais
 Programação segura aumenta o gasto de recursos
computacionais.
0 200 400 600 800 1000
Proteção Mix
Proteção Hamming
Proteção CRC
Prioridade
Controladora de Drivers
Earliest Deadline First
Round Robin
Consumo de Memória (bytes)
Adicional
Base
Programação Segura – Considerações finais
 Considerar se a economia vale à pena...
Programação Segura – Considerações finais
 Considerar se a economia vale à pena...
Programação Segura
FIM

Mais conteúdo relacionado

Semelhante a Programação Segura

Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
Diego Santos
 
Gerenciador do atmega16
Gerenciador do atmega16Gerenciador do atmega16
Gerenciador do atmega16
Gabriel Lima
 

Semelhante a Programação Segura (20)

Facsenac - De hacker e louco, todo mundo tem um pouco
Facsenac - De hacker e louco, todo mundo tem um poucoFacsenac - De hacker e louco, todo mundo tem um pouco
Facsenac - De hacker e louco, todo mundo tem um pouco
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
Arduino
ArduinoArduino
Arduino
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
Gerenciador do atmega16
Gerenciador do atmega16Gerenciador do atmega16
Gerenciador do atmega16
 
Unidade8 roteiro
Unidade8 roteiroUnidade8 roteiro
Unidade8 roteiro
 
Explorando 5 falhas graves de segurança que todos programadores cometem
Explorando 5 falhas graves de segurança que todos programadores cometem Explorando 5 falhas graves de segurança que todos programadores cometem
Explorando 5 falhas graves de segurança que todos programadores cometem
 
Que tal Hackear seu carro e plugá-lo na nuvem ?!
Que tal Hackear seu carro e plugá-lo na nuvem ?!Que tal Hackear seu carro e plugá-lo na nuvem ?!
Que tal Hackear seu carro e plugá-lo na nuvem ?!
 
Explorando 5 falhas graves de segurança que os programadores sempre cometem
Explorando 5 falhas graves de segurança que os programadores sempre cometemExplorando 5 falhas graves de segurança que os programadores sempre cometem
Explorando 5 falhas graves de segurança que os programadores sempre cometem
 
FISL11: Análise de binários ELF
FISL11: Análise de binários ELFFISL11: Análise de binários ELF
FISL11: Análise de binários ELF
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)
 
Programação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoProgramação em-arduino-módulo-básico
Programação em-arduino-módulo-básico
 
Programação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoProgramação em-arduino-módulo-básico
Programação em-arduino-módulo-básico
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Compiladores
CompiladoresCompiladores
Compiladores
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Segurança no Desenvolvimento WEB - Técnicas Profissionais
Segurança no Desenvolvimento WEB - Técnicas ProfissionaisSegurança no Desenvolvimento WEB - Técnicas Profissionais
Segurança no Desenvolvimento WEB - Técnicas Profissionais
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 

Último (6)

planejamento de obra utilizando o pert cpm.ppt
planejamento de obra utilizando o pert cpm.pptplanejamento de obra utilizando o pert cpm.ppt
planejamento de obra utilizando o pert cpm.ppt
 
Eletroquimica aplicada à Simulação do mundo físico-químico
Eletroquimica aplicada à Simulação do mundo físico-químicoEletroquimica aplicada à Simulação do mundo físico-químico
Eletroquimica aplicada à Simulação do mundo físico-químico
 
NR10 - Treinamento LOTO - 2023.pp tx
NR10 - Treinamento LOTO - 2023.pp     txNR10 - Treinamento LOTO - 2023.pp     tx
NR10 - Treinamento LOTO - 2023.pp tx
 
70nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn6946.pptx
70nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn6946.pptx70nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn6946.pptx
70nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn6946.pptx
 
Sistemas Termodinâmicos Aula 10 FPB Tambia.pdf
Sistemas Termodinâmicos Aula 10 FPB Tambia.pdfSistemas Termodinâmicos Aula 10 FPB Tambia.pdf
Sistemas Termodinâmicos Aula 10 FPB Tambia.pdf
 
Tanques industriais, principais tipos , conceitos
Tanques industriais, principais tipos , conceitosTanques industriais, principais tipos , conceitos
Tanques industriais, principais tipos , conceitos
 

Programação Segura

  • 2. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?
  • 3. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?
  • 4. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Aluno padrão de computação: “Tá certinho, uai!”
  • 5. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Aluno espertinho: “Se o professor não digitar m**** pra sacanear, não dá pau...Ah, ele não vai digitar.”
  • 6. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  CDF chato: “FESSOR! Ô FESSOOOOOR! E se eu fizesse um loop pra ler letra por letra e desse malloc() pra criar um vetor do tamanho certinho da string? ...”
  • 7. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  CDF chato: “FESSOR! Ô FESSOOOOOR! E se eu fizesse um loop pra ler letra por letra e desse malloc() pra criar um vetor do tamanho certinho da string? Isso vale ponto extra na prova?”
  • 8. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  CDF chato: “FESSOR! Ô FESSOOOOOR! E se eu fizesse um loop pra ler letra por letra e desse malloc() pra criar um vetor do tamanho certinho da string? Isso vale ponto extra na prova?”
  • 9. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Professor de algoritmos: “Eles aprenderam I/O direitinho, vamos tocar a matéria.”
  • 10. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Desenvolvedor de embarcados: “Com essa porcariazinha de 8 bits e 4k de memória, verificação de segurança é um luxo que não temos.”
  • 11. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Chefe do desenvolvedor: “O orçamento tá curto e o prazo tá apertado, se funciona, vai assim mesmo!”
  • 12. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Usuário: “João Henrique de Mello da Silva Santos”
  • 13. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Usuário: “João Henrique de Mello da Silva Santos... Que que eu fiz???”
  • 14. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Usuário: “João Henrique de Mello da Silva Santos... Que que eu fiz???”
  • 15. Programação Segura - Introdução  Como cada um vê o trecho de código abaixo?  Invasor: “Opa, aí sim!”
  • 16. Programação Segura - Introdução  Ao digitar uma string muito longa, o invasor pode sobrescrever outras regiões da memória.  Isso permite alterar variáveis, inserir códigos maliciosos, desviar a execução para outro código...  Para evitar isso, deve-se sempre conferir o tamanho de uma entrada e ver se ela respeita o tamanho do vetor.
  • 17. Programação Segura – Falhas famosas  Aceleração Involuntária doToyota Camry (2005)
  • 18. Programação Segura – Falhas famosas  Aceleração Involuntária doToyota Camry (2005)  Carro acelerou involuntariamente, causando a morte de uma passageira.  Análise do firmware encontrou bugs diversos, alguns causados por stack overflow e não uso de mirroring em dados importantes. http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences
  • 19. Programação Segura – Falhas famosas  Aceleração Involuntária doToyota Camry (2005)  Carro acelerou involuntariamente, causando a morte de uma passageira.  Análise do firmware encontrou bugs diversos, alguns causados por stack overflow e não uso de mirroring em dados importantes. http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences  Empresa foi condenada a pagar US$1,2 bilhão.
  • 20. Programação Segura – Falhas famosas  Ariane 5 Flight 501(1996)
  • 21. Programação Segura – Falhas famosas  Ariane 5 Flight 501(1996)  Foguete explodiu em seu vôo de teste.  Código-fonte reciclado do modelo Ariane 4 – modelo com menor aceleração horizontal - causou overflow durante uma conversão de uma variável float de 64 bits para int de 16 bits – o erro não era tratado por software. http://en.wikipedia.org/wiki/Ariane_5_Flight_501#Launch_failure
  • 22. Programação Segura – Falhas famosas  Ariane 5 Flight 501(1996)
  • 23. Programação Segura – Falhas famosas  Ariane 5 Flight 501(1996)  Componente vertical (E_BV) possui proteção;
  • 24. Programação Segura – Falhas famosas  Ariane 5 Flight 501(1996)  Componente vertical (E_BV) possui proteção.  Componente horizontal (E_BH) não possui.
  • 25. Programação Segura – Falhas famosas  Ariane 5 Flight 501(1996)  Foguete explodiu em seu vôo de teste.  Código-fonte reciclado do modelo Ariane 4 – modelo com menor aceleração horizontal - causou overflow durante uma conversão de uma variável float de 64 bits para int de 16 bits – o erro não era tratado por software. http://en.wikipedia.org/wiki/Ariane_5_Flight_501#Launch_failure  4 satélites foram perdidos, prejuízo total de US$370 milhões.
  • 26. Programação Segura – Falhas famosas  Los Angeles LAX sem memória (2014)
  • 27. Programação Segura – Falhas famosas  Los Angeles LAX sem memória (2014)  Plano de vôo de um avião espião não informou sua altitude.  Sistema de controle de vôo tentou calcular rotas possíveis para todas as altitudes “de zero a infinito” e ficou sem memória disponível. http://www.theregister.co.uk/2014/05/12/los_angeles_air_traffic_control_crash_caused_memory_shortage_u_2_spyplane_cia
  • 28. Programação Segura – Falhas famosas  Los Angeles LAX sem memória (2014)  Plano de vôo de um avião espião não informou sua altitude.  Sistema de controle de vôo tentou calcular rotas possíveis para todas as altitudes “de zero a infinito” e ficou sem memória disponível. http://www.theregister.co.uk/2014/05/12/los_angeles_air_traffic_control_crash_caused_memory_shortage_u_2_spyplane_cia  Todas as decolagens e pousos suspensos por 46 minutos.
  • 29. Programação Segura – Mãos à obra!  Vejamos um caso real de técnicas de programação segura aumentando a confiabilidade de um sistema
  • 30. Programação Segura – Mãos à obra!  Hardware utilizado: Dragon12P-USB  MCU Freescale HCS12 (até 25MHz) com 256kb de memória  Interface USB baseada em FT232RL
  • 31. Programação Segura – Mãos à obra!  Software desenvolvido:  RTOS preemptivo baseado em um microkernel cooperativo desenvolvido anteriormente na UNIFEI  Controladora de drivers de dispositivo  Drivers para diversos periféricos da placa  Monitor de porta serial  Sistema de controle PID  App em Java paraWindows para alterar parâmetros do PID via USB e visualizar seus sinais graficamente
  • 32. Programação Segura – Mãos à obra!  Problema durante o desenvolvimento: falha nos dados enviados via serial  Na placa:
  • 33. Programação Segura – Mãos à obra!  Problema durante o desenvolvimento: falha nos dados enviados via serial  No app:
  • 34. Programação Segura – Mãos à obra!  Soluções adotadas:
  • 35. Programação Segura – Mãos à obra!  Soluções adotadas:  01 – Converter a mensagem para ASCII  Dados do PID são todos números  Logo, se algum byte > 57 ou < 48, não é um dígito válido
  • 36. Programação Segura – Mãos à obra!  Soluções adotadas:  02 – Padronizar todas as mensagens  Todas as mensagens se iniciam com ‘$’ e terminam com ’r’ (carriage return)  Começa a decodificar ao encontrar ‘$’, verifica o código do comando enviado, conta-se os bytes de parâmetros e verifica-se se o próximo byte é ‘r’
  • 37. Programação Segura – Mãos à obra!  Soluções adotadas:  03 – Utilização de código CRC16  Uma operação é realizada utilizando os bits da mensagem e o seu resultado é anexado ao fim da mensagem (detalhes: http://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks)  Quando uma mensagem é recebida, seu CRC é calculado e comparado com o CRC anexado a ela
  • 38. Programação Segura – Mãos à obra!  Soluções adotadas:  04 – Confirmação de recebimento  Quando uma mensagem é recebida e reconhecida, um sinal é enviado informando isso  Caso haja algum erro (no tamanho da mensagem ou no CRC, por exemplo), é enviado um aviso solicitando o reenvio da mesma
  • 39. Programação Segura – Mãos à obra!  Resultado:  Formas de onda observada no osciloscópio:
  • 40. Programação Segura – Mãos à obra!  Resultado:  Gráficos gerados por dados enviados pela serial:
  • 41. Programação Segura – Considerações finais  Programação segura aumenta a complexidade do código – mais verificações a serem feitas. SEGURO NÃO-SEGURO
  • 42. Programação Segura – Considerações finais  Programação segura aumenta o gasto de recursos computacionais. 0 200 400 600 800 1000 Proteção Mix Proteção Hamming Proteção CRC Prioridade Controladora de Drivers Earliest Deadline First Round Robin Consumo de Memória (bytes) Adicional Base
  • 43. Programação Segura – Considerações finais  Considerar se a economia vale à pena...
  • 44. Programação Segura – Considerações finais  Considerar se a economia vale à pena...