动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.Pure C++:泛型编程:模板特殊化.
.C++箴言:让=返回一个*this的引用.
.从初学者到编程高手,几种必学的.
.(02)数据结构题解-线性表.
.监视程序的编制.
.程序员必读的《C++程序设计陷阱》.
.实现关机时的效果的一段代码.
.qmail-local代码分析.
.(04)第四章 串 题解.
.vi 中的正则表达式 (Regular Exp.
.C++对象布局及多态探索之菱形结构.
.《c语言程序设计》第五章:函数.
.数据结构C语言实现系列——线性表.
.三视图的画法.
.一个简单的链表程序.
.编程实现盗2005 Beta2版QQ.
.More Effective C++之引用计数.
.C++在网页设计中的应用.
.C/C++中数组和指针类型的关系的入.
.用C++控制DVD/CD驱动器的开关.

利用LLKM处理网络通信---对抗IDS、Firewall

发表日期:2008-3-8 |



  ★ 前言

事实上我并没有翻译Phrack 55-12,它的文字如此之少,当然必须承认其中闪烁
的聪明之光。阅读lifeline < mailto: arai@hackers-pt.org >的程序,它就在文章
里,然后再来看这篇文章。

★ 目录

1. IDS、Firewall的某些特性
2. LLKM能做什么
3. 一个完整的LLKM例子,简单、临时改变TCP/IP协议栈的行为
4. 获取TCP自动机状态,更改出现在网络传输线路上的TCP标志位
5. 另外一种截留本机发送报文、修改、再发送技术
6. 内核模块里设置混杂模式
7. 内核模块里文件I/O操作
8. 内核包转发的讨论

★ 正文

1. IDS、Firewall的某些特性

以snort为例,其大量IDS规则对TCP的PSH、ACK、SYN标志进行判定。比如,在
syn-flood告警中,判定短时间内出现的大量SYN包。而更多的对TCP数据区进行内容
鉴别前,判定了PSH+ACK标志。具体snort规则请参看snort源代码包中举例。

Firewall阻塞来自外部的TCP连接请求时,需要判定SYN标志。

IDS和Firewall还有个更重要的通性,对端口的敏感性。21、23、110、513等端
口都属于敏感端口,许多告警规则、阻塞规则是基于端口的。

2. LLKM能做什么

利用LLKM简单、临时改变TCP/IP协议栈的行为。考虑三种情况:

a. 更改出现在网络传输线路上的TCP标志位
b. 更改出现在网络传输线路上的端口
c. 对IP数据区(TCP协议部分)加密处理后传输



A Host ----+----- firewall -----+---- B Host
(内部) (外部)

C Host(IDS系统) D Host(普通Sniffer)


假设A和B都是我们控制的主机,在这两台主机上都加载LLKM。防火墙不答应来自
外部的任何TCP连接请求,它靠的是判定SYN标志。现在B想telnet到A,LLKM将把B到A
的SYN标志换成ACK、PSH、RST、RES1、RES2中的任意一个或者几个的组合,以能渗透
通过防火墙为原则;A上的LLKM先于正常的TCP/IP协议栈接收到这个扭曲处理了的请
求报文,按照约定好的规则逆向处理,恢复SYN标志后再交给正常的TCP/IP协议栈处
理。同样,A回送SYN+ACK到B的时候,也做一些转换,B上LLKM会恢复成正常的
SYN+ACK。对于A、B上的TCP/IP协议栈,它们意识不到发生过转换,用netstat -na看
到的还是正常的、意料中的状态。对于防火墙,意识不到已经从外部主机成功访问了
内部主机。对于C、D,会看到希奇的TCP标志出现。在做标志转换时,还需要考虑对
抗IDS规则,因具体情况而定。比如,避免在网络传输中出现PSH+ACK标志。

防火墙和IDS对端口相当敏感,比如不答应telnet、FTP协议通过,只答应http协
议通过。要做的仅仅是让A、B把23端口换成80端口出现在网络传输中。可能有人认为
修改双方的/etc/services文件更好些,当然,那也是一种可行的考虑。不过有太多
情况下利用LLKM动态修改端口更彻底更灵活。至于IDS,对于大多数非周知端口并不
敏感,意味着逃脱了监测。

最后要做的就是对IP数据区进行加密传输,IPSec能做到,可我需要的可能仅仅
是异或处理,仅仅是避开IDS的端口监测、内容监测。一个简单的insmod就能完成的
任务为什么一定要搬出IPSec呢。

3. 一个完整的LLKM例子,简单、临时改变TCP/IP协议栈的行为

例子程序的想法来自华中地区网络中心(bbs.whnet.edu.cn)Security版的
difeijing朋友,同时感谢AngelFalls朋友参与该版讨论,并提供了八篇谢绝转站的
<<Linux的TCP/IP协议栈阅读笔记>>。

程序演示了

a. LLKM的基本框架和技巧
b. 利用dev_add_pack()对本机即将发送出去的报文进行修改再发送

syn半开扫描依靠于被扫描主机返回ACK+RST标志和ACK+SYN标志两种情况,前者
意味着相应端口未开。connect扫描则完全依靠TCP连接的成功建立。difeijing提出

了这样一个想法,利用LLKM转换ACK+RST成ACK+SYN,此时syn半开扫描和connect扫描
都将认定相应端口是打开的。

--------------------------------------------------------------------------
/*
* File : openallport.c
* Author : scz < mailto: scz@nsfocus.com >
* : http://www.nsfocus.com
* Kernel : 2.2.16 or 2.2.14
* Complie : gcc -O3 -DMODULE -D__KERNEL__ -c openallport.c
* Usage : insmod openallport.o [dev=eth0] -x -y -f
* Date : 2000-10-10 17:40
*/

#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/netdevice.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <linux/tcp.h>

/*
* 2.2.16内核的/usr/include/linux/version.h文件里定义了这个宏
* 但2.0.35内核里没有定义
*/
#ifndef KERNEL_VERSION
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#endif

#if LINUX_VERSION_CODE > KERNEL_VERSION(2,2,0)
#include <asm/uAccess.h>
#endif

static strUCt device * openallport_dev = NULL;
static char * dev = NULL;

/* 定义insmod命令行参数 */
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,2,0)
MODULE_PARM( dev, "s" );
#endif

