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