Linux内核SMB3服务器漏洞猎杀实录
💡
原文中文,约3000字,阅读约需7分钟。
📝
内容提要
SMB3内核服务器是Linux内核的一个组件,优化了SMB请求处理。通过内核与用户空间的协作,ksmbd实现了高效的多线程架构。尽管默认未启用,但它是学习SMB协议和Linux机制的理想对象。研究中使用syzkaller进行模糊测试,解决了数据包标记和动态内存分配的挑战。
🎯
关键要点
- SMB3内核服务器是Linux内核的一个组件,优化了SMB请求处理。
- ksmbd通过任务分割实现性能优化,在内核空间处理关键文件操作,在用户空间处理非性能相关任务。
- ksmbd采用多线程架构,利用内核工作线程并行处理SMB请求以实现可扩展性。
- ksmbd默认未启用,但适合学习SMB协议和Linux内部机制。
- ksmbd内核组件直接绑定445端口处理SMB流量,内核与用户空间进程通过Netlink接口通信。
- 研究中使用syzkaller进行模糊测试,解决了数据包标记和动态内存分配的挑战。
- 通过数据包标记识别syzkaller实例,后续数据包无需标记。
- 修补身份验证和数据包签名验证检查,绕过协商和会话建立流程。
- 使用strace提取通信数据或手动构造数据包以创建测试用例。
- Kaitai Struct帮助快速定位和解决数据包被内核拒绝的问题。
- ksmbd初始化期间调用create_socket()函数监听传入流量。
- 实际数据处理发生在ksmbd_tcp_new_connection()函数及其连接线程中。
- ksmbd_conn_handler_loop负责读取、验证和处理SMB协议消息。
- 处理函数将SMB请求添加到工作线程队列中,使用INIT_WORK()宏初始化工作项。
- handle_ksmbd_work从请求中提取命令编号并执行相应的命令处理程序。
❓
延伸问答
什么是SMB3内核服务器,它的主要功能是什么?
SMB3内核服务器是Linux内核的一个组件,优化了SMB请求处理,主要通过任务分割在内核空间处理关键文件操作,在用户空间处理非性能相关任务。
ksmbd是如何实现性能优化的?
ksmbd通过任务分割和多线程架构实现性能优化,内核空间处理关键操作,用户空间处理非性能相关任务,从而提高了可扩展性。
ksmbd默认是启用还是禁用状态?
ksmbd默认未启用,但它适合用于学习SMB协议和Linux内部机制。
在模糊测试中,syzkaller面临哪些挑战?
在模糊测试中,syzkaller面临数据包标记和动态内存分配的挑战,特别是无法使用malloc()进行动态内存分配。
如何通过strace提取通信数据?
可以通过strace提取通信数据,或手动构造数据包以创建测试用例,从而帮助进行模糊测试。
ksmbd如何处理SMB请求?
ksmbd通过将SMB请求添加到工作线程队列中,并使用INIT_WORK()宏初始化工作项来处理SMB请求。
➡️