搭建如下系统环境,使用常用测试方法与扫描工具进行系统风险检测,针对暴露的风险威胁制定对应的安全加固措施提议。
部署Web服务在Linux 64位操作系统上,一个Web服务器,关闭Linux上的防火墙。搭建局域网环境,一台Ubuntu15.10作为linux平台机器,跑各种linux平台下的渗透测试工具;一台Windows7作为windows平台机器,跑各种windows平台下的渗透测试工具。分别对Linux系统进行风险检测测试。
检测对象:Linux操作系统、Web站点、数据库、Web服务器。
使用一些安全测试的办法与工具对服务器进行风险检测,找出服务器的脆弱点以及存在的安全缺陷。
针对服务器操作系统自身的安全测试,包括一些系统配置、主机漏洞扫描等等
查看服务器操作系统当前用户是否为root用户,尽量避免使用root用户登录,启动其他服务程序,除非是一些需要root权限的安全工具,前提需要保证工具来源可信。终端需要 who 既可以查看当前登录用户。
登录到Linux系统,此时切换到root用户,下载lynis安全审计工具,切换到lynis运行脚本目录,执行 ./lynis --check-all –Q 脚本语句,开始对本地主机扫描审计,等待扫描结束,查看扫描结果。
登录到Linux系统,切换到root用户,下载Maldetect Linux恶意软件检测工具,解压缩后完成安装。运行扫描命令检测病毒,等待扫描结束获取扫描报告,根据扫描报告删除恶意病毒软件;
登录到Linux系统,切换到root用户,下载RKHunter 后门检测工具包,解压缩后进入 RKHunter 目录,执行命令安装RKHunter ,安装成功即开始启用后门检测工作,等待检测结束,根据检测报告更新操作系统,打上漏洞对应补丁;
使用下面工具扫描Web站点:nikto、wa3f、sqlmap、safe3 … …
扫描Web站点的信息:操作系统类型、操作系统版本、端口、服务器类型、服务器版本、Web站点错误详细信息、Web目录索引、Web站点结构、Web后台管理页面 …
测试sql注入,出现几个sql注入点
测试xss攻击,出现几个xss注入点
手动测试某些网页的输入表单,存在没有进行逻辑判断的表单,例如:输入邮箱的表单,对于非邮箱地址的输入结果,任然会继续处理,而不是提示输入错误,返回继续输入。
针对风险测试后得到的安全测试报告,修复系统存在的脆弱点与缺陷,并且进一步加强服务器的安全能力,可以借助一些安全工具与监控工具的帮助来实现。
对服务器本身存在的脆弱性与缺陷性进行的安全加固措施。
使用非root用户登录操作系统,使用非root用户运行其他服务程序,如:web程序等;
web权限,只有web用户组用户才能操作web应用,web用户组添加当前系统用户;
数据库权限,只有数据库用户组用户才能操作数据库,数据库用户组添加当前系统用户;
根据安全审计、恶意代码检查、后门检测等工具扫描出来的结果,及时更新操作系统,针对暴露的漏洞打上补丁。对于发现的恶意代码病毒与后门程序等及时删除,恢复系统的完整性、可信行与可用性。
配置当前服务器隐藏服务器信息,例如配置服务器,隐藏服务器类型、服务器的版本、隐藏服务器管理页面或者限制IP访问服务器管理页面、Web站点错误返回信息提供友好界面、隐藏Web索引页面、隐藏Web站点后台管理或者限制IP访问Web站点后台。
使用Web代码过滤sql注入或者使用代理服务器过滤sql注入,这里更加应该使用Web代码过滤sql注入,因为在页面即将提交给服务器之前过滤sql注入,比sql注入到达代理服务器时过滤,更加高效、节省资源,用户体验更好,处理逻辑更加简单。当然,这样处理会增加前端的负担。
跨站攻击的过滤可以参照sql注入过滤方法,同样在Web代码过滤掉,提示表单输入非法,并且返回重新输入表单。
网络安全工具可以有效发现、防御网络攻击。同时,使用扫描或者审计性的安全工具更加可以清楚自身存在的安全缺陷与风险威胁。提前做好防御措施,避免遭到攻击破坏。
安装snort轻量级入侵检测系统,部署在网络的旁路,既可以监听流过的网络流量是否存在入侵攻击,也不会影响服务器的网络性能。
把snort系统配置成入侵防御的模式,系统直连在服务器的网络路线上,充当服务器的安全网关,抵御网络攻击。当然,这样会对服务器的网络性能产生影响。
在服务器上或者在网关上配置防护墙,控制网络流量,过滤掉不必要的网络数据报文,之允许服务器上服务相关的流量通过。这里,把ping流量禁止掉,可以隐藏一些操作系统类型信息。当然,把防火墙部署在单独的网关上面,可以减轻服务器的负担,服务器可以使用全部资源支持当前运营的服务。
使用openvas、nessus等漏洞扫描系统,定期更新漏洞库与扫描插件,也定期扫描服务器所在的网络,及时发现网络上的脆弱点以及服务器等主机存在的漏洞,修复暴露出来的问题,避免漏洞被入侵者利用,入侵网络系统。
使用RATS、Infer、PyChecker等源代码审计工具,检测项目代码存在的漏洞缺陷,例如:空指针访问、资源和内存泄漏等等。生成检测报告,验证检测报告之后,把结果发送到软件开发工程师手里,软件开发工程师及时修复代码bug。
这里应该包括网络监控,而网络监控已经在网络安全设备中体现了,这里就不必再次重复。
使用log_monitor 、Log Watcher等开源日志监控系统,监听Web服务等日志信息,对高频IP进行报警。如果,日志监控系统不存在自定义的功能需求,可以使用脚本来完成,获取我们关心的日志信息。
使用monit、supervisord等开源进程监控系统,监听Web等服务进程是正常运行,也可以使用脚本周期性查看进程是否正在运行。
使用inotify、FileMonitor等开源文件监控系统,监听系统中重要的敏感文件,常见的用户、密码、权限、主机系统、网络配置、服务程序配置等文件:passwd、shadow、group、hosts等。同样,可以使用shell脚本来完成。
当项目的业务越来越庞大,人为去运维服务器已经是不可能了,需要把运维尽量自动化,部署open-falcon、Zabbix等运维监控系统,监控服务器网络、系统、服务等状态,出现问题及时报警,通知运维管理员,管理员接到通知尽快解决问题,保证服务器业务的正常运营。
作为管理员需要掌握一些shell命令,来帮助自己查看系统是否运行在健康状态,及时发现系统的入侵操作痕迹。用户查看、日志查看、审计命令、进程查看、计划任务等。last、lastb、lastlog、who、cat、awk、sed、grep、crontab等
前面几章内容,简单分析了一次风险检测与安全加固的过程。具体的风险检测信息与安全加固步骤并没有展示,后续将详细展示说明。