[翻译]简易Linux模块检测Hook

原文作者: Jonathan Salwan

文章译者: 残风

翻译日期: 2013-03-04

译文来源: http://www.cfeng.org

英文原文: http://blog.shell-storm.org/files/blog-34.php

        最近,我需要去检测系统调用的Hook,我选择去开发一个Linux模块,在系统调用表中,如果一个指针被Hook,它将警告我。这种类型的模块是已经存在的,但是当系统调用被成功Hook时,我需要执行一个Python脚本。

        这里有几种Hook的方法。在Michael Coppola最近的文章中,谈论了《Inline Kernel Function Hooking》。对于我来说,这篇文章是很经典的Hook系统调用。下图是一个很典型的Hook系统调用。

classical_hook

        如果系统调用被Hook这个模块会通知我们,备份系统调用,保存原来所有的调用指针。第一步之后,该模块使用内核计时器,每X秒检查当前系统调用与备份的系统调用之间的差异。如果找到差异,创建一个工作队列去执行Python脚本,并且恢复成未被Hook的系统调用。执行该Python脚本,使用根证书和被Hook的系统调用编号,它是通过第一个参数传递给脚本的(sys.argv[1])

        这个模块包含了3个头定义, PATH_BINPATH_SCRIPT TIME_SLEEP。如果想执行PHP或者Perl脚本,只要改变PATH_BINPHP或者Perl的路径。TIME_SLEEP是设置持续多少毫秒之后去检查。

#define PATH_BIN     "/usr/bin/python2.7"               /* python path */
#define PATH_SCRIPT  "/opt/scripts/hook_detected.py"    /* Your python script */
#define TIME_SLEEP   30000                              /* In msec */

        系统调用被Hook,是通过第一参数传递给脚本的。一个Python脚本的例子:当系统调用被Hook之后,发送警告邮件。

#!/usr/bin/env python2.7

import smtplib
import sys 

RCPT_TO = 'mail_rcpt@gmail.com'
GUSER   = 'your_mail@gmail.com'
GPWD    = 'you_passwd'
SMTP    = 'smtp.gmail.com'

if __name__ == "__main__":

        smtpserver = smtplib.SMTP(SMTP, 587)
        smtpserver.ehlo()
        smtpserver.starttls()
        smtpserver.ehlo
        smtpserver.login(GUSER, GPWD)

        msg  = 'To: ' + RCPT_TO + '\n'
        msg += 'From: ' + GUSER + '\n'
        msg += 'Subject:Hook analyzer - Hook detected !\n\n'
        msg += 'Hook analyzer has detected a hook in syscall table '
        msg += '(syscall %s).\n' %(sys.argv[1]) 
        msg += 'The syscall was restored.\n\n'

        smtpserver.sendmail(GUSER, RCPT_TO, msg)
        smtpserver.close()

        sys.exit(0)

        这个模块需要在rootkit之前执行,否则系统调用表是损坏之后的。该模块在3.2.0内核(ubuntu)上测试通过,查看源码点击这里

        Download as PDF   Download as ODT

本文链接地址: http://www.cfeng.org/articles/simple-hook-detection-linux-module.html

转载请注明出处,本站文章若未带原文连接,均为原创。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>