网络安全准入对终端设备最开始和直接的就是强制其认证合法性。

原有基于HTTP重定向认证已失效,因为HTTP不安全。且浏览器都强制HSTS技术只能HTTPS。

怎么在HTTPS下还能重定向来认证?

住宿酒店和搭乘飞机时会对我们有所启发。接入提供的免费WIFI后会重定向。

结论就是诱使OS发出HTTP。

技术背景

网络准入产品可以验证终端设备是否安全,使用强制网络门户认证技术实现此验证

  1. 强制网络门户认证(captive portal),终端入网后,强制弹出浏览器的认证页面,强制用户认证后使用网络
  2. HSTS(HTTP Strict Transport Security), 防止MiTM中间人攻击,浏览器强制使用HTTPS与服务器创建连接,用户无法发出HTTP请求
  3. Captive Portal实现依赖于阶段性的HTTP劫持,当设备入网后,通过DHCP服务获取本机IP地址和网关地址后,发出的HTTP请求被劫持后返回重定向到指定的HTTP认证页面

存在问题

  1. 用户终端入网后先用浏览器手动访问HTTPS网站时,返回给终端浏览器的重定向响应,由于浏览器验证服务器证书不匹配会警告,无法实施强制认证,使此技术方案失效。如图
  2. 用户终端网络在线时,由管控服务端实施准入策略,在未认证前断网,直到浏览器发出HTTP后被准入服务重定向后去认证。由于浏览器预制的HSTS域名缓存或服务端支持HSTS技术,HTTP被浏览器强制转换为HTTPS,致使浏览器验证服务器证书不匹配会警告,使此技术方案失效
  3. 原有准入系统实施基于浏览器http重定向的认证功能,在https下失效,报错证书不匹配,无法实施强制认证,使此技术方案失效。

可以利用OS的一个机制

操作系统:Windows/Linux/MacOS/Android/iOS下 刚入网时回探测是否需要认证,先探测有强制门户,再做认证

  1. 终端操作系统入网后探测是否处于认证网关之下,多次尝试连接指定的HTTP的url,最长超时 30 秒
  2. 如果指定服务返回了204状态码,即未发现强制门户,不需要验证
  3. 如果指定服务返回HTTP重定向认证,即强制门户认证,认证后网络放行

图1 OS发出探测

图2 OS收到无强制门户的204状态

以下是部分固定的探测强制门户的url

Windows :http://www.msftconnecttest.com/connecttest.txt
Google:http://www.gstatic.com/generate_204 / , ...
Android:https://www.google.com/generate_204,...
小米: http://connect.rom.miui.com/generate_204
华为: http://connectivitycheck.platform.hicloud.com/generate_204

如何利用OS的这个机制

在交换机或浏览器上处理,诱发OS发出强制门户认证探测

两种方案各有优劣,也可同时使用

  • 交换机方案依赖交换机的控制,普通服务没有控制交换机的权限
  • 浏览器方案依赖用户先打开浏览器

图3 HTTPS重定向的网络拓扑

基于交换机的技术方案

  1. 准入服务控制交换机对终端断网后再开网
  2. 终端重新入网诱发其探测强制门户
  3. Windows尝试强制认证,访问http://www.msftconnecttest.com/connecttest.txt
  4. 终端桌面上托盘中的网络图标闪烁,提示用户点击图标,会打开浏览器并跳入认证页面
  5. 准入服务流量截获HTTP请求并重定向到认证页面
终端               交换机        强制门户          准入服务|<---断网后再开网----|             ||                   |             ||-------------探测强制门户-------->|----捕获HTTP---->||                   |             |                 ||<------------发送模仿强制门户的重定向认证------------|

表1 基于交换机的HTTPS重定向

交换机实施控制技术

  1. 与终端直连的交换机将终端地址通过snmp trap上报准入服务
  2. 准入服务给指定终端断网再入网snmpset [up / down]

基于浏览器证书的技术方案

