CRIANDO APIS SEGURAS - AWS

132
CRIANDO APIS SEGURAS 1

Transcript of CRIANDO APIS SEGURAS - AWS

CRIANDO APIS SEGURAS

1

QUEM SOU EU?

VINÍCIUS CAMPITELLI

Co-fundador do Membro do GitHub e Twitter: Slides:

CurseducaPHPSP

@vcampitelliviniciuscampitelli.com

2

AGENDA

3

AGENDAAutenticação e autorização

3

AGENDAAutenticação e autorizaçãoMelhores práticas com access tokens

3

AGENDAAutenticação e autorizaçãoMelhores práticas com access tokensThrottling e Rate Limiting

3

AGENDAAutenticação e autorizaçãoMelhores práticas com access tokensThrottling e Rate LimitingCamu�agem de IDs sequenciais

3

AGENDAAutenticação e autorizaçãoMelhores práticas com access tokensThrottling e Rate LimitingCamu�agem de IDs sequenciaisCriptografando e assinando requisições e respostas

3

AUTENTICAÇÃO EAUTORIZAÇÃO

4 . 1

AUTENTICAÇÃO

É o ato de estabelecer ou con�rmar algo (oualguém) como autêntico (...)

Fonte: Wikipedia

4 . 2

AUTENTICAÇÃO

É o ato de estabelecer ou con�rmar algo (oualguém) como autêntico (...)

Fonte: Wikipedia

4 . 2

AUTENTICAÇÃOPara autenticar algo ou alguém, precisamos de uma

credencial que o identi�que.Ela precisa ser emitida por algo (ou alguém) que o autorizador

con�e.

4 . 3

“O QUE VOCÊ SABE”Autenticação baseada no conhecimento

4 . 4

“O QUE VOCÊ SABE”Autenticação baseada no conhecimento

Exemplos:Usuário e senhaCerti�cado digitalClient ID e Client Secret

4 . 4

“O QUE VOCÊ TEM”Autenticação baseada na propriedade

4 . 5

“O QUE VOCÊ TEM”Autenticação baseada na propriedade

Exemplos:

4 . 5

“O QUE VOCÊ TEM”Autenticação baseada na propriedade

Exemplos:

Token ou cartão físico

4 . 5

“O QUE VOCÊ TEM”Autenticação baseada na propriedade

Exemplos:

Token ou cartão físico Código via aplicativo

4 . 5

“O QUE VOCÊ É”Autenticação baseada na característica

4 . 6

“O QUE VOCÊ É”Autenticação baseada na característica

Exemplos:Impressão digitalIdenti�cação de írisReconhecimento facialReconhecimento de voz

4 . 6

AUTORIZAÇÃOÉ garantir que apenas usuários autorizadosconsumam os recursos protegidos de umsistema computacional

Fonte: Wikipedia

4 . 7

AUTORIZAÇÃOÉ garantir que apenas usuários autorizadosconsumam os recursos protegidos de umsistema computacional

Fonte: Wikipedia

4 . 7

AUTORIZAÇÃOApós saber quem é o cliente no processo de Autenticação,

preciso agora entender o que ele pode fazer. Quais recursosele pode consumir? Por quanto tempo?

4 . 8

COMO EFETUAR AUTENTICAÇÃO EAUTORIZAÇÃO?

4 . 9

COMO EFETUAR AUTENTICAÇÃO EAUTORIZAÇÃO?

Para autenticação, podemos utilizar o ouimplementar nosso próprio sistema (por exemplo, através do

banco de dados).

OpenID

4 . 9

COMO EFETUAR AUTENTICAÇÃO EAUTORIZAÇÃO?

Para autenticação, podemos utilizar o ouimplementar nosso próprio sistema (por exemplo, através do

banco de dados).

OpenID

é o protocolo mais conhecido de autorização. Ele,por si só, não contempla processos de autenticação.

OAuth 2.0

4 . 9

FAMOSA TELA DE AUTORIZAÇÃO VIA OAUTH 2Utilizando o Grant de Authorization Code

(saiba como escolher o Grant Type certo )nesse link

Referência: Shotgun Debugging 4 . 10

REFERÊNCIAS

Para PHP

OpenIDAuth0OAuth 2.0

The PHP League: OAuth 2.0 ServerMeu slides sobre OAuth2

