防守体系建设三部曲
三个层面的攻防对抗:信息对抗、技术对抗、运营能力对抗
- 信息对抗:知己知彼,情报优势
- 技术对抗:高维防守、建立优势、工程化
- 运营能力对抗:闭环运营、执行力
大规模生产网络的纵深防御架构
互联网安全理念
作者赞同腾讯的“河防”以及数字公司(应该指的360 )用的“塔防”概念
互联网安全的几个核心需求:快速检测、有限影响、快速溯源、快速恢复
攻击者视角
Plan-A:直接从目标系统正面找漏洞,getshell,提权,后面扩大战果,安全建设的思路要阻止攻击者扩大战果
Plan-B:曲折迂回,从周围信任域开始下手(包括arp重定向、可嗅探的、可会话中间人的、可链路劫持的、相同内网的、密码满足同一规律的、互联互通信任关系的,灾备或者镜像站点等),获取一个点之后再折返,之后与A类似
Plan-C:社会工程学,针对管理员和办公网的APT,水坑攻击。
防御者模型
纵深防御体系:安全域、基于第二层的隔离、端口协议过滤、APP安全、Container层安全、OS层防御和提权、防止内核空间乱入、Hypervisor保护
第一层:安全域的划分,是对业务的抽象不是对物理服务器的划分;他们不一定同一个物理机房,但对应相同的安全等级,共享相同的访问控制策略(目的希望将安全事件的最大范围控制在一个安全域中)
第二层:基于数据链路层的隔离,使用VPC、Vxlan、Vlan等方法在安全域的基础上对一组服务器更细的粒度再画一道防线,进一步抑制单点沦陷后受害源扩大的问题
第三层:端口状态协议过滤,这是大多数防火墙的应用场景。解决对黑客暴露的攻击面问题。
第四层:APP安全,主要解决认证鉴权、注入、跨站和上传的应用层漏洞。
第五层:容器和运行时的环境。应用程序有漏洞,也不希望攻击者直接跳转到系统权限,方法是容器加固,比如阻止一些危险函数的运行,比如上传了webshell但是不被解析执行。
第六层:OS层防御,系统加固,主要对抗提权,SMAP(Supervisor Mode Access Prevention,管理模式访问保护)和SMEP(Supervisor Mode Execution Prevention,管理模式执行保护)、DEP、ASLR、stack-canary等,此外不是特别的需求要干掉LKM【Loadable Kernel Module(可加载内核模块)】,/dev/kmem (一个特殊的设备文件,用于提供对系统内核内存的直接访问。它允许用户级程序读取或写入内核虚拟地址空间中的数据。),限制/dev/mem的全地址空间的读写(/dev/mem 是一个特殊的设备文件,用于提供对系统物理内存的直接访问。它允许用户级程序读取或写入整个物理内存的内容。)
第六层:假如云计算环境,更底层的还有hypervisor
互联网安全架构设计原则
- 纵深防御
- 多维防御:同一个攻击多种维度的防御和检测手段;例如SQL注入,第一层WAF,第二层Web日志分析,第三层RASP,第四层SQL审计
- 降维防御:比如在内核态检测用户态攻击,使用RASP运行时而不是cgi层面检测webshell
- 实时入侵检测
- 伸缩性、可水平扩展,无论是WAF、HIDS还是IPS需要能够水平扩展
- 支持分布式IDC
- 支持自动化运维:需要能够自动化分发、注册、报告转台、统一策略推送等
- 低性能损耗
- 能旁路则不串联
- 业务无感知
- 去“信息孤岛”:程序和设备科联动,可关联,IOC信息的兼容、共享和流通。
- TCO可控:TCO(Total Cost of Ownership,总拥有成本)可控意味着在管理和运营信息技术(IT)系统或解决方案时,可以对系统的总体成本进行有效的控制和管理。
不管安全实践多么优秀的互联网公司,安全体系都离不开基础安全措施,不然上层的大数据入侵检测如同空中楼阁。在纵深防御中层层设卡,每个环节关注有限的点,使得入侵检测需要的覆盖面(广度)和检测层次(深度)随着攻击面的缩小而大幅缩减。
安全域划分
目的是将一组安全等级相同的计算机划入同一个安全域,对他们设置相同的网络边界,在网络边界上以最小权限开放对其他安全域的NACL(网络访问控制列表/策略),将域内计算机暴露的风险最小化,在发生攻击或蠕虫病毒是能将威胁最大化地隔离,减少域外时间对域内系统的影响
传统的安全域划分
通常分为DMZ区和内网,还会通过硬件防火墙的不同端口来实现隔离,这种只适用于办公网络,对于大规模生产网络已经不适用。
DMZ(Demilitarized Zone,非军事区)是一个位于网络边界内的区域,用于隔离内部受信任的网络与外部不受信任的网络之间的安全边界。
典型的Web服务
有三层:接入层、应用层、数据层。
接入层:只开放80与443端口
应用层:工程技术人员可通过堡垒机访问应用层
数据库层:授权的第三方可通过ssh远程连接访问指定的数据层资源
其余所有端口默认阻断
安全域划分没有限定一定划分vlan,可以基于L3、L4的防火墙规则,甚至NAT都可以起到隔离作用。基于L2的划分比L3及之后的更可靠一点。
大型系统安全域划分
把不同的业务(垂直纵向)以及分层的服务(水平横向)一个个切开,在南北向的APT调用上保留最小权限的访问控制,在东西向如无系统调用关系则彼此隔离。
小网络可以做得很细,大网络的运维工作量大,需要妥协折中的策略。
生产网络和办公网络
只介绍生产网络和办公网络链接所涉及的安全域问题,为保证最大的隔离,尽可能采取如下措施:
- 生产网络的ssh 22端口在前端防火墙或者交换机上默认阻止访问
- 远程访问(运维连接)通过VPN或者专线链接到机房生产网络
- 通过生产网络的内网而非外网登录个服务器或者自动化运维平台
- 办公网络中运维环境、发布源和其他OA环境VLAN隔离
- 虽然同一个物理办公地点,但运维专线和帮贡网络的接入链路各自独立
- 为保证可用性,运维专线最好有两条以上且来自不同的ISP,防止单链路故障时,无法运维
- 跳板机有所有的运维操作审计。
系统安全加固
所有安全工作的第一步,可以归入安全基线
Linux加固
- 禁用LKM:规避knark、adore这类LKM RootKit(通过配置只是治标,治本是在编译内核的时候去掉LKM的支持)
- 限制/dev/mem,新版linux不再有/dev/kmem, 要确保CONFIG_STRICT_DEVMEM设置为y
1 | root@vps1:/boot# cat config-`uname -r` | grep DEVKMEM |
- 内核参数调整
/proc/sys/kernel/randomize_va_space : ASLR,0是关闭,1是mmap base、stack和vdso page随机化,heap没有,2才增加了heap的随机化
/proc/sys/kernel/kptr_restrict 1:限制非特权用户对内核指针的访问,只有具有root权限的进程才能读取和使用内核指针。
/proc/sys/vm/mmap_min_addr是Linux内核中一个虚拟内存子系统的参数。它用于限制非特权用户在较低的虚拟内存地址范围内进行内存映射的能力。 设置为65536
禁用NAT:攻击者内网渗透会在边界开启端口转发,/proc/sys/net/ipv4/ip_forward,设置为0,假如无缘无故变为1,可能出了安全问题(但有些服务可能需要这个功能,)
Bash日志: 家目录的.bash_history,
下面配置可以加到.bashrc中
设置环境变量为只读
1 | readonly HISTFILE |
为history添加时间戳
1 | exportHISTTIMEFORMAT=' %F %T ' |
设置history文件只能追加
1 | chattr +a ~/.bash_history |
禁用其他shell
更改HISTFILE
为其他文件,并保留原路径下的.bash_history
1 | HISTFILE=/usr/local/log/cmd |
- 高级技巧
高阶的做法就是修改shell本身,对所有执行的命令无差别地记录
修改shell源码是一种方式,直接修改libc会更加高效,涉及的对象是exec函数族
1 | int execl(const char *path, const char *arg0, ... /* (char *) NULL */); |
exec 函数族的底层实现通常会调用 execve 函数。这是因为 execve 函数是 exec 系列函数中最底层、最通用的函数。
修改以上库函数,支持额外的syslog,就能记录所有运行过的程序。
另一种shell审计的高级方式是将shell的log统一收集后基于机器学习,学习正常管理员的shell命令习惯,而不是以静态规则定义黑白名单。
应用配置加固
- 目录权限
安全圈流行:可写目录不解析,解析目录不可写
- Web进程以非root运行
- 过滤特定的文件类型:比如通过web配置的rewrite规则,将.bak .log .zip(这个看情况) .sql 等后缀的访问,重定向到特定的页面
远程访问
ssh使用v2版本能,并禁止root用户远程登录
账户密码
对付暴力破解最有效的方式是多因素认证或非密码认证
收集各种社工库,把内部测试研发运维的常用弱密码做成字典,周期性地更新字典并主动尝试破解公司内的各个系统的账户,能破解的都视为弱密码。
网络访问控制
生产网络多层NACL:第一层 FW,第二层交换机(简单的NACL) ,第三层服务器(系统自导的防火墙就够用了)
补丁管理
自动化运维:大量push补丁
ITSM(信息技术服务管理)成熟度:不影响在线服务可用性
架构容灾能力:支持有损服务,灰度和滚动升级
系统能力:提供热补丁,无需重启
快速单个漏洞扫描:补丁push成功后的检测
日志审计
一般建好第几,初步纵深防御建立起来才搞SOC(安全运营中心)
初期可以关注重要的,比如 lastlog和/var/log/secure,看看是否有非雇员登录
服务器4A
4A是指: 账户、认证、授权和审计
对于大规模的服务器集群,不太可能,每台服务器单独维护用户名和密码
一个是基于LDAP
一个基于堡垒机
网络入侵检测
传统商业NIDS
开源的snort
大型全流量NIDS——基于大数据的NIDS架构
- 分层结构,所有节点可水平扩展
- 检测与防护分离,性能与可用性大幅提升
- 报文解析与攻击识别完全解耦,入侵检测环节后移
- 依赖大数据集群,规则数量不再成为瓶颈,而且不在基于静态特征而是能多维度建模
T级DDoS防御
多层防御结构
第一层:ISP近源清洗
第二层:云清理/CDN硬抗
第三层:DC级近目的的清洗
链路劫持
- 加密的DNS:比如DOT DOH等
- 全站HTTPS
- 登录过程加密:前端页面加密后再提交服务器
- 跨IDC传输加密
Web应用防火墙
- cname部署
- module部署:ModSecurity
- 网络层部署
- 混合型WAF架构
主机入侵检测(HIDS)
开源产品 OSSEC
MIG: 开源的分布式取证框架,不算严格意义的HIDS
OSquery:将操作系统当作数据库,用sql语句查询
检测webshell
- 静态检测:可以多维度检测:文件数组,生成时间/目录、inode、上传的目录
- 流量监测
RASP
Java:基于高危行为组合的检测模型、基于调用栈的检测模式
数据库审计
解决:SQL注入拖库、操作违规的审计
部署:旁路型、主机型、代理型
入侵检测数据分析平台
全局的信息汇聚与分析,将上面提到的数据进行汇聚和分析
扫描分类
ACL扫描:避免无需对外开放的ip或者端口暴露公网
弱口令扫描
系统及应用服务漏洞扫描
Web漏洞扫描
应对大规模的资产扫描
- 简化漏洞评估链,减少扫描任务
- 减少网络开销与被检查者的性能损耗
- 减少漏洞扫描的种类
- 减少收工确认的工作量
实践中:
- 不做全网漏扫,先做端口扫描,减少扫描的任务
- 做好高危端口监控
- 系统和应用扫描,不完全依赖扫描器,可借助本机agent的扫描
Coverity
安全域划分
一般针对大型企业
分类示例: OA服务器域、事业部A桌面域、事业部B桌面域
而在桌面域可以细分,重度PC用户(运维、研发)、中度PC用户(运营、市场、媒体)、轻度PC用户(客服、线下销售)
重度的策略可以无需过于严格,轻度的可以相对严格的策略
终端管理
补丁管理
微软自身解决方案中的SCCM
第三方终端管理软件中附带的补丁推送功能
组策略
作用主要在于实施一些基本的安全策略
终端HIPS(AV)
360安全卫士、腾讯管家那些
不过现在微软的defender也不错了
网络准入NAC
主流方案:
- 802.1X (前提是所有交换机都支持802.1X )
- C/S模式认证
IEEE 802.1X 是一种网络访问控制(NAC)协议,用于提高局域网(LAN)和无线局域网(WLAN)的安全性。它的主要目的是确保只有经过授权的设备和用户能够访问网络资源,从而减少未经授权的访问和网络攻击的风险。
安全网关
- NGFW/FW
- UTM(统一威胁管理)/反病毒网关/NIPS/反垃圾邮件
- 堡垒机
- 行为升级
- 其他:DLP(数据丢失预防Data Loss Prevention)、抗APT、大数据探针
研发管理
- 防泄密:研发两台电脑,一个可上网,一个用于coding,不能上网
- 源代码管理
远程访问
vpn:暴力破解问题
虚拟化桌面
安全方面有先天优势,尤其是物理安全方面,没有拷贝数据的USB口
APT
安全体系需要构建的完备一点
此外还可以从陷阱网络和蜜罐入手
DLP数据防泄漏
主要通过终端控制、网络出口控制、以及检测网络流量实现
本质是一种方法论和参考维度,ISO27001
安全团队的组织分类
安全KPI:覆盖率、覆盖深度、检出率/主动止损率、TCO(总拥有成本,Total Cost of Ownership)和 ROI(投资回报率,Return on Investment)
外部评价指标:攻防能力、视野和方法论、工程化能力(全线防御、纵深防御、自动化)、对业务的影响力
数据分类
访问控制
数据隔离
数据加密
密钥管理
安全删除
匿名化
内容分级:有些需要2FA认证才给访问才行