blog conviso

A sua cadeia de suprimentos de software é segura?

July 24, 2020

By

Rodrigo Maués

ebe092c5|supply-chain

Quando pensamos em uma cadeia de suprimentos, logo nos vem à mente uma empresa da área industrial e sua fábrica recebendo suas matérias primas. Esse pensamento não está incorreto, mas temos que lembrar que o termo “cadeia de suprimentos” diz respeito à entrega de insumos para a produção de algum bem ou serviço.

A cadeia de suprimento em produção de software é muitas vezes negligenciada justamente pela ideia de que, por se tratar de um bem ou serviço digital, não contaria com a entrega de insumos. Mas se você parar para analisar, perceberá que existem sim muitas semelhanças entre as duas formas de cadeias de suprimentos.

Precisamos entender que a produção de software também é um processo de criação de um bem ou serviço, e como tal, tem as suas necessidades durante o processo de produção ou construção. 

Pensar na segurança da cadeia de suprimento de software é também um ponto fundamental para garantir a segurança de suas aplicações. E neste artigo não queremos tratar de segurança do pipeline,  afinal, já temos um artigo sobre isso. Neste momento, queremos abordar alguns pontos que podem ajudar nos seu planejamento.

O que é uma cadeia de suprimento

Podemos entender o conceito de “supply chain” como o processo pelo qual uma empresa garante o fluxo de pessoas, atividades, informações e recursos envolvidos na atividade de produção ou criação de um bem ou serviço que tem como pontos extremos os fornecedores e os clientes.

Desta forma, pela definição, vemos que não temos algo que diga que somente produtos físicos têm uma cadeia de suprimento. Afinal, tudo tem sua cadeia de suprimento, e por que não nossos softwares ?

Sendo assim, temos que pensar em como nossos softwares, enquanto produtos ou serviços, serão criado ou produzidos. Precisamos pensar também em como será isto entregue ao nosso cliente, visto que o conceito original nos mostra que precisamos levar em consideração o fluxo inteiro do processo de ponta a ponta.

Uma cadeia de suprimento de software é muito semelhante à que encontramos em um modelo mais tradicional da indústria. É também a que associamos com mais facilidade. Mas, da mesma forma, você precisa identificar e confiar na sua matéria-prima, que neste caso são os códigos, as possíveis bibliotecas e os pacotes criados. 

Ainda, vai precisar montá-los, usar uma estrutura de rede para entregá-los a um sistema de armazenamento -  que pode ser o seu repositório de dados -  para que, com tudo isso, o seu software possa ser usado pelo seu cliente.

Trata-se de um processo completo até o seu cliente. No caso da produção do software, a empresa deve olhar para os dois sentidos pois em um momento ela pode ser cliente de alguém e em outro alguém é seu cliente.

Olhando nos dois sentidos

Quando falamos com nossos clientes sobre cadeia de suprimento, normalmente obtemos duas conclusões frequentes:

A primeira é que percebemos que o tema é novo para a empresa. Ou seja, que ela nunca pensou na produção do software como uma plataforma de entrega de um produto ou serviço, ou algo que tem uma cadeia de suprimento própria.

E isso é interessante pois nos coloca diante de um cenário onde a construção do software se deu de forma muitas vezes não muito planejada, algo mais orgânico em sua construção.

De certo ponto de vista, isso pode até ser um ponto positivo. Afinal, não traz vícios ou mesmo entendimentos prévios que podem ter sido colocados de forma incorreta. Mas também nos traz a uma realidade bem cruel na área de desenvolvimento de software, em que as empresas continuam sem saber o que realmente é application security, e continuam pensando em segurança de código como colocar ferramentas para “varrer” o código e movimentá-lo de forma automática em uma esteira de produção.

O segundo ponto que percebemos é que, em casos em que a empresa já tem uma percepção de cadeia de suprimento de software, mesmo que já exista um processo de entrega ou mesmo uso de recursos desenhado, muitas vezes ainda existe a crença que sua cadeia de suprimento se dá entre a empresa e o seu fornecedor. Ou seja, ela esquece que em algum momento, é o fornecedor de alguém.

Os quatro passos

Para começar a pensar na segurança de nossa cadeia de suprimento de software, temos que ter em mente estes quatro passos:

  • Garantir que nosso processo é consistente e tem qualidade;
  • Identificar todos os recursos de seu pipeline (pessoas, código, dependências, a infraestrutura);
  • Garantir a segurança do código (produto) tanto em armazenamento ou mesmo em trânsito;
  • Garantir que o produto final foi validado e entregue de acordo com o esperado.

Garantindo esses pontos, estamos trabalhando de forma consistente a segurança de nosso fluxo de produção, e assim, de nossa cadeia de suprimento.

O que os seus contratos exigem?

