RNDIS-CO 概括 RNDIS USB Gadget 可被利用通过数据包过滤器更新机制转储内核内存空间的内容。 rndis.c - rndis_msg_parser case RNDIS_MSG_QUERY: return rndis_query_response(params, (rndis_query_msg_type *)buf); case RNDIS_MSG_SET: return rndis_set_response(params, (rndis_set_msg_type *)buf); rndis.c - rndis_set_response static int rndis_set_response(struct rndis_params *params, rndis_set_msg_type *buf) { u32 BufLength, BufOffset; rndis_set_cmplt_type *resp; rndis_resp_t *r; r = rndis_add_response
安卓系统USB网络共享需要驱动支持rndis host,而苹果USB网络共享需要驱动支持ipheth,可以分如下步骤添加USB网络共享功能:1,驱动支持USB网络共享在linux内核配置中增加CONFIG_USB_NET_RNDIS_HOST =m和CONFIG_USB_IPHETH=m两个定义编译出rndis_host.ko和ipheth.ko两个驱动文件2,设置中增加网络共享开关,init.rc中增加是否启动USB网络共享如下:#add = (is_rndis(&intf->cur_altsetting->desc) || is_activesync(&intf->cur_altsetting->desc) || is_wireless_rndis(&intf->cur_altsetting->desc) || is_novatel_rndis(&intf->cur_altsetting->desc ));#define is_novatel_rndis(desc) 0static int is_novatel_rndis(struct usb_interface_descriptor *desc
问题描述 按照高通SDX12平台产品规格,其支持RMNET、ECM、RNDIS、PPP、MBIM等拨号;但经测试,发现Windos下MBIM功能正常,而Linux发送MBIM命令均返回“error: couldn MBIM,且在host上驱动加载正确,可以通过adb或串口进入到模块内,查看到高通提供了多个端口配置脚本便于我们进行端口的配置和切换: 此处以9063为例,可配置端口为AT、MBIM、ECM、RNDIS # DESCRIPTION: RNDIS : ECM : MBIM echo "Switching to composition number 0x9063" > /dev/kmsg if [ /sys/class/android_usb/android$num/remote_wakeup echo 1 > /sys/class/android_usb/android0/f_rndis /rndis_transports echo 1 > /sys/class/android_usb/android$num/remote_wakeup echo 1 >
它可由访客虚拟机通过 VMBus(这是一种用于分区间通信的基于通道的通信机制)发送恶意 RNDIS 数据包触发。 ubuntu-focal/drivers/net/hyperv/netvsc_drv.c 替换为 src/netvsc_drv.c,将 ~/ubuntu-focal/drivers/net/hyperv/rndis_filter.c 替换为 src/rndis_filter.c 和 ~/ubuntu-focal /drivers/net/hyperv/hyperv_net.h by src/hyperv_net.h(完整差异可在 config $ make oldconfig $ make modules $ make M=drivers/net/hyperv 最后,通过加载模块并更改网络接口的以太网地址来触发问题(此操作会触发我们在 rndis_filter.c
它可由访客虚拟机通过VMBus(这是一种用于分区间通信的基于通道的通信机制)发送恶意 RNDIS 数据包触发。 ? /ubuntu-focal/drivers/net/hyperv/netvsc_drv.c用的src / netvsc_drv.c,~/ubuntu-focal/drivers/net/hyperv/rndis_filter.c 由SRC / rndis_filter.c和~/ubuntu-focal/drivers/net/hyperv/hyperv_net.h由SRC / hyperv_net.h(可用全DIFF CVE-2021 .config $ make oldconfig $ make模块 $ make M=drivers/net/hyperv 最后,通过加载模块并更改网络接口的以太网地址来触发问题(此操作会触发我们在rndis_filter.c
ux_hcd_sim_host_initialize.c ux_hcd_sim_host_uninitialize.c Added zero copy option to device RNDIS , files modified: ux_user_sample.h ux_device_class_rndis.h ux_device_class_rndis_activate.c ux_device_class_rndis_bulkin_thread.c ux_device_class_rndis_bulkout_thread.c Added zero copy ux_device_class_printer_write.c ux_device_class_printer_write_run.c ux_device_class_rndis.h ux_device_class_rndis_activate.c ux_device_class_rndis_bulkin_thread.c ux_device_class_rndis_bulkout_thread.c
需要使能的内核选项如下 USB_SERIAL=y USB_SERIAL_WWAN=y USB_SERIAL_OPTION=y USB网卡驱动,模块可通过AT配置成rndis或者ecm,默认是ecm。 需要使能的内核选项如下 USB_USBNET=y USB_NET_CDCETHER=y #用ECM 使能此项 USB_NET_RNDIS_HOST=y #用RNDIS 使能此项 1.4: Manufacturer: Quectel [17738.215250] usb 1-1.4: SerialNumber: 200806006809080000 [17738.217710] rndis_host 1-1.4:1.0 eth0: register 'rndis_host' at usb-0000:00:1a.0-1.4, RNDIS device, ac:af:fc:d4:e0:61 [17738.218236 descriptor.idProduct); + + //Quectel EC200&UC200's interface 0 can be used as USB Network device (ecm, rndis
图2 测试结果 可以看到,第一个是手机的Wifi模块分配到的IP地址和本身的MAC地址,第二个是手机通过ActiveSync和PC机进行通信的RNDIS(Remote NDIS)IP地址和MAC 有关这个方面的资料,可以参考Jake Lin的两篇Blog: Windows Embedded CE和Windows Mobile下ActiveSync开发 Windows Embedded CE链接RNDIS
配置RNDIS虚拟网口 RNDIS 是 Remote Network Driver Interface Specification(远程网络驱动程序接口规范) 的首字母缩写,实际上的作用为 TCP/IP over USB,也即视 USB 设备(如手机)为网卡,是基于USB实现RNDIS实际上就是TCP/IP over USB,从而使 Windows 可以通过 USB 设备连接网络。 RV1106平台支持RNDIS功能,并且默认处于开启状态。 2.配置 RNDIS 网卡的静态IP,打开设置—>高级网络设置—>更改适配器选项。
在 3.0.1 版本中,USB Stack 得到了极大的增强,在 STM32F4xx 处理器上实现了对应的 USB Device 驱动,以及包括 HID,MSC,甚至是 RNDIS,ECM,WinUSB
等待驱动安装完成之后 打开“设备管理器->网络适配器”,检查其中是否有类似“USB Ethernet/RNDIS Gadget”的设备, 如果有,则跳过以下步骤,如果没有则需要手动安装RNDIS/Ethernet 由于我这里是WIN10,WIN10 x64的用户可以在这里下载驱动,其他系统的用户请自行百度安装”RNDIS/Ethernet Gadget驱动”。 ? 安装成功后,在“设备管理器->网络适配器”中就会出现“RNDIS/Ethernet Gadget”咯!!!
Gadget 配置示例 4.1.1 小机做 mass storage 4.1.2 小机做 cdrom 4.1.4 小机做 UAC2 4.1.5 小机做 UVC 4.1.6 小机做 HID 4.1.7 小机做 rndis 小机做 acm 4.1.9 小机做 adb 4.1.10 小机做 mass storage+adb 4.1.11 小机做 uvc+uac1 4.1.12 小机做 hid+cdrom 4.1.13 小机做 rndis 4.1.7 小机做 rndis mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo / /sys/kernel/config/usb_gadget/g1/configs/c.1/rndis.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel mass_storage.usb0 ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC 4.1.13 小机做 rndis
(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS) help The Function Filesystem (FunctionFS) lets one create
https://en.wikipedia.org/wiki/RNDIS NDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP
OE)sspm_v3(OE)usb_boost(OE)mtk_dvfsrc_start(OE)mtk_dvfsrc_helper(OE)mac80211(E)cfg80211(E)mtk_usb_f_rndis (E)mii(E)zram(E)zsmalloc(E)mtk_selinux_aee_warning(OE)tcpci_late_sync(OE)[10.501416][T346]mtk_usb_f_rndis OE)sspm_v3(OE)usb_boost(OE)mtk_dvfsrc_start(OE)mtk_dvfsrc_helper(OE)mac80211(E)cfg80211(E)mtk_usb_f_rndis OE)sspm_v3(OE)usb_boost(OE)mtk_dvfsrc_start(OE)mtk_dvfsrc_helper(OE)mac80211(E)cfg80211(E)mtk_usb_f_rndis
RNDIS走起,就是我的手机可以直接把网络给设备 用来解决网络问题 ? 直接VPN走起 ?
NVSP包类型有多种,有的负责设置VMBus收发缓冲区,有的执行VSP与VSC握手,有的用于发送主客机间的RNDIS消息。 作者此次正是Fuzzing RNDIS消息的处理代码,不过作者没有公开hareness源码。
ROBOT_DEVICE_PORT = 20020 ROBOT_PROXY_PORT = 30030 ROBOT_BROADCAST_PORT = 40927 ROBOT_SN_LEN = 14 ROBOT_DEFAULT_RNDIS_ADDR ROBOT_DEVICE_PORT) ROBOT_DEFAULT_WIFI_ADDR = ('192.168.2.1', ROBOT_DEVICE_PORT) ROBOT_DEFAULT_LOCAL_RNDIS_ADDR
芯片框图 硬件开发 原理图见仓库的源文件和PDF,需要说明的点是: 板子的Type-C采用正反插不同功能,正面是USB转TTL串口功能,用于内核调试,反面是芯片的USB功能,在内核中我开启了USB的RNDIS
忽略系统是安全的RNDIS 或 NCM 设备缺少驱动程序的错误。如果你的系统支持两种设备,可以使用任何一种设备。但是,不要配置两个设备同时进行。