我有一个新安装的 CentOS 7 服务器,运行 Apache httpd 2.4.6,我刚刚注意到它的审计日志增长得太快,有很多像这样的条目:
type=ANOM_ABEND msg=audit(06/02/15 15:44:09.341:906003) : auid=unset uid=apache gid=apache ses=unset subj=system_u:system_r:httpd_t:s0 pid=44258 comm=httpd reason="memory violation" sig=SIGSEGV
将调试器附加到随机 Apache 子进程并等待其崩溃将产生以下结果:
Program received signal SIGSEGV, Segmentation fault.
0x00007f8433bf47f8 in main_arena () from /lib64/libc.so.6
(gdb) backtrace
#0 0x00007f8433bf47f8 in main_arena () from /lib64/libc.so.6
#1 0x00007f8428e4de43 in ssl_hook_Access () from /etc/httpd/modules/mod_ssl.so
#2 0x00007f8435370490 in ap_run_access_checker ()
#3 0x00007f8435372d75 in ap_process_request_internal ()
#4 0x00007f843538dbe0 in ap_internal_redirect ()
#5 0x00007f843538e074 in ap_process_async_request ()
#6 0x00007f843538e404 in ap_process_request ()
#7 0x00007f843538adb2 in ap_process_http_connection ()
#8 0x00007f8435382e30 in ap_run_process_connection ()
#9 0x00007f842acdc7ef in child_main () from /etc/httpd/modules/mod_mpm_prefork.so
#10 0x00007f842acdca26 in make_child () from /etc/httpd/modules/mod_mpm_prefork.so
#11 0x00007f842acdd6be in prefork_run () from /etc/httpd/modules/mod_mpm_prefork.so
#12 0x00007f84353600fe in ap_run_mpm ()
#13 0x00007f8435359726 in main ()
看来这是由 mod_ssl 引起的。查看 httpd 日志,我可以从不同的日志文件关联以下事件:
[Fri Feb 06 15:44:09.343116 2015] [ssl:error] [pid 44258] [client X.X.X.39:29260] AH02225: Re-negotiation request failed
[Fri Feb 06 15:44:09.343167 2015] [ssl:error] [pid 44258] SSL Library Error: error:14080152:SSL routines:SSL3_ACCEPT:unsafe legacy renegotiation disabled
和:
[Fri Feb 06 15:44:10.147381 2015] [core:notice] [pid 2689] AH00052: child pid 44258 exit signal Segmentation fault (11)
因此,一方面,我不想允许 Apache httpd 中不安全的 SSL 重新协商。但我每秒都会收到一两个这样的错误,这会导致 Apache 日志中出现 3 行日志,审计日志中出现 1 行日志,并且 Apache 子进程崩溃。
是否有可能防止这些进程崩溃?仅仅因为不允许不安全的遗留重新协商,是否意味着它需要分段错误?有什么想法可以改善这种情况?
注:软件版本:
- OpenSSL 1.0.1e-fips 2013 年 2 月 11 日
- 服务器版本:Apache/2.4.6 (CentOS);服务器建立时间:2015 年 1 月 12 日 13:22:31