{"id":12074,"date":"2022-05-18T09:32:54","date_gmt":"2022-05-18T08:32:54","guid":{"rendered":"https:\/\/42crdev.prexihost.com\/?p=12074"},"modified":"2022-09-24T14:03:54","modified_gmt":"2022-09-24T13:03:54","slug":"sua-empresa-nao-tem-alternativa-proteger-as-apis-da-forma-correta-passa-a-ser-uma-obrigacao","status":"publish","type":"post","link":"https:\/\/staging2022.42crunch.com\/sua-empresa-nao-tem-alternativa-proteger-as-apis-da-forma-correta-passa-a-ser-uma-obrigacao\/","title":{"rendered":"Sua empresa n\u00e3o tem alternativa: Proteger as APIs da forma correta passa a ser uma obriga\u00e7\u00e3o"},"content":{"rendered":"
Um amigo comentou comigo um epis\u00f3dio interessante: Telefonaram para ele dizendo que era um canal de n\u00edvel oito de seu banco, confirmando dados como endere\u00e7o, nome de m\u00e3e e pai, c\u00f4njuge, filhos etc, dizendo que existiam transa\u00e7\u00f5es suspeitas, e que a conta dele havia sido invadida e ele precisava ligar urgentemente para central do banco, e seguir os passos para mudan\u00e7as de senha e a pessoa do n\u00edvel 8 de seguran\u00e7a, ainda fez o favor de alert\u00e1-lo: \u201cPor favor, n\u00e3o forne\u00e7a suas senhas para o atendente, e sim para o canal da URA, quando o mesmo solicitar, pois esse \u00e9 o canal seguro\u201d.<\/i> Por incr\u00edvel que pare\u00e7a, o n\u00famero de telefone era muito parecido com o do banco, e no meio da noite, ainda com sono e medo de perder seu dinheiro, ele n\u00e3o exitou em realizar o procedimento. Para resumir a hist\u00f3ria: Este amigo caiu num grande golpe, que gerou uma grande dor de cabe\u00e7a para resolv\u00ea-lo, in\u00fameras intera\u00e7\u00f5es com o banco de verdade, boletins de ocorr\u00eancia na pol\u00edcia. Fatos como estes vem acontecendo e as v\u00edtimas podem ser n\u00e3o s\u00f3 seus clientes, mas voc\u00ea<\/b>.<\/p>\nDe onde informa\u00e7\u00f5es como estas s\u00e3o vazadas?<\/h2>\n
Apesar da grande maioria de ataques no Brasil serem atribu\u00eddos a ransomwares,<\/i><\/b> cada vez mais as empresas est\u00e3o expondo APIs, o que do ponto de vista de neg\u00f3cios \u00e9 mais que certo e necess\u00e1rio, entretanto a forma de expor as informa\u00e7\u00f5es e opera\u00e7\u00f5es, sobretudo via APIs pode comprometer n\u00e3o somente as empresas, mas tamb\u00e9m as regulamenta\u00e7\u00f5es e movimentos que t\u00eam como alicerce exatamente estes componentes, entre estas temos:<\/p>\n Estas regulamenta\u00e7\u00f5es, que possuem um car\u00e1ter fidedigno de propiciar o empoderamento das pessoas como o centro de tudo, s\u00e3o elas quem decidir\u00e3o quais seus dados ser\u00e3o compartilhados, al\u00e9m da forma, e claro: Com o direito de revogar a qualquer momento os usos destas informa\u00e7\u00f5es.<\/p>\n Os epis\u00f3dios de vazamento de dados j\u00e1 est\u00e3o presentes na nossa regi\u00e3o desde o fim de 2019, onde 2 empresas de telefonia m\u00f3vel tiveram dados vazados atrav\u00e9s da vulnerabilidade classificada pela OWASP API Top 10 como BOLA- Broken Object Level Authorization<\/i> (Objeto\u00a0 de n\u00edvel de autoriza\u00e7\u00e3o corrompido), veja a defini\u00e7\u00e3o na pr\u00e1tica:<\/p>\n \u201d API1:2019 Autoriza\u00e7\u00e3o de n\u00edvel de objeto quebrado<\/p>\n As APIs tendem a expor endpoints que lidam com identificadores de objetos (exemplo: CPF, CNPJ, Email etc), criando um amplo problema de controle de n\u00edvel de acesso das informa\u00e7\u00f5es de um requisitante. As verifica\u00e7\u00f5es de autoriza\u00e7\u00e3o de n\u00edvel de objeto devem ser consideradas em todas as fun\u00e7\u00f5es que acessam uma fonte de dados usando a entrada do usu\u00e1rio.\u201d<\/p>\n Para ilustrar este cen\u00e1rio, vamos observar a imagem abaixo:<\/p>\n <\/p>\n <\/p>\n Figura 1 \u2013 Fluxo de execu\u00e7\u00e3o de um ataque BOLA<\/p>\n Imagine uma aplica\u00e7\u00e3o Web, Mobile ou at\u00e9 ChatBot (canal cliente), quando uma requisi\u00e7\u00e3o \u00e9 disparada com destino aos backends (endpoints, servi\u00e7os), uma sequ\u00eancia de eventos acontece, vamos ent\u00e3o explicar cada uma delas:<\/p>\n Essa \u00e9 cadeia da execu\u00e7\u00e3o, que mais uma vez: Totalmente de acordo com o que se espera, entretanto existe um grande problema: A chave para encontrar os dados do cliente est\u00e1 sendo passada no endere\u00e7o da chamada (URL), desta forma o que acontece quando:<\/p>\n O problema acima aconteceu nos seguintes casos (preservando nomes das empresas em casos \u00e9ticos):<\/p>\n Por\u00e9m voc\u00ea pode pensar: \u201cIsso \u00e9 problema apenas no Brasil\u2026\u201d A resposta definitivamente \u00e9 n\u00e3o! Empresas como Facebook, Instagram, Equifax, T-Mobile, Verizon, Paypal e outras gigantes do mundo digital, somam cerca de 1 bilh\u00e3o de pessoas com dados comprometidos.<\/p>\n Como foi dito anteriormente: \u201cSim, v\u00e1rios neg\u00f3cios orientados por APIs est\u00e3o em risco!\u201d.<\/p>\n No mercado temos duas pr\u00e1ticas de prote\u00e7\u00e3o de APIs que s\u00e3o as mais populares:<\/p>\n Independentemente da abordagem de solu\u00e7\u00f5es, o que j\u00e1 est\u00e1 provado \u00e9 que ferramentas tradicionais n\u00e3o s\u00e3o capazes de proteger de forma efetiva suas APIs, al\u00e9m disto, o desenvolvimento das APIs utiliza pr\u00e1ticas de desenvolvimento \u00e1gil, que pode facilitar muito a forma como voc\u00ea pode proteger suas APIs, vamos agora saber mais sobre estas suas abordagens.<\/p>\n Ferramentas que seguem esta abordagem tem a vantagem de serem adicionadas as infraestruturas de forma mais r\u00e1pida, entretanto, a possibilidade de falsos positivos \u00e9 enorme, e isto se d\u00e1 muitas vezes, como dito anteriormente: A falta de contexto quando o caso \u00e9 API<\/i>. Al\u00e9m disso, a descoberta de um problema j\u00e1 em produ\u00e7\u00e3o, de acordo com o NIST tem um custo de corre\u00e7\u00e3o 30x quando levado em considera\u00e7\u00e3o ao custo de desenvolvimento, se comparados as fases de desenvolvimento e testes, onde possuem os custos de 5x a 10x do custo inicial .<\/p>\n <\/p>\n <\/p>\n Analogia para entendimento<\/strong><\/p>\n Fazendo a analogia de seguran\u00e7a, quando comparamos nossos recursos a serem protegidos como uma casa, existem mecanismos que funcionam como grades, cadeados etc, que servem para prote\u00e7\u00e3o, mas que sim, s\u00e3o pass\u00edveis de falhas.<\/p>\n Rezam as boas pr\u00e1ticas que as APIs devem ter um contrato, estes conhecidos como: contratos Swagger e Open API Spec(OAS). Estes, por sua vez, servem para descrever as opera\u00e7\u00f5es e dados da API em quest\u00e3o, ou seja, tudo que a API deve fazer e como est\u00e3o descritos nesses documentos.<\/p>\n Com isto em mente, \u00e9 poss\u00edvel implementar o Modelo Positivo de Seguran\u00e7a, <\/i><\/b>que consiste na capacidade de aceitar somente opera\u00e7\u00f5es e dados descritos neste contrato, e tudo, absolutamente tudo que estiver fora deste contrato ser\u00e1 recha\u00e7ado. Desta maneira, a redu\u00e7\u00e3o de falso-positivos \u00e9 reduzida drasticamente, fazendo com que as API possam ter uma prote\u00e7\u00e3o mais efetiva.<\/p>\n Analogia para entendimento<\/strong><\/p>\n Fazendo a analogia do cart\u00e3o de embarque no aeroporto, apenas ser\u00e3o permitidos no avi\u00e3o, aqueles que possuem as credenciais(cart\u00e3o) e ainda provem que eles s\u00e3o eles mesmos, o que \u00e9 comparado com a lista de passageiros esperados. Qualquer outra pessoa, sem o cart\u00e3o de embarque espec\u00edfico, ou de outro voo, ser\u00e3o barrados no embarque em quest\u00e3o, n\u00e3o existe desta forma \u201cachismo\u201d ou potenciais pontos de falhas, dadas as diversas confer\u00eancias que existem.<\/p>\n Usando essa abordagem de melhorar, testar e proteger com base no contrato, \u00e9 poss\u00edvel ent\u00e3o levar em considera\u00e7\u00e3o todo o ciclo de desenvolvimento das APIs. E esta \u00e9 a abordagem da 42Crunch:<\/p>\n <\/p>\n <\/p>\n A abordagem da 42Crunch parte do princ\u00edpio de empoderamento de todos os times envolvidos no desenvolvimento e lan\u00e7amento \u00e0 produ\u00e7\u00e3o das APIs.<\/p>\n <\/p>\n <\/p>\n Para Desenvolvimento<\/strong><\/p>\n Para os desenvolvedores, \u00e9 disponibilizado de forma gratuita uma extens\u00e3o para Visual Studio Code, IntelliJ e Eclipse, e com esta extens\u00e3o \u00e9 poss\u00edvel ajudar o desenvolvedor a verificar o Score de seguran\u00e7a e vulnerabilidades das APIs. Em algumas investiga\u00e7\u00f5es de APIs de seguradoras que s\u00e3o abertas, j\u00e1 capturamos APIs com o Score de 18 (0 a 100), ou seja, estas API possuem in\u00fameros pontos de vulnerabilidades:<\/p>\n <\/p>\n <\/p>\n Com esta extens\u00e3o \u00e9 poss\u00edvel identificar:<\/p>\n Esta extens\u00e3o n\u00e3o analisa o c\u00f3digo fonte (linguagem de programa\u00e7\u00e3o) e sim, apenas o contrato. Por este motivo, este componente n\u00e3o substitui<\/b> ferramentas como SonarQube, Veracode etc.<\/p>\n Caso o desenvolvedor tente \u201ccommitar\u201d um contrato que o Score n\u00e3o esteja de acordo com o m\u00ednimo aceit\u00e1vel, (por exemplo: 85%), automaticamente o processo de execu\u00e7\u00e3o do pipeline vai devolver pros desenvolvedores a negativa da execu\u00e7\u00e3o.<\/p>\n Automaticamente a plataforma ir\u00e1 criar testes autom\u00e1ticos que realizar\u00e3o chamadas no Backends com dados e tipos de chamadas exatamente desconformes ao contrato Swagger\/OAS para verificar o comportamento do Backend, por exemplo:<\/p>\n <\/p>\n Estes tipos de testes, de acordo com as expectativas do contrato, s\u00e3o extremamente dif\u00edceis de serem executados de forma manual, ou mesmo pelos desenvolvedores e testadores, desta forma, a plataforma automaticamente poder\u00e1 gerar os testes necess\u00e1rios, e mais uma vez, fazer com que o desenvolvedor possa corrigir eventuais erros na camada de backend, que s\u00e3o expostas exatamente pelo contrato Swagger\/OAS.<\/p>\n Para Ambiente de Produ\u00e7\u00e3o<\/strong><\/p>\n A 42Crunch entrega um componente novo na infraestrutura que \u00e9 o API Firewall, este por sua vez, analisa a requisi\u00e7\u00e3o do cliente e as respostas dos backends, se estas n\u00e3o forem de acordo com as permitidas no contrato Swagger, automaticamente ser\u00e3o bloqueadas, notificando a equipe de opera\u00e7\u00e3o e fazendo com que a camada de consumo, sendo um usu\u00e1rio malicioso ou n\u00e3o, receba o m\u00ednimo de informa\u00e7\u00f5es, fazendo com que a integridade de dados de neg\u00f3cios seja preservada.<\/p>\n Desafio das Empresas<\/strong><\/p>\n Possuir os contratos Swagger\/OAS pode ser uma tarefa desafiadora, uma vez que muitas empresas n\u00e3o se atentaram para estes artefatos, muitas vezes sendo gerados pelos backends de forma autom\u00e1tica, o que gera in\u00fameras discrep\u00e2ncias nos quesitos de seguran\u00e7a. Para ajudar neste aspecto, a 42Crunch est\u00e1 trabalhando em um novo componente para lan\u00e7amento no segundo semestre de 2022.<\/p>\n Conclus\u00e3o<\/p>\n Quando o tema \u00e9 prote\u00e7\u00e3o de APIs, estamos abordando um assunto extremamente novo, h\u00e1 muita pesquisa sobre boas pr\u00e1ticas para aprimorar a seguran\u00e7a de APIs e, para deixar alguns resumos:<\/p>\n\n
\n
\n
\n
\n
\n
Pr\u00e1ticas para Proteger suas APIs<\/h2>\n
\n
Intelig\u00eancia Artificial<\/strong><\/h3>\n
Prote\u00e7\u00e3o de acordo com os contratos das APIs<\/h3>\n
\n
Para o DevOps 1: An\u00e1lise de Score do contrato nas etapas de CI\/CD\u00a0<\/strong><\/h3>\n
Para o DevOps 2: An\u00e1lise de Conformidade\u00a0<\/strong><\/h3>\n
\n\n
\n \nTeste Automatico<\/th>\n Resultado Esperado<\/th>\n Resultado Retornado<\/th>\n Conclus\u00e3o<\/th>\n<\/tr>\n<\/thead>\n \n Envio de um valor string para um atributo que aceita apenas numeral(moeda)<\/td>\n Se houver erro de dados:
\nEnvio : HTTP 409
\nJSON:
\nTipo_erro: “cliente”
\nMsg: “Erro de formata\u00e7\u00e3o de dados”<\/td>\nHTTP 500
\nStackTraceException:…..<\/td>\nO Backend n\u00e3o est\u00e1 em conformidade com o contrato<\/td>\n<\/tr>\n \n Envio de um valor string para um atributo que aceita apenas numeral(moeda)<\/td>\n Se houver erro de dados:
\nEnvio : HTTP 409
\nJSON:
\n{“tipo_erro”: “cliente”
\n“msg”: “Erro de formata\u00e7\u00e3o de dados”<\/td>\nHTTP 201
\nExecutado com sucesso.<\/td>\nO Backend n\u00e3o est\u00e1 em conformidade com o contrato<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n \n