4 . 11

MELHORES PRÁTICASCOM ACCESS TOKENS

5 . 1

O QUE É UM ACCESS TOKEN?

5 . 2

O QUE É UM ACCESS TOKEN?É um objeto que descreve o contexto desegurança de um processo (...)

Fonte: MSDN

5 . 2

E NO MUNDO DE APIS?O processo de autenticação e autorização pode ser caro

computacionalmente (consultas a banco de dados, servidores deautenticação externos, criptogra�a de senha etc)

5 . 3

E NO MUNDO DE APIS?Ao invés de sempre termos essa carga a cada requisição a

nossos servidores, podemos ter um único endpoint deautenticação / autorização que irá realizar essa etapa uma

vez e gerar um access token com as informações necessáriaspara autenticar e autorizar mais rapidamente o cliente nas

requisições seguintes

5 . 4

E NO MUNDO DE APIS?Esse token deve possuir um tempo de vida limitado, tantopara diminuir efeitos colaterais caso haja um vazamentoquanto porque sua informação pode �car desatualizada

5 . 5

E NO MUNDO DE APIS?Esse segundo processo pode ser automatizado através de

refresh tokens

5 . 6

E NO MUNDO DE APIS?Esse segundo processo pode ser automatizado através de

refresh tokens

Eles são utilizados para regerar um access tokenautomaticamente, sem necessitar da intervenção manual do

usuário

5 . 6

5 . 7

COMO DEIXAR OS TOKENS SEGUROS?

5 . 8

COMO DEIXAR OS TOKENS SEGUROS?Utilizando algoritmos de criptogra�a seguros e comassinatura;

5 . 8

COMO DEIXAR OS TOKENS SEGUROS?Utilizando algoritmos de criptogra�a seguros e comassinatura;

AES-256-GCM, ChaCha20+Poly1305, Ed25519 entre outros

5 . 8

COMO DEIXAR OS TOKENS SEGUROS?Utilizando algoritmos de criptogra�a seguros e comassinatura;

AES-256-GCM, ChaCha20+Poly1305, Ed25519 entre outros

Tendo cuidado com implementações de bibliotecas comfalhas de segurança;

5 . 8

COMO DEIXAR OS TOKENS SEGUROS?Utilizando algoritmos de criptogra�a seguros e comassinatura;

AES-256-GCM, ChaCha20+Poly1305, Ed25519 entre outros

Tendo cuidado com implementações de bibliotecas comfalhas de segurança;

Exemplo: JWT com alg=none

5 . 8

COMO DEIXAR OS TOKENS SEGUROS?Não faça commit de chaves e outros segredos, nem deixe-oshardcoded na aplicação

5 . 9

COMO DEIXAR OS TOKENS SEGUROS?Não faça commit de chaves e outros segredos, nem deixe-oshardcoded na aplicaçãoNão guarde informações muito sensíveis (como senhas eoutras credenciais)

5 . 9

COMO DEIXAR OS TOKENS SEGUROS?Não faça commit de chaves e outros segredos, nem deixe-oshardcoded na aplicaçãoNão guarde informações muito sensíveis (como senhas eoutras credenciais)Se precisar armazenar do lado do cliente, utilize cookiesseguros (�ags httpOnly e secure ) ao invés do LocalStorage

5 . 9

COMO DEIXAR OS TOKENS SEGUROS?Apenas trafegue tokens no cabeçalho ou corpo darequisição, nunca na URL

5 . 10

COMO DEIXAR OS TOKENS SEGUROS?Apenas trafegue tokens no cabeçalho ou corpo darequisição, nunca na URLNão exiba informações do token em seus logs

5 . 10

EXEMPLO DE IMPLEMENTAÇÃOuse Lcobucci\JWT\Builder; $time = time(); $token = (new Builder()) ->issuedBy('http://example.com') // Configures the issuer (iss claim) ->permittedFor('http://example.org') // Configures the audience (aud claim) ->identifiedBy('4f1g23a12aa', true) // Configures the id (jti claim), replicating as ->issuedAt($time) // Configures the time that the token was issue (iat claim) ->canOnlyBeUsedAfter($time + 60) // Configures the time that the token can be used (n ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim) ->withClaim('uid', 1) // Configures a new claim, called "uid" ->getToken(); // Retrieves the generated token

