淮安市信息安全与保密工程技术中心 寇海洲淮阴工学院 冯万利
摘要 本文探讨了一种在VC++环境下实现网络信息安全检测的方法,通过Winsock 类及其接口函数,创建了浏览器(Iwebexplorer)对象实例,并且调用对象的成员函数来实现监测URL、跟踪解析网络路由,将捕捉到的URL列表传输给监测端,达到内部网络安全保密机制的技术方法。
关键词Winsock 类VC++远程监测url路由跟踪
随着网络上电子商务、电子现金、数字货币、网络国税等新兴业务的兴起,网络安全问题变得越来越重要。无论是有意的攻击,还是无意的误操作,都将会给系统带来不可估量的损失。攻击者可以窃听网络上的信息、窃取用户的口令、数据库的信息;还可以篡改数据库内容、伪造用户身份、否认自己的签名;更有甚者,攻击者可以删除数据库内容、摧毁网络节点、释放计算机病毒等等。内部工作人员能较多地接触内部信息,工作中的任何不小心都可能给信息安全带来危险。竞争对手通过网络非法访问对方内部信息的事件屡见不鲜。
面对计算机网络的种种安全威胁,必须采取有力的措施来保证安全。无论是在局域网还是在广域网中,网络的安全措施应是能全方位地针对各种不同的威胁和脆弱性,这样才能确保网络信息的保密性、完整性和可用性。所谓防患于未然,一旦出了事,亡羊补牢,恐怕为时已晚。根据网络安全监测软件的实际测试情况显示,一个没有安全防护措施的大型网络,其安全漏洞可达1500个左右。在一些网络系统中,虽然采用一些安全产品,有一套安全制度,但由于各种客观和主观的原因仍然存在种种安全上的问题。因此在作全网安全考虑时,除了合理地使用和配置各种安全(软、硬件)产品以外,检测和后续的服务也越来越受到重视。
一、网络浏览器地址栏信息捕捉
应用VC++的组件对象模型,创建IE浏览器的实例对象,通过调用其成员函数GetUrlPosition,获取系统当前运行的IE浏览器的地址栏信息,然后对该地址进行特殊处理。为了方便传输地址信息和系统维护,将经过特殊处理过的IE地址,写入一个隐藏文本文件中,同时将该文本信息通过网络通信程序发给监测端。这样系统管理员就可以在监测端对网络中的被监测计算机的网络活动进行定性分析,然后判定被监测计算机是否涉嫌网络机密泄露。
应用VC组件对象申明IwebExploer对象的实例,调用自身的成员函数实现捕捉信息。以下为部分实现代码:
m_spWebBrowser;//定义浏览器对象
CComQIPtr<IWebBrowser, &IID_IWebBrowser> m_spWebBrowser;
LPOLESTR lpURL = NULL;
m_spWebBrowser->get_LocationURL(&lpURL);// 获取当前浏览器的URL地址
HANDLE hFile = CreateFile("C:\\ieaddress.txt ",GENERIC_WRITE,FILE_SHARE_READ,
NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL); //将捕捉的地址信息写入文件ieaddress.txt
CFile myFile("C:\\ieaddress.txt", CFile::modeCreate | CFile::modeReadWrite);
CString myURL = str + "\r\n";
myFile.Write(myURL);
myFile.Close();
二、浏览器地址信息的路由跟踪
计算机在Internet中传递信息时,必须要经过路由器进行网络路由才能找到目的主机,把信息送到目的主机。路由器中都有一张路由表,表中保存了从本路由器到某一主机的路由信息,路由器就是通过该路由表进行网络寻径的。两台主机之间并没有一条固定的路径(即路由表并不固定),该路径随着网络的变动而作相应的变动,因而我们并不能直接从某一主机上得到去往另一主机的路径,要得到本机与网络上某台主机的网络路径就必须要进行路由跟踪。
ICMP报文为两级封装,ICMP报文放在IP数据报的数据部分,IP数据报则放在帧的数据中进行网络传输(如图所示)。ICMP报文与其他普通报文一样,具有相同的路由选择,并没有特殊的优先权和增加可靠性。在VC++中,可以利用自定义的IP数据包格式结构类,通过对上述网络地址进行路由解析来跟踪被监测计算机在网络中的访问情况。利用网络探测的响应信号,获取数据包中的源IP地址与目的IP地址,在根据网络中的跃点数来判断网络路由网关的个数。这样就可以无限的链接出更多的网络地址。
路由跟踪的实现就是巧妙地利用了ICMP报文的TTL超时报文。其实现过程如下:源主机先向目的主机发送一个回应请求报文(类型8),TTL值设为1,第一个路由器收到后将TTL减1,这样TTL变为0,分组被废除,同时路由器向源主机发送一个TTL超时报文(类型为11),报文的IP包头中的源IP地址就是第一个路由器的地址,源主机就可以通过对该报文进行分析,得到第一个路由器的地址。接着发送TTL等于2的报文得到第二个路由器地址,再发TTL等于3的报文,如此下去直到收到目的主机的回应应答报文(类型为0)或目的不可达报文(类型为3),或者到了最大跳数(要检测路由器个数的最大值)。可以看到,对TTL的设置是实现跟踪的关键,使用函数setsockopt(m_Sock, IPPROTO_IP, IP_TTL,(LPSTR)&TTL,sizeof(int)) 可以对其进行设置,m_Sock是所创建的套接字,IP_TTL说明是进行TTL设置,TTL即是要设置的TTL值,为一个整形数值 。以下为部分实现代码:
CEvent eventStopRoute;//路由跟踪线程
UINT ThreadRoute(LPVOID pParam)
{
SubThreadInfo* pInfo = (SubThreadInfo*)pParam;
CRouteTraceDlg* pThreadDlg = (CRouteTraceDlg*)pInfo->pDialog;
CICMP m_icmp;
CString IPStr=pInfo->IPStr;
CString sTTL;
int nTtl;
m_icmp.Initialize();
for(nTtl=1;nTtl<=pInfo->Maxhot;nTtl++)
{
if(m_icmp.SetTTL(nTtl)==0)
return 0;
sTTL.Format("%d",nTtl);
if(m_icmp.SendICMPPack((char *)(LPCSTR)IPStr))
m_icmp.RecvICMPPack();
{
int i=pInfo->list->InsertItem(0,sTTL);
pInfo->list->SetItemText(i,1,m_icmp.routeaddr);
pInfo->list->SetItemText(i,2,m_icmp.RouteState);
pInfo->state->SetWindowText(m_icmp.m_strInfo);
Sleep(100);
}
if(m_icmp.routestate==0) //收到非TTL超时报文则跳出循环
break;
if(WaitForSingleObject(eventStopRoute.m_hObject, 0) == WAIT_OBJECT_0)
break; //收到停止信号则跳出循环
}
pThreadDlg->Routeflag=TRUE;return 0;
}
三、网络浏览器地址栏信息的网络传输
WinSock类的诞生,创建了一个网络通信的新时代。无论任何网络通信应用程序,都可以通过传统的WinSock类来实现。在VC++中,应用CSocket类可以很灵活地自定义属于自己的Socket类。Socket类有几个常用的接口函数,其中Server程序使用的主要函数:
Bind()函数指定用于 TCP 连接的 LocalPort 和 LocalIP。
Listen()函数设置侦听模式。该方法仅适用于 TCP 连接。
Accept()在处理 ConnectionRequest 事件时用这个方法接受新连接。
SendData()用于数据的发送。
Close()关闭与对方的连接。
而Client程序使用的主要函数:
Connect()要求连接到远程计算机。
GetData()得到远程计算机上的数据。
除了以上一些跟网络直接相关的技术外,为了保证系统的安全性,还需要一些诸如应用程序隐藏、屏蔽系统键盘、应用程序动态链接化处理、应用程序在硬盘引导区存储技术、应用程序动态复制技术等。
网络安全是相对的,安全的程度与付出的代价是密切相连的,除资金之外,相关安全措施也会影响网络性能和管理难度等,安全程度越高这些影响越大。因此,解决安全的方案应该是平衡安全与代价的结果。应用VC++就可以很廉价地构建一套网络信息监测系统,无须增加任何硬件,实现简单,普及性强,而对内部用户,则在适当增加其攻击难度的前提下,建立完善有效的审计机制作为威慑,其根本目的都在于防止其实施攻击。网络安全实质上是一个综合性问题,技术手段必须与有效的管理相配合,才能发挥最大的功效。
参考文献
[1]. 胡晓军、邓波、高宏伟 编著 Visual C++高级开发范例解析 2002.1 电子工业出版社
[2]. 周明天、汪文勇 编著 TCP/IP网络原理与技术 1993.12 清华大学出版社
[3]. 潘爱民 王国印译原著David J. Kruglinshi Visual C++(第四版) 机械工业出版社 1999.1
[4]. (美)Kate Gregory 著 前导工作室译Visual C++ 6开发使用指南 机械工业出版社 1999