Falhas em sistemas de uso comum Nuno Miguel Cecílio Sampaio Mestrado Eng. Informática Nº 846
Resumo Bug Divisão do processador Intel Pentium Ataques DDos – Distributed Denial of Service
Bug Divisão do Pentium "Redefining the PC -- and Mathematics As Well..." "Intel Inside? Don't Divide!"
Origem do bug Dr. Thomas R. Nicely, Professor de Matemática no Lynchburg College, Virginia Projecto de investigação na área de matemática pura – Teoria dos números computacional Maior parte dos computadores eram 486's, no entanto 1 Pentium foi adicionado em Março de 1994.
Origem do bug Em 13 Junho 1994 Dr. Nicely reparou numa discrepância nos seus resultados. Um estudo intensivo isolou o problema aos números primos 824633702441 e 824633702443 Em 24 de Outubro, contactou a Intel reportando o bug Intel sabia do bug meses antes e já tinha começado a produzir chips novos corrigidos.
Divisão abstracta q - quociente D - Divisor R[j] – Resto da enésima iteração. (R[0] é o dividendo.) q +--------- D| R[j] -qD --------- Rnew[j] <-- Rnew[j] = (R[j] - qD) ======== R[j+1] = base * Rnew[j] (base = 10 decimal, 4 para radix 4)
Formula iterativa R[j+1] = base * (R[j] - q[j]*D) Fórmula iterativa para base 4: R[j+1] = 4 * (R[j] - q[j]*D)
Algoritmo de divisão SRT 1-Escolha dos digitos significativos do divisor e dividendo 2-Usar essas escolhas como índices numa tabela de lookup que apresenta uma escolha dos proximos digitos de quociente. (neste caso os proximos quocientes podem ser -2, -1, 0, +1, +2). 3-Multiplicar o divisor pelo quociente escolhido e subtrair lo pelo dividendo. (ou adição caso o escolha de quociente seja negativa) 4-Guardar os digitos de quociente nos digitos menos significativos do registo do quociente. The Pentium division Flaw, David W. Deley, 1995. http://members.cox.net/srice1/pentbug/introduction.html
Algoritmo de divisão SRT 5-Trasladar o resto da divisão por 2 casa decimais e os registos de quociente tambem por 2. (i.e. radix 4) 6-Escolher os digitos mais significativos do novo resto parcial 7-Ir para 2 a nao ser que tenham sido gerados os digitos significativos suficientes. 8-Gerar o quociente binário juntando os valores no registo de quociente. 9-Se o ultimo resto parcial foi negativo entao ajustar o quociente subtraindo o valor.
PENTIUM LOOKUP TABLE Gráfico Resto parcial vs. Divisor. As divisões no eixo vertical estão separadas por 0.001 representando os valores de R[j]. As divisões no eixo horizontal estão separadas por 0.0001 representando os valores do divisor. As 5 células marcadas deveriam especificar um digito de quociente de +2 mas apresentam um digito de quociente de 0 Seleccionando o dígito de quociente 0 quando R[j] está neste eixo é inaceitável – o valor de digito é demasiado baixo Quaisquer que sejam os dígitos seguintes o quociente total será sempre inferior que a resposta correcta.
Exemplo do bug 5506153/294911 Correcto: 18.67055823621364 Pentium: 18.66990719233938
Frequência do erro Probabilidade de erro: 1.14 x 10^-10. (fonte: Intel white paper) Um paper de Edelman’s, refere que as entradas erróneas não são facilmete alcançáveis uma vez que existe um padrão não aleatório que é uma pré-condição de acesso a uma dessas entradas. A tabela em si é pequena (+- 1500 entradas), das quais 5 entradas estão erradas. Uma estimativa crua seria de 5/1800, que é muito maior que a verdadeira probabilidade de erro.
Investigação Verificação Formal Abordagem muito diferente de ‘teste de software’ Prova de certificação de código (ou pseudo-código) A prova institui que o programa satisfaz a relação input/output para todas as entradas.
Custo do bug A Intel decidiu substituir todos os processadores de graça caso a substituição tenha sido pedida pelo cliente. As empresas precisam de tratar da reconfiguração: Substituição dos Pentiums poderia custar às empresas uma média de €289 por sistema, incluindo trabalho administrativo e tempos de perda 600 PCs, custariam à uma empresa mais de €200.000.
Negação de serviço Denial of Service Distributed Denial of Service
Ataques negação serviço (DOS) Desabilitaram os serviços da Yahoo, Amazon, eBay, CNN.com, Buy.com, ZDNet, E*Trade, e Excite.com por algumas horas. Os ataques foram activados de uma grande variedade de ‘zombies’ intermediários que foram comprometidos. Os ataques efectuados não necessitaram de intrusão nos alvos a comprometer.
Negação de Serviço Negação de Serviço (DoS) é um ataque que permite que uma pessoa deixe um sistema inutilizável ou consideravelmente lento para os utilizadores legítimos através do consumo de seus recursos, de maneira que ninguém consegue utilizá-los.
DDos – Negação de serviço distribuída A Negação de serviço distribuída (DDoS) utiliza o conceito de computação distribuída para efectuar os ataques. O atacante invade e apropria-se de diversos computadores para executar o ataque a partir de diferentes origens simultaneamente. Trinoo, Tribal Flood Network TFN, TFN2K, Stacheldraht,….
DDos – Negação de serviço distribuída A topologia de uma rede DDoS é dividida em quatro partes. Os sistemas comprometidos são divididos em mestres e agentes. Os agentes geram o tráfego que irá resultar na negação de serviço, estes agentes são controlados por um ou mais mestres. A utilização de duas camadas (mestres e agentes) entre o atacante e a vítima dificulta a analise forense.
Topologia
Prevenção As negações de serviços podem causar grandes prejuízos, esforço, e grandes perdas de tempo. Deve se considerar a protecção relevante de encontro a estes ataques. Isto pode incluir: estabelecer a política apropriada de segurança construir a topologia da rede de tal maneira que limita a eliminação de servidores mútuos. implementação de filtros nos routers, firewalling, instalando as protecções de encontro aos ataques flooding do tcp syn.
Prevenção Fazer o patching do s.o. e dos serviços, logo após a descoberta da vulnerabilidade - isto inclui a monitorização regular de vulnerabilidades uso de sistemas da detecção de intrusões (IDS) a fim de ser informado imediatamente sobre alguma actividade suspeita
Custo da falha O crime informático mais ‘caro’ nos Estados Unidos em 2003 Os ataques resultaram em perdas de $ 1 bilião de dollars nos dias dos ataques. Perdas em vendas e publicidade na ordem dos $200 milhões de dollars $200 milhões de dollars foram gastos em upgrades infra-estrutura de segurança.
Bibliografia “DDOS Outages Cost $1.2 Billion” , Dave Murphy ISSN 1535-3613 Packetstorm, http://packetstorm.securify.com/distributed/ "Strategies for Defeating Distributed Attacks" Simple Nomad, http://www.bindview.com/Support/Razor/Papers/. "Purgatory 101: Learning to cope with the SYNs of the Internet" NightAxis http://packetstorm.securify.com/papers/contest/RFP.doc find_ddos, http://www.fbi.gov/nipc/trinoo.htm zombie_zapper, http://www.bindview.com/Support/RAZOR/Utilities/Windows/ RFC 2267, "Network Ingress Filtering: Defeating Denial of Service Attacks", http://www.faqs.org/rfcs/rfc2267.html catless.ncl.ac.uk/Risks/20.79.html#subj1 Inside Risks 118, CACM 43, 4, April 2000, by P.G.Neumamm “The Mathematics of the Pentium Flaw”, Alan Edelman, http://www-math.mit.edu/%7Eedelman/ “Statistical Analysis of Floating Point Flaw in the Pentium(TM) Processor”, Intel (1994)