BLOG: SỬ DỤNG PLC ĐỂ LÂY LAN NGANG TRONG MẠNG ICS

Trong quá trình nghiên cứu, chúng tôi phát hiện trường hợp 1 hệ thống điều khiển công nghiệp (ICS – Industrial Control System) của một nhà máy xử lý và cung cấp nước bị expose ra internet mà không được bảo vệ phù hợp, gây ra một số rủi ro về an toàn thông tin cho nhà máy, tiềm ẩn nguy cơ đối với an toàn vận hành nhà máy và sức khỏe của người dân. Chúng tôi đã thông báo trường hợp trên đến đơn vị chịu ảnh hưởng, đồng thời khuyến nghị các biện pháp cần thiết. Bài viết sau mô tả quá trình thu thập thông tin, mô phỏng khả năng xâm nhập và lây lan trong hệ thống trên môi trường Lab.

Lưu ý: Mọi mô phỏng can thiệp vào hệ thống trong bài viết này đều thực hiện trên môi trường thử nghiệm, chúng tôi không tiến hành trên hệ thống thực và khuyến cáo không xâm phạm, can thiệp và sửa đổi các hệ thống ICS nói chung do tiềm ẩn nhiều rủi ro đến an toàn vận hành, thiệt hại về tài sản (cháy nổ, hỏng hóc, v.v), về sức khỏe, về môi trường. Theo luật, việc xâm phạm, can thiệp và sửa đổi các hệ thống ICS của các cá nhân, tổ chức là phạm pháp!

Tại Việt Nam, các hãng cung cấp sản phẩm, thiết bị tự động hóa như Siemens, Mitsubishi, Schneider, Rockwell, v.v chiếm phần lớn thị trường. Trên thế giới đã có một số vụ tấn công mạng vào các hệ thống ICS sử dụng thiết bị của các hãng nói trên (Stuxnet – SIEMENS, Industroyer – SIEMENS, v.v).   Qua đó chúng tôi muốn đánh giá bảo mật cho các hệ thống này tại Việt Nam. Trong khi rà soát bảo mật cho các hệ thống sử dụng thiết bị của hãng SIEMENS (Đức) thì phát hiện 1 hệ thống sử dụng giao thức S7commplus, public cổng 102 ra Internet. Phân tích sâu hơn thì kết quả cho ra thông tin thiết bị là PLC S7-1200 chạy phiên bản firmware 3.0 (sau đây gọi là PLC_1) . Dùng phần mềm chuyên dụng kết nối đến thiết bị (chỉ đọc chương trình, không thực hiện ghi đè hay modify ) thì phát hiện PLC này không được bảo vệ chống đăng nhập trái phép, chương trình điều khiển bên trong cũng không được bảo vệ chống đọc/ghi. Do đó một đối tượng xấu hoàn toàn có khả năng thực hiện việc tắt/bật, đọc và thay đổi chương trình điều khiển của PLC.

Phân tích chương trình điều khiển đang chạy trên PLC và áp dụng OSINT, chúng tôi thu thập thêm được các thông tin quan trọng sau:

  1. PLC bị expose nằm trong hệ thống xử lý nước sạch, thuộc một công ty cấp nước và môi trường đô thị. Cơ sở này là 1 trong 5 chi nhánh thuộc công ty, có nhiệm vụ cấp nước cho 01 thành phố trực thuộc tỉnh và 03 huyện ngoại vi.
  2. Từ thông tin cấu hình của PLC nêu trên, có thể thu thập thông tin về các kết nối mạng nội bộ, cho phép phác họa lại một phần mô hình mạng điều khiển bên trong (thể hiện trên Hình 1).

Hình 1: Phác họa mô hình mạng nhà máy (thông tin các địa chỉ IP đã được thay đổi).

  1. Xác định được một số hàm chức năng và biến quan trọng trong chương trình điều khiển (thể hiện trên Hình 2), cho phép tác động trực tiếp đến hoạt động bình thường của nhà máy và chất lượng nước, được tập hợp trong Bảng 1.

 

Bảng  1: Một số hàm chức năng qua trọng với hoạt động của hệ thống

STT Tên hàm chức năng Công dụng
1 TCP_NTU Lấy thông tin từ cảm biến (Clo dư?, NTU bể nước sạch, bể lắng)
2 Coi_bao Bật còi cảnh báo khi có các sự kiện như lỗi bơm nước, lỗi bơm hóa chất, nước có độ đục (NTU) cao.
3 Cai dat luu luong nuoc tho Cài đặt giá trị lưu lượng nước thô theo từng thời điểm
4 Cai dat ap Cài đặt giá trị áp lực bơm mạng theo từng thời điểm
5 Van rua loc Điều khiển các van xả rửa lọc, làm sạch các chất bẩn bám vào hệ thống lọc
6 Chay bom mang Điều khiển các bơm mạng, cài đặt tốc độ bơm, thời gian bơm.
7 Scada Gửi dữ liệu vận hành (đồng hồ lưu lượng nước) về trụ sở công ty và sang thiết bị có local IP 192.168.1.253, sử dụng ModbusTCP

