Các cuộc thi an ninh mạng Capture The Flag (CTF) trong lĩnh vực Công nghệ Thông tin (IT) thường xuyên được tổ chức trên khắp thế giới, nhưng các cuộc thi CTF tập trung vào Công nghệ Vận hành (OT) vẫn còn tương đối hiếm và ít được tiếp cận hơn. Không giống như các cuộc thi IT CTF truyền thống nhấn mạnh vào các ứng dụng web hoặc lỗ hổng mạng, các thử thách OT CTF xoay quanh các hệ thống như PLC, SCADA, RTU và Hệ thống Điều khiển Công nghiệp (ICS). Các tình huống này đòi hỏi người tham gia phải có kiến thức chuyên môn về ICS trong việc xác định các lỗ hổng, khai thác các cấu hình sai và bảo vệ cơ sở hạ tầng quan trọng thường thấy trong lưới điện, môi trường sản xuất, giao thông vận tải và các cơ sở xử lý nước. Các cuộc thi OT CTF mang đến một cơ hội duy nhất để thu hẹp khoảng cách giữa bảo mật IT và OT, kết hợp các kỹ năng an ninh mạng với sự hiểu biết sâu sắc về các giao thức công nghiệp như Modbus, DNP3, S7Comm và IEC 61850.
The Critical Infrastructure Security Showdown (CISS) là một trong số ít các sự kiện quốc tế cung cấp một nền tảng OT CTF chuyên dụng cho người tham gia hàng năm, được tổ chức tại Đại học Công nghệ và Thiết kế Singapore (SUTD) và được tổ chức bởi trung tâm nghiên cứu iTrust. CISS mang đến cơ hội tuyệt vời để tập hợp các chuyên gia CTF toàn cầu để giải quyết các thách thức an ninh mạng OT thực tế. Để biết thêm chi tiết, vui lòng truy cập trang web CISS 2024.
Trong bài viết này, tôi sẽ giới thiệu một trong những thử thách kết hợp IT-OT mà tôi đã thiết kế cho CISS năm ngoái (thử thách này là một trong ba thử thách được yêu thích nhất trong CISS 2024) và hướng dẫn các bước để giải quyết nó. Nếu bạn quan tâm đến việc tham gia cuộc thi OT CTF, đừng bỏ lỡ CISS 2025 sắp tới: https://itrust.sutd.edu.sg/ciss-2025/.
# Author: Yuancheng Liu
# Created: 2024/06/02
# version: v_0.1.3
Giới thiệu thử thách: Palantir Control
Mỗi năm, CISS CTF đều có một cốt truyện sáng tạo để truyền cảm hứng cho việc thiết kế thử thách. Phiên bản năm 2024 đã áp dụng chủ đề "The Orthanc Obstacles", dựa trên The Lord of the Rings: The Two Towers. (Như được hiển thị trong áp phích và huy chương CISS2024 bên dưới)
Hình-00 Ảnh chụp màn hình áp phích và huy chương CISS2024
Trong bối cảnh này, thử thách mà tôi đã thiết kế—Palantir Control—lấy cảm hứng từ cảnh mang tính biểu tượng nơi Saruman sử dụng Palantír để điều khiển Tháp Orthanc như được hiển thị bên dưới trong phim:
Hình-01 The Lord of the Ring Saruman
Thử thách này mô phỏng một môi trường OT ICS mini (mạng lớp SCADA) để minh họa cách một cuộc tấn công mạng dựa trên IT có thể xâm phạm và làm sập một hệ thống OT. Nó có một Bộ điều khiển Logic Khả trình (PLC) và một giao diện điều khiển từ xa (chẳng hạn như HMI) mô phỏng một hệ thống SCADA đơn giản hóa. Người tham gia được giao nhiệm vụ sử dụng các kỹ thuật xâm nhập IT để xâm nhập vào mạng, leo thang đặc quyền và cuối cùng là thao túng hệ thống OT để lấy cờ.
Trong thử thách Palantir Control, người tham gia sẽ tiến hành qua nhiều giai đoạn tấn công:
-
Xâm nhập IT – Quét mạng
-
Xâm nhập IT – Thăm dò cổng UDP
-
Khai thác IT – Lỗ hổng CGI của Máy chủ Web HTTP
-
Tấn công IT – Tấn công vét cạn mật khẩu Quản trị Web
-
Tấn công OT - Khai thác cấu hình sai PLC
-
Tấn công OT – Tiêm dữ liệu sai PLC
Thử thách không chỉ nhấn mạnh các kỹ năng kỹ thuật trên các lĩnh vực IT và OT mà còn phản ánh các rủi ro trong thế giới thực, nơi các xâm phạm lớp IT có thể dẫn đến lỗi OT. Hãy chuẩn bị để xâm nhập Orthanc và khám phá những bí mật ẩn giấu bên trong các bức tường mạng của nó. Thử thách được thiết kế dựa trên một trong những dự án PLC Honey Pot của tôi: https://www.linkedin.com/pulse/python-plc-honeypot-project-yuancheng-liu-vks8c
Câu chuyện nền và câu hỏi của thử thách
Câu chuyện nền của thử thách CTF
Trong bóng tối của Isengard, Saruman the white đã khai thác sức mạnh bóng tối của Palantír, một quả cầu pha lê đen huyền bí, để điều khiển từ xa Con Mắt Rực Lửa nằm trên đỉnh Tháp Orthanc. Với mỗi mệnh lệnh mà anh ta gửi đi, Con Mắt di chuyển và bùng cháy, dẫn dắt đội quân Orc tàn nhẫn của anh ta tiến tới sự thống trị.
Nhưng hy vọng vẫn còn. Được trang bị thông tin tình báo bí mật của Gandalf, Sam và Frodo bắt đầu một nhiệm vụ nguy hiểm để phá hoại hệ thống điều khiển độc ác của Saruman. Chìa khóa cho sức mạnh của anh ta nằm trong một mạng Công nghệ Vận hành (OT) được che giấu:
-
Một Bộ điều khiển Logic Khả trình (PLC) bên trong Tháp Orthanc thao túng Con Mắt dựa trên các lệnh từ xa đến.
-
Một bộ điều khiển từ xa, được Saruman vận hành thông qua Palantír, gửi các lệnh đó bằng một giao thức OT chuyên dụng.
-
Trạng thái của Con Mắt thay đổi thông qua các thanh ghi giữ PLC và Saruman theo dõi phản hồi thông qua dữ liệu phản hồi của Palantír.
Để ngăn chặn sự lan rộng của bóng tối, những người Hobbit phải hành động nhanh chóng như hình bên dưới:
Hình-02 Tổng quan về câu chuyện nền của thử thách
-
Sam phải xâm nhập vào tháp, xâm phạm hệ thống điều khiển và thao túng logic đằng sau Con Mắt Rực Lửa.
-
Frodo, mạo hiểm mọi thứ, phải tiếp cận lãnh địa của Saruman và khám phá một cửa hậu ẩn để trích xuất dữ liệu trực tiếp từ quả cầu pha lê đen.
Chỉ bằng cách phá vỡ chuỗi điều khiển quan trọng này, họ mới có thể cứu Trung Địa khỏi sự hủy diệt.
Câu hỏi của thử thách CTF
Thử thách 1 – Nhiệm vụ của Sam [Thử thách IT]
Mục tiêu: Giúp Sam xâm nhập vào Tháp Orthanc và khám phá hoạt động bên trong của hệ thống điều khiển.
Nhiệm vụ:
-
Quét mạng để xác định Bộ điều khiển Tháp Orthanc (PLC).
-
Xác định vị trí giao diện quản lý dựa trên web của thiết bị.
-
Vượt qua xác thực để truy cập dữ liệu cấu hình bên trong.
Vị trí cờ: Ẩn bên trong giao diện web PLC, có thể được mã hóa hoặc nhúng trong trang chẩn đoán hoặc cấu hình.
Thử thách 2 – Nhiệm vụ của Frodo [Thử thách OT]
Mục tiêu: Hỗ trợ Frodo phá vỡ giao tiếp giữa Saruman và Tháp Orthanc.
Nhiệm vụ:
-
Khám phá bộ điều khiển OT từ xa mà Saruman sử dụng thông qua Palantír.
-
Tương tác với nó để truy xuất dữ liệu hoạt động.
-
Thực hiện tiêm dữ liệu sai hoặc phá vỡ tương tự để thao túng hành vi của Con Mắt Rực Lửa.
Vị trí cờ: Được nhúng trong dữ liệu phản hồi của bộ điều khiển, có thể truy cập sau khi phá vỡ hoạt động bình thường của nó.
🖧 Cấu hình mạng
Phần cấu hình mạng sẽ KHÔNG được cung cấp cho người tham gia, họ cần sử dụng công cụ quét mạng để tìm ra cấu trúc liên kết mạng và cấu hình của mỗi đội có thể khác nhau.
Môi trường thử thách này bao gồm ba Máy ảo (VM)—hai cho mô phỏng IT-OT và một cho quyền truy cập của người tham gia. Tất cả các VM được đặt trong cùng một mạng con để cho phép giao tiếp trực tiếp. Cấu trúc liên kết được hiển thị bên dưới:
Hình-03 Cấu trúc liên kết mạng của môi trường thử thách
Cấu hình địa chỉ IP:
-
IP Bộ điều khiển PLC (Chương trình điều khiển từ xa):
172.23.155.208
-
IP Thiết bị PLC:
172.23.155.209
-
IP VM của người tham gia:
172.23.144.1
Trong thử thách này, người tham gia tương tác với một môi trường IT-OT mô phỏng mô phỏng một hệ thống SCADA đơn giản hóa. Thiết lập bao gồm:
-
Một thiết bị PLC được điều khiển thông qua Modbus-TCP
-
Một VM bộ điều khiển từ xa đóng vai trò là giao diện Palantír của Saruman
-
Một VM Giao dịch (Ubuntu 20.04), đã bị xâm phạm trước đó
Chi tiết kịch bản chính
-
Bộ điều khiển từ xa thường xuyên gửi các hướng dẫn Modbus-TCP đến PLC, kích hoạt các hành động dựa trên logic bậc thang PLC (ví dụ: kích hoạt cuộn dây).
-
VM kỹ sư hỗ trợ IT có thể truy cập được đối với người tham gia với đầy đủ quyền
sudo
nhưng thiếu quyền truy cập trực tiếp để giám sát hoặc điều khiển PLC. -
Tuy nhiên, bộ điều khiển từ xa hiển thị một cổng UDP mở, mà người tham gia có thể tương tác để truy vấn trạng thái hoạt động hiện tại của PLC (ví dụ: trạng thái cuộn dây đầu ra).
-
Người tham gia phải viết một ứng dụng khách UDP tùy chỉnh để kéo dữ liệu trạng thái theo thời gian thực từ bộ điều khiển.
-
Sử dụng các kỹ thuật xâm nhập IT và thao túng OT, người tham gia sẽ cố gắng làm hỏng hoặc thay đổi hành vi dự kiến của PLC, sao cho bộ điều khiển nhận được các phản hồi bất ngờ hoặc sai sót.
Mục tiêu cuối cùng là gây ra lỗi logic hoặc sự không nhất quán khiến bộ điều khiển từ xa tạo ra mã lỗi trạng thái, chứa cờ.
Thiết kế Thử thách
Người tham gia sẽ sử dụng transaction VM để cài đặt các công cụ hoặc phát triển các script tấn công tùy chỉnh cần thiết để tương tác và khai thác môi trường IT-OT. Mặc dù một system workflow cấp cao quản lý chuỗi tương tác, nhưng nó không được tiết lộ cho người tham gia trong suốt quá trình CTF, được hiển thị bên dưới:
Figure-04 Sơ đồ quy trình làm việc của hệ thống môi trường thử thách
Trọng tâm của thử thách xoay quanh một PLC simulator, thực thi một routine logic ladder ẩn. PLC simulator VM cung cấp hai dịch vụ chính cho mạng:
-
Modbus-TCP Service: Cổng
TCP:502
-
Web Interface (HTTP): Cổng
TCP:5000
Cứ mỗi 2 giây, môi trường thử nghiệm mô phỏng một chu kỳ hoạt động OT:
-
Remote controller VM tải ngẫu nhiên một cấu hình thanh ghi giữ PLC được xác định trước và các trạng thái đầu ra cuộn dây dự kiến tương ứng từ cơ sở dữ liệu nội bộ của nó.
-
Nó gửi một yêu cầu ghi Modbus-TCP để cập nhật các thanh ghi giữ trong PLC simulator.
-
PLC simulator cập nhật các giá trị thanh ghi nội bộ của nó, thực thi logic ladder và cập nhật các trạng thái đầu ra cuộn dây của nó cho phù hợp.
-
Sau đó, remote controller truy vấn các cuộn dây của PLC để xác minh xem phản hồi có khớp với kết quả dự kiến hay không.
-
Dựa trên sự phù hợp này, remote controller xác định xem thử nghiệm PLC có vượt qua hay không.
✅ Hoạt động Bình thường (Vượt qua Thử nghiệm):
Nếu PLC phản hồi với các trạng thái cuộn dây chính xác, hệ thống được coi là hoạt động bình thường. Khi người tham gia gửi một gói UDP chứa getstate
đến remote controller tại cổng UDP:3000
, họ sẽ nhận được một phản hồi như:
state:normal;;;...
❌ Điều kiện Lỗi (Thử nghiệm Thất bại):
Nếu phản hồi của PLC không khớp với đầu ra cuộn dây dự kiến, remote controller sẽ gắn cờ lỗi. Trong trường hợp này, khi người tham gia gửi getstate
đến UDP:3000
, họ sẽ nhận được:
state:error;{error-code-xxxxxxxxxxxxxxxx}
The {error-code}
là CTF flag.
Nếu thử thách giao tiếp bị ngắt kết nối, bộ điều khiển sẽ trả lời tin nhắn "PLC rejected connection
".
Nếu người tham gia không gửi chuỗi chính xác "getstate", bộ điều khiển sẽ trả lời "Error: Input request invalid
" .
🎯 Mục tiêu Thử thách
Người tham gia CTF phải tạo ra một cuộc tấn công khiến trạng thái đầu ra của PLC khác với kết quả dự kiến, do đó kích hoạt một điều kiện lỗi trong remote controller.
Ví dụ Tình huống:
-
Bộ điều khiển đặt 8 thanh ghi giữ của PLC thành:
[0, 1, 1, 0, 1, 0, 0, 1]
-
Logic ladder sẽ tạo ra các cuộn dây đầu ra 1 - 4 là:
[1, 0, 0, 1]
-
Nếu remote controller đọc:
[1, 0, 1, 1]
cho các cuộn dây đó thay vào đó, nó sẽ gắn cờ lỗi và trả về flag qua UDP. Nhưng người tham gia cần đọc nhanh vì sau 1 giây, bộ điều khiển sẽ đặt lại và bắt đầu một vòng thực thi mới khác.
Người tham gia phải khám phá cách phá vỡ chuỗi logic—cho dù thông qua cấu hình sai, điều kiện chạy đua, đầu vào trái phép hoặc injection—để PLC phản hồi với trạng thái cuộn dây không chính xác. Chúng tôi để hai giây cho người tham gia thực hiện cuộc tấn công injection dữ liệu sai và khoảng một giây để họ đọc flag, khoảng thời gian đồng hồ được hiển thị bên dưới:
Figure-05 Sơ đồ dấu thời gian injection và khoảng thời gian đồng hồ
Các bước để Giải quyết Thử thách
Bây giờ, hãy cùng xem qua các bước chi tiết để giải quyết thử thách. Người tham gia cần giải quyết thử thách IT trước, sau đó mới có thể bắt đầu thực hiện phần thử thách OT.
Giải quyết Nhiệm vụ của Sam [Thử thách IT]
Bước 1: Khám phá các Dịch vụ Web và Modbus-TCP của PLC
Bắt đầu bằng cách xác định các host đang hoạt động trên subnet bằng fping
hoặc bất kỳ phương pháp quét host nmap nào. Sau khi xác định, hãy quét IP PLC bị nghi ngờ để liệt kê các cổng đang mở của nó:
nmap -sS -Pn -T5 -p- 172.23.155.209
Một bản quét điển hình cho thấy Modbus-TCP (cổng 502) và HTTP Web Interface (cổng 5000) đang mở trên PLC VM như hình bên dưới:
Figure-06 Kết quả quét cổng Nmap
Vì transaction VM là phiên bản Ubuntu-server (không có desktop), bạn cần chuyển tiếp cổng giao diện web đến máy cục bộ của mình:
ssh -L 127.0.0.1:5000:172.23.155.209:5000 -J @ @172.23.144.1
Bây giờ, hãy mở URL http://127.0.0.1:5000
trên trình duyệt cục bộ để điều hướng đến giao diện web của PLC. Người tham gia có thể xem qua câu chuyện và trang giới thiệu thử thách như hình bên dưới:
Figure-07 Trang chủ giao diện web Challenge PLC VM
Bước 2: Điều tra Web UI và Tìm Gợi ý Ẩn-1
Sau khi đọc chi tiết thử thách từ web, hãy nhấp vào nút “Login” trong thanh điều hướng trên cùng để xem biểu mẫu đăng nhập:
Figure-08 Trang ủy quyền giao diện web Challenge PLC VM
Bây giờ bạn cần brute force để phá mật khẩu, nhưng trước đó bạn cần tìm ra tên người dùng là gì. Thông điệp của Orc trong hình làm nổi bật Saruman, nếu bạn thử saruman
(hoặc tài khoản chung khác như admin
) với một số mật khẩu như "1234567
", trang web trả về thông báo từ chối đăng nhập: Login account does not exist
.
Figure-09 Ảnh chụp màn hình đăng nhập thất bại giao diện web Challenge PLC VM
Phải có một số manh mối về tài khoản, hãy nhìn lại trang đăng nhập, có một nút thả xuống đáng ngờ có nhãn "Gandalf's Message" ở phía dưới. Khi hộp thả xuống được mở rộng, chúng ta có thể nhận được một số tin nhắn như hình bên dưới:
Figure-10 Trang đăng nhập giao diện web Challenge PLC VM Tin nhắn của Gandalf
Nhìn vào chuỗi, có vẻ như Gandalf không cung cấp bất kỳ tin nhắn hữu ích nào, nhưng hãy đợi, "dòng" bên dưới tin nhắn của anh ấy có vẻ đáng ngờ! Có thể tin nhắn của Gandalf bị hỏng, hãy kiểm tra nguồn web:
Figure-11 Nguồn html trang đăng nhập giao diện web Challenge PLC VM
"Dòng" này thực sự là một hình ảnh cao 5 pixel có tên là hint01
. Kiểm tra nguồn trang để hiển thị hình ảnh:
Figure-12 Trang đăng nhập giao diện web Challenge PLC VM tiết lộ Tin nhắn của Gandalf
Đúng! Bây giờ Gandalf xuất hiện và cho chúng ta một URL để mở cánh cửa:
http://tower_ip:5000/userlogin/xxxx/xxxx
Nếu người tham gia thử URL trong trình duyệt của họ, nó sẽ hiển thị xem thông tin đăng nhập có chính xác hay không như hình bên dưới:
http://172.23.155.209:5000/userlogin/Saruman/xxxx
Điều này trả về lỗi đăng nhập: User name or password incorrect!
(như hình bên dưới)
Figure-13 Challenge PLC VM login API test
Điều này xác nhận điểm cuối hoạt động và hỗ trợ việc chèn thông tin đăng nhập dựa trên URL, nhưng URL vẫn không hữu ích! Vì nó giống với trang đăng nhập, có điều gì đó tôi đã bỏ lỡ? Hãy kiểm tra nguồn web mới:
Figure-14 Challenge PLC VM login CGI response source
Có một đoạn không thể truy cập được:
Sarumanscrow said:
Sarumanscrow said:
Có thể Sarumanscrow
là tên người dùng hợp lệ? Hãy thử đăng nhập bằng tên đó:
Figure-15 Find the correct login user name
Lỗi từ chối đăng nhập đã thay đổi thành User password incorrect!
. Chúng ta có thể xác nhận có một tài khoản người dùng là "Sarumanscrow" có thể được sử dụng để đăng nhập vào trang web PLC.
Bước 3: Tấn công Brute Force Mật khẩu và Lấy Flag
Với tên người dùng đã được khám phá (Sarumanscrow
) và điểm cuối chèn thông tin đăng nhập đã được xác nhận, giờ đây bạn có thể thực hiện một cuộc tấn công brute force dựa trên từ điển bằng Python:
import time
import urllib
import urllib.request
ipAddr = "172.23.155.209"
passwordDictFile = "solveCTFScripts\\10-million-password-list-top-1000000.txt"
passwordList = []
with open(passwordDictFile, 'r') as fh:
passwordList = fh.readlines()
for password in passwordList:
password = password.strip()
url = "http://%s:5000/userlogin/Sarumanscrow/%s" %(ipAddr, password)
response = urllib.request.urlopen(url)
message = str(response.read())
print(message)
if 'User name or password incorrect!' in message:
time.sleep(0.1)
continue
else:
print("Find password: %s" %str(password))
break
Trong CTF thực tế, mật khẩu được chọn ngẫu nhiên từ từ điển. Trong lần chạy thử này, ví dụ, nó là admin
như hình bên dưới:
Figure-15 Brute force attack to get the password
Sau khi bạn xác thực thành công, giao diện web PLC sẽ thay đổi thành trạng thái đăng nhập và giao diện web PLC sẽ hiển thị một thông báo chúc mừng bằng màu xanh lam:
“Chúc mừng, bạn đã giải quyết được thử thách IT. Tìm kiếm flag từ các trang.”
Thanh điều hướng bên trái bên dưới phần giới thiệu sẽ hiển thị Fiery Eye Control và Orthanc Tower Control như hình bên dưới:
Figure-17 Challenge PLC VM web interface login successful
Khi người tham gia chuyển sang Fiery Eye Control (trang logic ladder PLC), thì sẽ tìm thấy flag thử thách IT:
Figure-18 Find the IT challenge flag in the Fiery Eye Control page
Chúng ta có thể lấy flag thử thách IT CISS2024_SAM_FLAG (trong cuộc thi thực tế, đây sẽ là một chuỗi flag được tạo ngẫu nhiên)
- Bây giờ thử thách IT đã được giải quyết!
Giải Quyết Nhiệm Vụ của Frodo [Thử Thách OT]
Bước 1: Khám Phá Dịch Vụ UDP của Bộ Điều Khiển
Dựa trên trang web logic ladder Hints02
trong trang logic Ladder PLC (như hình bên dưới), người tham gia cần tìm cổng dịch vụ UDP đã mở trên nút bộ điều khiển PLC (172.23.155.208) để lấy trạng thái xác minh hoạt động PLC hiện tại.
Figure-19 Get the hint02 from the PLC web
Để thực hiện việc này, hãy tạo một tập lệnh Python đơn giản để quét các cổng UDP trên VM bộ điều khiển như hình bên dưới:
import time
from socket import *
host = "172.23.155.208"
s = socket(AF_INET, SOCK_DGRAM)
for port in range(10,65532):
try:
print("Try port %s" %str(port))
data = b"Test Message"
s.sendto(data,(host,port))
s.settimeout(1)
print ((s.recvfrom(1024)))
print("Find opened port: %s" %str(port))
break
except:
pass
Chạy chương trình quét cổng UDP và nhận kết quả:
Try port 2991
Try port 2992
Try port 2993
Try port 2994
Try port 2995
Try port 2996
Try port 2997
Try port 2998
Try port 2999
Try port 3000
(b'Error: input request invalid: Test Message', ('172.23.155.208', 3000))
Find opened port: 3000
Cổng UDP 3000 được xác nhận là đang mở.
Bước 2: Xây Dựng UDP Client Kết Nối với Bộ Điều Khiển PLC
Với cổng dịch vụ UDP đã được khám phá, hãy sử dụng Hint03 trong trang logic ladder (như hình bên dưới) để gửi chuỗi getstate
đến VM bộ điều khiển và truy xuất trạng thái PLC:
Figure-20 Get the hint03 from the PLC web
Bạn có thể sử dụng tập lệnh tấn công https://github.com/LiuYuancheng/PLC_and_RTU_Simulator/blob/main/Modbus_PLC_Simulator/src/udpCom.py làm ví dụ để tiếp tục gửi tin nhắn UDP:
Figure-21 Get the normal response from PLC controller VM
Chạy client sẽ trả về trạng thái hiện tại của các coil C0 đến C3. Nếu kết quả xác minh coil PLC đạt, bộ điều khiển sẽ xác định PLC đang hoạt động bình thường, bạn sẽ thấy thế giới "bình thường" trong tin nhắn phản hồi.
Bước 3: Xây Dựng Tập Lệnh Tấn Công Chèn Dữ Liệu Sai (FDI)
Thử thách OT yêu cầu người tham gia ghi đè các thanh ghi giữ PLC để gây ra sự cố. Dựa trên gợi ý flag thử thách OT: người tham gia cần làm rối hoạt động PLC để bộ điều khiển từ xa phát hiện lỗi hoạt động PLC, sau đó đọc mã lỗi. Bây giờ người tham gia chuyển sang trang logic ladder PLC để tìm hiểu về logic ladder, đây là 8 thanh ghi giữ PLC được sử dụng trong logic ladder [HR0 - HR7] (Như hình bên dưới):
Figure-22 Analyze the PLC ladder logic diagram
Nếu người tham gia có thể chèn dữ liệu sai vào một số thanh ghi, đầu ra có thể bị thay đổi. Ví dụ: nếu thay đổi trạng thái HR6, HR0 hoặc HR7 có thể thay đổi đầu ra của coil vì chúng nằm trong logic cổng "AND". (Nếu thay đổi trạng thái đơn của một thanh ghi trong logic cổng "OR" như HR1, HR4 có thể không ảnh hưởng đến đầu ra, sơ đồ mạch tương đương được hiển thị bên dưới)
Figure-23 Analyze the circuit diagram
Người tham gia có thể sử dụng https://github.com/LiuYuancheng/PLC_and_RTU_Simulator/blob/main/Modbus_PLC_Simulator/src/modbusTcpCom.py làm ví dụ để tạo chương trình tập lệnh tấn công PLC FDI đơn giản để ghi đè giá trị của các thanh ghi giữ.
Tuy nhiên, nếu họ chỉ chạy scrip trực tiếp, thông báo tấn công thất bại sẽ hiển thị (yêu cầu thay đổi giá trị thanh ghi bị từ chối):
Figure-24 PLC false data injection failed
Vấn đề là IP 172.23.144.1
của VM tấn công không nằm trong danh sách địa chỉ IP "cho phép đọc" và "cho phép ghi" của thanh ghi PLC. Vì vậy, tất cả các yêu cầu chèn dữ liệu sai đều bị PLC từ chối.
Nhấp vào "Orthanc Tower Control" tại thanh trượt, nó sẽ thay đổi thành "PLC Configuration" như hình dưới đây, những người tham gia cần thêm địa chỉ IP của VM tấn công vào địa chỉ IP cho phép ghi (Như hình dưới đây):
Figure-25 Challenge PLC VM web configuration page
Điền địa chỉ IP của VM tấn công vào trường văn bản và nhấn nút "Add" màu xanh lục, sau đó IP của kẻ tấn công sẽ được thêm vào danh sách địa chỉ PLC cho phép ghi như hình dưới đây:
Figure-26 Add the allow write IP address to PLC configuration
Bây giờ những người tham gia có thể chạy lại chương trình tấn công và họ có thể thấy rằng kết quả đặt trả về true, chương trình tấn công FDI đang thay đổi giá trị của thanh ghi giữ của PLC:
Figure-27 PLC false data injection accepted
Bây giờ chương trình tấn công chèn dữ liệu sai đã sẵn sàng để sử dụng.
Bước 4: Kích hoạt Lỗi Bộ điều khiển và Lấy Cờ OT
Để hoàn thành thử thách:
-
Cũng thêm IP của VM giao dịch vào Danh sách IP Cho phép Đọc để chúng ta có thể lấy trạng thái của thanh ghi giữ
-
Sửa đổi tập lệnh của bạn thành:
-
Đọc các giá trị hiện tại của
HR0–HR7
-
Đảo ngược mỗi bit (1 → 0, 0 → 1)
-
Ghi các giá trị đảo ngược trở lại PLC
-
Điều này sẽ làm sai lệch các đầu ra cuộn dây và logic bộ điều khiển sẽ phát hiện trạng thái bất thường. Vì thời gian chèn cũng cần chính xác, nên kẻ tấn công cần tiếp tục chạy chương trình FDI và chương trình đọc trạng thái bộ điều khiển cùng một lúc. Sau một thời gian, họ sẽ thấy mã lỗi như hình dưới đây:
Chúng ta có thể lấy cờ thử thách OT PLC_EXECUTE_ERROR_FLG (trong cuộc thi thực tế, đây sẽ là một chuỗi cờ được tạo ngẫu nhiên)
- Bây giờ thử thách OT đã được giải quyết!
Bạn đã phá vỡ thành công logic Palantir Control bằng cách sử dụng Tấn công Chèn Dữ liệu Sai và lấy cờ lỗi hoạt động.
Nhận xét:
Có hai câu hỏi từ những người tham gia về việc liệu họ có thể sử dụng giải pháp khác để "vượt qua" thử thách hay không:
Q1: Tôi có thể sử dụng chèn lệnh sai để sửa đổi trực tiếp đầu ra cuộn dây không?
Trả lời: PLC Configuration không cung cấp API thiết lập "cho phép đọc" và "cho phép ghi" PLC Coil, người dùng không thể sửa đổi trực tiếp cuộn dây của PLC.
Q2: Tôi có thể sử dụng ARP spoofing và tấn công MITM để sửa đổi trực tiếp yêu cầu Modbus hoặc thông báo phản hồi Modbus của bộ điều khiển không?
Trả lời: Trong cuộc thi, chúng tôi cho phép những người tham gia tải xuống một số công cụ ARP spoofing / mitm như ettercap, nhưng tham khảo cấu trúc liên kết mạng trong phần cấu hình mạng, công tắc giữa chúng tôi đã định cấu hình các mục ARP tĩnh trên công tắc, vì vậy hầu hết các công cụ ARP spoofing / mitm sẽ không hoạt động.
Kết luận
Thử thách Palantir Control chứng minh cách các lỗ hổng CNTT có thể lan rộng thành các lỗi hệ thống OT, phơi bày các rủi ro cơ sở hạ tầng quan trọng. Bằng cách kết hợp khai thác web, thao tác giao thức và chèn dữ liệu sai, những người tham gia kết nối các miền bảo mật CNTT / OT - một kỹ năng quan trọng để bảo vệ môi trường công nghiệp. Nếu bạn quan tâm đến Cuộc thi CTF Cơ sở hạ tầng quan trọng, đừng bỏ lỡ CISS2025 này vào ngày 1 tháng 9: https://itrust.sutd.edu.sg/ciss-2025/
Cảm ơn bạn đã dành thời gian để kiểm tra chi tiết bài viết, nếu bạn có bất kỳ câu hỏi và đề xuất nào hoặc tìm thấy bất kỳ lỗi chương trình nào, vui lòng nhắn tin cho tôi. Rất cảm ơn nếu bạn có thể đưa ra một số nhận xét và chia sẻ bất kỳ lời khuyên cải thiện nào để chúng tôi có thể làm cho công việc của mình tốt hơn ~
Chỉnh sửa lần cuối bởi LiuYuancheng([email protected]) vào ngày 06/06/2025, nếu bạn có bất kỳ vấn đề gì, vui lòng gửi tin nhắn cho tôi.