from: http://blog.yikuyiku.com/?p=2859
1、攻击者的计划:
a> 搜集目标系统的信息(系统信息,版本信息,网络拓扑,关联机器等),信息泄露会给攻击者计划攻击提供便利;
b> 寻找目标的弱点(可用端口,缺陷的软件版本,Man-in-Middle缺陷等);
c> 搜集一切可以跟目标沟通的方式(Web访问,普通帐号登录,数据库访问,无用的服务等);
d> 利用一个弱点侵入系统(提权);
e> 抹除痕迹防止反击(删日志,种rootkit,种后门);
2、验证和授权:安全的登录机制需要分为2步:验证身份,而后给予授权。即先确认你不是假冒的,而后根据你的身份限制你的权力;
3、攻击的大类:
a> Dos —— 使服务不可用;
b> 协议缺陷 —— 越过验证身份那一步;
c> 不正确的信任关系 —— 不越过验证的那一步,但是放大自己的权限;
4、Dos(Denial Of Service)攻击:
a> 通常因为版本BUG或者配置错误引起;
b> Dos掉一台机器的目的很可能是为了可以伪装成这台机器以发动下一步攻击;
c> Linux内核提供了一些防止Dos攻击的方法,但更重要的是保持软件更新和保持对系统的监控,尤其是对异常流量的监控;
d> DDos(Distributed denial of service)分布式拒绝服务攻击;
5、针对验证机制的攻击:
a> 密码嗅探。明文的协议是不安全的,如telnet;
b> 不恰当的授权。将自己与一个已验证或可以通过验证的用户关联起来;要将服务的授权缩到所需的最小,一个普通用户可以完成的工作就不要启用root去做;
6、输入验证攻击:
对输入是不是符合预期没有做验证。应用软件难免有BUG。
a> 一种输入验证攻击是试图去填满buffer导致溢出(buffer overflow attack),这还可以导致将数据区的代码填充到执行区导致代码执行。
b> 另一种是format string attack,利用输出执行某些超出预期的代码(SQL注入就是其中一种);
7、Linux提供的防御机制:
a> 防火墙、proxy、包过滤。最好一起启动。包过滤(iptables)是底层的安全措施,可以很好的控制网络流量,因为它只检查包头,因此效率很高。也因为这个,它不能对包内容做检查,而这正是proxy所擅长的,所以它们经常搭档。proxy(Squid)因为要对包内容解析,一般还做做cache啥的,对机器配置要求会高些;
b> tcpwrapper(libwrap.so),httpd不支持,sshd支持;
c> xinetd内建的一些机制(只能作用与xinetd托管的服务);
d> PAM(Pluggable Authentication Modules),可以对登陆进行包括时间段、资源占用等在内的各种限制;
e> SELinux(Security Enhanced Linux),通过上下文来保护系统。相当于即使某些进程或者用户被占领了,也还有一层ACL挡在后面。有点像是复杂化的带有规则的chroot,进程的活动被限制在某些文件/端口/连接之内。其实主要就是为了防止用户没有把权限弄好(777啥的),又加上一层权限控制;
f> ExecShield是Linux包含的隔离内存数据区和可执行区域的模块开关。也就是 sysctl -w kernel.exec-shield。当CPU支持 NX/XD技术时,它会使用CPU内建的方案,否则它会使用较为简单、效率较低的segment limit方案(纯基于软件的);
g> 服务和应用自身的安全机制。以上做的都是传输层和系统的安全,应用层的安全需要应用层自己做好;
8、服务通常是从内部瓦解的,而且proxy和包过滤加一起也并不能完成所有的安全工作,本地安全(包括使用者的安全意识)是十分重要的。
9、最基本的安全意识:
a> 只跑需要的服务,最好能把各个服务分开部署。如果能做到隔离,那是最好,虚拟化技术在这方面有它的用武之地;;
b> 保持软件更新,包括订阅各种安全的消息;
c> 关键服务一定要加以访问限制;
1、两种访问控制机制:DAC和MAC。Discretionary Access Control和Mandatory Access Control。前者就是我们一般的访问控制机制,资源的所有者可以设置此资源的权限,让它可以被别人使用。后者则是打开SELinux的情况,资源所有者不能完全更改其它人对资源的访问权限,需要更高级别的管理员去更改;
2、NSA实现的MAC(强制访问控制)的第一版叫做Mach,后演变为SELinux并通过红帽公司将其并入了Linux Kernel中;
3、SELinux的上下文通过ls -Z和ps -Z来察看,用chcon和restorecon来修改;
4、SELinux支持MLS(Mutil Level Security),其实也就是内置有好几套安全策略。其中最严格的叫做strict,红帽启用的这一套叫做targeted,意即只保护目标的一些进程,这一套策略是strict策略的一个子集;
5、SELinux的日志通过auditd进程写在了文件/var/log/audit/auditlog,如果此进程不在,则写在/var/log/messages。可以用sealert -a /var/log/audit/audit.log来更友好的查看日志;
6、SElinux有一些boolen的预置开关来帮助方便地调整策略(setsebool);
1、基于IP的访问机制是整个系统的第一道防线;
2、iptables是Linux内核提供的一个包过滤机制(Netfilter),它的效率不错(在内核中实现),而且很容易配置(红帽预置了一些可用chain在里面,如RH-Firewall-1-INPUT);
3、tcpwrapper中不能直接执行cmd(必须使用spawn或twist)的原因是RH编译tcpwrapper时开启了-DPROCESS_OPTIONS;
4、tcpwrapper中当allow与deny冲突时,以allow为准(hosts.allow和hosts.deny里面都可以写allow和deny的规则);
5、各种服务的banner(欢迎信息)在目录/var/banners中;
6、xinetd可以帮它托管的服务做访问控制,可以控制访问时段、同时连接数,甚至可以做成一个陷阱(当用户连接他不该连接的端口时封掉他的IP一段时间);
7、整个访问控制的流程:
a> 首先会被送到内核里检验netfilter/iptables的检验;
b> 如果应用程序包含了libwrap,则接受tcpwrapper的检验;
c> 如果是xinetd托管的服务,则检查xinetd的tcpwrapper规则和xinetd的策略;
d> 最后接受应用程序本身的检验。