Nginx Session-Binding-Proxy

1

Estou tentando endurecer um site contra ataques envolvendo o seqüestro de sessão. O site é executado com o Nginx na frente de um aplicativo node.js. Como uma das contramedidas, o objetivo é configurar o Nginx para associar IDs de sessão do aplicativo a sessões SSL. Para isso, eu uso o seguinte módulo de terceiros: link , que implementa o conceito conforme descrito nos seguintes artigo .

Eu reconstruí o Nginx com sucesso com o módulo, mas estou tendo dificuldades para fazer com que ele funcione corretamente (ou mesmo consistentemente, para esse efeito). Não importa o que eu tente, o proxy também:

1) Uma incompatibilidade de soma de verificação:

2014/12/17 21:17:32 [debug] 3113#0: *1 ssl_session_master_key: 25a913d0524eb78d8433fdd5f5cf930a9a948ce09f5bfd8d
2014/12/17 21:17:32 [debug] 3113#0: *1 Session Binding Proxy encryption/decryption key: 80F426773F639A33C3279B55BDE9842D3767844DA026AEFF523C08DA03257A00
2014/12/17 21:17:32 [debug] 3113#0: *1 Session Binding Proxy Handler searching for: connect.sid
2014/12/17 21:17:32 [debug] 3113#0: *1 Session Binding Proxy Handler in string: __insp_wid=1037948077; __insp_nv=true; __insp_ref=d; __insp_norec_sess=true; _ga=GA1.2.999148523.1418831731; __insp_slim=1418846762624; connect.sid=s%3AMnIX0bsYtYJV7LSIYPrf53S1LMQnWoo2.HpVHL9F3tQ%2BlawYAE49gmE%2FIz3wUjJhd0Fh7QgBQOTw
2014/12/17 21:17:32 [debug] 3113#0: *1 Encrypted cookie value: H
2014/12/17 21:17:32 [info] 3113#0: *1 Session Binding Proxy: SHA256 checksum mismatch., client: 82.173.175.112, server: www.somehost.com, request: "GET /api/init?timestamp=1418847452710 HTTP/1.1", host: "www.somehost.com", referrer: "https://www.somehost.com/"
2014/12/17 21:17:32 [debug] 3113#0: *1 ssl_session_master_key: 25a913d0524eb78d8433fdd5f5cf930a9a948ce09f5bfd8d
2014/12/17 21:17:32 [debug] 3113#0: *1 Session Binding Proxy Filter IV: F66F734D7C905BEE
2014/12/17 21:17:32 [debug] 3113#0: *1 Session Binding Proxy encryption/decryption key: 80F426773F639A33C3279B55BDE9842D3767844DA026AEFF523C08DA03257A00

2) Erros de alocação de memória no log, combinados com o travamento de trabalhadores Nginx:

2014/12/17 12:55:05 [emerg] 32348#0: *51 malloc(9837586053127471180) failed (12: Cannot allocate memory), client: 62.140.137.158, server: www.somehost.com, request: "GET /api/timeline/2014-12-17 HTTP/1.1", host: "www.somehost.com"
2014/12/17 12:55:05 [emerg] 32348#0: *52 malloc(7770600577343422540) failed (12: Cannot allocate memory), client: 62.140.137.158, server: www.somehost.com, request: "GET /api/timeline/2014-12-17 HTTP/1.1", host: "www.somehost.com"
2014/12/17 12:55:05 [emerg] 32348#0: *53 malloc(12574651495842054220) failed (12: Cannot allocate memory), client: 62.140.137.158, server: www.somehost.com, request: "GET /api/timeline/2014-12-17 HTTP/1.1", host: "www.somehost.com"
2014/12/17 12:55:06 [alert] 32119#0: worker process 32348 exited on signal 11 (core dumped)

3) Comportamento inconsistente da própria webapp. Isso é bastante óbvio, considerando os erros mencionados acima. Mas, também com um site muito mais simples do que o aplicativo real, parece que não consigo fazer o módulo funcionar corretamente.

4) O Session-Binding-Proxy tem uma opção para definir explicitamente o 'session_binding_proxy_key'. Quando é omitido, o módulo gera uma chave na inicialização do Nginx como deveria. Ao definir explicitamente a chave para um valor inválido, iniciar o Nginx gera um erro e se recusa a iniciar (conforme esperado). No entanto, ao definir a chave para uma chave válida, o módulo não parece honrar a configuração e ainda usa uma chave gerada.

Escusado será dizer que, sem o Session-Binding-Proxy tudo funciona como esperado. Mas no entanto eu configuro as configurações de SBP, parece que não funciona. Alguém tem uma idéia do que poderia estar errado? Alguém tem o Session-Binding-Proxy em execução como esperado? Qualquer ajuda seria muito apreciada.

    
por Chris Beemster 17.12.2014 / 21:49

1 resposta

0

1) Você tentou limpar os cookies no navegador ao usar o SBP? Os cookies SBP são criptografados e HMACed. Se você tiver cookies de uma sessão antes de começar a usar o SBP, esses cookies não são válidos para o módulo SBP. Se um cookie for inválido, ele será enviado ao servidor de aplicativos sem modificação. O servidor de aplicativos deve efetuar o logout da sessão e iniciar um novo.

2) Esses erros malloc não são realmente úteis. Tentarei reproduzir um cookie inválido e ver se também os recebo. Talvez eu possa melhorar o SBP nesse ponto.

3) Que tipo de comportamento inconsistente? O aplicativo faz logout aleatório?

4) A chave especificada é respeitada, mas não houve saída nos logs ou na inicialização. Por favor, verifique a versão mais recente. (Atualizado hoje depois de comentários do seu colega?) A saída (debug) mostra a chave que você definiu na configuração (ou a chave aleatória se você não definiu a diretiva sbp_key.

Espero que isso ajude. Se você tiver outras dúvidas, sinta-se à vontade para filmar problemas no github, porque eu não verifico aqui com frequência.

    
por 19.12.2014 / 15:21