新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于sniffer的網(wǎng)絡(luò)安全分析儀設(shè)計(jì)與實(shí)現(xiàn)

基于sniffer的網(wǎng)絡(luò)安全分析儀設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2017-06-08 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/201706/352621.htm

摘要

本作品在xilinx提供的spartan3e-500 Rev C開發(fā)平臺(tái)上成功地嵌入uclinux,并使用網(wǎng)絡(luò)安全開發(fā)包編寫代碼,實(shí)現(xiàn)了基于Sniffer技術(shù)的功能。

人機(jī)交互操作,通過telent命令或者超級(jí)終端實(shí)現(xiàn)。

一.系統(tǒng)設(shè)計(jì)

1.硬件設(shè)計(jì)

Xilinx公司的spartan3e starter kit 提供以太網(wǎng)10/100 phy 接口,JTAG USB下載,2個(gè)9引腳的RS-232串行接口等連接器和接口資源,并且其目標(biāo)應(yīng)用市場(chǎng)定位在消費(fèi)類、電信/數(shù)據(jù)通信、服務(wù)器、存儲(chǔ)器。結(jié)合開發(fā)板的優(yōu)勢(shì)推知,spartan3e starter kit 在嵌入小型操作系統(tǒng)后,在實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)捕捉及處理方面有一定的優(yōu)勢(shì),為我們的作品設(shè)計(jì)提供了寶貴的前提。

本設(shè)計(jì)選擇操作系統(tǒng)uclinux,uclinux 是 一種優(yōu)秀的嵌入式Linux版本。它集成了標(biāo)準(zhǔn)linux操作系統(tǒng)的穩(wěn)定性、強(qiáng)大的網(wǎng)絡(luò)功能和出色的文件系統(tǒng)等主要優(yōu)點(diǎn),更重要的是沒有MMU(內(nèi)存管理單元),更適合小型應(yīng)用。

基于以上考慮,我們可以使用edk套件搭建出uclinux運(yùn)行的硬件平臺(tái)。

2.軟件設(shè)計(jì)

基于信息安全專業(yè)的背景,以前使用過軟件版本的sniffer。本設(shè)計(jì)設(shè)想在搭建的uclinux平臺(tái)上實(shí)現(xiàn)sniffer功能,進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的捕捉以及處理,實(shí)現(xiàn)功能。

首先網(wǎng)絡(luò)流量分析是必要的,傻瓜式攻擊就可以讓網(wǎng)絡(luò)癱瘓,因此診斷網(wǎng)絡(luò)異常情況,是維護(hù)網(wǎng)絡(luò)的必備技能。以太局域網(wǎng)上普遍使用tcp/ip協(xié)議,要掌握整個(gè)局域網(wǎng)的使用情況,必須對(duì)底層的網(wǎng)絡(luò)傳輸數(shù)據(jù)包進(jìn)行捕獲并分析,才能準(zhǔn)確地判定以太局域網(wǎng)的網(wǎng)絡(luò)狀況。

而本次設(shè)計(jì)中使用了數(shù)據(jù)包捕獲開發(fā)包Libpcap(the Packet Capture Library),它是一個(gè)高層的編程接口,隱藏了操作系統(tǒng)的細(xì)節(jié),可以捕獲網(wǎng)絡(luò)上的所有數(shù)據(jù)包。Libpcap中使用了BPF過濾機(jī)制,使Libpcap具有捕獲特定數(shù)據(jù)包的功能。

基于以上分析,我們?cè)O(shè)想通過分析以太網(wǎng)網(wǎng)絡(luò)的數(shù)據(jù)包流向,用來診斷整個(gè)網(wǎng)絡(luò)是否出現(xiàn)了異常情況,實(shí)現(xiàn)了局域網(wǎng)安全分析的功能。另外,針對(duì)arp病毒的泛濫情況,特別開發(fā)了一個(gè)arp工具,用來對(duì)整個(gè)網(wǎng)絡(luò)的ip、mac地址進(jìn)行掃描,并快速的更新arp緩存。

二.系統(tǒng)實(shí)現(xiàn)

1.硬件實(shí)現(xiàn)

搭建硬件平臺(tái)流程,建議不要更改,有些是環(huán)環(huán)相套的。

(1.申請(qǐng)?jiān)u估版ip包

edk9.1提供的以太網(wǎng)控制器ip有兩種,一種是opb Ethernet ,另一種就是opb Ethernetlite,這兩種最主要的區(qū)別就是ethernet支持硬件過濾的混雜模式,而ethernetlite是一種簡(jiǎn)化了的控制器,適合于以太網(wǎng)的簡(jiǎn)單應(yīng)用,但卻不支持混在模式,本作品的設(shè)計(jì)前提就是網(wǎng)卡必須要工作再混在模式,所以只能選擇需要注冊(cè)使用的opb Ethernet,考慮到非專業(yè)設(shè)計(jì)公司使用,故申請(qǐng)了3個(gè)月的免費(fèi)ip使用權(quán)。若要參考本設(shè)計(jì)的話,該步驟是十分必須的。若需要,可以到xilinx公司的網(wǎng)站上進(jìn)行申請(qǐng),需要說明的是申請(qǐng)的ip許可包是跟pc的網(wǎng)卡地址綁定的,具體申請(qǐng)步驟不再詳述。

(2.定制板上資源

本作品用到的板上I/O接口:RS232_DCE、FLASH、DDR_SDRAM、Ethernet_Mac等。xilinx公司嵌入式套件EDK中xps提供的bsb(base system builder)可以輕松地實(shí)現(xiàn)板上資源的定制。下面就結(jié)合一些步驟圖片來說明下如何完成該硬件設(shè)計(jì)。

(1)啟動(dòng)xps9.1i,軟件系統(tǒng)會(huì)彈出如圖所示的對(duì)話框,其中共有三個(gè)選項(xiàng)。由于我們是要新建一個(gè)硬件平臺(tái),因此點(diǎn)選“Base System Bulider wizard(recommended)”, 點(diǎn)擊“OK”,進(jìn)入下一步向?qū)А?/p>

