自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (4)
  • 收藏
  • 关注

翻译 (CVE-2022-276\66): Exploit esp6 modules linux 内核攻击-分析翻译

添加链接描述

2022-06-02 13:53:38 686

翻译 CVE-2021-22555利用过程翻译

原文链接:https://google.github.io/security-research/pocs/linux/cve-2021-22555/writeup.html本文基本属于翻译,原文解释的很清楚,我按自己的理解来记录下。漏洞位于netfilter。原作者利用此漏洞获得了两万美金的奖励。漏洞比较老,存在将近15年之久,从这个漏洞来看,内核其实类似的漏洞应该还有不少。今年貌似爆出了类似的漏洞 https://github.com/Bonfee/CVE-2022-0995 。今天又看到一个:htt

2022-03-30 16:19:54 1115

原创 grub 2.0安全启动校验镜像逻辑

在这个函数被调用时,如果你的验证器有一个 fini 函数,它也会被调用。读取文件:当你读取文件的内容时,GRUB 会调用你的验证器的 write 函数。这是通过 grub_file_read 函数完成的,它接受一个文件指针,一个缓冲区和一个大小作为参数。在 GNU GRUB 中,一旦你注册了你的验证器,它将自动用于所有打开的文件。打开文件:当你打开一个文件时,GRUB 会自动调用你的验证器。注册验证器:首先,你需要使用 grub_verifier_register 函数来注册你的验证器。

2024-03-21 20:48:50 154

原创 5.4.x内核模块密码算法调用逻辑分析

大致的逻辑应该是通过update 把硬件加速命令通过ccp_crypto_enqueue_request传递到硬件加速其中。如果处理完成直接返回正确,处理异常如果是设备忙碌,外部会通过crypto_wait_req等待,知道硬件加速器执行完毕唤醒wait。ccp_crypto_enqueue_request使用例子。

2024-03-13 15:45:26 373

原创 pcie设备驱动无法工作排查

为了查看为什么驱动匹配不到设备,我写了如下测试代码。当然必须重构部分数据结构,因为没有导出。整个驱动的注册后触发使能的过程如上。这里核心位于bus_for_each_dev。最后发现pci_dev->match_driver没有使能。

2024-01-16 12:00:07 550

原创 linux内核调度

当time_slice为0时,表示当前进程的时间片用完,调度器判断当前进程的类型,如果是交互式进程或者实时进程,则重置其时间片并重新插入active数组。当active数组中的所有进程都被移到expire数组中后,调度器交换active数组和expire数组。调度器为每一个CPU维护了两个进程队列数组:指向活动运行队列的active数组和指向过期运行队列的expire数组。楼梯算法能避免进程饥饿现象,高优先级的进程会最终和低优先级的进程竞争,使得低优先级进程最终获得执行机会。

2023-10-18 11:10:19 148

原创 块设备调用逻辑(linux 5.4)

【代码】块设备调用逻辑(linux 5.4)

2023-09-02 23:11:28 318

原创 ecryptfs透明加密

首先作者为了实现透明加密,构造了一个ecryptfs的文件系统。这个文件系统并没有对磁盘文件的直接组织,而是依附在已有的文件系统上,通过构建的文件系统对已有的文件系统做了重新组织实现。之后是磁盘管理和虚拟文件系统管理。这些都是依附与一个叫lowe_path的核心逻辑,就是未加密文件夹。通过对未加密文件夹重新组织,实现对未加密文件页缓存加密。透明加密一直是安全领域比较热门的领域,不过我了解了下内核自带的ecryptfs。正如常见的文件系统构成一样,ecrypt构建了自己的文件系统节点管理逻辑。

2023-07-21 11:23:42 585 2

原创 edk2 security boot校验流程

其中Code\Build\AlderLakeIoTPkg\DEBUG_VS2017\X64\MdeModulePkg\Universal\SecurityStubDxe\SecurityStubDxe\DEBUG\AutoGen.c。所以结论是FileAuthentication 调用了DxeImageVerificationHandler / DxeTpm2MeasureBootHandler实现了镜像校验。这三段分别是注册安全句柄,获取安全句柄和使用安全句柄,所有的安全逻辑貌似都是从这里触发的。