Além disso, cada vez mais precisamos entender que construir um software não é somente criar uma sequência de comandos e suas ações. Hoje já é um processo normal para as empresas ter seus planejamentos de software alinhados às necessidades regulamentadoras ou mesmo contratuais, as quais devem ser observadas. 

Regulamentos como PCI-DSS dão aos produtores de software uma série de pontos que devem ser observados para que eles possam ser entendidos como sistemas em conformidade com as suas exigências. Por outro lado, há novas leis que estão cada vez mais exigentes com relação a como os sistemas e aplicações tratam e protegem os dados. 

Por isso, dentro de nossa cadeia de suprimentos temos que saber quais serão as consequências e plano de ação caso ocorra, por exemplo, um vazamento de dados em um de nossos recursos. E por recursos podemos entender os fornecedores, pessoas ou mesmo ativos como bibliotecas que possuem algum tipo de vulnerabilidade.

Isso só é possível quando conseguimos entender e perceber todo o fluxo de atividades, recursos e estruturas necessárias para a produção de nosso bem ou serviço. Em outras palavras, conhecendo bem a cadeia de suprimento.

Para que este se torne um processo um pouco mais fácil, é interessante que seja conhecido todo o fluxo de dados, em ambos os sentidos. Esse conhecimento facilitará identificar possíveis falhas e buscar entender o que e como pode acontecer uma falha dentro do seu fluxo. Afinal, isso permitirá que você esteja preparado para atuar em uma situação do gênero.

Desenvolvimento não é só tecnologia

É natural que, ao falarmos sobre segurança em desenvolvimento, o pensamento vá logo para como adotamos a tecnologia e como construímos nossa infraestrutura.

O que muitas vezes esquecemos é que desenvolvimento também é formado por um grande e complexo processo, o qual deve ser entendido por completo.

É muito importante lembrar que o processo também pode ter implicações de segurança.

Neste caso, não há diretamente uma solução que possa ser aplicada e o seu processo se tornará imediatamente mais seguro. Afinal, o que o torna mais seguro é o completo entendimento dele e como ele pode ser burlado ou não. Já falamos um pouco sobre isso neste outro artigo, mas queremos reforçar com um outro ponto.

A Modelagem de Ameaças pode ser uma grande ferramenta para que você possa entender o seu processo, o fluxo e como este fluxo pode ser impactado por possíveis ameaças.

Usando essa metodologia, você poderá entender como as ameaças podem influenciar na construção da sua cadeia de suprimento, ajudando a notar pontos que podem ser melhorados e aqueles que podem ser reforçados por meio de etapas de validação.

Conheça o seu processo, desenhe todo o seu fluxo e ficará muito mais fácil seu entendimento.

Audite seu fornecedor

Há um ditado no mercado americano que diz: “trust but verify!”, ou seja "confie, mas valide". Parece grosseiro, mas pense nisso como a sua garantia para o seu produto.

Sempre que falamos de segurança na cadeia de suprimento, é comum perguntamos como é garantido o processo de desenvolvimento do fornecedor.

Não é difícil termos como resposta que o processo e as garantias de segurança estão colocadas em contrato, e que é assim que são garantidos tanto a segurança quanto a entrega do produto. De todo não está errado, mas entendemos que isso não é de forma alguma garantia de que seu fornecedor esteja seguindo todos os pontos colocados no contrato. 

Sabemos que por meio de um contrato seria possível buscar reparação por algum problema. No entanto, já parou para pensar qual seria o custo deste problema?

Por mais que seu fornecedor seja e tenha sua confiança, ajude-o neste processo. Junto com seu fornecedor, construa um processo de desenvolvimento seguro, crie cronogramas de validação e auditoria para que esse processo seja mantido e executado.

Neste aspecto, os dois ganham:  você, pela certeza que seu código está sendo tratado de forma correta, e o seu fornecedor, que agora possui um processo mais adequado para a produção de códigos mais seguros.

Lembre-se que atualmente há um valor muito alto de turnover para profissionais de desenvolvimento. E isso impacta diretamente em empresas que trabalham com modelos de fábricas de software. Com este pensamento, será se eles estão garantindo que essa troca de profissionais não afete a segurança do seu produto?

Como anda o seu suporte?

Garantir a segurança de uma cadeia de suprimento é um processo desgastante, complexo e difícil e precisa necessariamente do apoio de gestores. Como está o seu ?

Esse apoio é de extrema importância, visto que garantir a segurança de sua cadeia de suprimento pode afetar em dois pontos primordiais dentro do processo de produção de software.

O primeiro ponto pode ser o tempo. É possível que, por não usar uma série de cuidados e ou processos que te entreguem mais segurança, seu tempo de produção seja realmente muito baixo. 

Isso pode enganar a todos, mostrando que seu processo é eficiente e que pode cada vez mais entregar produtos mais cedo. No entanto, como está a segurança final do produto? Adianta colocar rapidamente em produção um produto com problemas de segurança, que vai acabar gerando stress e retrabalho?

