Académique Documents
Professionnel Documents
Culture Documents
Inserir de Aqui
Inserir Título Aqui
Desenvolvimento
Seguro em Sistemas
Práticas de Desenvolvimento Seguro em Sistemas
Revisão Textual:
Prof. Ms. Claudio Pereira do Nascimento
Práticas de Desenvolvimento Seguro em Sistemas
Objetivos
• Introdução aos conceitos de desenvolvimento seguro, gestão de risco em segurança de
software, políticas e regulamentações, compreender os requisitos de um software segu-
ro e algumas considerações sobre como desenhar/pensar uma aplicação segura.
Caro Aluno(a)!
Bons Estudos!
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Contextualização
Projetos de Softwares, envolvem diversas vertentes e técnicas de desenvolvimento, a
questão que deve ser questionada é: “Sabemos desenvolver um software seguro e livre
de falhas?”.
6
Princípios Básicos de
Segurança da Informação
O desenvolvimento de um software seguro está fortemente acoplado ao domínio da
segurança da informação.
Confidencialidade
Confidencialidade é o conceito de prevenir a descoberta de informação por
qualquer parte não autorizada, ou seja, manter a informação protegida contra acesso
não autorizado.
Integridade
Integridade é similar à confidencialidade, exceto no conceito de acesso, mas se
refere à proteção dos dados contra alterações não autorizadas.
Disponibilidade
Disponibilidade se refere ao acesso ao ambiente sistêmico e que este esteja disponí-
vel sempre que solicitado, pode estar associada à criticidade de um determinado ativo
à corporação.
Autenticação
Autenticação é o processo que determina a identidade de um usuário.
7
7
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Autorização
A autorização é o processo seguinte a identificação do usuário, porém na autorização
estamos nos referindo aos níveis de acesso e permissões que o usuário pode ter dentro
de um determinado software.
Auditoria
A auditoria é uma forma de medir as atividades em um sistema de TI, dentro deste
conceito é essencial o uso de logs, sejam de acesso, registros e ações dentro do software.
Não Repúdio
Garante a identidade de alguém e também é uma informação de forma a prevenir
que alguém negue que uma ação seja realizada em algum objeto dentro do sistema.
Princípios de Sistemas
A criação de um sistema envolve o uso de diversos elementos e componentes,
bem como o uso de técnicas, processos e conhecimento inerente ao objeto em
desenvolvimento, a seguir vamos conhecer alguns desses elementos.
Gerenciamento de Sessões
Software frequentemente requer comunicação entre programas, recursos, banco
de dados, usuários, etc. O controle dessa comunicação é de fundamental importância
para um bom projeto de segurança.
Gerenciamento de Exceções
Software por vezes ao longo do seu uso pode encontrar condições desconhecidas e
não previstas pelos desenvolvedores que podem resultar em erros ou expor o ambiente
as ameaças aos pilares da segurança da informação, diante disso as exceções devem
possuir tratamento adequado no ciclo de desenvolvimento.
Gerenciamento de Configurações
Um software para que seja considerado confiável é necessário um requisito de que
ele possua funcionalidades de gerenciamento de configurações, alguns componentes
como strings de conexão ao banco de dados, fatores de autenticação, acesso a
determinados programas e/ou recursos devem ser geridos através de interfaces de
configuração e compor uma parte do projeto e dos requisitos do produto.
8
Ao pensar o projeto de software seguro devem ser levados em consideração os
itens a seguir:
Segregação de funções
Outra abordagem fundamental no desenho do projeto é o uso de segregação de
funções; ela garante que determinada atividade e tarefa será adequadamente atribuída
somente aos envolvidos no projeto. O caminho crítico que permite que falhas sejam
introduzidas em software é a divisão de uma mesma tarefa por diversas áreas e/ou
pessoas diferentes.
Defesa em profundidade
Defesa em profundidade é um dos mais antigos princípios de segurança da
informação, se uma defesa é boa, sobreposições de defesas são melhores ainda.
Vamos imaginar um castelo, ele possui um fosso bem profundo, paredes grossas, um
ponto de acesso, diversos pontos altos de defesa.
9
9
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Mecanismos de economia
Dada à complexidade dos elementos que envolvem a segurança da informação
e as diferentes tecnologias existentes, devemos compreender que um software que
contenha 6000 linhas de códigos possui menos vulnerabilidades que um software que
contenham milhões de linhas de códigos, porém se um software que possuí menos
linhas de códigos utilizar diversas tecnologias distintas, pode ser possível que o mesmo
contenha mais vulnerabilidades do que o outro produto.
Este ponto se aplica não somente ao sistema operacional, como também aos
diversos protocolos de comunicação envolvidos no uso do software.
Gestão de credenciais
A gestão de credenciais refere-se à função de que a cada solicitação de acesso a
determinado objeto verifique se o solicitante possuí autorização para utilizar o objeto
em questão.
Compartilhamento de Informação
Métodos de prevenção são necessários para evitar o compartilhamento acidental
de informações importantes, muitas vezes em projetos de softwares temos acesso a
uma gama de informações confidenciais e as estas devem ser adequadamente tratadas.
Comportamento de Usuários
Os usuários são uma parte importante de um sistema de segurança, dentro de um
projeto de software muitas vezes devemos permitir a participação dos usuários durante
o desenvolvimento, caso contrário estes mesmos usuários podem ser um fator de
resistência ou de sabotagem a qualquer novo produto.
10
Porém, convém observar os requisitos e funcionalidades de um produto. Devem
prevenir o comportamento dos usuários, por exemplo, se o software permite que
alguém possa anexar documentos e não exista um tratamento adequado a informação
deste arquivo, este usuário poderia encaminhar de forma acidental ou intencional
documentos restritos e comprometer a confidencialidade.
Reuso de código
O reuso de código é uma vantagem competitiva por diminuir o desenvolvimento
de códigos extras e permitindo o aumento da produtividade do desenvolvimento do
software, diante disso, a eficiência na segurança deve ser no sentido de que um código
só pode ser utilizado se alguma avaliação de segurança foi realizada e as falhas ou
erros foram devidamente corrigidas.
Podemos tomar como exemplo um servidor de internet, se este for o único ponto
de acesso ao sistema, esse será o único ponto de falha, independente das inúmeras
camadas de segurança.
Modelos de Segurança
Modelos de segurança são utilizados para compreender e entender os processos
envolvidos durante o desenvolvimento do software em que são aplicados os princípios
da segurança da informação.
Um bom modelo de implementação de segurança sempre deve observar cinco
pontos chaves em qualquer processo sistêmico: Pessoas, Processos, Regras, Requisitos
e Tecnologia.
11
11
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Outros métodos existentes são: Bell-LaPadula, Teoria dos Grafos, Matriz de controle
de acesso, multi-nível de acessos, etc.
Modelos de Integridade
A integridade visa garantir a separação de permissões para uso adequado do
software, fazendo a separação no uso de regras em transações e desta maneira fazendo
com que o software tenha comportamento adequado aos usuários.
Transporte da Informação
Os modelos de segurança devem observar questões sobre caminho por onde uma
determinada informação transaciona ou quando uma informação está em trânsito,
por exemplo, informações que são transportadas em notebooks da equipe de vendas,
contendo uma cópia totalmente funcional do software.
Ameaças à segurança
A segurança é a proteção dos ativos de informação contra ameaças internas ou
externas, as ameaças são as mais variadas possíveis, mas elas podem ser de diferentes
tipos. A seguir vamos apresentar algumas delas.
Script Kiddie
O termo script kiddie é usado basicamente para definir um tipo de atacante, é
um termo comum utilizado na indústria para descrever um usuário que publica ou
utiliza scripts para realizar ataques. Eles compreendem entre 80% a 85% das ameaças
oriundas de pessoas. A boa notícia é que esse público normalmente busca as falhas
mais comuns dos sistemas e que de certa forma já são tratadas dentro das tecnologias
existentes, mas mesmo assim ainda são consideradas ameaças em potencial.
12
Hacker
É termo comumente utilizado para definir alguém que explora os limites de um de-
terminado sistema. O termo cracker se refere a um individuo com intenções maliciosas.
Elite
Termo utilizado para definir pessoas com alto grau de conhecimento e grandes
habilidades, normalmente de 1% a 5% da comunidade. Esse pequeno grupo pode de
fato explorar as falhas de softwares com o uso de ferramentas e conhecimento e com
possibilidade de causar grandes estragos.
Grupos de Hackers
Grupos Hacker podem agir em conjunto com relação a determinados alvos, causas
ou desafios em geral, representam uma ameaça às grandes empresas de forma geral.
Ameaças estruturadas são aquelas organizadas por grupos com habilidades sofisti-
cadas e complementares que visam obter sucesso na ação, podem envolver não apenas
habilidades tecnológicas, como também habilidades comportamentais. Em ambos os
casos podem estar associadas a organizações criminosas com propósitos específicos.
13
13
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Gestão de Risco
Gestão de Risco é um elemento importante em processos de decisão e é definido
como um processo de identificação, controle, eliminação ou mitigação sobre eventos
incertos e que podem comprometer ou afetar recursos existentes.
Definições e Terminologias
Termos Gerais
Tabela 1
Risco - É a probabilidade de sofrer um dano ou perda. Risco Residual - É o risco remanescente após a eliminação ou
mitigação dos riscos.
Risco Total - É soma de todos os riscos associados com um Gestão de Risco - É o processo de decisão acerca dos riscos e
ativo, processo ou eventualmente ao negócio. ameaças identificadas.
Avaliação de Risco - É o processo de analisar o ambiente para Ativo - É qualquer recurso ou informação que a organização precisa
identificar os riscos e mitigar ações para determinar o impacto para conduzir seus negócios.
que possa causar ao processo.
Vulnerabilidade - É uma ameaça que explora Ataque - É a ação de explorar uma Vulnerabilidade.
um vulnerabilidade.
Impacto - É a perda resultante da exploração Ameaça - É uma circunstância ou evento com o potencial de causar
da vulnerabilidade. perda ou dano para um ativo.
Mitigação - É a ação que elimina ou reduz a probabilidade da Controle - É uma medida para detectar, prevenir ou mitigar um
ocorrência de uma ameaça. risco associado a uma ameaça.
Análise de risco qualitativa - É análise de risco com base Análise de risco quantitativa - É análise de risco com foco na
nos sentimentos das pessoas e se determinada ameaça pode perda financeira que uma ameaça pode de fato causar.
se materializar.
Expectativa de Perda Única (SLE) - É a perda ou impacto Fator de Exposição - é a medida ou magnitude de perda
monetário de cada ocorrência ou evento de uma ameaça. de um ativo.
Frequência - A quantidade de vezes que determinado evento Expectativa de Perda - é a expectativa de perda anualizada
ocorre durante um ano. sobre um evento esperado.
14
Processo de Gestão de Riscos
O processo de gestão de risco em segurança da informação conforme a ISO 27.005
é representado pela figura abaixo:
Figura 1
Definição do Contexto
A definição de contexto envolve:
• definição de critérios básicos;
• definição do escopo e dos limites, o estabelecimento de uma organização apropriada
para trabalhar a gestão de riscos.
15
15
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Opções de Tratamento
Riscos Residuais
Figura 3
Legenda Legenda
5 B A A A A A - Ação imediata - Intolerável
4 B B A A A B - Ação média e curto prazo
Probabilidade
3 C B B A A C - Monitoramento e gestão
2 C C B B A D - Risco controlável
1 D C C B B
1 2 3 4 5
Impacto
Figura 4
16
Políticas de Segurança e Compliance
Regulamentos e conformidade muitas vezes são atividades dentro de uma empresa. A
razão primária por trás desta atividade está no simples fato de que uma falha no cumpri-
mento de regras e/ou regulamentações podem trazer perdas financeiras as corporações.
Convém observar que quando falamos de compliance não é o mesmo que segurança.
Em certo sentido um software pode estar em compliance e ainda assim estar inseguro.
Com base no segmento em que uma empresa esteja inserida, ela pode ter que
observar diferentes regulamentos e/ou legislações para atender aos seus clientes, isso
pode fazer com que o software em desenvolvimento possa ser afetado no atendimento
a certos requisitos desses regulamentos ou leis.
A seguir vamos conhecer algumas dessas normas existentes e seus objetivos específicos:
FISMA
A Federal Information Security Management Act (Lei Federal de Gestão de Seguran-
ça da Informação), é uma lei federal dos Estados Unidos, que reconheceu a importância
da segurança da informação aos interesses de segurança econômica e nacional dos
Estados Unidos.
Ela exige que cada agência federal deve desenvolver, documentar e implementar um
programa de segurança que suporte as operações e ativos da agência, incluindo os for-
necidos ou geridos por outras agências, terceiros, etc.
Sarbanes-Oxley
A Lei Sarbanes-Oxley (em inglês, Sarbanes-Oxley Act) é uma lei americana, assinada
pelo senador Paul Sarbanes e pelo deputado Michael Oxley. Motivada por escândalos
financeiros corporativos, essa lei foi redigida com o objetivo de evitar o esvaziamento
dos investimentos financeiros e a fuga dos investidores causada pela insegurança da
governança corporativa e visa garantir a criação de mecanismos de auditoria e segurança
confiáveis nas empresas.
Gramm-Leach-Bliley
Uma lei americana que contém dispositivos que exigem que todas as instituições
financeiras divulguem aos consumidores e clientes suas políticas e práticas para proteger
a privacidade das informações pessoais não-públicas.
17
17
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
HIPAA e HITECH
Health Insurance Portability and Accountability Act (HIPAA) é uma lei americana
que estabelece os requisitos para uso, divulgação e proteção de informações de saúde.
Ela se aplica a consultórios médicos, hospitais, seguradoras de saúde e outras empresas
de saúde.
PCI DSS
O Payment Card Industry Security Standards Council (PCI-SSC) define o PCI
Data Secutity Standart (PCI-DSS) que especifica recomendações mínimas de segurança
obrigatórias para todas as empresas que participam da rede de captura de pagamento
com cartões, o comércio, e prestadores de serviços que processam, armazenam e/ou
transmitem eletronicamente dados do portador do cartão de crédito.
ISO/IEC 15408
Na década de 80 surgiu o primeiro padrão para avaliação de segurança em softwa-
res que ficou conhecido como Orange Book. Mais tarde esse padrão foi homologado
pela International Standartization Organization (ISO) como ISO/IEC 15408, também
conhecida como Common Criteria (CC). Ela determina que um sistema deva ter seu
objetivo de segurança definido para ser considerado seguro.
Outras regulamentações
Existem outras leis e regulamentações que podem ser aplicáveis ao conceito de sof-
tware seguro entre estas, podem ser considerados questões sobre propriedade inte-
lectual, direitos autorais, patentes, marcas registradas, acordos de confidencialidade,
garantias e políticas de privacidade.
18
Metodologia de Desenvolvimento Software
O termo “Ciclo de vida de desenvolvimento seguro”, adiciona segurança ao processo
de desenvolvimento de software, reduzindo o número de problemas de segurança duran-
te o desenvolvimento do produto.
Requisitos de Segurança
Todos os softwares por definição devem possuir requisitos mínimos de segurança
conforme abordado anteriormente, isso garante que o software já seja entregue com
esses princípios.
Rastreabilidade de Defeitos
Rastreabilidade de defeitos é um dos pontos importantes de qualquer equipe de de-
senvolvimento de software, possuir mecanismos ou ferramentas que permitem controlar
e gerenciar os defeitos que vão surgindo, permitindo a melhoria continua dos processos
de desenvolvimentos.
Modelagem de Ameaças
A modelagem de ameaças é uma técnica utilizada para comunicar e gerir as ameaças
que podem afetar o desenvolvimento e/ou funcionamento do software.
Fuzzing
Fuzzing é uma técnica de teste em que são realizados testes de massas de dados nas
entradas de dados e avaliação do comportamento e os resultados esperados, permitindo
que se possam testar o comprometimento de um sistema, incluindo técnicas utilizadas
por atacantes.
19
19
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Revisões de Segurança
Revisões de segurança devem compor a todo o momento o processo de desenvolvi-
mento dado que as ameaças são variadas e novas ameaças surgem a todo o momento,
o que se faz necessário essas revisões de forma contínua.
Em relação aos tipos de dados, estes podem ser estruturados (ex. Arquivos do tipo
XML) e não estruturados (ex. apresentação em power point).
Um dos requisitos são os padrões de codificação segura, esse requisito envolve ques-
tões além da codificação em si e passam por pontos como separação dos ambientes de
desenvolvimento, homologação e produção.
20
Criando o Software Seguro
A implementação dos requisitos de segurança começa com a fase do desenho do
produto, isto permite desde a concepção do produto criar um produto seguro.
Conclusão
Nesta aula foram apresentados os conceitos básicos de segurança da informação e a
importância delas nos processos de desenvolvimento de softwares.
21
21
UNIDADE
Práticas de Desenvolvimento Seguro em Sistemas
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
Sites
O Ciclo de Vida do Desenvolvimento da Segurança de Computação Confiável
https://goo.gl/FM3ehT
Vídeos
Palestra Técnica do CISL: Segurança e Software Livre
https://youtu.be/ZoR621GmOII
Desenvolvimento do Software Seguro
https://goo.gl/EusUKE
Leitura
Gestão de Riscos Aplicada a Sistema de Informação: Segurança Estratégica da Informação
https://goo.gl/s77Ofe
22
Referências
HOGLUND, Greg; McGraw, Gary. Como Quebrar Códigos: a arte de explorar (e pro-
teger) software. Pearson 448 ISBN 9788534615464. (Livro Eletrônico).
SHEMA, Mike. Hack notes: segurança na web referência rápida / 2003 - (Livro) refe-
rência rápida. São Paulo: Campus, 2003. 182 p. ISBN 8535213503i
Sites Visitados
Secure Coding Practice Guidelines. Disponível em: <https://security.berkeley.edu/
secure-coding-practice-guidelines>
23
23