Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

<p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Unidade 1</p><p>Conceitos de segurança em engenharia de software</p><p>Aula 1</p><p>Fundamentos de segurança no desenvolvimento de software</p><p>Introdução da Unidade</p><p>Objetivos da Unidade</p><p>Ao longo desta Unidade, você irá:</p><p>discutir sobre fundamentos de segurança no desenvolvimento de software;</p><p>esclarecer como ocorre o processo de segurança no desenvolvimento de software;</p><p>interpretar quais são os modelos de segurança no ciclo de vida no desenvolvimento de</p><p>software.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Introdução da Unidade</p><p>Estudante, você já chegou a pensar em como seria se alguém tivesse acesso a todos os seus</p><p>dados pessoais ou aos dados de sua empresa? Como você calcularia o impacto que o</p><p>vazamento dessas informações poderia lhe causar?</p><p>Problemas de vulnerabilidades e ataques a softwares começaram a surgir nas últimas décadas</p><p>do século passado quando sistemas começaram a desempenhar um papel mais importante na</p><p>sociedade e �caram mais presentes no dia a dia da população. Contudo, todo o processo de</p><p>desenvolvimento não passou por uma reestruturação de engenharia madura o su�ciente, de</p><p>modo que não apresentou uma fase explícita de segurança. Considerando um aumento</p><p>exponencial no número de problemas de segurança de software, pesquisas têm sido</p><p>desenvolvidas sobre como integrá-la ao desenvolvimento de sistemas.</p><p>Dentre as diferentes abordagens de pesquisas em segurança em Engenharia de Software, estão</p><p>os pontos de contato elencados por McGraws, o Comprehensive Lightweigth Application Security</p><p>Process (CLASP), estabelecidos pela Open Web Application Security Project (OWASP) e o</p><p>Security Development Lifecycle (SDL) da Microsoft.</p><p>Existem, atualmente, diferentes modelos aplicados no desenvolvimento de software e que têm</p><p>como principal objetivo a qualidade do desenvolvimento, acabando por deixar para segundo</p><p>plano a segurança do sistema. Alguns desses modelos de engenharia de software estão bem</p><p>estabelecidos e são e�cientes para o que propõem, entretanto vamos trabalhá-los com foco na</p><p>segurança, esmiuçando suas fases e práticas para entendermos melhor onde e como adotar as</p><p>técnicas de desenvolvimento de software seguro.</p><p>Nesta unidade, abordaremos os fundamentos de desenvolvimento de sistemas nos quais</p><p>programadores se baseiam para construir um sistema e suas funcionalidades. Na aula sobre os</p><p>Fundamentos de segurança no desenvolvimento de software, serão descritos a importância de</p><p>segurança de software e os conceitos e as características que devem possuir. Na aula Processo</p><p>de segurança no desenvolvimento de software, dissertaremos como se baseia o processo de</p><p>segurança através dos princípios, dos fundamentos e das ferramentas utilizadas durante todo o</p><p>desenvolvimento. Por último, na aula Modelos de segurança no ciclo de vida de desenvolvimento</p><p>de software, serão levantados aspectos de modelos de segurança considerando o ciclo de vida</p><p>de um projeto de software, como o OWASP, que de�ne as boas práticas de segurança na Web.</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, você aprenderá sobre alguns fundamentos de segurança no desenvolvimento de</p><p>software.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>debater sobre a importância da segurança em desenvolvimento de software;</p><p>aplicar os mecanismos de controle de acesso dos usuários e processos;</p><p>analisar quais são as brechas de segurança.</p><p>Situação-problema</p><p>A segurança no processo de desenvolvimento de sistemas é um assunto relevante para quem se</p><p>dedica ao desenvolvimento e à análise de sistemas de softwares. Pro�ssionais de tecnologia que</p><p>trabalham diretamente com ela devem se preocupar em elaborar sistemas utilizando modelos de</p><p>engenharia de software, respeitando seus processos e suas fases de desenvolvimento e</p><p>voltando-se para a segurança em cada uma delas.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Neste caso, a escassez de pro�ssionais de desenvolvimento que levam em consideração a</p><p>segurança na construção da aplicação bem como a de pro�ssionais de tecnologia não está</p><p>diminuindo, pelo contrário, entre março e agosto de 2020, houve um crescimento de 107% na</p><p>procura de desenvolvedores web em relação ao mesmo período de 2019. O dé�cit de</p><p>pro�ssionais quali�cados em segurança já é de 4,07 milhões mundialmente.</p><p>Em 2020, com a pandemia da COVID-19, os serviços de internet se mostraram ainda mais</p><p>essenciais. Mais pessoas passaram a fazer compras e a gerenciar dinheiro e dados com esses</p><p>serviços, por exemplo. O crescimento no número de transações em sites de e-commerce foi de</p><p>80% em 2020. Cerca de 11,5 milhões de pessoas �zeram sua primeira compra on-line. O aumento</p><p>da utilização desses serviços trouxe consigo o aumento das vulnerabilidades, dos ataques e dos</p><p>golpes de tecnologia. Ataques a ferramentas de acesso remoto, por exemplo, sofreram um</p><p>aumento de 333%. Foram mais de 2,6 bilhões de ataques em seis meses (NUNES, 2020).</p><p>Consequentemente, houve aumento na procura de pro�ssionais de segurança e de pro�ssionais</p><p>que se preocupam em desenvolver aplicações seguras. Essa situação faz com que o pro�ssional</p><p>que desenvolve sistemas envolvidos com aspectos de segurança seja muito mais importante do</p><p>que aqueles que a subestimam.</p><p>Imagine que você é um estudante da área de tecnologia bastante interessado na campo de</p><p>segurança e desenvolvimento. Por conta disso, você decide participar de um hackathon com</p><p>alguns colegas de faculdade para treinar suas habilidades em desenvolvimento de softwares</p><p>seguros. Esse hackathon premiará a melhor equipe com uma viagem ao Vale do Silício para</p><p>visitar empresas de tecnologia a �m de que se possa aprender mais sobre desenvolvimento de</p><p>softwares seguros.</p><p>Na primeira fase do hackathon, sua equipe recebe um software que apresenta algumas</p><p>vulnerabilidades. Frente a ele, você precisa não só identi�car, mas deve também mostrar o que</p><p>deve ser feito para sanar essas vulnerabilidades. Você também deverá dizer aos juízes como a</p><p>sua solução resolve o problema da melhor maneira possível.</p><p>Ao acessar o sistema, você percebe que se trata de um software que registra despesas e receitas</p><p>de determinada empresa. Você e cada um de seus colegas de equipe recebe um login e uma</p><p>senha para acessar o sistema. Ao realizar a autenticação, é possível ver o logotipo da empresa</p><p>da qual cada um dos participantes é colaborador. Outro item visual que pode ser observado é a</p><p>função exercida por cada um de vocês na empresa. Vocês podem consultar informações sobre o</p><p>acesso de cada função em um documento fornecido pela organização do evento, na tabela a</p><p>seguir:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Extrato de permissões no sistemas por função. Fonte: elaborada pelo autor.</p><p>Você recebe a função de administrador da empresa X, já o colega A recebe uma conta de gerente</p><p>de compras da empresa X, o colega B recebe o per�l de gerente de faturamento da empresa Y e o</p><p>colega C é o analista de compras da empresa Y. Vocês começam a realizar testes, inserindo</p><p>receitas e despesas e percebem as seguintes vulnerabilidades:</p><p>Você consegue visualizar receitas e despesas que os colegas B e C inseriram.</p><p>Ao inserir registros, todos percebem uma interrupção do sistema de cerca de cinco</p><p>minutos. Durante esse tempo, não é possível inserir, editar ou visualizar registros.</p><p>O colega C consegue remover despesas da empresa Y.</p><p>Ao inserir uma receita ao meio-dia, o colega B recebe um alerta de que o sistema está em</p><p>manutenção e voltará em tempo indeterminado.</p><p>Quando todos fazem alterações ao mesmo tempo, o sistema �ca indisponível por alguns</p><p>segundos e dá a impressão de haver lentidão no carregamento.</p><p>Na apresentação aos juízes, você precisa comentar cada vulnerabilidade respondendo às</p><p>seguintes perguntas:</p><p>Qual conceito de software seguro está sendo violado?</p><p>Como o sistema deveria ter se comportado?</p><p>Por que o sistema deveria ter se comportado da forma sugerida?</p><p>Com isso, estudante, re�ita sobre essas questões, pois poderá ser você o responsável pela</p><p>segurança</p><p>Produção: Alura</p><p>Cursos de Tecnologia e Caelum Escola de Tecnologia. Participantes: Paulo Silveira, Roberta</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Arcoverde, Rafael Zago, Marcell Almeida e Maurício Linhares. Podcast (48 min). Hipsters ponto</p><p>tech, [S. l.], 9 fev. 2021. Disponível em: https://bit.ly/3ytS6mV. Acesso em: 23 jan. 2022.</p><p>TYPESCRIPT. Typed JavaScript at any Scale. TypeScript, [S. l., s. d.]. Disponível em:</p><p>https://bit.ly/2V8ymYm. Acesso em: 23 jan. 2022.</p><p>,</p><p>Unidade 2</p><p>Políticas e normas de segurança na concepção do software</p><p>Aula 1</p><p>Políticas e normas para desenvolvimento de software seguro</p><p>Introdução da Unidade</p><p>Objetivos da Unidade</p><p>Ao longo desta Unidade, você irá:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>debater sobre as políticas e normas para desenvolvimento de um software seguro;</p><p>esclarecer a especi�cação de requisitos de segurança em desenvolvimento de sistemas;</p><p>discutir sobre a especi�cação formal.</p><p>Introdução da Unidade</p><p>Nesta unidade será abordada a segurança e suas políticas, tornando esse assunto familiar para</p><p>que você desenvolva seus sistemas dentro das normas de segurança.</p><p>Serão abordadas políticas e normas que indicam processos de segurança em todo</p><p>desenvolvimento de software, ao longo do ciclo de desenvolvimento, e políticas que contemplam</p><p>desenvolvimento seguro, bem como o processo para escrever uma política que considera itens</p><p>de segurança que as grandes empresas de desenvolvimento necessariamente aplicam e usam</p><p>para desenvolvimento seguro.</p><p>Serão apresentados temas sobre as políticas de codi�cação segura, pelos quais você conhecerá</p><p>os requisitos de desenvolvimento e verá como trabalhar dentro das normas de segurança para</p><p>que seu sistema seja desenvolvido da forma mais segura possível.</p><p>Na sequência, abordaremos proteção e prevenção à invasão aos sistemas e políticas de</p><p>codi�cação segura dentro das normas da ISO15408/NBR, o que servirá de base para a escrita de</p><p>uma política de segurança e normas em sua empresa.</p><p>A segurança é um ponto essencial dos produtos tecnológicos, sendo uma imposição da lei e</p><p>uma necessidade do mercado, por isso, estar preparado com os conhecimentos relacionados a</p><p>este tópico é necessário para aproveitar melhor as oportunidades do mercado.</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá conhecer as políticas e normas voltadas para o desenvolvimento de um</p><p>software seguro.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>interpretar como ocorre o desenvolvimento de um software;</p><p>analisar as etapas de desenvolvimento do software;</p><p>discutir sobre o manual de instruções e práticas de proteção.</p><p>Situação-problema</p><p>Empresas virtuais surgem desde o início da Internet, porém, com a popularização dos</p><p>dispositivos móveis inteligentes, esse sistema foi potencializado com novos negócios, como o</p><p>Ifood, Uber, entre outros. Porém, essa expansão dos negócios na Internet exige maiores cuidados</p><p>com a segurança, pois os dados de bilhões de pessoas estão sendo transferidos entre redes.</p><p>Para evitar problemas, governos do mundo inteiro vêm criando leis para buscar melhor proteção;</p><p>no Brasil, por exemplo, foi criada a Lei Geral de Proteção de Dados (LGPD), baseada no</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Regulamento Geral sobre a Proteção de Dados (RGPD) (UE) 2016/679 ou GDPR (General Data</p><p>Protection Regulation). Isso faz com que as soluções tecnológicas sejam pensadas, planejadas e</p><p>desenvolvidas buscando atender as novas regras. Dessa forma, estar preparado para atuar no</p><p>desenvolvimento de software com a adoção de práticas e regras de segurança é essencial,</p><p>abrindo oportunidades para que você se torne um especialista no desenvolvimento seguro, uma</p><p>pro�ssão em alta no mercado atualmente. Além disso, desde 1995, vêm surgindo normas de</p><p>segurança, como a BS 7799, padrão britânico (BS - British Standard), por exemplo, similar à NBR</p><p>no Brasil. Essa norma foi revisada em 1998 e adotada como padrão mundial ISO/IEC 17799, que</p><p>foi revisada e modi�cada em 2005, sendo incorporada à série 27000, passando, assim a ser</p><p>chamada ISO/IEC 27002; no Brasil, possui a nomenclatura NBR/ISO/IEC 27002. Tais regras são</p><p>importantes, sendo a base de diversos modelos e frameworks, como, por exemplo, a norma de</p><p>gestão de segurança é a base usada pelo COBIT e pelo ITIL. Porém, o mais importante é que,</p><p>devemos preparar nossos sistemas para atender às necessidades cada vez mais presentes das</p><p>políticas, regras, normas e leis relacionadas à segurança da informação, principalmente se</p><p>pensarmos que, hoje, um produto não mais atende a um único lugar, e sim ao mundo todo, como</p><p>o Uber, AirBNB, entre outros.</p><p>A segurança é um ponto essencial dos produtos tecnológicos, sendo uma imposição da lei e</p><p>uma necessidade do mercado, portanto estar preparado com os conhecimentos relacionados a</p><p>este tópico é necessário para as oportunidades do mercado.</p><p>A adoção de sistemas de informação por parte das empresas fez emergir novas demandas com</p><p>a garantia de segurança. Nesse sentido, não falamos apenas da segurança de infraestrutura,</p><p>mas, com as normas e leis atuais, as empresas passam a ter a obrigação de garantir que seus</p><p>sistemas tenham segurança. Por isso, as equipes de desenvolvimento devem atender às</p><p>necessidades relacionadas ao cumprimento e conformidade de normas e leis, evitando, assim,</p><p>problemas de inovação, vazamento de informações, falta de disponibilidade e integridade das</p><p>informações, o que gera prejuízos às organizações, tanto �nanceiros como relacionados à</p><p>imagem. Assim, a �m de evitar problemas relacionados à conformidade, é necessário que</p><p>tenhamos uma política que permita que os desenvolvedores sigam um padrão de forma</p><p>independente da equipe a ser ampliada ou modi�cada ao longo do tempo.</p><p>Buscando elaborar padrões para manter a continuidade dos trabalhos, uma fábrica de software</p><p>que desenvolve sistemas utilizados em diversos órgãos públicos para a gestão documental teve</p><p>uma cobrança dos clientes em relação ao alinhamento dos seus produtos em relação às leis e</p><p>normas de segurança. Assim, como a empresa lida com dados de pessoas físicas e jurídicas, e</p><p>com base nessas exigências dos clientes, é imprescindível que ela garanta que o sistema atenda</p><p>a critérios mínimos de segurança.</p><p>Você é membro integrante da equipe de desenvolvimento de sistemas e atua na área de</p><p>desenvolvimento seguro. Sua missão é garantir que a equipe de desenvolvimento siga critérios</p><p>objetivos para que padrões de segurança sejam atendidos, de acordo com os princípios de</p><p>segurança apontados na norma NBR/ISO/IEC 27001 e ISO 15408. Considerando que a equipe</p><p>pode crescer e evoluir, prepare uma política de codi�cação segura, contendo itens relacionados</p><p>a:</p><p>Autenticação para garantir o princípio da irretratabilidade.</p><p>Armazenamento para garantir o princípio de Integridade.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Recomendações de modelos de criptogra�a de dados para garantir o princípio de</p><p>con�dencialidade, não interferindo na codi�cação ou linguagem utilizada para o</p><p>desenvolvimento.</p><p>Prepare, então, uma política de codi�cação segura, seguindo as considerações abordadas nesta</p><p>aula, bem como o ciclo de desenvolvimento de uma política de segurança.</p><p>Aproveite este momento de estudos para aprimorar seus conhecimentos e poder ocupar as</p><p>melhores posições no mercado!</p><p>O desenvolvimento de um software</p><p>Estudante, o desenvolvimento de um software é mais do que apenas codi�cação; exige</p><p>processos, regras e políticas para que possamos fazer produtos melhores, mais assertivos e</p><p>seguros. Você já parou para pensar na quantidade de pro�ssionais envolvidos no</p><p>desenvolvimento de uma solução, como as empresas de entregas de comida, ou mesmo</p><p>empresas de transporte e viagem, por exemplo? São equipes de desenvolvedores distribuídas,</p><p>analistas, designers, testers entre outros. Como podemos garantir que a equipe adote uma</p><p>postura proativa em relação à segurança?</p><p>Essa é uma preocupação constante, principalmente motivada pelas novas leis de proteção</p><p>a</p><p>dados implantada mundialmente. Assim, a cobrança de tal postura deve ser baseada em regras</p><p>pré-estabelecidas e amplamente divulgadas pela organização, pois, caso a equipe não tenha</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>procedimentos descritos de forma explícita, a organização �ca por conta do bom senso de seu</p><p>time.</p><p>Conforme Pressman (2016), a elaboração de uma política de codi�cação segura torna-se</p><p>essencial para organizações do mundo inteiro. Uma política de codi�cação segura é um conjunto</p><p>de critérios, regras, procedimentos e diretrizes com o objetivo de melhorar a segurança do</p><p>software e reduzir vulnerabilidades de segurança atendendo a padrões e normas especí�cas.</p><p>Então, como elaborar uma política de codi�cação segura?</p><p>A política de codi�cação segura deve contemplar os controles que descrevem como os</p><p>desenvolvedores devem implementar seus códigos e é o primeiro passo para resolver problemas</p><p>relacionados à segurança dos sistemas (KIM et.al., 2014).</p><p>Conforme Kim et al. (2014), inicialmente, para a criação da política, deve-se de�nir as diretrizes</p><p>de base. As de�nições de diretrizes desdobram-se em: documento contendo a política em si e</p><p>documentos auxiliares, por vezes, com exempli�cações, como apresentado na tabela, onde estão</p><p>descritos itens importantes e princípios que devem ser considerados na escrita e nas de�nições</p><p>de uma política.</p><p>Princípios de uma política de segurança. Fonte: elaborada pelo autor.</p><p>Para tanto, tendo em vista o que devemos observar em uma política de segurança, devemos,</p><p>então, obter apoio da gerência da equipe, pois, caso contrário, a política não será utilizada,</p><p>mesmo que implantada, perdendo o sentido. Assim, para a criação da política de codi�cação</p><p>segura, com o apoio da gestão da empresa, é iniciado o planejamento, seguido pela de�nição</p><p>das diretrizes. Com base nessas diretrizes, deve-se elaborar manuais complementares, termos e</p><p>treinamentos, conforme a �gura:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Ciclo para a elaboração de uma política de codi�cação segura. Fonte: elaborada pelo autor.</p><p>Iniciar pelo planejamento</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Para iniciar a implantação de segurança, é necessário planejar a política que deverá ser adotada</p><p>pela organização. Nesta etapa, deve ser de�nida a importância da política para a organização e</p><p>como ela será adotada pela equipe. É importante o maior número de pessoas que possam</p><p>contribuir participando desse processo, para que atuem como apoiadores e sejam os</p><p>stakeholders que trabalham a favor da política.</p><p>Diretrizes</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Nesta etapa, de�nem-se as linhas mestras para o desdobramento do processo. Ou seja, é com</p><p>base nessa de�nição que serão elaborados os procedimentos necessários para atendê-las.</p><p>Observe este exemplo: os desenvolvedores devem adotar criptogra�a para todas as informações</p><p>relacionadas a usuários transmitidas pela rede.</p><p>Essa diretriz remete a desdobramentos, porém mantêm a �exibilidade. Note a �gura, que</p><p>apresenta um modelo de diretrizes que recomendam que os desenvolvedores devem adotar</p><p>criptogra�a, porém não impôs o uso de linguagem. É simples entender e é objetiva, conforme</p><p>exemplo.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Diretriz e seus desdobramentos. Fonte: elaborada pelo autor.</p><p>Essa política deve possuir documentos de suporte, podendo ter exemplos da sua adoção,</p><p>principalmente, para o treinamento de novos membros da equipe.</p><p>Videoaula: princípios de uma política de segurança</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os princípios de uma política de segurança .</p><p>Manual de instruções</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O manual de instruções deve conter as informações necessárias para que a equipe cumpra as</p><p>diretrizes da política de codi�cação. Como segue, um exemplo de instrução para validação de</p><p>senhas no código:</p><p>Boas práticas</p><p>Considerando as boas práticas é exigido que os usuários tenham senhas com, no mínimo, 6</p><p>caracteres, devendo possuir caracteres numéricos e alfanuméricos e, ao menos, um símbolo,</p><p>sendo validados tais dados pelos programadores e toda senha deve ser criptografada, não sendo</p><p>armazenada a informação original no banco de dados (PRESSMAN, 2016).</p><p>Esse foi apenas um exemplo, porém deve conter todos os procedimentos necessários para os</p><p>programadores desenvolverem um software seguro.</p><p>Políticas de teste de desenvolvimento seguro</p><p>O desenvolvimento de software não é uma tarefa simples, envolve fatores como ambiente,</p><p>negócio, camadas e mais camadas de produtos, podendo se tornar muito complexa. Esse é um</p><p>fator que deixa o sistema sujeito a problemas, mesmo com uma equipe de desenvolvimento</p><p>experiente. Além disso, em momentos críticos, a equipe tem tendência a abandonar as políticas</p><p>e padrões descritos em documentos que deveriam ser seguidos, buscando agilidade. Porém, tal</p><p>ação pode gerar produtos com falhas (KIM, 2014).</p><p>Para que tais problemas não persistam em um sistema, é necessário que seja descoberto o</p><p>quanto antes, para que, ao ser liberado para uso, tenha o mínimo de falhas. Nesse sentido, surge</p><p>a atividade de Validação, Veri�cação e Teste (VVT).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Conforme Barreto (2018), no caso de garantia de adoção das políticas de segurança, faz-se</p><p>necessária uma política de VVT que garanta que a política de segurança seja adotada pela</p><p>equipe de desenvolvimento. Tal política deve garantir que os códigos sejam veri�cados e</p><p>validados em relação à política de codi�cação segura.</p><p>Assim, as políticas de codi�cação segura de�nem as diretrizes de base para os desenvolvedores,</p><p>já a política de teste de�ne as diretrizes para que a equipe de qualidade valide se os</p><p>desenvolvedores estão atendendo aos critérios de segurança (BARRETO, 2018).</p><p>Cada diretriz da política de teste é um conjunto mínimo de controles exigidos pela política de</p><p>codi�cação. Em geral, a política de teste deve conter:</p><p>O critério da política de segurança que está sendo validado.</p><p>O escopo, em relação aos dados e dispositivos, que deve ser validado.</p><p>As exceções ao critério, caso haja.</p><p>E, �nalmente, como usar.</p><p>As diretrizes de testes de codi�cação segura buscam identi�car se o software atende aos</p><p>critérios da política de segurança e se, mesmo atendendo, não foi incluída a falha em tempo de</p><p>execução que permita ser explorada de forma maliciosa, ou seja, se um atacante pode descobrir</p><p>a falha e comprometer os dados por meio da vulnerabilidade.</p><p>Nesse sentido, a diretriz deve conter:</p><p>Formas de avaliação e de contingência para remediar possíveis vulnerabilidades</p><p>encontradas.</p><p>Formas de varredura de vulnerabilidade de código.</p><p>Formas de detecção automatizada de falhas de segurança.</p><p>Uma política com foco em teste de codi�cação segura tem como �nalidade garantir que o</p><p>software seja desenvolvido de forma segura e que o produto esteja em conformidade com a</p><p>especi�cação de segurança. Assim, a política não se restringe ao produto, abrangendo o</p><p>processo de desenvolvimento, da concepção à entrega. As diretrizes devem contemplar as</p><p>atividades estáticas e dinâmicas de VVT.</p><p>Atividades estáticas estão relacionadas ao código, não necessitando da execução do produto, ou</p><p>seja, está atrelado às diretrizes. Por exemplo, o código deve adotar um modelo X de validação de</p><p>segurança, assim, basta que a equipe veri�que se essa diretriz foi atendida (KIM, 2014).</p><p>As atividades dinâmicas estão relacionadas à execução do produto; assim, um ponto a ser</p><p>pensado é na adoção de modelos automatizados que permitam uma veri�cação sem,</p><p>necessariamente, um acompanhamento humano, exemplo de ferramentas, como o SonarQube,</p><p>podem ser utilizadas para apoiar tal tarefa.</p><p>É sempre bom lembrar que o foco da política de teste de codi�cação segura é garantir que a</p><p>política de codi�cação segura esteja sendo atendida.</p><p>Práticas de</p><p>proteção e prevenção de invasões nos sistemas</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Proteção e prevenção à invasão aos sistemas na prática</p><p>Além das políticas de codi�cação e de testes, algumas práticas buscando a proteção e a</p><p>prevenção de invasões nos sistemas devem ser adotadas. Há diversos sistemas que permitem</p><p>detectar problemas, de forma a prevenir invasões, sendo um dos principais o Sistema de</p><p>Detecção de Intrusos (Instrusion Detection System – IDS).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>IDS. Fonte: elaborado pelo autor.</p><p>Um IDS deve produzir alertas conforme as regras para que foi con�gurado, uma das ferramentas</p><p>mais utilizadas para esse �m, sendo opensource é o Snort (https://www.snort.org/) que permite</p><p>que sejam incluídas diversas regras e funciona em Linux e Windows.</p><p>O IDS analisa, com base nas regras, os possíveis ataques, emite os alertas que devem ser</p><p>analisados pela equipe, que deve ter, na política de segurança, diretrizes e ações para tomar</p><p>providências, em caso de o ataque ser real.</p><p>O IDS não é a única ferramenta/prática que podemos utilizar na proteção, em nível de rede. Tem-</p><p>se a adoção de uma Rede Privada Virtual (Virtual Private Network – VNP), que tem como objetivo</p><p>a garantia da segurança em transações realizadas em redes públicas de dados. Ao con�gurar</p><p>uma VPN entre dois pontos, você está assegurando que esses computadores comunicam-se em</p><p>uma rede fechada, ou seja, uma rede privada, porém virtual, de forma que os demais pontos da</p><p>rede pública não tenham acesso a essa rede privada.</p><p>O objetivo é que a comunicação na rede privada esteja codi�cada, de forma que, se um invasor</p><p>obtiver os dados, que estejam cifrados, impedindo que seja conhecida a informação (KIM, 2014).</p><p>As ferramentas de análise de vulnerabilidade devem ser utilizadas antes do sistema estar em</p><p>produção, buscando identi�car possíveis falhas e acompanhar a sua correção. Apesar de</p><p>existirem diversas ferramentas para esse �m, o OpenVas é uma das ferramentas mais completas</p><p>para essa tarefa, pois, além de fácil de executar, possui um relatório completo de análise</p><p>(https://www.openvas.org/).</p><p>O objetivo dessa ferramenta é que se obtenha um per�l completo do sistema, possibilitando que</p><p>sejam corrigidos problemas antes mesmo de sua disponibilização.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Porém, mesmo com todas as ações, há a possibilidade de ocorrer falhas que não foram</p><p>detectadas e que sejam exploradas por invasores; nesse caso, um plano de contingência deve</p><p>existir. Esse plano é uma medida utilizada em casos de incidência, que deve considerar as ações</p><p>que devem ser realizadas em caso de desastres. Considere uma loja virtual que, mesmo tendo</p><p>feito todas as prevenções, passou uma falha e, devido a um ataque múltiplo de negação de</p><p>serviços, o sistema �cou parcialmente inoperante; nesse sentido, como fazer para retornar, o</p><p>mais rápido possível o funcionamento, evitando prejuízos �nanceiros e de imagem?</p><p>Note que o plano de contingência deve possuir as ações necessárias para isso, como</p><p>disponibilizar novos recursos secundários, mesmo que de forma automática.</p><p>Políticas de segurança para codi�cação segura</p><p>Para garantir a segurança, empresas implementam Sistemas de Gestão de Segurança (SGS) e,</p><p>para isso, as normas NBR da série 27000 são um guia para a implementação de um SGS. As</p><p>normas surgiram como norma BS, ou seja, normas inglesas que se tornaram normas ISO,</p><p>posteriormente adotadas no Brasil como normas brasileiras – NBR (KIM, 2014).</p><p>Conforme KIM (2014), as partes 1 e 2 da norma são a NBR/ISO/IEC 27001 e 27002 que trazem</p><p>os aspectos relacionados à implementação de um SGS e suas políticas de segurança, sendo um</p><p>ponto de referência para os responsáveis por implementar e manter a segurança de informação.</p><p>As normas trazem os pilares da segurança da informação que devem ser analisadas durante o</p><p>desenvolvimento, sendo elas:</p><p>Con�dencialidade: seu sistema mantém a con�dencialidade dos dados?</p><p>Integridade: seu sistema é con�ável, os dados se mantêm íntegros?</p><p>Disponibilidade: no momento necessário de uso, o sistema está disponível?</p><p>Não repúdio ou princípio de irretratabilidade: garante que os sistemas possuem</p><p>autenticidade e que o usuário não pode negar suas ações.</p><p>Uma vez que a série 27000 trata dos sistemas de gestão, para uni�car os critérios e padrões de</p><p>segurança, reduzindo as diferenças entre normas, surgiu a Common Criteria for Information</p><p>Technology Security Evaluation ISO/IEC 15408, uni�cando os modelos franceses, alemães,</p><p>ingleses e americanos, com foco no desenvolvimento de produtos seguros.</p><p>Videoaula: políticas de teste de desenvolvimento seguro</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre as políticas de teste de desenvolvimento seguro.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O ST</p><p>Um dos pontos principais da norma ISO/IEC 15408 é que, para que um sistema seja considerado</p><p>seguro, deve existir critérios de proteção (Protection Pro�le – PP), Alvo de segurança (Security</p><p>Target – ST) e um alvo de avaliação (Target of Evaluation - ToE). O ST é o principal item para</p><p>garantir a segurança de um produto, pois é a própria especi�cação de segurança do produto.</p><p>O ST divide-se em:</p><p>Objetivos de segurança para o ToE, que descreve contramedidas a serem realizadas.</p><p>Objetivos de segurança para o ambiente operacional, descrevendo as contramedidas de</p><p>correção.</p><p>O alvo de avaliação – ToE possui as contramedidas que permitirão avaliar as correções.</p><p>O objetivo da segurança para esse alvo deve possuir um maior detalhamento.</p><p>Os requisitos expressos na norma devem ser atendidos, quando na construção de políticas de</p><p>códigos seguros estão relacionadas as seguintes classes, descritas na tabela.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Classes de�nidas em políticas de segurança. Fonte: elaborada pelo autor.</p><p>Nesse sentido, toda a política construída para uma codi�cação segura deve ter um alinhamento</p><p>com essas classes, bem como com o propósito da ST e do ToE, permitindo uma segurança</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>efetiva dos sistemas.</p><p>Assim, organizações que desejam implantar uma política de codi�cação segura que atenda às</p><p>normas NBR/ISO/IEC deverão atender as premissas de tais normas, que vão ao encontro de boas</p><p>práticas de segurança em software. Após a geração da política de segurança e de veri�cação da</p><p>segurança, deve-se realizar uma análise crítica e uma avaliação das diretrizes criadas, evitando-</p><p>se, assim, criar regras não utilizadas pela equipe ou que não agreguem para o desenvolvimento</p><p>seguro. Uma premissa que deve ser sempre adotada: proteger o ativo mais importante da</p><p>organização: a informação, para que não seja utilizada de forma incorreta, ou ainda, que não caia</p><p>em mãos inescrupulosas. Portanto, �que atento para:</p><p>Prevenção de perda, modi�cação ou uso impróprio dos sistemas de aplicações.</p><p>Proteção de con�dencialidade, autenticidade e integridade das informações.</p><p>Veri�cação da manutenção da segurança do software.</p><p>Uma forma de realizar os controles é criando trilhas de auditoria que são sequências de</p><p>procedimentos para monitoramento e registro de atividades, buscando a prevenção de uso</p><p>impróprio do sistema, elaborando esquemas e diagramas que possam representar cada uma das</p><p>etapas da trilha, como um passo a passo, e mostrando a evolução da política de segurança e</p><p>seus pontos de veri�cação e controle.</p><p>_____</p><p>� Assimile</p><p>A política de codi�cação segura gera padrões que são regras e/ou diretrizes que buscam evitar</p><p>as vulnerabilidades de segurança. Se usada adequadamente, previne e elimina erros que podem</p><p>comprometer a segurança do sistema.</p><p>_____</p><p>� Re�ita</p><p>Você andaria em um carro que não tem garantia de segurança, podendo uma roda cair durante a</p><p>direção? Não! Então, o mesmo deve ser pensado em relação ao software. Imagine você</p><p>comprando em uma loja virtual em</p><p>que seus dados estejam expostos ao acesso indevido. Agora,</p><p>pense nos seguintes problemas: os clientes podem processar a empresa por vazamento dos</p><p>dados, a empresa pode perder a credibilidade, os clientes podem ter seus dados utilizados de</p><p>forma indevida. Agora, você compreende a importância de pensar em desenvolvimento seguro?</p><p>_____</p><p>� Exempli�cando</p><p>1. Planejamento</p><p>Como meta, todos os desenvolvedores devem seguir essa diretriz em seus códigos, a partir da</p><p>aprovação e divulgação.</p><p>2. Diretrizes</p><p>2.1 Todo código deve ser validado por meio de ferramenta de análise de código; como exemplo,</p><p>tem-se o Sonar.</p><p>2.2 Todos os dados de usuários devem ser criptografados antes de serem armazenados.</p><p>_____</p><p>Uma política de codi�cação segura é um ponto inicial para um processo de desenvolvimento de</p><p>software seguro. Nesta aula, o objetivo foi esclarecer como proceder na elaboração de uma</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>política efetiva, implantada de forma responsável pelos integrantes da equipe de</p><p>desenvolvimento e, depois, usada no desenvolvimento de sistemas a �m de que sejam</p><p>efetivamente seguros para quem for utilizar.</p><p>Conclusão</p><p>Para a solução deste problema, em primeira instância, é necessário de�nir um planejamento.</p><p>Deve-se elaborar um plano descrevendo os pontos importantes na política para a empresa, no</p><p>aspecto da garantia da segurança no desenvolvimento.</p><p>Dessa forma, siga os seguintes passos:</p><p>1. De�na os objetivos de segurança, escreva cada um deles. Sendo uma fábrica de software, o</p><p>objetivo da base é criar sistemas seguros que atendam à demanda dos clientes (empresas)</p><p>alinhados ao negócio e atendendo às normas.</p><p>Com base nos detalhes solicitados nesta situação-problema e no produto, que é um sistema de</p><p>gestão documental, nosso objetivo deve estar relacionado aos dados e ao armazenamento.</p><p>O objetivo seria algo como garantir que todos os dados críticos tenham integridade total e que o</p><p>sistema tenha con�abilidade, para que todos os usuários possam utilizar o sistema de forma</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>segura, e que possuam um login, com senha segura, com, no mínimo, 6 caracteres entre letras,</p><p>números e caracteres especiais.</p><p>Tais informações devem estar criptografadas e permitir auditar o que cada usuário fez no</p><p>sistema. Além disso, já que os dados não podem ser dani�cados ou modi�cados, a infraestrutura</p><p>deve ser pensada em um modelo de escalabilidade e disponibilidade.</p><p>2. Elabore diretrizes para o desenvolvimento:</p><p>Dado que o objetivo é a integridade e a con�abilidade, nossa primeira diretriz poderia estar ligada</p><p>à criptogra�a das senhas. Podemos ter, ainda, a adoção de protocolos seguros, armazenamento</p><p>com disponibilidade, entre outros. Vejamos alguns exemplos a seguir:</p><p>Diretriz 1: todas as senhas devem ser criptografadas (Autenticidade).</p><p>Diretriz 2: o sistema deve usar protocolos seguros HTTPS.</p><p>Diretriz 3: os dados devem ser armazenados em ambiente com replicação automatizada</p><p>(Integridade)</p><p>Diretriz 4: o sistema deve estar em servidor distribuído com múltiplas instâncias</p><p>(Disponibilidade).</p><p>É recomendado, ainda, quebrar a diretriz maior em partes menores, por exemplo:</p><p>Diretriz 1. Todas as senhas devem ser criptografadas.</p><p>As criptogra�as de senhas devem adotar algoritmos de hash, evitando que seja realizada a</p><p>descriptogra�a.</p><p>A seleção do algoritmo de criptogra�a será feita pela equipe de desenvolvimento, sendo</p><p>adotada por todos e não sendo modi�cada durante a implementação.</p><p>Deve-se criptografar as senhas em nível de back-end antes de armazenar os dados no</p><p>banco de dados.</p><p>Detalhe essa política, faça um passo a passo, de acordo com o que foi visto nesta aula e com o</p><p>exemplo dado.</p><p>Aula 2</p><p>Especi�cação de requisitos de segurança em desenvolvimento de sistemas</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, você aprenderá quais são os requisitos de segurança necessários no</p><p>desenvolvimento de sistemas.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>esclarecer os conceitos de requisitos de segurança;</p><p>analisar a especi�cação de requisitos funcionais e não funcionais;</p><p>debater sobre as vulnerabilidades e riscos relacionados aos requisitos de sistemas.</p><p>Situação-problema</p><p>Estudante, o desenvolvimento de um software requer mais do que apenas programar. É</p><p>necessário compreender as necessidades dos usuários e do negócio, bem como os requisitos</p><p>funcionais e não funcionais ligados às características do produto. Assim, desenvolver um</p><p>sistema com qualidade requer um conjunto de habilidades para podermos atingir tal objetivo.</p><p>Mas, como é de�nida a qualidade de um software? De acordo com a NBR/ISO/IEC 25010:2011 (a</p><p>norma brasileira original é a NBR 13596, que foi substituída pela NBR ISO/IEC 9126-1 e que,</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>agora, foi descontinuada e substituída pela ISO/IEC 25010:2011), qualidade é de�nida como “a</p><p>totalidade de características de um produto de software que lhe confere a capacidade de</p><p>satisfazer a necessidades explicitas e implícitas”. Relacionados a segurança de sistemas, há</p><p>pontos explícitos que estão nas leis e nas necessidades apontadas na política de codi�cação</p><p>segura, considerando aspectos funcionais e não funcionais (ISO, 2021).</p><p>Nesse sentido, como saber quais são as necessidades relacionadas à segurança de um produto?</p><p>Como garantir que o planejamento atenda tais necessidades? E os clientes, sabem quais são os</p><p>requisitos de segurança, para que, durante o desenvolvimento, seja feito o levantamento?</p><p>Tais perguntas são essenciais para desenvolver softwares cada vez mais interligados com dados</p><p>dos usuários, o que, hoje, requer mais atenção, de acordo com as necessidades de atendimento</p><p>às Leis de proteção a dados, tanto no Brasil, com a Lei Geral de Proteção a Dados (LGPD), quanto</p><p>com as leis e regulamentos de outros países, como exemplo, o Regulamento Geral sobre</p><p>Proteção de Dados (General Data Protection Regulation – GDPR) da União Europeia.</p><p>Empresas devem estar preparadas e os sistemas que hoje estão em funcionamento devem ser</p><p>adaptados para uma nova realidade. Os novos sistemas já devem ser pensados e desenvolvidos</p><p>para atender às necessidades globais de segurança. Por isso, o passo inicial é ter uma política de</p><p>codi�cação segura, que alinhe os pontos relacionados a sistemas seguros, para que a equipe</p><p>atenda tais necessidades; em seguida, deve-se pensar nos requisitos com uma visão de</p><p>atendimento aos critérios de segurança, buscando entender quais são as características,</p><p>relacionadas à qualidade do produto e que estejam ligadas diretamente à segurança, e que</p><p>devem ser atendidos durante a implementação. Para isso, pode-se usar como base a</p><p>ISO/IEC/IEEE 29148-2018, sobre engenharia de requisitos, e a norma ISO/IEC 25010, que traz as</p><p>características de qualidade de produtos. Nessas características está a segurança,</p><p>demonstrando a sua importância para o desenvolvimento de sistemas.</p><p>Você é um desenvolvedor de sistemas focado em desenvolver código seguro, e faz parte da</p><p>equipe de TI da fábrica de software Zeta Medical Software, que está desenvolvendo um sistema</p><p>para gestão de clínicas médicas e que pretende implementar uma nova solução para as</p><p>pequenas clínicas. O sistema funcionará na Web em um modelo de Software como Serviço (SaaS</p><p>– Software as a Service). O sistema deve permitir que os usuários façam o cadastro para</p><p>consulta e marquem a consulta; as consultas são, então, validadas pela equipe de secretaria.</p><p>Após a validação, a consulta vai para a agenda do paciente e do médico. No dia da consulta, os</p><p>dados relacionados à consulta são inseridos no sistema, buscando criar um relatório completo</p><p>de informações sobre o paciente. Os pacientes podem acessar o sistema 24 horas por dia,</p><p>porém o médico e o setor de secretaria usam o sistema em horário diferenciado, das 6 às 20</p><p>horas, de segunda a sábado.</p><p>Os dados relacionados à consulta devem ser acessados apenas pelo médico e pelo paciente,</p><p>não podendo ser acessados pela secretaria ou por outras pessoas. Apenas</p><p>o médico que</p><p>elaborou o relatório pode fazer mudanças, devendo �car registradas todas elas. O paciente tem</p><p>acesso apenas à visualização do relatório, podendo imprimir para uso próprio. É necessário</p><p>acompanhar o dia e a hora que o paciente marcou a consulta e quem aprovou a consulta, pois há</p><p>uma regra de que nenhum paciente pode �car mais de 24 horas aguardando a aprovação do</p><p>agendamento; assim, para saber os motivos de demora, deve haver relatório indicando quem</p><p>acessou, quem aprovou, quais não foram aprovados etc.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Dessa forma, você, como desenvolvedor responsável que é, analisando o caso, identi�que, com</p><p>base nos subcritérios de qualidade da norma ISO/IEC 25001, os requisitos de segurança,</p><p>lembrando que tais requisitos são essenciais para o sistema e devem ter um alinhamento com as</p><p>normas.</p><p>Recomendamos, para tanto, que você use como exemplo a tabela apresentada nesta aula para</p><p>apresentar os requisitos de segurança do sistema. É importante que, durante a elaboração da</p><p>tabela, identi�quem-se os riscos envolvidos para que, posteriormente, faça-se uma análise</p><p>relacionando possíveis vulnerabilidades dos requisitos e qual o impacto para o sistema.</p><p>Lembre-se sempre de cruzar os critérios de qualidade com as necessidades dos usuários, para</p><p>ter uma visão abrangente e clara dos requisitos de segurança.</p><p>Desenvolver sistemas seguros é mais do que programar, é pensar a segurança desde os</p><p>requisitos, até a entrega. E estar preparado para isso é essencial para atender à demanda do</p><p>mercado, que requer atenção aos critérios de segurança de um produto, por necessidade do</p><p>mercado e por demanda das leis, gerando grandes oportunidades para os pro�ssionais de</p><p>desenvolvimento seguro de aplicação.</p><p>Conceitos de requisitos de segurança</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Requisitos são o ponto inicial do desenvolvimento de um sistema, sendo de extrema importância</p><p>para o desenvolvimento de uma solução que atenda o cliente, porém é uma tarefa difícil.</p><p>Pressman (2016) a�rma que, entre as tarefas mais difíceis da construção de um sistema, está a</p><p>decisão do que realmente devemos construir. Nenhum outro trabalho conceitual é tão difícil</p><p>quando a descoberta e o estabelecimento dos requisitos técnicos detalhados (PRESSMAN,</p><p>2016).</p><p>Dessa forma, pode-se dizer que os requisitos são a base de um projeto, partindo das</p><p>necessidades das partes interessadas (stakeholders) – usuários, clientes, fornecedores,</p><p>desenvolvedores, empresas, entre outros. Além disso, o custo da correção de um erro na etapa</p><p>de requisitos é menor do que na produção.</p><p>Engenharia de Requisitos (ER) é o processo pelo qual os requisitos de software são coletados,</p><p>analisados, documentados e gerenciados, inicia-se na fase de comunicação, indo até a</p><p>modelagem. Nesse sentido, a ER tem a preocupação de interpretar e compreender os objetivos,</p><p>necessidades e crenças das partes interessadas (PRESSMAN, 2016).</p><p>As consequências de não possuir um processo bem de�nido de requisitos é a falha quando</p><p>sistemas não atendem às necessidades dos usuários. Por melhor que o sistema funcione</p><p>inicialmente, se não atender às necessidades dos usuários, é inútil. Um software só pode ser de</p><p>qualidade se está adequado ao seu propósito, ou seja, se está em conformidade com os</p><p>requisitos, devendo, assim, satisfazer às necessidades das partes interessadas.</p><p>Em geral, os requisitos são divididos em, ao menos, duas categorias: funcionais e não funcionais.</p><p>Os requisitos funcionais estão ligados a uma necessidade dos stackholders que deve se tornar</p><p>uma funcionalidade do sistema; já os requisitos não funcionais especi�cam as propriedades do</p><p>sistema, como con�abilidade e segurança. Assim, a norma ISO/IEC 25010:2011 (SQuaRE) de</p><p>Engenharia de Sistemas e Software trata de requisitos e avaliação de qualidade de sistemas e</p><p>software e, entre as características de qualidade, está a segurança. A norma de�ne, ainda, para</p><p>cada característica, as sub características e descreve cada uma delas, conforme pode ser visto</p><p>na tabela a seguir (ISO, 2021).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Características, subcaracterísticas e descrição de qualidade com base na norma ISO/IEC 25010:2011. Fonte: elaborada pelo</p><p>autor, baseada na Norma ISO/IEC 25010:2011.</p><p>Com base na tabela, é possível notar que as subcaracterísticas de qualidade relacionadas à</p><p>segurança, apontadas na norma ISO/IEC 25010:2011, estão relacionadas aos pilares de</p><p>segurança da norma NBR/ISO/IEC 27001 e 27002. Assim, entende-se que a segurança em um</p><p>software vai além das características de qualidade, sendo ela apenas um pilar a ser atendido e</p><p>gerenciado, visto que os requisitos ligados à segurança têm implicação direta no funcionamento</p><p>do software.</p><p>Especi�cação de requisitos funcionais e não funcionais de con�abilidade e</p><p>proteção</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>A especi�cação dos requisitos é uma das etapas do processo de engenharia de requisitos e tem</p><p>como objetivo documentar as funcionalidades, metas de qualidade e restrições que guiarão o</p><p>processo do desenvolvimento do software. Normalmente o levantamento é realizado durante</p><p>reuniões, entrevistas, leituras de documentos e, como resultado, obtemos um documento de</p><p>requisitos. Assim, o levantamento de requisitos é a parte do processo de planejamento do</p><p>software, que deve ser entendida como a responsável por de�nir os serviços que o sistema</p><p>realizará e o que ele deve conter, ou seja, concentra o levantamento das funcionalidades que o</p><p>sistema deve possuir e o que ele deve fazer, além de auxiliar no re�namento do modelo de</p><p>domínio e aplicação. De acordo com Pressman (2016), o levantamento visa criar modelos, para</p><p>tanto o levantamento de requisitos passa por sete atividades necessárias, sendo elas:</p><p>concepção, levantamento, elaboração, negociação, especi�cação, validação e gestão. Muitas</p><p>delas podem ocorrer em paralelo e todas devem ser adaptadas às necessidades do cliente e do</p><p>projeto.</p><p>Os modelos seguem a técnica apresentada por Edsger Dijkstra (1976) que descreve que um</p><p>problema complexo deve ser quebrado em problemas menores, o que torna o processo mais</p><p>fácil e prático, em “dividir para conquistar”.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Requisitos funcionais e não funcionais. Fonte: elaborado pelo autor.</p><p>Os critérios de qualidade relacionados à segurança da Norma ISO/IEC 25010:2011, apesar de, em</p><p>sua maioria, serem requisitos não funcionais, têm implicação nos requisitos funcionais e devem</p><p>re�etir nas funcionalidades a serem implementadas pelo sistema. Como exemplo, podemos</p><p>destacar: Não repúdio, que depende de identi�car quem realizou uma determinada ação no</p><p>sistema; nesse sentido, é possível dizer que tal subcritério depende do requisito funcional de</p><p>login, que também está ligado a outro subcritério de qualidade, a autenticidade. Note, então, que</p><p>os subcritérios de segurança estão interligados e, em sua maioria, dependem de requisitos</p><p>funcionais; assim, surge a questão: como levantar os requisitos de segurança e em qual grau ele</p><p>impacta o sistema como um todo?</p><p>As características apontadas na norma ISO/IEC 25010:2011 permitem avaliar como as</p><p>funcionalidades do sistema e os dados tratados são protegidos, ou seja, além da sua</p><p>importância para a empresa também estão alinhadas aos critérios das leis de proteção a dados,</p><p>que são, agora, uma imposição para os novos sistemas. Um ponto importante é entender que a</p><p>qualidade de segurança de um sistema está relacionada às suas funcionalidades e dados, bem</p><p>como relacionada à segurança das pessoas, ergonomia do ambiente e das instalações,</p><p>relacionando-os aos requisitos funcionais.</p><p>Requisito funcional:</p><p>O secretário deve poder cadastrar novas atas de reunião, e apenas os participantes da</p><p>reunião terão acesso às atas, sem poder modi�cá-la. As pessoas da reunião devem ler e</p><p>aprovar a ata com ou sem modi�cação.</p><p>Desse simples requisito funcional temos:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Autenticidade: o usuário deve estar logado para acessar</p><p>a funcionalidade de cadastrar</p><p>novas atas e deve ter o per�l de secretário.</p><p>Integridade: os dados devem ser salvos e apenas o usuário (secretário) pode realizar</p><p>modi�cações nos dados.</p><p>Con�dencialidade: note que apenas as pessoas na reunião poderão fazer a leitura da ata,</p><p>ou seja, ligando à autenticidade do sistema, para que os usuários logados e que estejam na</p><p>reunião possam ter acesso aos dados da ata.</p><p>Não repúdio: o usuário que elaborou a ata (secretário) não pode a�rmar que não foi ele que</p><p>fez o documento, ou seja, deve haver uma forma de garantir que o usuário elaborou e</p><p>disponibilizou a ata. Além disso, após a leitura da ata por todos os usuários presentes na</p><p>reunião, deve ser aprovada por todos, como garantia de não repúdio.</p><p>Rastreabilidade de uso: devemos ter uma forma de identi�car se os usuários leram e</p><p>aprovaram as atas, ou seja, acompanhar o que foi utilizado no sistema.</p><p>Note, então, que os requisitos funcionais devem gerar requisitos ligados à con�abilidade e</p><p>proteção do sistema, sendo que parte destas sub características de segurança devem ser</p><p>atendidas para serem levantadas, o que depende não somente dos usuários, mas das leis e</p><p>necessidades organizacionais. As atas do requisito apresentado poderiam, em algum momento,</p><p>estar disponíveis publicamente, porém sem a capacidade de alteração.</p><p>É importante entender o que seria estar disponível publicamente? Seria estar disponível para</p><p>leitura de pessoas internas e externas à organização, ou apenas externas à reunião, mas internas</p><p>da organização?</p><p>São essas perguntas que os engenheiros de requisitos devem levantar, compreender e</p><p>apresentar à equipe de desenvolvimento, para que o sistema seja desenvolvido de forma a</p><p>contemplar a segurança. Assim, ao especi�car os requisitos, o engenheiro deve incluir todos os</p><p>detalhes necessários ao desenvolvimento, visando garantir a qualidade do produto.</p><p>Por �m, após os requisitos terem sido documentados, necessitamos de validação, visto que o</p><p>custo de correção de erros durante a fase de requisitos é menor do que nas demais fases. Ou</p><p>seja, o processo de validação de requisitos tem como objetivo con�rmar que os requisitos foram</p><p>levantados de forma adequada e serão desenvolvidos.</p><p>Nesse sentido, os requisitos de qualidade, ligados à segurança, devem fazer parte da</p><p>especi�cação do produto, por um documento suplementar, ou seja, critérios para o software</p><p>como um todo ou, ainda, como parte complementar do documento funcional. Ou seja:</p><p>documento suplementar, quando se aplica a todo o sistema, e documento não funcional, quando</p><p>se aplica a uma ou poucas funções.</p><p>Como exemplo de documento suplementar de requisitos não funcionais de segurança,</p><p>poderíamos elaborar uma tabela de requisitos, conforme exemplo da tabela. Alguns requisitos</p><p>estão atrelados, inclusive a política de codi�cação segura.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Exemplo de tabela de requisitos não-funcionais de segurança. Fonte: elaborada pelo autor.</p><p>Na tabela, a identi�cação aponta para a informação, que é apenas um exemplo, dado que cada</p><p>empresa pode criar seu próprio modelo. Optamos por RNF (Requisitos não funcionais) – SEC</p><p>(Tipo de requisitos não funcionais de segurança) e um número sequencial. Note que o requisito</p><p>autenticidade é apontado como importante, mas poderia ser de baixa importância, importante ou</p><p>muito importante. Normalmente, isso está atrelado à necessidade do requisito pelo cliente. A</p><p>estabilidade indica se o requisito é muito modi�cado ou não; note que a autenticidade é de alta</p><p>estabilidade, porém o log tem média, pois os dados do log podem, necessariamente, ser</p><p>modi�cados, durante o uso. O risco está atrelado à possibilidade de ocorrência de algum</p><p>problema durante o desenvolvimento desse requisito; requisitos médios, indicam que devemos</p><p>tomar precauções, evitando que não seja entregue e, por �m, a situação do requisito estar como</p><p>proposto, após aprovado, o status poderia ser modi�cado.</p><p>O exemplo dado na tabela é apenas uma das formas de documentar nossos requisitos e</p><p>acompanhar a situação, porém cabe ao engenheiro de requisitos de�nir o que deve constar no</p><p>documento, qual o melhor formato e como deve ser criado para auxiliar no processo de</p><p>desenvolvimento.</p><p>Assim, podemos dizer que para a especi�cação de requisitos de segurança o engenheiro deve</p><p>cruzar informações dos stackholders com normas, políticas organizacionais, leis e necessidades</p><p>mercadológicas, buscando elaborar uma declaração de funcionalidade segura, garantindo, assim,</p><p>as subcaracterísticas de qualidade.</p><p>Análise de requisitos de segurança</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Na etapa anterior, foi feita a descoberta e especi�cação dos requisitos com relação à segurança</p><p>no desenvolvimento de sistemas, porém é necessária uma análise sobre os requisitos, visto que</p><p>sistemas de software possuem diversas integrações entre subsistemas e outros sistemas, que</p><p>são capazes de armazenar, processar, transferir, apresentar e gerenciar informações, logo, uma</p><p>análise do impacto dos requisitos de segurança sobre esse conjunto de ações passa a ser</p><p>necessária. Veja um exemplo na �gura.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Diagrama de componentes de sistema. Fonte: elaborada pelo autor.</p><p>No diagrama da �gura, temos um caso de dois subsistemas do sistema, um para gestão de</p><p>produtos e um para vendas. Normalmente, já temos que nos preocupar com a comunicação dos</p><p>componentes e com as informações, porém esse é um caso em que se tem um componente</p><p>externo, relacionado à nota �scal eletrônica. Nesse sentido, é necessário analisar como enviar os</p><p>dados para a NF-Eletrônica. Tais dados não vão infringir a LGPD? É sob este ponto de vista que o</p><p>engenheiro de requisitos deve analisar como a segurança será impactada pela relação de</p><p>componentes e uso do sistema. Assim, passa a ser importante identi�car os requisitos de</p><p>segurança e analisar como vão se comportar e o impacto para o sistema como um todo.</p><p>Veja outro exemplo: buscando garantir a integridade, vamos criptografar todos os dados e</p><p>permitir que apenas com o login eles sejam descriptografados. A ideia pode ser boa, porém</p><p>requer uma análise mais profunda em relação ao resto do sistema, pois uma criptogra�a</p><p>demanda recursos computacionais, o que pode reduzir a performance do sistema, criando um</p><p>problema de disponibilidade. Esse é outro fator de segurança importante, por isso os requisitos,</p><p>após levantados, devem ser entendidos e debatidos para saber o nível de sua implementação e,</p><p>se realmente tal requisito for adotado, não haja alguma implicação negativa para o sistema.</p><p>Videoaula: requisitos de segurança</p><p>Este conteúdo é um vídeo!</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os requisitos de segurança.</p><p>Vulnerabilidades e riscos relacionados aos requisitos de sistemas</p><p>Conforme Kim (2014), a vulnerabilidade pode ser de�nida como uma fraqueza disponível em um</p><p>sistema, procedimentos, controles ou implementações que podem ser explorados,</p><p>desencadeando, assim, ameaças de segurança. Nesse sentido, durante a análise de requisitos, é</p><p>necessário buscar identi�car as possíveis vulnerabilidades e os riscos relacionados para evitar</p><p>que, ao ser implementado, as vulnerabilidades persistam, podendo ocasionar um incidente de</p><p>segurança.</p><p>Uma vulnerabilidade deixou de ser tratada desde a etapa de requisitos, chegando à etapa de</p><p>implantação do sistema, permitindo que o sistema seja atingido, dani�cado, invadido, entre</p><p>outros. Em geral, para identi�car as vulnerabilidades de um sistema, depois de implementado, é</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>possível usar um scanner de vulnerabilidade. Um problema da vulnerabilidade é que di�cilmente</p><p>se identi�ca durante a fase de planejamento, porém é possível analisar os requisitos com base</p><p>nas normas, veri�cando se atendem aos critérios e</p><p>pilares de segurança. Para cada item que não</p><p>está atendido nos requisitos devemos realizar uma análise de risco, para identi�car se vamos</p><p>corrigir a vulnerabilidade imediatamente ou se será corrigida posteriormente (KIM, 2014).</p><p>Imagine o sistema de atas exempli�cado anteriormente. Ao analisar os requisitos, é identi�cado</p><p>um ponto não tratado, o requisito de disponibilidade. Realiza-se uma reunião com os</p><p>stackholders para saber qual a necessidade de disponibilidade e identi�ca-se que o sistema deve</p><p>estar em funcionamento no horário comercial apenas.</p><p>Ou seja, ele deve estar disponível das 8 às 18 horas, de segunda a sexta.</p><p>Assim, é realizada outra reunião com a equipe de infraestrutura, para discutir se esse requisito de</p><p>disponibilidade, nesse período, pode ser atendido.</p><p>Note que o principal risco é que, durante uma reunião, o sistema esteja indisponível,</p><p>impossibilitando o registro das atividades e não permitindo a criação da ata, o que é imperdoável,</p><p>visto que as atas são necessárias, conforme política interna da empresa.</p><p>Dessa forma, não basta identi�car a vulnerabilidade, é necessário também cruzar com os riscos</p><p>da ocorrência da vulnerabilidade, para pensar nas estratégias necessárias para sanar o problema</p><p>e para avaliar o custo relativo à ocorrência do problema. Por �m, mas ainda importante, após ser</p><p>implementado o sistema, realiza-se nova busca de vulnerabilidades, por meio de sistemas de</p><p>análise de vulnerabilidades, como OpenVas, por exemplo. O OpenVas é um dos muitos scanners</p><p>de vulnerabilidade, bastando inserir o IP do equipamento para que realize uma análise completa</p><p>de possíveis vulnerabilidades. Sendo uma ferramenta gratuita, é possível adotar como prática</p><p>constante na análise do atendimento dos requisitos de segurança.</p><p>Para a escolha de uma ferramenta gratuita ou mesmo paga, é necessária a busca e</p><p>homologação no ambiente em que se quer implementar, e não é recomendada a escolha por</p><p>uma simples indicação. Deve-se escolher mediante dados de resultados de testes no ambiente e</p><p>da análise do comportamento da ferramenta no ambiente, veri�cando quais benefícios podem</p><p>ser dela extraídos.</p><p>_____</p><p>� Assimile</p><p>Os requisitos de segurança são uma continuação da política de codi�cação segura, que visa</p><p>identi�car os critérios necessários para desenvolver um sistema, atendendo às normas, leis,</p><p>regras e demandas relacionadas aos critérios de qualidade Segurança do produto. Se</p><p>levantados de forma adequada, permitem que os desenvolvedores apliquem técnicas a �m de</p><p>elaborar um sistema seguro e que atenda às necessidades dos usuários.</p><p>_____</p><p>� Re�ita</p><p>Se você soubesse que os dados do seu cartão de crédito estão em um sistema que não atende a</p><p>critérios mínimos de segurança, você faria a compra mesmo assim? Imagine: dados de milhões e</p><p>milhões de usuários trafegando na Internet. Se os sistemas utilizados para gerir essas</p><p>informações não foram desenvolvidos pensando na segurança, temos um cenário desastroso,</p><p>com um crescimento no uso dos sistemas e nas vulnerabilidades, que podem fazer com que</p><p>sistemas que são utilizados para automação de carros, por exemplo, parem por falta de</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>disponibilidade. Assim, é necessário pensar quão importantes são os requisitos de segurança</p><p>para um sistema e como fazer para que seja implementado adequadamente.</p><p>_____</p><p>� Exempli�cando</p><p>Levantando um requisito de segurança</p><p>1. Elicitando</p><p>Realize perguntas para descobrir requisitos de segurança. Exemplo:</p><p>Qual o período de uso do sistema? (Relacionado à disponibilidade).</p><p>Os usuários devem estar autenticados para realizar ações no sistema? (Autenticidade e não</p><p>repúdio).</p><p>É importante registrar todas as ações que os usuários fazem no sistema após logado?</p><p>(Rastreabilidade de uso e não repúdio).</p><p>Essas perguntas vão possibilitar a identi�cação de requisitos não funcionais de segurança para a</p><p>aplicação.</p><p>_____</p><p>Os requisitos de segurança são uma continuidade da política de codi�cação segura, tendo como</p><p>objetivo melhorar a qualidade do projeto, reduzindo as vulnerabilidades do sistema. A</p><p>importância é a mesma que o trabalho bem-feito em uma codi�cação. Não é possível separar o</p><p>desenvolvimento de um sistema sem usar normas e modelos que garantam a segurança.</p><p>Videoaula: conceitos de especi�cação e métodos formais de</p><p>desenvolvimento de sistemas</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os conceitos de especi�cação e métodos formais de desenvolvimento</p><p>de sistemas.</p><p>Roteiro de aula prática</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula práitca!</p><p>Conclusão</p><p>Em primeira instância, vamos identi�car os itens que aparecem na SP e relacionar com os sub-</p><p>critérios da norma ISO/IEC 25001.</p><p>https://cm-kls-content.s3.amazonaws.com/AMPLI/RAP/SEGURANCA_EM_ENGANHARIA_DE_SOFTWARE/MANUAL_INSTALACAO</p><p>https://cm-kls-content.s3.amazonaws.com/AMPLI/RAP/SEGURANCA_EM_ENGANHARIA_DE_SOFTWARE/RAP.pdf</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Tabela de requisitos de segurança e seu alinhamento aos critérios ISO/IEC 25001. Fonte: elaborada pelo autor.</p><p>Note que foram identi�cados alguns requisitos de segurança.</p><p>Preencha, então, a tabela de requisitos, conforme exemplo a seguir.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Exemplo de tabela de requisitos não-funcionais de segurança. Fonte: elaborada pelo autor.</p><p>Aula 3</p><p>Especi�cação formal</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, você aprenderá sobre a especi�cação formal na engenharia de software.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>discutir sobre o conceito de especi�cação;</p><p>analisar a especi�cação formal em um processo de software baseado em plano;</p><p>debater sobre os padrões de desenvolvimento prático.</p><p>Situação-problema</p><p>Projetar e arquitetar um software com segurança é uma tarefa essencial para que se criem</p><p>sistemas que permitam a evolução e a expansão. Nesse sentido, é preciso compreender o</p><p>impacto da segurança na especi�cação de um software e como isso implica em uma arquitetura</p><p>segura. As normas vistas anteriormente trazem como apontamento as necessidades</p><p>relacionadas a qualidade e segurança da informação, porém de nada adianta ter normas se o</p><p>projeto não atender tais demandas. Além disso, a segurança é algo que evolui constantemente,</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>exigindo da equipe um projeto que permita mudanças a curto, médio e longo prazo, pois cria</p><p>implicações na sobrevivência da aplicação.</p><p>Nesse sentido, é importante compreender quais são os padrões de arquitetura existentes, como</p><p>esses padrões podem impactar o software e como a segurança está relacionada a tais padrões?</p><p>É com base nessas questões que esta unidade trabalha, buscando trazer respostas para que se</p><p>projete sistemas de qualidade e segurança e entender como funciona a Especi�cação formal em</p><p>um processo de software baseado em plano.</p><p>Para isso, é preciso compreender que a especi�cação do software, iniciada na etapa de</p><p>engenharia de requisitos, deve garantir que sejam levantadas as necessidades do sistema. Mas</p><p>não apenas isso, deve-se gerenciar e atualizar tais necessidades, como os modelos de</p><p>maturidade de software que trazem como essencial o processo de engenharia de requisitos, e</p><p>que têm como foco a de�nição, gerenciamento e a atualização dos requisitos com relação às</p><p>partes interessadas (stakeholders) e o produto. Mas não apenas isso: esse processo deve</p><p>garantir que não haja inconsistências entre os requisitos, os planos e o produto. Aqui, cabe</p><p>informar que o processo</p><p>lida com todos os tipos de requisitos, não apenas de segurança, porém,</p><p>como apontado, deve-se tomar cuidado para que os requisitos de segurança sejam sempre</p><p>atualizados. Isso é o resultado de um processo que envolve planejamento, integração,</p><p>desenvolvimento e testes, e prepara o produto para atender às necessidades da Lei Geral de</p><p>Proteção a Dados, bem como as diversas normas ligadas à segurança e à qualidade de software,</p><p>que são uma demanda crescente do mercado.</p><p>Uma fábrica de software para serviços médicos desenvolve um sistema para gestão de clínicas</p><p>médicas e pretende implementar uma nova solução para as pequenas clínicas. O sistema</p><p>funcionara na Web em um modelo de Software como Serviço (SaaS – Software as a Service).</p><p>Você é um analista de sistemas contratado para atuar na área de desenvolvimento, com grande</p><p>experiencia em arquiteturas mais complexas e seguras, e tem a missão de melhorar a qualidade</p><p>e segurança dos sistemas utilizados nesse ambiente.</p><p>O sistema deve permitir que os usuários façam o cadastro para consulta, marquem a consulta, e</p><p>as consultas são, então, validadas pela equipe de secretaria.</p><p>Após a validação, a consulta vai para a agenda do paciente e do médico. No dia da consulta, os</p><p>dados relacionados à consulta são inseridos no sistema, buscando criar um relatório completo</p><p>de informações sobre o paciente. Os pacientes podem acessar o sistema 24 horas por dia,</p><p>porém o médico e o setor de secretaria usam o sistema em horário diferenciado, das 6 às 20</p><p>horas, de segunda a sábado.</p><p>Os dados relacionados à consulta podem ser acessados apenas pelo médico e pelo paciente,</p><p>não podendo ser acessado pela secretaria ou outras pessoas. Apenas o médico que elaborou o</p><p>relatório pode fazer mudanças, devendo �car registrado todas as mudanças. O paciente tem</p><p>apenas acesso à visualização do relatório, podendo imprimir para uso próprio. É necessário</p><p>acompanhar o dia e a hora que o paciente marcou a consulta e quem aprovou a consulta, pois</p><p>nenhum paciente pode �car mais de 24 horas aguardando a aprovação do agendamento. Para</p><p>saber os motivos da demora, deve haver relatório indicando quem acessou, quem aprovou, quais</p><p>não foram aprovados etc.</p><p>Analisando o caso acima, você, como analista responsável pela implantação desse sistema</p><p>como serviço, identi�que o melhor modelo de arquitetura a ser utilizada e identi�que quais</p><p>seriam os requisitos funcionais e não funcionais do sistema. Proponha um modelo de métodos</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>formais para que seja desenvolvido o sistema com menos problemas possíveis e que seja</p><p>seguro o su�ciente para entrar em produção.</p><p>Para isso, vamos compreender quais os estilos de arquitetura, como impactam nosso sistema,</p><p>como garantir que o sistema seja con�ável e permita a evolução, e como isso vai impactar no</p><p>futuro do sistema. Visamos não apenas compreender a segurança, mas também saber como ela</p><p>vai impactar em todo o projeto do sistema e em sua evolução.</p><p>Conceito de especi�cação e métodos formais de desenvolvimento de</p><p>sistemas</p><p>Conforme Pressman (2016), dado que os softwares tornam-se cada vez mais complexos, há uma</p><p>demanda maior por melhor especi�cação. Nesse sentido, há diversas formas de modelar e</p><p>especi�car um software, e parte deste processo é a elicitação de requisitos, em conjunto com o</p><p>trabalho de métodos formais, no caso da segurança ligada ao sistema. Tal processo de</p><p>descoberta de requisitos de segurança envolve as demandas da organização, mas também as</p><p>leis e normas vigentes.</p><p>Desenvolver sistemas robustos por meio de uma linguagem próxima à língua Portuguesa ou</p><p>mesmo a Inglesa pode trazer problemas com ambiguidades da língua, e uma forma de</p><p>solucionar esses problemas é utilizar o UML (Uni�ed Modeling Language). Mas o uso do UML</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>não permite a consistência e precisão necessária para as novas tecnologias e suas</p><p>necessidades, por isso a melhor solução é a utilização dos métodos formais.</p><p>De acordo com Pressman (2016), esses métodos são utilizados no desenvolvimento de sistemas</p><p>priorizando a coesão, pois utilizam métodos e princípios da matemática, permitindo que sejam</p><p>seguros e exatos.</p><p>Esses métodos foram elaborados para apoiar as etapas de desenvolvimento de software, sendo:</p><p>especi�cação formal para de�nição de requisitos, re�namento para concepção de projeto,</p><p>síntese para implementação, prototipagem para validação e prova para veri�cação. E podem ser</p><p>aplicados ao longo de todo o projeto de desenvolvimento (PRESSMAN,2016).</p><p>É possível elaborar uma especi�cação formal de requisitos de segurança, para tanto a</p><p>especi�cação segue alguns passos, como:</p><p>1. Identi�car o propósito do produto e da segurança no produto.</p><p>Tal passo é importante, pois vai impactar em todo o restante do sistema. Se o sistema é bancário</p><p>e lida com recursos �nanceiros, ou um sistema de carro autônomo que lida com vidas, a</p><p>necessidade de segurança será diferente de um jogo para crianças. Todos têm níveis de</p><p>segurança, porém deve-se pensar qual o propósito e como atender à segurança para o produto.</p><p>2. Analisar os riscos</p><p>Sabendo o propósito do produto, deve-se analisar os riscos envolvidos, imagine um sistema no</p><p>qual o propósito é controlar um drone de entregas. Quais os riscos? Se alguém invadir o sistema,</p><p>temos o risco de um desastre se o drone cair sobre uma criança, por exemplo. Então, a etapa de</p><p>análise dos riscos é essencial.</p><p>3. Faça uma lista de veri�cação</p><p>Dado que temos os riscos, é necessário elaborar uma lista de veri�cação para saber se foram</p><p>mitigados durante o desenvolvimento. Certi�que-se de incluir todas as veri�cações necessárias</p><p>para avaliar os riscos do produto.</p><p>4. Valide as listas de riscos e veri�cação</p><p>Valide as listas com base nas normas e leis, veri�cando se algo �cou de fora e como elas foram</p><p>atendidas.</p><p>Com base nessas informações, será possível criar a tabela de requisitos de segurança, indicando</p><p>o requisito, o risco e como veri�car, formalizando, assim, os itens necessários para o</p><p>desenvolvimento do produto.</p><p>Essa ação, além de essencial para o desenvolvimento de sistemas, atende às necessidades de</p><p>maturidade de desenvolvimento de software, como os modelos CMMi e MPS.BR, entre outros.</p><p>As normas apontam como necessário que seja levantado os requisitos e que sejam</p><p>especi�cados e priorizados, mantendo-se todos atualizados. Há diversos modelos de</p><p>documentos de requisitos, porém alguns itens são comuns, em sua maioria, sendo:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Nome do fornecedor do requisito (pode ser uma pessoa, uma norma, uma lei no caso da</p><p>segurança da informação).</p><p>Escopo do produto: indica até onde, o limite, do requisito.</p><p>Requisitos de segurança do produto: aqui cabe fazer uma ligação com as normas e leis.</p><p>Riscos relacionados a cada requisito do produto: se o requisito não for atendido, qual risco</p><p>temos?</p><p>Lista de veri�cação, ou cenário de teste para analisar quais riscos se mantêm e quais foram</p><p>resolvidos durante o desenvolvimento: como veri�car se o requisito foi atendido.</p><p>Documentos auxiliares: quais documentos podem dar apoio (leis, normas etc.) ao</p><p>desenvolvimento.</p><p>Como é um documento que deve ser atualizado, a capa deve conter a versão e o nome do</p><p>desenvolvedor, pois, assim, é possível atualizar e manter as informações relacionadas ao</p><p>passado do produto.</p><p>É importante que se tenha critérios que permitam avaliar e aceitar os requisitos do sistema,</p><p>assim, destacamos:</p><p>Não ambiguidade: indica que um requisito não leva a um duplo sentido.</p><p>Completude: indica que o requisito está completo, que vai auxiliar no entendimento do</p><p>negócio.</p><p>Consistência: indica coerência e a credibilidade da informação.</p><p>Exigência de leis ou normas.</p><p>Testáveis: indica que é possível testar o requisito levantado.</p><p>Especi�cação formal em um processo de software baseado em plano</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Na especi�cação formal, no processo de especi�cação de requisitos são identi�cados os</p><p>Requisitos Funcionais e não Funcionais. O primeiro deles está relacionado diretamente</p><p>ao que o</p><p>sistema deve fazer e, o segundo, como o sistema deve desempenhar o que foi designado a fazer.</p><p>Conforme Pressman (2016), no contexto de Especi�cação de Requisitos o maior problema é o</p><p>requisito não representar o que ele realmente deseja do sistema, fato muito comum em sistemas</p><p>que têm muitos requisitos ou grandes sistemas que dependem de muita integração. Na tentativa</p><p>desse problema não acontecer, o caminho é trabalhar com Especi�cação Formal.</p><p>A Especi�cação Formal nada mais é que a formalização dos requisitos identi�cados por meio de</p><p>algum método formal, por uma modelagem. Os elementos são distintos de acordo com o</p><p>método formal utilizado (REINEHR, 2020).</p><p>É importante que os requisitos sejam descritos de forma textual, considerando que a</p><p>Especi�cação formal é uma parte do Levantamento de Requisitos.</p><p>Importante também lembrar que o trabalho não é somente de criar modelos de requisitos, mas</p><p>fazer análise deles.</p><p>Conforme Reinehr (2020), após análise, faz-se o re�namento para conceber o projeto,</p><p>trabalhando nessa fase na arquitetura do sistema, considerando seus componentes e interfaces,</p><p>bem como na criação das fases de manutenção e execução do sistema e suas atividades de</p><p>entrada e saída.</p><p>Ferramentas são importantes para a utilização dos métodos formais, muitos com interface</p><p>grá�ca, com o objetivo de avaliação do comportamento do sistema na sua execução.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Após análise, o projeto entra na síntese, que nada mais é que o centro do código, a base que dará</p><p>forma para o corpo do projeto, a programação básica, formando a estrutura do projeto. As</p><p>ferramentas para métodos formais, muitas delas, já conseguem fazer isso.</p><p>Após a passagem pela síntese, é necessário fazer prototipagem e prova, com os objetivos de</p><p>atestar que o sistema foi desenvolvido dentro dos conceitos e atendendo aos requisitos</p><p>funcionais e não funcionais, atendendo ao padrão de segurança.</p><p>A prova tem a missão de validar se o sistema foi desenvolvido de acordo com o que tinha sido</p><p>planejado, respeitando o proposto no desenvolvimento de sistemas. A prova testa</p><p>exaustivamente o sistema, com testes manuais ou automatizados.</p><p>A prototipagem é simplesmente fazer um protótipo do sistema que se quer desenvolver para</p><p>validar o que se propôs desenvolver.</p><p>UML. Fonte: elaborado pelo autor.</p><p>Por serem utilizados modelos matemáticos para esses métodos formais, o modelo torna-se mais</p><p>demorado e, por vezes, difícil, pois nem todos os desenvolvedores de sistemas dominam os</p><p>métodos.</p><p>Muitas vezes esses métodos são aplicados em modelos matemáticos e, atualmente, em</p><p>sistemas que são desenvolvidos e que farão a validação dos métodos.</p><p>Conforme Reinehr (2020), os métodos formais passam por diversos níveis em como podem ser</p><p>empregados, dada a complexidade. Por serem complexos, muitas vezes são aplicados somente</p><p>em sistemas que comprometam a vida humana, ou que causem sérios danos ao mundo.</p><p>Desta forma, eles são divididos nos seguintes níveis, conforme apresentado na tabela.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Níveis atendidos aos métodos formais. Fonte: elaborada pelo autor.</p><p>A utilização de métodos formais, além de ser dividida em níveis, possui uma semântica que deve</p><p>ser considerada na escolha do modelo, pois cada uma delas caracteriza o modelo a ser</p><p>escolhido para sua funcionalidade.</p><p>O importante é pensar em escolher um modelo de métodos formais para trabalhar e os</p><p>resultados obtidos. Se a utilização de métodos formais para caracterizar um sistema e torná-lo</p><p>mais seguro é importante, independente de qual será escolhido, é importante essa utilização.</p><p>Existem alguns modelos de métodos formais a se considerar: Máquina de estado Abstrata</p><p>(ASM), Método B, Modelo de ator, RAISE, Notação Z, entre outros.</p><p>Considerando o método formal em um processo de software baseado em plano, é importante</p><p>entender o conceito de processos e as atividades desse processo. Normalmente, as</p><p>especi�cações, modelagem de dados, desenvolvimento de interface, determinando o modelo de</p><p>desenvolvimento de software são as atividades consideradas nesse processo baseado em plano.</p><p>Dessa forma, quando se fala em modelos de processos dirigidos a planos, é considerado o</p><p>planejamento efetivo de todas as atividades citadas anteriormente. Antes mesmo de começar o</p><p>projeto e todas as atividades do processo, são medidas com relação ao plano estabelecido</p><p>(PRESSMAN, 2016).</p><p>Dependendo do modelo de desenvolvimento de software escolhido, essa especi�cação pode ser</p><p>mais fácil ou mais difícil de adaptação. No modelo incremental, por exemplo, é mais fácil</p><p>modi�car o processo para as alterações nos requisitos dos clientes.</p><p>Os modelos ágeis são mais fáceis para adaptação com relação aos métodos formais em um</p><p>processo de software baseado em plano, pois o ajuste é mais simples devido à forma como são</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>trabalhados os modelos ágeis. Mas não existe modelo de desenvolvimento certo ou errado, mas</p><p>sim aquele que se adapta melhor à empresa em questão.</p><p>Projeto de arquitetura de software e conceito de sistemas con�áveis</p><p>Para compreender o projeto da arquitetura, é necessário compreender o que é a arquitetura de</p><p>um software e seus padrões. Um padrão de arquitetura pode ser de�nido como um conjunto de</p><p>decisões de arquitetura aplicáveis em um problema de design recorrente. Os padrões de</p><p>arquitetura são de alto nível, usados para especi�car a estrutura fundamental do projeto. Um</p><p>padrão é sempre uma abstração, ou seja, apesar de de�nir alguns critérios, pode ser</p><p>implementado em diversos sistemas de formas diferentes (PRESSMAN, 2016).</p><p>Quando se pensa em projetar um software, os padrões existentes são:</p><p>Layers (Camadas): grandes sistemas devem ser compostos em partes, de forma hierárquica,</p><p>assim, cada camada ou layer deve prover um serviço para uma outra camada, sendo o MVC</p><p>(Model, View e Control) um dos principais exemplos de arquitetura em camadas, porém não é o</p><p>único. Nesse ponto, devemos analisar o impacto da segurança entre a comunicação das</p><p>camadas, ao se adotar tal modelo. Como ponto positivo, tem-se o particionamento de problemas</p><p>complexos e a facilidade de evolução individual dos serviços, permitindo alto reuso das</p><p>camadas. Além disso, tem como propriedades a alta coesão e o baixo acoplamento. Do ponto de</p><p>vista de segurança, os detalhes de cada camada são escondidos, podendo ser garantida a</p><p>segurança individual da camada; além disso, as camadas podem ser expandidas ou integradas a</p><p>outras. Porém, deve-se cuidar do desempenho, se esse foi um critério essencial de segurança do</p><p>sistema, principalmente se o sistema tiver muitas camadas (PRESSMAN, 2016).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Pipe e �lter: estilo de arquitetura menos empregado em sistemas comerciais, porém usado em</p><p>sistemas de transformação de texto; por exemplo, os comandos do Unix (Linux) empregam o</p><p>modelo pipe. Tal estilo não é empregado, normalmente, para sistemas com interação com</p><p>pessoas, porém é muito útil para processamento de grande volume de texto. Como</p><p>desvantagem, o tratamento de erros é o principal problema dessa arquitetura.</p><p>Event-Driven: é um modelo de arquitetura que atua sobre eventos para disparo de ação,</p><p>empregado em sistemas de IoT, por exemplo. Tal modelo é escalonável e permite adoção em</p><p>sistemas grá�cos, por exemplo, em que um evento dispara uma ação. Como pontos negativos</p><p>estão a relação entre o disparador de evento e o código que executa o evento, que pode não</p><p>responder, não havendo uma garantia de funcionamento.</p><p>Client-Server: o modelo Cliente/Servidor é provavelmente o mais adotado, surgindo na década de</p><p>1980, com os microcomputadores, inicialmente sendo um substituto para os sistemas</p><p>centralizados que eram adotados nos mainframes, sendo os clientes inicialmente pesados.</p><p>Porém, com a evolução e com o surgimento da Internet, na década de 1990, o modelo evoluiu</p><p>para os clientes leves, dando origem aos sistemas Web, amplamente utilizados, em que um</p><p>usuário pode, por meio de um cliente (navegador) acessar</p><p>uma aplicação em um servidor (web</p><p>server). Tal modelo deu origem, por exemplo, ao Software como Serviço (SaaS), porém requer</p><p>cuidados para garantir a segurança de comunicação entre cliente e servidor, garantir a</p><p>disponibilidade, a performance, entre outros.</p><p>Centralizado: o modelo centralizado teve origem nos mainframes, sendo adotado desde então,</p><p>perdendo espaço para o modelo cliente servidor. Normalmente, o modelo centralizado divide-se</p><p>em Call Return, que é um modelo hierárquico de funções e procedimentos que, com base em</p><p>uma chamada, executa um conjunto de funcionalidades em uma determinada hierarquia para dar</p><p>uma resposta, sendo parte de um sistema sequencial. Um modelo controlador em que há um</p><p>controlador de processamento para realizar funcionalidades. A desvantagem é a manutenção e a</p><p>evolução do sistema que se torna complexa.</p><p>Microkernel: estilo de arquitetura usado em alguns sistemas operacionais, tendo como ponto</p><p>positivo a adaptação facilitada dos requisitos, visto que atua de forma a ter uma parte mínima</p><p>funcional e as demais partes em camadas externas. Além de sistemas operacionais, alguns</p><p>sistemas �nanceiros mais antigos adotam essa arquitetura.</p><p>Middleware: padrão adotado quando se deseja ter interação entre aplicações que estão em</p><p>plataformas heterogêneas, como sistemas em mainframe desenvolvidos em Cobol</p><p>comunicando-se com aplicações Web; nesse contexto um, Middleware pode estar realizando a</p><p>comunicação e controlando os dados entre as duas aplicações, funcionando como mais uma</p><p>camada da aplicação.</p><p>Esses são apenas um conjunto de padrões, há outros disponíveis e podem surgir novos. Com</p><p>base nos padrões apresentados, é possível projetar sistemas, pensando no padrão a ser utilizado</p><p>e nos requisitos de segurança de cada um dos padrões.</p><p>Ligando o padrão Normas Leis para atender às necessidades dos usuários, pode-se notar que</p><p>desenvolver a arquitetura de um software é uma tarefa complexa, com diversas decisões, pois,</p><p>além de re�etir a estrutura do software, é necessário considerar as tecnologias e as</p><p>dependências para o seu desenvolvimento.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Videoaula: projeto de arquitetura de software e conceito de sistemas</p><p>con�áveis</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre o projeto de arquitetura de software e conceito de sistemas</p><p>con�áveis.</p><p>Padrões de desenvolvimento prático de uma arquitetura de software de</p><p>sistemas con�áveis</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Entre os padrões apresentados, a junção do padrão em camadas e o cliente/server vem sendo o</p><p>mais utilizado, visto que é possível realizar testes em cada camada, além de permitir que clientes</p><p>tenham acesso a diversos servidores. Assim, surgiu nos últimos anos a arquitetura orientada a</p><p>serviços, em que um software funciona como um conjunto de serviços. Os microsserviços são o</p><p>resultado da adoção maciça de computação em nuvem e da necessidade de integração entre</p><p>diversos sistemas (NEWMAN, 2015).</p><p>Conforme Newman (2015), o paradigma de arquitetura de microsserviços pode ser considerado</p><p>uma abordagem para desenvolver uma aplicação como um conjunto de pequenos serviços,</p><p>sendo que cada um funciona como um processo isolado e se comunica entre eles, por meio de</p><p>mecanismos leves. Assim, um microsserviço é uma pequena aplicação que executa uma única</p><p>tarefa, sendo um pequeno componente, fácil de testar e de substituir, além de ser independente,</p><p>permitindo a escalabilidade em nível de infraestrutura, pois é implementado em ambientes</p><p>isolados, denominados containers, pode estar distribuído e escalonado, visto que cada contêiner</p><p>pode ser ampliado e reduzido.</p><p>Embora os microsserviços possam ser vistos como uma evolução da SOA, eles são</p><p>inerentemente diferentes quanto aos aspectos de compartilhamento e reutilização. SOA é</p><p>construído sobre o conceito de reutilização: um estilo de arquitetura compartilhável, enquanto a</p><p>arquitetura de microsserviços é construída sobre o conceito de um estilo de arquitetura de</p><p>compartilhamento tão pequeno quanto possível. Dado que a reutilização de serviços tem sido</p><p>frequentemente menor que o esperado, em vez de reutilizar microsserviços existentes para</p><p>novas tarefas ou casos de uso, eles devem ser micro o su�ciente para permitir rapidamente</p><p>desenvolver um novo que possa coexistir, evoluir ou substituir o anterior, de acordo com as</p><p>necessidades de negócio. Para a questão de segurança, os microsserviços têm um papel</p><p>importante no futuro da arquitetura de soluções empresariais, visto que pode ser desenvolvida</p><p>mais rapidamente, podemos buscar validar e garantir a segurança de forma individual, além</p><p>disso, é mais fácil de�nir objetivos e requisitos de pequenos módulos de sistemas. Além disso,</p><p>essa arquitetura traz a chamada resiliência, facilitando a migração e mudanças rápidas, além da</p><p>evolução do sistema.</p><p>Por que adotar a arquitetura de microsserviços, em desenvolvimento atual que vise segurança?</p><p>A arquitetura de microsserviços foi projetada como solução a problemas encontrados na</p><p>arquitetura monolítica como alto acoplamento, manutenção árdua, processo de compilação lento</p><p>e aumento do esforço de desenvolvimento (NEWMAN, 2015). Tal arquitetura é de�nida como um</p><p>conjunto de boas práticas que abrange características, como DevOps, heterogeneidade</p><p>tecnológica, escalabilidade, serviços autônomos, conteinerização, entre outros. Os</p><p>microsserviços podem ser de�nidos como pequenos, independentes e autônomos, capazes de</p><p>realizar tarefas que devem ser de�nidas de forma e�ciente por meio de processos individuais.</p><p>Neste contexto, como projetar um sistema con�ável com a arquitetura de microsserviços?</p><p>De�na o contexto do serviço, contextos diferentes devem ser serviços diferentes, de�na o</p><p>objetivo e o os riscos, conforme já apontado; porém, nesse caso, ao invés de de�nir um objetivo</p><p>para o sistema como um todo, serão de�nidos os objetivos e os riscos ligados ao serviço</p><p>identi�cado, de�na os pontos de veri�cação dos serviços e as normas/leis necessárias para o</p><p>perfeito funcionamento, crie uma lista/planilha com os padrões a serem adotados em cada</p><p>microsserviço e elabore um checklist, se possível, com os pontos de veri�cação do sistema e, ao</p><p>�nal da implementação, valide cada item (NEWMAN, 2015).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Lembrando que, como boa prática, os microsserviços não devem estar em um mesmo ambiente,</p><p>a adoção de containers facilita o controle do acesso aos recursos, melhorando a segurança,</p><p>além disso, cada container funciona de forma independente, porém não há uma camada de</p><p>virtualização, sendo um processo de inicialização muito mais rápido, não havendo uma</p><p>sobrecarga no uso do hardware, melhorando, assim, a performance geral do sistema. Porém,</p><p>deve-se tomar cuidado com relação à comunicação entre os serviços, ampliação dos</p><p>microsserviços de forma desordenada e o controle geral dos recursos, sendo essencial o</p><p>monitoramento da aplicação. Surgem, então, diversas ferramentas que permitem a</p><p>observabilidade, que é basicamente um monitoramento preditivo do sistema visando garantir o</p><p>seu perfeito funcionamento e o atendimento dos critérios de disponibilidade do sistema.</p><p>_____</p><p>� Assimile</p><p>Os microsserviços são aplicações pequenas, que executam tarefas únicas, um pequeno</p><p>componente, que pode ser modi�cado ou substituído facilmente.</p><p>_____</p><p>� Re�ita</p><p>Uma Startup que não possui recursos para implantar um grande sistema e deve ser ágil nas</p><p>entregas pode adotar essa arquitetura visando a facilidade do desenvolvimento, bem como a</p><p>garantia de que ele pode ser substituído sem grandes impactos para os negócios. Assim, é fácil</p><p>notar o motivo que levou empresas, como a Net�ix, SoundCloud e outras, a adotarem esse</p><p>modelo.</p><p>_____</p><p>� Exempli�cando</p><p>Implementando um microsserviço</p><p>1. De�na um contexto</p><p>O contexto auxilia no entendimento de um microsserviço, visto que um</p><p>das aplicações que utilizaremos nos próximos anos. Fique atento aos próximos</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>conteúdos e lembre-se de que, com grandes poderes, vêm grandes responsabilidades.</p><p>A importância da segurança em desenvolvimento de software</p><p>A�nal, por que segurança em desenvolvimento de software é tão importante?</p><p>Um sistema mal projetado e mal desenhado pode comprometer a funcionalidade das aplicações</p><p>para o usuário. A necessidade de ter um sistema desenvolvido dentro de um modelo de</p><p>engenharia de software é importante para que se respeite cada uma das fases do ciclo de</p><p>desenvolvimento escolhido, independentemente de qual seja, pois, além de garantir a qualidade</p><p>do software que será entregue, precisamos garantir também que ele tenha validada a segurança</p><p>durante todas etapas de desenvolvimento, desde o levantamento de requisitos, passando pela</p><p>implementação e pelos testes até a fase de implantação (PRESSMAN; MAXIM, 2016).</p><p>Um sistema desenvolvido fora de um modelo seguro pode permitir vulnerabilidades e causar</p><p>prejuízos irreparáveis. Um único ataque pode custar até milhões de reais a uma instituição e os</p><p>prejuízos podem ir muito além do �nanceiro para a empresa. Esses ataques podem atingir tanto</p><p>a vida �nanceira dos usuários quanto a privacidade deles. Sistemas vulneráveis são prejudiciais à</p><p>reputação de uma empresa e afetam negativamente a con�ança do usuário em relação a esses</p><p>sistemas, gerando possíveis perdas de usuários e de clientes e, consequentemente, de receita</p><p>(RASTOGI; NYGARD, 2019). Por isso, é crucial que as vulnerabilidades sejam identi�cadas logo no</p><p>início do processo de desenvolvimento e que suas medidas e abordagens sejam exploradas,</p><p>reconhecidas e de�nidas durante a fase de design para �ns de controle e de mitigação de riscos.</p><p>Geralmente, as vulnerabilidades de sistemas não são consideradas no início do processo de</p><p>desenvolvimento de software, por isso é natural que passem despercebidas pela fase de design.</p><p>Entretanto, por serem identi�cadas tardiamente, os sistemas desenvolvidos �cam expostos a</p><p>diversos riscos. Por essa razão, considerar mapear e explorar as vulnerabilidades desde o início</p><p>do SDLC pode mitigar signi�cativamente os riscos futuros. Para conseguir identi�car com</p><p>sucesso as vulnerabilidades em softwares, é necessário mais do que experiência em</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>desenvolvimento, é preciso que o pro�ssional tenha conhecimentos especializados em</p><p>segurança e entenda do negócio no qual o sistema está inserido (RASTOGI; NYGARD, 2019).</p><p>Dentre os ataques mais comuns aos ambientes de tecnologia, estão os SQL Injections e os</p><p>Ransomwares. Os primeiros são um dos tipos mais antigos de ataque a sistemas de informação</p><p>e utilizam a inserção de código SQL em campos de formulário que não possuem a proteção</p><p>necessária; já os últimos começaram e expandiram há menos tempo. Em um ataque de</p><p>Ransomware, o hacker obtém acesso aos dados de uma pessoa ou de uma instituição e, por</p><p>meio de criptogra�a, sequestra esses dados para depois pedir um resgate em bitcoin. O advento</p><p>das criptomoedas facilitou esse tipo de operação ilícita uma vez que é quase impossível rastreá-</p><p>las.</p><p>Todo o ciclo de vida do desenvolvimento de um software é afetado pelas ações de segurança e</p><p>envolve todos os pro�ssionais que atuam no projeto (HOWARD; LIPNER, 2006).</p><p>_____</p><p>Vocabulário</p><p>Ativo de informação é qualquer bem de valor para uma empresa (por exemplo, servidores,</p><p>registros, documentos, etc.).</p><p>Ataque é um incidente de segurança decorrente de uma vulnerabilidade.</p><p>Vulnerabilidade é uma fragilidade ou ponto fraco de um ativo.</p><p>Ameaça é a possibilidade de um incidente visando afetar um ambiente, um sistema ou um ativo</p><p>de informação.</p><p>Probabilidade é a possibilidade de acontecer uma falha de segurança.</p><p>Impacto é a consequência de um ataque bem-sucedido.</p><p>Controle compõe os procedimentos executados para sanar as vulnerabilidades de um sistema de</p><p>informação (LYRA, 2015).</p><p>Videoaula: A segurança</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a segurança no desenvolvimento de software.</p><p>O sucesso com as vulnerabilidades e falhas de segurança</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Para obtermos sucesso com as vulnerabilidades e com as falhas de segurança, é importar reunir,</p><p>descrever e documentar os requisitos de segurança nas fases iniciais do SDLC, dando maior</p><p>ênfase na fase de levantamento de requisitos. Essa é uma temática amplamente abordada por</p><p>pesquisadores em toda a literatura cientí�ca (RASTOGI; NYGARD, 2019).</p><p>Para melhor entendimento dos momentos em que utilizaremos técnicas de segurança no</p><p>desenvolvimento de software, precisamos compreender o papel da engenharia de software e dos</p><p>processos de desenvolvimento de software. Quando utilizamos esses processos de maneira</p><p>meticulosa, conseguimos garantir a qualidade do software e prever vários problemas.</p><p>Os modelos apresentados na Engenharia de Software são descritos com fases e processos, e</p><p>cada um deles tem aspectos de segurança e vistos a seguir, os quais devem ser considerados.</p><p>Uma das vantagens de se utilizar metodologia ágil, por exemplo, como modelo aplicado à</p><p>engenharia de software é o conceito de Fail Fast (PRESSMAN; MAXIM, 2016). Este diz respeito à</p><p>possibilidade de “falhar cedo”, a qual consiste em, quanto mais cedo no ciclo de vida de</p><p>desenvolvimento de software conseguirmos identi�car os problemas de qualidade e de</p><p>segurança, mais tempo e assertividade teremos para resolvê-los.</p><p>A �m de proteger as informações, a Segurança da Informação faz uso do conceito dos três</p><p>pilares. São eles: disponibilidade, integridade e con�dencialidade.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Os três pilares da Segurança da Informação. Fonte: Matsunaga (2018, [s. p.]).</p><p>Veja a seguir o que signi�cam cada um deles:</p><p>A con�dencialidade deve garantir o acesso à informação somente às pessoas autorizadas,</p><p>ou seja, a informação não pode estar disponível ou ser revelada a usuários e/ou a</p><p>processos não autorizados. Para tanto, desenvolver um controle de acesso e�ciente e</p><p>adequado pode garantir a manutenção desse aspecto.</p><p>A integridade é o conceito que garante que a informação apresentada é verdadeira. Dessa</p><p>forma, os dados não podem ser alterados sem prévia autorização do administrador do</p><p>sistema. Se algum dado for alterado indevidamente, a informação será impactada e, por</p><p>consequência, �cará incorreta e comprometerá sua integridade, ou seja, sua verdade.</p><p>A disponibilidade é o conceito que garante que dados e sistemas somente poderão ser</p><p>acessados por usuários, processos e/ou sistemas autorizados quando a informação for</p><p>requisitada.</p><p>Em linhas gerais, essa tríade que compõe os pilares da Segurança da Informação estabelecem o</p><p>conceito de que uma mensagem somente deve ser conhecida por determinados usuários</p><p>(con�dencialidade), sem que a sua informação seja distorcida (integridade) e deve estar</p><p>acessível sempre que requisitada (disponibilidade).</p><p>Videoaula: Processos de segurança no desenvolvimento de software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os processos de segurança no desenvolvimento de software.</p><p>Mecanismos de controle de acesso dos usuários e processos</p><p>De forma complementar, podem ser criados mecanismos para controlar o acesso dos usuários e</p><p>dos processos às informações, considerando uma política de segurança e�ciente (MERKOW;</p><p>RAGHAVAN, 2010). São eles:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Mecanismos de controle. Fonte: elaborado pelo autor.</p><p>_____</p><p>� Assimile</p><p>Con�dencialidade tem o objetivo de garantir que a informação esteja protegida</p><p>sistema tem diversos</p><p>contextos; por exemplo, uma loja virtual tem o contexto do usuário, do estoque, entre outros,</p><p>cada um torna-se um microsserviço.</p><p>2. De�na os critérios de segurança necessários para o microsserviço.</p><p>3. Selecione a forma de implementar.</p><p>4. De�na um checklist para validar os requisitos</p><p>5. Implemente.</p><p>_____</p><p>Os microsserviços possibilitam a criação de sistemas mais disponíveis, com facilidade para seus</p><p>testes, e melhora a integração entre objetivo e entrega, sendo uma solução para novos modelos</p><p>de arquiteturas que têm a necessidade de serem mais �exíveis e que atendam a empresas que</p><p>não possuem uma estrutura que acomode uma arquitetura grande e complexa.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação problema.</p><p>Conclusão</p><p>Para identi�car o melhor modelo de arquitetura, é necessário entender o tamanho e</p><p>complexidade do ambiente e do sistema.</p><p>Considerando a clínica médica, microsserviços seriam melhor a utilização, pois os benefícios em</p><p>trabalhar com serviços menores são:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Modularidade, que torna o sistema mais fácil de entender, entender os requisitos, bem</p><p>como o desenvolvimento, independente da linguagem e plataforma escolhida.</p><p>Escalabilidade, onde os microsserviços são implantados e executados independente de</p><p>outros sistemas, não dependem entre si e podem ser melhorados separadamente.</p><p>Integração, pois a solução de arquitetura com microsserviços consegue integrar melhor</p><p>sistemas legados, uma oportunidade de atualizar os sistemas que permanecem no</p><p>ambiente.</p><p>Além de trabalhar com sistemas distribuídos, permite pequenas equipes de desenvolvimento,</p><p>coexistindo e trabalhando de forma autônoma e gerenciável, facilitando o processo de integração</p><p>e entrega contínua.</p><p>Os requisitos funcionais desse sistema são aqueles que fazem parte do sistema e tratam</p><p>diretamente da funcionalidade, como paciente, nome do médico, doenças, entre outros.</p><p>E os requisitos não funcionais são aqueles que não estão diretamente envolvidos com o</p><p>funcionamento do sistema.</p><p>Considerando métodos formais, a proposta é manter-se no nível 0 ou nível 1, pois é importante</p><p>poder identi�car na elaboração do sistema, além do levantamento de requisitos e suas</p><p>funcionalidades, a veri�cação e validação, de forma a desenvolver um sistema mais seguro,</p><p>utilizando métodos formais. O uso da veri�cação e validação permitem trabalhar com</p><p>re�namento e síntese no desenvolvimento, permitindo maior segurança e con�ança no</p><p>desenvolvimento.</p><p>Roteiro de aula prática</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula práitca!</p><p>Referências</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE+LABEL/rap/seg_eng_sof/manual_instalacao_+IntelliJ_IDEA_Wireshark.pdf</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/seg_eng_sof/U2A5.pdf</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>BARRETO, J. dos S.; ZANIN, A.; MORAIS, I. S. de; VETORAZZO, A. de S. Fundamentos de</p><p>segurança da informação. Porto Alegre: SAGAH, 2018. Disponível em: https://bit.ly/3l6gE0w.</p><p>Acesso em: 23 jan. 2022.</p><p>Dijkstra, E. W.A Discipline of Programming. Englewood Cliffs, New Jersey, EUA: Prentice Hall,</p><p>1976.</p><p>InfoQ. Arquitetura e Design. Guias sobre arquitetura e design. Disponível em:</p><p>https://bit.ly/3htv0Hk. Acesso em: 23 jan. 2022.</p><p>ISO – ISO/IEC 25010:2011. Disponível em: https://www.iso.org/standard/35733.html. Acesso em:</p><p>23 jan. 2022.</p><p>KIM, D.; SOLOMON, M. G. Fundamentos de Segurança de Sistemas de Informação. São Paulo:</p><p>LTC, 2014. Disponível em: https://bit.ly/3k2aNu0. Acesso em: 23 jan. 2022.</p><p>KIM, D.; SOLOMON, M. G. Fundamentos de Segurança de Sistemas de Informação. São Paulo:</p><p>LTC, 2014. Disponível em: https://bit.ly/3k2aNu0. Acesso em: 23 jan. 2022.</p><p>KIM, D.; SOLOMON, M. G. Fundamentos de Segurança de Sistemas de Informação. São Paulo:</p><p>LTC, 2014. Disponível em: https://bit.ly/3no1uXg. Acesso em: 23 jan. 2022.</p><p>NEWMAN, S. Building Microservices – Projetando Sistemas Finos. Sebastopol, Califórnia, EUA:</p><p>O'Reilly, 2015.</p><p>PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 8. ed.</p><p>Porto Alegre: AMGH, 2016. Disponível em: https://bit.ly/3BXtmp6. Acesso em: 23 jan. 2022.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 8. ed.</p><p>Porto Alegre: AMGH, 2016. Disponível em: https://bit.ly/2XbtsdG. Acesso em: 23 jan. 2022.</p><p>PRESSMAN, R.; MAXIM, B. Engenharia de Software. 8th Edition. Porto Alegre: AMGH, 2016.</p><p>Disponível em: https://bit.ly/3lcylLS. Acesso em: 23 jan. 2022.</p><p>REINEHR, Sheila. Engenharia de requisitos - Porto Alegre : SAGAH, 2020. Disponível em</p><p>https://bit.ly/3lku0pZ. Acesso em: 23 jan. 2022.</p><p>ZENKER, A. Arquitetura de Sistemas. Disponível em: https://bit.ly/397P9xO. Acesso em: 23 jan.</p><p>2022.</p><p>,</p><p>Unidade 3</p><p>Segurança na codi�cação, implementação e manutenção dos sistemas</p><p>Aula 1</p><p>Fundamentos de codi�cação e implementação de sistemas seguro</p><p>Introdução da Unidade</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Objetivos da Unidade</p><p>Ao longo desta Unidade, você irá:</p><p>esclarecer os conceitos de segurança na codi�cação;</p><p>aplicar os conceitos de segurança e permissões de acesso;</p><p>analisar a implementação e manutenção dos sistemas.</p><p>Introdução da Unidade</p><p>Prezado estudante,</p><p>O uso da segurança na engenharia de software e no desenvolvimento de sistemas e de</p><p>aplicativos não acompanha os números de perdas por vulnerabilidades devido ao mal</p><p>funcionamento de uma aplicação concebida e desenvolvida sem nenhum processo seguro,</p><p>resultando em um sistema frágil.</p><p>A abordagem de desenvolvimento seguro, no processo de engenharia de software, não diz</p><p>respeito apenas a codi�car um sistema prevendo possíveis falhas. É importante que todo o</p><p>ambiente físico e virtual de desenvolvimento utilize ferramentas que garantam um</p><p>funcionamento seguro para todos, inclusive no processo de construção de uma aplicação, no</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>caso, no processo de desenvolvimento de sistemas, desde o controle de acesso ao prédio de</p><p>uma empresa até a utilização de Redes Privadas Virtuais (VPN).</p><p>A não utilização de boas práticas e de procedimentos no processo de engenharia de software</p><p>pode levar à entrada de uma pessoa não autorizada ao ambiente de trabalho por meio de</p><p>sistemas construídos sem a preocupação em ser um sistema seguro ou mesmo uma invasão ao</p><p>ambiente de desenvolvimento com o intuito de extrair dados con�denciais ou sabotar um</p><p>projeto.</p><p>Os modelos utilizados e conhecidos para segurança em engenharia de software focam</p><p>principalmente na qualidade, sem a preocupação, de fato, com a segurança e com o modo de</p><p>aplicá-la. Como esses modelos de engenharia de software já estão bem estabelecidos e são</p><p>muito e�cientes para o que se propõem, iremos trabalhá-los com foco na segurança, esmiuçando</p><p>as fases e práticas para entendermos melhor onde e como adotar as técnicas de</p><p>desenvolvimento de software seguro.</p><p>Nesta unidade serão apresentados os princípios de codi�cação segura, o uso da cartilha</p><p>proposta no Centro de Estudos para Resposta e Tratamento de Incidentes em Computadores</p><p>(CERT), os cuidados com a codi�cação, para que ela seja o mais segura possível, e a</p><p>programação defensiva. Entenderemos, ainda, como é o processo de implementação de</p><p>codi�cação segura e a proteção de dados no desenvolvimento de sistemas, bem como</p><p>processos criptográ�cos.</p><p>Nesta aula, veremos exemplos de códigos seguros e criptografados, porém o código seguro com</p><p>criptogra�a será detalhado somente nas aulas mais à frente. Nesta unidade veremos também o</p><p>conceito de uso de segurança na elaboração de sistemas, a importância do processo de</p><p>desenvolvimento seguro e os modelos de engenharia de software.</p><p>E, por �m, os princípios de codi�cação segura em um ambiente web, sobre os quais, por se</p><p>tratarem de internet, não possuímos o controle e, então, existe a necessidade de um</p><p>desenvolvimento seguro na codi�cação, o que se torna importante e imprescindível.</p><p>Bons estudos!</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, estudaremos os conceitos de codi�cação segura em ambientes computacionais bem</p><p>como no ambiente web.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>analisar os princípios de codi�cação segura;</p><p>examinar os fundamentos de criptogra�a e proteção de dados;</p><p>esclarecer a programação defensiva.</p><p>Situação-problema</p><p>O objetivo desta aula é apresentar os conceitos de codi�cação segura em ambientes</p><p>computacionais bem como no ambiente web; entender a importância do desenvolvimento</p><p>seguro e como proceder para implantar e manter modelos seguros de desenvolvimento,</p><p>utilizando a cartilha CERT e suas recomendações.</p><p>Na sequência, entenderemos um pouco mais sobre os princípios da segurança da informação, os</p><p>quais são utilizados e aplicados na constituição das soluções digitais, além de aprendermos</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>sobre a importância da utilização de boas práticas de implementação de código e de</p><p>programação defensiva. Por �m, conheceremos os principais tipos de criptogra�a.</p><p>Dominar esses conceitos, além de fundamental para a compreensão do conteúdo deste livro,</p><p>também é de suma importância para o mercado de trabalho, considerando que as competências</p><p>ligadas à segurança dos dados das empresas são cada vez mais exigidas em grande parte das</p><p>pro�ssões.</p><p>Para quem trabalha ou deseja trabalhar com a área de engenharia e desenvolvimento de</p><p>software de forma direta ou indireta, os conceitos sobre desenvolvimento seguro aqui</p><p>apresentados farão parte de suas atividades pro�ssionais diárias. Dessa forma, torna-se</p><p>imprescindível que estejam bem compreendidos esses conceitos como básicos para se trabalhar</p><p>com elaboração de código em ambiente seguro e de forma segura.</p><p>Você trabalha em uma corretora de valores, com cerca de 100 funcionários e clientes que</p><p>investem no mercado �nanceiro desde R$ 1.000,00 até quantias que chegam a milhares de reais.</p><p>Devido à importância dessa empresa no cenário econômico e à necessidade legal de que</p><p>suporte a segurança dos investimentos de seus clientes, ela está cada vez mais investindo em</p><p>tecnologia para garantir essa segurança, mantendo a con�dencialidade, a integridade e a</p><p>disponibilidade dos recursos de infraestrutura e dos sistemas que fazem a operação da empresa.</p><p>Entendendo que, para se tornar mais competitiva e atraente a �m de que mais clientes possam</p><p>negociar papéis com ela, a corretora decidiu focar seu investimento no desenvolvimento de um</p><p>sistema seguro.</p><p>Para isso, contrataram pessoas que conhecem desenvolvimento seguro, utilização da cartilha da</p><p>CERT e desenvolvimento com criptogra�a para ambiente web e você faz parte dessa equipe</p><p>recém-contratada para alavancar a área de TI e conseguir desenvolver um sistema seguro e</p><p>“performático”.</p><p>Mesmo investindo em tecnologia, os diretores são conservadores e temem que, embora</p><p>automatizem os processos e os sistemas com parcimônia, possam gerar uma solução com</p><p>alguns resultados que comprometam a segurança dos clientes e seu dinheiro.</p><p>Você é o desenvolvedor contratado nesse grupo de pessoas, especialista em programação</p><p>defensiva do setor de TI, trabalha no desenvolvimento de uma plataforma de negociação</p><p>eletrônica que permite aos operadores comprarem e venderem papéis de forma segura e que</p><p>garanta maior rentabilidade para seus clientes.</p><p>Dessa forma, mediante esse cenário, você deve propor uma solução para que o desenvolvimento</p><p>seja seguro e contemple as condições a serem consideradas nesse desenvolvimento a �m de</p><p>garantir que, mesmo os sistemas não sendo 100% seguros, sejam de�nidos requisitos mínimos</p><p>de segurança.</p><p>Bom trabalho!</p><p>Que comece a nossa jornada! Ótimo aprendizado.</p><p>Princípios de codi�cação segura CERT e programação defensiva</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O Centro de Estudos para Resposta e Tratamento de Incidentes em Computadores (CERT) é a</p><p>instituição responsável pela investigação de crimes que acontecem no campo digital, como</p><p>violação de dados e ataques cibernéticos.</p><p>Infelizmente, não há como evitar ações criminosas no ciberespaço, porém a partir do CERT e de</p><p>suas recomendações é possível detectar e solucionar problemas com mais facilidade e</p><p>agilidade.</p><p>Assim, a principal função dessa instituição é uni�car as informações de incidentes de segurança</p><p>com a colaboração de diversas entidades para informação, análise e solução de problemas</p><p>ocasionados (CERT, 2021).</p><p>O CERT disponibiliza materiais com recomendações para que os administradores das redes, os</p><p>gestores de tecnologia ou as pessoas responsáveis por questões de desenvolvimento, ou até</p><p>mesmo de infraestrutura nas empresas, consigam trabalhar com mais agilidade em casos de</p><p>incidentes.</p><p>Além disso, podem criar Grupos de Resposta a Incidentes de Segurança em Computadores</p><p>(CSIRTs); apoiar o trabalho com a Segurança da Informação para a Equipe de Funcionários</p><p>Técnicos (ISTS); incentivar e divulgar os Fundamentos da Segurança em Incidentes (FIH) e na</p><p>tratativa de Segurança Avançada de Incidentes para a Equipe de Funcionários Técnicos (AIH)</p><p>(CERT, 2021).</p><p>O CERT possui também uma cartilha com recomendações de melhores práticas, incentivando o</p><p>uso responsável da tecnologia e apoiando as empresas nas decisões de como criar mecanismos</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>de segurança e como mantê-los.</p><p>Essa cartilha traz recomendações para as empresas, como apresentado no quadro, para que os</p><p>administradores e os gestores possam tratar e cuidar de assuntos delicados que podem</p><p>comprometer o desenvolvimento e o uso de tecnologia e de internet pelos desenvolvedores, bem</p><p>como por outros usuários.</p><p>Além disso, o CERT de�ne aspectos como padrões de codi�cação segura para as linguagens C,</p><p>C++ e Java; propõe padrões internacionais e dá orientações sobre eles para codi�cação segura;</p><p>apoia-se no desenvolvimento de laboratório para avaliação de conformidade em codi�cação</p><p>segura; de�ne ferramentas de software que realizam análise estática de código, além do</p><p>processo de desenvolvimento de software seguro TSP-C (HOLANDA; FERNANDES, [2009-2011]).</p><p>O CERT não só determina as diretrizes de uso dos serviços de internet, mas também as</p><p>regulamentações que permeiam diversas tecnologias. O grupo recomenda formas de manter a</p><p>segurança das informações e dos incidentes relacionados ao uso da internet com a ajuda de</p><p>várias entidades com a proposta de solução dos problemas.</p><p>As empresas participam do CERT e incentivam o uso das normas propostas a �m de</p><p>proporcionar uma melhor padronização dos modelos do uso da tecnologia em um meio mais</p><p>seguro.</p><p>Mesmo com todo incentivo e com normas para regulamentar o uso de tecnologia, não existe</p><p>garantia de que não ocorrerão tentativas de invasões e de atitudes maliciosas, porém, mesmo</p><p>tendo que lidar com esses problemas, o CERT ajuda na detecção e na correção deles. O</p><p>conteúdo abordado na cartilha está em detalhes no quadro adiante.</p><p>Cartilha CERT (part 1). Fonte: adaptado de CERT (2021).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Cartilha CERT (part 2). Fonte: adaptado de CERT (2021).</p><p>Nessa cartilha é abordado o conceito de codi�cação segura e de criptogra�a e como proceder</p><p>para desenvolver de forma segura e levando em consideração alguns aspectos como</p><p>desenvolver código seguro e usar o conceito de criptogra�a. De acordo com a cartilha CERT, a</p><p>criptogra�a é a arte de escrever mensagens e códigos cifrados, os quais são utilizados como</p><p>mecanismo de codi�cação segura, protegendo as pessoas</p><p>de riscos do uso da internet (CERT,</p><p>2021).</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Código seguro. Fonte: elaborado pelo autor.</p><p>Videoaula: CERT</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre CERT.</p><p>Implementação de codi�cação segura e programação defensiva</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>A implementação de padrões de codi�cação no processo de desenvolvimento de um sistema</p><p>garante a produção de um código seguro, reduzindo falhas que podem vir a acontecer. Tais</p><p>padrões tendem a evitar a injeção de entradas maliciosas e de outros ataques. Nesse cenário, a</p><p>melhor estratégia é reforçar o uso das técnicas de programação defensiva e da codi�cação</p><p>segura.</p><p>Utilizar mais de uma linguagem de programação, compilar ou interpretar os códigos com o uso</p><p>de técnicas de programação defensiva são formas de resistir ao ataque hacker, di�cultando a</p><p>invasão ou a queda do sistema (HOLANDA; FERNANDES, [2009-2011]).</p><p>A forma mais comum de uso incorreto ou de ataque a sistemas se dá pela entrada, passando-se</p><p>dados maliciosos, ou por meio de interceptação do �uxo de execução, por exemplo tentando</p><p>alterar algum valor intermediário da aplicação. Como saída a esse problema, busca-se empregar</p><p>o padrão conhecido como programação defensiva (BRAZ, 2008).</p><p>O pilar da programação defensiva é a veri�cação do óbvio. Em qualquer ponto da execução,</p><p>deve-se sempre certi�car se todos os dados em mãos são válidos, mesmo que muitas dessas</p><p>veri�cações pareçam ingênuas. Dessa forma, a programação defensiva visa interromper o �uxo</p><p>da execução a qualquer momento que uma entrada inválida ou que um valor inesperado apareça</p><p>na aplicação.</p><p>Por exemplo, ao transferir fundos entre contas de um banco, deve-se veri�car a existência das</p><p>contas e seus fundos, tanto antes quanto depois. Em outras palavras, um programa defensivo</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>nunca assume que dados são válidos ou corretos, isso é sempre veri�cado por meio de</p><p>validações promovidas pelo código e, caso algo esteja errado, é emitido um erro.</p><p>Nesse contexto, a principal ferramenta utilizada por programadores são as asserções, ou</p><p>asserts: pequenos testes incluídos em métodos que validam se todas as suas condições foram</p><p>devidamente atendidas.</p><p>Asserções podem ser também chamadas de pré-condições, condições e pós-condições, a</p><p>depender se estão posicionadas no começo, no meio ou no �m de um método, respectivamente.</p><p>No pseudocódigo a seguir, é apresentado um exemplo de asserções em um contexto de</p><p>transferência bancária.</p><p>Código seguro com asserts. Fonte: elaborado pela autora.</p><p>Nesse exemplo, temos três pré-condições (o valor ser positivo e as contas existirem), uma</p><p>condição (a conta de origem ter fundos o su�ciente) e duas pós-condições (os fundos terem sido</p><p>subtraídos de uma conta e acrescidos na outra). Embora óbvias, essas condições visam</p><p>encontrar quaisquer sinais de inconsistência ou de adulteração, seja no começo, no meio ou no</p><p>�m da operação e podem abortá-la a qualquer momento caso necessário.</p><p>Hoje em dia, o conceito de asserções evoluiu para o que chamamos de estruturas de captura de</p><p>exceção. No exemplo anterior, cada veri�cação tentou revelar um caso excepcional do sistema e</p><p>cada um desses casos deve ser tratado, por exemplo, por meio da apresentação de uma tela de</p><p>erro ou de uma solicitação de correção de algum valor inserido.</p><p>Em linguagens como Java, asserções são implementadas como lançamentos de exceção e</p><p>estas podem ser capturadas pela estrutura try-catch, por exemplo:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Exemplo de uso do Try-catch. Fonte: elaborado pela autora.</p><p>Nesse exemplo, tenta-se abrir um arquivo chamado ‘arquivo.txt’. Caso seja encontrado, a</p><p>execução segue, do contrário, esse caso excepcional é “capturado” e transfere-se a execução</p><p>para o bloco catch. Embora similar a um if tradicional, a estrutura try-catch é fundamentalmente</p><p>diferente no sentido de que ela tenta executar uma ação (bloco try) que pode ser interrompida e</p><p>redirecionada para um �uxo alternativo (bloco catch). Assim, o exemplo de transferência</p><p>bancária anterior pode ser tratado da seguinte forma:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Exemplo de transferência bancária. Fonte: elaborado pela autora.</p><p>Nessa versão, temos o �uxo normal da operação (bloco try) e os �uxos alternativos (blocos</p><p>catch) para cada um dos casos excepcionais possíveis de acontecer. Dessa forma, é possível</p><p>que cada caso excepcional de uma operação seja tratado de forma diferenciada.</p><p>Conforme Holanda e Fernandes ([2009-2011]), asserções e estruturas de captura de exceção são</p><p>as principais ferramentas da programação defensiva. Contudo, além delas, existem algumas</p><p>recomendações gerais que devem ser seguidas para mitigar potenciais problemas futuros. Elas</p><p>são:</p><p>Simpli�car códigos: quanto maior a complexidade de um sistema, maior sua propensão</p><p>para erros e brechas de segurança. Nesse âmbito, deve-se sempre optar por algoritmos</p><p>mais simples e por arquiteturas mais enxutas, o que faz, muitas vezes, com que sejam</p><p>sacri�cados outros aspectos, como o desempenho da aplicação.</p><p>Padronizar entradas e saídas: é de suma importância que valores corretos de entrada e de</p><p>saída de funções sejam documentados em detalhes, por exemplo, é preciso registrar se um</p><p>sistema trabalha em centímetros ou em metros. Em caso de saídas em formato XML ou</p><p>JSON, é interessante que seja disponibilizado o schema de cada entrada/saída.</p><p>Testes automáticos: de maneira geral, para cada caso excepcional do sistema, deve haver</p><p>um teste que detecte se uma entrada válida é aceita e se uma entrada inválida é recusada.</p><p>Auditar o código: consiste na veri�cação da segurança do código através de ferramentas</p><p>como a lista do OWASP de scanners de vulnerabilidades.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Videoaula: implementação de codi�cação segura</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a implementação de codi�cação segura.</p><p>Conceitos de codi�cação segura em ambientes WEB</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Os incidentes de segurança, como vazamentos de dados, só podiam ocorrer �sicamente, via</p><p>disquetes ou outros meios de transporte de dados, até há bem pouco tempo. Isso mudou a partir</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>da criação da internet, fato que possibilitou o acesso aos dados de qualquer parte do mundo,</p><p>trazendo consequências positivas, como a praticidade no acesso a informações, e negativas,</p><p>como os ataques no ciberespaço. Um grande exemplo disso é que, durante o ano de 2020,</p><p>aconteceram mais de 8,4 milhões de ciberataques só no Brasil (FORTINET, 2021).</p><p>Um simples site é, na realidade, uma rede complexa de máquinas servidoras, de bancos de dados</p><p>e de serviços externos, como provedores de pagamento, frete, etc. Nesse contexto, sistemas</p><p>podem ser invadidos tanto por sua interface externa (entradas da aplicação) quanto por entradas</p><p>internas (explorando a comunicação entre seus subsistemas).</p><p>Os sistemas web e as aplicações que utilizam a internet como meio de comunicação exigem</p><p>cuidados especí�cos com relação à segurança, uma vez que principalmente as aplicações usam</p><p>padrões comuns de segurança, o que fragiliza o ambiente.</p><p>Essas aplicações web são de�nidas em três camadas, as quais são: estações de trabalho (ou até</p><p>mesmo dispositivos móveis), servidores e base de dados.</p><p>Cada estação possui, de preferência, um navegador web (ou até dois) que envia e recebe os</p><p>dados do servidor web. Como apresentado na �gura, esse servidor, que estará na nuvem, recebe</p><p>as requisições bem como os dados enviados pela estação de trabalho, faz o processamento e os</p><p>armazena</p><p>em um banco de dados a �m de guardá-los para eventual busca e recuperação.</p><p>Ambiente web. Fonte: Kong (2016, p. 267).</p><p>Em casos como este, em que a aplicação é atualizada em um servidor, ela está muito exposta e</p><p>deve ser implantada uma solução de segurança no servidor e no banco de dados.</p><p>As informações que trafegam nesse ambiente web estão muito desprotegidas e expostas a</p><p>ataques e a manipulações e alterações, pois esse navegador é padronizado e conhecido por</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>muitos. Dessa forma, um usuário com más intenções pode se apropriar das informações que são</p><p>trafegadas nessa troca.</p><p>A segurança em um sistema não é de fácil visualização e tampouco podemos mensurá-la de</p><p>forma simples ou quantitativa, por exemplo.</p><p>Essa aferição é medida do menor para o maior em uma escala que vai de 1 a 10, dividida em</p><p>graus. A �m de exempli�car isso, pode-se dizer que a proteção vai desde uma simples senha,</p><p>com validação de usuário e senha, até sistemas implantados para análise de vulnerabilidades</p><p>(que são os mais baixos na escala) até sistemas mais complexos com avaliação biométrica (os</p><p>que estão em mais alto grau na escala).</p><p>Conforme Kong (2016), as linguagens de programação para web possuem validações básicas,</p><p>mas não é possível con�ar somente nelas, pois não são su�cientes para validar as</p><p>vulnerabilidades no processo de desenvolvimento.</p><p>Sendo assim, é preciso veri�car sempre se o conteúdo que está sendo transmitido é válido,</p><p>considerando seu tamanho e formato, bem como os intervalos de transferências dessas</p><p>informações. É necessário também avaliar as entradas dessa aplicação, pois ela pode permitir e</p><p>receber informações maliciosas por meio do get, do post ou dos cookies. Não é possível con�ar</p><p>no navegador do lado do cliente, pois nem sempre ele está preparado para lidar com aplicações</p><p>maliciosas (KONG, 2016).</p><p>Além disso, é importante implantar veri�cadores de senhas que utilizam senhas fortes, que</p><p>peçam ao usuário para cadastrar senhas com caracteres especiais, letras, números, maiúsculas</p><p>e minúsculas.</p><p>Por outro lado, é preciso �car atento também para o fato de que a comunicação utilizando o</p><p>HTTP é completamente aberta. Com isso, é necessário utilizar o protocolo de comunicação</p><p>HTTPS para a transmissão segura dos dados da aplicação e mesmo assim não é su�ciente para</p><p>garantir a segurança na aplicação ou mesmo na base de dados.</p><p>Ainda, é importante certi�car-se de que na programação estão sendo utilizados recursos de</p><p>segurança no desenvolvimento seguro, pois nem sempre uma única forma é su�ciente para a</p><p>proteção da aplicação e da base de dados.</p><p>De acordo com Kong (2016), a combinação de mais recursos de proteção faz parte do</p><p>desenvolvimento seguro. Uma forma bastante utilizada na proteção de código é a programação</p><p>defensiva, a qual torna seu código mais interessante, seguro e com menos brechas para a</p><p>invasão desse ambiente.</p><p>Em um primeiro nível, utilizam-se as mesmas técnicas de programação defensiva que as usadas</p><p>em aplicações tradicionais.</p><p>Ou seja, deve-se validar toda entrada dada ao sistema, seja uma entrada externa (vinda de um</p><p>cliente), seja uma interna (vinda de uma máquina da solução). Dessa forma, é garantido um</p><p>primeiro nível de segurança para a aplicação.</p><p>Entretanto, a programação defensiva sozinha não é capaz de bloquear todas as formas de</p><p>ataque possíveis. Por exemplo, um agente malicioso pode contatar algum sistema interno da</p><p>aplicação de maneira válida, porém indevida, como solicitar o saldo de uma conta bancária à</p><p>qual ele não deveria ter acesso. Nesses casos, deve-se empregar autenticação e autorização, ou</p><p>seja, comprovar que o solicitante de alguma informação é quem diz ser e se tem direito de</p><p>acessá-la.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Embora autenticação e autorização também sejam importantes no mundo off-line, elas têm real</p><p>protagonismo no on-line. É por meio dessas técnicas que temos como, por exemplo, limitar o</p><p>acesso a bancos de dados e a serviços a apenas máquinas registradas do sistema e limitar o</p><p>acesso externo a dados sigilosos com base na identidade de quem solicita, mesmo tendo todos</p><p>esses elementos conectados à internet.</p><p>Para entender como é possível autenticar usuários de forma segura e con�ável, devemos</p><p>entender um pouco de criptogra�a.</p><p>Videoaula: conceitos de codi�cação segurança em ambientes WEB</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os conceitos de codi�cação segurança em ambientes WEB.</p><p>Fundamentos da criptogra�a e proteção de dados através da criptogra�a</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>De acordo com Rivest (1990), a criptogra�a consiste no estudo e na prática de técnicas de</p><p>codi�cação e de decodi�cação que têm o propósito de garantir uma comunicação segura na</p><p>presença de terceiros. Por exemplo, para autenticar um usuário via log in e senha, devemos ter</p><p>alguma forma de enviar essa informação à aplicação de maneira sigilosa (privada). Caso</p><p>contrário, um observador malicioso poderia interceptar essa informação e tomar conhecimento</p><p>da senha de um usuário.</p><p>A base de qualquer criptogra�a é um algoritmo e uma chave. Dada uma mensagem, o algoritmo</p><p>utiliza a chave para cifrá-la ou, dada uma cifra, o algoritmo utiliza a chave para decifrá-la. Por</p><p>exemplo, uma cifra por substituição consiste em trocar cada letra de uma mensagem por outra</p><p>letra do alfabeto, como mostrado a seguir:</p><p>ABCDEFGHIJKLMNOPQRSTUVXWYZ</p><p>TBSLZYVCRHUXNKQWEAPDIOGFJM</p><p>Nesse exemplo, a palavra CASA vira STAT, visto que A vira T, C vira S e S vira A. Para decodi�car</p><p>essa mensagem, basta realizar o inverso. T vira A, S vira C e A vira S. É importante perceber que,</p><p>nesse processo, a segurança está na chave, não no algoritmo. Qualquer pessoa pode conhecer o</p><p>método, porém, sem a chave original, é desa�ador decifrar a mensagem enviada. Um grande</p><p>exemplo disso é a Enigma, máquina de criptogra�a criada em 1918 e utilizada pela Alemanha</p><p>nazista durante a Segunda Guerra Mundial. Embora as forças aliadas tenham capturado vários</p><p>exemplares da máquina durante a guerra, estes não conseguiam decifrar nenhuma mensagem</p><p>alemã por não ter conhecimento da chave utilizada. Conhecimento adquirido só após vários anos</p><p>do con�ito.</p><p>Nos dias de hoje, praticamente todas as comunicações feitas na internet são criptografadas.</p><p>Basta perceber que o endereço de um website começa com “https”; o “s” indica que a</p><p>comunicação é feita pelo protocolo HTTP seguro. Dessa forma, toda comunicação feita entre</p><p>dois elementos da rede é privada entre eles e, portanto, incompreensível para observadores</p><p>externos.</p><p>Quase a totalidade do volume de mensagens cifradas é feita com cifras simétricas, as quais são</p><p>como o exemplo dado anteriormente, cifra por substituição. Nele, ambas as partes devem ter</p><p>conhecimento da mesma chave para compreender e gerar a cifra. Embora poderosas, as cifras</p><p>simétricas têm um grande problema: como transferir a chave de forma segura? Em outras</p><p>palavras, como estabelecer a mesma chave nas duas máquinas de maneira con�ável?</p><p>Para responder a essa questão, foram inventadas as cifras assimétricas, em especial, o</p><p>algoritmo Rivest-Shamir-Adleman (RSA). Nelas existem duas chaves, uma pública e outra</p><p>privada. Esta nunca é enviada pela internet e aquela é exposta sem nenhuma proteção.</p><p>Nessa solução, a estratégia é que mensagens cifradas com a chave pública só são decifráveis</p><p>pela chave privada (que nunca saiu da máquina de origem), de modo que é aberto um canal de</p><p>comunicação unidirecional. Qualquer máquina na rede pode cifrar uma mensagem com a chave</p><p>pública de outra máquina e enviá-la de forma segura.</p><p>Em outras palavras, as cifras assimétricas dão aos usuários da rede um modo de outros usuários</p><p>os contatarem de maneira segura mesmo sem uma chave comum. Logo, funcionam como um</p><p>meio de iniciar uma conversa segura entre duas máquinas. Caso dois usuários tenham suas</p><p>chaves públicas disponíveis, é possível realizar a comunicação bidirecional, basta que um cifre</p><p>suas mensagens com a chave pública do outro.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Na prática, entretanto, essas chaves são utilizadas apenas para enviar chaves simétricas de</p><p>maneira con�dencial e, a partir desse ponto, realizar a comunicação utilizando cifras simétricas,</p><p>como o Advanced Encryption Standard (AES). Isso é feito por duas razões: chaves assimétricas</p><p>são vulneráveis em comunicações longas e custosas de executar, enquanto algoritmos</p><p>simétricos são bastante seguros e e�cientes.</p><p>_____</p><p>� Assimile</p><p>A diferença entre as criptogra�as simétrica e assimétrica é que os algoritmos das primeiras</p><p>fazem uso de uma única chave, enquanto que a encriptação assimétrica faz uso de duas chaves</p><p>diferentes, porém relacionadas. Tal distinção, embora aparentemente simples, aponta as</p><p>diferenças funcionais entre as duas técnicas de encriptação e as maneiras como são usadas.</p><p>_____</p><p>� Re�ita</p><p>Entenda as limitações da criptogra�a: ela permite que máquinas diferentes possam estabelecer</p><p>uma conexão segura para a troca de informações. Contudo, não garante que as informações</p><p>trocadas são corretas ou válidas, pois isso é tarefa da programação defensiva. Além disso, se um</p><p>agente malicioso obtiver acesso às chaves, a segurança desse canal estará comprometida.</p><p>_____</p><p>� Exempli�cando</p><p>Você já reparou que todas as redes sociais utilizam HTTPS? Isso signi�ca que sua comunicação</p><p>com a rede é protegida por criptogra�a. E já testou colocar um CEP errado ou seu nome no lugar</p><p>do e-mail em algum cadastro? Se o site informou que a informação é inválida, ele está</p><p>empregando técnicas defensivas.</p><p>_____</p><p>Até aqui estudamos a necessidade e a importância de usar conceitos de segurança no</p><p>desenvolvimento de sistemas e como desenvolver um código que seja seguro. A criptogra�a ou</p><p>as senhas em sistemas web, as quais precisam combinar números, letras e caracteres especiais,</p><p>não garantem a segurança. O caminho é utilizar mais de um recurso de segurança para tentar</p><p>assegurar que tanto ele quanto o ambiente onde está o sistema sejam minimamente seguros.</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Como especialista em desenvolvimento seguro, você sabe que, além de um código limpo, este</p><p>código deve ser desenvolvido considerando ambiente seguro, mas antes mesmo de começar o</p><p>desenvolvimento, é preciso de�nir quais são as soluções de segurança que atenderão a</p><p>necessidade da empresa em aspectos legais e que estarão aderentes ao ambiente de tecnologia</p><p>utilizado pela corretora.</p><p>Consulte a cartilha do CERT como forma de apoio a decisões a serem tomadas e também como</p><p>referência do que pode ser e�ciente para o desenvolvimento seguro e de�na, da lista:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Cartilha CERT. Fonte: adaptado de CERT (2021).</p><p>Após de�nir os requisitos para um desenvolvimento seguro, estabeleça uma política segura de</p><p>desenvolvimento que considere:</p><p>Sempre desenvolver código criptografado.</p><p>Utilizar HTTPS quando o sistema for utilizado em ambiente web.</p><p>Ter política de acesso ao sistema com senhas consideradas seguras, utilizando a</p><p>combinação de letras, números e caracteres especiais.</p><p>Proteger o acesso aos dados nos servidores com �rewall na entrada ou na saída da rede.</p><p>De�nir uma política de privacidade e divulgar o quanto possível para os usuários.</p><p>Manter-se atualizado em como desenvolver utilizando conceitos de programação segura.</p><p>Aula 2</p><p>Distribuição e manutenção de sistemas</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, vamos estudar elementos importantes relacionados ao desenvolvimento de software</p><p>seguro.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>analisar os princípios da arquitetura e design seguro;</p><p>apreciar técnicas de distribuição e atualização de software seguro;</p><p>esclarecer o conceito de manutenção de sistemas seguro.</p><p>Situação-problema</p><p>Estudante,</p><p>Nesta aula, trabalharemos elementos importantes relacionados ao desenvolvimento de software</p><p>seguro. Começaremos contextualizando a importância de se produzir um software que forneça</p><p>bons níveis de segurança, em seguida veremos dois modelos bastante difundidos para auxiliar</p><p>nas questões de segurança em projetos de software.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Após conhecer esses modelos você terá condições de repensar os aspectos de segurança no</p><p>ciclo de vida do software, além de ser capaz de identi�car elementos que possam auxiliar na</p><p>implementação de uma boa política de segurança bem como no processo de desenvolvimento</p><p>seguro. Na sequência, serão abordadas as características necessárias para garantia da</p><p>qualidade do software com base em um modelo conceituado desenvolvido pela International</p><p>Organization for Standardization (ISO) e pela International Electrotechnical Commission (IEC) e</p><p>suas aplicações.</p><p>Se você já trabalha com segurança ou com desenvolvimento de software, os conceitos</p><p>abordados nesta aula o ajudarão na caminhada pela busca de um mundo digital mais seguro,</p><p>entretanto, se ainda não está atuando na área, você terá informações que o farão compreender a</p><p>importância da segurança no mundo dos softwares e que o ajudarão a entrar neste segmento.</p><p>Você é um analista de sistemas que trabalha com desenvolvimento de sistemas seguros e foi</p><p>designado para prestar consultoria de segurança e melhoria de processos de desenvolvimento</p><p>em uma software house que desenvolve e mantém plataformas administrativas para gestão de</p><p>empresas na web.</p><p>Em um contato inicial com o gestor de desenvolvimento de software, você constata que a</p><p>empresa está há muito tempo tentando resolver problemas de segurança nas plataformas</p><p>desenvolvidas e, por mais que várias correções fossem implementadas, sempre eram</p><p>encontradas falhas na segurança. Você também identi�ca que existe uma rotatividade alta de</p><p>desenvolvedores na empresa, fazendo com que, ao longo do tempo, as funcionalidades</p><p>implementadas nas plataformas fossem desenvolvidas sem padronização de código.</p><p>Enquanto a conversa para a coleta de mais informações segue, o gestor informa que não existe</p><p>uma de�nição clara dos processos de produção/manutenção dos softwares desenvolvidos e</p><p>alega que tudo é feito conforme a necessidade repassada pelos clientes e que, em determinados</p><p>casos, novas funcionalidades e/ou ajustes são testados diretamente pelo cliente no ambiente de</p><p>produção.</p><p>Quando questionado sobre quais são as tecnologias utilizadas e as características dos</p><p>ambientes de desenvolvimento e de hospedagem das plataformas, o gestor repassa-lhe os</p><p>seguintes dados:</p><p>Tecnologias utilizadas no desenvolvimento: PHP versão 5.6 para o backend sem</p><p>frameworks, Javascript, CSS, HTML para o frontend.</p><p>SGBDs utilizados: MySQL versão 5 e PostgreSQL versão 7.4.</p><p>Hospedagem das plataformas realizada no servidor local da empresa em ambiente</p><p>Windows, sendo este servidor responsável por armazenar também o ambiente de</p><p>desenvolvimento.</p><p>Com base nessas informações e diante do que foi coletado referente a esses sistemas, você</p><p>deverá realizar o mapeamento das causas das falhas de segurança para, posteriormente, propor</p><p>melhorias tanto na parte de tecnologias quanto na parte de processos para a empresa.</p><p>Bons estudos!</p><p>Segurança da informação</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Estudante, a expressão “segurança da informação” tem sido utilizada em praticamente todos os</p><p>contextos e, de fato, essa expansão possui relevância, pois cada vez mais as informações são</p><p>geradas e estão armazenadas em meios digitais. Sabendo que os sistemas (softwares) são os</p><p>agentes digitalmente responsáveis pelo processamento e pelo armazenamento desse grande</p><p>volume de dados, é extremamente importante que sejam projetados, construídos e mantidos, de</p><p>forma que se apliquem critérios de segurança.</p><p>Apesar de um software existir apenas no contexto virtual, ele é considerado um produto, possui</p><p>uma sequência lógica em sua linha de produção, exige conhecimento técnico aprimorado</p><p>se essas estratégias estão sendo e�cazes.</p><p>A fase de projeto, que, em inglês, é de�nida como design, prevê a execução das atividades de</p><p>avaliação de ameaça, de requisitos de segurança e de arquitetura de segurança. Nessa fase, são</p><p>trabalhados aspectos importantes que tratam da identi�cação, da avaliação e da compreensão</p><p>das ameaças de segurança no projeto, o que torna possível, então, trabalhar com requisitos de</p><p>segurança para o software. Com isso, deve-se levar em consideração que ele pode tanto ser</p><p>desenvolvido pela própria equipe como ter partes de seus componentes terceirizados, ou pode</p><p>até mesmo ser totalmente terceirizado</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>MSDL e SMM. Fonte: elaborado pelo autor.</p><p>Cabe ressaltar que, para esses dois modelos, foram abordados apenas os itens que vão até a</p><p>fase de design/projeto, pois, nesta aula, o contexto a ser trabalhado envolve apenas esses</p><p>aspectos.</p><p>Videoaula: distribuição e manutenção de sistemas</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a distribuição e manutenção de sistemas.</p><p>Riscos de segurança e arquitetura</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Com base no que foi exposto, é possível reunir conceitos importantes para formar um</p><p>conhecimento do ponto de partida para se desenvolver softwares seguros. É necessário</p><p>reconhecer que os riscos de segurança existem, assim como é extremamente importante manter</p><p>documentados esses riscos e as possíveis ações a serem tomadas.</p><p>Ao analisarmos os riscos de segurança que uma arquitetura de software possa oferecer,</p><p>podemos empregar o conceito de superfície de ataque.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Representação da superfície de ataque de um sistema.Fonte: elaborada pelo autor.</p><p>A superfície de ataque representa toda a estrutura necessária para que o software funcione,</p><p>incluindo o próprio software (interface com usuários, integrações com outros sistemas, entre</p><p>outros). Sendo assim, devemos considerar toda as possibilidades oferecidas para possíveis</p><p>ataques, seja na camada de banco de dados, seja na camada de visualização de dados ou na</p><p>troca de informações via Application Programming Interface (API) caso seja oferecida pelo</p><p>software, incluindo até mesmo as simples mensagens de erros que possam ser apresentadas</p><p>durante a execução do software.</p><p>Antes de pensar nos aspectos de segurança do ponto de vista da arquitetura, é necessária a</p><p>criação de uma cultura de segurança, tanto na equipe do projeto de software quanto nas</p><p>organizações em que ele será utilizado.</p><p>Do ponto de vista arquitetural, para que se possa diminuir uma superfície de ataque, é necessário</p><p>analisar alguns aspectos importantes durante a fase de design/arquitetura de um software:</p><p>Na escolha das tecnologias para o projeto, priorize as que estejam estáveis. Para</p><p>tecnologias opensource, veri�que se têm uma comunidade ativa e con�ável trabalhando na</p><p>evolução e na correção de bugs. Para tecnologias proprietárias, veri�que se é possível ter</p><p>acesso a novas versões, valores para atualização, suporte e correção de bugs.</p><p>Na modelagem lógica do software, dê preferência à utilização de padrões de projetos</p><p>consolidados (design patterns), pois, além de ganhar tempo na construção da solução,</p><p>existe a con�abilidade de que o padrão já foi testado e validado.</p><p>Caso seja necessário utilizar componentes de terceiros, como um componente para acesso</p><p>a banco de dados, garanta que a versão utilizada ofereça segurança su�ciente. Uma boa</p><p>estratégia é buscar, na documentação do componente, tópicos que abordam as falhas</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>corrigidas para se ter conhecimento dos problemas de segurança que já foram</p><p>solucionados na versão a ser utilizada.</p><p>Mantenha um repositório do projeto em um ambiente con�ável e com acesso restrito; é</p><p>importante também que esse ambiente forneça ferramentas de controle de alterações e</p><p>versionamento. Existem várias ferramentas opensource ou proprietárias disponíveis para</p><p>esse propósito: Git, Subversion, Mercurial, CVS, entre outras.</p><p>Seguindo o ciclo de vida do software na fase de entrega/distribuição para os seus usuários, que</p><p>também pode ser chamada de distribuição ou release, é possível aplicar protocolos de</p><p>segurança.</p><p>Holanda e Fernandes ([2009-2011]) a�rmam que, durante a fase de release (liberação), é</p><p>recomendável a produção de um plano de ação com a descrição de como serão as respostas da</p><p>equipe no tratamento de incidentes de segurança da informação.</p><p>Geralmente, em boa parte dos casos, os envolvidos no desenvolvimento de softwares não dão a</p><p>devida importância à elaboração de um plano de ação caso algum incidente de segurança</p><p>ocorra, o que afeta diretamente a forma de resposta, uma vez que, possivelmente, sem um plano</p><p>de ação, a resposta reativa nem sempre proveja uma solução e�caz para os problemas de</p><p>segurança encontrados.</p><p>O modelo MSDL recomenda que cada liberação de software sujeita aos requisitos do SDL inclua</p><p>um plano de resposta a incidentes. Mesmo os programas sem vulnerabilidades conhecidas no</p><p>momento da liberação podem estar sujeitos a novas ameaças que surgem com o tempo</p><p>(MICROSOFT, 2010).</p><p>Para a etapa de liberação, é possível aplicar as orientações descritas na fase de operações do</p><p>modelo SAMM. Nessa fase, assim como descrito no modelo MSDL, é proposto o monitoramento</p><p>e a criação de medidas de resposta para a ocorrência de incidentes de segurança.</p><p>Considerando as orientações propostas pelos dois modelos MSDL e SAMM, é possível adicionar</p><p>alguns pontos importantes para se trabalhar com a distribuição segura de software:</p><p>Priorize a criação de um ambiente onde seja possível trabalhar com o conceito de</p><p>integração contínua. Dessa forma, é possível manter o software sempre atualizado, além de</p><p>prover, de forma otimizada, atualizações que contenham correções de falhas.</p><p>Implemente mecanismos de veri�cações de credenciais no processo de atualização, pois</p><p>assim será possível garantir que somente as pessoas autorizadas poderão acessar as</p><p>atualizações disponíveis.</p><p>Forneça canais de comunicação e/ou tráfego de logs de erros/falhas do sistema, dessa</p><p>forma o tempo do ciclo (conhecimento da falha/erro, correção e distribuição de versão)</p><p>será otimizado.</p><p>Ao longo do tempo, é possível que um sistema deixe de corresponder às necessidades dos seus</p><p>usuários. Por isso, para que seja possível prolongar a utilização de um sistema, é necessário que</p><p>se utilizem processos de manutenção, seja para a correção de falhas, o que é chamado de</p><p>manutenção corretiva, seja para a evolução/adição de funcionalidades, chamada de manutenção</p><p>evolutiva.</p><p>Todo processo de manutenção de um sistema deve ser realizado de forma que, ao gerar uma</p><p>nova versão, além de se garantir que as novas funcionalidades atendam aos requisitos de</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>segurança, seja necessário também atestar que a integração das funcionalidades existentes se</p><p>mantenha também em conformidade com os requisitos de segurança.</p><p>_____</p><p>� Exempli�cando</p><p>A utilização de testes automatizados é uma forma de se otimizar o processo de validação das</p><p>funcionalidades desenvolvidas no software. Para aqueles desenvolvidos na linguagem Java, é</p><p>possível implementar testes unitários com o JUnit; já para a linguagem PHP pode-se fazer o</p><p>mesmo com o PHPUnit. Existem várias outras implementações de ferramentas que possibilitam</p><p>a criação de testes automatizados, não só para Java e PHP, mas também para as demais</p><p>linguagens de programação.</p><p>_____</p><p>Videoaula: modelo SQuaRE</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre o modelo SQuaRE.</p><p>Processos de avaliação e normas</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Para</p><p>que seja possível entregar um produto de software com aspectos de qualidade, é</p><p>necessário aplicar processos de avaliação em sua linha de produção.</p><p>Com o intuito de auxiliar na avaliação e na garantia da qualidade de um sistema, é possível</p><p>realizar a aplicação do modelo Systems and software quality requirements and evaluation</p><p>(SQuaRE), o qual foi implementado pela ISO e pela IEC.</p><p>As normas ISO/IEC pertencentes ao modelo SQuaRE apresentam diferentes abordagens de</p><p>qualidade: boas práticas na codi�cação, nos testes, para serviços de tecnologia da informação,</p><p>entre outras. Nesta aula, será abordada ainda a norma ISO/IEC 25010 (SQuaRE), que de�ne</p><p>modelos de qualidade de sistemas e softwares.</p><p>A norma ISO 25010 está de�nida em oito características de qualidade: funcionalidade, e�ciência</p><p>de desempenho, compatibilidade, usabilidade, con�abilidade, segurança, manutenção e</p><p>portabilidade (QUEMELO, 2019).</p><p>De acordo com ISO (2011) apud Quemelo (2019), no quesito funcionalidade, a norma ISO/IEC</p><p>25010 de�ne que os softwares (e sistemas) devem procurar atender ao que foi requisitado,</p><p>considerando as necessidades de cada empresa. A divisão de funcionalidade é a que se</p><p>apresenta a seguir:</p><p>Qualidade funcional: o conjunto das funcionalidades atende a todas as necessidades e aos</p><p>objetivos do usuário.</p><p>Correção funcional: capacidade do produto (software) ou do sistema de fornecer</p><p>resultados corretos e precisos.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Expressão funcional: capacidade do produto de fornecer um conjunto de funcionalidades</p><p>apropriadas para satisfazer as tarefas e os objetivos especí�cos do usuário.</p><p>No quesito e�ciência de desempenho, é estabelecida pela norma ISO/IEC 25010 uma</p><p>característica de se manter o desempenho previsto nos requisitos ISO (2011) apud Quemelo</p><p>(2019). Esse quesito é subdividido em:</p><p>Comportamento temporal: de�nido como tempo de resposta, processamento e taxas de</p><p>rendimento de um sistema quando faz suas funções em determinadas condições.</p><p>Uso de recursos: de�nido como tipos de recursos e quantidade de recursos utilizados</p><p>quando o software realiza suas funções sob determinadas condições.</p><p>Capacidade: nível máximo de um padrão em que um produto (software) ou sistema atende</p><p>aos requisitos.</p><p>No quesito compatibilidade, a norma ISO/IEC 25010 ISO (2011) apud Quemelo (2019) estabelece</p><p>que se trata da possibilidade de dois ou mais usuários trocarem e executarem funções</p><p>fundamentais ao compartilharem o mesmo sistema. A compatibilidade é subdividida em:</p><p>Coexistência: concorrência do produto com outro usuário independente, no mesmo</p><p>ambiente, utilizando o compartilhamento de recursos e de informações sem prejudicar</p><p>nenhum dos dois.</p><p>Interoperabilidade: aptidão de dois ou mais sistemas em trocar e utilizar informações.</p><p>No quesito usabilidade, a norma ISO/IEC 25010 ISO (2011) apud Quemelo (2019) de�ne como</p><p>sendo a prática do software ser aprendido, compreendido e utilizado pelo usuário. É subdividido</p><p>conforme apresentado no quadro.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Avaliação de usabilidade. Fonte: elaborado pelo autor.</p><p>A norma ISO/IEC 25010 ISO (2011) apud Quemelo (2019) de�ne o quesito con�abilidade como</p><p>sendo a e�ciência de um sistema para executar determinadas tarefas sob certas condições em</p><p>um período de tempo estipulado. É subdividido conforme o apresentado pelo quadro:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Quesitos de con�abilidade. Fonte: elaborado pelo autor.</p><p>A norma ISO/IEC 25010 ISO (2011) apud QUEMELO (2019) de�ne o quesito segurança como</p><p>sendo a capacidade de proteger informações e dados para que pessoas ou sistemas não</p><p>autorizados não possam lê-los ou modi�cá-los. É subdivido conforme o apresentado no quadro:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Capacidade de proteção de segurança. Fonte: elaborado pelo autor.</p><p>A norma ISO/IEC 25010 ISO (2011) apud Quemelo (2019) de�ne o quesito manutenção como a</p><p>capacidade de o produto (software) ser modi�cado de forma e�ciente e efetiva, conforme o</p><p>necessário. Mais detalhes são apresentados no quadro:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Manutenção. Fonte: elaborado pelo autor.</p><p>A norma ISO/IEC 25010 ISO (2011) apud Quemelo (2019) de�ne o quesito portabilidade como a</p><p>capacidade de ser transferido de um ambiente de hardware, software, operacional ou de</p><p>utilização para outro. Essa característica está subdivida no quadro:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Portabilidade. Fonte: elaborado pelo autor.</p><p>A utilização do modelo SQuaRE no processo de qualidade de um projeto de sistema sem dúvida</p><p>aumentará a garantia da qualidade no produto �nal, entretanto, de acordo com Holanda e</p><p>Fernandes ([2009-2011]), é importante salientar que, mesmo seguindo as recomendações de</p><p>segurança, os desenvolvedores necessitam de uma boa formação conceitual, de postura de</p><p>enge¬nheiro de software, além de conhecimento constantemente atualizado sobre as</p><p>plataformas e lin¬guagens de programação utilizadas nos projetos. Com todos esses itens</p><p>citados, ainda assim não se tem garantia su�ciente para a produção de código seguro na</p><p>atualidade.</p><p>Chegamos ao �nal de mais uma aula, e até aqui foi possível abordar várias questões importantes</p><p>envolvendo segurança e qualidade de software. Lembre-se: a busca por níveis con�áveis de</p><p>segurança nos sistemas deve ser constante e deve ser feita com esforço e dedicação.</p><p>Mantenha-se sempre buscando conhecimento!</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>No desa�o proposto, você foi encarregado de realizar o mapeamento das causas das falhas de</p><p>segurança presentes nas plataformas desenvolvidas pela software house bem como propor</p><p>melhorias para a equipe desenvolvedora dessas plataformas.</p><p>Além dos dados que você já coletou sobre as tecnologias utilizadas e sobre o ambiente utilizado,</p><p>é importante levantar mais informações sobre eles, uma vez que esses dados podem auxiliar na</p><p>identi�cação do que se deve propor com relação a melhorias. Para isso, é recomendável elaborar</p><p>uma lista com os itens que podem apresentar brechas de segurança, de modo que você</p><p>trabalhará o conceito de superfície de ataque. A lista para este mapeamento deve conter:</p><p>Dados mais detalhados sobre o ambiente/infraestrutura em que as plataformas são</p><p>fornecidas: elabore uma lista com o detalhamento de cada uma das soluções de</p><p>infraestrutura para onde está esse sistema. Coloque esses dados em uma tabela, onde será</p><p>possível avaliar quão sensível é esse ambiente no quesito segurança.</p><p>Tecnologias utilizadas na construção das plataformas: além das linguagens de</p><p>programação e de versão já identi�cadas, bancos de dados, informações sobre as IDEs,</p><p>bibliotecas e componentes enriquecem o conjunto de dados necessários para o</p><p>desenvolvimento da proposta de melhoria. Coloque essas informações em outra tabela ou</p><p>planilha e identi�que novamente o grau de sensibilidade que se tem nesse ambiente com</p><p>relação à segurança.</p><p>Processo de testes das funcionalidades: por mais que possam existir de forma bem</p><p>rudimentar, compreender como os testes funcionam é fundamental para se propor</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>melhorias nesse processo, inclusive para sugerir a utilização de ferramentas de testes</p><p>automatizados, que, além de otimizarem o tempo de testes, proporcionam maior</p><p>con�abilidade na entrega de uma nova versão.</p><p>Frameworks utilizados na construção das plataformas: caso sejam utilizados, é importante</p><p>identi�car suas funcionalidades bem como sua versão. A partir daí é possível sugerir</p><p>atualizações desses frameworks, pois assim haverá conhecimento das correções em</p><p>versões mais recentes e, consequentemente, do impacto das alterações no produto.</p><p>Metodologia utilizada no versionamento dos códigos-fonte, no ambiente de versionamento</p><p>e na segurança desse ambiente: a metodologia deve estar em um documento que, ao �nal,</p><p>fará a composição da documentação técnica do sistema.</p><p>Gestão de acesso a partes sensíveis do projeto (considerando que existe uma rotatividade</p><p>de desenvolvedores na empresa).</p><p>Métodos de veri�cação de segurança e etapas do desenvolvimento em que são</p><p>empregados.</p><p>Processo de garantia de qualidade do produto.</p><p>Com base nesses dados coletados, você terá informações su�cientes para propor melhorias nas</p><p>tecnologias utilizadas e nos processos do ciclo de vida dos produtos desenvolvidos como</p><p>explicado nesta aula.</p><p>Com todas as alterações sugeridas por você, a software house poderá minimizar as falhas de</p><p>segurança nos projetos e, consequentemente, poderá aumentar a qualidade dos produtos</p><p>fornecidos.</p><p>Na planilha ou nas tabelas que serão criadas por você, identi�cando claramente como está esse</p><p>ambiente de desenvolvimento, será possível, então, após o mapeamento, propor um novo modelo</p><p>que considere formas de desenvolvimento mais seguras.</p><p>Aula 3</p><p>Segurança e permissões de acesso</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, estudaremos elementos importantes relacionados aos princípios de segurança no</p><p>acesso a sistemas seguros.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>examinar fundamentos de segurança de acesso a sistemas seguros;</p><p>analisar os princípios de determinação de riscos no acesso a sistemas seguros;</p><p>apreciar o conceito de análise de engenharia de segurança e garantia de acesso.</p><p>Situação-problema</p><p>Prezado estudante,</p><p>Nesta aula, trabalharemos elementos importantes relacionados aos princípios de segurança no</p><p>acesso a sistemas seguros. Começaremos abordando os fundamentos de segurança de acesso</p><p>contextualizando a importância da validação de identidade do usuário. Após conhecer esses</p><p>fundamentos, você terá condições de repensar os aspectos de segurança que envolvem o</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>contexto de acessos às estruturas de um sistema bem como compreender os riscos envolvendo</p><p>acessos indevidos.</p><p>Na sequência, serão abordadas as características necessárias para garantia de acesso a</p><p>sistemas seguros com base em recomendações de�nidas pela OWASP. Por �m, serão abordados</p><p>os conceitos de de�nição de per�s de acesso aos sistemas e seus benefícios no controle de</p><p>funcionalidades permitidas e/ou não permitidas para os usuários do sistema.</p><p>Se você já trabalha com segurança ou com desenvolvimento de software, os conceitos</p><p>abordados nesta aula o ajudarão na caminhada pela busca de um mundo digital mais seguro,</p><p>entretanto, se ainda não está atuando na área, você terá informações que o farão compreender a</p><p>importância da segurança no mundo dos softwares.</p><p>Uma instituição �nanceira deseja ampliar o atendimento aos seus clientes por meio da criação</p><p>de uma plataforma digital. Atualmente essa instituição conta apenas com terminais de</p><p>autoatendimento em suas agências, além dos funcionários disponíveis para atender aos clientes,</p><p>o que, de certo modo, di�culta a expansão de suas operações visto que o atendimento</p><p>atualmente depende do espaço físico das agências.</p><p>A princípio a intenção da instituição é disponibilizar funcionalidades básicas na plataforma</p><p>digital, tais como: emissão de boletos, consulta de débitos, demonstrativos e demais declarações</p><p>para os seus clientes. Dessa forma, já seria possível atender, inicialmente, clientes que se</p><p>encontram fora das cidades onde há agências. Futuramente, pretende-se adicionar as</p><p>funcionalidades de adesão virtual aos serviços de crédito da instituição.</p><p>O setor de tecnologia já preparou todo o ambiente de hospedagem web para receber a nova</p><p>plataforma que será desenvolvida e já de�niu as tecnologias a serem empregadas na construção</p><p>da plataforma, sendo a linguagem Java para o back-end; framework Bootstrap e Javascript para</p><p>o front-end, e, para o armazenamento de dados, o PostgreSQL.</p><p>Considerando que a plataforma deverá ter formas con�áveis de autenticação nos acessos, a</p><p>equipe de tecnologia solicitou que fosse realizada a contratação de uma consultoria para terem</p><p>um direcionamento acerca das melhores práticas na de�nição dos mecanismos de autenticação</p><p>dos usuários.</p><p>Em um contato inicial com a equipe responsável pelo projeto, �cou evidenciado que, mesmo com</p><p>as de�nições de linguagens de programação e bancos de dados, é possível sugerir frameworks</p><p>e/ou outras linguagens e bancos de dados com as devidas justi�cativas.</p><p>Bons estudos!</p><p>Segurança</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O conceito de segurança, de um modo geral, repassa a ideia de proteção e, quando aplicado no</p><p>contexto de sistemas, remete sempre ao pensamento de algo protegido com acesso restrito</p><p>apenas a usuários e/ou a outros sistemas com permissão de acesso.</p><p>De fato, é importante considerar o quesito acesso quando se fala em segurança de sistemas,</p><p>uma vez que um dos elementos empregados na proteção aos dados e ao ambiente de um</p><p>sistema como um todo é o controle de acesso a ele.</p><p>De acordo com Matos (2000), no passado, a proteção de sistemas informatizados era</p><p>relativamente simples, pois eram centralizados, estavam geralmente localizados em um mesmo</p><p>local físico e, portanto, para se ter acesso a eles, era necessário acessar �sicamente o local em</p><p>que se encontravam.</p><p>Atualmente o acesso aos sistemas não pode, na maioria das vezes, ser impedido por barreiras</p><p>físicas. Um exemplo disso são plataformas como redes sociais, aplicativos de trocas de</p><p>mensagens, aplicativos de delivery, portais acadêmicos, portais governamentais, entre outros,</p><p>todos utilizando as possibilidades oferecidas pela conexão com a grande rede de comunicação</p><p>chamada Internet.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Na aula anterior, foi abordado o conceito de superfície de ataque, no qual estão inclusos vários</p><p>elementos que compõem a estrutura de um sistema.</p><p>Considerando esse conceito de superfície de ataque, faz-se necessário o emprego de boas</p><p>práticas na elaboração dos elementos que farão parte dos processos relacionados ao acesso do</p><p>sistema, seja nas fases de desenvolvimento, seja no acompanhamento de sua utilização, caso o</p><p>sistema já esteja sendo utilizado, ou, quando necessário, na realização das manutenções que o</p><p>sistema possa receber.</p><p>De acordo com Silva et al. (2019), o processo de autenticação pessoal é um recurso utilizado</p><p>para proteger informações em um sistema e é mais comum usar algo que a pessoa conhece, por</p><p>exemplo uma senha.</p><p>Além da utilização de senhas no acesso a sistemas, é possível utilizar vários outros mecanismos</p><p>como elementos de autenticação. Grande parte das plataformas que fornecem serviços</p><p>necessários ao cotidiano das pessoas possibilitam o acesso a elas com a utilização de dados</p><p>vinculados aos seus usuários seguindo algumas combinações como username/log in e senha, e-</p><p>mail e senha, número de telefone, etc.</p><p>Além dessas combinações, é comum encontrar também uma dupla veri�cação de identidade, a</p><p>qual pode ser chamada de autenticação em dois fatores, que pode ser realizada com a utilização</p><p>de tokens, com a con�rmação via e-mail ou com mensagens de textos no formato SMS.</p><p>Uma estratégia bastante utilizada para tornar a veri�cação de acesso um processo seguro é a</p><p>combinação de um ou mais métodos, conforme exposto na �gura.</p><p>Representação de um contexto mais seguro para controle de acesso a sistemas. Fonte: elaborada pelo autor.</p><p>_____</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>� Exempli�cando</p><p>O conceito de Single Sign-On (SSO), acesso único, em uma tradução livre para o Português, é</p><p>aplicado em vários sistemas utilizados atualmente. Um dos exemplos de utilização de SSO é</p><p>quando algum site, sistema ou plataforma oferece a realização do cadastro em seu ambiente</p><p>com a possibilidade de utilização de suas redes sociais.</p><p>A possibilidade de utilizar as credenciais do aplicativo de e-mail ou até mesmo o cadastro com a</p><p>utilização apenas do número telefônico também é um exemplo de emprego de SSO.</p><p>Os benefícios de se utilizar SSO estão diretamente ligados à veracidade da identidade por parte</p><p>do sistema, que usa o recurso uma vez que a autenticidade do acesso é veri�cada por</p><p>mecanismos disponibilizados pela outra parte (empresa que mantém a rede social, o serviço de</p><p>e-mail,</p><p>etc.) bem como a velocidade de cadastro e de acesso para o usuário, visto que este, com</p><p>poucos cliques, já consegue se cadastrar ou acessar um sistema/serviço novo sem a</p><p>necessidade de preenchimento de um extenso formulário de cadastro.</p><p>_____</p><p>Apesar de ser possível empregar várias estratégias na veri�cação de identidade do usuário que</p><p>está realizando o acesso ao sistema, a garantia de que a identidade con�rmada de fato pertence</p><p>a quem informou os dados para veri�cação ainda pode ser baixa. Para resolver esse problema,</p><p>uma alternativa é a utilização de características pessoais que somente o indivíduo possui, isto é,</p><p>pode-se usar aquilo que se chama informações biométricas.</p><p>Conforme expresso por Silva et al. (2019), um dos pontos positivos em relação à técnica</p><p>biométrica é que as pessoas apresentam características próprias, as quais não podem ser</p><p>forjadas e esquecidas.</p><p>A utilização de biometria pode ser observada em acesso a sistemas de caixas eletrônicos,</p><p>serviços de cadastros em plataformas �nanceiras que utilizam reconhecimento facial através de</p><p>uma área da inteligência arti�cial chamada visão computacional, assim como no desbloqueio de</p><p>smartphones com câmera, reconhecimento de voz, entre outras aplicações.</p><p>É importante compreender que, independentemente da estratégia utilizada na validação de</p><p>acesso, sempre existirão tentativas de burlar as validações para o acesso ou de adquirir, de</p><p>forma indevida, os dados de usuários para posterior utilização.</p><p>Nesse sentido, convém observar algumas orientações importantes no armazenamento dos</p><p>dados de acesso no ambiente do sistema empregando boas práticas para a proteção desses</p><p>dados.</p><p>Tomando como exemplo uma validação de acesso muito utilizada em grande parte dos sistemas</p><p>disponíveis, realizada por meio de username e password (nome de usuário e senha,</p><p>respectivamente) e considerando que, no desenvolvimento do sistema, não foram empregadas</p><p>boas práticas de codi�cação segura, no armazenamento das credenciais dos usuários, os dados</p><p>sensíveis referente às senhas de acesso (coluna password) são facilmente visualizados quando</p><p>uma consulta é feita na tabela do banco de dados conforme demonstrado na �gura.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Dado de password armazenado sem criptogra�a. Fonte: captura de tela de MySQL WorkBench elaborada pelo autor.</p><p>Uma forma de minimizar esse possível problema de visibilidade de senhas armazenadas seria a</p><p>utilização de criptogra�a.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Dado de password criptografado com MD5. Fonte: captura de tela de MySQL WorkBench elaborada pelo autor.</p><p>Na �gura, é possível veri�car a coluna que armazena as senhas dos usuários (coluna password)</p><p>com um conjunto de caracteres que mascara o texto real. Nesse exemplo da �gura foi utilizada</p><p>criptogra�a MD5, porém, como se pode observar na �gura, os dados de�nidos para a senha do</p><p>usuário, “diego123”, são facilmente identi�cáveis em uma tentativa de acesso feita por força</p><p>bruta.</p><p>Atacantes. Fonte: elaborado pelo autor.</p><p>Validação e veri�cação de identidade</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Além da criptogra�a empregada no armazenamento das senhas, seguindo o que foi exposto por</p><p>OWASP (2017), é recomendável implementar validações para que os usuários criem senhas mais</p><p>seguras, por exemplo: não permitir a utilização de dados como nome, data de nascimento e</p><p>demais dados fáceis de serem encontrados como parte da senha a ser de�nida.</p><p>Além das recomendações quanto ao processo de de�nição de senhas, a utilização de um</p><p>segundo fator de veri�cação de identidade também se torna um adicional de segurança</p><p>conforme de�ne OWASP (2017).</p><p>_____</p><p>� Assimile</p><p>A utilização de inteligência arti�cial na validação de acesso a sistemas pode ser empregada</p><p>utilizando análise comportamental virtual do usuário com relação à forma como ele digita e</p><p>utiliza o mouse e até mesmo à forma como navega pelos recursos do sistema. Utilizando dados</p><p>coletados sobre esses comportamentos, é possível identi�car também se quem está, de fato,</p><p>utilizando o sistema é um usuário humano ou um outro software que simula comportamento</p><p>humano, denominado muitas vezes de bot, uma abreviação para robot, robô em Inglês.</p><p>_____</p><p>Uma vez resolvidos os problemas que possam ocorrer no processo de autenticação para o</p><p>acesso a um sistema, é importante compreender que nem todos os usuários deverão possuir</p><p>acesso a todas as funcionalidades desse sistema.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>É comum a utilização de estruturas de controle de acesso para garantir uma boa gestão no</p><p>controle das funcionalidades utilizadas pelos usuários de um sistema visto que, uma vez</p><p>validadas as credenciais de acesso pelo mecanismo de autenticação do sistema, o usuário se</p><p>encontra dentro do ambiente disponibilizado.</p><p>Nesse sentido, a OWASP (2017) de�ne que o controle dos acessos permitidos pelos usuários</p><p>fornece garantia de que eles não poderão agir além das permissões que lhes foram atribuídas.</p><p>Durante a construção dos mecanismos de validação das permissões de acesso concedidas ao</p><p>usuário, é importante empregar validações nesses mecanismos para garantir que todo o</p><p>processo de controle esteja funcionando corretamente.</p><p>OWASP (2017) salienta que a ocorrência de falhas no controle de acesso às funcionalidades do</p><p>sistema pode levar a consequências como divulgação não autorizada de informação,</p><p>modi�cação ou destruição de todos os dados contidos no sistema ou ainda execução de</p><p>funções de negócio fora dos limites do usuário.</p><p>A atribuição de funcionalidades aos usuários pode ser feita com a criação de per�s, os quais</p><p>representam, de forma clara, a de�nição de papéis atribuídos aos usuários dentro de um sistema,</p><p>por exemplo: per�l administrador para usuários que farão a administração, a</p><p>con�guração/parametrização e as demais atribuições necessárias para o funcionamento do</p><p>sistema.</p><p>Na �gura, observa-se uma demonstração de como se pode estruturar a liberação de</p><p>funcionalidades/permissões de um sistema a um per�l de�nido, o qual tem usuários vinculados</p><p>a ele.</p><p>Representação ideal para controle de acesso a sistemas seguros. Fonte: elaborada pelo autor.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Além dos benefícios já citados com a utilização de per�s de acesso, é importante ressaltar</p><p>também que, caso seja necessário restringir, em caráter de urgência, os acessos de um grupo</p><p>especí�co de usuários, basta desvincular as permissões atribuídas ao per�l a que esses usuários</p><p>estão relacionados.</p><p>_____</p><p>� Re�ita</p><p>Por mais que seja possível empregar vários mecanismos de validação de acesso a sistemas,</p><p>ainda assim não é possível ter a garantia de que o acesso realizado, de fato, foi efetuado pelo</p><p>usuário pertencente aos dados utilizados na validação.</p><p>Existem esforços contínuos para melhorar os mecanismos de autenticação ao mesmo tempo</p><p>que pessoas mal-intencionadas empregam esforços para burlar esses mecanismos.</p><p>Diante desse cenário, é importante manter as estratégias de validação de acesso sempre</p><p>atualizadas, considerando as possibilidades de inovação e de aumento de segurança para o</p><p>processo.</p><p>_____</p><p>Chegamos ao �nal de mais uma aula e até aqui foi possível abordar várias questões importantes</p><p>envolvendo o acesso a sistemas seguros. É importante relembrar que existem várias formas de</p><p>tornar o acesso a um sistema um processo seguro, sendo possível também combinar várias</p><p>técnicas para esse processo. Saber quais elementos utilizar envolve conhecer os riscos que o</p><p>sistema possa enfrentar para que, assim, aplique-se a melhor estratégia no controle de acesso a</p><p>ele. Mantenha-se sempre buscando conhecimento!</p><p>Videoaula: resolução da situação-problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Uma instituição �nanceira está</p><p>de ser acessada</p><p>por usuários não autorizados. Integridade se preocupa em implementar controles que assegurem</p><p>que a informação não será modi�cada sem autorização adequada. Disponibilidade veri�ca que a</p><p>informação (e o sistema de informação associado a ela) é disponibilizada para usuários</p><p>autorizados sempre que necessário (MERKOW; RAGHAVAN, 2010).</p><p>_____</p><p>Para entendermos o desenvolvimento seguro, temos que compreender o conceito de resiliência</p><p>dentro da segurança em engenharia de software.</p><p>Um software é resiliente quando tem um sistema que consegue se antecipar e se recuperar de</p><p>situações adversas da melhor maneira possível. Esse tipo de sistema apresenta algumas</p><p>características que precisam ser garantidas em seu desenvolvimento, como as apresentadas no</p><p>quadro:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Características de sistemas resilientes. Fonte: elaborado pelo autor.</p><p>_____</p><p>Vocabulário</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Hacker: é o indivíduo que tem interesse no funcionamento de sistemas e é, geralmente, um</p><p>programador. Ele pode descobrir brechas em sistemas, sempre buscando conhecimento e</p><p>compartilhando suas descobertas sem o intuito de causar dano aos dados. Como o termo �cou</p><p>muito deturpado, Ethical Hacker passou a ser mais popularizado.</p><p>Cracker: é o indivíduo que utiliza seus conhecimentos em tecnologia para violar a integridade de</p><p>um sistema sempre com intenção desonesta. Ele pode destruir dados, indisponibilizar um</p><p>sistema e causar problemas às suas vítimas.</p><p>A diferença essencial, então, está nos motivos de cada um deles (ASHOOR; GORE, 2011).</p><p>_____</p><p>Incidentes de segurança podem causar muito prejuízo às empresas e aos seus usuários. Para</p><p>identi�car os riscos a que estes estão expostos, podemos associá-los à violação dos conceitos e</p><p>das características de software seguro e à resiliência desses sistemas.</p><p>_____</p><p>� Exempli�cando</p><p>Imagine, por exemplo, um sistema de e-commerce. Certo dia, este recebe um ataque</p><p>ransomware e tem seu banco de dados sequestrado. A cada minuto fora do ar, o sistema deixa</p><p>de processar centenas de compras, o que traz prejuízo e perda de reputação à empresa. Como</p><p>foi desenvolvido para ser um sistema resiliente, rapidamente é possível reiniciar os servidores</p><p>com um backup atualizado do banco de dados, por meio de processos bem de�nidos.</p><p>Videoaula: ferramentas de teste de segurança e produtos de proteção e</p><p>aplicativos</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de ferramentas de teste de segurança e produtos de proteção e aplicativos.</p><p>As brechas de segurança</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>As brechas de segurança costumam envolver perda de con�dencialidade, de integridade e de</p><p>disponibilidade de um sistema, permitindo o acesso aos dados dos usuários e resultando na</p><p>instabilidade do serviço prestado. Essas brechas vão de encontro à resiliência de um sistema e</p><p>podem causar interrupções nas operações dos sistemas.</p><p>Além disso, as interrupções interferem na credibilidade e na perda de con�ança na marca pelo</p><p>usuário. Neste caso, o conceito de disponibilidade permite ao sistema estar disponível dentro de</p><p>uma faixa que não chegará nunca a 100%, mas estará dentro de um limite aceitável para garantir</p><p>as operações da empresa, garantindo, assim, a credibilidade do serviço.</p><p>As interrupções podem comprometer as operações, como no caso de interrupções por um</p><p>ataque Distributed Denial of Service (DDoS), por exemplo, no qual vários IPs de uma empresa são</p><p>atacados e um pico recorde de transferências não autorizadas é registrado.</p><p>Outros incidentes podem ferir gravemente a reputação de uma empresa, como é o caso de uma</p><p>empresa de consoles de videogame que, em 2011, após ter tido dados de seus clientes vazados,</p><p>gastou 171 milhões de dólares para cobrir os custos da invasão e precisou realizar o</p><p>desligamento temporário da plataforma on-line. A empresa também distribuiu vários jogos</p><p>gratuitos na tentativa de evitar que seus clientes trocassem seu serviço pelo dos concorrentes</p><p>(MARTINEZ, 2011).</p><p>_____</p><p>� Re�ita</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Sabia que nem sempre é necessário que um hacker descubra uma vulnerabilidade técnica para</p><p>realizar um ataque? Vários ataques utilizam Engenharia Social, que é de�nida como um conjunto</p><p>de técnicas psicossociais que, no contexto de tecnologia, levam a vítima a revelar dados</p><p>sigilosos de si ou de terceiros. Esse tipo de ataque é um dos maiores desa�os entre os</p><p>desenvolvedores de software e os especialistas de segurança. Um exemplo comum é quando o</p><p>criminoso telefona para a vítima dizendo que fala em nome de uma empresa que presta serviços</p><p>a ela. A vítima, então, con�ando na reputação da empresa, fornece diversos dados pessoais que</p><p>permitem que o criminoso obtenha vantagem �nanceira. Outro exemplo é quando o criminoso,</p><p>utilizando uma abordagem semelhante, dessa vez por e-mail ou por aplicativo de mensagem,</p><p>pede para a vítima con�rmar um código que ela recebeu por e-mail ou por SMS da empresa. Essa</p><p>era a peça que faltava para que o criminoso acessasse aquele serviço utilizando a conta da</p><p>vítima. Algumas soluções, como a autenticação em dois passos, conseguem mitigar os efeitos</p><p>dos ataques. E você? Consegue imaginar mais soluções para esse tipo de situação?</p><p>_____</p><p>Agora que já entendemos os principais conceitos teóricos de segurança em engenharia de</p><p>software, nas próximas aulas visitaremos as aplicações em cada momento de um projeto de</p><p>desenvolvimento de sistemas.</p><p>Certi�que-se de que compreendeu todos os conceitos trabalhados nesta aula, pois eles serão</p><p>importantíssimos para o andamento de nossos estudos. Tire dúvidas com seu professor e com</p><p>seus colegas e visite os materiais complementares.</p><p>Videoaula: resolução do estudo de caso</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com  resolução do estudo de caso.</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O objetivo dessa fase do hackathon é veri�car as vulnerabilidades do sistema que lhe foi</p><p>apresentado e justi�cá-las aos juízes. Por isso, você se posiciona no palanque do evento com</p><p>microfone e controle em mãos para fazer uma apresentação de slides sobre as vulnerabilidades</p><p>encontradas.</p><p>Vulnerabilidade 1: você consegue visualizar receitas e despesas que os colegas B e C inseriram.</p><p>Qual conceito de software seguro está sendo violado?</p><p>Para responder à pergunta, deve-se retomar os conceitos principais de software seguro:</p><p>con�dencialidade, integridade e disponibilidade; e as características de software seguro e</p><p>resiliente. Nesta vulnerabilidade, você consegue visualizar dados que não deveria, pois</p><p>pertencem a outra empresa. Nesse caso, o conceito que a vulnerabilidade viola é o de</p><p>con�dencialidade. O conceito de vulnerabilidade diz que um usuário só deve poder acessar</p><p>um dado para o qual tenha autorização. Como você é administrador da empresa X, não</p><p>deveria conseguir visualizar dados da empresa Y e vice-versa.</p><p>Como o sistema deveria ter se comportado?</p><p>A pergunta pode ser respondida de maneira mais aberta, uma vez que a melhor maneira de</p><p>resolver é muito relativa na prática e, às vezes, depende de limitações técnicas. Porém, sua</p><p>solução deve respeitar os conceitos e as características citados previamente. O sistema</p><p>deveria ter mantido a con�dencialidade de seus dados, ou seja, deveria exibir dados da</p><p>empresa Y apenas a funcionários autorizados da empresa Y. Para o administrador da</p><p>empresa X, somente os dados da empresa X deveriam ser visualizados no sistema.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Por que o sistema deveria ter se comportado da forma sugerida?</p><p>Você deve explicar porque, com</p><p>modernizando o atendimento a seus clientes e iniciou o projeto</p><p>de criação de uma plataforma web para oferecer serviços essenciais de atendimento.</p><p>Considerando que a autenticação de acesso à plataforma é um ponto crucial que envolve a</p><p>segurança dos dados, a empresa optou pela contratação de um pro�ssional habilitado para</p><p>prestar consultoria no projeto desse processo.</p><p>Você recebeu a tarefa de atender ao projeto proposto pela empresa, portanto é importante</p><p>considerar os seguintes aspectos:</p><p>A autenticação de acessos à plataforma deve ser feita de modo a prover o maior nível de</p><p>con�abilidade de identidade possível.</p><p>A validação da identidade precisa ser um processo rápido e desburocratizado visto que o</p><p>público a ser atendido pela plataforma da instituição é genérico e pode variar de pessoas</p><p>com muita habilidade em utilizar sistemas digitais a pessoas que possuem di�culdades</p><p>com esse meio.</p><p>O armazenamento das credenciais de acesso deve ocorrer de forma segura e utilizando</p><p>meios con�áveis de criptogra�a, de modo que seja impossível o reconhecimento dessas</p><p>informações caso haja vazamento de dados.</p><p>Considerando os itens anteriores, você pode recomendar a utilização de autenticação em dois</p><p>fatores, a qual consiste, basicamente, em dois elementos distintos para validação da identidade</p><p>no acesso. Pode ser uma opção a utilização de dados pessoais, como CPF ou RG, juntamente</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>com uma senha, adicionando, de forma aleatória, outra informação pessoal, como dia do</p><p>nascimento, mês do nascimento, ano do nascimento, número de contato, etc.</p><p>Uma possível validação secundária pode ser realizada com dados biométricos. Para o acesso via</p><p>navegador web, pode-se utilizar a webcam para capturar uma foto do rosto e fazer o</p><p>reconhecimento facial. Já para a utilização em smartphones, o reaproveitamento de digitais</p><p>cadastradas no dispositivo pode ser uma alternativa viável.</p><p>O envio de SMS e/ou envio de e-mail pode ser algo que di�culte a validação em duas etapas</p><p>considerando o nível de conhecimento tecnológico do usuário, além de poder ampliar as</p><p>possibilidades de pessoas mal-intencionadas na tentativa de roubo de identidade de acesso ao</p><p>sistema.</p><p>Por �m, considere a utilização de framework no desenvolvimento back-end uma vez que os</p><p>possíveis problemas de segurança a serem enfrentados podem já estar solucionados no</p><p>framework a ser utilizado. Como sugestão, pode-se considerar a utilização do framework Spring,</p><p>que, além de otimizar a codi�cação de soluções Java para a web, é opensource, tem boa</p><p>documentação, uma comunidade ativa e está em constante evolução.</p><p>Referências</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>BASTA, A.; BASTA, N.; BROWN M. Criptogra�a e craqueamento de senhas. In: BASTA, A.; BASTA,</p><p>N.; BROWN M. Segurança de computadores e teste de invasão. Tradução da segunda edição</p><p>norte-americana. [S. l.]: Cengage Learning, 2014. cap. 6, p. 107-120.</p><p>MATOS, R. M. de. Autenticação de Usuários Através da Utilização de Sistemas Biométricos. 2000.</p><p>Dissertação (Mestrado em Ciência da Computação) – Instituto de Informática, Universidade</p><p>Federal do Rio Grande do Sul, Porto Alegre, 2000.</p><p>MICROSOFT. Implementação simpli�cada do Microsoft SDL. [S. l.]: Microsoft Corporation, 2010.</p><p>MONTANHEIRO, L. S.; CARVALHO, A. M. M. Primeiros passos para o Desenvolvimento Seguro de</p><p>Aplicações Web. In: WORKSHOP DE TRABALHOS DE INICIAÇÃO CIENTÍFICA E DE GRADUAÇÃO -</p><p>SIMPÓSIO BRASILEIRO DE SEGURANÇA DA INFORMAÇÃO E DE SISTEMAS COMPUTACIONAIS</p><p>(SBSEG), 18., 2018, Natal. Anais [...]. Porto Alegre: Sociedade Brasileira de Computação, 2018. p.</p><p>233-242.</p><p>OLIVEIRA, C. de C. de. Avaliação da Qualidade de Sistema de Telecardiologia: Um Estudo de Caso</p><p>do Sistema Integrado Catarinense de Telemedicina e Telessaúde. 2016. Trabalho de Conclusão</p><p>de Curso (Bacharelado em Sistemas de Informação) – Departamento de Informática e</p><p>Estatística, Universidade Federal de Santa Catarina, Florianópolis, 2016.</p><p>OWASP. OWASP Top 10 – 2017 – The Ten Most Critical Web Application Security Risks. Versão</p><p>portuguesa. [S. l.]: OWASP, 2017.</p><p>OWASP. SAMM model overview. SAMM, [S. l., s. d.]. Disponível em:</p><p>https://owaspsamm.org/model/. Acesso em: 17 jan. 2022.</p><p>QUEMELO, L. D. Avaliação do software Sienge segundo a norma ISO/IEC 25010. 2019. Trabalho</p><p>de Conclusão de Curso (Bacharelado em Administração) – Departamento de Ciências da</p><p>Administração, Universidade Federal de Santa Catarina, Florianópolis, 2019.</p><p>RIBEIRO, R. A. M.; NIYAMA, Y. O. Guia de recomendações de segurança para o desenvolvimento</p><p>de web services para a administração pública federal. 2013. Trabalho de Graduação (Requisito</p><p>parcial para obtenção do grau de Engenheiro de Redes de Comunicação) – Faculdade de</p><p>Tecnologia, Universidade de Brasília, Brasília, 2013.</p><p>SILVA, R. J. H. et al. Autenticação Biométrica para sistemas por meio da dinâmica da digitação.</p><p>2019. Colloquium Exactarum, Presidente Prudente, v. 11, n. 2, p. 26-33, 2019.</p><p>SOUZA, L. L. de. Desenvolvimento Seguro de Aplicações Web Seguindo a Metodologia OWASP.</p><p>2012. Monogra�a (Graduação em Sistemas de Informação) – Departamento de Ciência da</p><p>Computação, Universidade Federal de Lavras, Lavras, 2012.</p><p>WAGNER, R.; BRANDOLT, J. F. dos A.; ROSSI, F. D. Processo de desenvolvimento de software</p><p>seguro através da identi�cação de níveis de segurança. Alegrete: Instituto Federal Farroupilha,</p><p>2011.</p><p>,</p><p>Unidade 4</p><p>Testes, programação con�ável e DEVSECOPS</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Aula 1</p><p>Testes de segurança</p><p>Introdução da Unidade</p><p>Objetivos da Unidade</p><p>Ao longo desta Unidade, você irá:</p><p>interpretar a segurança na engenharia de software;</p><p>aplicar o conceito de testes e programação con�ável;</p><p>analisar o conceito de DevSecOps.</p><p>Introdução da Unidade</p><p>Prezado estudante, nesta unidade, trabalharemos com vários conceitos essenciais que</p><p>abrangem a temática de segurança na engenharia de software, sendo eles: testes, programação</p><p>con�ável e DevSecOps.</p><p>Considerando o desenvolvimento seguro de sistemas e de softwares, os elementos a serem</p><p>abordados nesta unidade serão de fundamental importância para que você identi�que o papel de</p><p>cada um no ciclo de vida dos produtos de software.</p><p>Na aula 1, estudaremos o contexto de testes de segurança, abordando esse conceito no</p><p>desenvolvimento de software; os princípios de veri�cação e validação nos testes de segurança; o</p><p>conceito de testes de penetração em software; uma visão introdutória acerca das ferramentas</p><p>para auxiliar em testes de segurança, do ponto de vista da análise estática em códigos do</p><p>software.</p><p>Na aula 2, abordaremos os elementos que envolvem os princípios de programação segura, sendo</p><p>eles: o conceito de taxonomia de erros de codi�cação; os princípios de canais seguros de</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>programação; os fundamentos de ataques de programação maliciosa e software de invasão de</p><p>privacidade; por �m, a prática de desenvolvimento de código seguro em linguagens com o</p><p>paradigma orientado a objetos.</p><p>Na aula 3, aprenderemos o conceito de DevSecOps, os fundamentos de ambiente seguro, a</p><p>distribuição de mecanismos de segurança para ambientes web de desenvolvimento, o conceito</p><p>de controle de acessos e vulnerabilidades em ambiente de desenvolvimento e as ferramentas</p><p>para aplicação de DevSecOps na prática.</p><p>Introdução da Aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, estudaremos o processo de desenvolvimento com responsabilidade.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>articular a validação dos aspectos de testes de segurança em sistemas;</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>interpretar testes de penetração de software;</p><p>analisar ferramentas para análise estática.</p><p>Situação-problema</p><p>Prezado estudante, o desenvolvimento seguro de software é um tema emergente e de extrema</p><p>importância para os dias atuais. Ele envolve vários elementos e processos, que devem ser</p><p>introduzidos no ciclo de vida de um produto de software. Nesta aula, abordaremos a etapa de</p><p>testes de segurança.</p><p>Comumente, a maioria das pessoas acredita</p><p>que só se deve testar algo após a construção.</p><p>Erroneamente, este pensamento acabou se aplicando no desenvolvimento de software,</p><p>colaborando diretamente com a distribuição de softwares com baixa qualidade no aspecto de</p><p>segurança, além de ser um dos fatores que pode gerar atrasos em entregas e distribuição de</p><p>versões dos produtos de software.</p><p>Testes contínuos ao longo do processo de desenvolvimento aumentam a possibilidade de o</p><p>sistema, quando estiver pronto, ser mais estável e seguro. Um processo de testes bem elaborado</p><p>faz diferença no resultado do sistema pronto. Testes, bem como veri�cação e validação no</p><p>processo de elaboração de sistemas, fazem parte do processo de desenvolvimento com</p><p>responsabilidade.</p><p>Na sequência, testes de penetração de software e testes de segurança baseados em riscos</p><p>permitem ajudar na validação no sistema desenvolvido. Essa validação deve ser feita por meio</p><p>de ferramentas para análise estática, revisões e inspeções de segurança em sistemas.</p><p>Segurança é um assunto interessante e importante no processo de desenvolvimento de</p><p>sistemas, pois processos seguros, com segurança no ciclo de vida de desenvolvimento,</p><p>permitem que os resultados sejam melhores e que você tenha um sistema mais estável.</p><p>Nesta aula, portanto, testes serão abordados como parte do processo de desenvolvimento</p><p>seguro.</p><p>Imagine que você trabalha em uma empresa responsável por desenvolver softwares para o</p><p>segmento de e-commerce e que, atualmente, pretende melhorar a qualidade dos produtos</p><p>desenvolvidos no quesito segurança.</p><p>Os softwares são desenvolvidos utilizando as tecnologias mais recentes disponíveis: PHP com</p><p>framework Laravel, banco de dados relacional PostgreSQL, banco de dados NoSQL MongoDB e,</p><p>para o front-end, o framework Bootstrap. Todo o versionamento dos códigos-fonte é realizado</p><p>utilizando Git, contando com um controle bem estruturado de documentação e liberação de</p><p>versão.</p><p>Como integrante do time de desenvolvimento de software, você observa que já são realizados</p><p>testes no produto de software antes da etapa de liberação de versão para o cliente, porém se</p><p>questiona: se já existe o processo de testes do software produzido, como adicionar testes de</p><p>segurança neste software? Em quais etapas do ciclo de produção do software poderão ser</p><p>introduzidos os testes de segurança? Como garantir que esses testes conseguirão capturar</p><p>falhas de segurança que não são visíveis quando o teste ocorre no produto de forma funcional?</p><p>Vamos em frente para entender mais como funciona segurança em engenharia de software e</p><p>como desenvolver sistemas de forma segura. Siga em frente na busca pelo conhecimento!</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Testes na engenharia de software</p><p>O processo de testes no contexto da engenharia de software aborda, de uma maneira geral,</p><p>princípios, para que se tenha a garantia de que as funcionalidades desenvolvidas estejam</p><p>implementadas corretamente e atendam aos requisitos acordados entre os solicitantes e os</p><p>envolvidos na construção.</p><p>Considere o Test Driven Design (TDD), que se baseia no desenvolvimento de software dirigido por</p><p>testes. De forma resumida, constroem-se, primeiramente, testes das funcionalidades de cada</p><p>unidade do software e, posteriormente, implementam-se as funcionalidades que serão validadas</p><p>por eles. Essa metodologia se baseia em testes das menores partes de um software, que são</p><p>chamadas de unidades.</p><p>Weideman (2014) a�rma que testes unitários, diferentemente dos testes funcionais, operacionais</p><p>e de sistema, possuem como foco o processo de veri�cação da menor unidade do projeto do</p><p>software. Deste modo, é possível aumentar a garantia de que as funcionalidades implementadas</p><p>sejam testadas e validadas.</p><p>De uma forma geral, não basta que os sistemas e softwares atendam às necessidades dos</p><p>usuários, é preciso que eles contenham características de segurança. Diante disso, com o</p><p>aumento de incidentes ocasionados pela falta de segurança nos sistemas e softwares, tornou-se</p><p>necessário incluir os testes de segurança no ciclo do processo de desenvolvimento.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Etapa em que os testes de segurança são realizados seguindo a metodologia tradicional. Fonte: elaborada pelo autor.</p><p>Tradicionalmente, os testes de segurança eram realizados entre as etapas de liberação e</p><p>implantação do software ou, ainda, na operação dele por parte dos usuários, conforme ilustrado</p><p>na �gura.</p><p>Até chegar às etapas de liberação e implantação, é transcorrido um tempo considerável, logo, se</p><p>forem identi�cadas falhas de segurança no software apenas nestas etapas, isso acarretará</p><p>prejuízos nos prazos estabelecidos para as entregas de�nidas no projeto, uma vez que,</p><p>possivelmente, será necessário reescrever partes do código desenvolvido, com o intuito de</p><p>corrigir as vulnerabilidades encontradas.</p><p>A realização de testes de segurança no desenvolvimento de software passa, então, a ser</p><p>estruturada de forma que não seja aplicada apenas em processos funcionais, como descrito</p><p>anteriormente, mas que seja possível validar a menor parte de cada componente de software,</p><p>chegando ao nível de análise de código linha a linha (EVANGELISTA, 2017).</p><p>Neste sentido, pode-se considerar o conceito de Static Analysis Security Test (SAST), que em</p><p>uma tradução livre pode ser compreendido como Teste de Segurança de Análise Estática,</p><p>conhecido também como Teste de Segurança de Caixa Branca, teste estrutural ou teste da caixa</p><p>de vidro. Nele, o desenvolvedor efetua o teste diretamente no código-fonte do software,</p><p>analisando a lógica dele. O lado ruim é que não valida a especi�cação, se está correta ou não,</p><p>somente o código-fonte.</p><p>_____</p><p>� Assimile</p><p>Existe uma diferença considerável entre realizar testes de segurança na versão fechada do</p><p>software e no código antes de a versão ser fechada. Quando os testes de segurança são</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>realizados na versão fechada, ou seja, versão operacional, possivelmente, alguma brecha no</p><p>processo de codi�cação e/ou utilização de bibliotecas e frameworks que possuem de�ciências</p><p>na segurança será di�cilmente encontrada. Isso se deve ao fato de não se realizar análise no</p><p>código, e sim no produto funcional.</p><p>Já uma análise realizada diretamente no código-fonte seria capaz de veri�car a utilização de</p><p>elementos inseguros, bem como possíveis falhas na codi�cação, do ponto de vista da segurança.</p><p>_____</p><p>O emprego de análises de segurança em um processo mais precoce no ciclo de desenvolvimento</p><p>de software é de�nido na comunidade de desenvolvedores com a expressão Shift Left, que pode</p><p>ser compreendida como “mover para a esquerda”. Neste sentido, em vez de se aumentar a</p><p>atenção à segurança em etapas mais avançadas do projeto de software (Shift right), maximiza-</p><p>se a preocupação com a segurança já nas primeiras atividades do projeto.</p><p>Abordagens Shift Left e tradicional na aplicação de testes de segurança. Fonte: elaborada pelo autor.</p><p>Considerando os processos de análise estática de código, é comum visualizar modelos de</p><p>validações estáticas em conjunto com processos de Continuous Integration (CI), ou Integração</p><p>Contínua. Microsoft (2021) descreve a CI como um processo que possibilita automatizar a</p><p>construção e o teste de código sempre quando ocorrem alterações no código principal do</p><p>controle de versão.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Análise estática em processo de Integração Contínua. Fonte: elaborada pelo autor.</p><p>Na �gura, é possível visualizar o �uxo simpli�cado, que mostra a utilização de análise estática</p><p>por meio de ferramentas inseridas no processo de integração contínua:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Processo de integração contínua. Fonte: elaborado pelo autor.</p><p>Todo o processo descrito facilita as etapas de avaliação de segurança durante a fase de</p><p>codi�cação, automatizando a veri�cação e a validação de cada unidade de código produzido.</p><p>A realização de testes de segurança em conjunto com os processos de integração contínua não</p><p>elimina a necessidade de aplicar os testes funcionais</p><p>no produto de software, visto que a</p><p>execução de ambos amplia as possibilidades de captura de falhas.</p><p>_____</p><p>� Re�ita</p><p>Por mais que exista uma grande difusão acerca da importância da segurança nos sistemas e</p><p>softwares, muitos desenvolvedores insistem em trabalhar de forma “primitiva” com relação a</p><p>este requisito, desprezando as técnicas e ferramentas disponíveis para auxiliar nos testes em</p><p>projetos.</p><p>Isso seria negligência, ou falta de conhecimento? O que se sabe é que, no dia a dia, inúmeras</p><p>empresas utilizam softwares que podem ter sido desenvolvidos por pro�ssionais que se</p><p>enquadram nesta situação.</p><p>Existe um outro fator que possivelmente in�uencia de forma direta na resistência de se adotar</p><p>novas metodologias e ferramentas para promover o desenvolvimento seguro de software: a</p><p>forma com que se construiu a relação entre fornecedores de software e clientes, no que diz</p><p>respeito a prazos e custos dos projetos.</p><p>_____</p><p>Após a construção do software, é importante que se realizem testes para simular possíveis</p><p>ataques com abordagem de hackers externos. Essa abordagem pós-construção é conhecida</p><p>como Dynamic Analysis Security Test (DAST), que pode ser traduzida como Teste de Segurança</p><p>de Análise Dinâmica, ou Teste de Segurança de Caixa Preta.</p><p>Considerando o ciclo descrito na �gura, a execução dos testes dinâmicos se enquadra entre o</p><p>processo de testes de funcionalidades e o processo de liberação de versão.</p><p>De acordo com Evangelista (2017), os testes dinâmicos simulam ataques através de uma base</p><p>de conhecimentos pré-de�nidos na ferramenta, cujo objetivo é identi�car vulnerabilidades que</p><p>seriam identi�cadas em um ataque real.</p><p>Videoaula: testes de segurança</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os testes de segurança.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Testes dinâmicos</p><p>Dentre os principais testes dinâmicos, cabe destacar o teste de penetração, comumente</p><p>conhecido como pen test – uma contração para penetration test. Nele, são executadas tentativas</p><p>de intrusão no software, abordando os vários elementos presentes na superfície de ataque do</p><p>produto, por exemplo: acesso ao software quebrando os mecanismos de segurança no processo</p><p>de validação de credenciais de acesso; injeção de SQL, muito comum em aplicações web;</p><p>utilização de payloads para simular comportamentos no software; entre outros.</p><p>_____</p><p>� Exempli�cando</p><p>Os payloads são códigos pré-con�gurados em ferramentas de exploração, os quais, de forma</p><p>facilitada, permitem que seja de�nido pelo atacante o que um sistema atacado deve fazer,</p><p>executando tarefas por meio de comandos. Um exemplo de utilização de payload com a</p><p>ferramenta Metasploit seria uma chamada para linux/x86/adduser, para adicionar um novo</p><p>usuário, ou ainda windows/speak_ola, para usar a API de fala do Windows enviando a palavra</p><p>“olá”.</p><p>_____</p><p>A utilização de ferramentas para a execução de testes dinâmicos auxilia no processo de</p><p>detecção de falhas. Geralmente, a maioria dessas ferramentas possui funcionalidades para a</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>geração de uma lista contendo as vulnerabilidades encontradas, o que pode ser útil na redução</p><p>dos problemas de segurança do projeto (EVANGELISTA, 2017).</p><p>Relatório de análise dinâmica gerado pela ferramenta Arachni Scanner. Fonte: Arachni (2017).</p><p>Na �gura, é possível visualizar um exemplo de lista contendo as vulnerabilidades encontradas</p><p>durante a execução de testes dinâmicos utilizando a ferramenta Arachni Scanner.</p><p>Tanto a execução das análises estáticas quanto a execução de análises dinâmicas podem ser</p><p>apoiadas por ferramentas especializadas para tais atividades, inclusive, é recomendável a</p><p>utilização delas, uma vez que o trabalho pode ser automatizado em alguns casos, fazendo com</p><p>que se ganhe tempo nos processos de testes, tornando as veri�cações realizadas também</p><p>con�áveis.</p><p>A ferramenta SonarQube possibilita a realização de testes estáticos para softwares</p><p>desenvolvidos em diversas linguagens de programação, tais como Java, C#, C, C++, Python, entre</p><p>outras, podendo ser integrada ao processo de qualidade de software por meio de estratégias de</p><p>CI. Suporta integrações com as principais ferramentas de versionamento de código, como</p><p>GitHub, Azure DevOps, BitBucket, GitLab, entre outras. Possui versões open source e pagas e</p><p>pode ser utilizada como uma grande aliada na detecção de falhas de segurança de código.</p><p>Nesse sentido, a diretriz deve conter:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Visualização de uma das interfaces da ferramenta SonarQube. Fonte: SonarQube (2021).</p><p>Existem outras ferramentas disponíveis para a execução de análises estáticas, por exemplo,</p><p>SonarCloud, a qual, assim como a SonarQube, suporta diversas linguagens de programação e</p><p>possui integração com várias plataformas de versionamento de códigos. É possível utilizar essa</p><p>ferramenta de forma gratuita em projetos públicos (open source), porém, caso haja necessidade</p><p>de integrá-la em projetos particulares, é preciso consultar os preços vigentes do plano de</p><p>licenciamento.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Visualização da interface de relatório de detecção da ferramenta SonarCloud. Fonte: SonarCloud (2021).</p><p>O importante a se considerar na adoção de ferramentas de apoio para as análises é a</p><p>possibilidade de integração delas com o ambiente utilizado para o processo de integração</p><p>contínua no ciclo de vida do software, as linguagens de programação suportadas pela</p><p>ferramenta, os valores de licenciamento, o suporte e a manutenção disponível.</p><p>De um modo geral, considerando todos esses fatores e adicionando a necessidade eminente de</p><p>se automatizar os testes de segurança nos softwares, conclui-se que não é viável continuar com</p><p>processos de produção de produtos nas software houses sem que haja uma melhoria no</p><p>contexto de veri�cação e validação de segurança.</p><p>A segurança e os testes fazem parte do desenvolvimento de software, logo cabe a nós,</p><p>desenvolvedores, os utilizarmos o quanto antes para validar a aplicação que está sendo</p><p>desenvolvida, pois, quanto antes identi�carmos os problemas relacionados à segurança, o</p><p>prejuízo de um retrabalho será menor.</p><p>Videoaula: teste de segurança e ferramentas</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre o teste de segurança e as ferramentas.</p><p>Videoaula: resolução da situação-problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>No início desta aula, você foi apresentado ao desa�o de melhorar a segurança do software</p><p>produzido pela empresa em que trabalha e, para isso, deverá auxiliar na resolução das seguintes</p><p>perguntas:</p><p>1. Como adicionar testes de segurança neste software, considerando que já existe o processo</p><p>de testes do software produzido?</p><p>2. Quais etapas do ciclo de produção do software poderão ser introduzidas nos testes de</p><p>segurança?</p><p>3. Como garantir que esses testes conseguirão capturar falhas de segurança que não são</p><p>visíveis quando o teste ocorre no produto de forma funcional?</p><p>Para responder a estes questionamentos, é importante analisar o cenário apresentado</p><p>anteriormente, quando foram descritas as tecnologias utilizadas (PHP, Laravel, PostgreSQL,</p><p>Bootstrap, MongoDB), o ambiente de versionamento (Git) e a existência de um processo que</p><p>prevê testes funcionais no software.</p><p>Diante das informações já apresentadas, para responder ao primeiro questionamento</p><p>acerca da</p><p>adição de testes de segurança no software, considere a implantação de testes de segurança</p><p>baseados em análises estáticas, sendo estes capazes de validarem o código do produto de</p><p>software, indo além do processo de testes funcionais já realizados.</p><p>Desta forma, será possível garantir que, antes mesmo de se fechar uma versão funcional, as</p><p>possíveis brechas de segurança sejam identi�cadas e corrigidas, o que já responde também à</p><p>última pergunta.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Para a implantação das análises estáticas que são propostas, considere a adoção de</p><p>ferramentas que possam ser implantadas no ambiente de versionamento do código, assim,</p><p>poderão ser aplicados os conceitos de CI junto às validações de segurança antes do fechamento</p><p>de versões.</p><p>É importante também veri�car se a ferramenta escolhida para a análise estática suporta a</p><p>linguagem utilizada no projeto. Considere também averiguar se ela é open source, pois, caso não</p><p>seja e se não existir ferramenta gratuita que realize o mesmo processo, será necessário</p><p>provisionar recursos �nanceiros para a sua adoção.</p><p>Aula 2</p><p>Programação segura</p><p>Introdução da Aula</p><p>Qual é o foco da aula?</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Nesta aula, vamos estudar os fundamentos de ataques de programação maliciosa, codi�cação e</p><p>desenvolvimento de códigos.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>analisar erros de taxonomia de erros de codi�cação;</p><p>esclarecer princípios de canais seguros em programação;</p><p>apontar desenvolvimento de código seguro</p><p>Situação-problema</p><p>Prezado estudante, nesta aula, veremos os fundamentos de desenvolvimento de software</p><p>seguro, como taxonomia e erros de codi�cação, assim como os conceitos de engano, defeito,</p><p>erro e falha, desmisti�cando e trabalhando cada um, para que seja �xado o entendimento correto</p><p>sobre eles.</p><p>Na sequência, abordaremos os conceitos de comunicação por meio de canais seguros em</p><p>programação, através de criptogra�a por meio de SSL e TLS, bem como utilização de VPN para</p><p>comunicação entre ambientes geogra�camente distintos.</p><p>Ainda, estudaremos os fundamentos de ataque e programação maliciosa e software de invasão</p><p>de privacidade e, por �m, falaremos sobre as práticas de desenvolvimento de código seguro em</p><p>linguagens orientadas a objetos.</p><p>Aproveite para conhecer mais sobre desenvolvimento de sistemas e entender a importância do</p><p>conceito de elaboração de sistemas com processo seguro.</p><p>Considere que você foi contratado por uma consultoria para ser analista de desenvolvimento de</p><p>um sistema que auxilia pessoas a controlarem os gastos pessoais. É um sistema web, que tem</p><p>como missão ser fácil e funcionar na maioria nos navegadores mais utilizados.</p><p>Neste projeto, é importante que você trabalhe com desenvolvimento seguro, utilizando</p><p>tecnologias web, como HTML, CSS, Javascript e PHP, e banco de dados MySQL, que são</p><p>tecnologias sólidas, as quais possibilitam o desenvolvimento de sistemas com interface rica</p><p>para o usuário.</p><p>No entanto, por estar em um ambiente web, é importante se preocupar com a segurança no</p><p>desenvolvimento do sistema. Desta forma, após criar algumas funcionalidades, você começa a</p><p>se questionar se o que está desenvolvendo possui segurança o su�ciente e se, após</p><p>disponibilizar o sistema web na internet para os usuários, caso ocorram tentativas de ataque, os</p><p>dados presentes no seu sistema estarão seguros.</p><p>Para terminar a proposta de desenvolvimento descrita e ter certeza de que o seu</p><p>desenvolvimento está produzindo um software seguro, acompanhe o conteúdo abordado nesta</p><p>aula.</p><p>Siga em frente na busca pelo conhecimento!</p><p>Desenvolvimento de software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O desenvolvimento de software não é uma atividade trivial, pois envolve vários processos com</p><p>diferentes níveis de complexidade e responsabilidade, sendo uma atividade apoiada pela área da</p><p>computação denominada Engenharia de Software.</p><p>Uma das atividades do ciclo de desenvolvimento de software é a realização de testes funcionais</p><p>ou de segurança. A atividade de testes é amparada por técnicas de Engenharia de Software, que</p><p>têm por objetivo fornecer melhores práticas para o processo de veri�cação de falhas e erros. A</p><p>classi�cação de erros, denominada taxonomia, faz parte desse processo.</p><p>De acordo com o Dicionário Aurélio (FERREIRA, 2010), taxonomia é a ciência que se dedica à</p><p>classi�cação; técnica de classi�cação ou distribuição sistemática em categorias. No contexto de</p><p>software, é comum a utilização da taxonomia como uma ferramenta que permite a classi�cação</p><p>e organização de diferentes termos integrados, em uma área de conhecimento ou domínio,</p><p>fornecendo uma estrutura de�nida, com mecanismos para realizar a identi�cação, a atribuição e</p><p>a execução de ações dentro de um domínio, de maneira clara, provendo soluções e gerando</p><p>conhecimento (VILLALÓN et al., 2015).</p><p>É importante compreender que, no âmbito do software e do seu processo de produção, mais</p><p>especi�camente nas etapas de testes, os termos engano, defeito, erro e falha são tratados de</p><p>formas distintas.</p><p>Bordignon e Silva (2020) a�rmam que o termo engano faz referência à ação humana que produz</p><p>um defeito. O termo defeito, por sua vez, representa a de�nição incorreta de dados gerados por</p><p>engano humano.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Neste contexto, problemas de sintaxe cometidos por programadores são considerados defeitos.</p><p>O termo erro representa o estado inconsistente de um programa ou uma ação inesperada dele,</p><p>decorrente de um defeito presente nele. Já a falha representa um resultado do que se espera,</p><p>sendo ocasionada por um erro.</p><p>Não existe um padrão para elaboração de taxonomia de erros de software no que diz respeito a</p><p>nomenclaturas. Existem vários modelos taxonômicos com foco em linguagens de programação</p><p>especí�cas. Esta multiplicidade é ocasionada pelo fato de que cada linguagem possui</p><p>características distintas ao lidar com tarefas, como processamento paralelo, acesso à memória,</p><p>entre outros (KIM; SOLOMON, 2014).</p><p>Um exemplo aplicado à taxonomia são as categorizações dos tipos de exceções e erros que</p><p>podem ser capturadas/disparadas na linguagem Java.</p><p>Hierarquia de exceptions e errors da linguagem Java. Fonte: JournalDev.</p><p>A utilização de tratamento de exceções/erros na codi�cação facilita a compreensão de erros que</p><p>possam surgir ao longo da utilização do software, tornando otimizado o processo de correção do</p><p>software.</p><p>_____</p><p>� Assimile</p><p>Um código desenvolvido para ler um arquivo no formato txt utilizando a linguagem Java com</p><p>uma codi�cação insegura, do ponto de vista de tratamento de exceções, não teria um ponto de</p><p>escape caso o arquivo repassado como parâmetro para ser aberto não fosse encontrado.</p><p>Observe um exemplo no código a seguir:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Linguagem Java com uma codi�cação insegura. Fonte: elaborada pelo autor.</p><p>Com as devidas correções, adicionam-se os blocos try/catch, para o tratamento de exceção do</p><p>tipo FileNotFoundException (exceção de arquivo não encontrado), deste modo, caso o arquivo</p><p>informado “arquivo.txt” não seja encontrado, o programa não sofrerá uma interrupção de</p><p>execução sem recuperação de estado. Veja, a seguir, as correções implementadas:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Correção implementada. Fonte: elaborada pelo autor.</p><p>_____</p><p>� Re�ita</p><p>É muito comum encontrar softwares que param de funcionar quando uma determinada entrada</p><p>de dados, processamento ou ação realizada neles não gera um resultado suportado. Geralmente,</p><p>esses eventos são descritos com a expressão “o software quebrou”.</p><p>Uma das formas de prevenir esse tipo de comportamento no software é a utilização correta de</p><p>tratamento de exceções, quando, no momento da codi�cação, o programador implementa o</p><p>controle de possíveis exceções que possam ser geradas na execução de métodos e/ou</p><p>processamentos no software.</p><p>Infelizmente, essa prática ainda não é adotada por todos os desenvolvedores, o que ocasiona</p><p>várias paradas inesperadas em softwares, diminuindo</p><p>a qualidade desses produtos e gerando</p><p>insatisfação nos usuários. Além disso, essas falhas, quando interrompem parte de algum</p><p>processamento no software, podem ocasionar perda, corrupção ou até mesmo exposição de</p><p>dados e/ou estrutura do sistema, tornando-o menos seguro..</p><p>_____</p><p>Além da utilização de mecanismos para o tratamento de exceções em runtime (tempo de</p><p>execução), como a utilização de try e catch, é importante abordar a comunicação entre os</p><p>componentes de sistemas utilizando canais seguros.</p><p>Considerando a comunicação entre sistemas, para que se ganhe segurança no processo, pode-</p><p>se recorrer à utilização de estratégias de autenticação para certi�car a veracidade da identidade</p><p>do remetente e do destinatário das mensagens trocadas, como também utilizar técnicas de</p><p>criptogra�a, para que a mensagem trafegada esteja protegida no percurso até o seu destino.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Criptogra�a. Fonte: elaborado pelo autor.</p><p>Uma estratégia adotada para criar um canal seguro de comunicação é a utilização de Virtual</p><p>Perimeter Network (VPN), compreendida em português como uma rede privada virtual. Através</p><p>de uma VPN, é possível criar um túnel de comunicação seguro para o tráfego de informações</p><p>entre os sistemas, independentemente da localização geográ�ca deles, graças à utilização da</p><p>internet.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Exemplo de arquitetura VPN. Fonte: GTA UFRJ (2015).</p><p>Além das técnicas já descritas para a criação de canais seguros de comunicação, uma</p><p>alternativa é a utilização de certi�cados digitais com a utilização de chaves públicas e privadas.</p><p>Essa comunicação pode ser realizada com a utilização dos protocolos Secure Sockets Layer</p><p>(SSL) ou Transport Layer Security (TLS), seu sucessor.</p><p>_____</p><p>� Assimile</p><p>Quando se acessa um ambiente web, seja um site ou um sistema, o protocolo utilizado por</p><p>padrão é o Hypertext Transfer Protocol (HTTP), sem a utilização de criptogra�a na comunicação,</p><p>sendo assim, um canal de comunicação não seguro.</p><p>Desenvolvedores podem adicionar certi�cados aos seus sistemas web e sites, tornando a</p><p>conexão e a troca de informações entre cliente e servidor seguras por meio de criptogra�a, deste</p><p>modo, o protocolo que passa a ser utilizado é o Hypertext Transfer Protocol Secure (HTTPS).</p><p>_____</p><p>Sistemas que não utilizam canais de comunicação seguros e que não são implementados</p><p>seguindo boas práticas de Engenharia de Software são mais propícios a ataques, seja por meio</p><p>de softwares desenvolvidos para explorar vulnerabilidades conhecidas, seja através de</p><p>programação realizada por pessoas com conhecimento técnico su�ciente para tal ação.</p><p>A maioria dos softwares desenvolvidos necessita de conexão com bancos de dados e com</p><p>outros sistemas para que seja possível cumprir seu propósito de existência (KIM; SOLOMON,</p><p>2014). Sabendo que esses sistemas estão interligados por meio de uma rede de comunicação</p><p>baseada em protocolos, é possível explorar essa arquitetura de comunicação por meio de</p><p>softwares denominados sniffers.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Sniffers, que em tradução livre signi�ca “farejadores”, são softwares capazes de realizar uma</p><p>varredura em uma rede de comunicação Local Area Network (LAN), identi�cando os pacotes de</p><p>dados que trafegam por ela. Deste modo, é possível interceptar esses pacotes e realizar a análise</p><p>do conteúdo deles. Caso a informação contida em cada pacote não esteja criptografada, será</p><p>visualizada sem grandes di�culdades, o que pode ser um problema para a privacidade.</p><p>O Wireshark é um software do tipo sniffer muito popular, sendo bastante utilizado por</p><p>pro�ssionais de segurança no monitoramento de redes corporativas. Possui documentação bem</p><p>elaborada e constante atualização.</p><p>Interface do software Wireshark. Fonte: Wireshark (2021).</p><p>Videoaula: Wireshark</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre Wireshark.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Prática de desenvolvimento de código seguro em linguagens orientadas a</p><p>objetos</p><p>Os softwares do tipo sniffers também podem ser empregados em testes de segurança de</p><p>sistemas, visto que será possível analisar a comunicação dos sistemas desenvolvidos e a</p><p>possível exposição de informações durante a troca de dados com elementos externos ao</p><p>sistema.</p><p>Durante a codi�cação de softwares, é importante observar alguns aspectos de segurança</p><p>descritos por Weeler (2015 apud CARVALHO, 2017):</p><p>Con�dencialidade: apenas pessoas autorizadas dever possuir acesso às informações</p><p>privadas.</p><p>Integridade: dados podem ser modi�cados ou apagados por pessoas autorizadas.</p><p>Disponibilidade: dados devem ser acessíveis a pessoas autorizadas em tempo hábil.</p><p>Além da observação destes aspectos, Carvalho (2017) de�nem que a maneira mais comum de</p><p>se garantir que um código produzido seja seguro é por meio da utilização de padrões de</p><p>codi�cação, que reduzem a ocorrência de vulnerabilidades de código.</p><p>A utilização do paradigma orientado a objetos facilita a adesão de padrões seguros ao projeto de</p><p>software, visto que ele proporciona uma estrutura que facilita a organização do código, a</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>manutenção dele e a possibilidade de se trabalhar com frameworks integrados (MANZANO;</p><p>COSTA JUNIOR, 2014).</p><p>A exemplo de frameworks que já possuem implementação, para a linguagem Java é muito</p><p>utilizado, na atualidade, o framework Spring com implementações Spring Security.</p><p>A seguir veja o exemplo de utilização OAuth2 com Java e Spring:</p><p>OAuth2 com Java e Spring. Fonte: elaborada pelo autor.</p><p>O framework PDO (PHP Data Objects) também é um bom exemplo de aplicação do paradigma</p><p>orientado a objetos junto à codi�cação segura, que pode ser utilizado no desenvolvimento de</p><p>softwares com a linguagem PHP em funcionalidades que precisam de conexão com bancos de</p><p>dados (MANZANO; COSTA JUNIOR, 2014).</p><p>A seguir vejo o exemplo de execução de consulta SQL segura utilizando PDO em PHP:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>PDO em PHP. Fonte: elaborada pelo autor.</p><p>Você é analista de sistemas e iniciou um projeto sobre o desenvolvimento de um sistema web</p><p>para auxiliar pessoas a controlarem os gastos pessoas utilizando as tecnologias HTML, CSS,</p><p>Javascript e PHP e o banco de dados MySQL.</p><p>Após criar algumas funcionalidades, você começa a se questionar se o que está desenvolvendo</p><p>possui segurança o su�ciente e se, após disponibilizar na internet para os usuários, caso</p><p>ocorram tentativas de ataque, os dados presentes no seu sistema estarão seguros.</p><p>Para esta validação de segurança no desenvolvimento do seu sistema, considere os seguintes</p><p>aspectos:</p><p>Videoaula: programação segura</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a programação segura.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Conclusão</p><p>Você é analista de sistemas e iniciou um projeto sobre o desenvolvimento de um sistema web</p><p>para auxiliar pessoas a controlarem os gastos pessoas utilizando as tecnologias HTML, CSS,</p><p>Javascript e PHP e o banco de dados MySQL.</p><p>Após criar algumas funcionalidades, você começa a se questionar se o que está desenvolvendo</p><p>possui segurança o su�ciente e se, após disponibilizar na internet para os usuários, caso</p><p>ocorram tentativas de ataque, os dados presentes no seu sistema estarão seguros.</p><p>Para esta validação de segurança no desenvolvimento do seu sistema, considere os seguintes</p><p>aspectos:</p><p>De�na um paradigma de codi�cação de sistemas, utilizando orientação a objetos, pois</p><p>consegue-se estabelecer um sistema mais seguro e com melhores pontos de veri�cação,</p><p>reuso e segurança. Apesar de sistemas desenvolvidos utilizando o conceito de orientação a</p><p>objetos tendem a ser</p><p>mais lentos, isso não é percebido nos dias de hoje.</p><p>Utilize frameworks para facilitar e agilizar o desenvolvimento seguro das funcionalidades:</p><p>conexão com banco de dados, validação de sessão do usuário, autenticação do usuário,</p><p>cache/cookies do sistema.</p><p>Realize uma análise estática (como apresentado na aula anterior) para veri�cação de</p><p>segurança linha a linha do seu código.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Utilize um sniffer, como apresentado na aula e recomendado no exemplo, para validar o</p><p>tráfego da informação criptografada entre o cliente (navegador web) e o servidor do seu</p><p>sistema.</p><p>A seguir, são destacadas sugestões que podem adicionadas ao seu projeto, conferindo maior</p><p>segurança na codi�cação:</p><p>Adicione certi�cado SSL/TLS na hospedagem do seu sistema, pois isso garantirá que um</p><p>canal de comunicação segura será estabelecido quando os usuários acessarem seu</p><p>sistema.</p><p>Utilize PDO para a conexão com banco de dados e CRUD com o seu sistema, deste modo,</p><p>você garantirá facilidade no processo de codi�cação e interação com o banco de dados,</p><p>bem como adicionará segurança na comunicação com ele.</p><p>Utilize um framework con�ável para o back-end em PHP, por exemplo, Laravel, para facilitar</p><p>o processo de codi�cação.</p><p>Aula 3</p><p>DEVSECOPS: aplicação da segurança em ambiente de desenvolvimento</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, estudaremos os fundamentos de ambiente seguro utilizando o conceito de</p><p>DevSecOps.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>analisar a distribuição de mecanismos de segurança em ambiente web de</p><p>desenvolvimento;</p><p>aplicar o conceito de controle de acessos e vulnerabilidades em ambiente de</p><p>desenvolvimento;</p><p>interpretar ferramentas para aplicação do conceito DevSecOps na prática.</p><p>Situação-problema</p><p>Estudante, bem-vindo a mais esta aula, na qual trabalharemos conceitos importantes</p><p>relacionados ao desenvolvimento seguro e DevSecOps, um tema que vem ganhando destaque,</p><p>pois une conceitos de segurança, desenvolvimento e operações de um time de tecnologia.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Falaremos sobre os fundamentos de ambiente seguro utilizando o conceito de DevSecOps, a</p><p>importância deste ambiente e suas características dentro das empresas e nos ambientes de</p><p>tecnologia.</p><p>Abordaremos a distribuição de mecanismos de segurança em ambiente web de</p><p>desenvolvimento, bem como o controle de acessos e vulnerabilidades nele.</p><p>Ainda, apresentaremos ferramentas para aplicação do conceito DevSecOps em empresas que</p><p>trabalham com tecnologia e mostraremos como usar o conceito de DevSecOps para melhorar a</p><p>segurança no desenvolvimento de sistemas.</p><p>Neste momento, você faz parte de uma equipe de desenvolvimento de sistemas em uma</p><p>empresa de tecnologia que desenvolve sistemas de vendas de aulas on-line de inglês para jovens</p><p>e adultos para empresas prestadoras de serviços.</p><p>Ao comprar este serviço, espera-se que o cliente tenha acesso a uma plataforma segura e</p><p>estável tanto para a compra das aulas quanto para realizar as aulas e acompanhar sua evolução</p><p>ao longo do processo de aprendizagem.</p><p>No entanto, a consultoria que você trabalha utiliza métodos tradicionais para o controle de</p><p>produção de software: processos de gestão de código-fonte realizados de forma manual, testes</p><p>de segurança realizados de forma manual, implantação/distribuição de software realizada sem</p><p>automação.</p><p>Devido aos vários problemas encontrados na execução desses processos, como gasto de tempo</p><p>excessivo em atividades repetitivas, falha humana na execução de tarefas, entre outros, a equipe</p><p>de desenvolvimento �cou encarregada de encontrar uma forma de melhorar os processos da</p><p>linha de produção, para que seja possível otimizar o tempo e minimizar as falhas.</p><p>Seu trabalho enquanto participante dessa equipe é elaborar propostas de melhorias de</p><p>processos e adoção de tecnologia para automação das atividades com relação ao</p><p>desenvolvimento seguro.</p><p>Aproveite o momento de aprendizagem para evoluir no quesito segurança em engenharia de</p><p>software.</p><p>DevSecOps</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>O conceito DevSecOps é aplicado à segurança em um ambiente colaborativo entre</p><p>desenvolvimento e operações, oriundo do DevOps. Vem ao encontro da necessidade de entender</p><p>o que é importante para o desenvolvimento de sistemas, considerando a segurança no modelo e</p><p>no processo de desenvolvimento, garantindo agilidade e estabilidade no sistema para o usuário.</p><p>A origem do DevSecOps vem do DevOps, uma cultura presente na engenharia de software, que</p><p>coloca em um único ambiente de trabalho, como parceiros e parte de uma equipe, os</p><p>desenvolvedores de software (Dev) e o pessoal da equipe de operação do sistema (Ops), com o</p><p>objetivo de melhorar o trabalho, a comunicação entre os pares e fortalecer o comprometimento</p><p>de cada membro com a defesa da automação e o monitoramento das etapas do</p><p>desenvolvimento de sistemas, desenvolvendo dentro de uma cultura ágil, com pequenos ciclos</p><p>de veri�cação e versionamento nas entregas (FREEMAN, 2021).</p><p>Conforme Freeman (2021), a necessidade de produção e entrega de produtos de software de</p><p>forma rápida, con�ável e segura tem exigido que as equipes de tecnologia evoluam em sua</p><p>organização e em seus processos, utilizando a cultura DevOps. Deste modo, faz-se necessário</p><p>integrar as áreas de operação e infraestrutura com a área de desenvolvimento, adicionando a</p><p>área de segurança e forjando o conceito de DevSecOps.</p><p>Essa integração se dá como representado na �gura. As pessoas envolvidas no desenvolvimento</p><p>trabalham em um ciclo de desenvolvimento, engajadas com suas responsabilidades e</p><p>comprometimento, para que agora, com o DevSecOps, se possa ter, além do monitoramento e do</p><p>versionamento das entregas, segurança em todo o processo.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>DevSecOps: integração entre áreas. Fonte: Red Hat (2021).</p><p>Trabalhar com a cultura DevSecOps dentro da empresa é pensar em segurança desde o início do</p><p>desenvolvimento, arrumando o modelo para que o ciclo de desenvolvimento envolva conceitos</p><p>de desenvolvimento seguro e este esteja integrado no processo como um todo (WILSON, 2020).</p><p>De acordo com Wilson (2020), incluir a segurança desde o início do processo signi�ca</p><p>automatizar os processos que envolvam segurança, sem permitir que essa automatização</p><p>comprometa o desempenho.</p><p>Para isso, é preciso inserir ferramentas no processo que integrem a segurança de forma</p><p>orgânica, dentro da cultura, não somente escolhendo repositórios que validem a segurança, mas</p><p>fazendo escolhas que permitam e contribuam para o desempenho de todo o processo com</p><p>segurança.</p><p>A segurança deve estar inclusa em todo o ciclo de vida de uma aplicação, e não somente como</p><p>parte de uma camada para completar o ciclo. Ela deve estar integrada a este ciclo, como</p><p>apresentado na �gura.</p><p>Usar o conceito de pipeline para trabalhar dentro da cultura DevSecOps permite dividir em etapas</p><p>o processo de instruções de uma rotina que está sendo executada. Essa divisão é executada por</p><p>parte da CPU, trazendo um ganho substancial para o processamento, permitindo colocar mais de</p><p>uma instrução para execução ao longo do processo, evitando, desta forma, os longos ciclos de</p><p>desenvolvimento, dos quais se quer fugir hoje.</p><p>Os grandes ciclos de desenvolvimento contribuem para a morosidade do processo e não</p><p>colaboram em nada para a produtividade e segurança. Engana-se quem acredita que esse</p><p>processo longo possa garantir maior segurança no desenvolvimento, pois não está atrelado a</p><p>este requisito.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Trazer as equipes de segurança para junto das equipes DevOps desde o início de um ciclo</p><p>permite a integração de atividades e os resultados para a produtividade. Trabalhando de forma</p><p>colaborativa, a ideia é que os desenvolvedores possam ser ajudados pelas equipes de segurança</p><p>no desenvolvimento de um código mais seguro, com informações sobre ameaças (em um</p><p>ambiente web ou não) conhecidas (HSU, 2018).</p><p>Por se tratar</p><p>de um modelo bastante novo e de uma cultura de desenvolvimento em</p><p>aprimoramento constante, é importante que as equipes sejam capacitadas a todo momento. A</p><p>capacitação em DevSecOps, ou mesmo em DevOps primeiramente, é importante até para de�nir</p><p>como essa cultura será ajustada, para que efetivamente apresente resultados �� empresa.</p><p>Mudar a cultura não implica somente colocar um modelo sugerido para funcionar, mas, sim, fazer</p><p>com que as equipes envolvidas entendam a importância e os resultados alcançados com o uso</p><p>deste novo modelo e a mudança da cultura. É importante que os pro�ssionais vejam a</p><p>necessidade de evoluir neste sentido, para que o seu trabalho apareça e �que, além de melhor,</p><p>mais fácil e com melhor qualidade.</p><p>Ao ter condições de automatizar processos com segurança, o ganho é fundamental para o</p><p>resultado das entregas, com menos retrabalho e vulnerabilidades, as quais poderiam ser</p><p>mapeadas antes das entregas serem feitas e, muitas vezes, terem de ser ajustadas no �nal. Isso</p><p>traz desconforto e desgaste para a equipe técnica, bem como para o cliente, usuário do sistema.</p><p>De acordo com Mittal, Sharma e Sheoran (2021), a aplicação do conceito de DevSecOps inclui</p><p>três etapas básicas dentro da cultura DevOps:</p><p>Ao longo do desenvolvimento do sistema, a equipe de desenvolvimento realiza testes de</p><p>segurança no aplicativo antes de �nalizá-lo, cujo objetivo é identi�car problemas, erros e</p><p>vulnerabilidades antes de entregá-lo para o usuário.</p><p>Os problemas encontrados durante o teste do aplicativo são repassados para os</p><p>desenvolvedores corrigirem antes de entregaram esta fase como concluída.</p><p>Os problemas são corrigidos junto aos desenvolvedores e em equipe – segurança e</p><p>desenvolvimento – antes da entrega para a operação.</p><p>A contínua veri�cação de segurança no processo de desenvolvimento de software, abrangendo</p><p>todas as etapas do ciclo de vida, garante um produto com maior segurança (MITTAL; SHARMA;</p><p>SHEORAN, 2021).</p><p>Além da atuação dos desenvolvedores no processo de DevSecOps, o papel desempenhado pelo</p><p>time de segurança de TI é fundamental para que se identi�quem falhas de segurança nas etapas</p><p>de produção de software.</p><p>Videoaula: DevSecOps</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre DevSecOps.</p><p>Desenvolvimento, ferramentas e linguagens</p><p>Como apresentado no início desta aula, trabalhar em um ciclo curto é mais produtivo do que em</p><p>ciclos mais longos, como no passado. Um modelo de desenvolvimento a ser utilizado para estas</p><p>entregas é o Scrum, ou mesmo o XP (Extreme Programming). Este segundo modelo, o XP, é base</p><p>do DevOps, que foi iniciado neste conceito, conforme Freeman (2021) e Kim et al. (2020).</p><p>A de�nição dos princípios de DevOps e DevSecOps se baseia nos princípios CAMS (Culture,</p><p>Automation, Measurement e Sharing), de�nidos por Damon Edwards e John Willis.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Princípios CAMS. Fonte: adaptado de Sconetto (2020).</p><p>Com base nestes conceitos e considerando os elementos do DevSecOps apresentados no</p><p>quadro, é importante compreender que, conforme se avança em automações de processos,</p><p>pode-se chegar ao ponto de alteração da necessidade da equipe de operações trabalhando no</p><p>produto produzido, gerando, assim, o contexto de NoOps.</p><p>De acordo com Sconetto (2020), NoOps é um modelo impulsionado pelo aumento de</p><p>automações de TI junto à computação em nuvem, no qual, na realidade, o trabalho em equipe</p><p>melhoraria o uso de ferramentas automatizadas, com menor intervenção humana. Desta forma,</p><p>uma alteração na forma de trabalho da equipe de operações, focada na melhoria contínua e na</p><p>busca por ferramentas que possam suportar os melhores resultados para esta cultura.</p><p>Usar NoOps é trabalhar com plataformas servidas como serviços, geralmente representadas</p><p>com a sigla PaaS (Plataform as a Service). Empresas, como AppFrog e Heroku, descrevem seus</p><p>produtos como plataformas NoOps.</p><p>Independentemente desta evolução ou mudança, uma das etapas importantes do</p><p>desenvolvimento de software é o controle das alterações/implementações realizadas. Este</p><p>processo envolve a realização da gestão do código-fonte produzido pelos desenvolvedores, a �m</p><p>de manter um histórico do que foi adicionado, alterado ou até mesmo excluído.</p><p>A adoção de ferramentas de versionamento permite que seja implementado o conceito de</p><p>repositório supervisionado, seja em um ambiente servidor na própria rede em que se desenvolve</p><p>os produtos de software ou até mesmo em um servidor em nuvem (KIM et al., 2020).</p><p>Um fator importante a ser considerado neste processo de controle de ambiente dos códigos é a</p><p>proteção deles. Para tanto, pode-se adotar técnicas de controle de acesso por meio de</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>credenciais, como usuário e senha, e-mail e senha, ou até mesmo utilização de certi�cado digital</p><p>e/ou chaves SSH para autenticação de usuário.</p><p>_____</p><p>� Re�ita</p><p>O acesso indevido ao repositório de códigos permite que pessoas não autorizadas tenham</p><p>acesso a toda a produção intelectual realizada para o produto de software.</p><p>Vazamentos desta natureza podem trazer consequências negativas, visto que estarão visíveis a</p><p>arquitetura implementada no projeto, a lógica utilizada para os requisitos levantados e os</p><p>critérios de segurança utilizados, causando o comprometimento da segurança implementada</p><p>para o produto.</p><p>_____</p><p>Algumas ferramentas disponíveis para a atividade de versionamento de código fornecem a</p><p>funcionalidade de controle de acessos, como é o caso das plataformas baseadas no GIT –</p><p>GitHub e GitLab – ou mesmo a ferramenta Tortoise SVN.</p><p>Além do controle de acesso ao ambiente repositório dos códigos e arquivos referentes ao projeto</p><p>de software, faz-se necessário também o controle de vulnerabilidades encontradas no projeto. É</p><p>muito comum utilizar-se de uma estrutura de armazenamento de arquivos do projeto que facilite</p><p>a identi�cação de vulnerabilidades e destaque a correção delas. Esse processo pode ser</p><p>realizado por meio de organização de branches.</p><p>Uma branch representa uma rami�cação do projeto, em outras palavras, para acompanhamento</p><p>e possíveis modi�cações, sem atrapalhar o desenvolvimento do sistema (KIM et al., 2020). É</p><p>possível criar várias branches em um ambiente distribuído de código, permitindo que se tenha o</p><p>controle automatizado dos processos de SAST, CI e CD, facilitando as atividades operacionais de</p><p>veri�cação de segurança no código, integração contínua e implantação contínua, na cultura</p><p>DevOps, agora incorporando a segurança.</p><p>As automações no repositório podem ser realizadas por meio de criação de work�ows, que são</p><p>tarefas pré-de�nidas para serem executadas de acordo com determinados eventos disparados</p><p>para as branches no repositório de código, como apresentado na �gura, na qual é possível ver um</p><p>�uxo de informação e como ela trafega na cultura DevOps, onde o repositório tem como objetivo</p><p>acolher os códigos que estão sendo desenvolvidos e de forma automatizada testá-los antes da</p><p>entrada em produção.</p><p>Se necessário, neste momento, os erros devem ser corrigidos manualmente, com a intervenção</p><p>humana ou, por vezes, de forma automatizada, quando possível. O envolvimento do</p><p>desenvolvedor, nestes casos, é na veri�cação de problemas que não se resolvam por processos</p><p>automatizados e necessitem da intervenção humana.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Fluxo de CI e CD (cultura DevOps). Fonte: elaborada pelo autor.</p><p>_____</p><p>� Exempli�cando</p><p>Algumas linguagens possuem mais vulnerabilidades do que outras, mas isso não quer dizer que</p><p>são ruins, e sim que se deve ter um cuidado maior com segurança. Falhas de segurança em um</p><p>ambiente de versionamento de códigos baseado em Git foram identi�cadas quando usada a</p><p>linguagem PHP.</p><p>Por alguma razão desconhecida, foram realizados testes em projetos que utilizavam esta</p><p>linguagem, assim como submissões</p><p>de alterações no código do projeto PHP em nome de</p><p>membros que mantêm o projeto. As alterações incluíam adição de backdoor ao código-fonte da</p><p>linguagem PHP, para ser utilizado como possível meio de entrada nos servidores PHP em um</p><p>futuro ataque de hackers.</p><p>Por conta da utilização de uma boa estrutura de revisão do código por meio de branches até que</p><p>seja feita a liberação de versão, foi possível que os revisores encontrassem as vulnerabilidades</p><p>propositais e as removessem do projeto.</p><p>Mais uma vez, é possível visualizar a importância da utilização de ferramentas e estruturas</p><p>adequadas para controle de qualidade e segurança dos projetos de software. As vulnerabilidades</p><p>em linguagens e ambiente podem acontecer em qualquer plataforma. Em ambiente web, os</p><p>problemas de segurança são maiores ainda, assim como devem ser os cuidados. Por estar em</p><p>um ambiente em que o domínio é menor, as vulnerabilidades aparecem mais.</p><p>_____</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Distribuição de mecanismos de segurança em ambiente WEB de</p><p>desenvolvimento</p><p>Ao se escolher ferramentas de apoio para que seja possível implementar uma estrutura de</p><p>desenvolvimento de software baseada nos princípios de DevSecOps, é necessário levar em</p><p>consideração alguns fatores importantes, como a integração contínua CI (Continuous</p><p>Integration), a implantação contínua CD (Continuous Delivery) e a realização de análises</p><p>estáticas SAST no código.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Automação de processos. Fonte: elaborado pelo autor.</p><p>A �gura ilustra os processos inerentes à aplicação de DevSecOps, que podem ser apoiados por</p><p>ferramentas já descritas anteriormente: repositórios Git, análise estática SonarCloud, CircleCI,</p><p>entre outros.</p><p>Considerando um cenário de aplicação de DevSecOps, é possível realizar a integração de</p><p>validação automática de segurança por meio da análise estática utilizando, por exemplo, um</p><p>repositório na plataforma GitHub, como forma de trabalhar com versionamento e distribuição.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Exemplo de utilização da plataforma GitHub. Fonte: captura de tela da plataforma GitHub elaborada pelo autor.</p><p>Todo o monitoramento realizado a cada submissão de código por meio de push para uma branch</p><p>(envio de código do ambiente local do desenvolvedor para o ambiente de versionamento no</p><p>GitHub) pode ser feito utilizando uma ferramenta de SAST, por exemplo, o SonarCloud,</p><p>caracterizando, assim, a distribuição de mecanismos de controle e segurança no ambiente. Na</p><p>�gura, é possível ver a interface desta ferramenta para a integração da segurança no processo de</p><p>DevSecOps.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Interface inicial da ferramenta SonarCloud. Fonte: captura de tela da ferramenta SonarCloud elaborada pelo autor.</p><p>Após a realização da integração das plataformas GitHub e SonarCloud para um projeto/branch, é</p><p>possível monitorar automaticamente, por meio de con�guração de actions e work�ows, as</p><p>veri�cações estáticas de código.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Interface de con�guração de actions e work�ows do GitHub. Fonte: captura de tela do GitHub elaborada pelo autor.</p><p>Estando todas as con�gurações em conformidade para correto funcionamento, após a</p><p>submissão de código para o ambiente de repositório, automaticamente ocorrerá a análise SAST,</p><p>sendo possível visualizar o resultado da análise por meio da interface da ferramenta SonarCloud.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Interface de visualização do resultado de análise SonarCloud. Fonte: Dev (2019).</p><p>Conceito de controle de acessos e vulnerabilidades em ambiente de</p><p>desenvolvimento</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Já é sabido que ambiente 100% seguro não existe, mas cabe a nós, desenvolvedores, cuidarmos</p><p>e aplicarmos planos de segurança para que se possa conseguir um ambiente o mais seguro</p><p>possível, mitigando os riscos que possam gerar impacto para os negócios por meio de sistemas</p><p>mal construídos e inseguros.</p><p>Conforme Kim e Solomon (2014), a recomendação é trabalhar preventivamente na segurança,</p><p>promovendo uma gestão de vulnerabilidades, que é compreendida pelo processo de</p><p>identi�cação, levantamento de possibilidades, análise dos riscos e vulnerabilidades encontrados</p><p>e classi�cação e tratamento desses riscos e vulnerabilidades.</p><p>A forma de tratar essas vulnerabilidades existentes e identi�cadas, assim como os riscos, é</p><p>buscar as fraquezas, manter um controle sobre elas e trabalhar nas ações para minimizar os</p><p>impactos no ambiente.</p><p>A gestão desses riscos é administrada com um controle efetivo e de perto, minimamente feito</p><p>por uma planilha, na qual serão elencados os riscos e as vulnerabilidades e sua ordem de</p><p>probabilidade e impacto que possam causar, caso aconteçam.</p><p>A equipe de segurança buscará sempre uma solução para a detecção de falhas e atuará na sua</p><p>correção, bem como apoiará a equipe de desenvolvimento, no sentido de alterar os códigos de</p><p>forma a deixá-los mais seguros, para trabalharem de forma e�ciente, sem onerar o ambiente e</p><p>manter a segurança. Além de realizar implantações de mecanismos de segurança, a �m de</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>garantir que os atualizados sejam mais e�cazes e que trabalhem de forma automatizada, com</p><p>foco em melhoria contínua.</p><p>As ferramentas para este ambiente são diversas, por exemplo, ferramentas para monitoramento</p><p>de rede, como sniffers, que permitem a visibilidade do comportamento da aplicação que foi</p><p>desenvolvida e por onde esta passa na estrutura da operação do ambiente.</p><p>O comportamento desta aplicação pode comprometer a segurança e gerar lentidão na rede.</p><p>Desta forma, o melhor caminho no trabalho em conjunto desta equipe do DevSecOps é entender</p><p>por que a aplicação se comporta desta forma, avaliar o impacto da alteração do ambiente</p><p>(nuvem ou não), do ambiente de desenvolvimento (linguagem ou servidores) e o nível de</p><p>segurança que se aplica, se pode ou não �exibilizar, sem comprometer (KIM; SOLOMON, 2014).</p><p>Esta análise é feita sempre com uma equipe multidisciplinar após a saída dos resultados das</p><p>ferramentas. Trabalha-se em conjunto para apresentar os resultados. Muitos ambientes possuem</p><p>ferramentas que trabalham de forma automatizada, sem intervenção humana, e a possibilidade</p><p>de erros é menor.</p><p>Identi�car fontes de vulnerabilidade dentro deste ambiente é importante para poder se proteger e</p><p>traçar um plano de combate. O quadro mostra algumas dessas fontes e como é possível</p><p>identi�cá-las.</p><p>Fontes de vulnerabilidades. Fonte: elaborado pelo autor.</p><p>Agora que a identi�cação das fontes possíveis de vulnerabilidade está de�nida, partiremos para</p><p>a elaboração de uma solução para estas possíveis vulnerabilidades.</p><p>Inicialmente, elaborar um plano, preparando o processo e como ele deve ser executado, para</p><p>validar as vulnerabilidades e de�nir a melhor solução.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Após a identi�cação das vulnerabilidades, identi�car as pessoas que possam contribuir com a</p><p>solução, as quais não são as responsáveis pelos problemas, mas as que cuidarão para que as</p><p>vulnerabilidades sejam resolvidas e tratadas. Normalmente, as pessoas de suporte e operações</p><p>podem contribuir muito com a solução, por conseguirem mapear, por meio de ferramentas de</p><p>monitoramento, o que se deve fazer.</p><p>Mapear os riscos e estabelecer uma modelagem das ameaças, de forma que seja feito o</p><p>monitoramento de aplicações e DevSecOps. Determinar as importâncias das vulnerabilidades e</p><p>de�nir as prioridades de cada uma delas, assim como as métricas e a medida de importância de</p><p>cada um dos riscos.</p><p>Montar um plano de ação para atender às vulnerabilidades, caso elas aconteçam.</p><p>Identi�car ferramentas e elaborar uma planilha para tratar os riscos e automatizar os processos,</p><p>para que, nos próximos ciclos de desenvolvimento, eles não se repitam e, desta forma, seja</p><p>possível trabalhar na melhoria contínua (KIM; SOLOMON, 2014).</p><p>Este plano pode acompanhar ferramentas, como SAST, DAST ou mesmo CloudCkeckr, como</p><p>detalhado a seguir.</p><p>_____</p><p>� Assimile</p><p>Por mais que seja possível automatizar as tarefas de linha de produção do produto de software, é</p><p>importante compreender que a atuação humana ainda se faz necessária, visto que as</p><p>ferramentas não possuem a capacidade de analisar situações da forma que o ser humano faz.</p><p>Tenha sempre em mente que ferramentas otimizam e agilizam os processos, mas a capacidade</p><p>de pensamento crítico e tomada de decisão complexa são mais bem exercidas pelo ser humano.</p><p>_____</p><p>Videoaula: conceito de controle de acessos e vulnerabilidades em ambiente</p><p>de desenvolvimento</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre o conceito de controle de acessos e vulnerabilidades em ambiente de</p><p>desenvolvimento.</p><p>Ferramentas para aplicação do conceito DevSecOps na prática</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Na prática, o uso de DevSecOps sempre funciona melhor com ferramentas corretas para isso.</p><p>Em ambientes de nuvem, o uso do CloudCheckr integra a segurança e o monitoramento de</p><p>atividades para várias nuvens.</p><p>E o CloudChecker permite veri�cações automatizadas, com segurança para as aplicações</p><p>desenvolvidas na cultura DevSevOps.</p><p>As ferramentas SAST (Static Application Security Testing) conseguem implementar uma</p><p>veri�cação e teste de código por meio de varredura. Automatiza o processo de veri�cação de</p><p>erros e cabe dentro do pipeline de DevSecOps, na entrega contínua. Procure uma solução em</p><p>ferramenta que funcione no modelo SAST.</p><p>É inegável que a automação dos processos de linha de produção de software traz inúmeros</p><p>ganhos, tanto para a qualidade do produto quanto para a segurança dele.</p><p>A correta implementação de DevSecOps proporciona a construção de softwares mais seguros,</p><p>robustos e com maior nível de qualidade.</p><p>Continue �rme na busca pelo conhecimento!</p><p>Videoaula: resolução da situação-problema</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre a resolução da situação-problema.</p><p>Conclusão</p><p>Com as explicações necessárias para o entendimento do DevSecOps, sua missão �cou mais fácil</p><p>na solução do problema nesta empresa que utiliza métodos tradicionais para o controle de</p><p>produção de software. Devido aos vários problemas encontrados na execução destes processos,</p><p>você e a equipe em que trabalha �caram encarregados de encontrar uma forma de melhorar os</p><p>processos da linha de produção, para que seja possível otimizar o tempo e minimizar as falhas,</p><p>com foco em DevSecOps e automação dos processos.</p><p>O primeiro ponto que você deve observar é a falta de automação das etapas:</p><p>1. Versionamento de código.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>2. Integração do ambiente do desenvolvedor com o ambiente de repositório de forma</p><p>automatizada.</p><p>3. Realização de testes de segurança.</p><p>4. Entrega de versão funcional para ambiente produtivo (cliente).</p><p>Elabore um plano e identi�que as falhas e vulnerabilidades do modelo de desenvolvimento dos</p><p>sistemas, bem como na codi�cação, sendo mais difícil validar o código-fonte.</p><p>Você pode sugerir a adoção de uma ferramenta baseada em Git, com implantação em um</p><p>servidor local da empresa em que trabalha, ou a utilização de uma plataforma, como GitHub.</p><p>Atente-se para os valores mensais na utilização da plataforma.</p><p>Também, pode recomendar a utilização de alguma ferramenta que proporcione integração com o</p><p>ambiente de versionamento de código, para que seja possível a execução dos testes estáticos de</p><p>segurança, proporcionando, assim, maior con�abilidade nas veri�cações de segurança.</p><p>Por �m, indique a criação de work�ows de deploy para a entrega automatizada em ambiente</p><p>produtivo.</p><p>Justi�que estes processos e estas ferramentas como parte da adoção do conceito de</p><p>DevSecOps.</p><p>Referências</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>ARACHNI. Arachni web application security scanner framework. 2017. Disponível em:</p><p>https://www.arachni-scanner.com/. Acesso em: 20 jan. 2022.</p><p>EVANGELISTA, V. N. Implantação de Ciclo de Desenvolvimento Seguro para PCI-DSS. 2017, 48f.</p><p>Projeto de Trabalho Acadêmico (Pós-graduação em Redes com Ênfase em Segurança da</p><p>Informação) – Instituo CEUB de Pesquisa e Desenvolvimento, Brasília, 2017.</p><p>MICROSOFT. Developing modern software. Microsoft, 2021. Disponível em: https://bit.ly/3jZdHiU.</p><p>Acesso em: 20 jan. 2022.</p><p>SONARCLOUD. Disponível em: https://sonarcloud.io/. Acesso em: 20 jan. 2022.</p><p>SONARQUBE. Disponível em: https://www.sonarqube.org/. Acesso em: 20 jan. 2022.</p><p>WEIDEMAN, G. Testes de Invasão: uma introdução prática ao hacking. São Paulo: Novatec, 2014.</p><p>a resposta da pergunta anterior, o sistema respeita o</p><p>conceito e/ou a característica que havia violado anteriormente. Agora, com os</p><p>colaboradores acessando somente os dados da sua empresa, os quais estão autorizados a</p><p>ver, o conceito de con�dencialidade passa a ser respeitado.</p><p>Vulnerabilidade 2: ao inserir registros, todos percebem uma interrupção do sistema de cerca de</p><p>cinco minutos. Durante esse tempo, não é possível inserir, editar ou visualizar registros.</p><p>Qual conceito de software seguro está sendo violado?</p><p>O sistema, por determinado tempo, nega serviço a seus usuários. Considerando os</p><p>conceitos e as características aprendidos, pode-se salientar dois pontos principais:</p><p>disponibilidade e e�ciência. Primeiramente, o sistema deve �car disponível o maior tempo</p><p>possível para que seus usuários consigam realizar as operações. Em segundo lugar, um</p><p>sistema não pode tornar as tarefas morosas ao usuário, mas, ao contrário, deve ajudá-lo a</p><p>completar suas tarefas de maneira e�ciente. Claramente há um problema de performance</p><p>no sistema.</p><p>Como o sistema deveria ter se comportado?</p><p>O sistema deveria �car disponível o tempo todo durante o horário de trabalho de seus</p><p>usuários. O sistema não deveria tomar tanto tempo deles em operações corriqueiras, mas</p><p>teria que �car disponível independentemente de seu uso concorrente. O sistema também</p><p>deveria ter recursos computacionais su�cientes para que seus usuários completassem</p><p>suas tarefas e�cientemente.</p><p>Por que o sistema deveria ter se comportado da forma sugerida?</p><p>Com o sistema disponível durante todo o expediente de seus usuários e executando as</p><p>funções de maneira �uida, agora respeita o conceito de disponibilidade e a característica de</p><p>software resiliente de e�ciência.</p><p>Vulnerabilidade 3: o colega C consegue remover despesas da empresa Y.</p><p>Qual conceito de software seguro está sendo violado?</p><p>Segundo a tabela, a única operação que o colega C está autorizado a realizar é a de</p><p>inserção de novas despesas. O fato de que ele consegue remover despesas de sua</p><p>empresa faz com que ele esteja alterando um dado sem autorização, o que afeta a</p><p>integridade dos dados da aplicação.</p><p>Como o sistema deveria ter se comportado?</p><p>O sistema deveria ter respeitado sua política de acesso e deveria apenas permitir que</p><p>analistas de compras conseguissem inserir novas despesas. Nenhum botão “remover”</p><p>deveria sequer aparecer para esse tipo de usuário.</p><p>Por que o sistema deveria ter se comportado da forma sugerida?</p><p>Quando um usuário consegue alterar apenas dados a que ele tem autorização, podemos</p><p>dizer que o sistema respeita o conceito de integridade.</p><p>Vulnerabilidade 4: ao inserir uma receita ao meio-dia, o colega B recebe um alerta de que o</p><p>sistema está em manutenção e que voltará em tempo indeterminado.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual conceito de software seguro está sendo violado?</p><p>O conceito de disponibilidade é violado quando o sistema �ca indisponível no horário em</p><p>que deveria funcionar. O fato de o sistema ter entrado em modo de manutenção, por si só,</p><p>não é o que viola o conceito. Sistemas podem ter manutenções agendadas e geralmente o</p><p>são em horários de baixo ou de nenhum acesso.</p><p>Como o sistema deveria ter se comportado?</p><p>O sistema deveria �car disponível e não poderia ter entrado em manutenção durante o</p><p>expediente dos usuários. Caso haja manutenção, esta pode ser agendada fora do horário</p><p>comercial, por exemplo, de madrugada.</p><p>Por que o sistema deveria ter se comportado da forma sugerida?</p><p>Com o sistema disponível ao longo do expediente dos usuários e sem interrupções, ele</p><p>respeita o conceito de disponibilidade.</p><p>Vulnerabilidade 5: quando todos fazem alterações ao mesmo tempo, o sistema �ca indisponível</p><p>por alguns segundos e dá a impressão de lentidão no carregamento.</p><p>Qual conceito de software seguro está sendo violado?</p><p>O de disponibilidade e o de e�ciência.</p><p>Como o sistema deveria ter se comportado?</p><p>O sistema deveria funcionar de maneira �uida e sem travamentos.</p><p>Por que o sistema deveria ter se comportado da forma sugerida?</p><p>O sistema agora respeita sua disponibilidade e sua e�ciência, fazendo com que as tarefas</p><p>sejam executadas mais rapidamente pelos usuários.</p><p>Considerando todas as vulnerabilidades anteriores, após a apresentação aos juízes, sua equipe</p><p>recebe nota máxima e avança para a próxima fase do hackathon.</p><p>Aula 2</p><p>Processo de segurança no desenvolvimento de software</p><p>Introdução da Aula</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá aprender sobre o processo de segurança no desenvolvimento de software.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>esclarecer o conceito de software;</p><p>discutir sobre as abordagens que são tratadas na Engenharia de Software;</p><p>interpretar as categorias de produtos de software de segurança.</p><p>Situação-problema</p><p>O que é necessário para construir um software seguro? Muitas empresas acreditam que a</p><p>resposta para essa pergunta está em simplesmente contratar um especialista de segurança.</p><p>Porém, a realidade é que somente ter um pro�ssional com a responsabilidade de projetar,</p><p>desenvolver e testar software seguro não é o bastante. O ideal é que todos os pro�ssionais</p><p>envolvidos no projeto desempenhem suas funções com um pensamento na segurança.</p><p>Para que isso aconteça, é necessário que todos obtenham treinamento em processos de</p><p>desenvolvimento de software seguro, os quais unem o que já é bem estabelecido através da</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>engenharia de software e dão um novo foco à segurança.</p><p>Com cada vez mais elementos de nossas vidas controlados pela tecnologia, nunca precisamos</p><p>tanto de sistemas em que pudéssemos con�ar. E a única maneira de atingir esse objetivo é</p><p>através de processos bem estabelecidos de segurança no desenvolvimento de software.</p><p>Mas não são todos os sistemas que são desenvolvidos e que recebem manutenção a partir</p><p>desse procedimento. Em um mundo onde as empresas possuem nossos dados, os quais as</p><p>permitem saber muito mais sobre nós do que nós mesmos, é imprescindível que essas</p><p>aplicações sejam desenvolvidas de maneira segura e resiliente. É o caso da rede de</p><p>supermercados que descobriu que uma adolescente estava grávida antes mesmo de seu próprio</p><p>pai (HILL, 2012). Imagine em que um acesso irrestrito de um usuário não autorizado a dados</p><p>como esses poderia resultar.</p><p>A partir disso, é possível perceber que não é necessário ser um especialista em segurança nem</p><p>pensar 24 horas por dia como um hacker. Muitas vulnerabilidades se encontram visíveis a olho</p><p>nu e poderiam simplesmente ser percebidas com requisitos bem descritos (MERKOW;</p><p>RAGHAVAN, 2011). Estudos também mostram que os custos para remediar vulnerabilidades e</p><p>falhas são bem menores no início do projeto, nas fases de análise de requisitos e de projeto.</p><p>Outra forma de aumentar as chances de perceber antecipadamente as vulnerabilidades em um</p><p>projeto é utilizar métodos ágeis. Esses processos quebram o projeto em pequenas partes e, de</p><p>modo iterativo, executam as fases do ciclo de vida de desenvolvimento de software para cada</p><p>uma delas. Imagine que precisamos desenvolver um carro.</p><p>No método tradicional (ou modelo cascata), seria necessário desenvolver cada componente do</p><p>carro (rodas, motor, transmissão, etc.) e, somente no �nal, poderíamos testar o carro montado.</p><p>No método ágil, criaríamos um carro somente com o essencial para que ele pudesse ser testado</p><p>e, a cada iteração, adicionaríamos mais componentes até chegarmos ao resultado �nal</p><p>esperado. Dessa forma, conseguiríamos identi�car todos os problemas do carro nos primeiros</p><p>momentos do projeto e poderíamos resolver suas falhas e vulnerabilidades antes que isso se</p><p>tornasse mais custoso.</p><p>Você foi convidado a participar do hackathon de uma conhecida empresa de e-commerce, e seu</p><p>objetivo na competição é realizar a decomposição funcional, categorizar e ranquear as ameaças</p><p>na fase de projeto para seu novo site. Você foi escolhido para executar essas tarefas referentes</p><p>ao módulo de check-out. Você recebe o seguinte documento de requisitos:</p><p>Possibilita a �nalização de um pedido (check-out):</p><p>O sistema deve permitir ao usuário fechar um pedido do carrinho de compras. Através dessa</p><p>página, deverá ser possível visualizar os itens do carrinho, selecionar endereço de entrega,</p><p>escolher método de pagamento e fechar pedido.</p><p>1. Visualizar os itens do carrinho:</p><p>A interface deve permitir visualizar os itens adicionados ao carrinho, alterar a quantidade de</p><p>cada item através de botões de aumentar e diminuir e de campo de texto editável e remover</p><p>um item através de botão. Ao realizar essas operações, a interface deverá atualizar</p><p>automaticamente os valores para cada item e o total.</p><p>2. Selecionar endereço de entrega:</p><p>A interface deve permitir visualizar e selecionar endereços previamente cadastrados, editá-</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>los e inserir novos através de um formulário com CEP, estado, cidade, logradouro, número e</p><p>complemento. Ao atualizar o CEP, a interface deverá atualizar o valor do frete.</p><p>3. Escolher método pagamento:</p><p>A interface deve permitir escolher o tipo de pagamento entre boleto bancário, cartão de</p><p>crédito e de débito e carteira virtual. No caso de cartão de crédito e de débito, um</p><p>formulário para os dados aparecerá e o usuário poderá inserir número do cartão, validade,</p><p>CVV e nome do titular. No caso de carteira virtual, um pop-up surgirá para autenticação</p><p>com o serviço.</p><p>4. Fechar pedido:</p><p>A interface deve exibir um botão para con�rmar pedido. O sistema deve validar todos os</p><p>dados de endereço e de pagamento. Se esses dados estiverem válidos, o sistema inserirá</p><p>um novo pedido no banco de dados e exibirá uma tela com os dados do pedido concluído.</p><p>Caso contrário, o sistema mostrará um alerta de erro. Caso o boleto tenha sido escolhido</p><p>como meio de pagamento, um link para baixá-lo deve ser disponibilizado.</p><p>A partir disso, você deve:</p><p>Identi�car a superfície de ataque para cada um dos requisitos (1, 2, 3 e 4).</p><p>Identi�car possíveis vulnerabilidades de cada requisito.</p><p>Categorizar cada vulnerabilidade.</p><p>Classi�car cada vulnerabilidade com uma nota de 1 a 5, onde 1 é baixo e 5 é altíssimo risco,</p><p>e justi�car.</p><p>O software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Prezado estudante, o software se tornou onipresente no mundo digital de hoje, embutido em</p><p>quase todos os tipos de produtos e de serviços modernos em nosso entorno. Do ponto de vista</p><p>social, o software fornece �exibilidade, inteligência e segurança para todos os sistemas e</p><p>equipamentos complexos que suportam e que controlam as diferentes infraestruturas-chave de</p><p>nossa sociedade: transporte, comunicação, energia, indústria, negócios, governo, saúde,</p><p>entretenimento, entre outros. Além disso, tem um impacto profundo em nossa vida social, sendo</p><p>mais visível na forma como mudou a maneira como comunicamos, interagimos e colaboramos</p><p>em nossa vida digital, seja pro�ssional, seja pessoal.</p><p>Do ponto de vista econômico, o software é um dos principais motores da economia mundial,</p><p>capaz de aumentar a produtividade e a competitividade em todas as atividades de negócios.</p><p>Softwares permitem, por exemplo, a setores competitivos da indústria inovarem e crescerem e os</p><p>apoiam na promoção de ideias disruptivas que levam produtos e serviços intensivos a se</p><p>tornarem dominantes no mercado. Dessa forma, a partir de um papel instrumental na economia</p><p>digital, softwares estão integrados na maioria dos produtos que usamos hoje e são importantes</p><p>facilitadores da inovação, do crescimento e do emprego em quase todos os setores da</p><p>economia.</p><p>Resumidamente, é possível a�rmar que softwares vêm desempenhando um papel predominante</p><p>nos últimos anos em relação ao nosso mundo digital e que continuarão sendo uma força motriz</p><p>para sua construção e transformação contínua. Sendo o software um capacitador principal para</p><p>a inovação, fornece recursos e serviços diferenciados, com tempo de resposta curto e alta</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>velocidade para o mercado. Softwares são as engrenagens que fazem com que a maiorias dos</p><p>nossos produtos e serviços modernos funcionem.</p><p>Considerando toda a complexidade e toda a utilidade dos softwares na sociedade moderna,</p><p>surge a necessidade de uma área de engenharia capaz de fornecer métodos, técnicas,</p><p>mecanismos, linguagens e ferramentas que promovam a produção de software em si. Sendo a</p><p>construção de software essencial, a Engenharia de Software orienta os envolvidos em um projeto</p><p>a como construir sistemas de maneira e�ciente, e�caz e segura e com garantias de qualidade</p><p>con�áveis (tais como segurança, proteção, privacidade, desempenho e con�ança).</p><p>_____</p><p>� Assimile</p><p>A Engenharia de Software é uma área de estudo cujo foco é voltado para o desenvolvimento de</p><p>sistemas, considerando custos e qualidade adequados ao software (MERKOW; RAGHAVAN,</p><p>2010).</p><p>_____</p><p>Historicamente, a Engenharia de Software surgiu no �nal da década de 1960, em uma</p><p>conferência realizada pela Organização do Tratado do Atlântico Norte (OTAN). Um grupo</p><p>formado por cientistas renomados se reuniu durante uma semana em uma conferência</p><p>patrocinada pelo comitê Cientí�co da OTAN, cujo objetivo era chamar a atenção para o problema</p><p>do uso de softwares de computadores. Dessa conferência surgiu um relatório com</p><p>aproximadamente 135 páginas, as quais tratavam da necessidade de que softwares fossem</p><p>construídos com base em princípios práticos e teóricos.</p><p>No quadro é possível conhecer alguns dos princípios mais importantes da Engenharia de</p><p>Software.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Princípios de Engenharia de Software. Fonte: elaborado pelo autor.</p><p>As abordagens</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Além dos princípios elencados anteriormente, existem abordagens que são tratadas na</p><p>Engenharia de Software, como o Ciclo de Vida de Desenvolvimento de Software, conhecido por</p><p>SDLC. Este, além de uma abordagem bem de�nida e sistemática praticada para o</p><p>desenvolvimento de software con�ável e de alta qualidade, é composto por diferentes fases para</p><p>projetar, construir e manter sistemas de informações.</p><p>É possível conhecer as diferentes fases do ciclo de vida de desenvolvimento de software na</p><p>�gura.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Fases do ciclo de vida de desenvolvimento de software. Fonte: elaborada pelo autor.</p><p>Essas fases podem ser caracterizadas da seguinte maneira:</p><p>Fase de iniciação: nesta etapa é necessária a elaboração de diferentes artefatos</p><p>relacionados ao projeto, tais como documento de visão, escopo, de�nição da equipe e</p><p>autorização das partes interessadas.</p><p>Fase de planejamento e projeto: nesta etapa são construídos os documentos de</p><p>detalhamento de escopo do projeto, é elaborado o planejamento de construção e de</p><p>arquitetura do sistema e há a especi�cação de requisitos de negócios.</p><p>Fase de codi�cação, execução e testes: nesta fase são realizadas as atividades de</p><p>programação do sistema, de códigos-fonte, de rotinas de compilação e de testes de</p><p>unidade.</p><p>Fase de implantação e encerramento: neste ponto são construídos o plano de</p><p>implementação e manutenção do sistema, além do documento de encerramento do</p><p>projeto.</p><p>De maneira mais geral, todas essas fases estão descritas nos diferentes modelos de processo</p><p>de desenvolvimento de software existentes atualmente, além de serem conhecidas em todos os</p><p>ciclos de desenvolvimento de processos. Por isso, antes de de�nir uma metodologia de</p><p>desenvolvimento de processo, é necessário estudar qual sua relação e qual o suporte fornecido</p><p>por ela em relação ao preconizado pela SDLC.</p><p>_____</p><p>Vocabulário</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Processos de software são um conjunto de atividades relacionadas que levam à produção de um</p><p>produto de software. Esses processos podem ser de�nidos como tarefas necessárias para a</p><p>execução de um objetivo de�nido a �m de desenvolver um software de alta qualidade.</p><p>_____</p><p>O desenvolvimento de um software seguro é tarefa desa�adora, pois ameaças so�sticadas de</p><p>segurança continuam a se acumular. O software seguro é um componente-chave para indivíduos,</p><p>para empresas</p><p>e para governos e afeta aplicativos e infraestrutura essenciais. Nessa mesma</p><p>linha, podemos considerar também o chamado Clico de Vida de Desenvolvimento de Software</p><p>Seguro (SDL).</p><p>Um dos processos de desenvolvimento de software seguro mais conhecidos foi desenvolvido</p><p>pela Microsoft com o objetivo de aumentar a con�abilidade da segurança do software. A SDL</p><p>consiste em uma metodologia que visa garantir uma melhoria de segurança aos</p><p>desenvolvedores de sistemas. Normalmente, é descrita em fases que incluem aspectos de</p><p>requisitos e design, que envolvem tópicos de segurança e de privacidade em nível básico,</p><p>considerando atividades e avaliação de riscos de segurança e modelagem de ameaças.</p><p>A Microsoft SDL inclui cinco fases: treinamento, política e recursos organizacionais, requisitos e</p><p>design, implementação, veri�cação e liberação e resposta. Além disso, inclui atividades de</p><p>segurança obrigatórias executadas como parte de um processo de desenvolvimento de software.</p><p>As fases são:</p><p>Treinamento, política e recursos organizacionais: fase voltada para o entendimento de</p><p>segurança e de privacidade dos recursos utilizados. Nesta etapa, devemos reduzir ao</p><p>máximo o número de gravidade das vulnerabilidades encontradas no desenvolvimento do</p><p>sistema.</p><p>Requisitos e design: essa fase é o momento indicado para de�nição do que é o sistema e</p><p>do que ele deve fazer quando for implantado, além de ser essencial para a construção da</p><p>análise de risco e de privacidade do projeto. É neste ponto que devemos pensar sobre os</p><p>controles de segurança a serem projetados.</p><p>Implementação: o foco da fase de implementação é construir as práticas recomendadas</p><p>para a prevenção antecipada, para remoção e para detecção de falhas de segurança do</p><p>código.</p><p>Veri�cação: essa fase envolve aspectos abrangentes e nos orienta como fazer para que o</p><p>código atenda aos requisitos de segurança e de privacidade preestabelecidos.</p><p>Liberação e resposta: o foco desta fase é liberar o projeto para entrega. Por isso, ela inclui</p><p>desde o planejamento para execução efetiva de processos de manutenção pós-lançamento</p><p>até a resolução de aspectos de vulnerabilidades de segurança que poderiam ocorrer</p><p>futuramente.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Segurança de software. Fonte: elaborado pelo autor.</p><p>_____</p><p>� Exempli�cando</p><p>Todas as ferramentas e estratégias mais atualizadas para a segurança no desenvolvimento de</p><p>software se concentram nos seguintes objetivos: automatizar o máximo possível, não atrasar os</p><p>desenvolvedores, eliminar classes inteiras de bugs e personalizar soluções e correções</p><p>necessárias.</p><p>Videoaula: ferramentas de teste e de segurança e produtos de proteção de</p><p>aplicativos - parte II</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre as ferramentas de teste e de segurança e produtos de proteção de</p><p>aplicativos - parte II</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Categorias de produtos de software de segurança</p><p>Embora existam várias categorias de produtos de software de segurança, destacam-se duas:</p><p>ferramentas de teste de segurança e produtos de proteção de aplicativos. O primeiro pertence a</p><p>um mercado mais maduro, com dezenas de fornecedores conhecidos, sendo alguns deles leões</p><p>da indústria de software, como IBM, CA e MicroFocus. As ferramentas de testes de segurança</p><p>podem ser categorizadas como:</p><p>Teste estático: analisa o código em pontos �xos durante seu desenvolvimento. Isso é útil</p><p>para que os desenvolvedores veri�quem seu código à medida que o escrevem e para</p><p>garantir que os problemas de segurança sejam introduzidos durante o desenvolvimento.</p><p>Teste dinâmico: analisa o código em execução. Isso é mais útil, pois pode simular ataques</p><p>a sistemas de produção e revelar padrões de ataque mais complexos, que usam uma</p><p>combinação de sistemas.</p><p>Teste interativo: combina elementos de teste estático e dinâmico.</p><p>Teste móvel: é projetado especi�camente para ambientes móveis e pode examinar como</p><p>um invasor pode aproveitar o sistema operacional móvel e os aplicativos executados nele</p><p>em sua totalidade.</p><p>Runtime Application Self-Protection (RASP): são ferramentas que podem ser consideradas</p><p>uma combinação de teste e de blindagem. Elas fornecem uma medida de proteção contra</p><p>possíveis ataques de engenharia reversa. As ferramentas RASP monitoram continuamente</p><p>o comportamento do software, o que é útil principalmente em ambientes móveis. As</p><p>ferramentas RASP podem enviar alertas, encerrar processos errados ou encerrar o próprio</p><p>aplicativo se ele estiver comprometido.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Ofuscação de código: hackers costumam usar métodos de ofuscação para ocultar seu</p><p>malware, e as ferramentas que permitem ao desenvolvedor fazer isso podem ajudar a</p><p>proteger seu código de ataques.</p><p>Ferramentas de criptogra�a e antiviolação: são métodos que podem ser usados para</p><p>impedir os bandidos de obterem informações sobre o seu código.</p><p>_____</p><p>� Re�ita</p><p>Ficar à frente dos hackers é, em grande parte, evitar os erros comuns que outras pessoas</p><p>provavelmente cometerão, tornando-se um alvo mais difícil de ser atacado do que outros.</p><p>Embora nenhum perímetro ou medidas de segurança de software sejam totalmente à prova de</p><p>hackers, seguir essas práticas recomendadas ajuda a fazer com que o seu sistema se torne mais</p><p>seguro contra as investidas de hackers, mantendo, assim, você e seus dados seguros por mais</p><p>um dia. Mas, você acha que apenas investir em codi�cação e metodologia segura é su�ciente?</p><p>Qual seria o impacto desse investimento se você não tivesse pro�ssionais capacitados para</p><p>trabalhar com essas metodologias?</p><p>_____</p><p>Nesta aula você pôde aprender quais são os ciclos de desenvolvimento seguro, bem como</p><p>entender a importância do SDLC e como aplicá-lo, de forma correta, no desenvolvimento de</p><p>sistemas. Lembre-se de que o processo de desenvolvimento seguro é composto de muitas</p><p>variáveis e que, por meio da combinação delas, tentamos entregar um sistema estável, seguro e</p><p>com qualidade para o cliente.</p><p>Videoaula: resolução da situação-problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a  resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Estudante, para resolver esta situação-problema é importante:</p><p>Identi�car a superfície de ataque para cada um dos requisitos (1, 2, 3 e 4).</p><p>Para responder à primeira demanda, precisamos relembrar o que é superfície de ataque: é</p><p>todo e qualquer ponto de entrada do usuário ao sistema (por exemplo, campo de texto,</p><p>campo seletor, botão, etc.). Vamos identi�car os pontos da superfície de ataque para cada</p><p>requisito:</p><p>1. Campo editável de quantidade, botões de quantidade e botão de remover.</p><p>2. Campos de CEP, estado, cidade, logradouro, número e complemento.</p><p>3. Campos de número do cartão, validade, CVV e nome do titular.</p><p>4. Botão de con�rmar pedido.</p><p>Outros itens comuns a todos os requisitos, dependendo da arquitetura do sistema, podem contar</p><p>com: console do navegador, APIs, bibliotecas e banco de dados.</p><p>Identi�car possíveis vulnerabilidades de cada requisito.</p><p>1. Injeção de script/SQL no campo de quantidade: vários cliques rápidos nos botões podem</p><p>causar quebra da integridade do valor total.</p><p>2. Injeção de script/SQL nos campos: várias modi�cações no CEP podem causar quebra da</p><p>integridade do valor do frete.</p><p>3. Injeção de script/SQL nos campos de cartão: geração de boleto inconsistente, uso de</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>cartão de crédito clonado/roubado.</p><p>4. Vários cliques no botão de con�rmar pedido podem gerar múltiplos pedidos iguais.</p><p>Categorizar cada vulnerabilidade.</p><p>1. Injeção de script/SQL no campo de quantidade: adulteração de dados, recusa de serviço</p><p>(modi�cando informação</p><p>essencial ao funcionamento da aplicação) e revelação de</p><p>informação con�dencial (fazendo consulta ao banco de dados); vários cliques rápidos nos</p><p>botões podem causar quebra da integridade do valor total: adulteração de dados.</p><p>2. Injeção de script/SQL nos campos: adulteração de dados, recusa de serviço</p><p>(modi�cando informação essencial ao funcionamento da aplicação) e revelação de</p><p>informação con�dencial (fazendo consulta ao banco de dados); várias modi�cações no</p><p>CEP podem causar quebra da integridade do valor do frete: adulteração de dados.</p><p>3. Injeção de script/SQL nos campos de cartão: adulteração de dados, recusa de serviço</p><p>(modi�cando informação essencial ao funcionamento da aplicação) e revelação de</p><p>informação con�dencial (fazendo consulta ao banco de dados); geração de boleto</p><p>inconsistente: adulteração de dados; uso de cartão de crédito clonado/roubado: spoo�ng.</p><p>4. Vários cliques no botão de con�rmar pedido podem gerar múltiplos pedidos iguais:</p><p>adulteração de dados. Seguem categorias de algumas vulnerabilidades gerais: console do</p><p>navegador: adulteração de dados (injeção de script); APIs: adulteração de dados,</p><p>bibliotecas: revelação de informação con�dencial e recusa de serviço; banco de dados:</p><p>adulteração de dados.</p><p>Classi�car cada vulnerabilidade com uma nota de 1 a 5, onde 1 é baixo e 5 é altíssimo risco,</p><p>para cada critério e justi�car.</p><p>Quadro de vulnerabilidades. Fonte: elaborado pelo autor.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Justi�cativas e comentários. Fonte: elaborado pelo autor.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Aula 3</p><p>Modelos de segurança no ciclo de vida no desenvolvimento de software</p><p>Introdução da Aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá conhecer os modelos de segurança no ciclo de vida no desenvolvimento de</p><p>um software.</p><p>Objetivos gerais de aprendizagem</p><p>Ao longo desta aula, você irá:</p><p>analisar o que são navegadores;</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>debater sobre as práticas para quem busca desenvolver softwares seguros;</p><p>interpretar quando um aplicativo é vulnerável a ataques.</p><p>Situação-problema</p><p>O custo de crimes cibernéticos continua a aumentar a cada ano. De acordo com Mani (2018), em</p><p>um único dia, há cerca de 780.000 registros de dados perdidos devido a violações de segurança,</p><p>33.000 novas mensagens de phishing e 4.000 ataques de ransomwares em todo o mundo.</p><p>Muitos dos ataques realizados por cibercriminosos são executados com o uso de</p><p>vulnerabilidades de softwares, as quais, geralmente, são erros de programação ou omissões que</p><p>deixam aplicativos da web, servidores da web ou sites expostos. Cabe aos programadores de</p><p>software criar aplicativos com alto padrão de segurança para evitar que esses ataques ocorram.</p><p>Embora proteger um site ou recurso de rede possa ser uma tarefa difícil, ela se tornou mais fácil</p><p>graças ao trabalho realizado pelo The Open Web Application Security Project (OWASP). O OWASP</p><p>fornece uma lista abrangente de princípios de design de segurança que os programadores devem</p><p>seguir. Isso garantirá que seu aplicativo seja seguro e pode até reduzir drasticamente o risco de</p><p>um ataque cibernético bem-sucedido.</p><p>Mas o que é a OWASP? Trata-se de uma comunidade on-line que produz ferramentas,</p><p>documentação, artigos e tecnologias gratuitas para ajudar as pessoas a proteger seus sites,</p><p>aplicativos da web e recursos de rede. Foi fundada por Mark Curphey, um experiente especialista</p><p>em segurança da informação, em 2001. Seu foco principal é a segurança da web, a segurança de</p><p>aplicativos e a avaliação de vulnerabilidades.</p><p>Prezado estudante, nesta aula, abordaremos tópicos importantes para o seu aprendizado, tais</p><p>como: princípios da segurança de software, desenvolvimento de aplicações web baseadas em</p><p>metodologias elaboradas pela OWASP, além de técnicas de desenvolvimento web seguro.</p><p>Você foi convidado a participar do hackathon de uma conhecida empresa de e-commerce, cujo</p><p>objetivo é elaborar técnicas de prevenção de segurança. Você foi escolhido para executar essas</p><p>tarefas referentes ao módulo de check-out. Você recebe, então, um documento contendo os</p><p>cenários relatados a seguir:</p><p>1. Cenário 1: um aplicativo usa dados não con�áveis na construção da seguinte chamada SQL</p><p>vulnerável:</p><p>String query = "SELECT * FROM accounts WHERE custID = '" + request.getParameter ("id") +</p><p>"'";</p><p>2. Cenário 2: da mesma forma, a con�ança cega de um aplicativo em estruturas pode resultar</p><p>em consultas que ainda são vulneráveis (por exemplo, Hibernate Query Language – HQL):</p><p>Query HQLQuery = session.createQuery ("FROM accounts WHERE custID = '" +</p><p>request.getParameter ("id") + "'");</p><p>Em ambos os casos, o invasor modi�ca o valor do parâmetro ‘id’ em seu navegador para enviar:</p><p>‘ou‘ 1 ’=’ 1. Por exemplo:</p><p>http://example.com/app/accountView?id= 'ou' 1 '=' 1</p><p>Isso muda o signi�cado de ambas as consultas para retornar todos os registros da tabela de</p><p>contas. Ataques mais perigosos podem modi�car ou excluir dados ou até mesmo invocar</p><p>procedimentos armazenados. Sendo assim, você deve:</p><p>Elaborar um plano de prevenção de ataque para os cenários relatados.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Desejo a você, estudante, uma excelente jornada de estudos!</p><p>Os navegadores</p><p>Navegadores se tornaram signi�cativamente mais avançados do que há dez anos. Junto com</p><p>esse avanço, surgiram diversos novos recursos de segurança. Os protocolos de rede que usamos</p><p>para acessar a Internet também avançaram.</p><p>Os navegadores de hoje oferecem um isolamento muito robusto entre sites de diferentes origens,</p><p>seguindo uma especi�cação de segurança conhecida como Same Origin Policy (SOP). Isso</p><p>signi�ca que o site A não pode ser acessado pelo site B, mesmo que ambos estejam abertos ao</p><p>mesmo tempo ou que um esteja incorporado como um frame dentro do outro.</p><p>Os navegadores também aceitam uma nova con�guração de segurança conhecida como Política</p><p>de Segurança de Conteúdo (CSP). O CSP permite que o desenvolvedor de um site especi�que</p><p>vários níveis de segurança, por exemplo se os scripts devem ser executados em linha (no HTML).</p><p>Isso permite que os desenvolvedores da web protejam ainda mais seus aplicativos contra</p><p>ameaças comuns.</p><p>O HTTP, o principal protocolo de envio de tráfego da web, também melhorou do ponto de vista da</p><p>segurança. Segundo Mani (2018), o HTTP adotou protocolos como SSL e TLS, que impõem</p><p>criptogra�a estrita para todos os dados que trafegam pela rede. Isso torna os ataques man-in-</p><p>the-middle muito difíceis de serem executados com sucesso.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Como resultado desses avanços na segurança do navegador, muitos dos mais bem-sucedidos</p><p>fabricantes de hoje estão, na verdade, visando à lógica escrita por desenvolvedores, que é</p><p>executada em seus aplicativos da web. Em vez de direcionar o navegador em si, é muito mais</p><p>fácil violar totalmente um site aproveitando os bugs no código do aplicativo. Felizmente para os</p><p>hackers, os aplicativos da web hoje são muitas vezes maiores e mais complexos do que os</p><p>aplicativos da web do passado.</p><p>Hoje em dia, um aplicativo da web bem conhecido pode ter centenas de dependências de código</p><p>aberto, integrações com outros sites e vários bancos de dados de vários tipos e pode ser servido</p><p>por mais de um servidor da web em mais de um local. Esses são os tipos de aplicativos da web</p><p>que você terá mais sucesso em explorar e nos quais focaremos ao longo desta aula.</p><p>Assim como disseram Rather e Bhatnagar (2015), os sites do passado eram crivados de falhas</p><p>de segurança (em particular, nos níveis do servidor e da rede). Já os aplicativos da web</p><p>modernos trazem uma nova área de superfície para os invasores, a qual está sendo ativamente</p><p>explorada. Da mesma forma, os aplicativos da web do futuro serão mais seguros e os hackers</p><p>provavelmente passarão para uma nova superfície de ataque (talvez soquetes RTC ou web, por</p><p>exemplo).</p><p>A segurança de aplicativos da web trata de proteger a con�dencialidade, a integridade e a</p><p>disponibilidade dos ativos da web de uma organização, bem como a reputação da organização. A</p><p>solução para a</p><p>segurança de aplicativos da web é mais do que tecnologia, pois envolve políticas,</p><p>procedimentos, leis, pessoas e práticas. Além disso, a segurança não é um esforço único, mas</p><p>deve ser um processo contínuo integrado ao ciclo de vida de desenvolvimento de aplicativos.</p><p>A segurança, como outros componentes de aplicativo da web, é mais bem gerenciada se</p><p>planejada na fase inicial do ciclo de vida do aplicativo. Essa estratégia ajudará os gerentes de</p><p>projeto e os pro�ssionais de segurança a estabelecer políticas de segurança, conduzir avaliações</p><p>de riscos e tratar os riscos potenciais de maneira econômica.</p><p>Segundo Al-Fedaghi e Alkandari (2011), o uso de diretrizes de desenvolvimento, como os</p><p>elaborados pela OWASP, é essencial para um Ciclo de Vida de Desenvolvimento de Software</p><p>(SDLC). Considere os seguintes princípios durante a modelagem de ameaças de aplicativos e</p><p>desenvolvimento de aplicativos seguros, como apresentado no quadro:</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Princípios de modelagem. Fonte: elaborado pelo autor.</p><p>Videoaula: navegadores</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre os navegadores.</p><p>As práticas para quem busca desenvolver softwares seguros</p><p>A segurança para o desenvolvimento de software deve levar em consideração muitos fatores.</p><p>Necessidade do cliente, objetivo e demanda por entrega ágil são apenas alguns detalhes na</p><p>rotina de uma equipe de desenvolvimento. O cuidado com a segurança, por exemplo, é essencial</p><p>na aplicação moderna.</p><p>A importância dada à segurança da informação aumenta a con�abilidade do software �nal. Em</p><p>um universo onde o compartilhamento de informações pela internet e entre dispositivos faz parte</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>do dia a dia dos usuários de smartphones, tablets e computadores, a segurança digital será</p><p>fundamental para a criação de novas soluções de TI.</p><p>Dessa forma, falaremos um pouco mais sobre as melhores práticas para quem busca</p><p>desenvolver softwares mais seguros e como garantir que sua equipe crie ferramentas con�áveis.</p><p>Use métodos seguros para transferir e armazenar dados: a política de segurança é a base</p><p>de qualquer rotina que busque mais con�abilidade para seus serviços digitais. Parte disso</p><p>envolve o uso de práticas como PCI-DSS, que aumentam a con�abilidade das trocas de</p><p>informações. A con�dencialidade de uma operação de comunicação, por exemplo, é feita</p><p>por meio de métodos modernos de criptogra�a. O aumento da integridade e da</p><p>autenticidade dos dados é feito por meio de rotinas de veri�cação de pacotes de dados.</p><p>Assim, seja armazenando, processando ou trocando arquivos e informações, tanto o</p><p>remetente quanto o destinatário terão a certeza de que a conexão utilizada é 100% segura.</p><p>Assim, evita-se a captura e o roubo de dados con�denciais.</p><p>Tenha um ambiente de desenvolvimento seguro: uma empresa que lida com o</p><p>desenvolvimento de ferramentas de TI não deve trabalhar apenas para mais segurança</p><p>digital. Ter ambientes físicos livres de vulnerabilidades também é necessário. O acesso aos</p><p>setores relacionados à criação de um sistema deve ser controlado. Além disso, os</p><p>servidores devem ser isolados para evitar seu uso por pessoal não autorizado.</p><p>Use métodos de desenvolvimento seguros: cada programador tem um método de</p><p>desenvolvimento preferido. Independentemente de a equipe optar por trabalhar com um</p><p>método ágil ou com outro mais tradicional, ele deve ser adaptado em busca de práticas</p><p>mais seguras. Assim, sempre que veri�car um código, o engenheiro de software deve</p><p>rastrear possíveis falhas e lacunas que possam comprometer a segurança digital do</p><p>usuário. A mesma atenção deve ser dada ao tamanho dos buffers e das matrizes de</p><p>software, que não devem comprometer a experiência do usuário. Além disso, os códigos de</p><p>erro, durante a compilação, devem ser rastreados e resolvidos rapidamente.</p><p>Sempre revise seu código para violações: realize atividades preventivas voltadas para a</p><p>resistência a tentativas de roubo de informações. Isso pode incluir a revisão constante do</p><p>código, o que pode ser feito por software automatizado ou pela equipe de segurança digital</p><p>da empresa. Durante o estágio de de�nição do design do software, a equipe de</p><p>programadores deve implementar o uso de modelos de ameaça. Eles guiarão os</p><p>desenvolvedores durante os testes e revisões do código. Além disso, ao realizar testes de</p><p>segurança, ataques mais tradicionais devem ser executados para garantir que o programa</p><p>seja con�ável.</p><p>Use KPIs para avaliar sua equipe: KPIs são métricas usadas para avaliar o desempenho de</p><p>uma indústria ou de uma equipe durante um projeto. Por meio deles, os funcionários podem</p><p>aprender mais sobre seu progresso no aprendizado de novas técnicas de trabalho. Para o</p><p>gerente, o KPI representa uma forma simples de medir com mais precisão o conhecimento</p><p>e o desempenho de sua equipe. Quando se trata de segurança digital, os KPIs podem ser</p><p>usados para atribuir padrões de segurança no projeto. Assim, as equipes podem trabalhar</p><p>em busca de novos métodos de segurança no desenvolvimento de software que o protejam</p><p>das ameaças mais comuns no mundo digital, como vírus e injeções de SQL.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Adote um SDL: Security Development Lifecycle (SDL) é um processo de desenvolvimento</p><p>adotado pela Microsoft que envolve o uso de diversos produtos e atividades para criar um</p><p>sistema seguro. Por meio da integração de medidas e da veri�cação dos processos de uma</p><p>organização, o método busca ajudar as empresas a criarem aplicativos mais seguros.</p><p>Qualidade do programa. Fonte: elaborado pelo autor.</p><p>_____</p><p>� Assimile</p><p>Na era da informação, os ataques a computadores, tablets e telefones celulares são cada vez</p><p>mais frequentes. Nesse cenário, o desenvolvedor é forçado a oferecer aplicativos mais seguros</p><p>aos seus usuários. E quando falamos no Brasil, um dos países mais vulneráveis do mundo, a</p><p>implementação de processos de segurança e de boas práticas de desenvolvimento torna-se</p><p>ainda mais importante. Assim, ao criar ferramentas con�áveis, nosso ativo mais importante no</p><p>mundo digital, a informação, estará protegido.</p><p>_____</p><p>� Re�ita</p><p>As metodologias SDL se enquadram em duas categorias: prescritivas e descritivas. As</p><p>metodologias prescritivas aconselham explicitamente os usuários sobre o que fazer. Já os</p><p>descritivos consistem em descrições literais do que outras empresas �zeram.</p><p>_____</p><p>� Exempli�cando</p><p>SDL é dividido em sete etapas:</p><p>Treinamento: envolve o treinamento de todos os membros da equipe.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Requisitos: consiste em veri�car os requisitos necessários para garantir que a segurança e a</p><p>privacidade do usuário sejam totais.</p><p>Design: utilizado para analisar a superfície de ataque da aplicação e para produzir um modelo</p><p>com as principais ameaças do software.</p><p>Implementação: criação de um código com técnicas de programação defensivas com padrões de</p><p>codi�cação.</p><p>Veri�cação: desenvolvido para teste, veri�cação de código e inspeção de documentação.</p><p>Liberação: envolve a criação de um plano de ação que preparará a equipe de suporte para a</p><p>resolução de problemas.</p><p>Resposta: nesta fase, quaisquer bugs ou falhas encontrados após a distribuição do software são</p><p>rastreados e corrigidos.</p><p>_____</p><p>Nesta aula foi apresentado a você como trabalhar com segurança no ambiente web, quais</p><p>cuidados devem ser tomados, como desenvolver sistemas seguros e quais modelos devem ser</p><p>aplicados para garantir que, no desenvolvimento, isso seja respeitado. Além disso, você aprendeu</p><p>também sobre técnicas de desenvolvimento seguro, com o modelo OWASP.</p><p>Videoaula: práticas para quem busca desenvolver softwares seguros</p><p>Este conteúdo</p><p>é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula sobre as práticas para quem busca desenvolver softwares seguros.</p><p>Conclusão</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Um aplicativo é vulnerável a ataques quando:</p><p>Os dados fornecidos pelo usuário não são validados, �ltrados ou higienizados pelo</p><p>aplicativo.</p><p>Consultas dinâmicas ou chamadas não parametrizadas sem escape ciente do contexto são</p><p>usadas diretamente no interpretador.</p><p>Dados hostis são usados em parâmetros de pesquisa de mapeamento relacional de objeto</p><p>(ORM) para extrair registros con�denciais adicionais.</p><p>Os dados hostis são usados diretamente ou concatenados de forma que o SQL, ou o</p><p>comando, contenha a estrutura e os dados hostis em consultas dinâmicas, comandos ou</p><p>procedimentos armazenados.</p><p>Algumas das injeções mais comuns são SQL, NoSQL, comando OS, mapeamento relacional de</p><p>objeto (ORM), Lightweight Directory Access Protocol (LDAP) e linguagem de expressão (EL) ou</p><p>injeção de biblioteca de navegação de grá�co de objeto (OGNL). O conceito é idêntico entre</p><p>todos os intérpretes. A revisão do código-fonte é o melhor método para detectar se os aplicativos</p><p>são vulneráveis a injeções. Ele é seguido de perto por testes automatizados completos de todos</p><p>os parâmetros, cabeçalhos, URL, cookies, JSON, SOAP e entradas de dados XML. As</p><p>organizações podem incluir ferramentas de fonte estática (SAST) e teste de aplicativo dinâmico</p><p>(DAST) no pipeline de CI/CD para identi�car falhas de injeção recém-introduzidas antes da</p><p>implantação de produção.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>Protocolos para prevenção de injeção requerem manter os dados separados dos comandos e</p><p>das consultas.</p><p>A opção preferencial é usar uma API segura, que evita totalmente o uso do interpretador, ou</p><p>fornece uma interface parametrizada, ou migra para usar Object Relational Mapping Tools</p><p>(ORMs). Mesmo quando parametrizados, os procedimentos armazenados ainda podem</p><p>introduzir injeção de SQL se PL/SQL ou T-SQL concatenarem consultas e dados ou</p><p>executarem dados hostis com EXECUTE IMMEDIATE ou exec ().</p><p>Use validação de entrada positiva ou “whitelist” do lado do servidor. Esta não é uma defesa</p><p>completa, pois muitos aplicativos requerem caracteres especiais, como áreas de texto ou</p><p>APIs para aplicativos móveis.</p><p>Para quaisquer consultas dinâmicas residuais, escape os caracteres especiais usando a</p><p>sintaxe de escape especí�ca para esse interpretador. A estrutura SQL, como nomes de</p><p>tabelas, nomes de colunas e assim por diante, não pode ser escapada e, portanto, nomes</p><p>de estruturas fornecidos pelo usuário são perigosos. Este é um problema comum em</p><p>software de elaboração de relatórios.</p><p>Use LIMIT e outros controles SQL em consultas para evitar divulgação em massa de registros no</p><p>caso de injeção de SQL.</p><p>Roteiro de aula prática</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no</p><p>aplicativo para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula prática!</p><p>Referências</p><p>https://cm-kls-content.s3.amazonaws.com/AMPLI/RAP/SEGURANCA_EM_ENGANHARIA_DE_SOFTWARE/MANUAL_INSTALACAO</p><p>https://cm-kls-content.s3.amazonaws.com/AMPLI/RAP/SEGURANCA_EM_ENGANHARIA_DE_SOFTWARE/RAP.pdf</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>AL-FEDAGHI, S. ALKANDARI, A. On security development Lifecycle: conceptual Description of</p><p>vulnerabilities, risks, and Threats. IJDCTA, [S. l.], v. 5, n. 5, p. 296-306, 2011.</p><p>ASHOOR, S. A.; GORE, S. What is the difference between Hackers and Intruders. International</p><p>Journal of Scienti�c & Engineering Research, [S. l.], v. 2, n. 7, 2011.</p><p>ATLASSIAN. Making a Pull Requests. Atlassian, [S. l., s. d.]. Disponível em:</p><p>https://bit.ly/2WHsRR7. Acesso em: 23 jan. 2022.</p><p>BECK, K. et al. Manifesto para Desenvolvimento Ágil de Software. Agile Manifesto, [S. l.], 2001.</p><p>Disponível em: https://bit.ly/3kMgHhV. Acesso em: 23 jan. 2022.</p><p>BRASIL. Lei nº 13.709, de 14 de agosto de 2018. Dispõe sobre a proteção de dados pessoais e</p><p>altera a lei nº 12.965, de 23 de abril de 2014 (marco civil da internet). Diário O�cial da União: aula</p><p>1: Poder Legislativo, Brasília, DF, ed. 157, p. 59, 15 ago. 2018.</p><p>COOPER, R. Using ESLint and Prettier in a TypeScript Project. DEV, [S. l.], 16 fev. 2019. Disponível</p><p>em: https://bit.ly/3t59Nbg. Acesso em: 23 jan. 2022.</p><p>DEPENDABOT. Dependabot, [S. l.], 2019. Disponível em: https://dependabot.com/. Acesso em: 23</p><p>jan. 2022.</p><p>HILL, K. How Target Figured Out A Teen Girl Was Pregnant Before Her Father Did. Forbes, [S. l.], 16</p><p>fev. 2012. Disponível em: https://bit.ly/3kLB1jc. Acesso em: 23 jan. 2022.</p><p>HOWARD, M.; LIPNER, S. The Security Development Lifecycle: SDL, a Process for Developing</p><p>Demonstrably More Secure Software. [S. l.]: Microsoft Press, 2006.</p><p>Disciplina</p><p>Segurança em Engenharia de</p><p>Software</p><p>JEST. Jest – Delightful JavaScript Testing, [S. l.], 2021. Disponível em: Link. Acesso em: 23 jan.</p><p>2022.</p><p>LYRA, M. R. Governança da Segurança da Informação. Brasília: Edição do Autor, 2015.</p><p>MANI, Y. K. A review paper on software develpoment Lifecycle models. JETIR, [S. l.], v. 5, n. 2,</p><p>2018.</p><p>MARTINEZ, E. PlayStation Network breach has cost Sony $171 million. CBS News, Tokyo, 24 maio</p><p>2011. Disponível em: https://cbsn.ws/3kFqnL4. Acesso em: 23 jan. 2022.</p><p>MATSUNAGA, I. Os Pilares da Segurança da Informação. New Security World, [S. l.], 27 set. 2018.</p><p>Disponível em: https://bit.ly/3kDIPnq. Acesso em: 23 jan. 2022.</p><p>MERKOW, M. S.; RAGHAVAN, L. Secure and Resilient Software Development. Boca Raton:</p><p>Auerbach Publications, 2010.</p><p>MERKOW, M. S.; RAGHAVAN, L. Secure and Resilient Software: Requirements, Test Cases, and</p><p>Testing Methods. Boca Raton: CRC Press, 2011.</p><p>MR. ROBOT. Direção: Sam Esmail. Nova Iorque: Universal Cable Productions, 2015-2019. Série de</p><p>televisão (45 episódios).</p><p>NAVITA. A Study on Software Development Life Cycle & its Model. IJERCSE, [S. l.], v. 4, n. 9, 2017.</p><p>NUNES, A. C. Retrospectiva 2020: e-commerce se tornou o melhor negócio em tempos de</p><p>pandemia. Época Negócios, [S. l.], 21 dez. 2020. Economia. Disponível em:</p><p>https://glo.bo/2YggQm7. Acesso em: 23 jan. 2022.</p><p>OWASP. OWASP Top 10 – 2017 – The Ten Most Critical Web Application Security Risks. Versão</p><p>portuguesa. [S. l.]: OWASP, 2017.</p><p>OWASP. OWASP Top 10 – 2013 – Os dez riscos de segurança mais críticos em aplicações web.</p><p>Versão em Português (PT-BR). [S. l.]: OWASP, 2013. Disponível em: https://bit.ly/3jwssJW. Acesso</p><p>em: 23 jan. 2022.</p><p>PESCATORE, J. Taxonomy of software vulnerabilities. [S. l.]: The Gartner Group Report, 2003.</p><p>PIESSENS, F. A taxonomy of causes of software vulnerabilities in internet software. In:</p><p>INTERNATIONAL SYMPOSIUM ON SOFTWARE RELIABILITY ENGINEERING, 13., 2002,</p><p>Washington. Supplementary Proceedings [...]. Washington: IEEE Computer Society, 2002. p. 47-</p><p>52.</p><p>PRESSMAN, R.; MAXIM, B. Engenharia de Software. 8. ed. Porto Alegre: Bookman, 2016.</p><p>RASTOGI, A.; NYGARD, K. E. Software Engineering Principles and Security Vulnerabilities. In:</p><p>INTERNATIONAL CONFERENCE ON COMPUTING AND THEIR APPLICATIONS, 34., 2019,</p><p>Honolulu. Proceedings [...]. [S. l.]: Epic Series Computing, 2019. v. 58. p. 180-190.</p><p>RATHER, M. A.; BHATNAGAR, M. V. A comparative study of software develpoment Lifecycle</p><p>models. IAJIEM, [S. l.], v. 4, n. 10, 2015.</p><p>ROADSEC. Roadsec, [S. l.], 2019. Disponível em: https://roadsec.com.br. Acesso em: 23 jan. 2022.</p><p>SABAH, A. F.; ALKANDARI, A. On Security Development Lifecycle: Conceptual Description of</p><p>Vulnerabilities, Risks, and Threats. International Journal of Digital Content Technology and its</p><p>Applications, [S. l.], v. 5, n. 5, 2011.</p><p>SONARCLOUD. Clean Code Rockstar Status. SonarCloud, [S. l.], 2021. Disponível em:</p><p>https://bit.ly/38rHESi. Acesso em: 23 jan. 2022.</p><p>TRELLO, Jira e Ferramentas de Produtividade – Hipsters Ponto Tech #239.</p>_____
� Assimile
Por mais que seja possível automatizar as tarefas de linha de produção do produto de software, é
importante compreender que a atuação humana ainda se faz necessária, visto que as
ferramentas não possuem a capacidade de analisar situações da forma que o ser humano faz.
Tenha sempre em mente que ferramentas otimizam e agilizam os processos, mas a capacidade
de pensamento crítico e tomada de decisão complexa são mais bem exercidas pelo ser humano.
_____
Videoaula: conceito de controle de acessos e vulnerabilidades em ambiente
de desenvolvimento
Este conteúdo é um vídeo!
Para assistir este conteúdo é necessário que você acesse o AVA pelo
computador ou pelo aplicativo. Você pode baixar os vídeos direto no
aplicativo para assistir mesmo sem conexão à internet.
Assista à videoaula sobre o conceito de controle de acessos e vulnerabilidades em ambiente de
desenvolvimento. 
Ferramentas para aplicação do conceito DevSecOps na prática
Disciplina
Segurança em Engenharia de
Software
Na prática, o uso de DevSecOps sempre funciona melhor com ferramentas corretas para isso.
Em ambientes de nuvem, o uso do CloudCheckr integra a segurança e o monitoramento de
atividades para várias nuvens. 
E o CloudChecker permite veri�cações automatizadas, com segurança para as aplicações
desenvolvidas na cultura DevSevOps.
As ferramentas SAST (Static Application Security Testing) conseguem implementar uma
veri�cação e teste de código por meio de varredura. Automatiza o processo de veri�cação de
erros e cabe dentro do pipeline de DevSecOps, na entrega contínua. Procure uma solução em
ferramenta que funcione no modelo SAST.
É inegável que a automação dos processos de linha de produção de software traz inúmeros
ganhos, tanto para a qualidade do produto quanto para a segurança dele. 
A correta implementação de DevSecOps proporciona a construção de softwares mais seguros,
robustos e com maior nível de qualidade.
Continue �rme na busca pelo conhecimento!
Videoaula: resolução da situação-problema
Disciplina
Segurança em Engenharia de
Software
Este conteúdo é um vídeo!
Para assistir este conteúdo é necessário que você acesse o AVA pelo
computador ou pelo aplicativo. Você pode baixar os vídeos direto no
aplicativo para assistir mesmo sem conexão à internet.
Assista à videoaula sobre a resolução da situação-problema. 
Conclusão
Com as explicações necessárias para o entendimento do DevSecOps, sua missão �cou mais fácil
na solução do problema nesta empresa que utiliza métodos tradicionais para o controle de
produção de software. Devido aos vários problemas encontrados na execução destes processos,
você e a equipe em que trabalha �caram encarregados de encontrar uma forma de melhorar os
processos da linha de produção, para que seja possível otimizar o tempo e minimizar as falhas,
com foco em DevSecOps e automação dos processos.
O primeiro ponto que você deve observar é a falta de automação das etapas:
1. Versionamento de código.
Disciplina
Segurança em Engenharia de
Software
2. Integração do ambiente do desenvolvedor com o ambiente de repositório de forma
automatizada.
3. Realização de testes de segurança.
4. Entrega de versão funcional para ambiente produtivo (cliente).
Elabore um plano e identi�que as falhas e vulnerabilidades do modelo de desenvolvimento dos
sistemas, bem como na codi�cação, sendo mais difícil validar o código-fonte.
Você pode sugerir a adoção de uma ferramenta baseada em Git, com implantação em um
servidor local da empresa em que trabalha, ou a utilização de uma plataforma, como GitHub.
Atente-se para os valores mensais na utilização da plataforma.
Também, pode recomendar a utilização de alguma ferramenta que proporcione integração com o
ambiente de versionamento de código, para que seja possível a execução dos testes estáticos de
segurança, proporcionando, assim, maior con�abilidade nas veri�cações de segurança.
Por �m, indique a criação de work�ows de deploy para a entrega automatizada em ambiente
produtivo.
Justi�que estes processos e estas ferramentas como parte da adoção do conceito de
DevSecOps.
Referências
Disciplina
Segurança em Engenharia de
Software
ARACHNI. Arachni web application security scanner framework. 2017. Disponível em:
https://www.arachni-scanner.com/. Acesso em: 20 jan. 2022.
EVANGELISTA, V. N. Implantação de Ciclo de Desenvolvimento Seguro para PCI-DSS. 2017, 48f.
Projeto de Trabalho Acadêmico (Pós-graduação em Redes com Ênfase em Segurança da
Informação) – Instituo CEUB de Pesquisa e Desenvolvimento, Brasília, 2017.
MICROSOFT. Developing modern software. Microsoft, 2021. Disponível em: https://bit.ly/3jZdHiU.
Acesso em: 20 jan. 2022.
SONARCLOUD. Disponível em: https://sonarcloud.io/. Acesso em: 20 jan. 2022.
SONARQUBE. Disponível em: https://www.sonarqube.org/. Acesso em: 20 jan. 2022.
WEIDEMAN, G. Testes de Invasão: uma introdução prática ao hacking. São Paulo: Novatec, 2014.

Mais conteúdos dessa disciplina