您所在的位置: 首頁 >
安全研究 >
安全通告 >
基于Scapy實(shí)現(xiàn)西門子S7系列中間人攻擊
隨著工業(yè)不斷的發(fā)展,工業(yè)企業(yè)間合作不斷加強(qiáng),伴隨著工業(yè)4.0時(shí)代的來臨,傳統(tǒng)工控系統(tǒng)的物理隔離,正在被不斷打破,工控安全也越來得到了重視,無論從法律法規(guī)的要求還是企業(yè)需求,都在逐步擴(kuò)大中。但是,搞工控安全研究的人員,和成熟的工控安全產(chǎn)品卻寥寥無幾,難以滿足現(xiàn)狀的需求。工控安全是個(gè)跨學(xué)科的技術(shù),需要結(jié)合多方面的專業(yè)知識,需要較高的技術(shù)上要求。特別是工業(yè)控制系統(tǒng)中,協(xié)議也存在眾多的標(biāo)準(zhǔn),當(dāng)然也存在大量的私有協(xié)議,比如:西門子的是S7Comm協(xié)議,本文將基于scapy庫構(gòu)S7Comm協(xié)議數(shù)據(jù)包來實(shí)現(xiàn)對上位機(jī)進(jìn)行中間人攻擊。
一、Scapy介紹
Scapy是一個(gè)Python第三方庫,使scapy我們能夠發(fā)送,嗅探、分析并偽造數(shù)據(jù)包。從而可以實(shí)現(xiàn)掃描,跟蹤路由,探測,單元測試,攻擊或網(wǎng)絡(luò)發(fā)現(xiàn)。它可以取代hping、arpspoof、arp-sk,arping等工具來實(shí)現(xiàn)攻擊,Scapy是一個(gè)可構(gòu)建網(wǎng)絡(luò)數(shù)據(jù)包的強(qiáng)大第三方庫。
具有以下幾個(gè)特點(diǎn):
1.可以通過交互模式,對數(shù)據(jù)包進(jìn)行解析研究。
2.可以用來網(wǎng)絡(luò)數(shù)據(jù)包嗅探和并根據(jù)我們的需求構(gòu)造packet。
3. scapy已經(jīng)內(nèi)置了大量的網(wǎng)絡(luò)協(xié)議構(gòu)造方法,如:DNS,ARP,IP,TCP,UDP,它可幫助我們非常方便的構(gòu)造數(shù)據(jù)包,本次我們將使用scapy中的IP()、Ether()、ARP(),來實(shí)現(xiàn)網(wǎng)絡(luò)欺騙、實(shí)現(xiàn)中間人攻擊,并使用它來封裝上層的工控協(xié)議,偽造數(shù)據(jù)包對上位機(jī)發(fā)起攻擊。
IP類
Ether類
ARP類
代碼示例
接下來我們將使用scapy來封裝S7comm數(shù)據(jù)包。
二、S7comm介紹
S7Comm(S7 Communication)是西門子的私有協(xié)議,是西門子工業(yè)控制通訊協(xié)議簇里的一種,S7Comm協(xié)議是基于TCP/IP實(shí)現(xiàn)依賴于面向工控系統(tǒng)的傳輸服務(wù)。S7Comm協(xié)議被封裝在TPKT、ISO-COTP協(xié)議中,從而協(xié)議數(shù)據(jù)可夠通過TCP傳送。它用于PLC編程,早期的西門子私有協(xié)議S7comm通信,對安全考慮不足。不具備的加密功能,沒有任何防止重放攻擊機(jī)制,可輕易被利用。具體協(xié)議結(jié)構(gòu)如下圖所示:
三、中間人攻擊實(shí)現(xiàn)
中間人攻擊(Man-in-the-MiddleAttack,簡稱“MITM攻擊”)這種攻擊方法是通過各種技術(shù)手段將控制目標(biāo)系統(tǒng)的節(jié)點(diǎn),并將該節(jié)點(diǎn)邏輯上串在兩臺通信計(jì)算機(jī)之間,這個(gè)節(jié)點(diǎn)就稱為“中間人”。
中間人攻擊中我們要分別對上位機(jī)和PLC進(jìn)行欺騙。將上位機(jī)和PL的流量同時(shí)引入控制節(jié)點(diǎn)中,通過控制中間節(jié)點(diǎn)來實(shí)現(xiàn)傳輸數(shù)據(jù)的獲取、篡改等。攻擊示意圖如下所示:
攻擊步驟:
1、 第一步是利用ARP欺騙篡改PLC、上位機(jī)ARP緩存,實(shí)現(xiàn)劫持流量,這一步是實(shí)現(xiàn)中間人攻擊的關(guān)鍵,可根據(jù)ARP刷新時(shí)間,調(diào)整ARP欺騙頻率,維持劫持狀態(tài)。
2、 第二步:通過截取的流量的分析,獲取工控協(xié)議通信內(nèi)容例如通信端口,傳輸數(shù)值等。
3、 第三步:根據(jù)獲取的協(xié)議,偽造PLC設(shè)備與上位機(jī)數(shù)據(jù)傳輸,篡改數(shù)值、狀態(tài)來實(shí)現(xiàn)攻擊目的。
示例代碼: