A transição para o segmento digital de bancos, varejo, medicamentos e outros ramos vitais de produção e serviços provocou inúmeras ameaças à segurança. Hoje, em todo o mundo, a atividade dos invasores continua a crescer, e as questões de proteção de dados corporativos e de usuários contra roubo e danos intencionais estão se tornando cada vez mais objeto de discussão por profissionais.Como é correto para os negócios e a TI integrar a segurança ao processo de desenvolvimento, quais ferramentas são melhor usadas para isso e como tudo isso se encaixa na prática real de implementação. Compartilhamos as abordagens de Rostelecom, M. Video-Eldorado, DD Planet, AGIMA.Yaroslav Aleksandrov, chefe de desenvolvimento, Solar appScreener em Rostelecom, sobre como integrar o SAST ao desenvolvimento
Com o crescimento da empresa e o aumento do número de desenvolvedores, está se tornando cada vez mais difícil verificar se há vulnerabilidades "manualmente" em um produto. Você precisa usar o SAST - teste de segurança de aplicativo estático (Static Application Security Testing). No Solar appScreener, a segurança da informação é construída com base em um produto interno. O produto analisa o código fonte. Hoje, 26 linguagens de programação são suportadas, cuja fonte pode ser analisada vulnerabilidade e suporta todos os formatos populares e sistemas de gerenciamento de projetos.
Como escolher SAST?
Mesmo uma simples vulnerabilidade não pode ser encontrada usando algoritmos primitivos. Hoje no mercado existem muitas soluções SAST, pagas e gratuitas. Os mais populares deles são AppScan da IBM Security, Synopsys, Veracode, Application Inspector, Micro Focus, Appercut, Checkmarks.
A eficácia do processo de desenvolvimento depende da escolha da ferramenta. As principais vantagens das soluções pagas:
- Foco na segurança: algoritmos específicos e grandes bases de regras.
- Suporte para muitas linguagens de programação.
- Interface amigável.
- Disponibilidade de plugins e API.
- Disponibilidade de suporte técnico para a ferramenta.
Ferramentas gratuitas e interfaces da Web geralmente são inferiores às pagas, porque contêm algoritmos mais simples e as bases de regras são menos completas. Sua principal tarefa é encontrar erros no código. A especialização e a funcionalidade de tais soluções geralmente são muito limitadas.
Depois que a solução SAST é selecionada, você precisa integrá-la ao processo de desenvolvimento. As opções de integração podem incluir: incorporação da ferramenta no repositório, ambientes de desenvolvimento, servidores de CI / CD, sistemas de rastreamento de tarefas. Uma boa ferramenta pode se integrar com êxito a todas as classes de sistemas listadas.
Nota : a API SAST aberta inclui a API JSON e a CLI e oferece amplas oportunidades para integração e automação adicionais.
Para escolher a ferramenta que melhor atenda às metas e objetivos do desenvolvedor, é necessário executar a comparação funcional e a qualidade.
Uma comparação funcional é realizada de acordo com vários parâmetros: eles analisam a conveniência da interface e a conveniência da integração com suas próprias ferramentas. Ao mesmo tempo, é importante realizar a verificação em seus próprios códigos.
O próximo passo é uma comparação de qualidade: eles analisam vulnerabilidades e falsos positivos em relação ao seu próprio código.
As nuances e sutilezas da análise de código
Quanto mais cedo uma vulnerabilidade for encontrada, mais barato será para o desenvolvedor e o cliente. Isso significa que o produto deve ser verificado periodicamente quanto a vulnerabilidades durante o processo de desenvolvimento e, adicionalmente, realizar verificações de controle antes do lançamento.
Velocidade e recursos : geralmente é esperado que a ferramenta funcione rapidamente; corra a cada mudança; mostre rapidamente quem e quando introduziu a vulnerabilidade. De fato, o SAST analisa o código por pelo menos 8 horas; é difícil executá-lo em todas as alterações; é difícil identificar o autor da vulnerabilidade; falsos positivos acontecem. Então, surge a pergunta: como configurar o DevSecOps.
É muito importante aqui:
- Calcule o tempo e os recursos para analisar seu código.
- Identifique acionadores para acionar uma varredura com base nos resultados.
- Lembre-se de que a energia precisará ser recalculada periodicamente.
- É melhor usar a análise incremental, mas isso deve ser feito com cautela, pois as vulnerabilidades podem ser perdidas.

