网络安全

Posted by Cann on May 22, 2019

前言

公司要研发一款金融产品,对网络安全要求比较高,所以开始学习网络安全相关知识。

纵深防御体系

image-20190522110816016

  • 数据库:数据库审计、数据库防火墙
  • 服务器端:主机IDS、服务器杀毒、内核加固类产品、主机WAF
  • 网络层:IDS、Web 威胁感知、Web 审计
  • 网络边界:防火墙、UTM、WAF、IPS、本地流量清洗设备

边界防护的基础 — 安全域

概述

所谓安全域,我个人理解就是具有相同安全级别,并且可以用统一的边界访问策略控制的服务集合。

划分安全域后,可以通过边界访问控制,达到以下目的:

  • 最小化各个区域的攻击面
  • 单安全区域被攻陷后,控制影响范围

访问控制:例如限定开放端口,IP白名单等

常用的安全域划分

一:外网

主要面对的是用户和黑客

二:业务服务器区

强烈建议仅通过负载均衡对外发布服务,业务服务器区对外仅暴露堡垒机和负载均衡设备的端口。

三:内部服务区

用于支撑员工办公的服务,例如运营后台,原则上这个区域只允许来自办公区域的访问。

四:测试开发区域

该区域属于灯下黑,容易被黑客侵入作为跳板机,原则上这个区域也只允许来自办公区域的

**各个区域间难免有业务上的需求,部分服务需要互通,这个以白名单的形式开放。**

**各个区域的 SSH 连接和远程桌面访问仅信任堡垒机IP。**

主机加固

概述

我理解的主机加固,就是通过一系列手段,减少主机本身的漏洞,加强访问控制。

Linux 主机加固的主要手段

一:禁止 root 登录

vi /etc/ssh/sshd_config
# 找到 PermitRootLogin 项,设置为no

二:禁用LKM

LKM全称 Loadable Kernel Modules,中文名为可加载内核模块,主要功能是用来扩展 Linux 的内核功能,LKM 的有点是可以动态地加载到内存中,所以经常被用于一些设备的驱动程序,例如声卡、网卡。但也因为它这样的优点,经常被黑客用于 rookit 技术中,强烈建议默认关闭,除非必要,不要使用。

echo 1 > /proc/sys/kernel/modules_disabled

可以将上面的语句写到开机启动项中,这样比编译至内核中更灵活。

三:开启 ASLR

ASLR,即内存地址随机化机制,可以在 Linux 服务器遭受缓存区溢出攻击时提高攻击成本,分为三个级别:

  • 0:关闭进程地址空间随机化
  • 1:将 mmap 的基址,stack 和 vdso 页面随机化 (囧 一脸懵逼)
  • 2:在1的基础上增加堆(heap)的随机化
echo 2 > /proc/sys/kernel/randomize_va_space

将上面的语句写入开机启动项中。

主机级安全资产管理

概述

主机级安全资产管理,即对主机的进程、网络连接、账户等主机层面或者说 OS 级别信息的搜集与管理。例如:当前主机的登录用户、进程列表、具有网络连接的进程列表等等。

与主机级资产数据相对的还有网络级和应用级安全资产:

安全视角的IT资产

这两项我们暂时不说(因为我看的书作者没说啊~)

收集主机级资产数据主要是为了达到以下两个目的:

  • 事中的入侵检测
  • 事后的审计与事故排查

osquery

github

osquery 是 Facebook 开源的一款基于 SQL 的操作系统检测和监控框架,目前它只实现了本地的数据收集以及 SQL 交互式查询,没有实现数据的统一上传和集中存储分析,所以我们可以基于它来开发。

搭建

请移步:使用 osquery 实现主机级安全资产管理(等我实践后更新)

WAF

概述

WAF(WEB Application Firewall)是通过执行一系列安全策略为Web应用提供保护的一种产品。承担了低于常见的SQL注入、XSS、远程命令执行、目录遍历等攻击的作用。是守护业务安全的第一道防线。

传统WAF的不足

一:防御能力不足

WAF主要依赖规则匹配,对已知的攻击有一定的防御能力,对未知攻击无防护能力。

另外,由于正则匹配的固有局限性,以及一些语言灵活多变的特性,WAF是可以被绕过的。例如:

http://test.com?cmd=pwd

