
CNC 全名為「電腦數值控制」,是一種工廠內用來製造產品的工具機,這類機器已廣泛使用多年,而且在過去 10 年當中,由於連線能力的提升,這類工具機的應用還變得更廣。連線能力的提升也使得這類工具機更依賴軟體來運作,因此也更容易遭到駭客攻擊。這項弱點起因於工廠環境充斥著各式各樣的技術,但使用者卻缺乏安全觀念,不知該如何保護系統。
本系列三篇部落格將探討 CNC 工具機相關的資安風險。我們針對四家代表性廠商進行了一系列資安評估,同時分析了工業 4.0 潮流下的一些技術發展,並針對真實世界安裝情境進行一系列的攻擊實驗。
以下是這份研究在挑選廠商時的幾個條件:
- 地理區域分散 (也就是總部和分支機構遍部全球),同時業務也遍布全球。
- 在市場上已經有數十年歷史。
- 規模龐大,例如年營收至少 10 億美元以上。
- 採用業界廣泛使用技術,遍及各種不同製造領域。
了解 CNC 工具機
工具機是一種使用刀具來將一塊原料切削成產品的裝置,這個過程稱為機械加工,它可生產出符合特定幾何形狀的成品。機械加工是一種消去法,換句話說,就是將不要的部分削除來創造出想要的形狀。
所謂「數位控制」(NC) 是一種透過電腦來控制工具機的技術,這項技術革命性改變了工具機,讓它們變得更加精準,使用上也更有彈性。NC 工具機現在廣泛應用於製造業,但也可應用於其他類型的設備,例如雷射與彎曲機。
基本概念
為了讓讀者更容易理解我們的研究結果,以下稍微介紹工具機的一些基本概念:

- 數值控制。NC 是這台機器最重要的單元,因為它控制了整個流程。這套系統包含了視覺化程式設計功能,可加快製造程序的設定。此外,NC 一定會配備人機介面 (HMI) 來幫助操作人員控制機器。
- 程式設計。工具機最普遍使用的程式設計語言是「G-code」(或稱為「G 碼」,也就是 RS-274),開發於 1950 年代。其程式是一連串的指令,每個指令由一個字母開頭的位址碼加數字組成,一行可以有好幾個指令,每一行稱做一個「單節」(block)。位址碼代表的是移動方式或使用者呼叫的機能。
- 參數化程式設計。參數化程式設計是一種可讓程式根據不同數值而做調整的方式。這是透過使用者輸入的變數值來達成,程式會根據這些輸入值來做一些改變。這在工具機當中用來協助處理生產系統之間的回饋與封閉迴路控制之類的情況。
- 單節執行 (Single Step)。此功能可以讓工作程式一次只執行一行。這樣一來,操作人員就能檢查程式碼執行後的結果是否達到最佳效果,進而決定是否該手動修改。
- 進給暫停 (Feed Hold)。進給暫停功能主要用來查看複雜功能是否正確執行,先查看一下正在加工的部位然後再繼續執行後續步驟。事實上,材料切削過程中所產生的碎屑有可能累積在加工部位,或累積在偵測器上,進而導致測量失準,或造成後續加工上的瑕疵 (如果碎屑沒有清除的話)。
- 刀具。機械加工是一種使用「刀具」來將一塊原始材料上不要的部分去除的製造技巧。切削的動作是藉由被加工材料與刀具之間的相對速度來達成,也就是所謂的切削速度或表面速度。除了這項參數之外,進給速度 (feed rate) (也就是刀具沿著被加工材料移動的速度) 也會影響碎屑移除的過程。刀具的種類繁多,視加工的需求而定。
廠商評估
針對每一家我們研究的廠商,我們會對其工具機執行一系列相同的資安評估:
所謂「工業 4.0 相容」技術是智慧工廠設備用來對外傳輸資訊的一些介面和相關通訊協定,例如將生產資料傳送至中央系統以改善管理或降低成本,此外也方便遠端管理,如此操作人員就不須親臨現場也能變更要執行的程式。
我們利用像 Nessus 這類的自動化掃描工具來發掘這些對外暴露的服務是否有潛在的漏洞,包括一些可能造成危險的已知漏洞和組態設定錯誤,不過我們暫時略過這些問題,將焦點擺在領域相關的 CNC 介面攻擊。
接著,我們深入分析前面發現的 CNC 相關技術,看看是否存在著被攻擊的風險,並針對 CNC 控制器發動實際攻擊。為此,我們開發了一個攻擊工具,然後搭配廠商提供的專屬 API 來攻擊我們發現的領域相關介面弱點。
我們將相關證據蒐集起來,然後通報給廠商,並提出一些防範建議。所有證據都來自於我們對真實世界安裝環境的測試結果,不過我們也使用模擬器來執行一些初步測試,或者當身邊沒有可用的實際環境時,也會用模擬器進行測試。
既然我們對 CNC 工具機已經有了一些基本認識,接下來在本系列的第 2 篇,我們將深入討論這次挑選的幾家廠商,包括我們如何評估這些廠商,以及我們的研究發現。