O mercado de desenvolvimento parece estar se conscientizando cada vez mais com relação à necessidade de realização de treinamentos de Segurança de Aplicações (AppSec). Porém, o mercado ainda procura muito por treinamentos genéricos, que muitas vezes atendem questões de compliance, mas não agregam valor real para os times de desenvolvimento. Sendo assim, este artigo irá apresentar as características e temas para um bom treinamento de Segurança de Aplicações.
Você pode também ouvir a versão em áudio deste artigo:
O Público Alvo em um treinamento de AppSec
Antes de apresentar os assuntos a serem contemplados em um treinamento de AppSec, é necessária a compreensão de quem é o principal público alvo de um treinamento de segurança em aplicações. A resposta mais completa seria: os times de desenvolvimento.
Ou seja, todos aqueles envolvidos no processo de desenvolvimento de software. Isso inclui, mas não se limita, Gerentes de Projetos, POs, arquitetos, QA e principalmente desenvolvedores (backend e frontend).
Muitas empresas tendem a manter nos treinamentos também ao menos uma pessoa do time de Segurança da Informação – além do instrutor – para que aproveite a oportunidade e se aproxime da equipe que está recebendo o treinamento, contribuindo sempre que possível com exemplos do dia a dia do time.
Note que este público alvo pode ou não ter algum conhecimento prévio de segurança de aplicações. De fato, o que muitas vezes acontece é encontrarmos turmas mistas, nas quais há pessoas com conhecimentos prévios no assunto e outras que nunca tiveram contato.
Por isso, alguns dos assuntos a seguir acabam sendo mais interessantes para uns do que para outros. Mas ainda é altamente recomendado que todos estes assuntos sejam considerados na construção do treinamento, para que o objetivo de nivelar os membros do time seja atingido. A menos, é claro, que o objetivo seja um treinamento dedicado a um perfil específico de colaboradores dentro do time de desenvolvimento, com um determinado conhecimento prévio.
Awareness
Muitas vezes membros do time de desenvolvimento são obrigados a participar de treinamentos de segurança. Isso automaticamente faz com que eles percam o interesse no assunto e talvez nem ao menos prestem atenção no conteúdo.
Outra coisa que às vezes acontece é o desenvolvedor participar do treinamento, mesmo que por vontade própria, mas não ter a visão real do porquê este conteúdo é relevante para ele.
Sendo assim, se torna altamente interessante que uma etapa de Awareness seja contemplada durante os treinamentos. Em média, algo em torno de 6% do treinamento.
Estamos falando de apresentar aqui cases de exploração relevantes, de preferência próximos da área da equipe de desenvolvimento. Uma excelente abordagem é apresentar cases de ciberataques da própria empresa, ou pelo menos de concorrentes (públicos). Uma vez que a equipe visualize que o sistema em que eles trabalham pode estar sujeito a ataques reais de cibercriminosos, começa a ser despertado o interesse pelos conteúdos do treinamento.
Além disso, aqui é bom reforçar ao aluno as vantagens de ele ter os conhecimentos em desenvolvimento seguro. Afinal, estamos falando de torná-los profissionais que, hoje, ainda são vistos como um diferencial no mercado.
É claro que caso se trate de uma equipe que já possui uma cultura de segurança, ou que já possui o interesse em se capacitar, este assunto não se torna mais essencial ao treinamento, mas ainda pode ser considerado.
Conceitos
Realize um treinamento que contemple apenas teoria e terá alunos que não saberão como aplicar estes conhecimentos na prática. Realize um treinamento apenas com atividades práticas e terá alunos que só saberão o que fazer em cenários exatamente iguais ou muito parecidos com a prática realizada.
Deve-se encontrar um equilíbrio entre a teoria e a prática ao se compor um treinamento. E isso se aplica à qualquer tipo de treinamento.
Sendo assim, não há como fugir – é necessário, sim, que para um bom treinamento de Segurança de Aplicações sejam apresentados os conceitos teóricos básicos. Definições e nomenclaturas devem ser esclarecidas para que a turma possa ter um melhor aproveitamento do treinamento.
Não é incomum desenvolvedores não compreenderem o que é de fato uma vulnerabilidade. Também não é incomum não saberem a diferença entre autenticação e autorização, por exemplo. Ou seja: questões que precisam estar claras ao aluno antes de seguir para a parte principal do treinamento.
Alguns assuntos que podem ser contemplados incluem, mas não se limitam:
- Definição do “estado seguro”
- Tríade CIA
- Segurança por padrão
- Segurança por design
- Segurança por obscuridade
- Defesa em Profundidade/Camadas
- Definição de vulnerabilidade em software
- Definição de privacidade
Caso o treinamento seja destinado a uma equipe bastante madura e já com experiência em segurança, estes assuntos talvez não sejam necessários. Caso contrário, se tornam essenciais ao treinamento. Separe para esse fim algo em torno de 6% do treinamento.
Processo de desenvolvimento seguro
Quando se pensa em segurança, deve-se tomar cuidado para não pensar apenas na parte específica e deixar de visualizar o todo. Essa é uma visão que deve ser trazida aos times de desenvolvimento.
Aqui o objetivo principal está em mostrar que a segurança é algo que deve ser contemplada em todo o ciclo de desenvolvimento do software e apresentar aos alunos o que cada um pode estar realizando no dia a dia para agregar em sua segurança.
Uma equipe que entende o que deveria ser feito em cada etapa do processo de desenvolvimento distribui melhor as atividades entre si e compreende melhor seu papel na segurança do software.
Alguns assuntos que podem ser contemplados incluem, mas não se limitam a:
- Shift Lefting
- Processos de desenvolvimento seguro (S-SDLC)
- Inserindo atividades de segurança no pipeline de desenvolvimento
- Conhecendo as principais verificações de segurança (SAST, DAST, Modelagem de ameaças, revisões de arquitetura…)
- Gestão de vulnerabilidades
- Conhecendo modelos de maturidade de segurança em desenvolvimento (BSIMM, OWASP SAMM)
Este assunto é essencial para um treinamento de AppSec. Mesmo que a equipe seja mais experiente, o debate acerca das possíveis melhorias no processo é sempre bem vindo. Considere para isso algo em torno de 10% do treinamento.
Caso queira compreender melhor a respeito do Processo de Desenvolvimento Seguro, de como gerenciá-lo, ou se quiser compreender melhor a respeito de modelos de maturidade em desenvolvimento como o OWASP SAMM, confira alguns de nossos outros artigos a respeito.
Principais vulnerabilidades de segurança
A grande maioria dos treinamentos de Segurança de Aplicações contemplam este conteúdo, e por um bom motivo. Alguns compliances e certificações, como o PCI-DSS por exemplo, exigem que a equipe de desenvolvimento seja treinada nas principais vulnerabilidades do mercado pelo menos uma vez por ano.
“Os desenvolvedores são treinados pelo menos anualmente em técnicas de codificação seguras atualizadas, incluindo como evitar vulnerabilidades comuns de codificação?” – PCI-DSS Requisito 6.5
E de fato, grandes entidades no mundo de segurança de software geram listas das principais vulnerabilidades do mercado, com base em dados estatísticos, como é o caso do Top 10 da OWASP. Ou listam ainda os principais erros em desenvolvimento de software, como a lista Top 25 da CWE/SANS . Estas listas são geradas com o principal intuito de educar desenvolvedores no mundo todo acerca destes cenários.
Em treinamentos onde há uma linguagem específica a ser abordada, é altamente recomendado que sejam trazidos exemplos de códigos vulneráveis desta linguagem específica. Outra opção que engrandece este tipo de conteúdo é apresentar exemplos de vulnerabilidades da própria empresa. Afinal, mais fácil do que compreender um cenário vulnerável genérico é um desenvolvedor compreender a vulnerabilidade em um código ou infraestrutura que ele conhece.
No caso dos treinamentos da Conviso, por exemplo, quando realizamos testes ou revisões de código para uma empresa e posteriormente realizamos um treinamento para capacitar os times de desenvolvimento, se a empresa autorizar, trazemos os exemplos de vulnerabilidades encontradas nos sistemas da própria empresa para o treinamento. Isso agrega bastante no aprendizado, além de fazer com que os times saiam do treinamento com aquele sentimento de “agora sei o que fazer”.
Alguns assuntos que podem ser contemplados incluem, mas não se limitam a:
- OWASP Top 10
- CWE/SANS Top 25
- Principais vulnerabilidades da empresa
Considere para isso algo em torno de 14% a 20% do treinamento. Mas cuidado para não focar muito nesse assunto, uma vez que o próximo assunto é ainda mais importante para este tipo de treinamento.
Principais boas práticas em desenvolvimento seguro
Este tema não pode faltar em um treinamento de Application Security. Se o objetivo é ensinar os times de desenvolvimento a construírem softwares mais seguros, este é um assunto que não pode faltar.
Caso se trate de um treinamento sem foco em alguma linguagem de programação, esta parte pode ser focada nos conceitos, para que, independentemente da linguagem utilizada, o aluno saiba o que deve ser feito. Porém, quando houver um foco em alguma linguagem específica, é importante que na apresentação destas boas práticas sejam apresentados exemplos de código, documentação de frameworks e coisas do tipo, para mostrar na linguagem do desenvolvedor como estes conceitos podem ser aplicados. Isso torna o treinamento algo muito mais próximo da realidade do desenvolvedor.
Mas atenção! Muitas empresas buscam treinamentos de segurança focados em um conjunto de linguagens. Porém, vale lembrar que se forem contempladas muitas linguagens em um único treinamento, pode ser que nem uma delas seja aprofundada e se torne um treinamento raso. Por isso, quando há diversas linguagens, muitas vezes se torna mais interessante focar nos conceitos ou dividir em vários treinamentos.
Há diversos assuntos que podem ser contemplados aqui, tais como:
- Autenticação;
- Gerenciamento de Sessão;
- Controle de Acesso;
- Segurança em Arquitetura;
- Criptografia;
- Melhores Práticas de Segurança em APIs;
- Configurações de Segurança;
- Segurança em ambientes Cloud;
- Segurança em web services;
- Validação de Entradas;
- Codificação e Escape de Dados;
- Consultas Seguras à Bancos de Dados
- Logs de segurança e monitoramento; dentre diversos outros.
Busque entender a necessidade do seu time e selecione temas de acordo. Algumas excelentes referências que podem ser utilizadas para a seleção destes temas incluem, mas não se limitam a:
- NIST SP 800-XXX
- OWASP ASVS
- OWASP Proactive Controls
- OWASP Cheat Sheet Series
Separe para isso algo em torno de 14% a 28% do treinamento.
Uma excelente abordagem é apresentar as boas práticas em desenvolvimento juntamente com as principais vulnerabilidades, pois os dois assuntos são bastante complementares.
Botando a mão na massa
Se possível, busque treinamentos que contemplem também atividades práticas. Afinal, como já foi demonstrado por William Glasser, o ser humano aprende muito melhor fazendo (80%) do que apenas assistindo (50%).
Mas cuidado!! É importante ter em mente o público alvo deste tipo de treinamento. Membros do time de desenvolvimento não são especialistas em segurança nem são responsáveis, na maioria das vezes, por realizar pentests. Portanto, um bom treinamento de Application Security não pode se tornar um treinamento de pentest.
O ideal é que sejam realizadas atividades práticas tanto de exploração de vulnerabilidades quanto de correção. Afinal, desenvolvedores gostam de “ver código” e no dia a dia o que eles terão que fazer é justamente escrever códigos seguros.
Na Conviso, por exemplo, empresas que adquirirem o módulo de education da Conviso Platform, poderão realizar exercícios práticos de exploração e correção das vulnerabilidades que forem reportadas em seus sistemas, com exercícios nas mais diversas linguagens.
É claro que atividades práticas de correção de código só podem ser realizadas caso haja uma linguagem foco no treinamento. Se não houver, ainda podem ser revisados alguns códigos mais simples, fáceis de serem compreendidos mesmo por um desenvolvedor que não conhece muito a fundo aquela linguagem, mas nada muito específico.
Considere algo em torno de 40% a 50% do treinamento para a realização das atividades práticas.
Quer saber mais sobre nossos treinamentos? Entre em contato!
Mas não pare por aí!
Realizar um treinamento de Application Security como o proposto neste artigo deve ser apenas o começo de uma jornada de aprendizado para os times de desenvolvimento.
Na medida do possível, deve-se buscar estruturar na empresa programas de education, para que os colaboradores possam estar sempre evoluindo nos assuntos relacionados à segurança e se mantendo atualizados.
Deve-se considerar também treinamentos específicos voltados a perfis específicos dentro dos times de desenvolvimento, como por exemplo treinamentos voltados especificamente para equipes de desenvolvimento de APIs ou de aplicações Mobile. Ou talvez treinamentos focados em segurança de arquitetura e modelagem de ameaças para uma equipe de arquitetos de software, por exemplo.
Deve-se compreender as deficiências do time de desenvolvimento no que diz respeito ao desenvolvimento seguro e selecionar treinamentos de acordo.
Mas caso ainda restem dúvidas com relação importância desta prática, consulte nosso artigo por que investir em treinamentos de AppSec, para compreender melhor os benefícios desta prática e os principais pontos de atenção. Não deixe de conferir também o episódio do nosso podcast a respeito deste assunto.
Artigo por: Nicolas Schmaltz