2023-07-10 14:31:20 261

原创 IMA/EVM完整性检测代码分析

在IMA hook机制中,需要定义一系列回调函数,包括measure、appraise、policy、inode_free和post_parse等函数。measure函数用于在文件读取之前计算文件的哈希值;appraise函数用于评估文件完整性;policy函数用于读取并更新IMA策略;inode_free函数用于在删除文件时更新操作系统的IMA状态信息;post_parse函数用于在解析之后更新文件系统缓存和错误日志。int ret;

2023-06-01 20:20:15 1830 2

原创 通用算法总结

即通用公式为: f(n) = f(n-1) + f(n-2)一个整数n分解位k个乘积最大的整数 ( 从小整理的思路 )最大值m = max( i *(n - i),

2023-03-04 13:20:13 47

原创 avb校验相关与块校验原理

• 块设备的控制器传输的固定数据单元大小称为扇区(sector)。因此I/O调度器和块设备驱动必须以扇区为单位管理数据。• 虚拟文件系统、映射层(mapping layer)管理磁盘数据的逻辑单元大小称为块(block)。对于文件系统来说,块是最小的磁盘数据存储单元。• 前面在分散/聚合DMA中,我们提到块设备驱动应该能够处理称为“段”的数据单元;每个“段”是内存中的一页或页的一部分,“段”中的数据在磁盘上是连续的。• 磁盘缓冲区处理的数据单元大小为“页”,每个对应一个页帧。

2023-01-21 12:38:32 2790

原创 CVE-2022-34918漏洞流程图

漏洞流程

2022-09-01 14:24:46 578

原创 QEMU TCG研究

动态翻译的基本思想就是把每一条Target指令切分成为若干条微指令,每条微指令由一段简单的C代码来实现,运行时通过一个动态代码生成器把这些微指令组合成一个函数,最后执行这个函数,就相当于执行了一条Target指令。那么现在的CPU指令这么多,怎么知道要分为哪些微指令呢?其实CPU指令看似名目繁多,异常复杂,实际上多数指令不外乎以下几大类:数据传送、算术运算、逻辑运算、程序控制;例如,数据传送包括:传送指令(如MOV)、堆栈操作(PUSH、POP)等,程序控制包括:函数调用(CALL)、转移指令(JMP)等;

2022-06-23 13:56:07 368

原创 CVE-2022-0995分析(内核越界 watch_queue_set_filter)

漏洞成因此漏洞与CVE-2021-22555利用方式相似。@@ -320,7 +319,7 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe, tf[i].info_mask & WATCH_INFO_LENGTH) goto err_filter; /* Ignore any unknown types */- if (tf[i].type >= sizeof(wfilter->t

2022-04-02 11:23:11 801

原创 CFG 地址检测位图构建

目标地址 :0x00b613a0 = ‭00000000 10110110 00010011 10100000‬ (b)首先取高位的3个字节:00000000 10110110 00010011 = 0x00b613那么CFGbitmap的基地址加上 0x00b613 就是指向一个字节单元的指针。这个指针最终取到的假设是:CFGBitmap :0x10100444 = 0001 0000 0001 0000 0000 0100 0100 0100(b)接着判断目标地址是否以0x10对齐:地址 .

2022-03-07 19:45:51 539

原创 lru算法

#include <stdio.h>typedef struct cache_node{ int key; int value; struct cachce_node *next; struct cache_node *prev;}cache_node_t;typedef struct lru_cache{ struct cache_node head; struct cache_node

2022-02-11 11:33:16 405

原创 libmtp关于MTP协议的实现

我这里采用了1.1.7的libmtp。但其实计算机上实现这个协议的服务还有很多,而且还不一样。但理论上原理一样。发送文件的流程继续上一篇的逻辑。我在example里发现发送文件的协议逻辑。int sendfile_function(char * from_path, char *to_path){ filesize = sb.st_size; filename = basename(from_path); parent_id = parse_path (to_path,files,fol

2022-01-17 16:29:35 1472 3

原创 MTP手机端实现过程

上一篇基本把pc端连接mtp协议走的内核路径过了一遍,还有部分细节不完善,但整体流程还是走的usb驱动逻辑。这是后话。简而言之,pc在内核平没有专门为MTP设计什么东西。解析MTP协议的逻辑还是放在了用户态。通过D-bus连通usb驱动,对数据进行mtp协议解析。为了详细了解mtp具体做了什么,我从手机端研究了MTP在内核中的实现。一、/dev/mtp_usb真正意义上的MTP驱动位于手机一侧。注册了 /dev/mtp_usb字符设备。read write 接口实现了控制命令的传输和写入。也就是说当

2022-01-14 16:04:51 1229

原创 usb通信的核心原理(mtp 协议部分研究 pc端)

原本以为是用户态的文件系统,不过后来研究是直接利用内核usbfs进行了文件映射。大致在usb_hcd_map_urb_for_dma看了下堆栈的情况:[ 580.372069] ? usb_hcd_map_urb_for_dma+0x5/0x4b0[ 580.372070] ? usb_hcd_submit_urb+0x164/0x2e0[ 580.372072] ? usb_hcd_map_urb_for_dma+0x5/0x4b0[ 580.372074] ? usb_hcd_s

2022-01-04 09:54:53 1443

原创 USB设备管理过程

驱动关于usb整体流程时序图:drive device 分别attach到bus总线上,probe用来使drive驱动device可以看到,attach后的device会找到对应的drive,并调用相应的probe函数。关键数据结构代码基于 内核5.11这里以usb设备为代表,但其他总线设备道理类似。device_attach函数中会有一个查找对应驱动的函数,算法大致是遍历总线,然后对device 和 drive对应的数据结构进行对比。通知用户态为了实时的通知用户态内核的设备管理

2021-11-29 10:27:16 3460

原创 CVE-2021-26708 利用四字节释放特定地址,修改内存

看个漏洞吧,挖洞工具还没掌握到精髓。http://www.hackdig.com/04/hack-339887.htm漏洞原因vsock_stream_etssockopt() {struct sock *sk; struct vsock_sock *vsk; const struct vsock_transport *transport; /* ... */ sk = sock->sk; vsk = vsock_sk(sk); trans

2021-09-17 16:38:58 464

原创 linux内核泄露地址的方式

早些的时候可以利用dmesg通过缺页错误来泄露内核地址,但新一点的内核把这个修复了。最近看了下,遇到了目前常用的方式,详细分析下。shmat大部分搜到的记录是利用struct shm_file_data { int id; struct ipc_namespace *ns; struct file *file; const struct vm_operations_struct *vm_ops;};#define shm_file_data(file) (*((st

2021-09-16 15:54:11 442

转载 kernel exploit 有用的结构体

一、可用于 Leak/AAR/AAW/RIP劫持的结构体说明目前缺少kmalloc-8、kmalloc-16、kmalloc-64、kmalloc-512结构体。shm_file_datasize: 0x20 kmalloc-32内核基址:可泄露。其ns、vm_ops指针可以泄露heap:可泄露。file指向堆区域stack:不能泄露劫持RIP:不能产生:调用shmat()映射共享内存释放:shmctl() ??备注:尝试过重写vm_ops,但是没发现调用fake_vtable函数指

2021-09-16 10:54:52 519

原创 syzkaller--->syscalldescription语法

syzkaller本身是个较强大的fuzz工具,使用方法较简单, syz-manager -config my.cfg但难点是编辑特异性的语法魔板,用于特定模块和系统调用的fuzz。公开git上已经包含了说明,但感觉比较晦涩,先按字面意思理一下syscall_descriptions_syntax.md文本1syscall_descriptions_syntax.mdsyscallname "(" [arg ["," arg]*] ")" [type] ["(" attribute*

2021-09-15 15:52:08 719

原创 gvisor实现的容器中启动新内核

gvisorgvisor是google发布的安全容器。gVisor 工作的核心,在于它为应用进程(用户容器),启动了一个名叫 Sentry 的进程。 而 Sentry 进程的主要职责,就是提供一个传统的操作系统内核的能力,即:运行用户程序,执行系统调用。所以说,Sentry 并不是使用 Go 语言重新实现了一个完整的 Linux 内核,而只是一个对应用进程“冒充”内核的系统组件。(这段是抄的)作为安全容器,利用容器中的内核来隔离大部分内核攻击,确实是一个不错的想法,然而这个新内核属于定制内核,估计很多

2021-08-02 17:27:34 579

原创 qemu启动文件重打包

在myandroid/out/target/product/imx51_bbg目录下可以找到要解压的ramdisk.img文件。通过file命令可以查看ramdisk.img文件的类型:root@mail:/opt/myandroid_R9.2.1/out/target/product/imx51_bbg# file ramdisk.imgramdisk.img: gzip compressed data, from Unix由此,可知其文件类型为gzip类型的。解压的步骤如下:1》.先将ra..

2021-07-22 11:48:43 275

原创 perf 性能分析,火焰图简单试用

perf工具perf在内核源码中有包含,位于tool/perf目录下面 make install安装后可用火焰图生成工具git clone https://github.com/brendangregg/FlameGraph.giton-cpu 火焰图用于显示cpu耗时的百分比图谱生成火焰图lier@lier-VM:~/src/perf_t$ sudo perf record -g -F 99 cp -r /home/lier/src/linux-source-5.4.0 /home/lie

2021-07-15 19:01:29 660

原创 文件防火墙redirfs

概述文件防火墙可以用来过滤文件操作,包括不限于open read write close等操作,相对于lsm syshook inline hook劫持形成的防火墙稳定性和能力都更为强大,虽然目前驱动好像卸载存在一定问题,但对于文件的操作具有强大的过滤能力。核心原理既然要过滤文件行为,肯定少不了函数劫持。redirfs 采用对于 vfs 和真实文件系统之间嵌入驱动redirfs的方式。简单讲struct inode 、struct dentry、struct file都属于vfs层面的概念,都具有各中

2021-07-12 16:06:48 805

原创 linux 内核解压反编译符号恢复

linux内核分析通常需要编译带符号的文件或安装带符号的内核才方便分析,这里记录下直接解压vmlinuz从导入 sudo cat /proc/kallsyms实现二进制分析linux内核解压内核lier@lier-vm:~$ sudo bash//1查找压缩文件位置 位于1f 8b 08root@lier-vm:/home/lier# od -t x1 -A d code/vmlinuz-5.8.0-55-generic | grep "1f 8b 08"0016800 8d 80 00 02

2021-06-30 15:24:37 408

原创 selinux概括总结

selinux是利用lsm劫持程序的行为的mac访问审计方式,具体实现原理这里不讨论。核心原理就是主客体通过策略规则限定程序访问范围。安全上下文是整个安全机制的重要概念,分为用户,角色,类型和级别:1、用户(user)unconfiged_u:不受限用户system_u:系统进程在 targeted policy 中 users 不是很重要;在strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。2、角色(role)O

2021-06-18 16:07:32 129

原创 runc rootless模式代码解析---创建dev设备节点文件

runc rootless模式代码解析本来以为user namespace映射了root权限后可以直接mount /proc /dev, 实现容器隔离。但是实际测试发现,/dev 并不能在userns中的root权限mount udev 到自身的/dev。但实际上, docker上是实现了类似的功能的,所以这里研究了相应的功能。docker 启动采用了containerd 和runc交互的形式,实现容器的创建。而runc可以直接启动利用rootless模式启动普通用户映射root权限的能力,并生成/dev

2021-03-15 15:37:30 446

原创 AFL模糊测试

一、AFL基于覆盖率, qemu llvm等多项技术的fuzzing工具https://github.com/google/AFL二、使用方法2.1安装makemake install2.2编译目标程序2.2.1 程序是用autoconf构建,那么此时只需要执行如下即可CC=/usr/local/bin/afl-gcc CXX=/usr/local/bin/afl-g++ ./configure --disable-sharedmake cleanmake2.2.2 程序不是用a

2021-02-07 16:57:17 961

原创 sudo CVE-2021-3156 攻击利用

漏洞成因攻击过程 char *LC = calloc(0x3000,1); strcpy(LC, "LC_ALL=C.UTF-8@"); memset(LC+15, 'C', size); envp[envp_pos++] = LC;简单讲,本身entry 和service是连在一起的,但是我们提前构造了0xc0的chunk 。 使entry分配到了oxc0的块上,而service的分配由于oxc0的块用完了会分割原始的chunk. 造成usr_arg和s

2021-02-05 17:54:40 200

原创 mnt namespace隔离文件原理

mnt namespace的核心数据结构如图一. 是mnt_namespace隔离文件的核心数据结构(内核3.10.0)。通过对open代码研究,除了对chroot的current->fs->root进行的处理。并没有其他对文件目录的其他修改。那么此处产生的问题在于如何在不同mnt中通过相同的文件名访问位于磁盘不同位置的文件。mount 的思考这要从mount格式化挂载目录开始说起。每个文件系统对应一个super_block。格式化分区意味着用对应的sb dentry innode组织了

2021-01-23 16:39:18 853

原创 android AMS原理解析

startactivityapp启动过程启动下半场,AMS返回后部分结构继承关系

2021-01-11 18:02:23 713

原创 Android中的核心概念

contextHandleractivityThread创建Looper过程Looper 读取消息队列过程handler 创建过程handler重构过程如图,使用过程中我们都会重构handleMessage方法,Handler类会利用该方法进行队列填充。Handler使用过程ActivityThread启动looperLooper 创建MessageQueue实例使用时,创建Handler 并重构handlemessage()Looper会查询队列调用handlemessa

2021-01-08 15:07:22 264

原创 Java jvm启动过程 及 如何hook java代码

create_vm函数启动虚拟机add函数,将线程加入到线程队列create函数,创建虚拟机线程“VMTHread”vm_init——globals函数,初始化全局数据结构init_globals函数,初始化全局模块LoadClass函数,加载应用程序主类jni_CallStaticVoidMethod函数,实现对Java应用程序的主方法的调用jni_DetachCurrentThread函数jni_DestroyJavaVM函数,销毁JVM....

2021-01-04 11:44:36 740

原创 java反射及hook

一、反射hook的实现条件:1.被hook类中存在可被替换的变量2.重写变量中的方法3.利用反射替换变量4.变量方法被修改二、利用步骤1、确定hook点所在类,明确hook点调用位置。2 、确定调用位置所属类(如果hook函数存在于未被实例化的类中,那么将无法hook)3、继承hook点所在类,重写hook点类中函数需要被hook的函数。4、替换调用类中的hook变量。...

2020-12-29 17:27:47 1314

转载 常用游戏分析工具 之 PChunter 及 procexp 使用心得

常用游戏分析工具之 PChunter 及 procexp 使用心得目录一、PC Hunter 功能简介… 1二、Process Explorer 功能简介 … 2三、魔域突防实例分析 … 3一、PC Hunter 功能简介PC Hunter 是一款方便易用的手工杀毒工具。该软件其实有着功能齐全的 windows 系统 信息查看内容,不但可以查看各类系统的信息,也支持找到电脑中存在的病...

2020-12-11 15:53:25 1729

superuser相关zip

root过程的核心文件,我这里用来root模拟器的。就这样子了

2018-06-20

xposed挂钩框架原理图

这个工具使用迅捷流程图工具制作的,可能有点大,我的博客上有个虚拟机讲解的博客中有提到,把原图放上来了

2018-03-10

llvm关于词法语法解释的过程

强大的llvm,现代编译器的先锋,利用xmind画的,打开也要用这个

2018-03-10

dirtycow提权漏洞原理图

自己画的关于脏牛漏洞提权的原理图,个人感觉比较清晰,适合小白理解用

2018-03-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除