lcobucci/jwt

5 . 11

BIBLIOTECAS

JSON Web Tokens: implementação mais conhecida detokens

PASETO: implementação com design "mais seguro" porpadrão

lcobucci/jwt�rebase/php-jwt

paragonie/paseto

5 . 12

REFERÊNCIAS

, biblioteca moderna decriptogra�aMeu slides sobre a libsodium

Symfony Guard

5 . 13

THROTTLING E RATELIMITING

6 . 1

O QUE É THROTTLING?

6 . 2

O QUE É THROTTLING?É a desaceleração intencional do processamento de uma

requisição para prevenir sobrecarga do servidor

6 . 2

O QUE É THROTTLING?Imagine um endpoint que consuma grande recursos

computacionais (como, por exemplo, o processo de autenticaçãoe autorização descritos anteriormente)

6 . 3

O QUE É THROTTLING?Se um agente malicioso identi�car esse recurso, ele pode setornar muito visado para ataques, causando sobrecarga no

nosso servidor e podendo gerar paralisação e até queda totaldo serviço

6 . 4

O QUE É THROTTLING?Nesses casos, podemos con�gurar que o servidor irá aceitar

somente x requisições em algum(ns) endpoint(s) por um certoperíodo de tempo

6 . 5

O QUE É THROTTLING?Após esse valor x , as requisições entrarão em uma �la para

serem processadas alguns instantes depois, assim que asprimeiras tiverem sido liberadas

6 . 6

6 . 7

MAS ENTÃO O QUE É RATELIMITING?

6 . 8

MAS ENTÃO O QUE É RATELIMITING?

Ao contrário do Throttling, em a requisição será processadacom um atraso, Rate Limiting é fazer o servidor se recusar a

responder após um certo número de requisições

6 . 8

MAS ENTÃO O QUE É RATELIMITING?

Nesses casos, devemos emitir um status HTTP 503 ServiceUnavailable ou 429 Too Many Requests

6 . 9

COMO ESSAS DUAS PRÁTICAS SERELACIONAM ENTRE SI?

Geralmente, primeiro aplicamos uma política de Throttlingpara desacelerar o processamento nas x primeiras

requisições, e após um outro número y , iremos simplesmenteparar de responder

6 . 10

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Você deve con�gurá-las em seu servidor Web (por exemplo,Apache, IIS ou nginx) ou no seu serviço de DNS (por exemplo, o

Cloud�are)

6 . 11

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Tomando como exemplo o nginx, utilizaremos o módulongx_http_limit_req_module (que implementa o mais

conhecido algoritmo desse tipo de prática, o )Leaky Bucket

6 . 12

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