(2)在彈出的對(duì)話框中,點(diǎn)擊“Browse”按鈕,選擇一個(gè)目標(biāo)磁盤建立一個(gè)自己的工程文件夾并進(jìn)入,點(diǎn)擊保存,系統(tǒng)會(huì)自動(dòng)為此項(xiàng)目生成一個(gè)system.xmp(務(wù)必使用system文件名);點(diǎn)擊“OK”按鈕,進(jìn)入BSB歡迎對(duì)話框。

(3)在歡迎對(duì)話框中,選擇“I would like to create a new design”,點(diǎn)擊“Next”按鈕。

(4)進(jìn)入開發(fā)板選擇對(duì)話框,進(jìn)行如圖所示選擇。spartan-3E Starter Board 的版本有C跟D兩種,他們其實(shí)在接口資源以及內(nèi)置資源方面是非常相似的,僅有一處不同,DDR SDRAM存儲(chǔ)器容量的不同,C版本的只有32MB,而D版本的卻有64MB??梢愿鶕?jù)DDR SDRAM的型號(hào)來確定開發(fā)板的版本,我所使用的開發(fā)板,DDR SDRAM型號(hào)為MT46V32M16,由此確定出開發(fā)板型號(hào)為D。若不注重這個(gè)問題的話,選擇C跟D都是可以的。

(5)進(jìn)入處理器選擇對(duì)話框,因?yàn)閟partan-3E只支持軟核MicroBlaze,所以保留默認(rèn)設(shè)置即可。點(diǎn)擊“Next”進(jìn)入下一步。

(6)進(jìn)入MicroBlaze配置對(duì)話框,參考時(shí)鐘頻率選擇默認(rèn)值50MHz即可,MicroBlaze處理器的總線時(shí)鐘頻率選擇為“66.67”MHz。其中參考時(shí)鐘由開發(fā)板上的時(shí)鐘源提供,被用來產(chǎn)生總線和處理器的頻率。Cache setup選項(xiàng)點(diǎn)選“Enable”,其他項(xiàng)保持默認(rèn)即可,點(diǎn)擊“Next”進(jìn)入下一步。

(7)進(jìn)入I/O端口配置對(duì)話框。I/O設(shè)備選擇“RS232_DCE”,不選擇”RS232_DTE”和“Leds_8bit”。對(duì)于RS232_DCE,波特率選擇“115200”,并且打開中斷,其他選項(xiàng)默認(rèn)即可。點(diǎn)擊對(duì)話框右側(cè)的“Data Sheet”按鈕,可以看到每個(gè)外設(shè)的詳細(xì)資料,從這里我們可以或得很多幫助的,可以充分利用下。選擇完畢后點(diǎn)擊“Next”,進(jìn)入下一步。

(8)繼續(xù)I/O配置,在該對(duì)話框中只需要點(diǎn)選“Flash_16M×8”,peripheral選項(xiàng)列中選擇“OPB EMC”,點(diǎn)擊“Next”,進(jìn)入下一步。

(9)進(jìn)入外部存儲(chǔ)器與網(wǎng)絡(luò)接口對(duì)話框,如圖所示。

spartan-3E開發(fā)板使用使用外部存儲(chǔ)器DDR SDRAM,所以需要點(diǎn)選它。因?yàn)榫W(wǎng)絡(luò)數(shù)據(jù)捕獲需要通過網(wǎng)絡(luò)接口來實(shí)現(xiàn),所以“Ethernet_Mac”選項(xiàng)是必不可少的,同時(shí)需要把中斷打開,

點(diǎn)擊“Next”,進(jìn)入下一步。

(10)由于需要使用uclinux操作系統(tǒng),因此需要添加定時(shí)器,在出現(xiàn)的對(duì)話框中點(diǎn)擊“Add Peripherals”按鈕,在彈出的對(duì)話框中選擇“OPB TIMER”,然后點(diǎn)擊“OK”按鈕。

(11)在接下來的對(duì)話框中,timer mode點(diǎn)選“one timer is present”并開中斷,然后點(diǎn)擊“Next”,進(jìn)入下一步。

(12)進(jìn)入cache配置對(duì)話框。因?yàn)樵谙到y(tǒng)構(gòu)建之初,我們已經(jīng)選擇了對(duì)外部存儲(chǔ)器進(jìn)行cache緩存,所以在這里需要對(duì)其大小進(jìn)行設(shè)置,數(shù)據(jù)cache與指令cache分別為默認(rèn)的“8KB”和“2KB”即可,并且勾選“ICache”與“DCache”,之后點(diǎn)擊“Next”按鈕。

(13)剩下的步驟,可以一直點(diǎn)擊Next到generate。

(14)出現(xiàn)“the next step”對(duì)話框時(shí),點(diǎn)“OK”。

至此針對(duì)的硬件資源定制完成。

