會話劫持利用了TCP/IP工作原理來設(shè)計攻擊。TCP使用端到端的連接,即TCP用(源IP,源TCP端口號,目的IP,目的TCP端號)來唯一標(biāo)識每一條已經(jīng)建立連接的TCP鏈路。另外,TCP在進(jìn)行數(shù)據(jù)傳輸時,TCP報文首部的兩個字段序號(seq)和確認(rèn)序號(ackseq)非常重要。序號(seq)和確認(rèn)序號(ackseq)是與所攜帶TCP數(shù)據(jù)凈荷(payload)的多少有數(shù)值上的關(guān)系:序號字段(seq)指出了本報文中傳送的數(shù)據(jù)在發(fā)送主機(jī)所要傳送的整個數(shù)據(jù)流中的順序號,而確認(rèn)序號字段(ackseq)指出了發(fā)送本報文的主機(jī)希望接收的對方主機(jī)中下一個八位組的順序號。因此,對于一臺主機(jī)來說,其收發(fā)的兩個相臨TCP報文之間的序號和確認(rèn)序號的關(guān)系為:它所要發(fā)出的報文中的seq值應(yīng)等于它所剛收到的報文中的ackseq的值,而它所要發(fā)送報文中ackseq的值應(yīng)為它所收到報文中seq的值加上該報文中所發(fā)送的TCP凈荷的長度。
TCP會話劫持的攻擊方式可以對基于TCP的任何應(yīng)用發(fā)起攻擊,如HTTP、FTP、Telnet等。對于攻擊者來說,所必須要做的就是窺探到正在進(jìn)行TCP通信的兩臺主機(jī)之間傳送的報文,這樣攻擊者就可以得知該報文的源IP、源TCP端口號、目的IP、目的TCP端號,從而可以得知其中一臺主機(jī)對將要收到的下一個TCP報文段中seq和ackseq值的要求。這樣,在該合法主機(jī)收到另一臺合法主機(jī)發(fā)送的TCP報文前,攻擊者根據(jù)所截獲的信息向該主機(jī)發(fā)出一個帶有凈荷的TCP報文,如果該主機(jī)先收到攻擊報文,就可以把合法的TCP會話建立在攻擊主機(jī)與被攻擊主機(jī)之間。帶有凈荷的攻擊報文能夠使被攻擊主機(jī)對下一個要收到的TCP報文中的確認(rèn)序號(ackseq)的值的要求發(fā)生變化,從而使另一臺合法的主機(jī)向被攻擊主機(jī)發(fā)出的報文被被攻擊主機(jī)拒絕。TCP會話劫持攻擊方式的好處在于使攻擊者避開了被攻擊主機(jī)對訪問者的身份驗證和安全認(rèn)證,從而使攻擊者直接進(jìn)入對被攻擊主機(jī)的的訪問狀態(tài),因此對系統(tǒng)安全構(gòu)成的威脅比較嚴(yán)重。
前些日子對自定義http協(xié)議的各個數(shù)據(jù)進(jìn)行了研究,對于ip偽造的問題,我當(dāng)時給的建議是使用代理服務(wù)器,不過后來發(fā)現(xiàn),其實可以在http協(xié)議加入一個選項,來實現(xiàn)一個非偽造ip的偽造ip。如何理解呢?理由如下:~
一、方法概述
在http協(xié)議數(shù)據(jù)頭里面加入選項“x-forward-for”,例如:“x-forward-for:202.204.76.254”,這樣發(fā)送出去的包,就是一個特殊的包,在收包方看來,這個包的意思是,一個代理服務(wù)器發(fā)過來的數(shù)據(jù)包,而這個包的真是ip是“202.204.76.254”,其實還是實現(xiàn)的是三次握手,但是只不過是在發(fā)包的同時,對收包方提到了一個第三者。
二、試用范圍
因為現(xiàn)在的網(wǎng)站類的程序如果有IP限制的話,基本上都是會檢測是不是代理服務(wù)器發(fā)送的數(shù)據(jù)的,如果是代理服務(wù)器發(fā)送的數(shù)據(jù),那么他就把IP記為這個(透明)代理服務(wù)器發(fā)送的x-forward-for的IP。
以一段較為流行的php檢測ip的代碼為例:
function get_ip(){
if(getenv('HTTP_CLIENT_IP')) {
$gb_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$gb_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$gb_ip = getenv('REMOTE_ADDR');
} else {
$gb_ip = $_SERVER['REMOTE_ADDR'];
}
return $gb_ip;
}
那么大家可以看到這個IP是如何偽造的了。
三、應(yīng)對方法
當(dāng)然對于網(wǎng)站方面,這種偽造ip的情況雖然不是很多,但是如果在投票類的程序中,當(dāng)然很需要這方面的檢測了,呵呵。多多檢測HTTP_CLIENT_IP吧。貌似這個還沒有辦法偽造?.............................
四、總體看法
這個辦法之所以稱之為非偽造ip的偽造ip,主要就是利用了現(xiàn)在大多數(shù)網(wǎng)站程序檢測ip的一個漏洞。所以如果網(wǎng)站程序能夠重新審視一下自己的ip檢測辦法,這個方法就會慢慢失效的。呵呵。