基线检查与安全加固

基线检查与安全加固

入侵排查

Windows

  • 检查服务器是否配置弱口令

  • 查看端口开放情况:netstat -ano

    -a 显示所有连接和侦听接口
    -n 艺术字形式显示地址和端口号
    -o 显示每个连接关联的进程ID
    
  • 查看administrators用户组中是否存在可以成员:net localgroup Administrators

  • Windows系统日志位置:C:\windows\system32\winevt\logs

  • 使用工具分析系统日志:fullwventlogview

  • 查看启动项、计划任务、服务

    任务计划程序:taskschd.msc
    服务:services.msc
    

Linux

  • 查看当前用户,登录信息

    who      查看当前登录用户(tty本地登陆 pts远程登录)
    w       查看系统信息,想知道某一时刻用户的行为
    uptime  查看登陆多久、多少用户,负载
    last    查看用户登录历史信息以及系统启动和关机记录
    
  • 查看系统中用户信息,分析是否存在可以用户

    cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    account:password:UID:GID:GECOS:directory:shell
    用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
    注意:无密码只允许本机登陆,远程不允许登陆
    
    cat /etc/shadow
    root:$5$dmXzyC0syw8uamm1$NAJ/PsT0gQyM4RRpDPu1VuNZ2SDUHB27z/0kDQ1fFJ6::0:99999:7:::
    用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
    
  • 查看用户执行的历史命令:对应用户的home目录下存在.bash_history,里面记录了该用户执行过的命令,默认保存1000条

  • 查看端口开放情况:netstat -antlp

    -t 显示TCP连接
    -l 显示监听状态的连接
    -p 显示进程标识符和程序名称
    
  • 查看异常进程

    top 查看占用资源异常的进程
    ps -aux 查看进程的详细信息
    -a:显示当前终端的所有进程。
    -u:显示进程的用户信息。
    -x:显示没有控制终端的进程
    
  • 检查启动项和计划任务

    /etc/rc.d/rc.local 文件用于存储系统启动时需要执行的脚本
    cat /etc/rc.d/rc.local 
    
    crontab查看定时任务
    crontab -l   用户查看当前用户的定时任务,-u选项可以指定用户
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    以下这些目录包含按小时、天、周和月运行的脚本
    ls /etc/cron.hourly/
    ls /etc/cron.daily/
    ls /etc/cron.weekly/
    ls /etc/cron.monthly/
    
  • Linux日志:/var/log

    安全日志,包含登录成功和失败的登录尝试、用户切换等
    /var/log/auth.log   # Debian/Ubuntu
    /var/log/secure    # Red Hat/CentOS
    
    系统事件和消息,包括启动、关闭、硬件事件、软件错误等
    /var/log/syslog      # Debian
    /var/log/messages    # CentOS
    
    系统启动和关机日志
    /var/log/boot.log
    
    邮件日志
    /var/log/mail.log   # Debian
    /var/log/maillog    # CentOS
    
    中间件日志
    /var/log/apache2/*
    /var/log/httpd/*
    /var/log/nginx/*
    

基线检查

基线检查通常涉及对系统配置、软件版本、安全策略等方面的全面检查,以发现潜在的安全漏洞和配置问题

Linux

账号管理和授权

  • 检查特殊账号,是否存在空密码的账户和 root 权限账户
  • 禁用或删除无用账号
  • 添加口令策略:/etc/login.defs修改配置文件,设置过期时间、连续认证失败次数
  • 禁止 root 远程登录,限制root用户直接登录。
  • 检查 su 权限。vi /etc/pam.d/su添加auth required pam_wheel.so group=test

服务

  • 关闭不必要的服务

  • SSH 服务安全

    • 不允许 root 账号直接登录系统,PermitRootLogin=no
    • 修改 SSH 使用的协议版本为 2
    • 修改允许密码错误次数(默认 6 次),MaxAuthTries=3

文件系统

  • 设置 umask 值 vi /etc/profile 添加行 umask 027
  • 设置登录超时 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为 TMOUT=180

日志

  • 启用 syslogd 日志,配置日志目录权限,或者设置日志服务器
  • 记录所有用户的登录和操作日志,通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查

IP 协议安全要求

  • 远程登录取消 telnet 采用 ssh
  • 设置 /etc/hosts.allow 和 deny
  • 禁止 ICMP 重定向
  • 禁止源路由转发
  • 防 ssh 破解,iptables (对已经建立的所有链接都放行,限制每分钟连接 ssh 的次数)+ denyhost (添加 ip 拒绝访问)

Windows

身份鉴别

  • 更改缺省账户
  • 检查Guest用户是否禁用
  • 密码复杂性要求
  • 密码长度最小不能小于8位

访问控制

  • 共享账户检查
  • 远程关机授权
  • 本地关机
  • 授权帐户登陆

安全审计

  • 用户登录日志记录
  • 系统日志完备性检查
  • 登录超时管理

资源控制

  • 登录超时管理
  • 远程登录超时配置

剩余信息保护

  • 不显示上次的用户名
  • 关机前清除虚拟内存页面
  • 不启用可还原的加密来存储密码

中间件部署规范

nginx

  • 隐藏版本号

    http {
        server_tokens off;
    }
    
  • 开启HTTPS

    ssl on:开启https

    ssl_certificate:配置nginx ssl证书的路径

    ssl_certificate_key:配置nginx ssl证书key的路径

    ssl_protocols:指定客户端建立连接时使用的ssl协议版本

    ssl_ciphers:指定客户端连接时所使用的加密算法

    server {
        listen 443;
        server_name <xxx>;
    
        ssl on;
        ssl_certificate <pem路径>;
        ssl_certificate_key <key路径>;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD%
    
    }
    
  • 限制请求方法,禁止PUT/DELETE等,只允许GET/POST,其他方式返回405

    if ($request_method !~ ^(GET|POST)$ ){
        return 405;
    }
    
  • 使用referer图片防盗链

    locations /images/ {
        valid_referers none blocked <domain_name> <domain_name>;
        if ($invalid_referer){
            return 403;
        }
    }
    
    valid_referers:验证referer
    
    none:允许referer为空
    
    blocked:允许不带协议的请求
    
  • 添加Header头防止XSS攻击

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    

    X-Frame-Options:标识是否允许浏览器加载frame等属性。

    • DENY:禁止任何网页被嵌入
    • SAMEORIGIN:只允许本网站的嵌套
    • ALLOW-FROM:允许指定地址的嵌套

    X-XSS-Protection:启用XSS过滤。mode=block标识若检查到XSS攻击则停止渲染页面

    X-Content-Type-Options:用来指定浏览器对未指定或错误指定Content-Type资源真正类型的猜测行为

    • nosniff:标识不允许任何猜测
    • 在通常的请求相应中,浏览器会根据Content-Type来分辨响应的类型,如果响应类型未指定或错误指定时,浏览器会启用MIME-sniffing来猜测资源的响应类型

Apache

  • 文件系统根目录禁止覆盖,即禁止使用.htaccess配置文件规则覆盖主配置文件规则

    # /etc/httpd/conf/httpd.conf
    <Directory />
      ...
      AllowOverride None
       ...
    </Directory>
    
  • 禁止访问文件系统根目录

    <Directory />
      ...
      Require all denied
       ...
    </Directory>
    
  • 文件权限:Apache目录上的权限应该为755

  • 隐藏版本号

    ServerSignature off
    
  • 只允许GET/POST方法

    <LimitExcept GET POST>
        Require all denied
    </LimitExcept>
    
  • 禁止列表显示文件

    <Directory /var/www/html>
        Options -Indexes  # 禁用目录列表
    </Directory>
    # -Indexes 表示禁用自动索引,+Indexes 表示启用
    
  • 确保Apache用户具有无效的shell

    # 检查当前apache用户的shell
    grep -E '^www-data|^apache' /etc/passwd
    # 修改apache用户的shell
    # Debian/Ubuntu(用户通常是 www-data)
    sudo usermod -s /usr/sbin/nologin www-data
    
    # RHEL/CentOS(用户通常是 apache)
    sudo usermod -s /usr/sbin/nologin apache
    

    常用无效shell选项

    Shell 路径 说明
    /usr/sbin/nologin 显示 "This account is currently not available."
    /bin/false 直接退出,无提示
    /sbin/nologin 类似 nologin,但某些系统可能没有

安全设备

IDS

  • 功能:监控网络或主机流量,检测异常行为(如攻击、恶意软件)并报警,但不主动阻断

  • 分类

    • 网络入侵检测系统(NIDS): 监测整个网络上的流量,检测与已知攻击模式相匹配的活动。
    • 主机入侵检测系统(HIDS): 安装在单个主机上,监测该主机上的活动,以检测是否有异常或潜在的入侵。
    • 基于协议的入侵检测系统: 关注网络协议的使用,检测是否存在协议级别的异常活动。
    • 基于应用协议的入侵检测系统: 专注于检测与特定应用程序协议相关的入侵行为。
    • 混合入侵检测系统: 结合了多种入侵检测技术,以提高检测的准确性和全面性。
  • 部署位置

    • 旁路部署(核心交换机或防火墙旁,不影响网络性能)
    • 关键网段(如财务部、服务器群)
    • 广域网中枢(检测骨干网络攻击)

IPS

  • 功能:IPS在IDS基础上增加主动阻断能力,可实时拦截攻击(如DDoS、漏洞利用)

  • 部署位置

    • 串联部署(防火墙后,在线阻断恶意流量)
    • 主机层面(HIPS,保护关键服务器)
    • 网络关键路径(如数据中心入口)

态势感知

  • 功能:通过大数据分析全网流量、日志和威胁情报,提供可视化安全态势,辅助决策

  • 部署位置

    • 核心交换机或数据中心(全面采集流量)
    • 云端或SOC中心(集中管理多分支安全数据)

防火墙

  • 功能:防火墙是网络安全的基础设备,主要用于控制网络流量的进出,基于预定义的规则(如IP地址、端口、协议)允许或拒绝数据包传输,保护内部网络免受外部攻击

  • 部署位置

    • 网络边界(如企业内网与互联网之间)
    • DMZ区域(用于保护对外服务的服务器,如Web、FTP服务器)
    • 内部子网之间(如财务部与研发部网络隔离)
    • 云端环境(云防火墙保护云资源)
  • 下一代防火墙:NGFW在传统防火墙基础上增加了应用层(L7)检测、入侵防御(IPS)、用户身份识别、SSL解密等高级功能,能识别并控制具体应用(如区分微信和HTTP流量)

堡垒机

  • 功能:集中管理运维访问权限,审计操作(如SSH、RDP),防止内部越权或外部入侵

  • 部署位置

    • 内网核心节点(如数据中心入口)
    • 高可用(HA)模式(主备部署避免单点故障)
    • 云环境(保护云服务器运维通道)

Snipaste_2025-05-07_10-34-48_PhotoGrid

Webshell

处理方法

  • 排查可能存在的webshell文件

    find /var/www/html -name "*.php" |xargs egrep 'assert|eval|phpinfo\(\)|\(base64_decoolcode|shell_exec|passthru|file_put_contents\(\.\*\$|base64_decode\('
    
  • 日志检测:使用 webshell 一般不会在系统日志中留下记录,但是会在网站的 web 日志中留下 webshell 页面的访问数据和数据提交记录

  • 及时隔离主机

  • 定位事件范围,查看文件 webshell 文件的创建时间,对 webshell 取证样本

  • 通过创建时间结合日志分析可疑行为,以及启动用户的其他进程确定漏洞

  • 清除 webshell 及残留文件,修复漏洞

  • 攻击者通过webshell获得命令执行权限后,可能还设置了定时任务、启动项、ssh连接的公钥文件。所以还需要对这些问题进行排查

流量特征

  • 中国菜刀:默认采用base64编码,其默认参数是Z0

  • 蚁剑

    • Antsword源代码参照中国菜刀,所以许多特征相似,但是Antsword可以进行更多加密,编码混淆处理,默认明文传输。
    • 它最大的特征是存在ini_set("display_erros","0")字符串特征,该代码可以抑制PHP错误显示。
    • 默认情况下,User-Agent为antsword,但是可以通过修改/modules/request.js文件进行自定义。
    • 部分编码模式下,参数名可能以0x开头(如0x加密数据),这也是蚁剑流量的一个潜在特征
  • 冰蝎

    • 冰蝎采用加密方式进行通信,加密密钥由攻击者自定义,隐蔽性高,难以检测

    • 会话中发送的请求头和响应头是固定的

    • Content-type固定,但是作为特征检测可能会高误报: Application/x-www-form-urlencoded

    • 冰蝎生成的php服务端webshell中存在固定代码

      $post=Decrypt(file_get_contents("php://input"));
      

常见端口漏洞

数据库类(弱口令)

  • 1433:MSSQL
  • 1521:Oracle
  • 3306:Mysql
  • 5432:PostgreSQL

特殊服务类(未授权)

  • 443:ssl 心脏滴血
  • 873:Rsync 未授权
  • 5984:CouchDB http://xxx:5984/_utils/
  • 6379:Redis 未授权
  • 7001、7002:Weblogic 默认弱口令
  • 8088:Hadoop Yarn 资源管理系统 REST API 存在未授权
  • 8161:Apache ActiveMQ 未授权、弱口令,put 文件上传,move 文件移动
  • 9200、9300:elasticsearch 命令执行
  • 11211:Memcache 未授权,telnet ip 就可以获得服务器敏感信息
  • 27017、27018:Mongodb 未授权
  • 50000:SAP 命令执行
  • 50070、50030 Hadoop 未授权访问

常用端口类(弱口令)

  • 21:FTP 弱口令,匿名 anonymous/空登录,以及 ms12-073
  • 25:SMTP 简单邮件传输服务器端口
  • 23:Telnet 的端口,Telnet 是一种可以远程登录并管理远程机器的服务
  • 22:ssh 端口,PcAnywhere 建立 TCP 和这一端口的连接可能是为了寻找 ssh,这一服务有许多弱点
  • 53:dns 端口
  • 139:属于 TCP 协议,是为 NetBIOS Session Service 提供的,主要提供 Windows 文件和打印机共享以及 Unix 中的 Samba 服务
  • 445:网络共享 smb 服务,尝试利用 ms08067,ms17010 等以及 IPC$ 攻击手段
  • 2601、2604:zebra 路由,默认密码 zebra

日志分析

  • 定位有多少IP在爆破主机的root帐号:

    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    
  • 定位有哪些IP在爆破:

    grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
    
  • 爆破用户名字典是什么?

    grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print"$1\n";}'|uniq -c|sort -nr
    
  • 登录成功的IP有哪些

    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    登录成功的日期、用户名、IP:
    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
    

加固方法

暴力破解

  • 增加验证码验证
  • 修改密码设置规则,提高用户密码强度
  • 限制登录尝试次数
  • 定期检查弱口令
  • 增加MFA二次验证

SQL注入

  • 对用户输入的特殊字符进行转义和过滤

  • 使用SQL预编译技术,该方法将SQL语句模板和数据分离,使用占位符代替实际值,要执行的SQL语句结构在预编译时已经固定,后续的参数无法改变原语句结构

  • 禁止SQL上传读取文件

    -- 查看当前文件权限
    SHOW VARIABLES LIKE 'secure_file_priv';
    
    -- 配置my.cnf/my.ini
    [mysqld]
    secure_file_priv = ""  -- 完全禁止文件操作
    # 或指定特定目录
    secure_file_priv = '/var/lib/mysql-files/'
    
  • 移除数据库某用户的文件操作权限

    -- 移除plugin_dir中的危险插件
    -- 禁用SELECT INTO OUTFILE
    REVOKE FILE ON *.* FROM 'app_user'@'%';
    

XSS攻击

  • 输入验证,过滤敏感字符和标签

  • 输出编码,对输出到前端的特殊字符进行HTML编码

  • HTTP安全头

    # 如果检测到XSS攻击,浏览器会阻止页面加载
    X-XSS-Protection: 1; mode=block
    
    # 防止浏览器将非JS文件当作JS执行
    X-Content-Type-Options: nosniff
    
    # HttpOnly 和 Secure Cookie
    # HttpOnly:防止JS读取Cookie(防止XSS窃取会话)
    # Secure:仅HTTPS传输Cookie
    # SameSite=Strict:防止CSRF攻击
    Set-Cookie: sessionId=123; HttpOnly; Secure; SameSite=Strict
    

CSRF

  • 验证码,对关键业务增加MFA二次验证
  • 在页面添加CSRF Token,只有用户在真正的网页上正确位置点击发送的请求才会带上CSRF Token,验证后即失效,每次刷新不同
  • 验证HTTP Rrferer,看Referer是否来自可信域名
  • 手机短信提醒

SSRF

  • 校验目的地址,拒绝访问内网地址及回环地址
  • 设置服务器可访问地址的白名单
  • DMZ区域部署,应将所有可能处理用户提供URL的服务部署在DMZ(非军事区),与内部网络进行物理或逻辑隔离。DMZ中的服务器只允许出站连接到互联网,禁止主动向内网发起连接。同时,内网服务应配置防火墙规则,仅接受来自特定可信源的入站连接
  • 禁用高危协议,例如:gopher、dict、ftp、file等,只允许http/https设置URL白名单或者限制内网IP

参考

蓝队面试题整理 - 北の泉 - 博客园

安全基线检查及部分中间件部署规范 - linuxsec - 博客园

IDS(入侵检测系统)、IPS(入侵防御系统)和防火墙到底有啥区别?_入侵检测是ips还是ids-CSDN博客

常见安全设备总结(IDS、IPS、上网行为管理、网闸、漏扫、日志审计、数据库审计、堡垒机等)_ids设备有哪些-CSDN博客

DeepSeek - 探索未至之境

Kimi - 会推理解析,能深度思考的AI助手

暂无评论

发送评论 编辑评论


				
上一篇
下一篇