(3.混雜模式功能開啟(特別重要)

默認(rèn)情況下,以太網(wǎng)控制器ip核opb ethernet 的混在模式功能是沒有開啟的,需要在xilinx公司提供的emac v1_01_a驅(qū)動(dòng)代碼里面添加開啟代碼。具體步驟如下:

(1)System Assembly View1 視圖中,右鍵單擊Ethernet_Mac選擇Driver:emac_v1_01_a中的“Browse Driver Sources”之后,在彈出的文件對(duì)話框中點(diǎn)選src進(jìn)入該目標(biāo)打開xemac_selftest.c。

(2)編輯xemac_selftest.c,將 XEM_ECR_PROMISC_ENABLE_MASK添加到XEM_ECR_RESET_STATE 的定義中,記住添加的代碼前面有個(gè)位運(yùn)算符或“|”。

(4.添加支持操作系統(tǒng)的附加選項(xiàng)

(1)在System Assembly View1 視圖中,切換到“Bus Interface”,可以看到MicroBlaze系統(tǒng)中各個(gè)模塊與總線的連接情況。

(2)這里,我們需要對(duì)系統(tǒng)做如下添加:將窗口切換到“Ports”,打開“debug_module”,點(diǎn)擊“Interrupt”中的“Net”選項(xiàng),選擇“debug_module_Interrupt”。

(3)打開“opb_intc_0”,然后雙擊“L to H”。

(4)我們需要把debug_module_Interrupt加入到“Connected Interrupt”欄中,方法是在左側(cè)選中debug_module_Interrupt,點(diǎn)擊加號(hào),即可加入到右側(cè)的“Connected Interrupt”欄中。

(5.生成uclinux板上支持bsp

(1)由于本作品需要在MicroBlaze處理器上運(yùn)行uclinux,因此首先應(yīng)該將uclinux的配置文件petalinux_v1_00_b復(fù)制到EDKswlibbsp文件夾下。

(2)重新打開工程文件。

(3)進(jìn)行軟件平臺(tái)配置,點(diǎn)擊“software”菜單,啟動(dòng)“software platform setting”。

(4)系統(tǒng)會(huì)彈出軟件平臺(tái)的配置窗口,這里共有4個(gè)可配置項(xiàng),我們只需要配置其中的“software platform”、“”。對(duì)“software platform”進(jìn)行配置時(shí)候,點(diǎn)擊它,窗口右側(cè)為可配置參數(shù),包括兩個(gè)子窗口。在processor parameters中將“CORE_CLOCK_FREQ_Hz”的current value 修改為50000000;在os library settings”子窗口中,打開os下拉菜單,選擇petalinux(其實(shí)就是uclinux)。點(diǎn)擊左側(cè)的os and libraries,進(jìn)行配置。配置參數(shù)如下:

flash_memory_bank: 0;flash_memory: FLASH_16Mx8;main_memory_bank: 0

main_memory: DDR_SDRAM_16Mx16;stdin: RS232_DCE;stdout: RS232_DCE

點(diǎn)擊OK,保存配置。

(5)進(jìn)入EDK的software菜單,點(diǎn)擊 Generate BSP and Libraries,系統(tǒng)會(huì)自動(dòng)生成板級(jí)支持包與庫??梢栽诠こ棠夸浳募A下的/microblaze_0/libsrc/ petalinux_v1_00_b目錄中找到已生成的兩個(gè)配置文件Kconfig.auto和auto-config.in。

說明:Kconfig.auto,是針對(duì)kernel 2.6的,auto-config.in是針對(duì)kernel 2.4的。用記事本打開其中一個(gè)看看究竟,會(huì)發(fā)現(xiàn)都是一些#define 定義,原來硬件信息就是通過這些定義傳遞給內(nèi)核并編譯完成的。

3.嵌入uclinux

環(huán)境說明

1.嵌入uclinux,所需要的資源包petalinux-v0.30-rc1.tar.gz,可以從http://developer.petalogix.com/wiki/WikiStarthttp://developer.petalogix.com/wiki/WikiStart 網(wǎng)址下載得到。

2.windows xp + vmware(Redhat9)

3.ISE9.1(sp3)+EDK9.1(sp2)

4.Cisco TFTP Server

目錄說明

目錄

描述

D:petalinux

windows共享給vmware(redhat9)的目錄

/mnt/hgfs/123

vmware(redhat9)共享給windows的目錄

/embedded

petalinux-v0.30-rc1.tar.gz解壓到該目錄

操作步驟

(1.vmware的redhat9圖形界面安裝vmware tools。

(1)開啟虛擬機(jī)中的redhat9系統(tǒng);

(2)點(diǎn)擊“虛擬機(jī)”菜單中的“設(shè)置”選項(xiàng),在cd-rom選項(xiàng)中,點(diǎn)選“使用iso鏡像”,并將文件定位到vmware安裝目錄中l(wèi)inux.iso;

(3)點(diǎn)擊“虛擬機(jī)”菜單中的“安裝vmware工具”,此時(shí)在桌面會(huì)出現(xiàn)光盤圖標(biāo)vmware tools;

(4)雙擊光盤圖標(biāo)進(jìn)入,點(diǎn)擊可執(zhí)行文件rpm運(yùn)行,稍許便可以安裝完成。

(2.建立共享文件夾

我們需要建立一個(gè)可以在windows與linux系統(tǒng)之間共享的文件夾,通過虛擬機(jī)vmware來建立。在建立之前請(qǐng)確保vmware tools已經(jīng)安裝成功。

(1)點(diǎn)擊“虛擬機(jī)”菜單中的“設(shè)置”選項(xiàng),在出現(xiàn)的對(duì)話框中點(diǎn)擊“選項(xiàng)”,進(jìn)入設(shè)置頁面。

(2)點(diǎn)擊“共享文件夾”,在右側(cè)點(diǎn)擊“添加”按鈕,進(jìn)入設(shè)置向?qū)?。在名稱欄填寫“123”,在主機(jī)文件夾添加windows共享目錄D:petalinux,點(diǎn)擊“完成”。

這樣在系統(tǒng)每啟動(dòng)之后,虛擬機(jī)redhat9都會(huì)將windows共享文件夾D:petalinux掛載到/mnt/hgfs/123中。至此,windows與linux之間的文件共享通道已經(jīng)建立完成。這對(duì)于以后的嵌入式開發(fā)工作來說,是至關(guān)重要的。除此方法之外,當(dāng)然還有另外的文件共享方法,比如ftp等。但是相比較而言,這種方法更為簡(jiǎn)便。

(3.建立內(nèi)核編譯環(huán)境

嵌入式開發(fā),需要在pc的linux虛擬環(huán)境中建立交叉編譯環(huán)境。我們使用了開發(fā)包petalinux-v0.30-rc1.tar.gz,下面就此包的使用方法來說明下。

(1)將petalinux-v0.30-rc1.tar.gz開發(fā)包復(fù)制到redhat9系統(tǒng)中的工作目錄/embedded。

(2)開啟終端,執(zhí)行命令cd /embedded,進(jìn)入工作目錄;

(3)在該目錄,執(zhí)行解壓縮開發(fā)包的操作,命令為:tar -zxvf petalinux-v0.30-rc1.tar.gz;

(4)解壓縮完成之后,會(huì)在該目錄中生成一個(gè)文件夾petalinux-v0.30-rc1;

(5)下面來說明下這個(gè)文件夾的結(jié)構(gòu)

petalinux-v0.30-rc1

+ tools ;包含編譯器(gcc)工具和各種提供簡(jiǎn)便操作的幫助腳本

| + common

| | + petalogix

| | + bin

| + linux-i386

| + microblaze-uclinux-tools

|

+ software

| + petalinux-dist //主要的linux編譯環(huán)境

| + linux-2.6.x-petalogix //linux2.6內(nèi)核

| + uClinux-2.4.x //linux 2.4內(nèi)核

| + user-apps //用戶程序文件夾 |

+ hardware

| + reference-designs //參考設(shè)計(jì)

| + user-platforms //edk硬件工程

| + edk_user_repository // petalinux配置文件

| +fs-boot

+ settings.sh/settings.sch //腳本程序,將編譯環(huán)境定位到該開發(fā)包,執(zhí)行哪一個(gè)腳本,取決于shell類型。

(6)特別要說明的是,每次開啟一個(gè)終端,都得執(zhí)行腳本文件settings.sh/sch,否則是報(bào)錯(cuò)error:“PETALINUX environment variable not set”。

(4復(fù)制edk工程目錄

復(fù)制edk工程目錄到user-platforms,這就需要用到windows與linux之間的共享文件夾。具體操作方法比較簡(jiǎn)單,不再贅述。但是有一點(diǎn)必須要說明:

edk工程文件名必須是system.xmp,這是因?yàn)殚_發(fā)包里面的腳本,比如說petalinux-copy-autoconfig,其作用就是將工程目錄中l(wèi)ibgen生成的kconfig.auto 轉(zhuǎn)換成linux格式并復(fù)制到當(dāng)前活動(dòng)的platform中,但是其只會(huì)尋找system.xmp的工程!

(5.select a platform

(1)在終端設(shè)置petalinux環(huán)境

在 petalinux-v0.30-rc1目錄下面,執(zhí)行source setthings.sh命令

(2)終端進(jìn)入petalinux-dist目錄,執(zhí)行make menuconfig命令,之后會(huì)出現(xiàn)

內(nèi)核配置頁面,如下圖所示做出選擇:

退出并保存設(shè)置

(6.working with autoconfig

進(jìn)入user-platforms文件夾中的edk工程目錄uclinux,執(zhí)行下面腳本petalinux-copy-autoconfig

(7.petalinx配置及內(nèi)核編譯

此步驟是依照自己的需要,來進(jìn)行內(nèi)核裁剪的,但是有些地方必須注意,需要把默認(rèn)選擇了的選項(xiàng)給去掉,負(fù)責(zé)會(huì)報(bào)錯(cuò)。

(1)進(jìn)入petalinux-dist目錄,運(yùn)行命令make menuconfig,出現(xiàn)內(nèi)核配置對(duì)話框,選擇進(jìn)入Kernel/Library/Defaults selection,出現(xiàn)下圖所示頁面,并依照?qǐng)D做出類似選擇。

退出并保存;

(2)緊接著就跳出了Linux Kernel Configuration 頁面,在這里我們需要做出如下變動(dòng):

依此順序 NetworkingàNetworking options進(jìn)入配置頁面,選擇Packet socket并退出到Linux Kernel Configuration 頁面;

依此順序Device DriversàNetwork device supportàEthernet(10 or 100Mbit)進(jìn)入配置頁面,選擇Xilinx 10/100 OPB EMAC support,取消選擇Xilinx 10/100 OPB EMACLITE support,退出到Device Drivers配置頁面;

找到Input device support,進(jìn)入配置頁面,取消Keypad Test Device選擇;

一路退出并最終保存;

(3)之后會(huì)跳出Main Menu配置頁面

進(jìn)入System Settings配置頁面,取消 Copy final image to tftpboot的選擇,再進(jìn)入Flash Partition Table將Partition 3 size設(shè)置為80000并退出到main menu;

進(jìn)入core applications配置頁面,選擇enable console shell;取消選擇agetty并退出到main menu;

進(jìn)入 Library Configuration配置頁面,選擇 Bulid Libpcap并退出到main menu;

進(jìn)入Filesystem Applications配置頁面,取消flatfsd選擇并退出到main menu;

進(jìn)入 Network Applications配置頁面,取消dhcpcd-new(2.0/2.4)選擇并退出到main menu;

進(jìn)入BusyBox配置頁面,選擇chmod并退出;

一路退出,并最后保存設(shè)置;

(4)編譯內(nèi)核

運(yùn)行命令make dep,是建立源文件跟頭文件的依賴關(guān)系;

運(yùn)行命令make all,進(jìn)行內(nèi)核編譯工作;

一段時(shí)間之后,可以順利編譯完成。成功之后會(huì)在petalinux-dist目錄中發(fā)現(xiàn)多了個(gè)images文件夾,這里面就是我們需要的文件。

(8.使用bootloader固化內(nèi)核設(shè)計(jì)

(1)在windows系統(tǒng)下打開建立的edk工程system.xmp,在project information area中的Applications列做如下圖所示的修改:

a.先進(jìn)行“Set Compiler Options”,如圖所示點(diǎn)擊右鍵之后會(huì)出現(xiàn)一個(gè)設(shè)置對(duì)話框,其中有三個(gè)選項(xiàng)列,分別是Environment,Debug and Optimization,Paths and Options。要做的修改如下表所示:

Attribute

value

Environment

Application mode

executable

Output ELF file

default value

Linker Script

Use default Linker Script

Stack Size

1K

Debug and Optimization

Optimization Level

Size Optimized(-Os)

Advance

Other Compiler Options to Append

-Wall

b.添加fs-boot 文件夾里面的c源文件跟頭文件

使用共享文件夾將petalinux-v0.30-rc1/hardware目錄下面的fs-boot文件夾復(fù)制到windows系統(tǒng);將sources跟headers項(xiàng)目下的文件刪除,具體方法是在文件上面點(diǎn)右鍵選擇“remove”;然后在“sources”跟“headers”上點(diǎn)右鍵,選擇“Add Existing Files”,將位置定位到fs-boot下面的文件,完成添加步驟。

c. make project : TestApp_Peripheral inactive,方法是點(diǎn)右鍵,選擇“Make Project Inactive”。

(2)使用xps打開edk工程system.xmp,在Hardware菜單下選擇“Generate Netlist”生成網(wǎng)表,進(jìn)程無誤之后,再在該菜單下選擇“Generate Bitstream”,生成硬件比特文件。

(3)建立一個(gè)超級(jí)終端,參數(shù)如下:

波特率:115200,數(shù)據(jù)位:8,奇偶校驗(yàn):無,停止位:1,數(shù)據(jù)流控制:無。

連接串口線,電源線,jtag下載線,RJ45網(wǎng)絡(luò)接口,開通電源。

(4)在xps菜單“Device Configuration”下選擇“Download Bitstream”,進(jìn)行硬件比特流文件的下載;下載完成之后會(huì)出現(xiàn)如下提示:

FS-BOOT:Waiting for SREC image……

表示硬件比特流已經(jīng)下載成功。

現(xiàn)在固化內(nèi)核需要做的有以下幾個(gè)步驟;

a.網(wǎng)上下載tftp服務(wù)器,使用windows跟linux共享文件目錄將petalinux-dist目錄下新生成的images復(fù)制到windowsx系統(tǒng)目錄下面,并將該images目錄作為tftp服務(wù)器的根目錄。

b.在超級(jí)終端下,選擇傳送à發(fā)送文本文件,定位到images目錄下面的u-boot.srec,進(jìn)行文件傳送,成功之后,出現(xiàn)如下“u-boot>”提示。

c.輸入命令 loadb,之后會(huì)出現(xiàn)類似于“Ready for binary download to {address} at 115200 bps…

出現(xiàn)該提示之后,超級(jí)終端à傳送à傳送文件,images目錄下的ub.config.img,通訊協(xié)議選擇Kermit;

完成傳輸之后,輸入命令autosrc 目的就是要啟動(dòng)剛傳輸?shù)哪_本文件。

緊接著輸入以下命令,進(jìn)行環(huán)境設(shè)置

U-Boot> setenv ipaddr 192.168.158.210

U-Boot>setenv serverip 192.168.158.57

U-Boot>saveenv

說明:serverip就是tftp所在windows系統(tǒng)的ip地址,可以在cmd命令行下通過ipconfig來查看。ipaddr是目標(biāo)板ip地址,可以自己設(shè)定,只要跟serverip地址在同一個(gè)網(wǎng)段即可。

d.完成內(nèi)核下載

U-Boot>run update_uboot

U-Boot>run update_kernel

命令執(zhí)行完成之后,就完成了內(nèi)核下載工作。

(9.固化硬件設(shè)計(jì)

使用impact工具將edk工程目錄下面的download.bit文件轉(zhuǎn)換成mcs格式的PROM文件,并燒入開發(fā)板上的PROM:xcf04,將fpga配置方式選擇為主串配置方式即可,該步驟不再贅述。

下載完成之后,板子重新上電,在超級(jí)終端就會(huì)發(fā)現(xiàn)系統(tǒng)的啟動(dòng)過程。至此,uclinux的嵌入式系統(tǒng)已經(jīng)安裝成功。

2.軟件實(shí)現(xiàn)

sniffer

(1)流程圖

(2)設(shè)計(jì)明細(xì)

◆ 嗅探器的開發(fā)

嗅探器的功能是嗅探以太網(wǎng)上的數(shù)據(jù)包,并且按照用戶輸入的參數(shù)進(jìn)行格式化輸出。

源代碼核心函數(shù)介紹:

1)查找網(wǎng)絡(luò)接口

int pcap_findalldevs(pap_if_t **alldevsp,char *errbuf)

-l 調(diào)用pcap_findalldevs查找機(jī)器的所有可用的網(wǎng)絡(luò)接口,并用一個(gè)網(wǎng)絡(luò)接口鏈表返回,然后打印出本機(jī)的網(wǎng)卡接口信息。

2)打開網(wǎng)絡(luò)接口

pcap_t* pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf)

-i 指定網(wǎng)卡接口(device)的值,-p指定promisc的值,值為1,表示設(shè)置網(wǎng)卡為混雜模式,值為0,表示不設(shè)置為混雜模式。本函數(shù)返回一個(gè)句柄。

3)捕獲指定的網(wǎng)卡

int pcap_loop(pcap_t* p,int cnt, pcap_handler callback,u_char *user)

-c 指定cnt的數(shù)值,cnt是捕獲的數(shù)據(jù)包的個(gè)數(shù),-1表示捕獲個(gè)數(shù)為無限個(gè)。

每次捕獲一個(gè)數(shù)據(jù)包就調(diào)用callback指示的回調(diào)函數(shù)。所以,利用這個(gè)回調(diào)函數(shù)的特點(diǎn),程序可以循環(huán)捕捉數(shù)據(jù)包并

調(diào)用回調(diào)函數(shù)進(jìn)行分析。

4)數(shù)據(jù)包處理

使用pcap_loop捕獲了數(shù)據(jù)包后,我們需要調(diào)用回調(diào)函數(shù)來分析以太網(wǎng)協(xié)議,由于以太網(wǎng)協(xié)議是分層的,所以我們

需要根據(jù)以太網(wǎng)的數(shù)據(jù)包的類型字段來判斷協(xié)議類型,然后逐一進(jìn)行分析,并輸出協(xié)議報(bào)頭和內(nèi)容。還要根據(jù)用戶的輸入

參數(shù)進(jìn)行特殊的格式化輸出,這樣子可以便于分析網(wǎng)絡(luò)的通信狀況。

1>以太網(wǎng)協(xié)議分析

void ether_printer(u_char *user, const struct pcap_pkthdr *h, const u_char *p)

本函數(shù)處理以太網(wǎng)報(bào)頭,并輸出以太網(wǎng)的mac地址流向。另外,根據(jù)以太幀的上層協(xié)議類型字段進(jìn)行逐一分析,

0x0806表示arp協(xié)議,0x0800表示ip協(xié)議。并分別調(diào)用各自的分析函數(shù)。

-m 指定輸出以太網(wǎng)的網(wǎng)卡mac地址流。默認(rèn)情況不會(huì)輸出硬件地址流向。

2>arp協(xié)議分析

void arp_printer(u_char *user, const struct pcap_pkthdr *h, const u_char *p)

本函數(shù)處理arp協(xié)議報(bào)頭,并分析arp的操作碼,按照arp requset和arp reply兩種數(shù)據(jù)包進(jìn)行輸出。

-n 指定輸出的格式,輸出域名而不是ip地址。

3>ip協(xié)議分析

void ip_printer(u_char *user, const struct pcap_pkthdr *h, const u_char *p)

本函數(shù)按照ip報(bào)頭里面的上層協(xié)議字段,分tcp(6)、udp(17)和icmp(1)三種協(xié)議進(jìn)行分析處理。

4>tcp協(xié)議分析

void tcp_printer(u_char *user, const struct pcap_pkthdr *h, const u_char *p)

本函數(shù)分析tcp協(xié)議,輸出源ip地址,源端口,目的ip地址,目的端口。

-n指定輸出的格式,輸出域名而不是ip地址。

-a 解析端口號(hào)為相應(yīng)的服務(wù)名

-v 輸出tcp的詳細(xì)信息,包括序列號(hào),確認(rèn)應(yīng)答號(hào),控制標(biāo)志,窗口大小,檢查和,緊急指針,包長度,服務(wù)類型,ip段偏移值,生存周期,如果指定了-x,還可以輸出數(shù)據(jù)包的十六進(jìn)制內(nèi)容。

5>udp協(xié)議分析

void udp_printer(u_char *user, const struct pcap_pkthdr *h, const u_char *p)

本函數(shù)分析udp協(xié)議,輸出源ip地址,源端口,目的ip地址,目的端口。

-n指定輸出的格式,輸出域名而不是ip地址。

-a 解析端口號(hào)為相應(yīng)的服務(wù)名

-v 輸出udp的詳細(xì)信息,包括包長度,服務(wù)類型,ip段偏移值,生存周期,如果指定了-x,還可以輸出數(shù)據(jù)包的十六進(jìn)制內(nèi)容。

6>icmp協(xié)議分析

void icmp_printer(u_char *user, const struct pcap_pkthdr *h, const u_char *p)

本函數(shù)分析icmp協(xié)議,輸出icpm協(xié)議的源ip地址,目的ip地址,以及類型,比如echo request和echo reply。

-n指定輸出的格式,輸出域名而不是ip地址。

5)數(shù)據(jù)包統(tǒng)計(jì)

本程序使用SIGINT信號(hào),在鍵盤上的Ctrl+C快捷鍵按下后發(fā)出終止信號(hào)SIGINT,然后程序調(diào)用信號(hào)處理函數(shù),輸出數(shù)據(jù)包的總大小,捕獲時(shí)間,還有arp、ip、tcp、udp、icmp、ether網(wǎng)的數(shù)據(jù)包總個(gè)數(shù)以及占用的百分比。

signal(SIGINT, sigIntHandler) //用來設(shè)定SIGINT信號(hào)

void sigIntHandler(int sig) //SIGINT信號(hào)處理函數(shù)

6)其他輔助函數(shù)

char *copy_argv(register char **argv) //BPF內(nèi)核過濾參數(shù)處理

int32_t gmt2local(time_t t) //本地時(shí)間轉(zhuǎn)換函數(shù)

void ts_print(register const struct timeval *tvp) //時(shí)間打印函數(shù)

void getportname(int portn,char portch[], char *protocol) //端口號(hào)->服務(wù)名

static void hex_print(const u_char *buf, int len, int offset)//

十六進(jìn)制打印

【域名處理】

struct {

unsigned long int ipaddr;

char hostname[MAXSTRINGSIZE];

}nametable[MAXENTRY]; //ip域名高速緩存

int tbllength=0;

void intohost(unsigned long int iadd, char *hn)

void reghost(unsigned long int iadd)

void print_hostname(u_char *ipadd)

arp tool

(1)流程圖


(2)程序明細(xì)

★arptool設(shè)計(jì)

arptool用于掃描局域網(wǎng)的ip、mac地址對(duì)應(yīng)表,并且具有發(fā)送arp數(shù)據(jù)包的功能,可以對(duì)付局域網(wǎng)的arp欺騙攻擊。

源代碼核心函數(shù)介紹:

1) 取得本機(jī)ip地址

