我一直在试图强化一个网站,以防止涉及会话劫持的攻击。 该网站在Node.js应用程序前面运行Nginx。 作为其中一个对策,目标是configurationNginx将应用程序会话ID绑定到SSL会话。 为此,我使用下面的第三方模块: https : //github.com/wburgers/Session-Binding-Proxy ,它实现了以下文章中描述的概念。
我用模块成功地重build了Nginx,但是我很难让它正常工作(甚至是一致的)。 无论我尝试,代理要么:
1)校验和不匹配:
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)日志中的内存分配错误,加上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)webapp本身的行为不一致。 考虑到上面提到的错误,这是相当明显的。 但是,也比实际的应用程序更简单的网站,我似乎无法让模块正常工作。
4)Session-Binding-Proxy有一个选项来明确地设置'session_binding_proxy_key'。 当它被省略时,模块将在Nginx启动时生成一个按键。 当明确地将密钥设置为无效值时,启动Nginx会出现错误并拒绝启动(如预期的那样)。 但是,将密钥设置为有效密钥时,该模块似乎不遵守该设置,仍然使用生成的密钥。
不用说,没有Session-Binding-Proxy,一切都按预期工作。 但是,但是我configurationSBP设置,似乎并不奏效。 有人有什么可能是错的线索? 有没有人得到预期的会话绑定代理运行? 任何帮助将不胜感激。
1)使用SBP时,您是否尝试清除浏览器中的Cookie? SBP cookies被encryption和HMAC。 如果您在开始使用SBP之前从会话中获得cookie,则这些cookie对于SBP模块无效。 如果cookie无效,则将其发送到应用程序服务器而不进行修改。 应用程序服务器应该注销会话并启动一个新的会话。
2)这些malloc错误不是真的有帮助。 我会尝试重现一个无效的cookie,看看我是否也得到它们。 也许我可以在这一点上改善SBP。
3)什么样的不一致行为? 该应用程序是否会随机注销?
4)指定的密钥是受尊重的,但日志或启动时没有输出。 请检查最新版本。 (debugging)输出显示您在configuration中设置的密钥(或随机密钥,如果您没有设置sbp_key指令的话)。
希望这可以帮助。 如果您有任何其他问题,请随时在github上发布问题,因为我不经常在这里检查。