1.冬训营丨高级威胁活动中C2的洋葱源码洋葱多样风格
2.Golang-gin框架中间件原理
3.七爪源码:C# 中的扩展方法
4.Koa 洋葱模型
5.koa2快速入坑指南
6.Koa洋葱模型 从理解到实现
冬训营丨高级威胁活动中C2的多样风格
C2是什么?它是指APT组织掌握的基础设施,即IP、小程序域名、洋葱源码洋葱URL。小程序作为动词,洋葱源码洋葱C2意味着命令与控制(Command and Control),小程序cookies源码共享APT组织基于各种网络基础设施,洋葱源码洋葱如广域网/公网、小程序局域网/内网、洋葱源码洋葱Tor洋葱路由、小程序卫星等,洋葱源码洋葱对已成功入侵的小程序目标进行控制、指令下发、洋葱源码洋葱资源下发和数据回传。小程序 在命令与控制过程中,洋葱源码洋葱APT组织通过OODA循环展开网空杀伤链,C2属于控制阶段。攻击方需要隐蔽自身行为和通信通道,即使被发现也难以定位真实的C2基础设施,甚至定位到基础设施也无法溯源到攻击方。攻击方为达成效果,使用了多种技术手段,包括Payload、信道、协议、报文、基础设施和C2节点。以下将从基础设施角度,探讨C2的多样风格。 案例一:APT组织入侵网站作为C2 年,安天发布报告指出,攻击者利用BBS漏洞入侵网站,上传Webshell和其他组件作为C2。飞毛腿网站源码Webshell作为跳板机,实现邮件发送、信息接收和恶意载荷下载。通过分析发现,攻击者可能使用自研Webshell,能够获取网站服务器信息。Webshell采用加密手段进行保护,但无法直接作为检测指标。 案例二:APT组织利用DDR作为C2 DDR是一种间谍活动策略,用于在未见面的情况下进行信息传递。越来越多APT组织将其用于合法Web服务作为C2,方便创建和测试环境,且加密报文难以直接封禁,对安全产品构成挑战。 案例三:利用入侵的IoT设备作为C2 海莲花组织自年开始使用IoT设备转发流量,隐藏真实C2地址,通过设备取证可获取真实C2节点。 案例四:美国CIA自建C2基础设施控制平台蜂巢 年,维基解密公开了CIA使用的Hive源代码和开发日志,Hive是用于控制恶意软件基础设施的组件,通过可选身份验证隐藏C2节点。 案例五:使用可移动设备作为C2 APT组织在隔离网络中使用可移动设备作为C2,如在SolarWinds供应链攻击中,APT组织利用基于Cobalt Strike的SMB管道作为内网C2。 案例六:基于域名前置的隐蔽通道作为C2 APT组织使用域名前置隐蔽通道和Tor洋葱路由隐藏C2节点。 案例七:图拉组织利用卫星通信作为C2 图拉组织通过中东和非洲国家的卫星网络进行通信,很难追踪到具体位置。他们可能通过BGP劫持卫星通信协议作为C2信道。 案例八:利用其他组织的C2作为C2 年,图拉组织劫持伊朗APT组织的网络基础设施作为恶意软件下载服务器,将恶意软件植入目标网络。 结合案例,java便签源码高级威胁活动中C2的多样风格得到抽象化总结。从威胁框架整体看,C2问题已不仅仅是单一维度。通过深入挖掘流量中的协议和文件格式,提升ATT&CK威胁框架的覆盖度。在定位、观察和情报层面形成闭环,针对C2的多样化情况进行猎杀与捕获。Golang-gin框架中间件原理
什么是中间件
中间件是一个广泛的概念,其含义在不同领域有所不同。在bs/cs软件编程框架中,中间件可以理解为用于解耦业务和非业务代码的钩子函数,这些函数适用于所有或部分请求。
中间件的原理与钩子函数类似。在框架层面,程序运行到某个阶段会自动执行预设的函数,执行完毕后再回到跳出的那个阶段继续执行原函数。
在bs/cs开发中,为了在主体函数前后执行一些通用操作,常见的写法会预设一些钩子,如beforeXxxFunc、afterXxxFunc。但这只有两个函数,且是针对全局请求的。若要实现部分钩子函数针对某些请求,则需要做额外的业务外操作以达到目的。gin框架的中间件就解决了这些痛点。
中间件原理
原理1:每一条请求都处理自己所挂载的所有中间件和唯一主体函数。
普通的钩子函数如图所示:
优点:解耦了业务和非业务代码,非业务代码实现了统一封装使用。
缺点:若想针对某些主体函数不执行或执行其他beforeFunction,需要额外修改框架逻辑。小人指标 源码
gin框架中间件如图:
优点:
原理2:洋葱模型。
洋葱模型,如图所示:
beforeFunc1和afterFunc1即是中间件1;afterFunc2和afterFunc2即是中间件2。
请求到来时从最外层开始执行中间件1,然后进入第二层,依次执行完所有中间件最后到达主体函数,接着再一层层往外走再次执行中间件2...中间件1...最后返回,有点像栈的概念。
gin中中间件的实现步骤1
首先,gin把中间件和主体函数统一定义为一个handleFunc。
源码:gin.go
不管是用use()方法注册中间件,还是用restful注册主体函数,类型都是HandlerFunc。
源码:routergroup.go
步骤2
把所有handleFunc装入一个数组或叫handleChain的东西。
步骤3
从handleChain的第一个元素开始执行,中间使用c.next、c.Abort等函数进行流程控制。
手动实现一个简单版本的中间件
运行结果:
七爪源码:C# 中的扩展方法
扩展方法在C#中允许将方法“添加”到现有类型,无需创建新的派生类型或修改原始类型。扩展方法实质上是静态方法,但其调用方式如同实例方法,这在C#、F#和Visual Basic的客户端代码中没有明显区别。常见的扩展方法包括向System.Collections.IEnumerable和System.Collections.Generic.IEnumerable添加查询功能的LINQ标准查询运算符。
例如,使用System.Linq指令将标准查询运算符引入范围后,可以对整数数组调用OrderBy方法进行排序。扩展方法定义为静态方法,使用实例方法语法调用,第一个参数指定方法操作的类型,并带有this修饰符。扩展方法的web 计时源码范围取决于是否使用using指令显式导入命名空间。
以下示例展示了为System.String类定义的扩展方法,WordCount方法,定义在非嵌套、非泛型的静态类中。使用using指令即可进入范围并调用该方法。调用扩展方法时使用实例方法语法,编译器将生成中间语言(IL)以对静态方法进行调用。
扩展方法允许在代码中调用,MyExtensions类和WordCount方法都是静态的,可以通过其他静态成员访问。WordCount方法可以像其他静态方法一样被调用。
扩展方法的调用在编译时进行。当编译器遇到方法调用时,首先在类型的实例方法中查找匹配项,如果没有找到,则搜索该类型定义的任何扩展方法,并绑定到第一个找到的扩展方法。如果一个类型有一个名为Process(int i)的方法,并且有一个具有相同签名的扩展方法,则编译器将始终绑定到实例方法。
使用扩展方法的常见模式包括:
1. 收集功能:过去,为给定类型创建实现System.Collections.Generic.IEnumerable接口并包含该类型集合功能的“集合类”是常见的做法。然而,通过使用System.Collections.Generic.IEnumerable上的扩展,可以实现相同功能,提供从任何集合调用功能的灵活性,如System.Array或System.Collections.Generic.List上的实现。
2. 特定层的功能:在使用洋葱架构或其他分层应用程序设计时,域实体或数据传输对象通常不包含功能或仅包含适用于所有层的最小功能。扩展方法可用于为每个应用程序层添加特定功能,无需引入其他层不需要或不需要的方法。
Koa 洋葱模型
Koa 是一个轻量级的 web 框架,由 Express 的团队打造,旨在简化 web 应用与 API 开发。它利用 async 函数改进错误处理,没有固定中间件,而是提供便利方法构建服务端应用。
“洋葱模型”概念,通过一个简单的实例展示。输入 localhost:,控制台显示结果,中间件的执行顺序体现。Koa 中间件通过 next 函数分割,上半部分先执行,下半部分在后续中间件调用后执行。
实现洋葱模型的核心在于函数调用方法,自顶向下嵌套函数,形成类似结构。借助 JavaScript 事件循环机制,先执行同步代码,异步代码入队等待。调用父函数时,按序执行嵌套函数。
简版实现步骤:从第一个函数开始,依次将下个函数作为参数传入。这样,自底向上递归调用,最终只执行一次 next(),实现中间件链式调用。
Koa 洋葱模型的源码展示了核心逻辑,包括两关键点。另一种实现方式是逆序封装中间件,每次都将当前执行函数作为 next 参数传给前一个中间件,最终顺序执行所有中间件。
koa2快速入坑指南
在最近一个项目的推动下,我对koa2框架有了初步的了解。为了让小伙伴们能够更好地入门,我整理了这篇指南。为何选择入坑koa2?让我们先从Node.js技术栈Web服务框架的发展谈起。
在过去,没有现成的轮子,Node.js提供了一些基本的HTTP服务能力,开发者需要自己实现高级功能和用法。
随着需求的增长,人们开始寻找能够降低开发成本、提升效率的框架。Express作为最流行的框架之一,后来又出现了koa和koa2等。Express的开发者TJ Holowaychuk,同时也是Koa和Co等知名开源项目的创建者和贡献者,拥有极高的社区影响力。
TJ的成就不仅限于技术,他的贡献包括在nodejsmodules.org的高频率出现,对整个社区的代码贡献占到了3.%。他的多才多艺和对开源的热情,激励着整个开发者社区。
Express诞生于早期,提供了全面的Web服务功能,包括路由、表单解析等。然而,随着时间的推移,Express的架构逐渐显得庞大而复杂,特别是其基于回调的中间件模型,逐渐出现了回调地狱的问题。这促使TJ再次革新,设计出了Koa。
Koa从一开始便选择了与Express完全不同的架构方向。它注重模块化,将功能分拆,提供简洁、高效的API。Koa的核心在于其上下文对象,它集中管理request和response,使得开发者能够更灵活地处理流程和数据。此外,Koa的中间件机制是其最大的亮点,它提供了类似洋葱模型的执行流程,使得应用的控制逻辑更加清晰。
随着Koa的不断发展,它逐渐演进到了Koa2版本。Koa2引入了函数式编程和ES7的async/await特性,成为了最佳的Web开发框架之一。它提供了轻量级的API,通过四个主要文件和大约行代码,实现了强大的功能。Koa2的源码简洁明了,易于理解和维护。
Koa2的中间件机制使得应用能够以更高效的方式组织逻辑,开发者可以轻松地注册和管理中间件,实现复杂的应用逻辑。路由、静态资源服务、SSR(服务器端渲染)等功能,通过引入额外的模块,都能在Koa2中实现,大大提高了开发效率。
随着时间的推移,Koa2的生态系统逐渐完善,各大企业也基于Koa2开发了面向工程和业务实践的框架,如egg.js。这些框架不仅提供了更高级的功能,也更好地支持了开发者在实际项目中的需求。
在总结中,koa2是一个功能强大、简洁高效的Web开发框架。它通过引入函数式编程和async/await特性,提供了现代化的开发体验。无论是对于初学者还是经验丰富的开发者,koa2都是值得深入学习和应用的框架。通过理解其核心机制和使用场景,你将能够更高效地构建Web应用。
Koa洋葱模型 从理解到实现
当使用Koa框架时,Middleware(中间件)的概念想必大家已不陌生。让我们从实例出发,通过自定义两个中间件——logTime用于打印时间戳,logUrl负责打印路由——来探索Koa的洋葱模型。 在index.js中,我们按顺序使用这两个中间件。启动服务并访问路由如/test,你会观察到两个现象:首先,你可能会疑惑:Koa的设计为何不按顺序从头到尾执行中间件?
其次,当中间件存在依赖关系时,如何确保前面的中间件能利用后续中间件的操作结果?比如,logUrl可能处理了url并添加了时间戳,logTime需要获取并打印这个时间戳。
这些现象揭示了Koa洋葱模型的设计原理:中间件的执行顺序是关键。外层(上游)中间件先执行,处理完后通过next函数传递控制权给内层(下游)中间件。这样可以确保每个中间件在适当的时机获取和操作数据,避免了单次链式调用时的依赖问题。 通过源码分析,我们发现Koa的实现依赖于`koa-compose`库,它负责管理中间件的执行流程。我们需要对中间件数组进行包装,以便在调用next时传递必要的上下文信息。通过`bind`方法,我们得以保留和传递必要的参数,实现洋葱模型的逻辑。 总结来说,我们从现象出发,通过实例和源码理解了Koa洋葱模型的必要性和工作方式。通过自定义实现,我们加深了对这一模型的理解。多图详解万星Restful框架原理与实现
rest框架概览
我们先通过go-zero自带的命令行工具goctl来生成一个apiservice,其main函数如下:
funcmain(){ flag.Parse()varcconfig.Configconf.MustLoad(*configFile,&c)ctx:=svc.NewServiceContext(c)server:=rest.MustNewServer(c.RestConf)deferserver.Stop()handler.RegisterHandlers(server,ctx)fmt.Printf("Startingserverat%s:%d...\n",c.Host,c.Port)server.Start()}解析配置文件
将配置文件传入,初始化serviceContext
初始化restserver
将context注入server中:
注册路由
将context中的启动的endpoint同时注入到router当中
启动server
接下来我们来一步步讲解其设计原理!Let'sGo!
web框架从日常开发经验来说,一个好的web框架大致需要满足以下特性:
路由匹配/多路由支持
支持自定义中间件
框架和业务开发完全解耦,方便开发者快速开发
参数校验/匹配
监控/日志/指标等服务自查功能
服务自保护(熔断/限流)
go-zerorest设计/api-grammar.html中的tag修饰符
Tips学习源码推荐fork出来边看边写注释和心得,可以加深理解,以后用到这块功能的时候也可以回头翻阅。
项目地址/zeromicro/go-zero
欢迎使用go-zero并star支持我们!
微信交流群关注『微服务实践』公众号并点击交流群获取社区群二维码。