Por exemplo, você pode executar o teste usando o SAST quando um desenvolvedor envia uma tarefa para revisão. Você também pode iniciar a digitalização no final do dia útil.
Outro problema são os falsos positivos e a obtenção de informações sobre várias vulnerabilidades no relatório. Nesse caso, o desenvolvedor é recomendado: filtrar os analisadores estáticos por vulnerabilidade e por arquivo. Você pode excluir bibliotecas, analisar criticidade, adicionar exceções para determinados parâmetros. Basta fazer esse trabalho apenas uma vez, para que no futuro informações sobre falsos positivos não sejam incluídas nos relatórios. Também é importante garantir que nenhuma nova vulnerabilidade apareça e desmonte gradualmente o banco de dados de vulnerabilidades existente em segundo plano.
Ao trabalhar na integração do SAST ao processo de desenvolvimento, é importante implementar processos gradualmente sem bloquear a liberação. O fluxo do processo pode ser o seguinte:
- Seleção de ferramenta.
- Descrição do processo (criação de regulamentos).
- Descrição das soluções técnicas.
- Trabalho de implementação.
- Operação de teste.
É melhor começar com os sistemas mais críticos: é importante eliminar novas vulnerabilidades, conduzir o projeto, implementar regulamentos e soluções técnicas.
Os regulamentos devem indicar necessariamente:
- Etapas para verificar o código em busca de vulnerabilidades.
- Responsável por iniciar a verificação.
- Papéis e resultados.
- Como o processo de comunicação será estabelecido.
- Contrato de nível de serviço.
- Responsável pelo controle de processos.
- A ordem de adicionar novos sistemas ao processo.
Essa abordagem permite a implementação do SAST no processo de desenvolvimento em um ano civil. É importante considerar todas as mudanças e riscos.
Recomendações finais:
- Use o SAST em todas as fases do desenvolvimento.
- Adapte a integração ao seu código e ao seu processo.
- Comece corrigindo novas vulnerabilidades.
- Elimine gradualmente vulnerabilidades antigas.
- Crie um processo baseado no SAST.
- Implante gradualmente, começando sem impacto nas liberações.
Vladimir Sadovsky, chefe da equipe de monitoramento e resposta a incidentes de segurança da informação da M.Video-Eldorado, sobre como criar um processo de programação seguro
A idéia básica por trás do conceito de programação segura se resume a ajudar os negócios; acelerar processos; minimizar os riscos de problemas associados a vulnerabilidades no produto.
A abordagem clássica de segurança pode ser visualizada da seguinte maneira:

Seu principal problema está relacionado ao alto custo de melhorias necessárias para garantir a segurança. Além disso, é importante fornecer protocolos de criptografia de dados, criptografia do protocolo de transferência dos barramentos de integração e assim por diante.
Quanto aos sites de comércio eletrônico, eles são atacados com mais frequência do que muitos outros. Os objetivos de tais ataques são uma tentativa de obter um certo benefício financeiro (enganar o programa e comprar mercadorias caras de graça) ou apreender os dados pessoais dos clientes. Infelizmente, enquanto alguns problemas não podem ser resolvidos usando os scanners de vulnerabilidade clássicos. Por exemplo, se o aplicativo tiver um scanner de autorização de impressão digital, nenhuma análise estática mostrará a incorreta de tal funcionalidade no aplicativo. Isso aumenta o risco de incidentes relacionados à penetração de intrusos nas contas de usuário do aplicativo. Ao mesmo tempo, quanto mais próximo o aplicativo do varejista estiver do lançamento, mais caro será o reparo de vulnerabilidades e bugs.
O esquema para usar as ferramentas de teste de segurança de código para a plataforma de comércio eletrônico pode ter a seguinte aparência:

