解析Linux安全防护策略
2018-03-03
应对黑客入侵的策略
当Linux服务器遭到黑客攻击后,首先要断开Internet连接,防止其被黑客作为跳板来攻击内网其他主机。黑客在系统中的活动会被各种系统日志记录下来,通过分析可有效确定攻击来源。
在有些情况下,因为某些原因无法断开其与外网的连接,那么就需要有针对性地断开与黑客活动有关的网络连接。因为黑客使用Telnet、SSH等方式连接服务器,必然要使用特定的账户。当使用Root账户登录后,执行“w”命令,列出所有的账户登录历史信息,包括账户名、终端设备、来源IP、登录行为等。当然也可以执行“last”命令查看所有账户登录信息。当从其中发现可疑账户后,就需要立即将其锁定,例如执行“passwd -l kkuser”命令将账户“kkuser”锁定。
仅仅锁定是不够,还需要断开其连接。根据上述登录列表信息中与可疑账户对应的“TTY”列中的虚拟终端信息,可以定位与其关联的登录进程ID。例如当黑客通过SSH方式连接上来,其使用的虚拟终端为“pts/23”,可以执行“ps -ef| grep @pts/23”命令,发现其PID号码(例如“7901”),执行“kill-9 7901”命令,彻底断开该黑客账户的网络连接。进入黑客使用的可疑账户目录下,查 看“.bash_history”文件可以了解其运行的命令。实际上,在每个账户的Home目录下都存在“.bash_history”文件。
为便于观察,执行“vi /etc/bashrc”命令,将其中的“HISFILESIZE=”值设为“3000”,可最大记录3000行命令。将“HISTSIZE=”值设为“3000”,可 将 history命令的输出记录数量设为3000行。 将“HISTTIMEFORMAT=”值设为“'%F %T'”,并在其下输入“export HISTTIME FORMAT”行,可以合理的显示命令的执行时间参数,便于管理员了解命令是何时执行的。
例如确定黑客是通过SSH登录的话,执行“pidof sshd”命令,显示SSHD进程的所有PID信息。根据对应的 PID(例 如“6971”) 值,执行“ls -al /proc/6971/exe”,“ls -al /proc/6971/fd”等命令,在内存目录中查看其可执行文件或文件句柄信息。黑客要远程控制该机,必然会在系统中开启后门,就需要打开对应的网络端口。执行“netstat -a”命令,可查看网络连接信息。当发现某个端口(如TCP 2079)存在异常,可执行“fuser -n tcp 2079”命令查看与之管理的进程 ID(如“6093”)。执行“ps -ef |grep 6093”命令,可定位其所在程序路径。
当黑客入侵服务器后,必然会对其中的文件做手脚。执行“rpm -Va”命令,可快速对系统文件进行校验。检测信息如出现“M”标记,说明其访问权限及类型发生了变动,很可能黑客对其进行了篡改。
排查Linux服务器后门
对于Linux服务器来说,一旦黑客植入了Rootkit级别的后门,并对系统常用命令文件进行替换的话,处理起来就比较复杂了。
例如单位机房某台Linux服务器上安装了Apache服务,对外提供Web服务。近来有用户反映,该网站访问速度很慢甚至无法正常访问。经过在该机上进行流量分析发现该机大量向外部发送数据包,消耗了大量的带宽,造成网站无法正常运行。
使用netstat、ps等 常规命令对系统检测并未发现可疑的网络连接和进程信息。因为管理员安全性较高,事先对该服务器上重要文件(包括各种命令文件)进行了备份,因此可以将常用的ls、top、more等命令文件进行对比分析,发现有些命令文件被篡改。为保证检测的正确性,将备份出来的命令文件复制到指定的目录中,然后使用备份命令文件来对系统进行检测分析。
执 行“more /var/log/secure |gerp accepted”命令,对系统安全日志进行过滤检测,在返回信息中发现,在若干天前有一个来历不明的IP通过SSH访问了该机,其使用的账户名为“news”。经分析,该IP来自于国外的某台主机。执行“vi /etc/shadow”命令,在密码文件中显示该“news”账户设置了密码,说明黑客使用该账户通过SSH登录到了该服务器上。执行“ps aux”命令,查看进程信息,发现有个名为“zpt”的进程很可疑。
综合以上信息,可以看出该可疑进程占用了很高的CPU和内存的使用率。执行“ls /proc/31776/exe”和“ls-al /proc/31776/fd”命令,对该可疑进程ID进行跟踪分析,进入“/var/tmp/data/loca”目录,执行“ls -al”命令,发现了与黑客活动相关的所有文件。据此可知,当黑客控制了该机运行了后门程序后,根据该文件对所有预设的IP进行扫描,进而以该机为跳板,对其他主机进行渗透攻击并获取控制权。
当这些主机被非法控制后,就会开启后门并创建非法账户,并将主机名称、IP地址等信息传送给黑客,黑客继而发起攻击。为防止被管理员发现,在该目录下的“com”目录下发现了一些常用的系统命令文件,文件显然经过恶意篡改,通过覆盖原始的系统命令文件来蒙骗用户并隐藏后门程序。并且黑客还使用了经过篡改的“login”文件替换真实的系统登录程序,这样所有的登录在账户和密码就会被其记录下来并发送给黑客。
那么黑客究竟是如何入侵得手的呢?因为该机上运行了Apache服务,其中的一个脚本文件在设计时存在文件上传漏洞,被黑客发现并加以利用,将后门程序上传到系统的临时目录中,当该后门程序触发后,就会利用闲置的系统内置账户来进行非法提权,获取较高的操作权限,因为该机开启了SSH服务器。所以黑客就可通过SSH登录到该机上了。了解黑客的伎俩后,可以有针对性的进行处理。例如将系统彻底重装,之后重新配置运行Apache,并将存在安全问题的脚本文件彻底进行修改,堵住安全漏洞,并恢复了之前备份的网站数据,让该机恢复到正常工作状态。
严格管理SSH访问连接
因为该机采用了SSH登录方式,为了安全起见,必须将登录方式更改为公钥认证方式。方法是执行“vi/etc/ssh/sshd_config”命令,在其配置文件中将“protocol”的值设置为“2”,将“PubkeyAuthentication”的值设置为“yes”,将“Autho rizedKeysFile”的值设置为“.ssh/aurhorized_keys”,这里的“.ssh/aurhorized_keys”为服务器密钥文件存放路径,例如对于“user1”来说,其路径为“/home/user1/.ssh/aurhorized_keys”。当然,事先要进行密钥的准备操作。
将“PasswordAuthen tication”的值设置为“no”,禁止使用口令认证。之后重启SSHD服务即可。为了进一步提高安全性,防止黑客随意通过SSH连接本机,可以使用IPTable编写防火墙控制规则,对SSH连接进行监控。此外,还可以使用TCP_Wrapper安全模块对SSH访问进行严格限制,执行“rpm -q tcp_wrappers”命令,可以查看该模块是否安装。执行“vi /etc/hosts.allow”命令,在其中输入“sshd xxx.xxx.xxx.xxx”行,表示只允许指定的IP(这里为“xxx.xxx.xxx.xxx”) 访问本机的SSHD服务。当然,还可以根据需要添加更多的IP或域名,让这些指定的主机才可以通过SSH访问本地。为了上述要求,还需要执行“vi /etc/hosts.allow”命令,在其中添加“sshd:ALL”,禁止其他的主机通过SSH方式访问本机。
提高临时目录的安全性
在本例中,黑客是借助于系统临时目录来上传和激活后门程序的。对于Linux来说,可以在“/tmp”和“/var/tmp”两个位置存放临时文件。因为在默认情况下,所有的用户都可读写和执行其中的文件,所以存在一定的安全隐患。此外,对于“/dev/shm”共享内存设备来说,因为在Linux启动时会默认加载,其使用的是tmpfs内存文件系统,所以存放在该文件系统中的数据就会驻留在RAM中,这样黑客就可能通过“/dev/shm”设备直接操纵系统内存,这对于系统的安全造成不小的威胁。
为提高“/dev/shm”设备安全性,执行“vi /etc/fstab”命令,将与该设备对应的行修改为“tmpfs /dev/shm tmpfs defaults,nosuid,noexec, rw 0 0”,对该设备进行限值处理,例如禁止执行权限等。如果临时目录“/tmp”是一个独立的分区,只需执行“vi /etc/fstab”命令,在“LABEL=/tmp”开始的行中的“rw,”后面添加“nosuid,noexec,nodec”内容,就可以禁止在该分区中执行任何脚本程序或不存在的设备。如果临时目录“/var/tmp”是目录,可以将其中的所有数据移动到“/tmp”分区中,之后在“/var”目录下执行“ln-s /tmp /var/tmp”命令,将一个软链接指向“/tmp”即可。
如果“/tmp”仅仅是一个目录,可以执行“dd if=/dev/zero of=/dev/tmpfs bs=10M count=10000”,“mke2 fs -j /dev/tmpfs”,“cp -av/tmp /tmp.000”,“mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp ”,“chmod 1777 /tmp”,“mv -f /tmp.000/* /tmp/”等命令,创建一个虚拟的块设备,并将“/tmp”绑定到该虚拟设备上,为其添加禁止执行脚本文件功能。执行“vi /fstab”命 令,添 加“/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0”行即可。
清理无关账户信息
在对系统进行了重新安装后,为强化安全性,最好将这些不需要的账户进行删除,或将其设置为非交互方式登录,就可以防范由此带来的安全风险。执行“vi /etc/password”命令,可以查看当前存在的所有账户信息。执行“vi /etc/shadow”命令,可以查看所有的账户信息。执行“grep bash /etc/password” 或“grep sh /etc/password”命令,列出所有允许和系统交互的拥有Shell界面的账户信息。
对于不需要的账户,可直接在“/etc/password”文件中将其删除,或对应账户信息中的“/bin/bash”修改为“/sbin/nologin”,禁止其以交互状态登录。也可以执行“userdel -r xxxxxx”、“groupdel xxxxxx”命令来删除不需要的账户或组,“xxxxxx”表示具体名称。建议对于adm、lp、sync、halt、news等默认账户,可以将其删除。对于adm、lp、news、uucp、games、dip、pppusers等默认组,可以进行删除。对于不需要的账户,最好将其密码清除或禁止其以可交互方式登录。当然也可执行“password-l zhanghu”命令将其锁定,在这里假设账户名为“zhanghu”。
保护Root账户安全
对于系统安全来说,Root账户是极为重要的。因此,其也成为了黑客攻击的目标。为此,可以采用替换法来进行应对,例如执行“useradd tihuan_gly”命令,创建一个名为“tihuan_gly”的账户,并为其设置一个尽可能复杂的密码。之后执行“vi /etc/password”命令,在该文件中将上述“tihuan_gly”账户的 UID和 GID的值设置为0,在保存后,该“tihuan_gly”账户实际上就拥有了和Root同样的权限。不管是本地还是SSH远程登录,都可以利用该账户进行登录。之后执行“password-l root”命令,来禁用Root账户。
这样,黑客对Root账户密码的破解就变得没有什么意义了。执行“find /-perm 777 -ls”命令,从根开始查找权限为777的目录和文件,对于不需要的目录和文件,可以将其删除或者更改其权限,防止其被黑客利用。对Linux来说,其内置了很多服务。对于不必要的服务最好将其关闭,防止其泄漏敏感信息或者被黑客非法利用。
例如执行“chkconfig--list”命令,可以显示所有的服务。执行“runlevel”命令,可以查看当前的运行级别。如果显示为“N 5”的话,可以执行“vi /etc/inittab”命令,将“id:5:initdefault:”改为“id:3:initdefault:”。 执 行“chk config -list | grep 3:on”命令,只显示运行级别为3的服务。
关闭无法服务,提高系统安全性
对于不需要的服务可选择将其关闭。例如执行“chk config abrtd off”、“chkconfig atd off”、“chkconfig avahi-daemon off”、“chkconfig --leve 345 lbluetooth off”“chkconfig cpuspeed off”、“chkconfig
当黑客侵入系统并非法获得了Root权限后,为防止其对系统进行更大的破坏,就需要对文件系统进行保护。例如使用“chattr”命令,对一些重要的文件和目录进行锁定,就可以有效提高系统的安全性。例如执行“chattr -R +i /bin /lib /sbin”、“chattr -R +i /usr/netfs off”命令,可将自动提交BUG服务、定时计划服务、配置WIFI服务、蓝牙服务、CPU速度调整及远程共享服务关闭。
从安全的角度来说,开启的服务越少,存在的漏洞就会减少。当关闭了不需
锁定系统文件
bin /usr/include /usr/lib /usr/sbin”、“chattr +i /etc/passwd”、“chattr +i /etc/shadow”、“chattr +i /etc/fstab”等命令,锁定指定的文件和目录,其中的“R”参数表示递归操作所有的子目录,“+i”参数表示设置目标文件禁止被修改、删除、更名等操作,不能向其中写入数要的服务后,执行“init 6”命令重启系统。之后执行“netstat -antup”命令,来查看打开的端口信息。根据这些信息,可以了解打开的端口和服务之间的对应关系。对于不需要的端口,可以将其关闭。据或新增内容。对于系统日志来说,可以执行“chattr+a /var/log/message”,“chattr +a /var/log/secure”命令,锁定指定的日志文件,其中的“+a”参数表示只能向其中写入数据而无法将其删除。当然,该命令并非万能,例如无法锁定“/var”的目录。