Từ thực tế đó, chúng tôi đặt ra câu hỏi: Làm sao để truy cập/can thiệp sâu hơn vào hệ thống khi đã kiểm soát được PLC_1?

Ý tưởng của chúng tôi là biến PLC_1 thành proxy phía trong để tạo điểm truy cập, tìm kiếm thêm thông tin bên trong mạng mục tiêu, từ đó lây lan sang các thành phần khác. Proxy phía trong sẽ tạo kết nối đến Command and Control Center phía kẻ tấn công cho phép chúng truy cập sâu hơn vào mạng phía trong.

Hệ thống ICS đóng vai trò kiểm soát toàn bộ dây chuyền vận hành trong nhà máy nên thử nghiệm trên hệ thống thực gây ra rủi ro có thể dẫn đến thiệt hại về tài sản (rò rỉ, nứt vỡ đường ống), môi trường và con người (giải phóng chất thải, tai nạn, cháy nổ, thay đổi chất lượng nước). Do vậy chúng tôi bắt tay vào xây dựng Lab theo mô hình đã phát hiện để thử nghiệm và kiểm chứng ý tưởng. Các thành phần trong lab gồm có:

02 Controllers: SIEMENS CPU S7-1214 AC/DC/Rly (PLC)

01 Workstation đóng hai vai trò:

Máy host: Chạy phần mềm TIA Portal của Siemens

Và 01 máy ảo đóng vai trò proxy phía ngoài.

01 Firewall: Palo Alto PA-220

01 Switch Layer 2

Hình 4: Các thiết bị PLC trên hệ thống Lab.

Các thiết bị được kết nối theo mô hình trong hình 5, phỏng theo trường hợp của đơn vị trên. Các HMIs trong mô hình ban đầu bị lược bớt do chưa cần thiết trong thử nghiệm này.

Hình 5: Mô hình kết nối logic tại Lab (màu xanh) và luồng tấn công (màu đỏ)

Trong đó, firewall được cấu hình block các kết nối từ bên ngoài vào vùng OT, chỉ open port 102 trên public IP và forward sang port 102 trên local IP của PLC_1. Các kết nối Outbound không bị chặn. PLC_1 không được cấu hình chống đăng nhập trái phép và bảo vệ đọc/ghi chương trình điều khiển bên trong.

Proxy phía ngoài do chúng tôi phát triển, được cấu hình listen trên 2 port 102 và 2000, có nhiệm vụ lắng nghe kết nối từ PLC_1 (proxy phía trong) và kết nối từ phần mềm TIA Portal trên máy host. Dữ liệu gửi từ TIA Portal đến port 102 trên proxy phía ngoài sẽ được gửi đến proxy phía trong (PLC_1) và chuyển sang port 102 trên PLC_2. Các phản hồi từ PLC_2 sẽ đi theo chiều ngược lại đến TIA Portal trên máy host.

Luồng thực hiện lây lan từ PLC_1 sang PLC_2 như sau:

Phase 1: Tìm kiếm và xâm nhập

– Máy host lấy thông tin thiết bị của PLC_1

Hình 6: Thông tin thiết bị của PLC_1.

– Sử dụng công cụ TIA Portal kết nối đến PLC_1, thông qua public IP:

Hình 7: Add device với thông tin của với PLC_1.

Hình 8: Tìm thiết bị (PLC_1) và Go Online.

– Upload chương trình đang chạy trên PLC về máy host để tìm kiếm thông tin.

Hình 9: Chương trình bên trong PLC_1 đã được Go Online (trạng thái chưa đồng bộ).

– Sau khi chèn các đoạn code (viết bằng ngôn ngữ Ladder) từ máy host vào PLC_1 cho phép khởi tạo connections sang PLC_2 (port 102) và Proxy phía ngoài (port 2000).

Hình 9: Proxy phía trong khởi tạo kết nối đến PLC_2 và proxy phía ngoài.

Hình 10: Các đoạn code được chèn vào PLC_1.

Phase 2: Lây lan

Sau khi tunnel giữa Proxy phía ngoài và PLC_2 thông qua PLC_1 đã được thông suốt.

– Thông qua PLC_1 (giờ đóng vai trò proxy phía trong), Proxy phía ngoài gửi yêu cầu truy vấn và nhận phản hồi thông tin thiết bị của PLC_2 (model, firmware version) – trong trường hợp này là: 6ES7 214-1BG40-0XB0 V4.4

Hình 11: Thông tin thiết bị của PLC_2 mà Proxy truy vấn được.