客户端浏览器 网络通讯 服务器(流量镜像)

  1. 浏览器发起请求,例如https://www.wechat.cn
  2. 准入服务识别HTTPS请求,生成自签名的ssl证书(可缓存证书重复利用),返回给终端浏览器
  3. 准入服务判断证书,包含公钥,颁发者 返回证书给终端浏览器
  4. 终端浏览器判定证书字段有误,终止后面数据传输的流程。进入门户认证流程,
  5. 发起http请求,寻找门户http://www.msftconnecttest.com/connecttest.txt
  6. 准入服务识别请求,修改门户地址,返回给终端浏览器
  7. 终端浏览器打开新tab页跳转到指定网址
终端               交换机        强制门户          准入服务|-----------HTTPS浏览网页时SSL握手验证证书---------->||<----------------发送自签名的ssl证书----------------||---------判定证书字段有误,进入门户认证流程--------->||                   |             ||-------------探测强制门户-------->|----捕获HTTP---->||                   |             |                ||<------------发送模仿强制门户的重定向认证------------|

表2 基于浏览器证书重定向

实现特点

  1. 解决了现有产品在HTTPS下强制门户认证的失效问题
  2. 高性能,同时大并发量下对HTTPS强制门户认证。基于BPF实现
  3. 绕过HSTS对HTTPS强制使用,实现HTTPS时也能实施强制门户认证
  4. 基于强制门户发出的HTTP探测,还能用于其他安全业务

代码目录结构1

bpf/ 驱动lib/ 协议库api.h  公用依赖头eth.h  以太帧处理ipv4.h ip帧处理tcp.h  tcp帧处理http.h http处理dhcp.h dhcp收集终端信息os_filter.h  过滤osmetrics.h  系统性能linux/ 内核类型test/ 单元测试bpf.c 驱动
Makefile   构建
main.go    加载入口
program.go 加载器
maps.go    内核与用户态传参字典
npf.go     驱动上报
npf_bpfel.go  自动生成加载驱动
snmp.go    snmp下启停端口
tracer.go  traceroute查找终端机器直连的交换机

驱动流程

从2层到5层,eth->ip4->tcp->http

  1. 网络入口 xdp_npf_prog(struct xdp_md* ctx)
  2. struct pkthdr pkt{data_cursor, data_begin, data_end}数据帧封装
  3. 过滤http及重定向
    1. config verify 读取配置,交换机ip等
    2. eth parse and verify, 只留IP包
    3. ipv4 parse and verify, host pkt pass
    4. tcp parse and verify
      1. tcp options filter, find and save token to hashmap
    5. os filter
    6. http parse and filter os
    7. lookup hashmap of token
    8. http parse and verify
    9. redirect http 本机debug时关闭

加载流程 program.go npf_bpfel.go

  1. cfg := LoadConfig("config") 加载本地配置
  2. npf := NewNpf(cfg) => npf.go 驱动加载
  3. loadNpfObjects(&bpf) => npf_bpfel.go 初始化
  4. LoadProg(bpf.npfPrograms.XdpNpfProg.FD()) => program.go 加载
    1. GetIface(linkname) 获取网卡interface
    2. AttachProg()将启动挂载到网卡interface
  5. perf.NewReader(PKT_INFO_EVENTS_MAP) 挂载事件
  6. npf.SetKernelConfig() 构造配置下传
  7. redirectUrlLinux 重定向地址
  8. ipHost 本机地址
  9. macHost 交换机mac
  10. npf.Listen() 监听事件
    1. HandleRecord() 解析打印事件

https重定向流程 snmp.go tracer.go

  1. snmpscan() 主入口

    1. NewSnmp(p)
    2. Connect()
    3. QueryIfaces() 获取所有端口
    4. DownUpIface 关接口
    5. UpIface 开接口
  2. Trace() 主入口
    1. DefaultTracer 构建可配置的tracer

      1. Trace()

        1. ping
        2. Receive
      2. touch,记录每一跳
      3. Add,判断符合RTT或srcIP后添加
    2. hops,反向过滤所有跳,匹配上过滤

