| 
                        副标题[/!--empirenews.page--]
                          前言 
Linux作为服务器和IoT设备使用的主要操作系统,针对它的恶意软件也层出不穷。针对Linux设备的恶意软件(以下称为rootkit)通常需要长期驻留于目标操作系统以达到获利目的,所以如何实现驻留也是Linux  rootkit作者的重点考虑内容之一,对此,实验室进行了可能的思路探索和分析。 
在接下来的说明中,我们统一使用一个名为evil的静态链接ELF文件作为我们要实现驻留的rootkit,所有的驻留尝试均围绕这个程序展开。 
技术汇总 
1. 用户态下的可利用点 
1.1 各种init的利用 
Linux init 
在systemd成为主流之前,sysvinit是大多数发行版的选择,即使是Ubuntu之前使用的upstart,和sysvinit也是完全兼容的,直到今天,Debian系发行版仍保留sysvinit的兼容性。作为Linux的init程序,也就是PID  1,负责启动之后的所有进程,所有的服务都是由它管理,因此它是实现rootkit驻留的最常见手段。 
对于传统的sysvinit,常见的驻留点都需要以root身份写入: 
- /etc/init.d/etc/rc[runlevel].d/etc/rc.local 
 
  
其实sysv的服务文件就是遵循sysv规范的shell脚本,它在嵌入式设备中也很常见。给出一个sysv风格的服务文件如下: 
- #!/bin/shPATH=/bin:/usr/bin:/sbin:/usr/sbin 
 - DESC="cron daemon"NAME=cron 
 - DAEMON=/usr/sbin/cron 
 - PIDFILE=/var/run/crond.pid 
 - SCRIPTNAME=/etc/init.d/"$NAME"test -f $DAEMON || exit 0 
 -  
 - . /lib/lsb/init-functions 
 -  
 - [ -r /etc/default/cron ] && . /etc/default/cronparse_environment() {    for ENV_FILE in /etc/environment /etc/default/locale; do 
 -         [ -r "$ENV_FILE" ] || continue 
 -         [ -s "$ENV_FILE" ] || continue 
 -  
 -         for var in LANG LANGUAGE LC_ALL LC_CTYPE; do 
 -             value=$(egrep "^${var}=" "$ENV_FILE" | tail -n1 | cut -d= -f2) 
 -             [ -n "$value" ] && eval export $var=$value 
 -  
 -             if [ -n "$value" ] && [ "$ENV_FILE" = /etc/environment ]; then 
 -                 log_warning_msg "/etc/environment has been deprecated for locale information; use /etc/default/locale for $var=$value instead" 
 -             fi 
 -         done 
 -     done 
 -  
 -     # Get the timezone set. 
 -     if [ -z "$TZ" -a -e /etc/timezone ]; then 
 -         TZ=$(cat /etc/timezone)    fi}# Parse the system's environmentif [ "$READ_ENV" = "yes" ]; then 
 -     parse_environmentficase "$1" instart)    log_daemon_msg "Starting periodic command scheduler" "cron" # 这一行是我们修改的目标 
 -     start_daemon -p $PIDFILE $DAEMON $EXTRA_OPTS 
 -     log_end_msg $? 
 -     ;; 
 - stop)    log_daemon_msg "Stopping periodic command scheduler" "cron" 
 -     killproc -p $PIDFILE $DAEMON 
 -     RETVAL=$? 
 -     [ $RETVAL -eq 0 ] && [ -e "$PIDFILE" ] && rm -f $PIDFILE 
 -     log_end_msg $RETVAL 
 -     ;; 
 - restart)    log_daemon_msg "Restarting periodic command scheduler" "cron" 
 -     $0 stop    $0 start 
 -     ;; 
 - reload | force-reload)    log_daemon_msg "Reloading configuration files for periodic command scheduler" "cron" 
 -     # cron reloads automatically 
 -     log_end_msg 0 
 -     ;; 
 - status) 
 -     status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? 
 -     ;; 
 - *)    log_action_msg "Usage: /etc/init.d/cron {start|stop|status|restart|reload|force-reload}" 
 -     exit 2 
 -     ;;esacexit 0 
 
  
                                                (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |