Prévia do material em texto
Indaial – 2021 Segurança aplicada no deSenvolvimento de Software Prof. Nader Ghoddosi 2a Edição Copyright © UNIASSELVI 2020 Elaboração: Prof. Nader Ghoddosi Revisão, Diagramação e Produção: Centro Universitário Leonardo da Vinci – UNIASSELVI Ficha catalográfica elaborada na fonte pela Biblioteca Dante Alighieri UNIASSELVI – Indaial. Impresso por: G427s Ghoddosi, Nader Segurança aplicada no desenvolvimento de software. / Nader Ghoddosi. – Indaial: UNIASSELVI, 2021. 220 p.; il. ISBN 978-65-5663-419-7 ISBN Digital 978-65-5663-420-3 1. Segurança da informação. - Brasil. II. Centro Universitário Leonardo da Vinci. CDD 004 apreSentação Caro acadêmico! Estamos iniciando o estudo da disciplina Segurança Aplicada no Desenvolvimento do Software. Este livro é um dos instrumentos que contribuirá para a sua aprendizagem. A abordagem do livro é sobre a importância da segurança ao longo do desenvolvimento do software. Para isso, serão apresentados os principais conceitos de segurança da informação que interferem diretamente sobre o processo de desenvolvimento. Durante o desenvolvimento de um software, os desenvolvedores buscam garantir a entrega de um produto minimizando as falhas e vulnerabilidades, porém, durante o desenvolvimento, não são raros os casos que os profissionais ignoram as boas práticas de segurança. Desse modo, é essencial que certas rotinas sejam tomadas ao longo de processo, ainda que os modelos tradicionais de criação de softwares não sejam focados no desenvolvimento do software seguro. Para isso, este livro abordará essa importância da segurança como uma vantagem competitiva para as organizações. Na Unidade 1, nós abordaremos os principais conceitos de segurança no desenvolvimento do software e as normas de segurança mais usuais que auxiliam o processo de desenvolvimento seguro. Na Unidade 2 serão elencados os principais passos para o desenvolvimento seguro considerando as aplicações WEB. Além disso, você estudará como fazer uma análise de vulnerabilidade e garantir a segurança dos arquivos do sistema. Na Unidade 3, nós abordaremos questões vinculadas à auditoria do desenvolvimento de sistemas, bem como a avaliação do software. Para isso, você irá compreender a relação entre o treinamento da equipe e a garantia da segurança no processo de desenvolvimento seguro. Aproveitamos a oportunidade para destacar a importância de desenvolver as autoatividades, lembrando que essas atividades não são opcionais. Elas objetivam a fixação dos conceitos apresentados. Em caso de dúvida, durante a realização das atividades, sugerimos que você entre em contato com seu tutor externo ou com a tutoria da UNIASSELVI, não prosseguindo as atividades sem ter sanado todas as dúvidas que irão surgindo. Bons estudos! Nader Ghoddosi Você já me conhece das outras disciplinas? Não? É calouro? Enfim, tanto para você que está chegando agora à UNIASSELVI quanto para você que já é veterano, há novi- dades em nosso material. Na Educação a Distância, o livro impresso, entregue a todos os acadêmicos desde 2005, é o material base da disciplina. A partir de 2017, nossos livros estão de visual novo, com um formato mais prático, que cabe na bolsa e facilita a leitura. O conteúdo continua na íntegra, mas a estrutura interna foi aperfeiçoada com nova diagra- mação no texto, aproveitando ao máximo o espaço da página, o que também contribui para diminuir a extração de árvores para produção de folhas de papel, por exemplo. Assim, a UNIASSELVI, preocupando-se com o impacto de nossas ações sobre o ambiente, apresenta também este livro no formato digital. Assim, você, acadêmico, tem a possibilida- de de estudá-lo com versatilidade nas telas do celular, tablet ou computador. Eu mesmo, UNI, ganhei um novo layout, você me verá frequentemente e surgirei para apresentar dicas de vídeos e outras fontes de conhecimento que complementam o assun- to em questão. Todos esses ajustes foram pensados a partir de relatos que recebemos nas pesquisas institucionais sobre os materiais impressos, para que você, nossa maior prioridade, possa continuar seus estudos com um material de qualidade. Aproveito o momento para convidá-lo para um bate-papo sobre o Exame Nacional de Desempenho de Estudantes – ENADE. Bons estudos! NOTA Olá, acadêmico! Iniciamos agora mais uma disciplina e com ela um novo conhecimento. Com o objetivo de enriquecer seu conhecimento, construímos, além do livro que está em suas mãos, uma rica trilha de aprendizagem, por meio dela você terá contato com o vídeo da disciplina, o objeto de aprendizagem, materiais complemen- tares, entre outros, todos pensados e construídos na intenção de auxiliar seu crescimento. Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo. Conte conosco, estaremos juntos nesta caminhada! LEMBRETE Sumário UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO ............................................ 1 TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE .................................................................. 3 1 INTRODUÇÃO .................................................................................................................................... 3 2 SOFTWARE ........................................................................................................................................... 4 3 MODELOS DE PROCESSO DE SOFTWARE ............................................................................... 5 4 PROCESSO DE DESENVOLVIMENTO DE SOFTWARE .......................................................... 6 5 CICLO DE VIDA DE DESENVOLVIMENTO DE SOFTWARE SEGURO .............................. 9 6 ANÁLISE ESTÁTICA DE CÓDIGO ............................................................................................. 13 7 O PROBLEMA DA SEGURANÇA NO SOFTWARE .................................................................. 14 8 BENEFÍCIOS DO DESENVOLVIMENTO SEGURO ................................................................ 15 RESUMO DO TÓPICO 1..................................................................................................................... 19 AUTOATIVIDADE .............................................................................................................................. 21 TÓPICO 2 — SEGURANÇA DE DADOS ....................................................................................... 23 1 INTRODUÇÃO .................................................................................................................................. 23 2 CONCEITOS DA SEGURANÇA DA INFORMAÇÃO ............................................................. 23 3 PRINCÍPIOS DO SOFTWARE SEGURO ..................................................................................... 27 4 SETE PONTOS DE SEGURANÇA DO SOFTWARE SEGURO ............................................... 28 5 REQUISITOS DE SEGURANÇA DE SOFTWARE .................................................................... 29 6 FERRAMENTAS E TÉCNICAS DE AVALIAÇÃO DOS RISCOS ........................................... 30 6.1 CATEGORIZAÇÃO DE RISCOS ................................................................................................ 31 6.2 GERENCIAMENTO DE RISCOS EM PROJETOS ................................................................... 32 6.3 MATRIZ DE RISCO ...................................................................................................................... 34 7 PADRÕES DE SEGURANÇA.......................................................................................................... 36 RESUMO DO TÓPICO 2..................................................................................................................... 40 AUTOATIVIDADE .............................................................................................................................. 42 TÓPICO 3 — NORMASE MODELOS DE SEGURANÇA .......................................................... 45 1 INTRODUÇÃO ................................................................................................................................. 45 2 MODELO SSE-CMM ....................................................................................................................... 45 3 NORMA ISO/IEC 17799 E ISO/IEC 27001 .................................................................................... 47 3.1 ISO/IEC 27001:2018 ....................................................................................................................... 47 4 ISO/IEC 15408 .................................................................................................................................... 52 LEITURA COMPLEMENTAR ............................................................................................................ 54 RESUMO DO TÓPICO 3..................................................................................................................... 60 AUTOATIVIDADE .............................................................................................................................. 62 REFERÊNCIAS ...................................................................................................................................... 64 UNIDADE 2 — SEGURANÇA NO DESENVOLVIMENTO DE APLICAÇÕES WEB ................ 67 TÓPICO 1 — PRIMEIROS PASSOS PARA O DESENVOLVIMENTO SEGURO DE APLICAÇÕES WEB ........................................................................... 69 1 INTRODUÇÃO ................................................................................................................................. 69 2 FALHAS DURANTE O DESENVOLVIMENTO DO PROJETO ............................................. 70 3 TAXONOMIA DE ATAQUES WEB .............................................................................................. 75 4 TESTES DE SEGURANÇA NAS APLICAÇÕES ESSENCIAIS .............................................. 79 5 CUIDADOS A SEREM TOMADOS NA IMPLANTAÇÃO ..................................................... 82 6 MANUTENÇÃO DO PROJETO .................................................................................................... 87 6.1 DOCUMENTAÇÃO .................................................................................................................... 89 6.2 ARTEFATOS ................................................................................................................................. 91 RESUMO DO TÓPICO 1..................................................................................................................... 94 AUTOATIVIDADE .............................................................................................................................. 96 TÓPICO 2 — ANÁLISE DE VULNERABILIDADE ....................................................................... 99 1 INTRODUÇÃO .................................................................................................................................. 99 2 A SEGURANÇA DE APLICAÇÕES NA GESTÃO DA SEGURANÇA DA INFORMAÇÃO ............................................................................................... 99 3 REPOSITÓRIOS E PADRÕES ..................................................................................................... 104 4 CLASSIFICAÇÃO DAS TÉCNICAS DE VARREDURAS DE VULNERABILIDADE ..... 107 5 PROCESSO DE ANÁLISE DE VULNERABILIDADE ............................................................ 109 6 PROCEDIMENTOS PARA A GESTÃO DE VULNERABILIDADE...................................... 112 7 TESTE DE PENETRAÇÃO ............................................................................................................ 113 RESUMO DO TÓPICO 2................................................................................................................... 118 AUTOATIVIDADE ............................................................................................................................ 120 TÓPICO 3 — SEGURANÇA DOS ARQUIVOS DO SISTEMA ................................................ 123 1 INTRODUÇÃO ................................................................................................................................ 123 2 CONTROLE DE ACESSO AO CÓDIGO-FONTE DO PROGRAMA ................................... 123 2.1 CODIFICAÇÃO SEGURA ......................................................................................................... 125 2.2 CODIFICAÇÃO SEGURA NO CERT ...................................................................................... 128 2.3 CODIFICAÇÃO SEGURA NO PROJETO ABERTO DE SEGURANÇA EM APLICAÇÕES WEB (OWASP) ............................................................................................................................. 128 2.4 CODIFICAÇÃO SEGURA NA MICROSOFT ......................................................................... 130 2.5 PRINCÍPIOS DA ARQUITETURA SEGURA ........................................................................ 131 LEITURA COMPLEMENTAR .......................................................................................................... 133 RESUMO DO TÓPICO 3................................................................................................................... 141 AUTOATIVIDADE ............................................................................................................................ 143 REFERÊNCIAS .................................................................................................................................... 145 UNIDADE 3 — SEGURANÇA E AUDITORIA NO DESENVOLVIMENTO DO SOFTWARE ..................................................................................................... 152 TÓPICO 1 — AUDITORIA DO DESENVOLVIMENTO DE SISTEMAS .............................. 154 1 INTRODUÇÃO ................................................................................................................................ 154 2 CONCEITOS DE SISTEMAS ........................................................................................................ 154 3 CONCEITOS DE AUDITORIA DE SISTEMAS ....................................................................... 157 4 ABORDAGEM DE AUDITORIA DE SISTEMAS ................................................................... 160 4.1 ABORDAGEM AO REDOR DO COMPUTADOR ................................................................. 163 4.2 ABORDAGEM ATRAVÉS DO COMPUTADOR .................................................................... 164 4.3 ABORDAGEM COM O COMPUTADOR ............................................................................... 164 5 ATIVIDADES DO MÉTODO DE AUDITORIA PARA DESENVOLVIMENTO DE SOFTWARE ......................................................................................................................................... 165 RESUMO DO TÓPICO 1................................................................................................................... 170 AUTOATIVIDADE ............................................................................................................................ 172 TÓPICO 2 — AVALIAÇÃO DO SOFTWARE DE AUDITORIA DE SISTEMAS .................. 176 1 INTRODUÇÃO ................................................................................................................................ 176 2 METODOLOGIAS DE SELEÇÃO .............................................................................................. 176 2.1 COBIT .......................................................................................................................................... 177 2.2 CMMI ............................................................................................................................................ 181 2.3 MELHORIA DO PROCESSO DOSOFTWARE BRASILEIRO (MPS.BR) .......................... 184 2.4 ISO/IEC 12207 .............................................................................................................................. 187 3 ASPECTOS FUNCIONAIS ............................................................................................................ 188 4 ASPECTOS DA GESTÃO .............................................................................................................. 189 5 ASPECTOS RELACIONADOS À TECNOLOGIA ................................................................... 190 RESUMO DO TÓPICO 2................................................................................................................... 193 AUTOATIVIDADE ............................................................................................................................ 195 TÓPICO 3 — TREINAMENTO DE SEGURANÇA ..................................................................... 198 1 INTRODUÇÃO ................................................................................................................................ 198 2 IMPACTOS ...................................................................................................................................... 198 3 ORGANIZAÇÃO DO TRABALHO DE AUDITORIA ............................................................ 203 3.1 PLANEJAMENTO ...................................................................................................................... 204 3.2 ESCOLHA DA EQUIPE ............................................................................................................. 204 3.3 PROGRAMAÇÃO DA EQUIPE ............................................................................................... 205 3.3.1 Papéis e responsabilidades ............................................................................................... 207 3.4 EXECUÇÃO DE TRABALHOS E SUPERVISÃO ................................................................... 207 3.5 REVISÃO DOS PAPÉIS DE TRABALHOS ............................................................................. 208 3.6 ATUALIZAÇÃO DO CONHECIMENTO PERMANENTE ................................................. 208 3.7 AVALIAÇÃO DA EQUIPE ........................................................................................................ 209 3.8 DOCUMENTAÇÃO DOS PAPÉIS DE TRABALHO ............................................................. 209 4 CONTROLES ORGANIZACIONAIS E OPERACIONAIS..................................................... 209 5 O PAPEL DO USUÁRIO ............................................................................................................... 210 LEITURA COMPLEMENTAR .......................................................................................................... 212 RESUMO DO TÓPICO 3................................................................................................................... 215 AUTOATIVIDADE ............................................................................................................................ 217 REFERÊNCIAS .................................................................................................................................... 219 1 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO OBJETIVOS DE APRENDIZAGEM PLANO DE ESTUDOS A partir do estudo desta unidade, você deverá ser capaz de: • conhecer o ciclo de desenvolvimento do software seguro; • compreender os principais conceitos de segurança dos softwares; • conhecer as principais normas de segurança; • reconhecer as categorias de risco no desenvolvimento do software; • relacionar segurança com processo de desenvolvimento do software. Esta unidade está dividida em três tópicos. No decorrer da unidade, você encontrará autoatividades com o objetivo de reforçar o conteúdo apresentado. TÓPICO 1 – DESENVOLVIMENTO DE SOFTWARE TÓPICO 2 – SEGURANÇA DE DADOS TÓPICO 3 – NORMAS E MODELOS DE SEGURANÇA Preparado para ampliar seus conhecimentos? Respire e vamos em frente! Procure um ambiente que facilite a concentração, assim absorverá melhor as informações. CHAMADA 2 3 TÓPICO 1 — UNIDADE 1 DESENVOLVIMENTO DE SOFTWARE 1 INTRODUÇÃO O processo de desenvolvimento de software é algo complexo e, para isso, é preciso um conjunto de atividades organizadas e sequências estruturadas em passos definidos (SÊMOLA, 2003; ALVES, 2006; FONTES, 2006; 2011). Esse conjunto de atividades é definido como um processo de desenvolvimento de software, que recebe ajuda da engenharia de software (ALVES, 2006; FONTES, 2011). Uma das etapas que causa grande preocupação nesse processo é a falta de segurança nos projetos de desenvolvimento, o que gera vulnerabilidades (FERREIRA, 2003; SÊMOLA, 2003; ALVES, 2006). Em função disso, as organizações estão em uma busca contínua para adotar medidas mais eficazes de proteção alinhadas às metodologias de segurança (FONTES, 2006; WAGNER, 2011; FERNANDES, 2013; GALITEZI, 2011). Essas metodologias são necessárias, já que Kolbe Junior (2020) relata que, em 2019, ocorreram 85 bilhões de tentativas de ataques cibernéticos, sendo que, no Brasil, ocorreram mais de 24 bilhões de tentativas de ataques. Isso denota a grande importância de as empresas adotarem protocolos de segurança para mitigar as suas vulnerabilidades durante o processo de desenvolvimento de software. No período de Corona Vírus (Covid-19), aumentaram, de modo significativo, os ataques de hackers contra empresas, já que as ferramentas que adotam o acesso remoto aumentaram 333% no Brasil (KOLBE, 2020). O número de brasileiros prejudicados por crimes virtuais é maior do que a média mundial, assim, isso coloca o Brasil entre os mais prejudicados por esse tipo de crime (WALTRICK, 2016). Em casos recentes, como da maior fabricante de produtos militares do mundo, a Lockheed Martin, teve sua rede invadida por hackers que tinham, como alvo, os trabalhadores remotos (WALTRICK, 2016). NOTA https://www.cliccamaqua.com.br/noticias/2/policia.html UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 4 FIGURA 1 – PREJUÍZO FINANCEIRO CAUSADO PELOS CRIMES VIRTUAIS FONTE: <http://bit.ly/2WrncLp>. Acesso em: 15 maio 2020. Desse modo, podemos observar que existe a necessidade de produtos de software que, além suportarem os negócios, apresentem melhorias de segurança contínua. Neste tópico, entenderemos o processo de desenvolvimento e as suas características para permitir a segurança do software. 2 SOFTWARE Para iniciar este subtópico, vamos definir o que é software? Conforme Pressman e Maxim (2016), o software de computador é um produto que os desenvolvedores constroem e o mantêm ao longo do tempo. Sommerville (2011) coloca que software não é somente o programa, mas toda a documentação associada, além dos dados necessários para executar os programas de modo adequado. Entretanto, um grande ponto a ser considerado na segurança do desenvolvimento de software e que está relacionado com a sua definição é o fato de que um determinado software pode ser composto por algumas dezenas de linhas de código desenvolvidas por um programador ou pode ser constituído TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 5 por milhões de linhas de código, dados de configuração, documentação etc. (FONTES, 2006; 2011). Portanto, para que o software tenha qualidade e segurança, é essencial seja desenvolvido por meio de um processo adequado. 3 MODELOS DE PROCESSO DE SOFTWARE O processo de software desenvolvido em uma organização é, geralmente, formulado através de padrões previamente descritos, sendo que estes definem um conjunto de ações e atividades, necessárias ao desenvolvimento do software (FONTES, 2006; SOMMERVILLE, 2011; PRESSMAN; MAXIM, 2016). Portanto, um modelo de processo de software pode ser compreendido como um roteiro a ser seguido para desenvolver um software de alta qualidade em um tempo determinado (PRESSMAN; MAXIM, 2016). Esse modelode processo pode ser considerado uma representação abstrata de um processo de software (SOMMERVILLE, 2011). Existem inúmeros modelos de processo de software que você pode revisar no Livro Didático de Engenharia de Software. Os modelos prescritivos prescrevem um conjunto de elementos e o modo como esses elementos se inter-relacionam (SOMMERVILLE, 2011; PRESSMAN; MAXIM, 2016). Temos um conjunto de quatro modelos prescritivos (SOMMERVILLE, 2011; PRESSMAN; MAXIM, 2016): • Modelo cascata: atividades de especificação, desenvolvimento, validação e evolução, que são fundamentais ao processo, como fases separadas do processo, como a especificação de requisitos, o projeto de software, os testes, e assim por diante. • Modelo incremental: combina elementos dos fluxos de processos lineares e paralelos. Desse modo, cada uma das sequências lineares gera um incremento do software. Esses incrementos são entregáveis e prontos para o cliente, portanto, o modelo de processo incremental entrega um produto operacional a cada incremento, isso significa um produto sem erros e pronto para o usuário usar. • Modelo evolucionário: caracterizado por ser iterativo e ter características que possibilitem o desenvolvimento de versões mais completas do software. O software evolui com o tempo e de acordo com as mudanças nas necessidades de negócio e de produtos que se modificam frequentemente. Os modelos evolucionários se caracterizam por dois modelos comuns: prototipação e espiral. A prototipação é usada quando o desenvolvedor não tem certeza quanto à eficiência de um algoritmo, ou quanto à adaptabilidade de um sistema operacional. Já o modelo espiral garante um grande potencial para um desenvolvimento rápido de versões mais completas. • Modelo baseado em componentes: tem, como base, a existência de um número significativo de componentes reutilizáveis. O processo de desenvolvimento de software se concentra na integração desses componentes, ao contrário de proceder ao desenvolvimento a partir do zero. UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 6 4 PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Os softwares são responsáveis pela geração de informações, por isso, a segurança do software está atrelada à segurança da informação (SÊMOLA, 2003; WAGNER, 2011; FERNANDES, 2013; GALITEZI, 2011). Conforme Sêmola (2003) e Fontes (2011), a segurança da informação é definida como um conjunto de orientações, normas, procedimentos, políticas ou outras ações que protejam o recurso à informação. Outro ponto importante levantado por Fontes (2011) e Fernandes (2013) é que o processo de software é definido como um conjunto de atividades e resultados que origina um produto. As atividades fundamentais e similares a todos os processos de desenvolvimento de software são: especificação, desenvolvimento, validação e evolução (FONTES, 2011; SOMMERVILLE, 2011; PRESSMAN; MAXIM, 2016). No mercado competitivo atual, o processo bem definido e organizado das atividades essenciais para o desenvolvimento de um software é uma vantagem cada vez maior (GALITEZI, 2011; KOLBE, 2020). Uma empresa que trabalha com controle no desenvolvimento, testes, integração de sistemas e, ainda, possui uma equipe capacitada para garantir projetos adequados às necessidades dos clientes, possui mais chances de sucesso nesse mercado competitivo (KOLBE, 2020). FIGURA 2 – PROCESSOS DE DESENVOLVIMENTO DE SOFTWARE FONTE: <https://www.softvision.com.br/software.html>. Acesso em: 18 maio 2020. https://www.softvision.com.br/software.html TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 7 As atividades listadas são organizadas em diferentes processos, com níveis diferenciados de detalhamento e, ainda, com prazos diversificados (FONTES, 2011; LYRA, 2008). Portanto, o desenvolvimento de um produto pode ocorrer por processos distintos, mesmo que esse seja um produto similar ou igual, porém, se um processo inadequado for usado, isso gerará o comprometimento da qualidade do produto final, que está em desenvolvimento (SÊMOLA, 2003; FONTES, 2011). Então, agora, entenderemos melhor as fases dos processos para o desenvolvimento seguro de um software. QUADRO 1 – FASES E ATIVIDADES COMUNS NOS MODELOS DE DESENVOLVIMENTO DE SOFTWARES FONTE: Adaptado de Fontes (2006) Analisando a descrição das fases, percebemos que as atividades de desenvolvimento de um processo de software são afetadas por ações específicas para um único objetivo comum, que é o produto de software. Conforme Li e Cui (2010) e Fernandes (2013), existe uma combinação de classificações realizadas por autores, tendo, em comum, uma lista com as principais atividades de cada fase. FASES DESCRIÇÃO Especificação de requisitos Engloba uma análise dos requisitos, independentemen- te do modelo de processos selecionado para se desen- volver um software. Nesta etapa, é necessário conhecer quais serão as necessidades e restrições do software. Projeto de sistema Esta fase abrange o projeto a partir de análises e tradu-ção dos requisitos. Com isso, ocorre a codificação. Programação Desenvolvimento do código-fonte em uma linguagem de programação. Isso representa o controle do sistema, a lógica e as operações, conforme o que foi descrito e levantado na fase de especificação de requisitos. Verificação e validação Nesta etapa, são efetuados os testes, a verificação do sistema checando se o produto ou seus componentes estão de acordo com as necessidades do cliente. Ainda, é averiguada a satisfação dos clientes com o software, visando à qualidade do produto final. Manutenção e evolução Nesta etapa, ocorrem as mudanças, ajustes, reparos ou melhorias que os requisitos venham sofrer após o siste- ma ser colocado em desenvolvimento. UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 8 QUADRO 2 – PROCESSO DE DESENVOLVIMENTO DE SOFTWARE FONTE: Adaptado de Fernandes (2013) O produto final, portanto, está atrelado às atividades de cada fase do processo de desenvolvimento, que são especificadas, detalhadas e, ainda, são colocadas em uma ordem (FONTES, 2011; FERNANDES, 2013). Esses processos auxiliam e orientam modelos diferentes de desenvolvimento de softwares. Um dos pontos críticos ligados no processo de desenvolvimento é a segurança, além da proteção das informações confidenciais (FERREIRA, 2003). Isso porque, atualmente, os clientes consideram as práticas de segurança e privacidade como um ponto crucial na decisão de escolher um fornecedor de serviços. Assim, a segurança cria novas oportunidades de negócio. De acordo ESPECIFICAÇÃO Engenharia de sistema Estabelecer uma solução comum para o problema, envolvendo questões extra software. Análise de requisitos Realizar o levantamento das necessida- des do software a ser implementado. Nesta etapa, o objetivo é desenvolver uma especificação de requisitos, que, geralmente, é um documento. Especificação de sistema Uma descrição funcional do sistema, podendo incluir um plano de testes para verificar a adequação. PROJETO Projeto arquitetural Desenvolvimento de um modelo conceitual para o sistema, composto de módulos mais ou menos independentes. Projeto de interface Cada módulo possui sua interface de comunicação alinhada, definida e com- preendida. Projeto detalhado Definição dos módulos, e tradução para pseudocódigo. IMPLEMENTA- ÇÃO Codificação Implementação do sistema em uma lin- guagem de computador. VALIDAÇÃO Teste de unidade e módulo Realização de testes para verificação dos erros e comportamento adequado a nível das funções e módulos básicos do sistema. Integração Junção dos diferentes módulos em um produto de software homogêneo, além da verificação da interação entre estes quando operando em conjunto. MANUTENÇÃO E EVOLUÇÃO O software entra em um ciclo interativo que engloba todas as fases anteriores. TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 9 com Kolbe (2020), a segurança do software está ligada à resistência e tolerância a eventos que ameacem a integridade. Consequentemente,a segurança do software corresponde à habilidade do software de evitar, além de suportar eventos que ameacem a dependabilidade (WALTRICK, 2016; KOLBE, 2020). Conforme Fontes (2006), a segurança do software é o seu desenvolvimento seguro, isso significa certificar a sua segurança e capacitar os desenvolvedores, arquitetos e os usuários acerca do desenvolvimento de produtos seguros. 5 CICLO DE VIDA DE DESENVOLVIMENTO DE SOFTWARE SEGURO O ciclo de vida de desenvolvimento seguro é essencial para que a organização proteja suas informações, mas também as informações dos clientes e parceiros (SILVA, 2017). Um ciclo implementado de modo adequado pode garantir mais confiabilidade e redução de custos, portanto, o que se percebe é que é necessário desenvolver aplicações seguras, visto que os ataques evoluíram de modo significativo, além das suas motivações. QUADRO 3 – MUDANÇAS DAS MOTIVAÇÕES DOS ATAQUES FONTE: Adaptado de Silva (2017) Conforme a regra de Myers (2004), o custo de manutenção de uma aplicação pode ser até 10 vezes maior a cada ciclo de vida de desenvolvimento. Dependabilidade é a propriedade que define a capacidade dos sistemas computacionais de prestarem um serviço que se pode justificadamente confiar. Dentre os atributos, estão: confiabilidade, segurança, disponibilidade e mantenabilidade (FONTES, 2011). NOTA Passado Presente e futuro Motivados pelo desafio de in- vadir os sistemas. Demonstração de conhecimen- to técnico. Ataques focados nas empresas. Motivação financeira. Ataques direcionados. Sequestro de dados pessoais e corporativos. Ataque a pessoas. Comprometimento de dispositivos. Comprometimento de pequenas empresas para atacarem grandes empresas. UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 10 Essa regra denota o custo da correção de um defeito, o que pode gerar um aumento devido à demora da descoberta do defeito (MYERS, 2004). O que se verifi ca é que os defeitos visualizados nas fases iniciais apresentam um menor custo do que aqueles encontrados na fase de produção. FIGURA 3 – REGRA DE MYERS FONTE: <http://bit.ly/3nwbqeo>. Acesso em: 20 maio 2020. O desenvolvimento seguro não é somente a codifi cação, engloba a infraestrutura para suportar o ambiente da aplicação. Desse modo, é preciso investir na proteção de todo o ambiente (HOWARD; LIPNER, 2006). Agora, compreenderemos um processo de ciclo de vida de desenvolvimento seguro muito utilizado que possui, como base, o Security Development Lifecycle (SDL – Ciclo de Vida do Desenvolvimento Seguro). O SDL se concentra no desenvolvimento de software introduzindo a segurança e a privacidade em todas as fases do desenvolvimento. O SDL concilia uma abordagem global com a prática de minimização do número e do grau de severidade das vulnerabilidades nos produtos e serviços da Microsoft (HOWARD; LIPNER, 2006; SILVA, 2017). O SDL é compartilhado de modo gratuito pela Microsoft com organizações de desenvolvimento de clientes e do setor de software, tendo, como resultado, o desenvolvimento de softwares mais seguros (HOWARD; LIPNER, 2006; SILVA, 2017). TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 11 QUADRO 4 – DESCRIÇÃO DAS FASES DO PROCESSO SDL Pré-SDL – Treinamento - Fase fundamental para um processo de desenvolvimento seguro de sucesso. - Conteúdo direcionado de acordo com o público-alvo. - Etapa recorrente e ter o mínimo de colaboradores treinados. Fase 1 – Requisitos - Identificação de segurança necessária, requisitos mínimos de qualquer aplicação. - Levantar legislação vigente, políticas internas e externas. - Privacidade. - Segurança dos dados. - Aprofundamento na avaliação dos riscos de segurança e da privacidade. - Definir os especialistas para o desenvolvimento e de segurança da informação. - Definir quality gates quando avança a próxima etapa, isso deve contemplar falhas de segurança. Fase 2 – Design - Arquitetar a aplicação com base nos requisitos. - Classificar o tipo de dado, isso se torna um baseline para os próximos projetos. - Uso e verificação de criptografia para proteger informações sensíveis. - Definir o algoritmo que será usado. - Reduzir a superfície de ataque, utilizando proteção em camadas, Web Application Firewall, utilização de DMZ, banco de dados não exposto para internet etc. - Atuar com o princípio de menor privilégio. - Checklist para não esquecer de algum ponto. Fase 3 – Implementação - Etapa da codificação. - Banir o uso de APIs inseguras e funções frágeis e realizar a devida documentação para que todos tenham conhecimento. - Ferramenta de análise estática realizada pelo próprio desenvolver. - Realizar revisão de código com apoio de ferramentas. - Realizar teste não estruturado possibilita identificar comportamento anômalo. - Realizar revisão de código manual para identificar se há falso positivo e se possível outro desenvolvedor realizar essa análise manual. - Escrever um código limpo para que a manutenção possa ser realizada por outro time. UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 12 Fase 4 – Verificação - Fase do teste da aplicação, usando métodos para validar se a aplicação está operando conforme o esperado. - Análise dinâmica, verifica a aplicação, possibilita verificar alguns problemas de segurança, comportamento do ambiente que suporta a aplicação. - Revisão dos controles implementados para os riscos identificados na análise de ameaça. - Realizar teste de penetração, com profissionais especiali- zados, podendo ser internos ou terceiros. Fase 5 – Release - Requisitos de privacidade. - Requisitos de segurança da informação. Pós-SDL – Resposta - Prática do plano de resposta a incidentes. - Documentação e atualização são imprescindíveis para o sucesso do processo. FONTE: Adaptado de Silva (2017) A ciência da segurança é a ciência interna do SDL, desenvolvida para compreender como os sistemas de computador são invadidos, e, ainda, como esses ataques poderiam ser minimizados ou evitados. Desse modo, a ciência da segurança elabora e desenvolve técnicas e ferramentas inovadoras que auxiliam a dificultar os ataques a softwares (HOWARD; LIPNER, 2006). O SDL é mais eficaz devido à ciência da segurança em função de: • Auxiliar na localização das vulnerabilidades do software. • Desenvolver ferramentas e técnicas de mitigação de explorações que serão adotadas pelos desenvolvedores. • Monitorar as tendências de modo contínuo. • Aperfeiçoar as ferramentas e os processos através dos monitoramentos das ameaças. O monitoramento contínuo é primordial, já que, quando uma nova ameaça entra no ecossistema, são ativados os processos de resposta de segurança da Microsoft. A Microsoft utiliza o SDL para incluir práticas de segurança comprovadas no desenvolvimento de software. O grande ponto a ser considerado é que as ameaças aos softwares não são estáticas e, por isso, o SDL sofre um processo de aperfeiçoamento ao longo dos anos (HOWARD; LIPNER, 2006). Isso possibilita um refinamento e melhoramento da tecnologia, ainda, um compartilhamento, de modo agressivo, das práticas recomendadas com desenvolvedores de software de terceiros para o auxílio de uma prática em computação segura para todos. TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 13 FIGURA 4 – LINHA DO TEMPO DE APERFEIÇOAMENTO DO PROCESSO SDL FONTE: O autor 6 ANÁLISE ESTÁTICA DE CÓDIGO A análise estática de código é umas das técnicas estáticas de inspeção de software no processo de verificação e validação (V&V), sendo uma análise automatizada seguida de uma análise profissional dos resultados obtidos (ALVES, 2006; LI; BAOJIANG, 2010). A verificação ocorre antes que o software seja executado. Os verificadores estáticos são considerados ferramentas importantes que varrem o código-fonte ou o código-objeto para chamar a atenção do desenvolvedor para anomalias do programa, como variáveis utilizadas sem serem iniciadas, variáveis não utilizadas ou atribuições com valores fora dos seus limites (LI; CUI, 2010). As anomaliassão, usualmente, produto de erros de programação ou ausência, de maneira que elas sinalizam erros que poderiam prejudicar o software quando ele fosse executado (LI; CUI, 2010; CARVALHO, 2017). Entretanto, essas anomalias não são, necessariamente, defeitos de programa, por isso, a necessidade da análise profissional. Desse modo, o objetivo da análise é destacar os problemas, para sua correção com objetividade, tendo, como resultado, mais eficiência no processo de desenvolvimento seguro (ALVES, 2006; LI; CUI, 2010). A análise estática pode ser agrupada em: • Verificação por estilo: examina elementos, como endentação, espaços e tabs, convenção de nomes, alinhamento na vertical etc. Esses aspectos contribuem para que o código seja padronizado, organizado e legível. • Verificação por boas práticas: utiliza muitas regras para verificar se as práticas corretas estão sendo efetivadas, como: evitar duplicação de código; garantir o correto uso de encoding; tamanho de métodos, classes e parâmetros; utilização do padrão Singleton etc. O conjunto de regras utilizadas é extenso para garantir que o código tenha as melhores práticas. • Verificação por bugs: encontrar erros no sistema, permitindo a antecipação de problemas no software. A ferramenta mais usada, nesse processo, é o Firebug. UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 14 A verificação das ferramentas PMD e Checkstyle é feita sobre código-fonte não compilado (arquivo com extensão .java), porém, a verificação com Firebug analisa bytecodes (arquivos compilados do Java, com extensão .class). Desse modo, para análi- ses envolvendo Firebug, uma compilação prévia é necessária. NOTA 7 O PROBLEMA DA SEGURANÇA NO SOFTWARE Ao longo deste tópico, podemos perceber a importância dos softwares e dos seus processos ao longo do desenvolvimento. No entanto, quando ocorre uma falha, devido a erros de programação, inúmeros problemas são gerados decorrentes das vulnerabilidades no software (FONTES, 2008; 2011). A codificação é considerada um dos maiores causadores dessas vulnerabilidades, já que, muitas vezes, o programador considera, geralmente, os cenários positivos, não se preocupando com o caso de ataques (BASU, 2015; TORRES; TORRES, 2016; FERREIRA, 2019). Os imprevistos causados pela exploração dessas vulnerabilidades estão vinculados com a perda da integridade da informação ou a divulgação indevida (PINHEIRO, 2007; FONTES, 2008; FONTES, 2011; WAGNER, 2011). A Microsoft (2010 apud FERREIRA, 2019) utiliza o acrônimo STRIDE para classificar os efeitos provocados pelas falhas de segurança. TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 15 FONTE: O autor Esses efeitos podem causar impactos de baixo a alto valor que irão depender do sistema computacional no qual o software está sendo executado. Conforme Fontes (2011), os incidentes podem ser simples, como a reinstalação de um aplicativo em uma máquina, ou impactos sérios, que afetam a vida humana, como a perda de controle de um sistema de transmissão de energia elétrica, ou de sistemas de comunicação, por exemplo. Fernandes (2013) destaca que o uso contínuo da internet aumenta as possibilidades de ataques, por isso, o desenvolvimento de software tem sofrido uma evolução constante para incorporar a segurança da informação durante todas as fases de desenvolvimento. 8 BENEFÍCIOS DO DESENVOLVIMENTO SEGURO Geralmente, as empresas iniciam os programas de desenvolvimento de software se concentrando na funcionalidade, e os testes segurança são acrescentados no fim do processo de desenvolvimento (ALVES, 2006; FONTES, 2011; KOLBE JUNIOR, 2020). Entretanto, essa abordagem possui desvantagens em relação a um processo que engloba a segurança durante todo o desenvolvimento. FIGURA 5 – ACRÔNIMO STRIDE PROPOSTO PELA MICROSOFT UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 16 FIGURA 6 – CHARGE SOBRE SEGURANÇA DE SOFTWARE FONTE: <http://bit.ly/2WvMnw6>. Acesso em: 19 jun. 2020. Conforme o National Institute of Standards and Technology (NIST), as correções de código, que são executadas após o lançamento, geram, aproximadamente, um custo 30 vezes maior do que das correções efetuadas durante a fase inicial (GALITEZI, 2011; KOLBE JUNIOR, 2020). As empresas que adotam um processo estruturado apresentam maior probabilidade de localizarem e corrigirem as vulnerabilidades no início do ciclo de desenvolvimento (GALITEZI, 2011). O que precisamos considerar é que a prática de segurança no desenvolvimento de softwares não é utilizada por todos, mas por aqueles desenvolvedores, que usam uma abordagem preventiva coordenada, que obtêm um retorno aproximadamente quatro vezes maior do que o investimento anual (GALITEZI, 2011; WAGNER, 2011). Então, os principais benefícios de um desenvolvimento seguro, conforme Wagner (2011), são: • Economia: a definição de requisitos de segurança e a manutenção de equipes que compreendam os conceitos fundamentais de segurança permitem que as informações utilizadas ao longo do desenvolvimento do software sejam usadas quando estritamente necessárias. Um código seguro é a efetivação de um projeto de sucesso, já que evita as vulnerabilidades e os defeitos. O TÓPICO 1 — DESENVOLVIMENTO DE SOFTWARE 17 resultado será economia no tempo e nos recursos, tendo um projeto rentável e eficiente para a empresa. • Produtividade: os profissionais assimilaram o sistema e, com isso, estabeleceram um modelo de trabalho compartilhado. No entanto, as informações são partilhadas de maneira ágil e incorporadas, garantindo a segurança do desenvolvimento do software. Isso permite mais produtividade dos profissionais envolvidos. • Foco: uma organização que investe em segurança faz com que os desenvolvedores se entendam e foquem o seu tempo nos processos, ou seja, compreendam as estratégias de mercado e apliquem no desenvolvimento do software. O que podemos observar é que, atualmente, muito se fala da segurança, mas é na segurança de software que tudo começa, já que um processo seguro de desenvolvimento envolve proteção física, tecnológica, conscientização dos profissionais envolvidos, e cada um tem suas ameaças, vulnerabilidades e riscos, o que gera desafios constantes. O que podemos verificar, ao longo deste tópico, é que a proteção é um desafio de grande importância na organização e precisa ser considerado em todas as etapas do desenvolvimento do software para que sua segurança seja garantida. Para finalizar este tópico, vamos entender a diferença entre qualidade do processo de software versus qualidade do produto de software. Conforme Bartie (2002) e Basu (2015), a qualidade se refere a algo operacional que precisa estar em conformidade com as especificações que foram definidas, porém, a qualidade do produto é definida como as características do produto. NOTA UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 18 FONTE: Adaptado de <http://bit.ly/3h2s3fp>. Acesso em: 18 jun. 2020. QUALIDADE DO PROCESSO DE SOFTWARE VERSUS QUALIDADE DO PRODUTO DE SOFTWARE 19 Neste tópico, você aprendeu que: • O processo de desenvolvimento de softwares é algo complexo e, para isso, é preciso um conjunto de atividades organizadas e sequências estruturadas em passos definidos. • Um grande ponto a ser considerado na segurança do desenvolvimento de software, e que está relacionado com a sua definição, é o fato de que um determinado software pode ser composto por algumas dezenas de linhas de código desenvolvidas por um programador, ou pode ser constituído por milhões de linhas de código, dados de configuração, documentação etc. • O processo de software desenvolvido em uma organização é, geralmente, formulado através de padrões previamente descritos. • A segurança da informação é definida como um conjunto de orientações, normas, procedimentos, políticas ou outras ações que proteja o recurso à informação. • Um ponto crítico ligado ao processo de desenvolvimento é a segurança, além da proteção das informações confidenciais. Consequentemente,a segurança do software corresponde à habilidade do software de evitar, além de suportar eventos que ameacem a dependabilidade. • O desenvolvimento seguro não é somente a codificação, engloba a infraestrutura, para suportar o ambiente da aplicação. Desse modo, é preciso investir na proteção de todo o ambiente. • O SDL se concentra no desenvolvimento do software, introduzindo a segurança e a privacidade em todas as fases do desenvolvimento. O SDL concilia uma abordagem global com a prática de minimização do número e do grau de severidade das vulnerabilidades nos produtos e serviços da Microsoft. • O monitoramento contínuo é primordial, já que, quando uma nova ameaça entra no ecossistema, são ativados os processos de resposta de segurança da Microsoft. • A análise estática de código é umas das técnicas estáticas de inspeção de software no processo de Verificação e Validação (V&V), sendo uma análise automatizada seguida de uma análise profissional dos resultados obtidos. RESUMO DO TÓPICO 1 20 • As anomalias são, usualmente, produto de erros de programação ou ausência, de maneira que elas sinalizam erros que poderiam prejudicar o software quando ele fosse executado. • A codificação é considerada como um dos maiores causadores dessas vulnerabilidades, já que, muitas vezes, o programador considera, geralmente, os cenários positivos, não se preocupando com o caso de ataques. • A prática de segurança no desenvolvimento de softwares não é utilizada por todos, mas por aqueles desenvolvedores que usam uma abordagem preventiva coordenada, que obtêm um retorno aproximadamente quatro vezes maior do que o investimento anual. 21 1 O desenvolvimento de um produto pode ocorrer por processos distintos, mesmo que seja um produto similar ou igual, porém, se um processo inadequado for usado, isso gerará o comprometimento da qualidade do produto final que está em desenvolvimento (SÊMOLA, 2003; FONTES, 2011). Considerando essa afirmação, descreva as fases de processos para o desenvolvimento seguro de um software. 2 O desenvolvimento seguro não é somente a codificação, engloba a infraestrutura para suportar o ambiente da aplicação. Desse modo, é preciso investir na proteção de todo o ambiente (HOWARD; LIPNER, 2006). Agora, assinale a alternativa INCORRETA: a) ( ) O SDL se concentra no desenvolvimento de software, introduzindo a segurança e a privacidade em todas as fases do desenvolvimento. b) ( ) O SDL concilia uma abordagem global com a prática de minimização do número e do grau de severidade das vulnerabilidades nos produtos e serviços da Microsoft. c) ( ) A ciência interna do SDL foi desenvolvida para compreender como os sistemas de computador são seguros e com planos de contingência. d) ( ) O SDL é compartilhado de modo gratuito pela Microsoft com organi- zações de desenvolvimento de clientes e do setor de software, tendo, como resultado, o desenvolvimento de softwares mais seguros. 3 O que precisamos considerar é que a prática de segurança no desenvolvimento de softwares não é utilizada por todos, mas aqueles desenvolvedores que usam uma abordagem preventiva coordenada obtêm um retorno aproximadamente quatro vezes maior do que o investimento anual (GALITEZI, 2011; WAGNER, 2011). Sobre o exposto, classifique V para as sentenças verdadeiras e F para as sentenças falsas: ( ) Um código seguro é a efetivação de um projeto de sucesso, já que evita as vulnerabilidades e os defeitos. ( ) Uma organização que investe em segurança faz com que os desenvolve- dores se entendam e foquem o seu tempo nos processos. ( ) Um processo seguro de desenvolvimento envolve apenas proteção física em um grau de implementação do sistema. ( ) As empresas que adotam um processo estruturado apresentam maior probabilidade de localizarem e corrigirem as vulnerabilidades no início do ciclo de desenvolvimento. Assinale a alternativa que apresenta a sequência CORRETA: a) ( ) V – V – V – V. b) ( ) V – F – V – V. c) ( ) F – F – V – V. d) ( ) V – V – F – V. AUTOATIVIDADE 22 4 O processo de desenvolvimento de softwares é algo complexo e, para isso, é preciso um conjunto de atividades organizadas e sequências estruturadas em passos definidos (SÊMOLA, 2003; ALVES, 2006; FONTES, 2011). Esse conjunto de atividades é definido como um processo de desenvolvimento de software, que recebe ajuda da engenharia de software (ALVES, 2006; FONTES, 2011). Assinale a alternativa CORRETA: a) ( ) Uma das etapas que causa grande preocupação neste processo é a falta de definição de uma política na implementação do software. b) ( ) As vulnerabilidades nos projetos podem gerar a quebra de sigilo e a aquisição de novas informações. c) ( ) As organizações estão em uma busca contínua para adotar medidas alinhadas às metodologias de desenvolvimento. d) ( ) Existe a necessidade de produtos de software que, além suportarem os negócios, apresentem melhorias de segurança contínua. 5 O processo de software desenvolvido em uma organização é, geralmente, formulado através de padrões previamente descritos, sendo que estes definem um conjunto de ações e atividades, necessárias ao desenvolvimento do software (SOMMERVILLE, 2011). Considerando essa afirmação, assinale a alternativa INCORRETA: a) ( ) Um modelo de processo de software pode ser compreendido como um roteiro a ser seguido para desenvolver um software de alta qualidade em um tempo determinado. b) ( ) Modelo de processo pode ser considerado uma representação abstrata de um processo de software. c) ( ) Os softwares são responsáveis pela geração de informações, por isso, a segurança do software está atrelada à segurança da informação. d) ( ) Um dos pontos críticos ligados ao processo de desenvolvimento é o acesso contínuo às informações confidenciais. 23 TÓPICO 2 — UNIDADE 1 SEGURANÇA DE DADOS 1 INTRODUÇÃO A gestão de segurança é considerada um processo que padroniza as melhores práticas de segurança com uma variedade de produtos. A falta de gestão de segurança gera problemas e a falta de respostas necessárias para resolver os problemas de ameaças e vulnerabilidades (FERREIRA, 2003; FERREIRA, 2019; GALITEZI, 2011). Conforme Carvalho (2017), a segurança no desenvolvimento do software precisa considerar muitos fatores, não sendo um problema de solução única. A abordagem engloba: • profissionais tecnicamente capacitados na linguagem; • planejamento criterioso no levantamento de requisitos; • equipamentos com poder computacional suficiente; • equipe de monitoramento proativa para criar e sustentar aplicações com certo nível de segurança. Portanto, sem um padrão de segurança estabelecido, os clientes não terão garantia de que o software será seguro (GOMES et al., 2014; FERREIRA, 2019). Sem uma gestão, não existe igualdade de segurança do produto em toda a organização. Ainda, sem um processo padrão estabelecido, algumas equipes de produto ignoram a segurança (FONTES, 2008; FONTES, 2011). Então, neste tópico, compreenderemos os principais conceitos de segurança que envolvem o desenvolvimento do software. 2 CONCEITOS DA SEGURANÇA DA INFORMAÇÃO Conforme Fontes (2008) e Fontes (2011), a segurança da informação é uma área do conhecimento que protege a informação através de ações e normas que precisam ser cumpridas. Desse modo, Fontes (2008, p. 11) define: A segurança da informação é definida como um conjunto de orientações, normas, procedimentos, políticas e demais ações que tem, por objetivo, proteger o recurso, a informação, possibilitando que o negócio da organização e a sua missão sejam alcançados. A segurança existe para minimizar os riscos do negócio em relação à dependência do uso dos recursos de informação para o funcionamento da organização. Sem a informação ou com uma incorreta, o negócio pode ter perdas que comprometam o seu funcionamento e o retorno de investimento dos acionistas. 24 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO Agora, é preciso analisarum item importante do processo de segurança do software, que é a implantação de uma política de segurança. Conforme Ferreira (2019), um processo adequado de implantação de uma política organizacional envolve: • Desenvolvimento da política: responsável pela definição dos requisitos corporativos da política de segurança da informação, além do estabelecimento de padrões para documentação. • Aprovação da política: responsável pelo gerenciamento da fase de identificação das necessidades da política até a autorização da política final. • Implementação da política: responsável pela solicitação e pelo recebimento do apoio executivo. Nesta etapa, é elaborado um programa de conscientização de segurança corporativa. • Conformidade com a política: avaliação da conformidade e da efetividade da política implementada, além de elaborar ações corretivas para a não conformidade. • Manutenção da política: realizar revisões formais da política e fundamentar um processo de gestão de mudanças. Portanto, é essencial que seja abordada a hierarquia de documentos dentro de uma organização, considerando, principalmente, a segurança da informação (GOMES et al., 2014; CARVALHO, 2017; FERREIRA, 2019). A hierarquia possibilita, à organização, a apresentação dos documentos de segurança implementados ou aqueles que estão na fase de planejamento. A hierarquia é considerada uma ferramenta importante de comunicação para os tomadores de decisões, gerentes de negócio, desenvolvedores, auditores e outros, para explicar quais documentos estão disponíveis e quais são aplicáveis em cada caso (GOMES et al., 2014; CARVALHO, 2017; FERREIRA, 2019). FIGURA 7 – EXEMPLIFICAÇÃO DE HIERARQUIA DE DOCUMENTOS FONTE: Carvalho (2017, p. 20) TÓPICO 2 — SEGURANÇA DE DADOS 25 Agora, vamos compreender os principais conceitos que estão inclusivos na formulação de uma política organizacional e em todo o processo de desenvol- vimento de softwares. Podemos, conforme Fontes (2008), considerar os seguintes conceitos da segurança para garantir a proteção da informação: • Confiabilidade: a informação dever ser acessada e usada somente por aqueles que precisam dela para efetuar suas atividades na organização, por isso, deve existir uma prévia autorização. • Integridade: a informação deve ser correta, verdadeira e não pode estar cor- rompida. • Disponibilidade da informação: a informação deve ser acessível para garantir o funcionamento do negócio e para que sejam atingidos os objetivos propostos. • Legalidade: o uso da informação precisa estar de acordo com as leis aplicáveis, licenças e contratos. • Auditabilidade: o acesso e o uso da informação precisam ser registrados para identificar quem fez o acesso e o que foi realizado com a informação. Portanto, para que as informações sejam protegidas, é essencial que estejam claros os pilares da segurança, que são primordiais para a proteção dos dados, pos- sibilitando um bom funcionamento das infraestruturas. FIGURA 8 – PILARES DA SEGURANÇA FONTE: <http://bit.ly/38rL6fh>. Acesso em: 28 jun. 2020. Um processador de texto não tem, como principal preocupação, a confiabilidade, então, é necessário o bom senso do usuário em tomar algumas medidas de precaução, como salvar o trabalho frequentemente, para que não tenha maiores problemas (ALVES, 2006). NOTA 26 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO Desse modo, os padrões de segurança mostram as soluções adequadas para problemas recorrentes, além de servirem de modelo (CARVALHO, 2017; TANENBAUM; WOODHULL, 2009; FERREIRA, 2019). O uso de padrões de segurança é uma estratégia que pode ser aplicada aos processos de desenvolvimento de software, com o objetivo de torná-los confiáveis através da inserção de atividades que implementem a segurança, de acordo com a solução descrita no padrão (SÊMOLA, 2003; ALVES, 2006; FONTES, 2011). A seguir, estarão relacionados outros conceitos fundamentais para o desenvolvimento de um software seguro. QUADRO 5 – CONCEITOS DE SEGURANÇA FONTE: Adaptado de Fontes (2011), Fernandes (2013) e Ferreira (2019) CONCEITO DEFINIÇÃO Ameaça causa potencial de um incidente indesejado, gerando dano para um sistema ou organização. Pode ser, ainda, um agente externo ao ativo de informação se aproveitan- do das vulnerabilidades para romper a confidencialida- de, integridade ou disponibilidade da informação. Vulnerabilidade fragilidade de um ativo, ou, ainda, de um determinado grupo de ativos que pode ser explorada por ameaças. Impactos de incidentes potenciais prejuízos provocados ao negócio por fragilidades na segurança. Os prejuízos geram perdas de recursos financeiros e profissionais, além da deterioração da imagem da organização no mercado. Privacidade proteção das informações e a sua utilização de modo ade- quado através da autorização do cliente. Desse modo, uma grande quantidade de informações armazenadas gera maior investimento para garantir a segurança, por- tanto, muitas informações armazenadas podem gerar um alto custo para a organização em detrimento dos bene- fícios do armazenamento. É essencial verificar a relação custo x benefício, sendo necessário uma análise de quais informações trazem vantagem competitiva. Identificação identificar o usuário dentro do sistema, ou seja, um usu- ário para uma pessoa. Essa prática possibilita a identifi- cação do responsável por uma ação efetuada dentro da aplicação por meio da trilha de auditoria. Autenticação prova que o usuário é ele mesmo, pois ele possui a identi- dade de acesso na aplicação. O processo pode sofrer me- lhorias, utilizando a autenticação multifator. Autorização garantir que o usuário possua autorização concedida pelo cliente da aplicação a acesso das informações. Responsabilização garante que a ação executada possa ser atribuída a uma determinada pessoa ou sistema. Assurance Garante que os controles de segurança foram implemen-tados, avaliados e testados. TÓPICO 2 — SEGURANÇA DE DADOS 27 3 PRINCÍPIOS DO SOFTWARE SEGURO A segurança deve ser uma preocupação em todo o processo de desenvolvimento, para que problemas com erros, vulnerabilidades e ameaças não aconteçam no produto final. Assim, quando se propõe uma solução para a resolução de problemas, é preciso considerar os princípios fundamentais do software seguro, descritos por Viega e McGraw (2006 apud FERREIRA, 2019). QUADRO 6 – PRINCÍPIOS DO SOFTWARE SEGURO FONTE: Adaptado de Carvalho (2017) e Ferreira (2019) PRINCÍPIOS DESCRIÇÃO Proteger o elo mais fraco A segurança defensiva do sistema precisa ser como uma corrente interligada. Os ataques ocorrerão nas brechas do elo mais frágil dessa cadeia. Defender em profundidade Gerir o risco de modo defensivo em todas as camadas e componentes, para que, se um deles falhar, o outro consiga funcionar de maneira adequada. Falhar com segurança Enfrentar as falhas e erros com segurança, pois o manuseio inadequado de falhas é, geralmente, a causa de quebras de segurança. Minimizar o privilégio Executar o software com a minimização de privilégios para reduzir o possível impacto de um ataque. Compartimentar acessos e áreas Limitar o máximo possível os danos de ataques, compartimentando as áreas, usando VPNs, contentores, firewalls. Manter a simplicidade (Keep It Simple- KISS) A maior complexibilidade de um sistema gera mais dificuldade de manutenção e, consequentemente, muitos problemas à segurança. Promover a privacidade A proteção de dados pessoais e do sistema é essencial. A causa de muitos ataques é a exposição inadequada de informação sensível. Esconder segredos é difícil Até mesmo os melhores algoritmos de segurança podem ser quebrados e a confiança no “secreto” é a origem das falhas de segurança. Confiar desconfiando A segurança tem, por premissa, a confiança de uma fonte, mas nunca se pode confiar plenamente. Por isso, é necessário sempre tomar as devidas contramedidas para manutenção do software seguro. Usar os recursos da comunidadeSe algo está bem concebido e já foi escrutinado pela comunidade, provavelmente, é uma boa fonte de segurança. 28 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO 4 SETE PONTOS DE SEGURANÇA DO SOFTWARE SEGURO Os sete pontos foram definidos por McGraw (2005 apud FERREIRA, 2019) e foram organizados pela eficácia e quantidade de erros e falhas que podem verificar e mitigar nas diferentes fases de desenvolvimento de um software: • Análise estática e revisão de código-fonte para verificar bugs e vulnerabilidades. • Análise de risco para evidenciar tipos e padrões de ataque. • Testes de penetração para testar as aplicações em ambiente simulado e em ambiente real. • Os testes de qualidade precisam abranger os testes de funcionalidade padrão e os testes de segurança baseados em padrões de ataque. • Construção de casos de abuso que identifiquem maus usos do sistema, além das respostas deste. • Especificação de requisitos de segurança delineados, permitindo as respostas do sistema. • Monitoramento do software contra padrões de ataque de modo a ter sistemas mais seguros. Esses pontos de contato possuem tarefas específicas que estão relacionadas com diferentes fases de um processo, não sendo, portanto, uma sequência linear. A detecção de algum problema leva a revisitar e a atualizar as especificações de cada etapa para que o resultado alcançado seja o mais seguro. TÓPICO 2 — SEGURANÇA DE DADOS 29 5 REQUISITOS DE SEGURANÇA DE SOFTWARE Ferreira (2019) define requisitos de segurança como as necessidades do software para atender às políticas regulatórias e institucionais de uma organização. Desse modo, a definição dos requisitos de segurança é realizada pelos engenheiros de sistemas com os usuários. A norma ISO/IEC 27001 (20093) salienta que os requisitos de segurança são identificados por meio de uma análise sistemática dos riscos de segurança da informação. Os requisitos de segurança de software precisam englobar as necessidades de segurança da organização definidas nas políticas organizacionais. O que se percebe como ponto fundamental no delineamento dos requisitos de segurança é o reconhecimento das ameaças. Para isso, consideram-se as políticas de alto nível da organização para determinar a relevância de cada uma das ameaças (TANENBAUM; WOODHULL, 2009; CARVALHO, 2017; FERREIRA, 2019). Analise o exposto a seguir para complementar a sua compreensão acerca da importância da segurança no desenvolvimento dos softwares. VULNERABILIDADES DO SOFTWARE FONTE: Adaptado de <https://bit.ly/3auhz78>. Acesso em: 26 jun. 2020. UNI https://ynternix.com/saiba-a-diferenca-de-virus-e-malwares-o-que-sao-trojans-spyware-adwares/ 30 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO Os requisitos podem ser alinhados conforme as fontes, ou seja, um conjunto particular de princípios, objetivos e os requisitos do negócio para o processamento da informação, tendo os seguintes tipos, de acordo com Ferreira (2019): • Fonte da análise/avaliação de riscos: considera os objetivos e as estratégias globais do negócio da organização. Por meio da análise e da avaliação de riscos, são indicadas as ameaças aos ativos, além das vulnerabilidades. Após esta etapa, é efetuada uma estimativa da probabilidade de ocorrência das ameaças, além do potencial do impacto causado ao negócio. • Fonte legal: considera a legislação vigente, regulamentação, estatutos e cláusulas contratuais que a organização, parceiros comerciais, contratados e provedores de serviços possuem. 6 FERRAMENTAS E TÉCNICAS DE AVALIAÇÃO DOS RISCOS O risco é considerado como algo que pode ou não acontecer, mas se acontecer, terá impactos negativos ao projeto em relação aos custos, prazos, qualidade, tempo ou satisfação do usuário (FERNANDES, 2013; GOMES et al., 2014; CARVALHO, 2017). Um risco pode ter uma causa definida ou várias causas e, se acontecer, pode gerar um ou vários impactos (FONTES, 2011). O risco, de acordo com Ferreira (2019), possui duas dimensões, no caso da sua ocorrência: • Probabilidade da sua ocorrência: está ligada à causa-raiz. As ações direcionadas à causa do risco afetam a probabilidade de o risco não acontecer. • Impacto sobre o projeto: está associado ao efeito. As ações sobre o efeito do risco afetam o impacto. A identificação de riscos gera uma seleção de ocorrências que pode ameaçar ou oferecer vantagens em relação aos objetivos do projeto. A causa de um risco pode ser um requisito, uma restrição ou uma condição que gere resultados negativos ou positivos (GOMES et al., 2014; CARVALHO, 2017). Durante o processo de levantamento, surgem os riscos conhecidos, gerando uma resposta. Entretanto, alguns riscos não são gerenciados, assim, a equipe precisa elaborar um plano de contingência (GOMES et al., 2014; CARVALHO, 2017; FERREIRA, 2019). A quadro a seguir relaciona as principais estratégias de contingência, conforme Lyra (2008). TÓPICO 2 — SEGURANÇA DE DADOS 31 QUADRO 7 – ESTRATÉGIAS DE CONTINGÊNCIA FONTE: Adaptado de Lyra (2008) O que é importante considerar é que um plano adequado de contingência pode ser capaz de sustentar a missão da organização, independentemente de quaisquer intempéries. 6.1 CATEGORIZAÇÃO DE RISCOS O risco, no contexto da área de software, tem, como objetivo, ser incremental e direcionado à análise de riscos (LYRA, 2008; FERNANDES, 2013; CARVALHO, 2017). A área de riscos na engenharia de software evoluiu, já que passou de uma análise dentro dos modelos para uma gerência que está presente em todos os processos do ciclo de vida do software (CARVALHO, 2017). Desse modo, conforme Ferreira (2019), os riscos precisam ser categorizados. ESTRATÉGIA DE CONTINGÊNCIA DESCRIÇÃO Hot-site Responsável para entrar em ação de modo imediato, sendo que o tempo de operacionalização está atrelado ao tempo de tolerância à falha do objeto. Warm-site Utilizada em objeto com uma tolerância maior à paralisação, sendo que pode ficar sujeita à indisponibilidade por mais tempo, até o retorno operacional da atividade. Cold-site Uma alternativa de contingência, considerando um ambiente com mínimos recursos (infraestrutura e telecomunicações). Realocação de operação Desviar a atividade que foi atingida pelo evento que causou a quebra da segurança para outro ambiente físico, link ou equipamento, pertencente a uma mesma organização. Bureau de serviços Transferir a processo de operacionalização da atividade atingida para um ambiente terceirizado. Essa estratégia é muito interessante. Contingência significa algo incerto ou eventual, que pode suceder ou não, dependendo das circunstâncias. NOTA 32 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO QUADRO 8 – CATEGORIAS DE RISCOS FONTE: Adaptado de Ferreira (2019) 6.2 GERENCIAMENTO DE RISCOS EM PROJETOS Os objetivos principais do gerenciamento dos riscos são o aumento da probabilidade, o impacto dos eventos positivos e a redução da ocorrência do impacto negativo no projeto (GOMES et al., 2014; CARVALHO, 2017). Desse modo, o gerenciamento de riscos representa a identificação das possíveis incertezas para tentar controlá-las. Ferreira (2019) segmenta a abordagem em três etapas principais, conforme o quadro a seguir. Assim, são abordados os riscos técnicos do produto vinculados aos requisitos de software, sendo identificados, analisados e controlados. QUADRO 9 – GERENCIAMENTO DE RISCOS FONTE: Adaptado de Ferreira (2019) Para cada atividade do ciclo de vida do processo de teste de software, existe um correspondente na gestão de risco, com o objetivo de fornecer o tratamento correto para os riscos técnicos identificados (FERREIRA, 2019). TIPO DE RISCO DESCRIÇÃO Riscos de Projeto de Software Define os parâmetros operacionais, organizacionais e contratuais de desenvolvimento de software. Riscos de Processo de Software Relacionam-se os problemas técnicos e de gerenciamento. Nos procedimentos técnicos, podem se encontrar riscos nas atividades de análise de requisitos, projeto, codificaçãoe teste. Riscos de Produto de Software Contém as características intermediárias e finais do produto. Esses tipos de riscos têm origem nos requisitos de estabilidade do produto, desempenho, complexidade de codificação e especificação de testes. ETAPA DESCRIÇÃO Lista priorizada de riscos Identificação e análise dos riscos técnicos ligados aos requisitos de software. Testes que exploram os riscos Criação e execução dos casos de testes que verificam a existência ou não do risco identificado. Monitoramento e controle dos riscos Conforme um risco é eliminado, um novo risco pode surgir e os esforços de teste devem ser ajustados para que foquem nos riscos importantes. TÓPICO 2 — SEGURANÇA DE DADOS 33 FIGURA 9 – ATIVIDADE NO PROCESSO DE DESENVOLVIMENTO DO SOFTWARE E A RELAÇÃO COM A GESTÃO DE RISCO FONTE: Ferreira (2019, p. 23) Conforme Ferreira (2019), agora, nós entenderemos os processos apontados: • Estratégia e planejamento: englobam a identificação e avaliação deles, além do desenvolvimento de planos de contingência ou da mitigação dos riscos. • Avaliação dos riscos: determina os efeitos de riscos potenciais. • Mitigação de riscos: focada em informações que foram levantadas nas etapas anteriores. • Comunicação: tem, por base, as informações obtidas na identificação, planejamento, avaliação e mitigação dos riscos. • Previsão de risco: resultado das atividades anteriores e representa a previsão de risco, envolvendo o conhecimento adquirido acerca dos riscos já identificados. • Fase execução do teste: monitora a qualidade de cada função individual, sendo uma atividade contínua durante toda a fase de teste. Algumas ferramentas que auxiliam na gestão dos riscos, conforme Wagner (2011): • Brainstorming – Entrevistas estruturadas ou semiestruturadas: um meio de coletar um amplo conjunto de ideias e avaliação, classificando-o por uma equipe. O brains- torming pode ser estimulado através de instruções ou de técnicas de entrevista. • Delphi: um meio de combinar opiniões de especialistas que possam apoiar a fonte e influenciar a estimativa de identificação, probabilidade, consequência e avaliação de riscos. É uma técnica colaboradora para a construção do consenso entre os especialistas. NOTA 34 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO • Structured What If Technique (SWIFT): um sistema para solicitar uma equipe para identificar os riscos. Normalmente, é utilizado dentro de um workshop facilitado. Normalmente, associado a uma técnica de análise e avaliação de riscos. • Análise de cenário: aborda a possibilidade de possíveis cenários futuros. Podem ser identificados por meio da imaginação ou extrapolação dos riscos atuais, presumindo que cada um desses cenários pode ocorrer. • Análise de impacto nos negócios: Provê uma análise de como os principais riscos de quebra podem afetar as operações de uma organização e identifica e quantifica que capacidades que seriam requeridas para o gerenciamento. 6.3 MATRIZ DE RISCO A ponderação de um risco é avaliada por meio da combinação da probabilidade ou frequência de ocorrência e da magnitude das consequências ou impacto dessa ocorrência (FERREIRA, 2019). A seguir, apresentaremos a matriz de probabilidade e impacto representada no PMBOK, que mostra uma escala de probabilidade e impacto de 0 (zero) a 5 (cinco). FIGURA 10 – MATRIZ DE PROBABILIDADE E IMPACTO FONTE: <http://bit.ly/3mLP0F3>. Acesso em: 28 jun. 2020. A matriz de risco é considerada uma ferramenta muito usada, que ajuda o desenvolvedor na classificação e priorização de riscos e, ainda, facilita a comunicação visual (FERNANDES, 2013; GOMES et al., 2014; FERREIRA, 2019). A representação é por meio de eixos de escalas de probabilidade de ocorrência e impacto para um determinado fator de risco. Após a representação visual da matriz, cada um dos fatores de risco precisa ser identificado e avaliado em relação à probabilidade de ocorrência e ao impacto (LYRA, 2008; CARVALHO, 2017; FERREIRA, 2019). Os riscos que precisam ser tratados de modo prioritário ficam localizados na região vermelha. TÓPICO 2 — SEGURANÇA DE DADOS 35 Com relação à defi nição dos níveis das dimensões, é necessário se atentar para que a quantidade de níveis para probabilidade e impacto seja a mesma, por exemplo, se for decidido que a probabilidade será apenas baixa, média e alta (três níveis), o impacto pode ser insignifi cante, moderado ou catastrófi co, ou seja, três níveis também. FIGURA 11 – REPRESENTAÇÃO DE UMA MATRIZ DE RISCOS FONTE: <http://bit.ly/34wDC9J>. Acesso em: 20 jun. 2020. Observe, a seguir, um exemplo aplicado de uma matriz de impacto. Esse modelo irá ajudá-lo a entender como funciona o preenchimento da matriz. EXEMPLIFICAÇÃO DA MATRIZ DE IMPACTO FONTE: <http://bit.ly/3mLQAGZ>. Acesso em: 20 jun. 2020. NOTA 36 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO A análise qualitativa de riscos avalia a prioridade dos riscos identificados, usando a probabilidade de eles ocorrerem, o impacto correspondente aos objetivos do projeto, se os riscos realmente ocorrerem, além de outros fatores, como o prazo e tolerância a risco das restrições de custo, cronograma, escopo e qualidade do projeto (ALVES, 2006; SÊMOLA, 2003; LYRA, 2008; FERNANDES, 2013; CARVALHO, 2017; FERREIRA, 2019). A análise qualitativa de riscos é, normalmente, uma maneira rápida e econômica de estabelecer prioridades para o planejamento de respostas a riscos e estabelece a base para a análise quantitativa de riscos (LYRA, 2008; FONTES, 2011; FERNANDES, 2013). 7 PADRÕES DE SEGURANÇA Você, ao longo deste tópico, percebeu o quão importante é, que no planejamento de um novo software, todos os envolvidos compreendam os padrões de segurança em vários níveis. Desse modo, as experiências adquiridas em projetos anteriores de software são uma fonte de consulta, além de websites e outras publicações especializadas (SÊMOLA, 2003; MOUGOUE, 2016; FERREIRA, 2019). Então, para finalizar este tópico, listaremos alguns exemplos de boas práticas de planejamento e de desenvolvimento de softwares, conforme Alves (2006), Fontes (2011), Fernandes (2013), Carvalho (2017) e Ferreira (2019). • As configurações do software com informações sensíveis precisam ser criptografadas quando em ambiente de produção. Um exemplo é O Net, que oferece ferramentas nativas para criptografia de partes do arquivo web.config. FIGURA 12 – O NET OFERECE FERRAMENTAS NATIVAS PARA CRIPTOGRAFIA FONTE: <http://www.macoratti.net/Cursos/Cripto/net_cripto4.htm>. Acesso em: 20 jun. 2020. http://www.macoratti.net/Cursos/Cripto/net_cripto4.htm TÓPICO 2 — SEGURANÇA DE DADOS 37 • Defi nir modos de evitar SQL Injection, visto que esse tipo de ataque é usualmente comum. A consequência é a coleta de informações protegidas ou a inutilização do sistema. FIGURA 13 – EXEMPLO DE SQL INJECTION FONTE: <http://bit.ly/37BBW0h>. Acesso em: 20 jun. 2020. • Impedir, passar e receber valores sensíveis de consulta na URL de websites. Os parâmetros devem ser transmitidos por meio do método GET do protocolo Hypertext Transfer Protocol (HTTP). Entretanto, em situações em que não se pode usar criptografi a SSL em decorrência de restrições de negócio, expõem- se os parâmetros em texto puro (plain text) para o usuário, ou quem venha a sniff ar (capturar pacotes) na rede. FIGURA 14 – EXEMPLO GET DO PROTOCOLO HTTP FONTE: <https://medium.com/totvsdevelopers/rest-no-protheus-b%C3%A1sico-do-b%C3%A1si- co-a4b4431a4e3e>. Acesso em: 20 jun. 2020. 38 UNIDADE 1 — DESENVOLVIMENTO DE SOFTWARE SEGURO • Tratar os dados recebidos via HTTP no backend. Entretanto, em situações nas quais não se tenha esse cuidado, uma pequena modificação na Uniform Resource Locator (URL) pode executar uma consulta não prevista. Isso pode gerar a exposição de informações que não deveriam estar disponíveis ao usuário. FIGURA 15 – EXEMPLIFICAÇÃO DO HTTP NO BACKEND FONTE: <https://i.stack.imgur.com/ZvEoq.jpg>. Acesso em: 20 jun. 2020. •