1

RedirectHTTPS

HTTPS下强制重定向认证相关推荐

  1. asp.net core中负载均衡场景下http重定向https的问题

    上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法. app.UseForwardedHeaders(new ...

  2. 微服务架构下的安全认证与鉴权

    微服务架构下的安全认证与鉴权 转载自:https://mp.weixin.qq.com/s/qBJ_257IWn3cctqmKfJ7FQ 作者:王海龙,来自:EAWorld 现任普元云计算架构师,毕业 ...

  3. 微服务架构下的身份认证

    从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验.为了适应架构的变化.需求的变化,身份认证与鉴权方案也在不断的变革.面对数十个甚至上百个微服务之间的调用,如何保证高效安全的 ...

  4. T1187 强制 NTLM 认证

    在上一篇文章 一文理解 Windows 身份验证原理 介绍了什么是 NTLM 以及一些利用 NTLM 进行更一步获取权限的方式,其中就有 NTLM 中继. Net-NTLM hash 破解.但实现这些 ...

  5. Win2008 r2 iis7/iis7.5系统下HTTP重定向(301重定向)图文方法

    这篇文章主要介绍了Win2008 r2 iis7/iis7.5系统下HTTP重定向(301重定向)图文方法,需要的朋友可以参考下 首先了解一下重定向,常用的重定向方式有: 301 redirect, ...

  6. Linux下Shell重定向

    1. 标准输入,标准输出与标准错误输出 Linux下系统打开3个文件,标准输入,标准输出,标准错误输出. 标准输入:从键盘输入数据,即从键盘读入数据. 标准输出:把数据输出到终端上. 标准错误输出:把 ...

  7. Nginx下301重定向不带www的域名到带www的域名

    Nginx下301重定向不带www的域名到带www的域名 {listen 80;server_name example.com;return 301 http://www.example.com$re ...

  8. Android下强制打开键盘

    上次因为工作需求写了这个: Android下强制打开软键盘 今天发现了一个更加好的办法: 如下: InputMethodManager mInputMethodManager = ((InputMet ...

  9. SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理

    SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理 参考文章: (1)SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理 (2)http ...

最新文章

  1. linux pcre-devel,ubuntu - 我应该为'pcre-devel'安装什么软件包? - Ubuntu问答
  2. 64位游戏找call_《使命召唤16:战区》配置注册登录全攻略,三步让你极迅游戏!...
  3. Android画图学习总结(四)——Animation(上)
  4. Transformers资料汇总!从原理到应用
  5. VTK:vtkCursor3D用法实战
  6. OpenCV透视变换应用于图像的实例(附完整源代码)
  7. POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)
  8. java swing 字体设置_java如何改变Swing应用程序的默认字体/字号
  9. 第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)
  10. DataGrid添加滚动条
  11. 传奇源码分析-客户端(WindHorn简述和传奇文件格式分析)
  12. 运用spss modeler运用支持向量机_使用支持向量回归进行Facebook股票预测
  13. 安排,Java智慧农业物联网项目视频2020
  14. Hyperscan中的 NFA模型演化
  15. gcc cross compiler 问题
  16. 电影影视网站对接微信公众号 日引流500+的实例教学
  17. jupyter notebook 实用快捷键大全
  18. HTML-CSS_Day_1:CSS要点补充说明、项目演练
  19. 6代之后的CPU安装win7的方法
  20. WinCE 流驱动一步一步来(理论基础)

热门文章

  1. Java——System.getProperty几个参数汇总
  2. 2014年中国开源软件前100名
  3. layout_marginRight不起作用
  4. 立创eda学习笔记:铺铜死区?孤岛?死铜?
  5. Android设置顶部banner背景透明度时影响全局背景问题
  6. unity键盘手柄控制
  7. 省市县(区) 地区SQL
  8. 基于阿里云IoT平台和HAAS210云模组的OTA
  9. 安全点、安全区域、记忆集、卡表与写屏障
  10. 神经网络可以用来预测吗,神经网络预测的局限性