假设cmd参数存在执行漏洞,输入参数会执行shell命令,由于shell命令的多变性,传参为:p'w'd p""w""d ""p'w'd""等等形式都是可以被执行成功的,所以无法写出一个完美匹配该漏洞的正则。其他的ls、ifconfig等命令也是如此。

二:审计能力不足

多数WAF即使可以保存日志,也只能保存请求头,基础的URL,对于 POST BODY、应答内容记录的也很少。

三:缺乏有效的基础业务防护能力

多数WAF产商认为,业务防护能力不属于WAF的职责。例如撞库、刷短信、薅羊毛等。虽然这是专业风控产品的领域,但我以为,WAF还是应该具备一些基础的业务防护能力。

我的理解

WAF就是一套对请求的IP、user-agent、cookie、url、url参数进行检测的服务,检测通过,则放行,检测不通过则阻断。检测手段是预先定义好的正则规则。

一般是搭建一台WAF服务器(大规模业务下,需要分布式架构),网站域名解析至该服务器,WAF检测通过后,再通过反向代理转发至业务服务器:

image-20190522140924215

但是因为WAF自身的局限性,防御方式机械不灵活,规则需要定期更新。无法面对多变和新兴的攻击手段。(腾讯云的WAF系统采用AI引擎,据介绍是可以通过自主学习,对0day攻击产生一定的防御效果的)

自建WAF系统

请移步:基于开源的 OpenResty + unixhot 自建WAF (还没写)

抗DDoS攻击

什么是DDoS攻击?

DDoS攻击粗略分类有两种流量型攻击CC攻击

流量型攻击

通过发送大量报文,侵占被攻击服务器的正常业务带宽,甚至堵住整个数据中心的出口,造成用户正常访问无法到达业务服务器。流量型攻击细分起来还有很多种,下面介绍几种典型的:

  • TCP SYN FLOOD:利用TCP的三次握手,重复大量的给服务器发送报文长度很大的 SYN 数据包,然后将 SYN 数据包的源地址伪造为一个不存在的地址,因为服务器一直收不到客户端反馈的 ACK 数据包,TCP连接将处于半开状态,直到 time-to-live 超时。以此达到占用大量TCP连接,增加被攻击服务器带宽,堵塞机房的目的。

    image-20190522150809916

  • UDP FLOOD:据说过时了,不想了解了

  • 反射型攻击:是指黑客伪造被攻击服务器的IP,向互联网上大量开放特定服务的服务器发起请求,接收到请求的那些主机根据源IP地址将响应数据返回给受害者。

    image-20190522151138805

CC攻击

主要是针对某些经过精心挑选的业务数据,激发大量消耗资源的数据库查询、文件IO等,导致被攻击服务器CPU、内存、或者IO出现瓶颈,无法提供正常服务。

如何防护?

DDoS防护的基本原理是替身攻击。及将业务域名指向云清洗机房,云清洗机房利用囤积的大量带宽进行流量清洗, 。

DDoS防护目前还没有开源解决方案(也不可能会有吧,毕竟需要大量的宽度进行流量清洗 囧)。不过市面上有许多的商用 DDoS 防护方案,例如 百度云加速(我看的这本书是百度安全专家写的~ 囧)

应用实时防护(RASP)

概述

随着Web应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。Gartner在2014年提出了应用自我保护技术(RASP)的概念,即将防护引擎嵌入到应用内部,不再依赖外部防护设备。

RASP以探针的形式,将保护引擎注入到应用服务中,可再文件、数据库、网络等多个层面,对应用进行保护。

因为它是注入到应用程序中的,所以相对于WAF,它能够结合请求上下文进行判断,并阻断攻击,具有低误报率,低漏报率的优点。

另外,RASP还可以监测服务器对数据库和文件系统的操作行为,对敏感文件的读取以及拖库行为的监测很有帮助。

与 WAF 相比

特性

a57a6de47b9031c1d923bf55d700505e

检测能力

f9616de940711a237397694018f81d0f

OpenRASP

官网

OpenRASP是百度对 RASP 技术的开源实现。目前 OpenRASP 已经有了针对PHP服务器的探针

除了PHP,OpenRASP还支持以下服务器:

image-20190522161608285

搭建RASP

请移步:基于 OpenRASP 实现 PHP 服务器的 RASP 系统(抽空实践了再写)

业务安全

概述