int get_ip(struct in_addr* addr)

本函數(shù)使用ioctl系統(tǒng)調(diào)用獲得系統(tǒng)ip地址,并保存到addr結(jié)構(gòu)體中。

2) 取得子網(wǎng)掩碼

int get_mask(struct in_addr* addr)

本函數(shù)使用ioctl系統(tǒng)調(diào)用獲得子網(wǎng)掩碼,并保存到addr結(jié)構(gòu)體中。

3) 取得本機(jī)硬件地址

int get_packet_sock(struct sockaddr_ll* sll, char *device, u_char hwaddr[])

本函數(shù)使用ioctl系統(tǒng)調(diào)用獲得本機(jī)硬件地址,并保存到addr結(jié)構(gòu)體中。

同時(shí)可以自己定義硬件地址,用來和arpsend配合。

同時(shí)生成一個(gè)sockaddr_ll結(jié)構(gòu)體,用來發(fā)送arp數(shù)據(jù)包。

4) 嗅探arp數(shù)據(jù)包

void* sniff(void* myip)

利用嗅探數(shù)據(jù)包,并指定arp數(shù)據(jù)包,目標(biāo)地址為本機(jī)ip,回調(diào)函數(shù)為

void handler(u_char* user, const struct pcap_pkthdr* hdr, const u_char* pack)

