首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

最强数据安全系统--硬件防火墙完整解决方案,有源码,黑客不服来战(2)

最强数据安全系统--硬件防火墙完整解决方案,有源码,黑客不服来战(2)

3.4 配置和编译PetaLinux内核
Linux内核支持多种配置方法,其中“make menuconfig”方法基于文本图形化终端来显示配置菜单,是目前使用最广泛的配置方法。在终端模式下运行“make menuconfig”命令即可进入配置界面,再选择Kernel/Library/Default Selection选项,设置内核版本为linux一2.6.X。同时,选中customize kernel settings和customize vendor/usersettings选项,即可进行内核设置和用户功能设置。Linux内核配置选项众多,实际上大部分选项可以使用默认值,只有少部分需要用户根据所使用硬件平台的实际情况以及对操作系统的功能需求来进行选择。内核配置完成后,选择保存退出。在终端模式下运行“make all”命令,系统便开始编译内核及相关应用。编译过程时间比较长,通过观察终端上显示的编译信息,可以了解编译的进度、出现的错误和警告信息等。如果内核配置没有问题,则编译成功后,在/home/petalinux/petalinux-vO.40-final/software/petalinux-dist/images目录下将生成各种不同格式的镜像文件。

3.5 下载内核
生成的内核文件是否正确,需要通过在实际硬件环境中运行来检验。在调试阶段下载内核到目标板一般可以通过JTAG、串口、以太网和USB接口来进行数据传输。为了方便调试,这里通过JTAG接口采取XMD调试方式,动态加载和启动PetaLinux。具体步骤如下:

(1)连接硬件调试环境
通过JTAG电缆连接PC机和目标板的JTAG接口,作为内核下载通路;通过串行电缆连接PC机串口和目标板串口,作为控制台通路;通过5类网络电缆连接PC机网口和目标板网口,作为以太网测试通路。

(2)设置软件环境
使用Windows XP自带的超级终端工具作为控制台软件。控制台参数设置为:波特率115 200 b/s,8位数据位,1位停止位,无奇偶校验,无流量控制。PC机的IP地址设置为192.168.0.1,同时关闭Windows XP的防火墙。

(3)配置FPGA 启动XPS开发平台,选择Device Configuration菜单中的Download Bitstream选项,下载硬件比特流文件download.bit。

(4)利用XMD加载内核镜像到外部存储器
将/home/petalinux/petalinux-vO.40-final/software/petalinux-dist/images目录下的二进制格式的image.bin文件复制到Windows主机中的EDK工程目录下。启动XMD命令行界面,输入以下命令dow-data image.bin 0x90000000其中,0x90000000是外部存储器的起始地址。当内核镜像加载到存储器之后,在XMD命令行中继续输入con 0x90000000如果内核文件没有错误,MicroBlaze将启动PetaLinux操作系统,系统的启动信息将输出到超级终端上。

(5)登录系统
内核启动完成后将显示“uClinux login:”,提示用户输入用户名和密码登录系统。输入用户名root和密码root,即可登录PetaLinux操作系统。此时串口作为PetaLinux操作系统的控制台,通过超级终端软件来接收串口数据和发送串口数据。在超级终端上运行ls命令,即可显示根文件系统下的目录结构。

4 防篡改模块设计
网站的防篡改模块是网络安全的一个重要方面,它主要提供对网页原始性,完整性的检测和检查。

4.1防篡改技术简介
防篡改技术主要有轮询检查技术,文件驱动技术,核心内嵌技术。

4.1.1轮询检查技术
轮询检查技术是嵌入一个网页的检测程序,以轮询的方式依次读出网页,然后与之前备份好的网页进行比对,判断该网页是否与原网页保持一致,对被篡改的网页进行报警和恢复操作。该技术比较简单,但是缺点也十分明显:对于较多的网页,轮询一遍历时数分钟甚至于十多分钟,在这期间,可能有大量的访问量可以访问到该网页。同时这种方式也需要消耗大量的服务器资源。

4.1.2文件驱动技术
文件驱动技术是将核心程序加载在文件驱动这一层面上,在文件属性发生改变的时候进行检查和比对,如果发现篡改,即对这次事件进行报警,并恢复页面。恢复速度很快,是一种安全有效的防篡改手段。但是这种技术的安全性是有前提的,如果文件的属性被隐秘地修改了,这种方法就无能为力,所以,这种技术仍然有被访问到篡改页面的可能性。

4.1.3核心内嵌技术
核心内嵌技术是在访问进行时进行检查和比对,即每一次有访问的时候都先进行检查,如果检查结果不一致,则拒绝用户访问,待页面恢复正常再允许访问。因此,对于核心内嵌技术,只要核心程序仍在运行,就不会有访问到篡改页面的可能性。

