随着linx/bsd技术的普及与发展,大家都认识到了开源系统所带来的种种好处,比如免费,可定制化,高性能,高可扩展,以及我们今天要研究的安全--一个永恒的话题,好了废话不说了切入正题!
个人认为如今系统的安全防御不应该是放在某个层面或者某个点上,应该从企业网站构架,建设初期起就应该有一个整体的规划,全局的部署,要放防御机制从物理层配置到web应用层最后到达系统内核层,虽然没必要搞的像国家安全部门一样,但是最少我们可以利用现有的,开源的,免费的,经过测试的安全工具来加强我们的安全,当然为了性能,成本,我们可以暂时的关闭一些安全防御功能,但是不能删除,在遇到黑客攻击时我们要开启!!下面我们就来看看具体有那些层面需要我们部署怎么样的安全机制:
一,物理层防御
1,购买的服务器,一定要是品牌dell,hp.ibm服务器,具有多电源,多磁盘RAID,机箱保护(打开报警,电源开关锁门锁),当然为了数据安全如有磁盘加密芯片最好。
2,最好选择光纤网路防止电磁泄漏,显示器,键盘灯,usb接口等最好不要。
3,注意服务器相关链接的网络设备,路由器,交换机安全,防止基础硬件,网卡rom,upnp入侵,没事最高关闭路由器的uPnP功能,网卡的远程加载,唤醒个功能,设置高强度密码。还有就是主板的BIOS最高开启写保护开关,最近硬件BIOS入侵,最近网上曝光,所有的ciso,华为等路由器网路设备,甚至cpu都植入了“硬件后门”(所谓的正常的系统安全漏洞,什么人都避免不了,所以我们的设备里面有也是很正常的。。),用于监控用户数据。。。,这就是我们为什要自己定制防火墙,路由器,交换机的一个原因了。。
4,服务器放置的地点一定要符合各种电器标准的机房,防盗,专人看守,启用tcpdump,sniff等监控服务器,路由器等的异常信号。。看是否有硬件后门。
二,网络层防御(1-6层tcp/ip)
1, 静态化mac或者启用openvpn网络彻底静止arp协议,防止arp欺诈攻击。
2,设置交换机安全,放置mac-端口表攻击,把网络划分成各个专属vlan。
3, 配置dhcp服务器放置ip 地址资源分配攻击。限制每个网卡请求数,租赁时间。
4, 如不是大规模网络请不要分段IP使用路由器,直接交换机,如有必要尽量使用手工配置route表,不要使用各种动态配置路由表协议,防止协议漏洞攻击。
5,全网科莱,tcpdump,sniff 等包分析人工监控网络,发现非法网卡混杂监听,各种扫描,dos,ddos攻击,已经各种未知的攻击。
6, 如条件允许请购买专业的防止DDOS,非x86构架防火墙最好是支持7层应用层防火墙功能,如果带宽没那么大可以选择diy freebsd+pf组成的防火墙,同时配置syn代理握手 进 出 nat rnt过滤,防止外部,内部,本机等攻击(freebsd的polling还可以轮训网卡模式,对付高中断的syn攻击有奇效)。一般应用层防火墙防御web用不到,非要部署也可以选择freebsd的ipfw-classi或者iptable-7lay,但是一定要使用科莱,sniff进行7层特诊吗的正则开发!要不现有的规则太落后了!之中对于ddos大规模攻击就不是防火墙说能防御的啦,只有加大宽带,联合电信政府部门,购买CDN全国分布服务器才能解决。
7,使用suricata(snort性能太差,过时了)开启nvdia CUDA加速,pring加速,选用intel网卡开启dma,miix2,队列加速实现万兆流量入侵分析!同时支持IDS/IPS功能,当然我们不仅仅要实现入侵检测系统与防火墙的沟通,还可以实现入侵检测系统与系统shell,声音,mail 报警沟通!特别是渗透扫面的发现,扼杀渗透攻击与摇篮!
8,对于DNS是漏洞最多的网络核心功能,所以没有必要请不要自己使用bind搭建NDS服务器加速网络,直接使用网络上的DNS就可以了,如果实在要部署,请选择openbsd系统搭建,在代码层防止溢出,或者使用后面讲的mac,强制访问安全控制加固!当是一定要部署nds全网欺骗攻击防御(使用网络分析包工具来做),防止内网中毒发送nds假包,欺骗劫持!
三,应用层防御
1,所有的系统,服务器软件必须使用发行版默认的版本,并且进行md5,sha签名认证,并且有必要下载对应的发行版源代码使用gcc-4.6-4.7版本加参数-fstack-protect-all保护编译安装,优化的级别也最好不要超过O2。还有就是必须修改源代码的version.h把服务器软件名字,版本打乱伪造好!比如nginx变成bws,gws,apache等,mysql变成redis,postgresl!同时开启相关的nginx,apache,mysql等等软件自带的安全功能,配置安全运行策略!
2,web服务器,数据库服务器,缓存服务器,php应用服务器必须分开来单独电脑安装,同时设置各自的专用账号。方便以后进行最小权限控制,以及目录权限控制!
3,网站能静态化最好,实在要动态,可以使用suhosin安全加固php虚拟机,禁用各种没用的函数,使用tomoyo安全分析软件分析网站正常使用时,需要的各种权限,进行php,mysql ,nginx,apapche最小权限化管理,分析出web根目录最佳权限,防止各种溢出攻击,同时对用户输入的所有数据,图片,选择项进行php输入过滤,防止sql注入,夸张,拖库等攻击,如果可能请选择NOsql数据库,比如redis代替msyql!
4,如果前段没哟部署7层应用层防火墙,那么我们可以使用nginx,apache设置并发,连接控制防止ccs攻击,同时所有的服务器软件运行必须在grsecurity selinux tomoyo等MAC强制访问控制下运行!
5,关于mac强制访问其实很简单,就是在原有的自主访问控制基础上加入了更强大的控制功能层,通体来说加入了角色控制层 类型(主体客体)控制层 还有就是主要为了信息安全而设置的客体访问级别控制,一般有如下工具:
selinux:全功能的selinux实现了 角色控制,tpyeenfore类型域控制 还有mls控制,但是我们常用的centos,rhel默认只是开启了typeenfore类控制,是selinux的阉割版,不管是角色控制,类型控制,还是msl控制无非就两个四个步骤:
a,把角色控制,类型控制,msl控制的分类分组标签写到文件安全扩展属性中去
b,使用自动学习模式,或者手动policiy文件书写角色,类型,mls权限控制规则(在rhel,centos已经提供了现有的常用软件策略)
c,启用permission调试模式,试运行软件,查看日志是由有违反规定的日志
d,调整策略,反复前两部操作,知道无错误
完整版strict可是用来实现用户:角色:TE:mls四层控制,而且可以保护整个系统,而不光是关键进程!
Grsecurity:实现了角色控制,类似selinux-typeenfce功能,但是没有mls功能,不过它具有很多selinux不可比拟的功能,比如在线磁盘分区read-only模式,trust-path控制,还有更恐怖的pax内核防止溢出加固,简直是最完美的MAC了,本人给他打200分!!如果想实现系统的最高防御Grsecurity不可缺少!!它也是可以对整个系统进行保护的哦!
Tomoyo(ccs)以及suse的approm等都只是实现了跟rhel的selinux-targets策略实现的功能,对重点的进程加固,不能对整个系统进行保护!同时他们是基与路径的,不用象selinux要给文件打上标签!!
最后freebsd开启的Trustbsd项目mac了,起主要是实现了层控制的TE主体客体控制,mls/low,hig,equal 高层只能写不能读 低层只能读不能写,平等可以读写呵呵很简单把!!而biba模块怎刚好相反,高层能读不能写,低层能写不能读!
总之,强制访问其实就是系统程序权限防火墙!个人建议在rhel,centos上开启selinux,其他linux开启grsecurity,freebsd则由于做防火墙,没有人登陆,没有服务器程序不用开启MAC!
四,系统的层防御
1,我们要选择一个合适的系统,目前供我们选择的系统有rhel,centos,oracle-linux,debian,ubuntu,freebsd,openbsd,netbsd,suse等,个人认为:
防火墙系统:为了性能选择freebsd+pf为了安全选择openbsd+pf.(应用层过滤ipfw-classic)或者panabit可惜是收费的呵呵
嵌入式cpu防火墙:netbsd+pf/npf
web服务器:还是免费的centos吧
数据库:oracle-linux
静态web,缓存服务器:freebsd/centos
vps商(host):centos
vps客户机(guest):debian
openstack私有云:ubuntu
大规模并行计算:sentific linux
总体来说就是,性能为主使用rhel/centos系列 安全为重选用debian+grsecurity加固 防火墙稳定性为重bsd系列。
2,除了rhel有商业支持的系统外,其他的免费系统都要精心内核的精简编译,去除所有没用的驱动,功能,调试,加入grsecutity ccs安全加固MAC!同时设置sysctl.内核参数加大抗DDOS,缩短timewait,加大tcp,upd缓存等优化参数。
3,删除所有系统中无用的用户,bin/sbin,开启grsecurity 的trust-path功能,任何人只能运行经过root认证的程序,关闭sysctl关于mac 实时控制功能,对于不需要更改的配置文件,静态页面可以开启grsecurity read-only分区功能,谁也不能更改文件了,包括自己!设置合理的资源配置,limit,登录密码策略,还有pam认证安全。
4,启用md5,sha签名关键文件包括内核,内核模块,配置文件,关键常用的程序,防止rootkit,木马,可以使用工具前面 或者自己手动shell批处理!
5,开启grsecurity,或者selinux 角色控制影藏所有的本用户无关进程,开启/proc等虚拟文件系统安全防护,包括/tmp,开启grsecurity pax放溢出,放链接攻击,随机地址等保护!
6,设置基本的linux/freebsd 文件管理权限,用户权限,chattr +i 保护! 关闭没用的服务器软件,ssh服务器尽量不要使用,非要使用请使用knock敲门,打开防火墙通道,使用ssh!
7, 定制安全的可靠的服务器版本,漏洞,安全补丁升级,随时关注网络漏洞列表。
五,制度防御
1,密码制度,密码长度必须设置为16位或者32位 md5 16 32位迷惑,同时必须满足字母大小写,特殊符号,数字等。。高强度密码,定期更换密码。还可以参考之前写过的“一次性密码”文章。使用一次性密码!
2,离职人员的安全重设机制,防止离职人员密码,机密文件泄漏,重要文件不管是存放还是备份必须使用truecrypt高强度加密!!特别是数据库加密!
3,在职人员的安全审核制度,防止在职人员访问高度机密文件,非法操作,硬盘复制等不安全举动与系统非法操作(开启系统audit功能)。
4,定期备份,灾难演戏,渗透测试,稳定性能测试!
5, 定期举行安全防御与攻击学习培训,组成安全小组,或者小圈子进行讨论,创新思维,培养安全人才。
到此为止,有关于安全加固防御的问题就有了一个初步的整体规划,本人博客没有必要就不再讨论了,今后转入web应用程序开发阶段,谢谢大家支持。