朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把SecretTeam安全团队“设为星标”,否则可能就看不到了啦!
免责声明
"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"
"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"
前言
什么是udev?
Udev 是向您的计算机提供设备事件的 Linux 子系统。简单来说,这意味着它是检测您何时将东西插入计算机的代码,例如网卡、外部硬盘驱动器(包括 USB 拇指驱动器)、鼠标、键盘、操纵杆和游戏手柄、DVD-ROM 驱动器等。这使它成为一个潜在的有用实用程序,并且它足够公开,以至于标准用户可以手动编写脚本来执行诸如在插入某个硬盘驱动器时执行某些任务之类的操作。
唯一设备标识
为了让脚本响应特定的设备事件,如 U 盘插入,您需要定义一组明确的条件,指导 udev 在何种情况下触发脚本。这通常涉及设备的特定属性,Udev 通过序列号、制造商,甚至供应商 ID 和产品 ID 编号来识别设备。例如制造商、产品ID或物理特性。通过在 Udev 规则中指定这些属性,您可以确保只有符合这些条件的设备插入时,相应的脚本才会被执行。
监控功能打印收到的事件:
-
UDEV:udev 在规则处理后发送的事件
-
KERNEL:内核 uevent
在 udevadm monitor 运行时,插入 U 盘。请注意,事件类型是 ADD 事件。
udev规则
创建一个需要执行的Bash脚本文件。
这些规则是集体排序和处理的,而不考虑源目录。如果两个或多个规则具有相同的名称,则仅执行优先级最高的规则。优先级是根据规则文件的源目录(从多到小)来衡量的:/etc/ > /run/ > /usr/ 。
使用udev规则建立持久化
创建一个需要执行的Bash脚本文件。
/usr/bin/date >> /tmp/udev.log
测试执行脚本他在/tmp/udev.log中打印时间戳。
-
特定设备触发事件
如何来指向特定设备触发,需要获取匹配键来识别设备,只需在设备的 /dev 路径上执行 udevadm info :
P: /devices/pci0000:00/0000:00:0c.0/usb2/2-1/2-1:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1
N: sdb1
L: 0
S: disk/by-label/KINGSTON
S: disk/by-uuid/5E0B-FD92
[..]
E: SCSI_MODEL_ENC=DataTravelerx203.0
E: ID_VENDOR=Kingston
E: ID_VENDOR_ENC=Kingston
E: ID_MODEL=DataTraveler_3.0
E: ID_MODEL_ENC=DataTravelerx203.0
E: ID_TYPE=disk
E: DM_MULTIPATH_DEVICE_PATH=0
E: ID_SCSI_INQUIRY=1
E: ID_VENDOR_ID=0951
E: ID_MODEL_ID=1666
E: ID_REVISION=0001
E: ID_SERIAL=Kingston_DataTraveler_3.0_E0D55EA57414F5B1289F03D5-0:0
E: ID_SERIAL_SHORT=E0D55EA57414F5B1289F03D5
[...]
E: DEVLINKS=/dev/disk/by-label/KINGSTON /dev/disk/by-uuid/5E0B-FD92 /dev/disk/by-id/usb-Kingston_DataTraveler_3.0_E0D55EA57414F5B1289F03D5-0:0-part1 /dev/disk/by-partuuid/d67c4776-01 /dev/disk/by-path/pci-0000:00:0c.0-usb-0:1:1.0-scsi-0:0:0:0-part1
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:
为了匹配我们可以指向它的序列号标识符。在这种情况下,我们将在连接时创建一个符号链接:
cia㉿kali:~$ cat /etc/udev/rules.d/test.rules
KERNEL=="sdb[0-9]", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="E0D55EA57414F5B1289F03D5", SYMLINK+="super_usb", RUN+="/usr/local/bin/test.sh"
拔下并插入 USB,并通过检查是否已生成符号链接来确认规则的执行:
-
任何设备接入触发
可以将规则条件设置宽泛一些,只要有插入设备就触发事件执行脚本。
cia㉿kali:~$ cat /etc/udev/rules.d/test.rules
SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/test.sh"
-
系统开机触发
可以指向 usb 子系统或 PCI 子系统。这样即使在系统启动时也会触发规则。
cia㉿kali:~$ cat /etc/udev/rules.d/test.rules
SUBSYSTEMS=="usb", RUN+="/usr/local/bin/test.sh"
工具使用
-
需要root权限运行
-f <filename>: 要安装的二进制文件的 /path/to/location(默认为“/persistence”)
-p <payload>: 将执行的有效负载文件(二进制文件或脚本)的路径(默认为“./test.sh”)
-r <rulesname>: 持久性规则文件的名称(默认为“108-persistence.rules”)
-usb: 启用 USB 持久性
-root: 在加载 /dev/random 时执行(系统重启时启动)
#USB接入时运行脚本
./udev -p ./test.sh -usb -r test.rules
#系统重启时运行脚本
./udev -p ./test.sh -root -r test.rules
原文始发于微信公众号(SecretTeam安全团队):利用 Linux udev 实现持久性
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论