互联网服务安全域抽象示例
虚线部分代表安全域的边界,把不同的业务(垂直纵向)以及分层的服务(水平横向)切开,只在南北向的 API 调用上保留最小权限的访问控制,在东西向如无系统调用关系则彼此隔离
生成网络和办公网络
生产网络的 SSH 22 端口在前端防火墙或交换机上默认阻止访问远程访问(运维连接)通过 VPN 或专线连接到机房生产网络通过生产网络的内网而非外网登录各服务器或自动化运维平台办公网络中运维环境、发布源和其他 OA 环境 VLAN 隔离虽然在同一个物理办公地点,但运维专线和办公网络的接入链路各自独立为保证可用性,运维专线最好有两条以上巨来自不同的 ISP,防止单链路故障时无法运维跳板机有所有的运维操作审计系统安全加固
Linux 加固
禁用 LKM限制 /dev/mem内核参数调整禁用 NATBash 日志高级技巧
高阶的方法就是修改 shell 本身,不依赖于内置的 HISTFILE,而是对所有
执行过的命令无差别的记录
修改 shell 源代码是一种方式,不过相比之下,直接修改 libc 可能会更加高效。主要涉及的对象就是 exec 函数族:
#include <unistd.h>extern char **environ; int execl();int execlp();int execle();int execv();int execvp();int execue();
修改以上库函数,支持额外的 syslog,这样能记录所有运行过的程序。实际上,另外 5 个函数都是调用的 execve()
另一种 Shell 审计的高级方式是将 Shell 的 log 统一收集后基于机器学习,以算法学习正常管理员的 Shell 命令习惯,而不是以静态规则定义黑白名单
应用配置加固
目录权限
可写目录不解析,解析目录不可写。在诸如 node.js 等新型语言发展的时候,这些规则适用面可能会越来越小
解析目录不可写:chmod 755 /web/root
可写目录不解析:
location ~* ^/data/cgisvr/log/.*\.(php|php5)$ {deny all;}
对于 PHP,在 Nginx 配置文件中添加上述配置
Web 进程以非 root 运行
Nginx 的 master 进程默认以 root 权限运行,而处理用户数据的 worker 进程默认以 Nginx 权限运行
过滤特定文件类型
location ~* \.(log|class|inc|bak) $ {rewrite ^ / permanent;}
远程访问
使用 SSH V2禁止 root 远程登录帐号密码
对付暴力破解最有效的方式是多因素认证、非密码认证
网络访问控制
资产权重划分到位,对最高安全优先级的网络追求多维和细粒度的 NACL单点实现较强的入侵检测和降维防御能力补丁管理
自动化运维:如何大批量地 push 补丁ITSM 成熟度:打补丁尽可能地不影响在线服务的可用性架构容灾能力:支持有损服务,灰度和滚动升级,好的架构应该支持比如让逻辑层的某些功能功能服务器下线,接入层把流量负载均衡到其他服务器,打完补丁后再切回来系统能力:提供热补丁,不需要重启快速单个漏洞扫描:补丁 push 升级成功的检测日志审计
日志成千上万,一开始就想建 SOC 的往往都是没有经验的人。
可以通过 syslogd 导出日志,统一集中存储,是否使用 ELK、Splunk 要看公司的具体需求
服务器 4A
账户(Account)、认证(Authentication)、授权(authorization)、审计(Audit)
规模很大的服务器集群,必须使用类似 SSO 的统一权限管理,目前有两种方式:一种是基于 LDAP 的方案,另一种是基于堡垒机的方案
基于 LDAP
LDAP 的方案可以使用 LDAP 服务器作为登录的 SSO,统一托管所有的服务器账号,在服务器端对于 Linux 系统只要修改 PAM(Pluggable Authentication Modules),Windows 平台则推荐 pGina(pGina 是一个开源插件,作为原系统凭证提供者 GINA 的替代品,实现用户认证和访问管理),使登录认证重定向到 LDAP 服务器做统一认证
基于堡垒机
在 Radius 上新建用户 Richard,为该用户生成 SSH 的公私钥对,使用自动化运维工具将公钥分发到该用户拥有对应权限的服务器上。用户的 SSH 连接由堡垒机托管,登录时到 Radius 服务器使用动态令牌认证身份,认证成功后授权访问其私钥,则对于有 SSH 公钥的服务器该用户都可以登录。网络访问控制上应设置服务器 SSHD 服务的访问源地址为堡垒机的 IP