4 12

代理蜜罐的开发与应用实战

代理蜜罐概述

蜜罐与代理蜜罐

蜜罐的概念

蜜罐是一种对攻击者进行欺骗的技术,吸引恶意攻击者的任何对象,包括系统、各种服务等,可以及时发现攻击者,并对攻击者的行为进行分析。蜜罐可以分为低交互、高交互、蜜表等种类。

  • 低交互式蜜罐只允许简单的交互连接,一般部署在内网,只要有人触碰就会向安全团队报警
  • 高交互式蜜罐允许攻击者入侵成功并取得系统权限,可以记录攻击者的一举一动,但可能会带来额外的风险,被攻击者作为跳板进一步攻击其他重要系统
  • 蜜表是一种伪造的敏感数据,如数据库表、登录密码文件等,普通用户无法获取到,攻击者在获取时会引发报警

代理蜜罐的概念

  • 代理蜜罐本身是一种代理,但是这个代理添加了使用者信息记录的功能,比如来源IP,访问的URL,请求参数与响应数据等。
  • 代理蜜罐可以是sock代理,也可以是http代理,部署在外网,供黑产、黄牛、爬虫党扫描到并加入到他们的代理池中使用的

VPN蜜罐

可以记录用户的数据vpn就是vpn蜜罐,可以参考以下文章:

Is NordVPN a Honeypot?

数据是新时代的石油,如何采集大量网民的上网数据?做一个 VPN 软件,然后让很多人用,从此开启上帝视角。
本文扒皮了NordVPN,一个月内花 $50 万投放电视广告,背后大金主是一家数据分析公司,数据分析结果会卖给出价最高的公司。

我们的代理蜜罐也可以与iptables结合改为VPN蜜罐,具体方法可以参考我之前写过的文章,基于vpn和透明代理的web漏洞扫描器的实现思路及demo,但向黑产推行我们的VPN蜜罐时成本和难度比较高,本文暂时不讨论。

代理蜜罐架构

  • 代理蜜罐Agent,提供代理服务,收集http请求与响应数据并发送到server集群
  • 代理蜜罐Server(支持水平扩展),接收Agent传来的数据,对数据简单判断后入库
  • 后端数据库(mongodb),存储代理蜜罐的数据
  • 数据分析程序,对存数的数据进行加工处理,方便管理端展示
  • 管理端,查看收集到的数据与数据分析结果
1 3

Exchange邮箱安全代理系统开发

概述

邮箱是企业的基础设施,大量的沟通是通过邮件完成的,邮件内容里面承载了非常多的商业敏感信息与机密,员工邮箱账户因社工库、撞库、弱口令、github等途径泄露出去的后果不言而喻。

许多企业的安全工程师可能会从邮箱的账户策略和ACL来保护员工邮箱账户的安全,如强制要求设置强壮的密码、定期修改密码、邮箱服务器仅对内网开放,外网访问需要拨入VPN等。

但这些手段存在以下弊端:

  1. 什么样的口令算安全的,如果正好是被社工库收录的复杂口令,是完全符合密码策略的
  2. 定期修改口令,可能会改回一个已经泄露的复杂的口令
  3. 强壮的口令也可能会通过github、网盘等途径泄露出去
  4. 邮箱放在内网,外网只能通过VPN访问,虽然杜绝了来自外网的攻击,但是员工在外出办公时非常不便

本文要开发的邮件安全代理系统可以兼顾安全性与用户体验。

项目地址:https://github.com/MiSecurity/exchange_proxy

邮箱安全代理架构与功能说明

本次开发的邮件安全代理只适用于Exchange邮件服务器,架构如下:

通过邮件安全代理将内网的邮件服务器集群的443端口发布到外网,Exchange支持OWA、EWS、ActiveSync、RPC协议,是支持通过WEB端、手机端与电脑客户端连接的。 但这样仅是将邮箱服务器的https服务代理出去了,对于账户泄露还是没有任何的防御措施,接下来我们需要给加上二次确认机制。

  • 对于WEB端访问,要求用户除了用户名与密码外,还得输入OTP动态口令
  • 对于手机端,新设备第一次访问时,需要通过短信发送的URL进行设备绑定,只有用户激活过的设备才可以收发邮件,如果收到陌生的设备的激活短信说明账户泄露了
  • 对于电脑端,每次在外网连接时,需要用户通过短信确认自己的出口IP与客户端类型,只有授权后才可以收发邮件
11 27

用go语言给lua写扩展

背景

最近的一个lua项目中需要解析wbxml,WBXML是XML的二进制表示形式,Exchange与手机端之间的通讯采用的就是该协议,我需要解析到手机端提交过来的数据,以提高用户体验。

但是lua没有现成的Wbxml解析库,从头撸一个势必要花费大量造轮子的时间,在网上查找了半天,发现有一个go语言版本的https://github.com/magicmonty/activesync-go,写了几行测试代码,确认该库可以正常解析出Exchange的wbxml数据内容,如下所示:

微服务 VS lua 扩展

最初的方案打算用golang实现一个微服务,供openresty调用,该方案的特点是方便,能快速实现,但缺点也是非常明显的:

  • 性能损耗大:openresty每接收到一个请求都需要调用golang的restful api,然后等待golang把wbxml解析完并返回,这中间有非常大的性能损耗
  • 增加运维成本:golang微服务奔溃后,openresty将无法拿到想到的信息了,在运维时,除了要关注openresty本身外,还要时刻关注golang微服务的业务连续性、性能等指标

最佳的方案是提供一个lua的扩展,无缝集成到openresty中,这样可以完美地规避掉上述2个缺点。

9 21

跨平台的安全检测工具包

概述

xsec-checker是一款服务器安全检测的辅助工具,由GO语言开发,天生支持跨平台,同一份代码可以交叉编译出linux与windows平台下的可执行文件,且无任何库的依赖。

关于跨平台说点题外话,笔者工作前7,8年一直在游戏行业,从安全、运维及开发都有涉猎,记得移动互联网兴起时,许多手机游戏都是先只支持iphone平台,后来才慢慢支持Android平台的,原因是同一款游戏的客户端,需要2个团队,一个team用objective-c开发iphone版的,另一个team用java再重写一版android平台的,到了后期的维护成本及复杂度可想而知。

当时国内最流行的手游开发框架是cocos2d-iphone,是objective-c实现的,后来王哲推出了c++版本的cocos2d-x,只写一套c++版本的代码就可以交叉编译出多种平台的客户端,极大地提高了手机游戏开发的效率。

但业内马上又出现了新的难题,因C++语言难以驾驭,靠谱的C++非常不好招而且人员成本很高,后来cocos2d-x又推出了lua与js的绑定版本,这样的话,在一个研发Team中,只需极少的C++大神就可以搭建好底层框架,具体的业务与逻辑代码,能快速上手lua与js的新手就可以做了,甚至连策划都可以上手,直接写游戏逻辑代码验证自己的设计了,减少沟通与在验证玩法时反反复复让研发修改代码的成本。

目前安全界流行使用python,笔者建议在有高性能要求、跨平台部署、无外部依赖、部署方便、源码加密等要求的场景下使用go语言,go同python一样,也是种全栈的语言。

目前实现的功能如下所示:

项目地址:https://github.com/netxfly/sec_check

pager.next