1.深入浅出LinuxTCP/IP协议栈内容简介
2.如何学习网络工程
3.openWRT发展历程
4.Linux虚拟网络中的内核macvlan设备源码分析
5.Nftables CVE-2023-0179提权利用
深入浅出LinuxTCP/IP协议栈内容简介
《深入浅出Linux TCP/IP协议栈》是一本实用性书籍,它主要聚焦于Linux 2.6.内核协议栈的源码源代码分析。作者基于其在操作系统领域的代码研究和网络协议开发经验,以及详细的内核笔记,撰写了这本书,源码目标是代码菠菜源码如何帮助读者快速理解Linux内核协议栈的工作原理,为后续的内核协议栈移植和扩展提供坚实的基础。
该书首先从内核源码的源码整体框架和协议栈的初始化过程开始讲解,然后通过详尽的代码配置和用户使用协议栈的实例,采取易于理解、内核从上至下的源码方法,逐步剖析协议栈的代码代码,并配以注释,内核使得复杂的源码技术内容更为直观。此外,代码书中的内容还包括了通信领域中常见的VLAN技术和LACP协议的介绍,以拓宽读者的知识面。
总的来说,《深入浅出Linux TCP/IP协议栈》是Linux网络开发人员以及对Linux内核感兴趣的读者的理想读物,无论是对协议栈的深入理解,还是希望提升实际操作技能,都能在阅读中受益匪浅。通过这本书,读者不仅能掌握理论知识,源码包官网还能在实践中应用所学,提升技能水平。
如何学习网络工程
一、学习方法:
(1)工程是有原理的。 原理就意味着理论。 你要想学好网络工程, 你就得学习网络的基础知识, 比如: 数据通信原理、网络原理、协议原理(如:TCP/IP原理)、网络程序设计原理、网络安全原理。
(2)工程是有特定目标,注重过程、注重效益的;工程是要与环境协调一致的;工程是在一定边界条件下集成和优化的。这几方面讲的是,工程是需要制定方案的。方案的设计主要依靠原理。对一个网络工程而言, 方案设计的内容可能包括: 拓扑设计、设备选型等方面的内容。
(3)工程是通过建造实现的。要建造,手机交易股票 源码依靠的是技术。 这就意味着,你需要掌握实施网络工程所需要的各项技术,如:交换机配置、路由器配置、防火墙配置、布线、网络操作系统使用与管理等方面的技术。
二、网络工程的简单介绍:
网络工程是指按计划进行的以工程化的思想、方式、方法,设计、研发和解决网络系统问题的工程。培养掌握网络工程的基本理论与方法以及计算机技术和网络技术等方面的知识,能运用所学知识与技能去分析和解决相关的实际问题,可在信息产业以及其他国民经济部门从事各类网络系统和计算机通信系统研究、教学、设计、开发等工作的高级网络科技人才。
openWRT发展历程
OpenWRT的发展历程始于年1月,其起源可以追溯到Linksys提供的GPL源码和基于uclibc的buildroot项目,这个被称为“stable”版本的量柱战法源码OpenWrt至今仍被许多项目所采用,如著名的Freifunk-Firmware和Sip@Home。 到了年初,OpenWRT项目迎来了新的开发者力量。几个月后,他们推出了首个“experimental”版本,这一版本与早期显著不同,它摒弃了Linksys的GPL源码,转而采用了buildroot2作为核心技术,实现了OpenWrt的全面模块化。这个版本使用了Linux标准发行的2.4.内核源码,并添加了一系列补丁和网络驱动,增强了其功能。开发团队为OpenWrt增添了更多免费工具,允许用户直接将Image写入Flash(mtd),同时还支持无线功能和VLAN交换功能。这一版本被命名为“White Russian”,标志着项目的一个重要里程碑。据记载,1.0版本大约在年底正式发布。扩展资料
OpenWrt的被描述为一个嵌入式设备的Linux发行版,而不是试图建立一个单一的,静态的固件,OpenWrt的叽叽互赞源码包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序通过使用包。对于开发人员,OpenWrt的是框架来构建应用程序,而无需建立一个完整的固件左右;对于用户来说,这意味着完全定制的能力,从来没有预想的方式使用该设备。Linux虚拟网络中的macvlan设备源码分析
Linux虚拟网络中的macvlan设备源码分析
macvlan是Linux内核提供的一种新特性,用于在单个物理网卡上创建多个独立的虚拟网卡。支持macvlan的内核版本包括v3.9-3.和4.0+,推荐使用4.0+版本。macvlan通常作为内核模块实现,可通过以下命令检测系统是否支持: 1. modprobe macvlan - 加载模块 2. lsmod | grep macvlan - 确认是否已加载 对于学习和资源分享,可以加入Linux内核源码交流群获取相关学习资料,前名成员可免费领取价值的内核资料包。 macvlan的工作原理与VLAN不同,macvlan子接口拥有独立的MAC地址和IP配置,每个子接口可以视为一个独立的网络环境。通过子接口,macvlan可以实现流量隔离,根据包的目的MAC地址决定转发给哪个虚拟网卡。macvlan的网络模式包括private、vepa、bridge和passthru,分别提供不同的通信和隔离策略。 与传统VLAN相比,macvlan在子接口独立性和广播域共享上有所不同。macvlan的子接口使用独立MAC地址,而VLAN共享主接口的MAC。此外,macvlan可以直接接入到VM或network namespace,而VLAN通常通过bridge连接。 总的来说,macvlan是Linux网络配置中的强大工具,理解其源码有助于深入掌握其内部机制。对于网络配置和性能优化的探讨,可以参考以下文章和视频:Linux内核性能优化实战演练(一)
理解网络数据在内核中流转过程
Linux服务器数据恢复案例分析
虚拟文件系统操作指南
Linux共享内存同步方法
最后,关于macvlan与VLAN的详细对比,以及mactap技术,可以参考相关技术社区和文章,如内核技术中文网。Nftables CVE--提权利用
在分析了CVE---Nftables整型溢出漏洞的成因之后,本文接下来将深入探讨如何利用这一漏洞。首先,了解到payload_eval_copy_vlan函数中存在整型溢出问题,这使得我们可以将vlan头部结构拷贝至寄存器(NFT_REG_-NFT_REG_)中,而该变量位于栈上,因此可以覆盖到栈上的其他变量。
然而,观察源码后发现regs变量无法直接覆盖到返回地址。进一步分析后发现,jumpstack变量位于regs变量下方,因此可以利用整型溢出覆盖到jumpstack变量。接下来,我们关注nft_jumpstack结构体,该结构体在nft_do_chain函数中起作用,当状态寄存器被设置为JUMP条件时,程序将跳转至其他chain进行处理。保存完当前chain状态后,程序将跳转至目的chain,即存储在regs.verdict.chain中。
还原chain的过程涉及通过递减stackptr来取出存储在jumpstack变量中的chain、rule、lastrule,然后进行rule的解析。需要注意的是,在遍历rule时,循环条件为rule < lastrule。因此,在伪造lastrule时,需要确保其值大于rule,否则无法进入循环内部。
接着,观察nft_rule_dp结构体,发现其中包含用于存储nft_expr结构体指针的八个字节。通过篡改该指针,可以劫持程序流程。为了解决这一问题,作者从ctfiot.com/.html中学习了一个技巧:使用ptype /o struct xxx显示结构体信息与偏移。
构建流程如下:通过漏洞溢出至nft_jumpstack结构体,并修改rule变量指向可控内容的地址。同时,将lastrule值篡改为大于rule的值。接下来,在可控内容中伪造一个nft_rule_dp结构体,篡改第一个八个字节(填充位)和第二个八个字节(函数表指针)的值,使其分别指向可控内容的地址。之后,在该地址处伪造nft_expr,将ops变量指向所需执行的函数。
分析后得知,通过上述手段可以实现程序流程的劫持。接下来,需要考虑如何伪造上述结构体。在nft_payload_copy_vlan函数中,漏洞点在于将vlan头数据复制到寄存器中,由于vlan头地址低于寄存器地址,导致在复制完vlan头后会覆盖寄存器值。这里,我们可以通过控制NFT_REG_的值来实现对jumpstack结构体的篡改。
由于可以控制regs变量,首先泄露regs地址,然后在此基础上伪造rule并重新指向jumpstack。这里采用将last_rule设置为函数地址的技巧,以节省八个字节的空间。然而,仅控制八个字节的函数指针不足以构造完整的ROP链,因此需要使用栈迁移。栈迁移的目标是控制一段内存,选择regs作为目标。
在寻找合适的栈迁移gadget时,作者使用了vmlinux-to-elf工具提取符号表,然后利用ropper工具搜索gadget。但尝试后发现大部分gadget不可用。作者最后尝试使用objdump工具提取gadget,并通过搜索add rsp.*等指令找到栈迁移的gadget。进一步计算栈顶与regs函数地址的差值,找到相应的栈迁移gadget。
在提权方面,作者通过覆盖modprobe_path实现提权。选择合适的gadget将rdi设置为modprobe_path,rax设置为覆盖后的路径。然而,在返回到nf_hook_slow函数时,由于设置了rax值导致状态码无法正确设置,程序跳转至NF_DROP分支,导致内核异常。最终,作者在rbp中找到了一个do_softirq函数,并尝试将其作为返回地址。运行后发现程序能够正常返回到用户态。
最后,验证新用户是否已写入至/etc/passwd文件中,完成提权过程。完整exploit代码可参考github.com/h0pe-ay/Vuln.../poc.c。相关资料参考链接包括github.com/TurtleARM/CV...