5) 發(fā)送arp數(shù)據(jù)包

int arpsend_local(int sock, struct sockaddr_ll* sll,u_char* pdip, u_char* pdmac)

int arpsend(int sock, struct sockaddr_ll* sll, u_long SrcIP, u_long DstIP, u_char DstHW[])

arpsend_local為列表ip、mac地址所用的本機(jī)arp發(fā)包函數(shù)。

arpsend是用來發(fā)送自定義的arp數(shù)據(jù)包,供主函數(shù)調(diào)用。

-n 指定發(fā)送的arp包的個(gè)數(shù)

-a 指定發(fā)送arp request包,默認(rèn)的是arp reply包

-w 指定發(fā)送數(shù)據(jù)包的時(shí)間間隔(秒數(shù)),默認(rèn)是1秒

-d 指定發(fā)送數(shù)據(jù)包的目標(biāo)ip地址

-s 指定發(fā)送數(shù)據(jù)包的源ip地址

-t 指定發(fā)送數(shù)據(jù)包的目標(biāo)硬件地址

-r 指定發(fā)送數(shù)據(jù)包的源硬件地址

6) 輸出ip-mac對(duì)應(yīng)表

int listIPMAC(u_char *device)

本函數(shù)里面用新的線程進(jìn)行監(jiān)聽,線程函數(shù)為sniff,同時(shí)用arpsend_local發(fā)送本機(jī)的arp數(shù)據(jù)包,然后調(diào)用下面的函數(shù)。

