一、权限与访问控制漏洞
权限与访问控制是Linux系统安全的基石——这话听起来像老生常谈,但每年因为配置不当翻车的案例依然比比皆是。一旦这块没守住,轻则信息泄露,重则直接被提权到root。常见的坑主要集中在这几个方向:
- setuid/setgid滥用:可执行文件如果设置了setuid位(排查命令
find / -perm /4000),相当于给程序一把“临时钥匙”。假如程序本身又存在边界检查缺陷(比如文件操作没限制权限),攻击者就能以文件所有者的身份(通常是root)执行代码。这就好比把保险柜钥匙交给保安,保安自己却是个马大哈。 - 文件/目录权限宽松:最典型的例子是
/etc/shadow权限设成了666,普通用户都能读。密码哈希直接裸奔。或者目录权限设为777,任何人都能往里写文件——这等于给攻击者开了一扇后门,随便丢个恶意脚本进去都能生效。 - sudo配置错误:
visudo编辑的sudoers文件,如果出现user ALL=(ALL) NOPASSWD: ALL这种配置,相当于是把整个系统的root权限拱手送给了普通用户。攻击者只要拿到这个账号,就能畅通无阻地执行任何命令。
二、缓冲区与内存安全漏洞
这类漏洞的根源在于程序对内存操作不够谨慎,在Linux漏洞排行榜上常年占据靠前位置。说白了就是“手滑”引发的灾难:
- 缓冲区溢出:程序没有检查输入数据的长度,导致恶意数据覆盖了相邻内存区域(栈溢出或堆溢出)。典型的利用方式是构造超长输入覆盖函数返回地址,然后执行任意代码。还记得CVE-2017-5638那个Apache Struts2漏洞吗?就是缓冲区溢出玩出了花。
- 格式化字符串漏洞:用
printf这类不安全的格式化函数时,如果直接把用户输入当格式化字符串用,攻击者就可以通过%x、%s等格式符来读取或写入内存。严重时甚至能直接泄露/etc/passwd的内容。 - Use After Free / Double Free:内存释放后指针没有置空(比如
free(ptr)后没写ptr=NULL),或者同一块内存被释放了两次。轻则程序崩溃,重则内存数据被篡改,攻击者可以趁机植入恶意代码。 - Null Pointer Dereference:访问了一个未初始化或已置空的指针(比如
char *ptr=NULL; strcpy(ptr,"data");)。结果通常是系统崩溃,但某些场景下也可能被利用来实现权限提升。
三、服务与守护进程漏洞
Linux服务器上跑的各种服务(守护进程)如果代码有bug或者配置没拧紧,就是现成的攻击入口:
- OpenSSH漏洞:比如CVE-2016-3712,因为没正确检查SSH消息边界,攻击者可以构造恶意连接直接执行任意代码。SSH这扇门一旦被砸开,整个服务器就裸了。
- Nginx路径验证绕过:Nginx如果没严格校验URL路径(比如
/admin/../etc/passwd这种路径穿越),攻击者就能绕过授权访问到不该看的文件或端点。 - SOAP端点命令注入:SOAP服务如果没有过滤用户输入,攻击者可以在请求里塞入
;rm -rf /之类的命令,直接让服务器执行特权操作——这种漏洞往往让人防不胜防。 - 旧版服务漏洞:像
rcp(远程复制)、rlogin(远程登录)这种上古时期的服务,默认就允许root远程访问,简直是靶子。建议直接关掉,换成SSH。
四、网络协议与通信漏洞
网络协议实现层面的缺陷,或者配置不当,都可能让攻击者从远程发起攻击,或者偷走敏感数据:
- Heartbleed漏洞:OpenSSL库里的TLS/DTLS心跳扩展没有验证数据长度,攻击者发送一个恶意心跳请求,就能从服务器内存里泄露私钥、用户密码等敏感信息。当年这个漏洞影响了全球三分之二的HTTPS服务器。
- DNS漏洞(如CVE-2019-5417):BIND这类DNS服务器在处理未知记录类型时会出错,攻击者通过特制的DNS查询就能引发拒绝服务(DoS)。
- SYN洪水攻击:TCP三次握手里,攻击者狂发SYN包但不完成握手,把服务器的半连接队列填满,正常用户就再也连不上了。
- DDoS攻击:通过僵尸网络发送海量流量(UDP Flood、ICMP Flood等),把服务器带宽和CPU打满。缓解手段主要靠防火墙、CDN和流量清洗。
五、内核级漏洞
内核是整个系统的心脏,一旦出问题就是灾难性的。常见的内核漏洞类型有:
- Dirty COW漏洞:利用了Linux内核写时复制(Copy-on-Write)机制的竞态条件。普通用户可以把只读内存映射改成可写,然后直接提权到root。修复方法是升级内核到4.8.3及以上版本。
- 内核模块漏洞:第三方内核模块(比如某些显卡驱动)如果没有严格安全审计,可能存在缓冲区溢出或权限提升等问题。这类漏洞往往被黑产盯上,作为持久化后门。
- TOCTOU竞态条件:程序在“检查资源状态”(比如文件是否存在)和“使用资源”(比如打开文件)之间存在时间差。攻击者可以在这个窗口期里把合法文件换成恶意文件,从而绕过安全检查。
六、Web应用与接口漏洞
Linux服务器上跑的Web应用(Drupal、WordPress等)如果存在安全缺陷,攻击面一下子就打开了:
- SQL注入:应用没有使用参数化查询,攻击者在输入框里注入
' OR '1'='1之类的恶意SQL,就能窃取或篡改数据库里的用户密码、个人信息等敏感数据。 - 跨站脚本(XSS):应用没有过滤用户输入的HTML/Ja vaScript代码,比如评论框里贴上
,攻击者就能在其他用户浏览器里执行恶意脚本,偷cookie或者会话信息。 - 文件包含漏洞:应用没有验证用户输入的文件路径(比如
include($_GET['file']);),攻击者可以直接包含服务器上的任意文件(比如/etc/passwd),甚至通过远程文件包含执行恶意代码。 - Drupalgeddon系列漏洞:比如CVE-2018-7600,Drupal CMS没有过滤用户输入的表单数据,攻击者可以远程执行任意代码。唯一的办法就是及时更新Drupal核心和模块。
七、配置与管理漏洞
很多Linux系统被攻破不是因为没有补丁,而是配置和管理上犯了低级错误。这类“隐形杀手”往往比技术漏洞更难防:
- 弱密码策略:用户密码设成
123456、password这种,等于把钥匙挂在门上。建议使用大小写字母+数字+特殊字符的8位以上密码,并且定期更换。 - 未及时更新系统:操作系统和应用程序的安全补丁不装,已知漏洞就永远敞着。推荐开启自动更新,比如Ubuntu的
unattended-upgrades。 - 不必要的服务开放:Telnet、FTP这些明文传输的服务,能关就关。用
systemctl stop telnet.socket关闭,再通过防火墙限制端口访问,能少很多麻烦。 - 日志监控缺失:没有启用系统日志(比如
/var/log/auth.log记录SSH登录记录),或者日志从不审查,攻击来了都不知道。建议用fail2ban这类工具监控日志,自动封禁恶意IP。
