1、1 项目四 Linux系统的攻击与防范项目四 Linux系统的攻击与防范2 项目四 Linux系统的攻击与防范【项目概述】某安全运维公司接到一个任务,要求对客户公司的服务器进行渗透测试,已知服务器的操作系统为Linux的CentOS 6.5,IP地址为192.168.137.101/24。请找出该服务器存在的安全漏洞并给出防范攻击的措施。【项目分析】lLinux是广受欢迎的互联网基础设施之一,具有开源、免费的特点,并有丰富健康的生态环境和社区支持。正因如此,Linux也成为黑客攻击的重要目标,因为其承载了大量互联网上不可或缺的基础服务,也是收集、生产、处理、传输和存储有价值数据的实体。保护Li
2、nux安全的重要性不言而喻。l黑客针对Linux系统的攻击主要包括系统账户口令的破解以及系统漏洞的利用等。因此,对于Linux的安全防护也要从系统到应用进行全方位的防护。3 项目四 Linux系统的攻击与防范项目主要内容:任务一 破解Linux用户弱口令任务二 设置Linux计划任务后门账户任务三 利用Linux内核漏洞提权任务四 Linux系统攻击的防范4 项目四 Linux系统的攻击与防范任务四 Linux系统攻击的防范5 项目四 Linux系统的攻击与防范l任务描述 通过前面三个任务,我们已经发现了目标主机的一些安全问题。本次任务,我们要给出防范攻击的措施,以保障目标主机的安全。l任务分
3、析l要想知道一个Linux系统是否被攻击或入侵,需要排查的内容包括以下几个方面:l1检测常用程序是否被替换l在进行检测前,首先要确保在本机系统上使用的命令是没有被动过手脚的,否则检测执行命令的结果就不可信。6 项目四 Linux系统的攻击与防范l(1)通常被替换的程序有login、ls、ps、ifconfig、du、find、netstat、ss等。执行一些命令参数,查看程序是否被替换。例如:lls -alh /-l:(list)以列表形式显示;-a:(all)显示全部文件,包括隐藏文件;-h:(human readable)人性化形式显示文件大小lnetstat -anp /-a,显示所有;
4、-n,不用别名显示,只用数字显示;-p,显示进程号和进程名l(2)通过检查md5sum和文件大小,判断是否被替换。例如:lmd5sum /bin/netstat /md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和l(3)上传chkrootkit和rkhunter两个工具,检测一下是否有Rootkit.l(4)使用ClamAV Antivirus检查/sbin、/bin、/usr/sbin、/usr/bin目标。l2查找隐藏目录和文件l查找隐藏目录和文件的命令如下:lfind /-name lfind /-name .lfind /-name .lfind /-name
5、7 项目四 Linux系统的攻击与防范l ps(英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。lNetstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态(Interface Statistics),masquerade 连接,多播成员(Multicast Memberships)等等。ldu 会显示指定的目录或文件所占用的磁盘空间。lfind命令所查找的目录路径或文件。lss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。8 项目四
6、 Linux系统的攻击与防范l3检测近期系统登录l使用last命令检测近期系统登录,特别注意非正常来源IP地址或用户名的登录记录。l4检测系统用户l(1)通过命令 less /etc/passwd 查看是否有新增用户。l(2)通过命令 grep:0/etc/passwd 查看是否有root权限的用户。l(3)通过命令 stat /etc/passwd 查看passwd最后修改时间。l(4)通过命令 awk F:length($2)=0 print$1/etc/shadow 查看是否存在空口令的用户。9 项目四 Linux系统的攻击与防范l5查看进程l(1)输入 ps -aux查看当前正在运行的
7、进程,尤其注意是否有以./XXX开头的进程,如果有,则使用 kill-9 pid杀死进程,然后再运行ps -aux,查看该进程是否被杀死;如果此类进程出现结束后又重新启动的现象,则证明系统被人放置了自启动脚本,这时要仔细查找,使用命令如下:lfind /-name 进程名 printl(2)通过命令lsof -p pid 查看进程所打开的端口及文件。l(3)检查隐藏进程,使用命令如下:lps -ef|awk print$2|sort -n|uniq 1lls /proc|sort -n|uniq 2ldiff 1 210 项目四 Linux系统的攻击与防范l6检查网络连接和监听端口l(1)使用
8、命令 ip link|grep PROMISC检查网卡是否工作在混杂模式。正常网卡不存在promisc,如果存在则可能有嗅探。l(2)通过 netstat -lntp 查看所有监听端口。l(3)通过 netstat -antp 查看所有已经建立的连接。特别注意本机主动连接到外部地址的连接,这可能意味着反弹shell。l(4)通过 arp -an查看arp记录是否正常。l7检查计划任务l(1)通过命令 crontab -u root -l查看root用户的计划任务。l(2)通过命令 cat /etc/crontab查看有无异常条目。l(3)通过命令 ls /var/spool/cron 查看有无
9、异常条目。l(4)通过命令 ls -l /etc/cron.*查看cron详细文件变化。11 项目四 Linux系统的攻击与防范l8检查开机启动项l(1)检查开机启动项/etc/rc.local的内容。l(2)使用systemctl或者chkconfig检查开机启动项。l9检查日志中的异常l(1)需要检查的日志类型如下:l系统日志:message、secure、cron、mail等系统日志。l应用程序日志:Apache日志、Nginx日志、FTP日志、MySQL、Oracle日志。l自定义日志:很多程序开发过程中会自定义程序日志,这些日志也是很重要的数据,能够帮我们分析入侵途径等信息。lbas
10、h_history:这是bash执行过程中记录的bash日志信息,能够帮我们查看bash执行了哪些命令。l其他安全事件相关日志记录。12 项目四 Linux系统的攻击与防范l(2)分析异常时的注意事项如下:l用户在非常规的时间登录。l不正常的日志记录,比如残缺不全的日志或诸如wtmp这样的日志文件,无故地缺少了中间的记录文件。l用户登录系统的IP地址和以往不一样。l用户登录失败的日志记录,尤其是那些一再连续尝试、进入失败的日志记录。l非法使用或不正当使用超级用户权限su的指令。l无故或者非法重新启动各项网络服务的记录。13 项目四 Linux系统的攻击与防范l任务实施l1账户安全管理l(1)锁
11、定系统中多余的自建账号。查看/etc/passwd文件,与系统管理员确认不必要的账号,将其删除或根据需要锁定登录。例如查看系统中的用户账号发现student账号暂时无人使用,决定将其锁定,如图4-22所示。图4-22 锁定暂时不用的账户14 项目四 Linux系统的攻击与防范l(2)设置系统口令策略。要想系统口令不被破解,需要设置一定的口令策略,指定口令的最短长度以及口令的时效。l步骤1 查看系统口令策略设置,如图4-23所示。图4-23 查看系统口令策略设置15 项目四 Linux系统的攻击与防范l步骤2 修改系统口令设置策略。打开/etc/login.defs文件,修改内容如图4-24所示
12、。图4-24 修改系统口令设置策略16 项目四 Linux系统的攻击与防范l(3)限制能够su为root的用户。一般情况下普通用户需要 root 权限执行一些操作时,需要使用su命令登录成为 root 用户。但是,任何人只要知道了root的密码,就都可以通过su命令来成为 root 用户,这无疑为系统带来了安全隐患。所以,将可以将能够使用su命令登录为root的普通用户加入到 wheel 组,该用户就成了管理员组内的用户,但如果不对一些相关的配置文件进行配置,这个管理员组内的用户与普通用户也没什么区别。从而可以限制对root权限的滥用。l步骤1 修改/etc/pam.d/su文件,使只有加入w
13、heel组的用户才能使用su命令,如图4-25所示。17 项目四 Linux系统的攻击与防范图4-25 修改配置文件限制使用su命令的用户18 项目四 Linux系统的攻击与防范l步骤2 测试限制效果。test用户没有加入wheel组,即使输入正确的root口令,也无法使用su命令切换到root身份,如图4-26所示。图4-26 没有加入wheel组的用户无法使用su命令19 项目四 Linux系统的攻击与防范l步骤3 将test用户加入到wheel组中,即可使用su成为root权限用户,如图4-27、4-28所示。图4-27 将test加入wheel组20 项目四 Linux系统的攻击与防范
14、图4-28 test可以使用su命令切换到root权限21 项目四 Linux系统的攻击与防范l知识链接:wheel组有什么作用?lWheel组是Unix系统一个遗留物。当服务器需要做比日常例行维护更高级的工作时,就经常需要用到root权限了。而这个wheel组就是用来归纳一些特殊的系统用户,这其中的用户拥有root的部分功能和权限。也就是说如果一个用户不是wheel组成员,那就没有任何root特权。因此,使用wheel组成员用户,会尽量减少对系统“摧毁性”破坏的概率和风险。如今大多数的Linux发行版本中,仍然保留了wheel这个组,虽然它已经不像当初设计出来的那样必要了,但是有些老玩家还是
15、忠于这种旧式经典风格的,所以他们经常还是依旧让wheel组发挥着以往的作用。他们是这样做的:在建立他们自己的用户时,将其添加入wheel组中(用wheel组作为用户的主组),或者编辑/etc/group文件,将他们的用户名追加到wheel组那行的末尾。22 项目四 Linux系统的攻击与防范l(4)多次登录失败锁定。攻击者在进行口令破解时,常常会使用暴力破解的方法,也就是拿自己的猜测的口令反复尝试登录,直到登录成功。为防止用户多次尝试,可以设置登录失败若干次后就锁定该账户,不允许用户无限次地尝试登录。l步骤1 仅锁定普通用户。使用vim/etc/pam.d/system-auth命令添加设置,
16、如图4-29所示。23 项目四 Linux系统的攻击与防范图4-29 普通用户多次登录失败锁定设置24 项目四 Linux系统的攻击与防范l步骤2 查看锁定普通用户的效果。开机启动后,以普通账户身份登录,在连接输错3次口令后,第4次登录时即使输入正确的密码也会被提示账户已被锁定,效果如图4-30所示。图4-27 账户被锁定登录失败图4-30 账户被锁定登录失败25 项目四 Linux系统的攻击与防范l步骤3 锁定普通用户和root用户。继续修改/etc/pam.d/system-auth,如图4-31。图4-31 普通用户和root用户登录失败锁定设置26 项目四 Linux系统的攻击与防范l
17、步骤4 查看锁定用户登录失败的信息,如图4-32所示。图4-32 查看锁定用户登录失败的信息27 项目四 Linux系统的攻击与防范l步骤5 解锁用户。要想提前解锁已经被锁定的用户,可以使用命令如图4-33所示。图4-33 解锁用户28 项目四 Linux系统的攻击与防范l2SSH服务访问控制l(1)禁止root用户登录。root用户是Linux系统中具有最高权限的用户,如果允许root用户登录SSH服务,有可能会导致root密码泄漏。因此,一般管理员会禁止root用户登录SSH服务,只允许普通用户登录SSH服务。在需要使用root权限时,可以使用su命令切换。l步骤1 使用vim命令打开/e
18、tc/ssh/sshd_config。文件修改的内容如图4-34所示。图4-34 修改配置文件禁止root用户登录SSH服务29 项目四 Linux系统的攻击与防范l步骤2 重启SSH服务,如图4-35所示。图4-35 重启SSH服务30 项目四 Linux系统的攻击与防范l(2)修改SSH服务端口号。SSH服务默认的端口为22号端口。如果不想让攻击者利用SSH服务,可以修改SSH服务的端口号。只有内部人员知道该端口号才可以使用SSH服务。例如,我们将SSH服务的端口号修改为8888。l步骤1 使用vim命令打开/etc/ssh/sshd_config。文件修改的内容如图4-36所示。图4-3
19、6 修改SSH服务端口号31 项目四 Linux系统的攻击与防范l步骤2 重启SSH服务。如图4-32所示。l3系统初始化管理l(1)修改历史命令的保存条数。Linux会保存用户曾经使用过的命令。即使系统注销,这些命令也会保存在“/.bash_history”文件中。默认情况下,Linux系统会保存1000条历史命令。使用history命令即可查看这些历史命令。如果攻击者入侵到系统中,通过历史命令可以从侧面了解系统的一些配置情况。因此,我们需要修改历史命令的保存条数,尽可能少地保存历史命令。例如,我们仅允许保存历史命令100条。l步骤1 查看当前系统可保存的历史命令的条数和历史命令。如图4-3
20、7、4-38所示。图4-37 查看可保存的历史命令的条数32 项目四 Linux系统的攻击与防范图4-38 查看历史命令33 项目四 Linux系统的攻击与防范l步骤2 修改可保存的历史命令条数。修改/etc/profile文件,如图4-39所示。图4-39 修改可保存的历史命令的条数34 项目四 Linux系统的攻击与防范l步骤3 在终端执行“source/etc/profile”命令,使修改立即生效,如图4-40所示。图4-40 使修改立即生效35 项目四 Linux系统的攻击与防范l(2)禁止非必要的服务。查看系统当前运行的服务,禁用那些不是必需的服务。例如,我们禁用nfs服务。l步骤1
21、 查看系统当前运行服务的情况,如图4-41所示。图4-41 查看系统当前运行服务的情况知识链接:chkconfig list用来显示Linux系统中的开机启动项,使用0,1,2,3,4,5,6表示7种状态等级,各个数字的含义如下:0关机1单用户模式2无网络连接的多用户命令行模式3有网络连接的多用户命令行模式4不可用5带图形界面的多用户模式6重新启动36 项目四 Linux系统的攻击与防范l步骤2 关闭nfs服务在第5级别的运行,如图4-42所示。图4-42 关闭nfs服务在第5级别的运行37 项目四 Linux系统的攻击与防范l【项目拓展】l Linux系统弱口令攻击的图形界面johnny和h
22、ydra-gtk比较简单,本书中并未详细讲解,读者可以自行尝试使用。l对于Linux系统的攻击还有很多种,请读者自行查阅资料进行练习。l对于Linux的攻击防范措施还包括对于防火墙的配置、文件权限的设置、允许访问主机的控制等。由于篇幅限制,本书并未 一 一列举,也请读者自行查阅相关资料进行学习。38 项目四 Linux系统的攻击与防范l【项目总结】l本项目主要讲述了对于Linux系统的三种攻击方式及防范攻击的一般措施。常见的基于Linux的攻击包括弱口令攻击、漏洞攻击、计划任务后门等。防范攻击的措施包括账户安全管理、SSH服务安全管理、系统安全管理等。本章知识点总结如下图所示。39 项目四 Linux系统的攻击与防范THANKS