Ele mostra claramente qual equipe esteve envolvida na implementação de uma funcionalidade específica do aplicativo. Se um erro ou vulnerabilidade for detectado, a funcionalidade terá como objetivo finalizar essa equipe em particular. Como resultado, o tempo gasto na correção de bugs e problemas é reduzido, porque os desenvolvedores diretos conhecem melhor seu código.
Em seguida, o teste final é iniciado, durante o qual todo o código do produto final é analisado e "limpo" os bugs residuais.
Ameaças à segurança de varejo
O principal fator para o varejo são as vendas - sejam lojas offline, Internet, marketing, bancos de dados de clientes. Tudo visa chegar o mais próximo possível do usuário. Além disso, o varejo moderno procura vender seus produtos usando o omnichannel; Lança várias campanhas e programas de marketing. Tudo isso é interessante não apenas para os consumidores, mas também para os intrusos. Uma avaliação de segurança adicional aparece aqui - possíveis danos. A análise foi projetada para identificar erros no site, erros lógicos e problemas clássicos de segurança dos quais os consumidores reais sofrem posteriormente.
Também é importante entender que o dano potencial começa com a fase de teste. Acontece que o ambiente em que é produzido está profundamente integrado ao produtivo; portanto, as alterações feitas durante a fase de teste podem causar incidentes e problemas. Para evitar isso, é importante desenvolver um mapa do processo e tomar as medidas apropriadas antes do início do desenvolvimento.
Se um contratado externo estiver envolvido no desenvolvimento, é importante avaliar se é capaz de atender aos requisitos de segurança necessários. Para isso, é necessário fazer avaliações regulares da competência dos desenvolvedores e do nível da empresa executora em termos de segurança na Internet. O contrato deve incluir pontos para certificação de desenvolvedores; registrar quem é responsável por erros que levaram a danos. É importante treinar regularmente equipes de desenvolvimento e fornecer proteção abrangente à propriedade intelectual.
Também é muito importante fornecer controle de acesso, organizar um ambiente confiável e configurar ferramentas de monitoramento e prevenção de vazamento de dados. Também teremos que formular requisitos e políticas detalhadas para programação segura, corrigir todas as versões do Open Source e bibliotecas externas.
No estágio de design, faz sentido usar uma abordagem de cenário, criar um modelo de ameaça e conduzir uma análise de risco em vários estágios. Quando uma nova tarefa chega aos desenvolvedores, é importante entender quais processos de negócios afetarão e avaliar as iniciativas em termos de possíveis cenários de fraude no nível dos requisitos de negócios. Cada risco é considerado no quadro de três probabilidades: avaliação otimista, média e pessimista. Os bots são enviados para o site ou aplicativo. Cada décimo deles é malicioso. Com base em três cenários, o dano potencial aos negócios é calculado.
Existem vários analisadores estáticos e dinâmicos que permitem identificar problemas e corrigi-los a tempo. A tarefa do departamento de TI é verificar se a cadeia de códigos funciona corretamente do ponto de vista dos requisitos técnicos. A tarefa do departamento de segurança é verificar o código quanto a vulnerabilidades de segurança.
A busca por vulnerabilidades de segurança na lógica de negócios se resume aos seguintes aspectos:
- Implementação de autoteste de segurança ao testar aplicativos.
- Criando regras de figurino para um analisador estático com referência a processos e integrações críticas de negócios.
- Análise manual de partes do código modificado, no contexto de uma funcionalidade que possui alta criticidade com base em riscos.
- O processo de encontrar indicadores no código, auditoria periódica de bibliotecas externas.
Nem todos os problemas de segurança podem ser encontrados eliminados no nível de código e desenvolvimento. A tarefa do departamento de segurança é criar e estabelecer um processo eficaz para gerenciar vulnerabilidades e incidentes. Para fazer isso, você precisa analisar constantemente o comportamento do usuário, perfilá-lo e monitorar o comportamento. Se ele se desvia dos padrões usuais de negócios, você deve considerar isso como um incidente e responder imediatamente.
Analisar o comportamento do usuário ajuda a:
- Trabalhando com Big Data e construindo modelos de comportamento e anormalidades anormais.
- O processo de monitoramento e auditoria de scripts JS. Sites modernos não funcionam sem scripts JS. Muitas vezes, eles são carregados de recursos externos. Portanto, é importante entender sua funcionalidade e que tipo de ameaça JS-scripts são para o site.
- Pesquise vulnerabilidades com base em serviços de análise e métricas Google e Yandex.
- Testes regulares de segurança do projeto como um todo.
- Usando o Bug Bounty para identificar novas vulnerabilidades.
- Integração WAF para proteger aplicativos e responder efetivamente a problemas.
É importante coletar e analisar dados constantemente para identificar novos casos anormais.
Dmitry Nikulchev, DD Planet - sobre como proteger os dados dos usuários de serviços web e móveis
A programação segura no DD Planet é baseada em vários princípios. O primeiro deles é a confiabilidade. O desempenho do produto deve ser previsível, correto e sem problemas. Mesmo que os dados iniciais tenham sido inseridos incorretamente (acidental ou intencionalmente como parte de um ataque a um produto).
O segundo é a segurança. A capacidade de proteger contra ameaças externas, ataques e manter a operacionalidade após sua reflexão e eliminação.
O terceiro é a privacidade. Garantir um trabalho seguro e correto com dados pessoais. Isso é crítico ao desenvolver aplicativos corporativos e personalizados.
Por exemplo, o serviço Zhivu.RF, desenvolvido e suportado pelo DD Planet, é uma rede social privada para vizinhos e contém muitos dados pessoais. O perfil do usuário é confirmado com a ajuda de serviços públicos e pertence a um endereço específico (bairro) - extraia o USRN de Rosreestra. Isso impõe ao desenvolvedor obrigações sérias relacionadas à proteção de informações pessoais.
Armazenamento e processamento de dados do usuário
Armazenamos todos os dados pessoais no ISPDn (Sistema de Informações de Dados Pessoais). Eles estão contidos em uma rede virtual isolada com uma infraestrutura de TI segura. Ferramentas de detecção de intrusão, um servidor de análise de segurança e pesquisa de vulnerabilidades, além de um servidor de backup, são integrados à rede virtual.
Para identificar vulnerabilidades, usamos a "abordagem manual" e confiamos na análise de especialistas. Esse princípio não implica o uso de ferramentas automatizadas: a pesquisa é realizada por um especialista experiente e, ao identificar vulnerabilidades, ele se concentra em seu próprio conhecimento. É claro que essa técnica exige muito tempo e requer a presença de especialistas altamente qualificados na empresa. No entanto, é considerado o mais eficaz em termos de precisão e integridade da cobertura de dados durante a verificação.
Severidade na luta pelo produto perfeito
No desenvolvimento do cliente, é importante fazer lançamentos no prazo, enquanto o aplicativo deve estar livre de erros e garantir a segurança dos usuários. Seguindo esse princípio, durante o teste do produto, usamos o princípio de avaliar tarefas por prioridade - Gravidade. Ou seja, classificamos todas as tarefas para eliminar erros, dependendo do grau de impacto negativo no produto do defeito.
A prioridade na resolução de erros no DD Planet é a seguinte:
- Primeiro, identificamos e eliminamos bloqueadores ou erros nos quais o usuário não tem a oportunidade de executar a ação de destino. Por exemplo, um visitante não pode se registrar no site ou no aplicativo; faça login na sua conta; Acesse os dados ou seções de destino do aplicativo.
- Em seguida, rastreamos e eliminamos bugs críticos - problemas de segurança, congelamentos do sistema, um processo de negócios com defeito e falhas periódicas de aplicativos.
- Depois, analisamos os problemas de nível médio - encontramos erros que aparecem apenas em determinadas situações específicas.
- O passo final são pequenas alterações - nos livramos de pequenos bugs, elaboramos comentários na interface e assim por diante.
Essa sequência nos ajuda a livrar-se rapidamente dos bugs, concentrando-se nos principais aspectos do usuário.
O lançamento do produto ocorre em várias etapas. Primeiro, ele é publicado em um ambiente de teste para identificar erros. Depois, há uma correção de bug de prioridades com o nível de Gravidade 1 e 2. Depois disso, fazemos um lançamento para produção. Por algum tempo após o lançamento, parte da equipe está empenhada em corrigir bugs com prioridade de 3 e 4. Alguns dias depois, há outra atualização no prod após corrigir os problemas restantes.
Para garantir a máxima segurança do produto:
- Use consultas parametrizadas para o banco de dados.
- Livre-se da construção de consultas dentro do aplicativo para evitar injeções de sql.
- Conecte-se ao banco de dados somente em uma conta com fio especial com o conjunto mínimo de direitos necessário.
- Mantenha registros de segurança regularmente.
Não confie na entrada do usuário: todos os dados do cliente (usuário) devem ser verificados no servidor. Isso impedirá a passagem de scripts ou códigos hexadecimais maliciosos. Os dados do usuário geralmente são transmitidos como parâmetros para chamar outro código no servidor e, se não forem verificados, podem comprometer seriamente a segurança do sistema. É por isso que é tão importante verificar rigorosamente todos os dados de entrada quanto à correção.
Andrey Ryzhkin e Alexey Klinov da AGIMA - sobre como e por que controlar a segurança de aplicativos no desenvolvimento personalizado
A segurança da arquitetura digital de qualquer produto é um atributo crítico para empresas e usuários. Este é um indicador adicional de qualidade e confiabilidade, que deve ser mantido em todas as etapas da produção e operação da aplicação.Qualquer organização possui informações valiosas, que incluem:- Dados pessoais de funcionários e clientes.
- Acesse dados para o banco do cliente.
- Dados do cliente da empresa.
- Desenhos de produção.
- Documentação do projeto.
- E outros
Esses dados estão localizados em sistemas diferentes e sua segurança é bastante difícil de controlar. E o roubo ou deturpação de tais informações acarreta grandes perdas financeiras, uma diminuição na reputação da organização, perda de clientes e parceiros importantes e interrupção de transações e projetos.No entanto, existem muitos meios de proteção de informações no mercado:
e é bem possível organizar uma boa proteção abrangente - haveria um desejo e meios.E a segurança de aplicativos?
Uma empresa precisa de um aplicativo estável e funcional, com funcionalidade eficaz que possa gerar retornos financeiros. Mas não importa quão ideal o aplicativo possa ser em termos de funcionalidade, ele pode ter artefatos relacionados a vulnerabilidades. Geralmente eles não pensam nisso, pois esses artefatos não se manifestam até um certo momento - até que concorrentes ou um hacker curioso precisem. As vulnerabilidades podem ser exploradas com o objetivo de tentar se infiltrar na infraestrutura de uma organização através de um site ou aplicativo ou obter acesso a dados valiosos que esse aplicativo processa ou armazena. Como resultado, os negócios podem ser seriamente afetados.Infelizmente, a análise de segurança ainda é rara no desenvolvimento personalizado. O motivo é a singularidade dos projetos. Eles são todos muito diferentes e cada um tem suas próprias necessidades. Isso afeta o custo da análise. Dada a baixa margem dos negócios, nem sempre é possível colocar o processo em andamento no desenvolvimento personalizado. No entanto, é melhor não negligenciar o processo.Como evitar o roubo de dados do aplicativo?
Desde o início do desenvolvimento de um aplicativo móvel ou da Web, faz sentido introduzir uma análise do código do produto para segurança.Você não pode confiar apenas no WAF (firewall) em termos de proteção: a regra pode não funcionar, configuração incorreta ou assinaturas desatualizadas podem ser usadas. Apenas um conjunto de medidas: o uso da análise estática do código fonte durante o processo de desenvolvimento, a análise instrumental em um ambiente de combate, o teste com caneta, o WAF e a proteção contra DDoS ajudarão a garantir um alto nível de segurança do aplicativo.Os scanners instrumentais e o teste de caneta detectarão vulnerabilidades que não puderam ser identificadas pela análise do código durante o desenvolvimento.Como organizar o processo de teste de vulnerabilidades?
O AGIMA implementa várias abordagens para a análise do código de segurança:- Integração total durante o desenvolvimento do CI / CD.
- Auditoria de segurança nos pontos de verificação.
- Auditoria de segurança situacional ou única.
A opção ideal é integrar a análise de segurança ao processo de desenvolvimento. Essa abordagem é especialmente relevante para projetos que o mesmo desenvolvedor desenvolve há muito tempo.A segunda opção é uma auditoria de segurança nos pontos de verificação. Esse método é adequado se o produto tiver lançamentos raros e também pode ser um ótimo complemento para a análise integrada.Faz sentido aplicar uma auditoria situacional ou única se o projeto for bastante simples ou se tiver sido transferido de outro desenvolvedor. No segundo caso, é importante determinar a dívida técnica do produto - o número de bugs e vulnerabilidades existentes. Depois disso, você precisa criar um roteiro para eliminá-los. Às vezes, tudo pode ser consertado no primeiro estágio. Se houver muitos problemas, você terá que lidar com eles no processo de desenvolvimento adicional. Primeiro, elimine os críticos e depois os menos perigosos.A abordagem, combinada das três versões listadas acima, permite: reduzir o número de possíveis vulnerabilidades na versão, minimizar a dívida técnica do produto e reduzir o tempo necessário para que o aplicativo seja vendido ao produto.O resultado de uma análise de segurança implementada nos estágios iniciais do desenvolvimento é:Em vez de uma conclusão
Hoje, a busca por vulnerabilidades em produtos de software, aplicativos móveis e web está se tornando uma importante área de atividade para todos os principais desenvolvedores. Alguns consideram a análise de vulnerabilidade especializada confiável e testam os especialistas internos. Outros usam testes com caneta, scanners de vulnerabilidade e analisadores de código. Outros ainda integram as ferramentas SAST ao processo de desenvolvimento. Além disso, é recomendável criar modelos de ameaças e analisar os riscos potenciais associados ao roubo e distorção de dados críticos antes de iniciar o trabalho.Não confie apenas no firewall e nos recursos de segurança gratuitos. A maneira mais confiável é usar uma abordagem integrada, verificar regularmente e minuciosamente o código em busca de bugs e vulnerabilidades.