簡述會話劫持攻擊的兩種形式
所謂會話劫持攻擊,就是結合了嗅探以及欺騙技術在內的攻擊手段。比如在一次正常的會話當中,攻擊者也作為第三方參與在其中,不過他并不參與對話而是將兩方進行對話所傳送的數(shù)據(jù)包中插入惡意數(shù)據(jù),當然也可以對雙方的對話進行監(jiān)聽甚至冒充為其中一方進行對話的接管。
我們可以把會話劫持攻擊分為兩種類型:1、中間人攻擊(Man In The Middle,簡稱MITM),2、注射式攻擊(Injection)
MITM攻擊簡介
這也就是我們常說的“中間人攻擊”,在網(wǎng)上討論比較多的就是SMB會話劫持,這也是一個典型的中間人攻擊。要想正確的實施中間人攻擊,攻擊者首先需要使用ARP欺騙或DNS欺騙,將會話雙方的通訊流暗中改變,而這種改變對于會話雙方來說是完全透明的。關于ARP欺騙黑客防線介紹的比較多,網(wǎng)上的資料也比較多,我就不在多說了,我只簡單談談DNS欺騙。DNS(Domain Name System),即域名服務器,我們幾乎天天都要用到。對于正常的DNS請求,例如在瀏覽器輸入www.hacker.com.cn,然后系統(tǒng)先查看Hosts文件,如果有相對應的IP,就使用這個IP地址訪問網(wǎng)站(其實,利用Hosts文件就可以實現(xiàn)DNS欺騙);如果沒有,才去請求DNS服務器;DNS服務器在接收到請求之后,解析出其對應的IP地址,返回給我本地,最后你就可以登陸到黑客防線的網(wǎng)站。而DNS欺騙則是,目標將其DNS請求發(fā)送到攻擊者這里,然后攻擊者偽造DNS響應,將正確的IP地址替換為其他IP,之后你就登陸了這個攻擊者指定的IP,而攻擊者早就在這個IP中安排好了惡意網(wǎng)頁,可你卻在不知不覺中已經(jīng)被攻擊者下了“套”……DNS欺騙也可以在廣域網(wǎng)中進行,比較常見的有“Web服務器重定向”、“郵件服務器重定向”等等。但不管是ARP欺騙,還是DNS欺騙,中間人攻擊都改變正常的通訊流,它就相當于會話雙方之間的一個透明代理,可以得到一切想知道的信息,甚至是利用一些有缺陷的加密協(xié)議來實現(xiàn)。
注射式攻擊簡介
這種方式的會話劫持攻擊持比中間人攻擊實現(xiàn)起來簡單一些,它不會改變會話雙方的通訊流,而是在雙方正常的通訊流插入惡意數(shù)據(jù)。在注射式攻擊中,需要實現(xiàn)兩種技術:1)IP欺騙,2)預測TCP序列號。如果是UDP協(xié)議,只需偽造IP地址,然后發(fā)送過去就可以了,因為UDP沒有所謂的TCP三次握手,但基于UDP的應用協(xié)議有流控機制,所以也要做一些額外的工作。對于IP欺騙,有兩種情況需要用到:1)隱藏自己的IP地址;2)利用兩臺機器之間的信任關系實施入侵。在Unix/Linux平臺上,可以直接使用Socket構造IP包,在IP頭中填上虛假的IP地址,但需要root權限;在Windows平臺上,不能使用Winsock,需要使用Winpacp(也可以使用Libnet)。例如在Linux系統(tǒng),首先打開一個Raw Socket(原始套接字),然后自己編寫IP頭及其他數(shù)據(jù)??梢詤⒖枷旅娴膶嵗a:
sockfd = socket(AF_INET, SOCK_RAW, 255);
setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
struct ip *ip;
struct tcphdr *tcp;
struct pseudohdr pseudoheader;
ip->ip_src.s_addr = xxx;
pseudoheader.saddr.s_addr = ip->ip_src.s_addr;
tcp->check = tcpchksum((u_short *)&pseudoheader,12+sizeof(struct tcphdr));
sendto(sockfd, buf, len, 0, (const sockaddr *)addr, sizeof(struct sockaddr_in));
對于基于TCP協(xié)議的注射式會話劫持攻擊,攻擊者應先采用嗅探技術對目標進行簡聽,然后從簡聽到的信息中構造出正確的序列號,如果不這樣,你就必須先猜測目標的ISN(初始序列號),這樣無形中對會話劫持加大了難度。
【編輯推薦】