– Sau khi đã có tunnel và thông tin thiết bị của PLC_2, kết nối TIA Portal đến PLC_2. Trên phần mềm TIA Portal, thêm thiết bị mới với model và firmware version trùng với thông tin PLC_2. Địa chỉ IP của PLC_2 lúc này sẽ trỏ đến địa chỉ của Proxy phía ngoài (192.168.13.16), từ đó luồng thông tin từ TIA Portal sẽ gửi đến Proxy phía ngoài -> Proxy phía trong (PLC_1) -> PLC_2 (port 102) và ngược lại.

Hình 12: TIA Portal trên máy host đã phát hiện được PLC_2 (thông qua IP của Proxy).

Khi kết nối đã thành công, TIA Portal nhận diện được Proxy phía ngoài là PLC_2.

Phase 3: Kiểm soát

Sau khi hoàn tất việc kết nối từ TIA Portal trên máy host đến PLC_2, cần thử nghiệm khả năng kiểm soát PLC_2 thông qua các hành động Upload/Download chương trình điều khiển của PLC, ra lệnh dừng/chạy PLC, modify các biến quá trình của PLC.

– Thử nghiệm Upload chương trình điều khiển của PLC_2 lên TIA Portal trên máy host để thu thập thêm thông tin,cho phép chèn thêm code vào chương trình điều khiển của PLC_2.

Hình 13: Đã truy cập được chương trình bên trong PLC_2.

Hình 14: Đã Upload được chương trình bên trong PLC_2 lên TIA Portal.

– Thực hiện thay đổi và download chương trình điều khiển từ máy host xuống PLC_2.

Hình 15: Đã thay đổi và download chương trình xuống PLC_2 thành công

(biến M5.1 đã bị thay đổi từ   thành  gây đảo ngược logic).

Hình 16: Modify giá trị các biến quá trình trên PLC_2 thành công.

Như vậy PLC_2 đã bị kiểm soát hoàn toàn, kẻ tấn công đã có thể thực hiện thao túng quá trình điều khiển của PLC_2 bằng việc dừng/chạy, Upload/Download chương trình và modify giá trị các biến quá trình. Các công việc trên có thể thực hiện trên PLC_2 để tiếp tục lan rộng và can thiệp sâu hơn đến các thành phần khác của mục tiêu.

Kết luận: Thử nghiệm trên đã đem lại một số kết quả sau:

Phương pháp cho phép xâm nhập, lan rộng vào hệ thống điều khiển công nghiệp với điểm truy cập ban đầu là một PLC nội bộ.

Thực hiện thành công trên môi trường lab.

Cách tiếp cận hoàn toàn có thể áp dụng trong thực tế.

Khuyến nghị:

Không public port 102 ra Internet hoặc mạng IT. Trong trường hợp thực sự cần thiết chỉ mở trong phiên sử dụng, sau đó cần đóng port ngay lập tức.

Cài đặt bảo vệ đăng nhập trái phép cho PLC và bảo vệ đọc/ghi cho chương trình điều khiển trên PLC.

Cấu hình Outbound rules trên firewall theo whitelisting.

Phát hiện:

Khi xuất hiện các kết nối từ xa đến PLC_1 bằng địa chỉ IP lạ, kết nối lạ từ PLC_1 sang PLC_2 đặc biệt là qua port 102.

Khi TIA Portal cảnh báo chương trình trên máy trạm kỹ thuật và chương trình đang chạy trên PLC chưa đồng bộ.

Khi phát hiện một kết nối từ máy trạm kỹ thuật lạ (Siemens gọi là PG communication) đến PLC.

Mitre ATT@CK for ICS mapping

Phase Action Tactic Technique
1 Lấy thông tin thiết bị của PLC_1 Discovery T0888: Remote System Information Discovery
Sử dụng TIA Portal kết nối đến PLC_1 thông qua public IP Initial Access T0883: Internet Accessible Device
Upload chương trình đang chạy trên PLC để tìm kiếm thông tin (các tag, thông tin chẩn đoán, thông tin kết nối, các biến quá trình, v.v). Collection T0845: Program Upload

T0801: Monitor Process State

T0861: Point & Tag Identification

Discovery T0840: Network Connection Enumeration
Chèn các đoạn code (LADDER) vào PLC_1 cho phép khởi tạo connections sang PLC_2 (port 102) và Proxy (port 2000). Lateral Movement T0843: Program Download
2 Proxy gửi yêu cầu truy vấn thông tin thiết bị đến PLC_2, thông qua PLC_1

Kết nối TIA Portal đến PLC_2

Discovery T0846: Remote System Discovery
Command and Control T0884: Connection Proxy
3 Upload chương trình bên trong PLC_2 Collection T0845: Program Upload

T0801: Monitor Process State

Thay đổi chương trình và load chương trình mới xuống PLC_2 Lateral Movement T0843: Program Download
Modify giá trị các biến quá trình trên PLC_2 (runtime) Inhibit Response Function T0835: Manipulate I/O Image

T0816: Device Restart/Shutdown