Ngày 28/5/2021, hãng bảo mật Claroty (Mỹ) công bố tìm thấy lỗ hổng nghiêm trọng, được đánh mã hiệu CVE-2020-15782, trên các PLC Simatic S7-1200 và Simatic S7-1500 của Siemens (Đức). Lỗ hổng cho phép bypass qua PLC sandbox. Một kẻ tấn công có thể tận dụng lỗ hổng này vô hiệu hóa chức năng bảo vệ bộ nhớ, truy cập vào vùng nhớ bất kỳ trên PLC (bao gồm vùng nhớ được bảo vệ) và đọc ghi dữ liệu, thực thi mã độc từ xa. Siemens đã phát hành bản cập nhật Firmware cho cả Simatic S7-1200 và Simatic S7-1500 để vá lỗ hổng trên và thông báo cho khách hàng về các tư vấn của họ (chi tiết tại SSA-434534 ). Siemens khuyến nghị người dùng cập nhật PLC firmware lên các phiên bản mới nhất. Claroty chưa phát hiện ra bất kỳ một hoạt động khai thác công khai lỗ hổng này.
- Giới thiệu
Việc thực thi mã gốc trên hệ thống điều khiển công nghiệp như PLC là mục tiêu tối hậu mà không nhiều kẻ tấn công đạt được. Những hệ thống này có nhiều biện pháp phức tạp để bảo vệ bộ nhớ PLC (PLC sandbox), kẻ tấn công phải vượt qua rào cản này để thực thi mã của chúng mà không bị phát hiện.
PLC Sandbox là gì?
Sandbox trong bảo mật máy tính là một môi trường cho phép kiểm soát chặt chẽ các chương trình chạy trong môi trường đó, giúp hạn chế chức năng của một đoạn mã, không cho phép chúng thực hiện những can thiệp khác làm hại máy tính người dùng. [1]
PLC Sandbox cũng dùng để chỉ môi trường/vùng nhớ được nhà cung cấp giới hạn để thực thi mã chương trình người dùng và kiểm soát chặt chẽ nhằm tránh các lỗi lập trình, gây hư hại bộ nhớ – theo Claroty.
Trước đây để thực thi được mã lệnh cần truy cập vật lý và kết nối tới các PLC hoặc các trạm kỹ thuật (ES: Engineering Station). Phát hiện gần đây của Claroty đã chỉ ra lỗ hổng mới (CVE-2020-15782) cho phép vượt qua PLC sandbox trong các PLC S7-1200, S7-1500 của Siemens và chạy mã máy trong các vùng nhớ được bảo vệ. Kẻ tấn công có thể tận dụng lỗ hổng này để đạt được quyền truy cập, đọc ghi lệnh/dữ liệu từ xa và che giấu lệnh độc hại.
Việc công bố lỗ hổng được Claroty và Siemens phối hợp thực hiện thông qua buổi Webcast vào 8:00PM ngày 15/6/2021 theo giờ Việt Nam, link buổi Webcast ở cuối bài viết.
- Vụ việc liên quan trước đó
Điểm qua các vụ tấn công mạng và các lỗ hổng nổi tiếng trước đó về khai thác điểm yếu bảo mật của các PLC Siemens. Điển hình như:
- Mã độc Stuxnet: Có thể nói đây là phát súng mở đầu của cuộc chiến an ninh mạng trong môi trường công nghiệp. Mã độc này được cho là nhắm vào cơ sở làm giàu Uranium của Iran. Về kĩ thuật, nó khai thác nhiều lỗ hổng 0-day của cả Windows và phần mềm STEP7/WinCC (phần mềm lập trình cho PLC và HMI của Siemens) nhằm đạt mục tiêu cuối cùng đó là thay đổi chương trình của PLC và che giấu chúng.
- Tiếp theo là Rogue7(2019), các nhà nghiên cứu đã tạo ra Rogue7 – một trạm kỹ thuật giả mạo để giả dạng TIA Portal kết nối tới PLC, giúp đưa mã chương trình của kẻ tấn công vào PLC trong khi che giấu chúng bằng mã chương trình thực. Siemens đã giải quyết một phần vấn đề này và cung cấp các biện pháp giảm thiểu, chi tiết trong SSA-232418.
- 2019 – 2020: Ali Abbasi và cộng sự đã thực hiện khai thác một lỗ hổng ở cấp độ sâu hơn thực thi mã gốc trong Kernel bằng cách kết xuất firmware bằng kết nối vật lý. Sau đó Siemens đã cũng cấp thông tin và khuyến nghị trong SSA-686531.
- 2021: Claroty đã tìm ra lỗ hổng cho phép can thiệp vào sâu trong Kernel từ xa để thực thi mã gốc ra bên ngoài sandbox.
Hình 1: Các vụ việc khai thác lỗ hổng của PLC ở cấp độ tinh vi tăng dần
- Bẻ khóa PLC sandbox
Để hiểu cách tấn công cụ thể của Claroty, trước tiên hiểu cấu trúc chung của một PLC tiêu chuẩn. CPU của PLC là bộ vi xử lý 16bit hoặc 32bit bao gồm một chip nhớ và các mạch tích hợp quản lý logic điều khiển, giám sát quá trình và giao tiếp. CPU chỉ dẫn PLC thực hiện các lệnh điều khiển, giao tiếp với các thiết bị khác, thực hiện các phép toán logic và số học cũng như thực hiện chẩn đoán nội bộ. CPU cũng chạy các quy trình bộ nhớ, liên tục kiểm tra PLC để tránh các lỗi lập trình và đảm bảo bộ nhớ không bị hư hại. Logic chạy trong môi trường sandbox. Logic được nạp vào bộ điều khiển bị giới hạn ở các vùng bộ nhớ và API cụ thể từ nhà cung cấp.
PLC Siemens S7 chạy trên nhân ADONIS và bộ xử lý ARM hoặc MIPS. Có nhiều ngôn ngữ lập trình để cấu hình bộ điều khiển, bao gồm Statement List (STL), Ladder Diagram (LD), Function Block Diagram (FBD), và Structured Control Language (SCL).
Hình 2 Quá trình nạp mã chương trình người dùng vào PLC
Bất kể ngôn ngữ đầu vào là gì, chương trình PLC sẽ được phần mềm TIA Portal biên dịch thành MC7 / MC7 + bytecode , là mã trung gian giữa ngôn ngữ máy và ngôn người dùng bậc cao. Sau khi được biên dịch, các khối mã Siemens TIA portal (ở định dạng MC7 / MC7 +) được tải xuống và cài đặt vào PLC thông qua giao thức S7Comm / S7Comm Plus của Siemens. Sau đó, máy ảo MC7 trong PLC sẽ gửi các khối mã và giải thích, thực thi bytecode.
Hình 3 Cách mã MC7 được nạp vào vi xử lý
Để thực hiện cuộc tấn công này cần truy cập mạng vào PLC. Ngoài ra, kẻ tấn công sẽ cần quyền tải mã chương trình xuống PLC. Kể từ TIA Portal V12, Siemens cung cấp nhiều biện pháp kiểm soát giảm thiểu khác nhau để hạn chế mạng người dùng và quyền truy cập đọc / ghi vào PLC, đặc biệt là cơ chế bảo vệ bằng mật khẩu. Ngoài ra, bắt đầu với TIA Portal V17, Siemens giới thiệu giao tiếp TLS sử dụng các chứng chỉ riêng lẻ giữa PLC, HMI và TIA Portal, giúp giảm đáng kể các bề mặt tấn công tiềm ẩn.
Không thể giải mã MC7/MC7+ bytecode mà không dùng kỹ thuật dịch ngược, vì Siemens không công khai tài liệu để làm việc đó. Do đó các nhà nghiên cứu đã thiết kế công cụ dịch ngược MC7/MC7+ bytecode để hiểu rõ cơ chế bên trong và tìm ra lỗi. Vì máy ảo MC7/MC7+ hạn chế tài nguyên được truy cập bởi chương trình của người dùng, mã bytecode đã biên dịch chỉ có thể được sử dụng để truy cập vào các tài nguyên được hệ điều hành cho phép chứ không phải hoạt động trực tiếp trên phần cứng. Điều này giúp hạn chế quyền của người dùng và mã đang chạy trong tập hợp các hành động cho trước để đảm bảo an toàn.
Ví dụ, hệ điều hành sẽ hạn chế mọi quyền truy cập trực tiếp vào bộ nhớ được bảo vệ, nhưng sẽ cho phép sử dụng bất kỳ chức năng nào từ thư viện chuẩn do Siemens cung cấp (ví dụ: ADD_I – Add Integer subroutine). Nói cách khác, hệ điều hành đang “khóa” mã của người dùng trong sandbox để hạn chế quyền truy cập vào tài nguyên, bộ nhớ và các chức năng có thể làm hỏng PLC hoặc toàn bộ quy trình.
Để bẻ khóa sandbox của SIMATIC S7-1200 và S7-1500, Claroty đã sử dụng lỗ hổng bảo vệ bộ nhớ của chúng. Lỗ hổng cho phép nhóm nghiên cứu ghi dữ liệu và mã lệnh tùy ý vào các vùng bộ nhớ được cho là được bảo vệ, hoặc đọc dữ liệu nhạy cảm để khởi động các cuộc tấn công tiếp theo.
Hình 4 Cấu trúc phân vùng bộ nhớ của PLC và nguyên lý bypass Sandbox
Thoát khỏi PLC sandbox có nghĩa là kẻ tấn công có thể đọc và ghi từ bất kỳ đâu trên PLC và có thể chèn VM opcode hiện có trong bộ nhớ bằng mã độc hại để root thiết bị. Chẳng hạn Claroty đã có thể đưa trực tiếp ARM / MIPS shellcode vào bên trong cấu trúc hệ điều hành theo cách mà khi hệ điều hành sử dụng một opcode cụ thể mà họ đã chọn, shellcode độc hại của họ sẽ thực thi, cho phép họ thực thi mã từ xa. Claroty đã sử dụng kỹ thuật này để cài đặt một chương trình ở cập độ lõi (kernel-level) với một số chức năng được ẩn hoàn toàn đối với hệ điều hành.
- Lỗ hổng bảo mật
CVE-2020-15782
Các thiết bị bị ảnh hưởng rất dễ bị bỏ qua PLC sandbox thông qua một số hành động cụ thể chưa được nhóm nghiên cứu công bố. Kẻ tấn công không được xác thực từ xa có quyền truy cập mạng vào cổng TCP 102 có khả năng ghi dữ liệu và mã tùy ý vào các vùng bộ nhớ được bảo vệ hoặc đọc dữ liệu nhạy cảm để khởi động các cuộc tấn công tiếp theo. Lỗ hổng này có điểm đánh giá CVSS v3.1 Score: 8.1
Siemens đã đưa ra khuyến nghị SSA-434534 ,thông báo cho người dùng về lỗ hổng này. Siemens cũng đã phát hành các bản cập nhật firmware cho các sản phẩm khác nhau, bao gồm S7-1500 và S7-1200, để khắc phục lỗ hổng bảo mật trên. Người dùng được khuyến khích cập nhật các phiên bản mới nhất. Siemens cho biết họ đang chuẩn bị cập nhật thêm cho các sản phẩm chưa có bản firmware cập nhật, và họ cũng cung cấp các biện pháp giảm thiểu cụ thể mà người dùng có thể áp dụng để giảm rủi ro.
- Khuyến nghị
Khuyến nghị của Siemens:
Hãng Siemens đã phối hợp chặt chẽ với Claroty trong quá trình nghiên cứu, thử nghiệm, từ đó xác định các sản phẩm cụ thể chịu ảnh hưởng, đưa ra giải pháp xử lý trong tài liệu SSA-434534: Memory Protection Bypass Vulnerability in SIMATIC S7-1200 and S7-1500 CPU Families (https://cert-portal.siemens.com/productcert/pdf/ssa-434534.pdf), cụ thể như sau:
Sản phẩm và phiên bản chịu ảnh hưởng | Cách giải quyết |
SIMATIC Drive Controller family: Mọi phiên bản dưới V2.9.2 |
Cập nhật lên phiên bản V2.9.2 hoặc mới hơn https://support.industry.siemens.com/cs/ww/en/ view/109773914/ |
SIMATIC ET 200SP Open Controller CPU 1515SP PC2 (bao gồm các biến thể SIPLUS): Mọi phiên bản | Xem khuyến nghị khắc phục và giảm thiểu nguy cơ kèm theo |
SIMATIC ET 200SP Open Controller CPU1515SP PC (bao gồm các biến thể SIPLUS): Mọi phiên bản | Xem khuyến nghị khắc phục và giảm thiểu nguy cơ kèm theo |
SIMATIC S7-1200 CPU family (bao gồm các biến thể SIPLUS): Mọi phiên bản dưới V4.5.0 | Cập nhật lên phiên bản V4.5.0 hoặc mới hơn https://support.industry.siemens.com/cs/ww/en/ view/109793280/ |
SIMATIC S7-1500 CPU family (bao gồm các biến thể ET200 CPU liên quan và SIPLUS): Mọi phiên bản dưới V2.9.2 | Cập nhật lên phiên bản V2.9.2 hoặc mới hơn https://support.industry.siemens.com/cs/ww/en/ view/109478459/ |
SIMATIC S7-1500 Software Controller: Mọi phiên bản | Xem khuyến nghị khắc phục và giảm thiểu nguy cơ kèm theo |
SIMATIC S7-PLCSIM Advanced: Mọi phiên bản dưới V4.0 | Cập nhật lên phiên bản V4.0 hoặc mới hơn https://support.industry.siemens.com/cs/ww/en/ view/109795016/ |
Khuyến nghị khắc phục và giảm thiểu nguy cơ
- Áp dụng mật khẩu bảo vệ giao tiếp S7
- Không cho phép kết nối máy khách thông qua lệnh ENDIS_PW của PLC S7-1200 hoặc S7-1500 (Điều này ngăn kết nối máy khách từ xa, ngay cả khi máy khách có thể cung cấp mật khẩu chính xác).
- Sử dụng màn hình để cấu hình bảo vệ truy cập bổ sung của CPU S7-1500 (Điều này ngăn kết nối máy khách từ xa, ngay cả khi máy khách có thể cung cấp mật khẩu chính xác).
- Áp dụng chiến thuật “phòng thủ theo chiều sâu” nêu tại trang 12 của Hướng dẫn vận hành cho bảo mật công nghiệp (Operational Guidelines for Industrial Security)[2], đặc biệt chú ý:
– An ninh nhà máy: Bảo vệ chặt chẽ việc truy cập vật lý vào các thành phần quan trọng
– An ninh mạng: Đảm bảo hệ thống PLC không được kết nối với các mạng không đáng tin cậy
– Tính toàn vẹn của hệ thống: Cấu hình, duy trì và bảo vệ thiết bị bằng cách áp dụng các biện pháp kiểm soát bù trừ và khai thác năng lực bảo mật tích hợp sẵn.
- Cập nhật toàn bộ giải pháp lên phiên bản TIA Portal V17 và sử dụng giao tiếp bảo mật TLS với các chứng chỉ riêng biệt giữa các PLC, HMI và PG/PC.
Tài liệu trích dẫn liên quan.
[1] | “BizFlyCLOUD,” [Online]. Available: https://bizflycloud.vn/tin-tuc/sandbox-la-gi-moi-dieu-ve-sandbox-ki-thuat-bao-ve-su-an-toan-cho-thiet-bi-may-tinh-20180309115431088.htm. |
[2] Operational Guidelines for Industrial Security,
https://cert-portal.siemens.com/operational-guidelines-industrial-security.pdf