利用 Linux udev 实现持久性

admin 2024年9月10日11:35:45评论42 views字数 3183阅读10分36秒阅读模式

朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把SecretTeam安全团队设为星标”,否则可能就看不到了啦!

利用 Linux udev 实现持久性

免责声明

"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"

"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"

前言

udev在系统管理员中广为人知。它是 Linux 内核的设备管理器,允许用户管理 /dev/ 目录中的设备,并根据硬件事件创建操作。常见用例包括重命名网络接口或在插入特定硬盘时修改其权限。udev的功能之一是基于硬件事件(例如检测)执行脚本,这使其成为用作持久化机制的良好候选者。

什么是udev?

Udev 是向您的计算机提供设备事件的 Linux 子系统。简单来说,这意味着它是检测您何时将东西插入计算机的代码,例如网卡、外部硬盘驱动器(包括 USB 拇指驱动器)、鼠标、键盘、操纵杆和游戏手柄、DVD-ROM 驱动器等。这使它成为一个潜在的有用实用程序,并且它足够公开,以至于标准用户可以手动编写脚本来执行诸如在插入某个硬盘驱动器时执行某些任务之类的操作。

唯一设备标识

为了让脚本响应特定的设备事件,如 U 盘插入,您需要定义一组明确的条件,指导 udev 在何种情况下触发脚本。这通常涉及设备的特定属性,Udev 通过序列号、制造商,甚至供应商 ID 和产品 ID 编号来识别设备。例如制造商、产品ID或物理特性。通过在 Udev 规则中指定这些属性,您可以确保只有符合这些条件的设备插入时,相应的脚本才会被执行。

使用 udevadm monitor 命令,实时访问 udev,并在插入不同设备时查看它所看到的内容。

监控功能打印收到的事件:

    • UDEV:udev 在规则处理后发送的事件

    • KERNEL:内核 uevent

利用 Linux udev 实现持久性

在 udevadm monitor 运行时,插入 U 盘。请注意,事件类型是 ADD 事件。

udev规则

创建一个需要执行的Bash脚本文件。

udev规则定义事件与要执行的操作之间的关系。它们定义事件处理程序。每个规则都位于一个规则文件中,文件扩展名为 .rules。
管理员创建的规则位于 /etc/udev/rules.d/中;由系统提供或动态生成的数据分别位于/usr/lib/udev/rules.d/和/run/udev/rules.d/中。

这些规则是集体排序和处理的,而不考虑源目录。如果两个或多个规则具有相同的名称,则仅执行优先级最高的规则。优先级是根据规则文件的源目录(从多到小)来衡量的:/etc/ > /run/ > /usr/ 。

使用udev规则建立持久化

创建一个需要执行的Bash脚本文件。

#!/usr/bin/bash/usr/bin/date >> /tmp/udev.log
将其放在 /usr/local/bin 或默认可执行路径中的某个类似位置。将其命名为 test.sh 当然,使用 chmod +x 使其可执行。

测试执行脚本他在/tmp/udev.log中打印时间戳。

利用 Linux udev 实现持久性

  • 特定设备触发事件

如何来指向特定设备触发,需要获取匹配键来识别设备,只需在设备的  /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/sdb1N: sdb1L: 0S: disk/by-label/KINGSTONS: disk/by-uuid/5E0B-FD92[..]E: SCSI_MODEL_ENC=DataTravelerx203.0E: ID_VENDOR=KingstonE: ID_VENDOR_ENC=KingstonE: ID_MODEL=DataTraveler_3.0E: ID_MODEL_ENC=DataTravelerx203.0E: ID_TYPE=diskE: DM_MULTIPATH_DEVICE_PATH=0E: ID_SCSI_INQUIRY=1E: ID_VENDOR_ID=0951E: ID_MODEL_ID=1666E: ID_REVISION=0001E: ID_SERIAL=Kingston_DataTraveler_3.0_E0D55EA57414F5B1289F03D5-0:0E: 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-part1E: TAGS=:systemd:E: CURRENT_TAGS=:systemd:

为了匹配我们可以指向它的序列号标识符。在这种情况下,我们将在连接时创建一个符号链接:

cia㉿kali:~$ cat /etc/udev/rules.d/test.rulesKERNEL=="sdb[0-9]", SUBSYSTEMS=="usb", ENV{ID_SERIAL_SHORT}=="E0D55EA57414F5B1289F03D5", SYMLINK+="super_usb", RUN+="/usr/local/bin/test.sh"

拔下并插入 USB,并通过检查是否已生成符号链接来确认规则的执行:

利用 Linux udev 实现持久性

  • 任何设备接入触发

可以将规则条件设置宽泛一些,只要有插入设备就触发事件执行脚本。

cia㉿kali:~$ cat /etc/udev/rules.d/test.rulesSUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/test.sh"

利用 Linux udev 实现持久性

  • 系统开机触发

可以指向  usb 子系统或  PCI 子系统。这样即使在系统启动时也会触发规则。

cia㉿kali:~$ cat /etc/udev/rules.d/test.rulesSUBSYSTEMS=="usb", RUN+="/usr/local/bin/test.sh"

工具使用

  • 需要root权限运行

利用 Linux udev 实现持久性

-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 实现持久性

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月10日11:35:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用 Linux udev 实现持久性https://cn-sec.com/archives/3149546.html

发表评论

匿名网友 填写信息