void handler(u_char* user, const struct pcap_pkthdr* hdr, const u_char* pack)

本函數(shù)是嗅探arp數(shù)據(jù)包的回調(diào)函數(shù),讀取嗅探的arp包,并解析出來源ip和源mac地址,然后輸出ip、mac對(duì)應(yīng)表。

3.用戶程序建立以及microblaze 上運(yùn)行

程序板上調(diào)試可以使用網(wǎng)絡(luò)文件系統(tǒng)NFS,但是我的nfs建立不起來,只能使用了另一種方法,因?yàn)榘l(fā)現(xiàn)板上uclinux系統(tǒng)有tftp命令,故使用windows系統(tǒng)下的tftp服務(wù)器。具體方法如下:

  1. 使用petalinux-new-app腳本建立用戶程序,并編譯。具體方法參考user-apps目錄下面的README。

  2. 將生成的執(zhí)行文件通過共享文件夾復(fù)制到tftp服務(wù)器根目錄

  3. 目標(biāo)板上電啟動(dòng)之后,在超級(jí)終端,使用ifconfig eth0 x.x.x.x命令分配板上系統(tǒng)一個(gè)ip地址。

  4. 開啟tftp服務(wù)器,進(jìn)入板上系統(tǒng)的可寫入目錄/var(ramfs文件系統(tǒng)),執(zhí)行命令

