Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Capítulo 11 Introdução: Como os sistemas computacionais estão profundamente enraizados em nossos negócios e vidas pessoais, estão aumentando os problemas que resultam dos sistemas e falhas de software. Como os sistemas intensivos de software são tão importantes para os governos, empresas e indivíduos, é essencial que o software usado seja confiável. O software deve estar disponível quando necessário e deve funcionar corretamente e sem efeitos colaterais indesejáveis, como a divulgação de informações não autorizadas. O termo ‘confiança’ foi proposto por Laprie (1995) para cobrir os sistemas relacionados com atributos de disponibilidade, confiabilidade, segurança e proteção. Ultimamente, a confiança dos sistemas costuma ser mais importante do que sua funcionalidade detalhada. As razões para isso são: Falhas de sistema afetam um grande numero de pessoas; Usuários muitas vezes rejeitam sistemas não confiáveis, inseguros ou não protegidos; Custos de falha de sistema podem ser enormes; Sistemas não confiáveis podem causar perda de informações. Software sempre faz parte de um sistema mais amplo, ele executa em um ambiente operacional que inclui o hardware no qual o software é executado, os usuários do software e os processos organizacionais ou de negócios em que o software é usado. Portanto, ao projetar um sistema confiável, você precisa considerar: Falha de hardware; Falha de software; Falha operacional. Propriedades da confiança: A confiança de um sistema de computador é uma propriedade do sistema que reflete sua fidedignidade. Fidedignidade aqui significa, essencialmente, o grau de confiança de um usuário no funcionamento esperado pelo sistema, no fato de que o sistema não “falhará” em condições normal de uso. Não faz sentido expressar essa confiança numericamente. Em vez disso, usamos os termos relativos, como ‘não confiável’, ‘muito confiável’ e ‘ultraconfiável’ para refletir o grau de confiança que podemos ter em um sistema. Existem quatro dimensões principais de confiança: Disponibilidade; Confiabilidade; Segurança; Proteção. Proteção inclui ‘integridade’ (garantindo que o programa e os dados do sistema não estejam danificados) e ‘confidencialidade’ (garantindo que as informações só podem ser acessadas por pessoas autorizadas). Confiabilidade inclui ‘correção’ (garantia de que os serviços de sistema são conforme diz suas especificações), ‘precisão’ (garantia de que a informação é entregue com o nível de detalhamento adequado) e ‘em tempo certo’ (garantindo que a informação é entregue quando necessário). Assim como essas quatro propriedades principais da confiança, você também pode pensar em outras propriedades do sistema como propriedades da confiança: Reparabilidade. Falhas do sistema são inevitáveis, mas a interrupção causada pela falha pode ser minimizada se o sistema puder ser reparado rapidamente. Manutenibilidade. Software manutível é um software que pode ser adaptado economicamente para lidar com novos requisitos, em que existe uma baixa probabilidade de introdução de novos erros no sistema em virtude de mudanças nele. Capacidade de sobrevivência. ‘Sobrevivência’ é a capacidade de um sistema de continuar prestando serviço mesmo sob ataque e, potencialmente, enquanto parte do sistema é desativada. Tolerância a erros. Essa propriedade pode ser considerada parte da usabilidade, e reflete o grau em que o sistema foi projetado de modo a evitar e tolerar erros de entradas de usuário. A noção de confiança de sistema como uma propriedade abrangente foi desenvolvida porque as propriedades de confiança, disponibilidade, proteção, confiabilidade e segurança estão intimamente relacionadas. Geralmente, a operação segura de um sistema depende de ele estar disponível e operando de forma confiável. Portanto, para desenvolver um software confiável, você precisa: Seja evitada a introdução de erros acidentais no sistema durante a especificação e o desenvolvimento de software; Sejam projetados processos de verificação e validação, eficazes na descoberta de erros residuais que afetam a confiança do sistema; Sejam projetados mecanismos de proteção contra ataques externos capazes de comprometer a disponibilidade ou a proteção do sistema; O sistema implantado e seu software de suporte sejam configurados corretamente para seu ambiente operacional. Além disso, você deve assumir que o software não é perfeito e que as falhas de software podem ocorrer. Seu sistema deve, portanto, incluir mecanismos de recuperação que tornem possíveis a restauração do serviço normal do sistema o mais rápido possível. Disponibilidade e confiabilidade: A disponibilidade e a confiabilidade de sistema são propriedades intimamente relacionadas. A disponibilidade de um sistema é a probabilidade de o sistema estar ativo e funcionando para fornecer serviços aos usuários quando estes solicitarem. A confiabilidade de um sistema é a probabilidade dos serviços serem entregues, tal como definido na especificação do sistema. A confiabilidade e a disponibilidade estão intimamente relacionadas, mas às vezes uma é mais importante que a outra. Se os usuários esperam serviços de um sistema de forma contínua, então o sistema tem um requisito de alta disponibilidade, e deve estar disponível sempre que uma solicitação é feita. No entanto, se as perdas que resultam de uma falha de sistema forem baixas, e o sistema puder se recuperar rapidamente, as falhas não afetarão seriamente os usuários do sistema. Nesses sistemas, os requisitos de confiabilidade podem ser relativamente baixos. A confiabilidade e a disponibilidade de sistema podem ser definidas mais precisamente como: Confiabilidade. É a probabilidade de uma operação livre de falhas durante um tempo especificado, em determinado ambiente, para uma finalidade específica. Disponibilidade. É a probabilidade de um sistema, em determinado momento, ser operacional e capaz de entregar os serviços solicitados. A disponibilidade e a confiabilidade são, obviamente, ligadas, assim como falhas no sistema podem travá-lo. No entanto, a disponibilidade não depende apenas do numero de falhas no sistema, mas também do tempo necessário para reparar os defeitos que causaram a falha. Problemas de confiabilidade e disponibilidade do sistema são geralmente causados por falhas de sistema. Algumas dessas falhas são uma consequência de erros específicos ou falhas em outros sistemas relacionados, como sistemas de comunicações. No entanto, muitas falhas são uma consequência de comportamentos errados do sistema, resultantes de defeitos nele. Quando se discute a confiabilidade, é útil usar a terminologia precisa e distinguir entre os termos ‘defeito’, ‘erro’ e ‘falha’. Defeitos de sistema nem sempre resultam em erros de sistema, e erros de sistema nem sempre resultam necessariamente em falhas de sistema. As razões para isso são as seguintes: Nem todos os códigos de um programa são executados, dependendo da maneira que o software é executado; Os erros são transitórios. O sistema pode incluir a detecção de defeitos e mecanismos de proteção. Segurança: Os sistemas críticos de segurança são os sistemas nos quais é essencial que a operação de sistema seja sempre segura, ou seja, que o sistema nunca deve causar danos às pessoas ou ao ambiente, mesmo que ocorra uma falha. O controle de hardware de sistemas críticos de segurança é mais simples de implementar e analisar do que o controle de software. O software crítico de segurança divide-se em duas classes: Software crítico de segurança primária. Esse é um software embutido como um controlador em um sistema. O mau funcionamento do software pode causar mau funcionamento do hardware, o que resulta em danos às pessoas ou ao ambiente. Software crítico de segurança secundária. Esse é um software que pode resultar indiretamente em um dano. Um exemplo desse tipo de software é um sistema de projeto de engenharia auxiliado por computador cujo mau funcionamento pode resultar em um defeito de projeto no objeto que esteja sendo projetado. A confiabilidade e a segurança de um sistema estão relacionadas, mas um sistema confiável pode ser inseguro e vice-versa. Existem quatro razões pelas quais os sistemas de software que são confiáveis não são necessariamente seguros: Nós nunca podemos estar 100% certos de que um sistema de software seja livre de defeitos ou tolerante a defeitos. A especificação pode ser incompleta, sem a descrição do comportamento requerido do sistema em algumas situações críticas. Maus funcionamentos de hardware podem levar o sistema a se comportar de forma imprevisível, bem como apresentar o software com um ambiente imprevisto. Os operadores de sistema podem gerar entradas que por si só não são erradas, mas, em algumas situações, podem causar um mau funcionamento de sistemas. A chave para garantir a segurança é assegurar que os acidentes não ocorram e/ou que as consequências de um acidente sejam mínimas. Frequentemente, os acidentes acontecem quando várias coisas estão erradas ao mesmo tempo. Uma análise de acidentes graves sugere que quase todos aconteceram devido a uma combinação de falhas em partes diferentes de um sistema. Combinações inesperadas de falhas de subsistema levam a interações que resultaram em falha global de sistema. Proteção: A segurança é um atributo do sistema que reflete sua capacidade de se proteger de ataques externos, sejam acidentais ou deliberados. Esses ataques são possíveis porque a maioria dos computadores de uso geral está em rede e é, portanto, acessível a estranhos. Exemplos de ataque podem ser a instalação de vírus e Cavalos de Tróia, o uso não autorizado de serviços de sistema ou a modificação não autorizada de um sistema ou seus dados. Em qualquer sistema de rede, existem três principais tipos de ameaça à proteção: Ameaças à confidencialidade do sistema e seus dados; Ameaças à integridade do sistema e seus dados; Ameaça à disponibilidade do sistema e seus dados. Na prática, a maioria das vulnerabilidades em sistemas sociotécnicos resulta de falhas humanas e não de problemas técnicos. Os controles que você pode colocar em prática para melhorar a proteção de sistemas são comparáveis àqueles de confiabilidade e segurança: Prevenção de vulnerabilidade; Detecção e neutralização de ataques; Limitação de exposição e recuperação. Pontos importantes: A falência de sistemas críticos de computação pode causar grandes prejuízos econômicos, perda de informação séria, danos físicos ou mesmo ameaças à vida humana. A confiança de um sistema computacional é uma propriedade que reflete o grau de confiança do usuário nesse sistema. As dimensões mais importantes da confiança são a disponibilidade, a confiabilidade, a segurança e a proteção. A disponibilidade de um sistema é a probabilidade de ele ser capaz de prestar serviços a seus usuários quando solicitado. A confiabilidade é a probabilidade de os serviços de sistema serem entregues conforme especificado. A confiabilidade está relacionada à probabilidade de ocorrência de um erro em uso operacional. Um programa pode conter defeitos conhecidos, mas ainda ser classificado como confiável pelos usuários, pois estes podem nunca usar recursos do sistema que sejam afetados pelos defeitos. A segurança de um sistema é um atributo que reflete a capacidade do sistema de funcionar, em condições normais, ou não, sem causar danos a pessoas ou ao ambiente. A proteção reflete a capacidade de um sistema de se proteger contra ataques externos. Falhas de proteção podem levar a perda de disponibilidade, danos ao sistema ou aos dados, vazamento de informações para pessoas não autorizadas. Sem um nível razoável de proteção, a disponibilidade, a confiabilidade e a segurança do sistema podem ser comprometidas no caso de ataques externos causarem danos ao sistema. Se um sistema é não confiável, é difícil garantir sua proteção ou segurança, uma vez que esse sistema pode ser comprometido por falhas.