Esse ponto pode aparecer durante as discussões para melhorar a segurança do processo de cadeia de suprimento. O quanto isso vai afetar na velocidade de entrega? Bom, isso é muito relativo, pode sim afetar e diminuir o ritmo de entrega. No entanto,, uma cadeia de suprimento mais confiável pode garantir uma segurança melhor no produto final, eliminando uma série de problemas mais à frente. 

Segundo ponto: o investimento

Não tem jeito, você vai precisar de investimento para aplicar as ações necessárias para garantir a segurança da sua cadeia de suprimentos. 

Por exemplo, como você vai justificar o tempo e horas trabalhadas para implementar ou validar um processo de desenvolvimento seguro em seu fornecedor, já que o pensamento normal é que este seja um ponto que deve ser tomado pelo fornecedor ?

Para ajudar neste processo, comece criando algumas categorias de risco. Além de ajudar na busca por apoio, demonstrando o que estão de fato buscando resolver, isto mostra ao gestor a importância de investimentos nesta área.

Podemos sugerir alguns pontos como:

  • Riscos de Negócios, que podem ser por questões de regulamentação, contratos ou mesmo legais;
  • Riscos operacionais;
  • Riscos de mercado, por exemplo a dependência de um único fornecedor;
  • Risco de pessoas;

Estes são apenas alguns exemplos. Desta forma, você pode identificar o que pode ser mais relevante dentro de sua organização e buscar demonstrar os ganhos com o investimento correto em segurança.

Já olhou pra sua nuvem?

Não é fácil encontrar hoje um processo de desenvolvimento que não tenha sido afetado por conceitos de cloud computing. Esse aspecto traz para dentro das empresas um novo ponto e que muitas vezes pode ser negligenciado.

Aqui temos dois pontos a serem destacados quando o assunto é cadeia de suprimento.

Em um primeiro momento, podemos olhar para nossos fornecedores de cloud e entender como eles podem nos ajudar ou garantir a segurança de nossa plataforma dentro do espaço contratado. Muitas vezes essas garantias são de entregas de ferramentas e serviços que podem ser usados para garantir essa segurança, mas precisam ser operacionalizados de uma forma correta.

Garantir que nossas equipes tenham o devido entendimento e conhecimento destes recursos é fundamental para garantir a segurança, tanto do produto em si quanto do fluxo dentro da cadeia de suprimento.

Lembra do tópico anterior? Aqui pode ser um ponto sobre riscos operacionais que você pode levantar e demonstrar a importância deles.

Um segundo ponto é com relação à portabilidade do seu negócio entre os fornecedores de cloud -  é possível no seu caso?

Dentro e um ponto de vista de risco de negócio, é preciso que entenda se vai ou não ter seu negócio engessado à tecnologia do seu fornecedor, isso pode impedir sua migração ou mesmo evolução.

Entenda e mapeie a estrutura e serviços de seu fornecedor de cloud. Além disso, entenda se é possível a migração de um fornecedor para outros sem ter nenhum ou pouco impacto em seu negócio.

Conclusão

Acreditamos que conseguimos entregar a nosso leitor um texto que possa no mínimo estimular a buscar entender e a melhorar a segurança de sua cadeia de suprimento. Claro que podemos ajudar em cada um destes passos mas, bem mais importante de nos colocarmos como prestadores de serviço, queremos ser fomentadores de conhecimento e por isso sempre tentamos trazer pontos que afetam a segurança de software.

Garantir a segurança da cadeia de suprimento é um processo complexo, mas muito importante e sabemos que é um processo difícil de ser “vendido” em muitas empresas, mas acreditamos que com esse texto podemos ajudar.

A título de exemplificação de possíveis danos causados por cadeias de suprimentos, queremos sugerir mais alguns links para a leitura, e também queremos saber sua opinião sobre o tema. Deixe nos comentários!

https://www.darkreading.com/attacks-breaches/asus-shadowhammer-attack-underscores-trusted-third-party-risks/d/d-id/1334261

https://www.bloomberg.com/news/features/2018-10-04/the-big-hack-how-china-used-a-tiny-chip-to-infiltrate-america-s-top-companies

https://en.wikipedia.org/wiki/Chicago_Tylenol_murders

Nos vemos na próxima !

Nova call to action

Sobre o autor

Rodrigo Maués

Bachelor's degree in Computer Science from the Federal University of Alagoas. He has spoken at events such as the NullByte Security Conference and Hackers to Hackers Conference, and presented research projects at national and international events. He has experience in application security, exploit development, and vulnerability research in both userland and kernel land, having discovered vulnerabilities for companies like Microsoft, AMD, and Intel. His interests include operating system internals, compilers, malware development, vulnerability research, and EDR evasion.

Saiba mais