tftp 192.168.158.57(tftp服務(wù)器ip) –g –r 可執(zhí)行文件名

  1. 修改可執(zhí)行文件的權(quán)限 chmod 755 可執(zhí)行文件名

(6)./可執(zhí)行文件,查看運(yùn)行結(jié)果。

4.軟硬件融合

當(dāng)程序的運(yùn)行情況符合自己的預(yù)期的時(shí)候,就可以將其加載到操作系統(tǒng)內(nèi)核了。具體方法如下:

  1. redhat9系統(tǒng),在已經(jīng)建立了petalinux環(huán)境的終端中,執(zhí)行命令進(jìn)入

petalinux-dist目錄,執(zhí)行命令make image

  1. 將新生成的images文件夾通過共享文件夾復(fù)制到windows系統(tǒng)中tftp服務(wù)器根目錄下。

  2. 開啟tftp服務(wù)器,板子上電,當(dāng)出現(xiàn)“hit anykey to stop autoboot”時(shí)候,敲擊鍵盤上某個(gè)鍵,此時(shí)會(huì)出現(xiàn)“U-Boot>”提示,輸入命令“run update_kernel”執(zhí)行之,經(jīng)過一段時(shí)間之后,內(nèi)核就會(huì)更新完成。

  3. 重新上電啟動(dòng),就會(huì)在/bin目錄下面找到編譯成功的用戶程序。