static inline u_long csum_tcpudp_nofold ( u_long saddr, u_long daddr,
u_short len, u_short proto,
unsigned int sum )
{
__asm__
("
addl %1, %0
adcl %2, %0
adcl %3, %0
adcl $0, %0
"
: "=r" ( sum )
: "g" ( daddr ), "g" ( saddr ), "g" ( ( ntohs( len ) << 16 ) + proto * 256 ), "0" ( sum )
);
return sum;
}

static inline unsigned int csum_fold ( unsigned int sum )
{
__asm__
("
addl %1, %0
adcl $0xffff, %0
"
: "=r" ( sum )
: "r" ( sum << 16 ), "0" ( sum & 0xffff0000 )
);
return( ( ~sum ) >> 16 );
} /* end of csum_fold */

static inline u_short check_tcpudp ( u_long saddr, u_long daddr,
u_short len, u_short proto,
unsigned int sum )
{
return( csum_fold( csum_tcpudp_nofold( saddr, daddr, len, proto, sum ) ) );
} /* end of check_tcpudp */

int openallport_rcv ( struct sk_buff * skb, struct device * dv, struct packet_type * pt )

{
/* 注重pkt_type是什么 */
if ( ( skb->pkt_type == PACKET_OUTGOING ) && ( skb->protocol == __constant_htons( ETH_P_IP) ) )
{
if ( ( skb->nh.iph->version == 4 ) && ( skb->nh.iph->protocol == IPPROTO_TCP ) ) /* 不考虑ipv6 */
{
skb->h.raw = skb->nh.raw + ( skb->nh.iph->ihl << 2 );
if ( ( skb->h.th->ack == 1 ) && ( skb->h.th->rst == 1 ) )
{
u_short size;
int doff = 0;

skb->h.th->rst = 0;
skb->h.th->syn = 1;
size = ntohs( skb->nh.iph->tot_len ) - ( skb->nh.iph->ihl * 4 ); /* IP数据区长度 */
doff = skb->h.th->doff << 2; /* TCP头部长度 */
/* 重新计算校验和 */
skb->csum = 0;
skb->csum = csum_partial( skb->h.raw + doff, size - doff, 0 ); /* data checksum */
skb->h.th->check = 0;
skb->h.th->check = check_tcpudp( skb->nh.iph->saddr, /* tcp or udp checksum */
skb->nh.iph->daddr,
size,
IPPROTO_TCP,
csum_partial( skb->h.raw, doff, skb->csum ) );
}
}
}
kfree_skb( skb );
return( 0 );
} /* end of openallport_rcv */

static struct packet_type openallport_packet_type =
{
__constant_htons( ETH_P_ALL ), /* 此时可以接收到来自lo的回送报文,比如本机发送出去的 */
NULL, /* All devices */
openallport_rcv,
上一篇:看我不动也会张的大嘴巴 人气:276
下一篇:利用DelayLoad来优化应用程序的性能,拦截API 人气:659
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-8 OpenPNE中文 v2.12.3 bulid 0810
2008-10-8 ADN视频收藏专家 v3.5.1008 标准
2008-10-8 捌度出品之Google近日收录查询系
2008-10-8 捌度出品之Google近日收录查询系
2008-10-8 94xhcms v1.1 bulid 081006 beta
2008-10-8 天空网络电影系统SKYUC v2.5.9 简
2008-10-8 60度CMS v1.0 Build 081007
2008-10-8 SiteDynamic企业网站管理系统 v1
2008-10-8 长登企业建站 v1.3 build 081008
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成