limit_req_zone $binary_remote_addr zone=login_zone:10m rate=10r/s; server { location /login { limit_req zone=login_zone burst=5; # outras configurações padrões do meu bloco location... } }

6 . 13

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

O código anterior irá proteger nosso endpoint /login ,permitindo apenas 10 requisições por segundo por IP (ou seja,

1 a cada 100ms)

6 . 14

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Mas também permitimos um burst, permitindo que 5requisições extras sejam colocadas na �la de processamento

antes de serem enviadas para o upstream

6 . 15

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Nesse caso, se recebermos de um mesmo IP 10 requisiçõesem um período de 100ms, o que ocorrerá?

6 . 16

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Nesse caso, se recebermos de um mesmo IP 10 requisiçõesem um período de 100ms, o que ocorrerá?

A 1ª requisição será processada instantaneamente

6 . 16

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Nesse caso, se recebermos de um mesmo IP 10 requisiçõesem um período de 100ms, o que ocorrerá?

A 1ª requisição será processada instantaneamenteAs 2ª, 3ª, 4ª, 5ª e 6ª requisições serão colocadas em uma �lae serão processadas sequencialmente após o término daanterior

6 . 16

ONDE E COMO CONFIGURAR ESSASPOLÍTICAS?

Nesse caso, se recebermos de um mesmo IP 10 requisiçõesem um período de 100ms, o que ocorrerá?

A 1ª requisição será processada instantaneamenteAs 2ª, 3ª, 4ª, 5ª e 6ª requisições serão colocadas em uma �lae serão processadas sequencialmente após o término daanteriorAs 7ª, 8ª, 9ª e 10ª requisições serão negadas

6 . 16

CAMUFLAGEM DE IDSSEQUENCIAIS

7 . 1

O QUE É UM ID SEQUENCIAL E POR QUEESCONDÊ-LO?

Ao criarmos endpoints no formato /user/1 , /user/2 , /user/3etc, estamos fornecendo uma informação muito valiosa sobre

a quantidade de registros que possuímos daquela entidade

7 . 2

O QUE É UM ID SEQUENCIAL E POR QUEESCONDÊ-LO?

Isso pode ser utilizado tanto por alguém mal intencionadoquanto por algum competidor.

7 . 3

O QUE É UM ID SEQUENCIAL E POR QUEESCONDÊ-LO?

Isso pode ser utilizado tanto por alguém mal intencionadoquanto por algum competidor.

Cuidado com espionagem industrial!

7 . 3

COMO RESOLVER?

7 . 4

VERSÃO STANDARD

COMO RESOLVER?

7 . 4

VERSÃO STANDARD

COMO RESOLVER?Crie um segundo campo na tabela com um valor único paraaquele registro

7 . 4

VERSÃO STANDARD

COMO RESOLVER?Crie um segundo campo na tabela com um valor único paraaquele registro

Esse valor pode ser um , um hash do ID incremental ou um valoraleatório...

GUID

7 . 4

VERSÃO STANDARD

COMO RESOLVER?Crie um segundo campo na tabela com um valor único paraaquele registro

Esse valor pode ser um , um hash do ID incremental ou um valoraleatório...

GUID

Então, transforme o recurso /user/<IdIncremental> em/user/<Identificador>

7 . 4

VERSÃO STANDARD

COMO RESOLVER?REFERÊNCIAS

Funções para gerar valores aleatórios: para PHP 7

Para PHP 5, use o poly�ll

Funções para gerar hash:

random_bytes()paragonie/random_compat

hash_hmac()

Artigo no blog da Paragon

7 . 5

VERSÃO STANDARD

COMO NÃO RESOLVER?Funções que não devem ser utilizadas:

Para gerar valores aleatórios:rand()mt_rand()uniqid()

Para gerar hash:sha1()md5()

7 . 6

COMO RESOLVER?

7 . 7

VERSÃO HARDCORE

COMO RESOLVER?

7 . 7

VERSÃO HARDCORE

COMO RESOLVER?Utilizando a biblioteca , que derivauma chave para cada coluna a partir de uma chave-mestra

REFERÊNCIA

paragonie/ciphersweet

Artigo no blog da Paragon

7 . 7

CRIPTOGRAFANDO EASSINANDO

REQUISIÇÕES ERESPOSTAS

8 . 1

PRECAUÇÃO EXTRAPara usuários avançados e sistemas críticos, podemos

adicionar uma camada extra de proteção: criptografar osdados da requisição e da resposta

8 . 2

PRECAUÇÃO EXTRAMas, espera aí! Eu já uso HTTPS. Meu dadosjá estão sendo criptografados usando TLS.

8 . 3

PRECAUÇÃO EXTRAApós o estabelecimento do protocolo, realmente os dados

transitados estão criptografados, mas ainda podemos sofrerum ataque de Man in the Middle

8 . 4

8 . 5

MAN IN THE MIDDLEExistem diversos hops entre o cliente e o servidor. Quemgarante que todos os gateways do caminho são seguros?

8 . 6

MAN IN THE MIDDLEExistem diversos hops entre o cliente e o servidor. Quemgarante que todos os gateways do caminho são seguros?Se você não for o administrador da sua rede local, alguémpode instalar uma Autoridade Certi�cadora em suamáquina e emitir certi�cados próprios

8 . 6

MAN IN THE MIDDLENem todos os sites utilizam HSTS

8 . 7

MAN IN THE MIDDLENem todos os sites utilizam HSTS

Ou seja, pode haver uma conexão HTTP antes do redirecionamentopara HTTPS pelo servidor

8 . 7

MAN IN THE MIDDLENem todos os sites utilizam HSTS

Ou seja, pode haver uma conexão HTTP antes do redirecionamentopara HTTPS pelo servidor

Teoria da conspiração: grandes empresas possuembackdoors para bisbilhotar seu tráfego

8 . 7

8 . 8

PRECAUÇÃO EXTRAAntes de seguir nessa etapa, faça um e

certi�que-se que realmente valhe a penaThreat Modeling

8 . 9

PRECAUÇÃO EXTRAAntes de seguir nessa etapa, faça um e

certi�que-se que realmente valhe a penaThreat Modeling

Compensa instalar um sistema de segurança de últimageração em um depósito que não possui algo de extremo

valor dentro?

8 . 9

PRECAUÇÃO EXTRASIM! Meu sistema é crítico e preciso disso.

8 . 10

PRECAUÇÃO EXTRASIM! Meu sistema é crítico e preciso disso. Oueu não con�o em grandes corporações.

8 . 10

PRECAUÇÃO EXTRAVocê pode exigir que toda requisição tenha seu corpo

criptografado pelo cliente, utilizando um segredo em que sóvocês dois sabem

8 . 11

PRECAUÇÃO EXTRAPor exemplo, você pode utilizar uma terceira informação forao Client ID e o Client Secret e usá-la como chave assimétrica,

ou fornecer um certi�cado digital para seu cliente

8 . 12

PRECAUÇÃO EXTRADo lado do servidor, você utiliza essa informação sigilosa para

descriptografar o corpo da requisição - se falhar, você emiteum erro e para o processamento

8 . 13

PRECAUÇÃO EXTRAEntretanto, esse processo de descriptogra�a pode ser muitocustoso operacionalmente, podendo ser um outro ponto de

ataque DoS (lembre-se do que falamos na seção de Throttling eRate Limiting). Você pode, então, utilizar um processo de

assinatura digital além da criptogra�a.

8 . 14

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciais

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dados

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinatura

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinaturaEnvia a requisição somente com os dados criptografados

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinaturaEnvia a requisição somente com os dados criptografados

Para cada resposta seguinte, ele deve:

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinaturaEnvia a requisição somente com os dados criptografados

Para cada resposta seguinte, ele deve:Veri�car a assinatura

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAO cliente...

Autentica na sua API fornecendo as credenciaisPara cada requisição, assina e criptografa os dados(combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinaturaEnvia a requisição somente com os dados criptografados

Para cada resposta seguinte, ele deve:Veri�car a assinaturaDescriptografar o corpo

8 . 15

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

8 . 16

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

Veri�car a assinatura

8 . 16

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

Veri�car a assinaturaDescriptografar o corpo

8 . 16

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

Veri�car a assinaturaDescriptografar o corpoAo responder à requisição, deve assinar e criptografar osdados (combinação do corpo da requisição + URL);

8 . 16

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

Veri�car a assinaturaDescriptografar o corpoAo responder à requisição, deve assinar e criptografar osdados (combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dados

8 . 16

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

Veri�car a assinaturaDescriptografar o corpoAo responder à requisição, deve assinar e criptografar osdados (combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinatura

8 . 16

FLUXO DE CRIPTOGRAFIA E ASSINATURAA cada requisição recebida, o servidor deve...

Veri�car a assinaturaDescriptografar o corpoAo responder à requisição, deve assinar e criptografar osdados (combinação do corpo da requisição + URL);

Utiliza um algoritmo de hash para assinar os dadosCriptografa os dados mais a assinaturaEnvia a requisição somente com os dados criptografados

8 . 16

CONCLUINDO...

9

CONCLUINDO...Segurança não é trivial

9

CONCLUINDO...Segurança não é trivialSegurança não é fácil

9

CONCLUINDO...Segurança não é trivialSegurança não é fácilSegurança não é para leigos

9

CONCLUINDO...Segurança não é trivialSegurança não é fácilSegurança não é para leigosNenhum sistema operante é invencível

9

CONCLUINDO...Segurança não é trivialSegurança não é fácilSegurança não é para leigosNenhum sistema operante é invencível,mas você deve di�cultar o trabalho de atacantes

9

CONCLUINDO...Segurança não é trivialSegurança não é fácilSegurança não é para leigosNenhum sistema operante é invencível,mas você deve di�cultar o trabalho de atacantesSaiba equilibrar e avaliar a relação de custo-benefício entresegurança e usabilidade

9

OBRIGADO!SLIDES CONTATO

GitHub e Twitter

viniciuscampitelli.com

@vcampitelli

10