功能特色

嵌入式系統(tǒng)功能及特色:

在xilinx公司提供的開發(fā)板上,實(shí)現(xiàn)了基于fpga的嵌入式設(shè)計(jì),成功地固化操作系統(tǒng)uclinux。fpga的配置方式為主串方式;板上的DDR SDRAM(MT46V32M16)相當(dāng)于系統(tǒng)內(nèi)存,Intel StrataFlash Parallel NOR FLASH相當(dāng)于系統(tǒng)硬盤;嵌入的系統(tǒng)支持了多文件系統(tǒng),比如romfs,ramfs。ramfs非常適合于嗅探結(jié)果的臨時(shí)存放,方便了分析;以太網(wǎng)卡驅(qū)動(dòng)初始化添加了混雜模式,為程序的全網(wǎng)嗅探提供了可能;標(biāo)準(zhǔn)輸入輸出設(shè)備為串口,同時(shí)也支持telnet遠(yuǎn)程控制操作。

程序功能及特色:

嗅探器的實(shí)現(xiàn),主要使用了網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包libpcap。編寫的代碼可捕獲tcp,udp,arp,icmp,ip等協(xié)議的數(shù)據(jù)包,并可實(shí)現(xiàn)協(xié)議,ip,端口等的過濾以及詳細(xì)的基于ip,協(xié)議的流量統(tǒng)計(jì)功能;arp工具可輸出局域網(wǎng)的ip-mac映射表,并可發(fā)送特定ip,mac地址的arp數(shù)據(jù)包以及時(shí)糾正錯(cuò)誤的arp緩存。

系統(tǒng)測(cè)試

測(cè)試環(huán)境

本作品測(cè)試的環(huán)境是以太局域網(wǎng)。

測(cè)試設(shè)備

有鏡像端口的交換機(jī)或者10BASE-T Ethernet Hub

工具使用流程簡(jiǎn)述

  1. 使用命令 nsa –i eth0,根據(jù)結(jié)果以及流量統(tǒng)計(jì)分析可疑ip地址,初步認(rèn)識(shí)該ip地址行為。

  2. 使用nsa提供的參數(shù),對(duì)特定的數(shù)據(jù)包進(jìn)行協(xié)議,ip地址,端口號(hào),或者mac地址的過濾,進(jìn)行詳細(xì)分析。

功能測(cè)試

測(cè)試-: 局域網(wǎng)內(nèi)的異常行為是很多的,但是異常行為或多或少都會(huì)在數(shù)據(jù)包行為,比如流向,頻度,端口特征等方面體現(xiàn)出來,因此是可以分析出來的?,F(xiàn)在只選擇一種行為arp欺騙進(jìn)行數(shù)據(jù)包的偵測(cè)分析。

步驟描述:

1.模擬出arp欺騙行為。

2.打開超級(jí)終端,設(shè)定各個(gè)參數(shù)。目標(biāo)板上電,在超級(jí)終端使用ifconfig eth0 命令,分配給嵌入式系統(tǒng)同一網(wǎng)段的ip地址。

3.telnet命令登陸目標(biāo)板,用戶名,密碼均為root。

4.使用命令nsa –i eth0 arp > /var/result,進(jìn)行arp數(shù)據(jù)包捕獲,一段時(shí)間之后,使用ctrl+c命令停止。

5.使用命令 vi /var/result查看抓包結(jié)果。

測(cè)試結(jié)果及分析

模擬出來的arp欺騙,其顯著特征就是要不斷地發(fā)送arp回應(yīng)包來更新受害主機(jī)的arp緩存來達(dá)到欺騙的目的。通過使用我們的程序可以抓到如圖所示的arp數(shù)據(jù)包,網(wǎng)關(guān)mac地址為假,可以肯定的是有臺(tái)主機(jī)在進(jìn)行arp欺騙并冒充網(wǎng)關(guān)的角色。

測(cè)試二:

綜合抓包測(cè)試,主要進(jìn)行nsa工具的全方位演示

1.nsa -i eth0 –na 抓取eth0接口并輸出數(shù)據(jù)流向以及應(yīng)用層協(xié)議和域名名稱并統(tǒng)計(jì)。

2. nsa -i 1 -c 4444 抓取指定個(gè)數(shù)的1號(hào)接口數(shù)據(jù)包并統(tǒng)計(jì)。

3.nsa ip src host 192.168.158.57 and tcp port 80 抓取ip地址為192.168.158.57的http協(xié)議的數(shù)據(jù)流向并統(tǒng)計(jì)。

4. nsa -v -x src net 192.168 and dst port 80 抓取網(wǎng)絡(luò)地址為192.168網(wǎng)絡(luò)的http協(xié)議的數(shù)據(jù)包并打印16進(jìn)制數(shù)據(jù)內(nèi)容以及包頭信息。

測(cè)試三:arptool測(cè)試

功能一:列出ip-mac映射表,使用命令arptool –l

結(jié)果:

功能二:指定ip、mac,發(fā)送arp數(shù)據(jù)包

arptool -d 192.168.158.57 -s 192.168.158.210 -r 00:0A:35:00:22:01 –n 3

使用該命令向192.168.158.57發(fā)送192.168.158.210正確的arp數(shù)據(jù)包3次。



評(píng)論


技術(shù)專區(qū)

關(guān)閉