4.1.4 三种主流技术的比较

表 1  防篡改技术比较

防篡改技术                             比较项目

轮询检查技术

文件驱动技术

核心内嵌技术

访问篡改网页
可能
可能
不可能
绕过检测攻击
不可能
可能
不可能
服务器负载



操作系统适用性
所有
部分
所有
动态网页脚本
不行


检测时间
分钟级
实时
实时
断线保护
不能
不能


通过上表比较可知,核心内嵌技术为网页防篡改最优选择。4.2散列函数
防篡改系统中重要技术就是数字摘要技术,即所说的散列函数。单向散列函数可以将网页生成一串固定的散列码,由于散列函数的高离散性,只要原文内容发生了一丁点变化,散列码的变化非常大。所以如果计算出来的散列码与原备份的网页散列码不同,则可以知道网页被篡改了。

散列算法有以下特点:
1、不可逆性。由内容可以很容易知道散列值,但是由散列码却无法知道内容。
2、高离散性。是指内容变化很少也会导致散列值的巨大变化,并且无法预料。没有规律性。
3、抗碰撞性。散列值多达上百位,比如MD5有128位,SHA-1有160位,基本上不会出现篡改后页面与之前页面散列值相同的情况。
目前主要的散列算法有MD5,SHA-1,SHA-2等,经过比较后我们选择SHA-1算法,下面主要对使用的SHA-1安全散列算法作详细介绍。

4.2.1 SHA-1安全散列算法
1、预处理
预处理主要包括消息填充、消息分割和散列值初始化。
消息填充:原文长度L,补一位1,在后位补零使其达到448位,再在最后64补上原始消息长度二进制。使其达到512.
消息分割:将512位分成16个32位的消息,一般用M(i)表示,i=0,1,2······,5;
散列值初始化:SHA-1中用以下初始值:
H0=0x67452301;H1=0xEFCDAB89;H2=0x98BADCFE;H3=0x10325476;H4=0xC3D2E1F0
2、散列值计算
(1)将M(i)分成16个字W0,W1,…,W15;
(2)对于t=16到79,计算W16,W17,…W79;
(3)令A=H0,B=H1,C=H2,D=H3,E=H4。
(4)对于t=0到79,执行下面的循环:
TEMP=S5(A)+Ft(B,C,D)+E+Wt+Kt;
E=D;
D=C;
C=S30(B);
B=A;
A=TEMP。
(5)计算第一个5个字的缓冲区H0,H1,H2,H3,H4。
令:H0= H0+A;H1= H1+B;H2= H2+C;H3= H3+D;H4= H4+E.
下面进行简单说明:
Sn(X)是位循环移位操作符,Ft函数由以下定义:
Ft=(BandC)or(!BandD),0<=t<=19;
Ft=BxorCxorD,20<=t<=39;
Ft=(BandC)or(BandD)or(CandD),40<=t<=59;
Ft=BxorCxorD,60<=t<=79;
W16,W17,···,W79由下面公式计算:
Wn=S1(W(n-3)xorW(n-8)xorW(n-14)xorW(n-16))。

最后得到的消息摘要是一个160位的字符串,按下面的顺序标识:H0,H1,H2,H3,H4.

4.3  WEB服务器
防篡改模块需要内嵌在WEB服务器上,目前最常用的Web服务器是Apache和Microsoft的Internet信息服务器(Internet Information Server,IIS),下面进行简单介绍。


CHttpFilter::HttpFilterProc主要针对于事件发生时调用处理,可以重新编写这部分程序来提供我们所希望的处理。对于防篡改核心内嵌,即在OnUrlMap时验证客户要访问的文件。OnUrlMap是在服务器将逻辑 URL 映射到物理路径时通知筛选器。
DWORD Filter::OnUrlMap(CHttpFilterContext* pCtxt,
  PHTTP_FILTER_URL_MAP pMapInfo)   //OnUrlMap函数
{
       ···  
strcpy(URL, pMaplnfo一>pszURL);  //获得URL值
       ···
       SHA_1(URL);
       Cstring HASH=H0+H1+H2+H3+H4;  //得到散列值;
       ···
       if(!strcmp(HASH,ORIGINAL_HASH))  //比较得到的散列值和原始散列值
              return SF_STATUS_REQ_READ_NEXT;  //如果相同,允许访问
       else
              RestoreFile(c_URL);  //不同,恢复文件
              return SF_STATUS_REQ_READ_NEXT;
}
返回列表