论文阅读 - Fashion Faux Pas: Implicit Stylistic Fingerprints for Bypassing Browsers’ Anti-Fingerprinting Defenses

本文是我在《Web 追踪前沿》上论文阅读作业之一。Fashion Faux Pas: 绕过浏览器反指纹防御的隐性风格指纹。文章主要探索如何在不使用 JavaScript 的情况下生成浏览器指纹,以绕过现有浏览器的反指纹防御措施。核心在于利用不同环境对 HTML 元素渲染的差异性和 CSS 的媒体查询特性构造探针 HTML 元素,再配合 iframe 获取元素尺寸,从而反推出用户环境信息,据此提出了风格指纹的(Stylistic Fingerprints)概念。实验表明该方法在多款隐私导向型浏览器上均有效,与 FingerprintJS 的识别能力相当,且优于现有的 CSS 风格指纹。文章发表在 IEEE S&P 2023,作者来自伊利诺伊大学芝加哥分校和 IBM 公司。
阅读更多

论文阅读 - CASIE: Extracting Cybersecurity Event Information from Text

本文是我在《自然语言处理》课程上完成的论文阅读作业之一。CASIE聚焦于网络安全文本领域的命名实体识别和事件抽取,针对网络安全领域的关注点,对事件和类别做了针对性的特征工程。采用 BIO 标注体系,Bi-LSTM + Attention 作为基础模型,并对比了多种 Embedding 模型对效果的影响,具备很高的实用价值。作者来自马里兰大学,文章发表在 AAAI 2020。
阅读更多

论文阅读 - Toolformer: Language Models Can Teach Themselves to Use Tools

本文是我在《自然语言处理》课程上完成的论文阅读作业之一。Toolformer 聚焦于提升 LLM 通过 API 调用外部工具的能力,提出了 Toolformer。通过对 API 文档和示例的自监督学习,模型可以在问题中有效地决定何时调用、调用何种工具、传入的参数、最优的结果。作者来自 Meta 公司和 Universitat Pompeu Fabra,发表在 NIPS 2023。
阅读更多

Docker 常识查漏补缺

Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台。其解决了环境差异、依赖关系管理和部署一致性等问题,已经成为极为流行的技术。云原生技术的兴起,进一步强调了它的重要性。笔者没有系统的学习过Docker,但日常却完全离不开Docker。在近期的几个项目中,发现了自己在这方面的诸多薄弱点,故回顾如下。重点介绍了PID和Namespace的概念及其在Docker中的应用,进一步分析了Cgroups的作用,以及如何在宿主机的htop中排除Docker容器进程。接着,讨论了Docker的网络代理问题,包括Docker pull、容器内代理和构建时的代理配置等问题。
阅读更多

Nginx以HTTP反向代理HTTPS的Exchange邮件服务

笔者使用Nginx反向代理时,上游服务**强制启用**了HTTPS访问,但我们的需求是以HTTP统一对外提供服务。本文介绍了如何通过Nginx反向代理实现HTTP服务,来处理强制启用HTTPS的上游邮件服务(如Exchange邮件服务)。在反向代理过程中,主要面临两个问题:上游服务通过302重定向到HTTPS,以及Set-Cookie响应头中的secure属性。为了解决这些问题,作者查阅了Nginx官方文档并发现,从Nginx 1.19.3版本起,proxy_cookie_flags指令可以移除secure属性并添加samesite属性,避免浏览器拒绝cookie。文中还介绍了如何通过编译安装更新版本的Nginx,并配置相关模块来支持这一功能。通过调整Nginx的站点配置文件,成功实现了HTTPS到HTTP的反向代理,解决了与cookie和重定向相关的问题。
阅读更多

FRP 0.38.0 流量加密分析

FRP是一款开源的轻量级**反向代理**工具,可快速、稳定地代理NAT或者防火墙后面的服务,应用较为广泛。其使用Go语言编写,具备很好的跨平台特性。由于网络上几乎没有分析frp协议及其加密机制的文章,而且frp每个版本的加密逻辑还不一样(例如0.38.0与0.52.0),笔者跟了一遍源码,简单记下这篇文章,供相关从业者参考。
阅读更多

蓝牙键盘流量包分析和还原

蓝牙键盘的按键还原与普通USB键盘有些许区别,但是在网上只找到了一个很好用的USB键盘流量包解析脚本,没有找到蓝牙键盘的。随后稍微研究了一下,加入蓝牙键盘解析的支持。
阅读更多

校园网SLAAC环境下IPv6的桥接与中继

本文讨论了在校园网SLAAC环境下,如何实现IPv6的桥接与中继。起初,笔者误以为校园网的路由器会自动通过DHCPv6桥接,为内网设备分配全球IPv6地址,但实际发现该环境使用了无Prefix Delegation(PD)的SLAAC配置。文章首先介绍了IPv6的基本概念,包括SLAAC、NDP(邻居发现协议)和PD(前缀委派)。接着,分析了在这种环境中遇到的问题,并提供了两种解决方案:一种是基于OpenWrt的中继方法,另一种是通过iptables实现的桥接方式。此外,还介绍了基于桥接的中继方法和Cisco交换机上使用ACL(访问控制列表)实现的端口桥接方案,包括L2和L3 ACL配置,以允许ICMPv6报文通过并屏蔽IPv4报文。通过这些方案,笔者成功解决了在SLAAC环境下的IPv6桥接与中继问题。
阅读更多

Wireguard 解决 DDNS 环境下 Peer 域名动态变化问题

本文记录了在使用Wireguard组网时,遇到的Peer域名动态变化问题,尤其是在使用动态域名解析(DDNS)时。Wireguard默认不会自动连接到更新后的IP地址,除非重启隧道。为解决这一问题,提出了两种解决方案:一是定时检测域名解析变化,并在变化时重启隧道;二是探测各个Peer的联通性,若某个Peer无法连接,则重建连接。作者选择了第一种方法,并编写了一个简单的脚本来实现定时检测和自动重启隧道。该方案已在OpenWrt系统上成功测试,其他Linux发行版也可类似配置。
阅读更多

记一次Python线程安全问题的排查

本文记录了笔者在使用Python Celery框架实现ERP自动化流程时,遇到的线程安全问题及其排查过程。Celery框架作为一个分布式任务队列,支持异步操作和定时任务,但在多线程环境下存在全局变量共享问题。某次客户反馈订单ID标注错乱,经过排查,发现是多个线程共享全局变量导致的冲突。在Python中,全局变量存储在特殊的全局命名空间中,多个线程可以访问和修改这些变量,从而引发线程安全问题。本文回顾了问题的定位过程,并总结了在多线程编程中避免全局变量共享的最佳实践。
阅读更多