业务安全,也叫业务风控,反欺诈,是今年来非常热门的领域,从互联网金融到电商、O2O,只要和钱有关的业务,都会或多或少遇到类似下面的问题:

典型欺诈类型 描述
垃圾注册 大量垃圾用户
盗用账号 账号被盗
木马钓鱼 通过恶意程序网站骗取用户账号
恶意刷单 利用商家促销的业务漏洞,恶意刷单
恶意炒信 恶意炒作信用,欺骗用户
点击作弊 非法访问用户应用
失信名单 征信数据库
短信炸弹 非法访问用户应用发送巨量短信实施欺诈

API 网关 — Kong

github

Kong 是一款开源的 API 网关软件。它能够为 API 接口实现统一的认证、授权、限速、日志、安全监测等功能。

使用 API 网关,需要将域名指向网关,再由网关将请求转发至业务服务器。

未命名文件

插件

Kong 有丰富的插件功能,例如认证、授权、限速都是通过插件来实现的:

  • 认证相关:支持用户名密码认证、Key 认证、OpenId认证、OAuth认证等

  • 安全相关:包括ACL 控制、动态SSL、Bot 检测等

    Bot 检测原理上是针对常见 Bot 特征进行检测,例如:UA 字段、HTTP 的 header 字段等,普遍被用于防爬虫和 CC 攻击

  • 限速相关:有多种限速方式,包括基于速率、基于应答 header 内容、基于请求大小等

    针对 API 访问限速,可以有效抵御 CC 攻击

  • 日志相关:支持多种日志形式,包括 TCP、HTTP、文件以及 Syslog 等

搭建

请移步:搭建 API 网关 — Kong 的初体验(国际惯例,还没写)

风控系统

对风控系统的运作模式了解得还不是很清楚,大概就是利用能收集到的所有东西,例如请求信息、用户社交信息、用户历史行为、当前活动的上下文等等,对用户的活动作出风险评估。这一块待补充。

Nebula

github

星云风控系统是一套开源的风控系统,Mark 下。

代码审计

概述

代码审计就是通过对源代码的分析,找出可能引发 XSS、SQL注入、文件泄露、远程命令执行本地/远程文件包含 等等安全漏洞的地方,并给出修订措施和建议。

开源的代码审计工具不多,其中最著名的是 RIPS 和 VCG。

RIPS

请移步:初试 RIPS 实现 PHP 代码审计 (还没写哟)

VCG

请移步:初试 VCG 实现 PHP 代码审计 (也没写哟)

蜜罐与密网

概述

即布置作为诱饵的主机、网络服务,诱导黑客前来攻击,从而对黑客的攻击行为进行捕获和分析,了解黑客的攻击工具和方法,以作出应对手段,布置在真正的业务系统,加强安全防护能力。

数据库安全

概述

数据库中存储着大量重要的个人数据,主要面临的威胁来自以下几个方面:

  • 黑客通过 WEB 漏洞直接拖库
  • 内鬼盗取数据

应对措施

  • 数据库防火墙,用于阻断基于数据协议的攻击行为
  • 数据库审计,审计数据库的操作行为,发现针对数据库的入侵行为和违规操作
  • 数据运维平台,提供和给数据库管理员管理数据库的平台,是管理员无法直接接触数据库,记录管理员的操作日志,审计管理员的操作行为
  • 数据库脱敏,针对流出数据库的敏感数据进行脱敏处理
  • 数据库漏洞扫描,扫描数据库常见漏洞

开源数据库防火墙 — DBProxy

github

DBProxy 是一个基于 MySQL 的数据库中间层,转发来自 Web 服务器的数据库请求到后端数据库服务器,并且把数据库查询请求再转发给对应的 Web 服务器。

DBProxy 本身的功能是做数据库代理,透明的实现读写分析,主从负载,之所以我们也使用它作为数据库防火墙,主要是因为它有强大的 SQL 过滤功能。

未命名文件 (/img/posts/未命名文件 (1).png)

主要功能
  • 读写分离
  • 从库负载均衡
  • IP 过滤
  • 分表
  • DBA 可平滑上下学 DB (啥意思?待研究)
  • 自动摘除宕机的 DB
  • 监控信息完备
  • SQL 审计与过滤
搭建

请移步 使用 DBProxy 搭建数据库防火墙(虽然我也不知道会不会写)