2 điểm bởi GN⁺ 17 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là một framework phá hoại không được lập tài liệu, được tạo ra vào năm 2005, được thiết kế để vá mã trong bộ nhớ của phần mềm tính toán được chọn nhằm bóp méo kết quả số
  • svcmgmt.exe bề ngoài giống một service wrapper, nhưng bên trong chứa máy ảo Lua 5.0, bytecode mã hóa, DLL phụ trợ và driver fast16.sys, cho phép tách riêng và thực thi payload theo từng tác vụ
  • fast16.sysdriver hệ thống tệp khởi động cùng hệ thống, được nạp ở giai đoạn rất sớm, sau đó chọn các tệp .EXE được build bằng Intel C/C++ compiler để thực hiện vá bộ nhớ ở cấp kernel
  • Công cụ vá hoạt động theo 101 quy tắc, đặc biệt để lại dấu vết nhắm vào các công cụ tính toán chuyên biệt như kỹ thuật dân dụng, vật lý và mô phỏng quy trình bằng cách dùng các khối lệnh FPU để thay đổi tỉ lệ giá trị mảng nội bộ
  • Khi kết hợp với dấu hiệu fast16 từ vụ rò rỉ ShadowBrokers, có thể thấy rằng hoạt động phá hoại công nghiệp chính xác cao từ thời kỳ trước Stuxnet đã tồn tại dưới dạng kết hợp scripting nhúng, nhắm mục tiêu hẹp và vá kernel

Tổng quan và dấu hiệu nhận diện

  • fast16 là một framework phá hoại mạng không được lập tài liệu với thành phần lõi từ năm 2005; fast16.sys nhắm chọn lọc vào phần mềm tính toán độ chính xác cao, vá mã trong bộ nhớ và làm sai lệch kết quả tính toán
  • svcmgmt.exe bề ngoài trông như một service wrapper phổ biến thời Windows 2000/XP, nhưng bên trong chứa máy ảo Lua 5.0container bytecode mã hóa được giải nén bởi entry point của service
  • Trong quá trình truy tìm mã độc dựa trên Lua, các magic byte bytecode 1B 4C 75 61, byte phiên bản, LUA_PATH và API C đặc trưng đã trở thành manh mối, qua đó svcmgmt.exe được nhận diện
  • Chuỗi C:\buildy\driver\fd\i386\fast16.pdb bên trong svcmgmt.exe trở thành manh mối pháp chứng nối file thực thi dịch vụ với dự án driver kernel
  • Trong drv_list.txt của vụ rò rỉ ShadowBrokers năm 2017 cũng xuất hiện fast16 cùng tên, gắn chuỗi PDB của svcmgmt.exe với driver dùng cho phá hoại chính xác trong cùng một mạch liên hệ
  • Chữ ký né tránh từ phía ShadowBrokers có chứa câu fast16 *** Nothing to see here – carry on***

Cấu trúc carrier và cách thực thi

  • svcmgmt.exe được thiết kế như một carrier thích ứng, thay đổi hành vi theo tham số dòng lệnh
    • Không có tham số: chạy như dịch vụ Windows
    • -p: đặt InstallFlag = 1 và chạy như dịch vụ
    • -i: đặt InstallFlag = 1 và thực thi mã Lua
    • -r: thực thi mã Lua mà không đặt cờ cài đặt
    • Ngoài ra <filename>: hoạt động ở chế độ Wrapper/Proxy, tạo hai tiến trình con gồm lệnh gốc và lệnh gắn thêm tham số -r
  • Kho lưu trữ nội bộ chứa đồng thời bytecode Lua mã hóa, DLL phụ trợ và driver fast16.sys
  • Môi trường Lua được mở rộng vượt trạng thái mặc định, cung cấp module wstring, hàm mã hóa đối xứng tích hợp b, cùng các module binding tới API Windows NT về hệ thống tệp, registry, điều khiển dịch vụ và mạng
  • Binary carrier bên ngoài được giữ tương đối ổn định, trong khi payload theo từng tác vụ được tách riêng dưới dạng mã hóa để có thể tái sử dụng theo môi trường và mục tiêu chiến dịch
  • Các giá trị nhận diện của svcmgmt.exe như sau
    • Tên tệp svcmgmt.exe
    • Kích thước 315,392 bytes
    • MD5 dbe51eabebf9d4ef9581ef99844a2944
    • SHA1 de584703c78a60a56028f9834086facd1401b355
    • SHA256 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
    • Loại PE32 executable for MS Windows 4.00 (console), Intel i386
    • Thời gian liên kết 2005-08-30 18:15:06 UTC

Cấu trúc lây lan wormlet và né tránh

  • svcmgmt.exe hoạt động như một carrier kiểu đạn chùm có thể mang nhiều wormlet, nhưng trong mẫu đã xác nhận chỉ có một SCM wormlet
  • Luồng thực thi bao gồm chuẩn bị cấu hình, chuyển đổi chuỗi wide, leo thang đặc quyền, cài đặt và khởi động dịch vụ SvcMgmt, triển khai có điều kiện fast16.sys, phát tán wormlet, trì hoãn ban đầu và lặp lại cho tới khi đạt ngưỡng lỗi hoặc gặp điều kiện kết thúc từ bên ngoài
  • SCM wormlet nhắm vào môi trường Windows 2000/XP, tìm máy chủ trong mạng bằng các file share có mật khẩu quản trị yếu hoặc mặc định, sao chép payload rồi khởi động dịch vụ từ xa
  • Việc lây lan không dựa vào giao thức mạng tùy biến mà dựa vào các chức năng quản trị chuẩn của Windows như service control APIfile sharing API
  • Trước khi cài đặt, ok_to_install() gọi ok_to_propagate() để kiểm tra môi trường, và nếu không có ép buộc thủ công thì quyết định khả năng lây lan dựa trên sự hiện diện của khóa registry của một số sản phẩm bảo mật nhất định
  • Nếu có bất kỳ khóa registry nào dưới đây thì quá trình cài đặt sẽ dừng lại để tránh triển khai vào môi trường giám sát
    • HKLM\SOFTWARE\Symantec\InstalledApps
    • HKLM\SOFTWARE\Sygate Technologies, Inc.\Sygate Personal Firewall
    • HKLM\SOFTWARE\TrendMicro\PFW
    • HKLM\SOFTWARE\Zone Labs\TrueVector
    • HKLM\SOFTWARE\F-Secure
    • HKLM\SOFTWARE\Network Ice\BlackIce
    • HKLM\SOFTWARE\McAfee.com\Personal Firewall
    • HKLM\SOFTWARE\ComputerAssociates\eTrust EZ Armor
    • HKLM\SOFTWARE\RedCannon\Fireball
    • HKLM\SOFTWARE\Kerio\Personal Firewall 4
    • HKLM\SOFTWARE\KasperskyLab\InstalledProducts\Kaspersky Anti-Hacker
    • HKLM\SOFTWARE\Tiny Software\Tiny Firewall
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Look n Stop 2.05p2
    • HKCU\SOFTWARE\Soft4Ever
    • HKLM\SOFTWARE\Norman Data Defense Systems
    • HKLM\SOFTWARE\Agnitum\Outpost Firewall
    • HKLM\SOFTWARE\Panda Software\Firewall
    • HKLM\SOFTWARE\InfoTeCS\TermiNET
  • connotify.dll đảm nhiệm vai trò kênh báo cáo tối thiểu
    • Được đăng ký bằng Windows AddConnectNotify() API, nên sẽ được gọi mỗi khi xuất hiện kết nối mạng mới dựa trên RAS
    • Giải mã chuỗi làm rối để lấy named pipe \\.\pipe\p577, kết nối tới pipe cục bộ, ghi lại tên kết nối từ xa và cục bộ rồi thoát
    • Không phải module thực thi độc lập và cần được tiến trình host đăng ký
    • Tên tệp svcmgmt.dll
    • Kích thước 45056 bytes
    • MD5 410eddfc19de44249897986ecc8ac449
    • SHA1 675cb83cec5f25ebbe8d9f90dea3d836fcb1c234
    • SHA256 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
    • Thời gian liên kết 2005-06-06 18:42:45 UTC
    • Loại PE32 DLL (i386, 4 sections)

Cấu trúc driver và cách vá bộ nhớ

  • fast16.sys là thành phần mạnh nhất trong framework, được cấu hình là boot-start filesystem driver nên được nạp ở giai đoạn rất sớm cùng với driver đĩa
  • Cấu hình là Start=0, Type=2, nhóm lớp SCSI, và tự chèn mình lên trên NTFS, FAT, MRxSMB
  • Khi vào ban đầu, nó đặt giá trị EnablePrefetcher dưới Session Manager\PrefetchParameters thành 0 để các yêu cầu trang mã sau đó phải đi qua toàn bộ stack filesystem
  • Nó động phân giải kernel API bằng mã hóa chuỗi XOR đơn giản và quét ntoskrnl.exe, đồng thời phơi bày \Device\fast16, \??\fast16DeviceType tùy chỉnh 0xA57C
  • Bằng IoRegisterFsRegistrationChange, nó gắn worker device object lên trên các thiết bị filesystem đang hoạt động và mới tạo, rồi chặn các đường IRP_MJ_CREATE, IRP_MJ_READ, IRP_MJ_CLOSE, IRP_MJ_QUERY_INFORMATION, IRP_MJ_FILE_SYSTEM_CONTROL cùng các đường Fast I/O liên quan
  • Dù được nạp từ thời điểm khởi động, engine tiêm mã cấp kernel thực tế chỉ được kích hoạt sau khi explorer.exe được mở
  • Mục tiêu để vá phải đồng thời thỏa mãn hai điều kiện
    • Tên tệp kết thúc bằng .EXE
    • Ngay sau PE section header cuối cùng có chuỗi ASCII có thể in được bắt đầu bằng Intel
  • Điều kiện này nhắm tới các tệp thực thi được build bằng Intel C/C++ compiler, cho thấy kẻ tấn công biết toolchain của phần mềm mục tiêu
  • Với các tệp phù hợp điều kiện, PE header trong bộ nhớ sẽ bị sửa đổi, chèn mới hai section .xdata, .pdata, rồi lấp đầy byte của section mã gốc để giữ lại một bản sao mã sạch
  • Các giá trị nhận diện của fast16.sys như sau
    • Tên tệp fast16.sys
    • Kích thước 44,580 bytes
    • MD5 0ff6abe0252d4f37a196a1231fae5f26
    • SHA1 92e9dcaf7249110047ef121b7586c81d4b8cb4e5
    • SHA256 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
    • Loại PE32 executable for MS Windows 5.00 (native), Intel i386, 5 sections
    • Thời gian liên kết 2005-07-19 15:15:41 UTC

Engine vá dựa trên quy tắc và đặc tính mục tiêu

  • Engine vá là một scanner tối giản dựa trên trạng thái gồm 101 quy tắc, âm thầm thay đổi mã thực thi trong bộ nhớ bằng logic so khớp mẫu và thay thế khi tệp được đọc từ đĩa
  • Để duy trì hiệu năng, nó dùng dispatch array 256 byte để lọc nhanh một số byte đầu, cho phép wildcard bên trong mẫu, và một số quy tắc thiết lập/kiểm tra state flag để thực hiện các chuỗi sửa đổi nhiều bước
  • Phần lớn các mẫu vá tương ứng với các chuỗi lệnh phổ biến trong mã x86 dùng để chiếm quyền hoặc tác động tới luồng thực thi, nhưng có một mẫu gồm khối lệnh FPU lớn hơn nhiều
  • Khối FPU này là mã chuyên dụng cho số học chính xác và scale giá trị trong mảng nội bộ, cho thấy bản chất khác với kiểu tiêm mã độc thông thường
  • Nhóm nghiên cứu đã chuyển các quy tắc vá thành mẫu hex của YARA signature rồi áp dụng lên kho phần mềm cùng thời, và số tệp khớp từ hai mẫu trở lên là cực ít, dưới 10 tệp
  • Các tệp trúng khớp có điểm chung là đều là công cụ tính toán chuyên biệt trong các lĩnh vực như kỹ thuật dân dụng, vật lý và mô phỏng quy trình vật lý
  • Bản vá FPU scale các giá trị được truyền vào ba mảng nội bộ để tinh chỉnh phép tính, cho thấy mục tiêu không phải truy cập trái phép hay phát tán thông thường mà là can thiệp kết quả số liệu
  • Do chưa xác định được đầy đủ cả binary mục tiêu lẫn workload, ý nghĩa của các mảng vẫn chưa thể chỉ ra hoàn toàn
  • Nếu phép tính được kiểm chứng trên hệ thống riêng biệt thì kiểu phá hoại này có thể thất bại, nhưng nếu cùng một driver được triển khai lên nhiều hệ thống dùng chung mạng và môi trường bảo mật thì khả năng phát hiện sai khác qua đối chiếu độc lập cũng giảm đi
  • Phần phụ lục có đính kèm nguyên văn một số mẫu được trích từ engine vá
    • 48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00
    • D8 E1 D9 5D FC D9 04 00
    • 55 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 00
    • 8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00
    • B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00

Các ứng viên mục tiêu vá lỗi

  • Đối tượng có kết quả khớp mẫu chồng lấp mạnh nhất là LS-DYNA 970, PKPM, và MOHID
  • LS-DYNA 970 là phần mềm mô phỏng kỹ thuật dùng để phân tích hành vi của vật liệu và kết cấu trong các điều kiện cực hạn, xử lý các bài toán va chạm ô tô, nổ, xung kích, tạo hình kim loại và quy trình sản xuất, và được sử dụng trong ô tô, hàng không vũ trụ, nghiên cứu quốc phòng-quân sự, sản xuất và khoa học vật liệu
    • Đã được phát triển từ năm 1976
    • MD5 1d2f32c57ae2f2013f513d342925e972
    • SHA1 2fa28ef1c6744bdc2021abd4048eefc777dccf22
    • SHA256 5966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010
    • Kích thước tệp 5,225,591 bytes
    • Thời gian liên kết 2003-10-24 16:34:57 UTC
    • Loại tệp PE32 executable for MS Windows 4.00 (console), Intel i386, 7 sections
  • PKPM là bộ sản phẩm CAD kỹ thuật kết cấu được sử dụng rộng rãi ở Trung Quốc, gồm nhiều mô-đun thực thi bao phủ toàn bộ vòng đời thiết kế kết cấu công trình
    • SATWE là động cơ lõi phụ trách phân tích kết cấu 3 chiều cho sàn, dầm, cột, tường và toàn bộ khung
    • Giá trị nhận diện mô-đun thiết kế cắt bê tông
      • MD5 af4461a149bfd2ba566f2abefe7dcde4
      • SHA1 586edef41c3b3fba87bf0f0346c7e402f86fc11e
      • SHA256 09ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22
      • Kích thước tệp 7716864 bytes
      • Loại tệp PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections
      • Thời gian liên kết 2011-08-26 10:58:17 UTC
    • Giá trị nhận diện mô-đun Building Structure CAD
      • MD5 49a8934ccd34e2aaae6ea1e6a6313ffe
      • SHA1 3ce5b358c2ddd116ac9582efbb38354809999cb5
      • SHA256 8b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0
      • Kích thước 11849728 bytes
      • Thời gian liên kết 2005-12-01 08:35:46 UTC
      • MD5 e0c10106626711f287ff91c0d6314407
      • SHA1 650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05
      • SHA256 06361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47
      • Kích thước 16355328 bytes
      • Thời gian liên kết 2012-07-07 08:47:11 UTC
    • Giá trị nhận diện động cơ phân tích kết cấu SATWE
      • MD5 2717b58246237b35d44ef2e49712d3a2
      • SHA1 d475ace24b9aedebf431efc68f9db32d5ae761bd
      • SHA256 bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613
      • Kích thước 9908224 bytes
      • Thời gian liên kết 2011-01-12 06:37:39 UTC
      • MD5 daea40562458fc7ae1adb812137d3d05
      • SHA1 1ce1111702b765f5c4d09315ff1f0d914f7e5c70
      • SHA256 da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1
      • Kích thước 8454144 bytes
      • Thời gian liên kết 2012-11-29 03:10:12 UTC
      • MD5 2740a703859cbd8b43425d4a2cacb5ec
      • SHA1 ca665b59bc590292f94c23e04fa458f90d7b20c9
      • SHA256 aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33
      • Kích thước 16568320 bytes
      • Thời gian liên kết 2014-12-30 03:23:43 UTC
      • MD5 ebff5b7d4c5becb8715009df596c5a91
      • SHA1 829f8be65dfe159d2b0dc7ee7a61a017acb54b7b
      • SHA256 37414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062
      • Kích thước 8089600 bytes
      • Thời gian liên kết 2009-04-22 01:46:46 UTC
      • MD5 cb66a4d52a30bfcd980fe50e7e3f73f0
      • SHA1 e6018cd482c012de8b69c64dc3165337bc121b86
      • SHA256 66fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2
      • Kích thước 9219072 bytes
      • Thời gian liên kết N/A
    • Giá trị nhận diện tệp PKPM CAD bổ sung
      • MD5 075b4aa105e728f2b659723e3f36c72c
      • SHA1 145ef372c3e9c352eaaa53bb0893749163e49892
      • SHA256 c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa
      • Kích thước 6852608 bytes
      • Thời gian liên kết 2012-06-18 10:01:54 UTC
      • MD5 cf859f164870d113608a843e4a9600ab
      • SHA1 952ed694b60c34ba12df9d392269eae3a4f11be4
      • SHA256 7e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909
      • Kích thước 8392704 bytes
      • Thời gian liên kết 2012-11-29 03:10:12 UTC
  • MOHID là hệ thống mô hình hóa thủy vực mã nguồn mở do MARETEC thuộc Instituto Superior Técnico ở Lisbon, Bồ Đào Nha phát triển, xử lý thủy động lực học biển và ven bờ, mô phỏng chất lượng nước, vận chuyển trầm tích, mô hình hóa tràn dầu và theo dõi hạt Lagrangian
    • Họ cho biết đến thời điểm hiện tại vẫn chưa thể xác định một cách dứt khoát hiệu ứng tấn công đã được nhắm tới
    • MD5 f4dbbb78979c1ee8a1523c77065e18a5
    • SHA1 9e089a733fb2740c0e408b2a25d8f5a451584cf6
    • SHA256 e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a
    • Kích thước tệp 5443584 bytes
    • Loại tệp PE32 executable for MS Windows 4.00 (console), Intel i386, 3 sections
    • Thời gian liên kết 2002-10-18 09:29:54 UTC
  • LS-DYNA từng được trích dẫn cùng với nghiên cứu về mô hình hóa máy tính liên quan đến phát triển vũ khí hạt nhân trong các bản tin công khai về nghi vấn Iran vi phạm Mục T của JCPOA

Quy tắc phát hiện và chỉ dấu xâm nhập

  • Chỉ dấu xâm nhập

    • Ba tệp đã được xác nhận là fast16.sys, connotify.dllsvcmgmt.exe
    • fast16.sys: MD5 0ff6abe0252d4f37a196a1231fae5f26, SHA1 92e9dcaf7249110047ef121b7586c81d4b8cb4e5, SHA256 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
    • connotify.dll: MD5 410eddfc19de44249897986ecc8ac449, SHA1 675cb83cec5f25ebbe8d9f90dea3d836fcb1c234, SHA256 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
    • svcmgmt.exe: MD5 dbe51eabebf9d4ef9581ef99844a2944, SHA1 de584703c78a60a56028f9834086facd1401b355, SHA256 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
  • apt_fast16_carrier

    • Được thiết kế để bắt carrier, payload Lua và biến thể văn bản thuần, hash tham chiếu là 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
    • Sử dụng magic bytecode Lua 1B 4C 75 61, cùng các chuỗi build_wormlet_table, unpropagate, scm_wormlet_install, install_implant, start_worm, ok_to_propagate
    • Đưa nhiều khóa registry của sản phẩm bảo mật như Symantec, Sygate Personal Firewall, Zone Labs\\TrueVector, Kaspersky Anti-Hacker vào điều kiện
    • Cũng phát hiện mẫu byte chuỗi mã hóa, 2 hằng số mật mã, mã giải mã độ dài của container lưu trữ, và chữ ký bản ghi lưu trữ có chứa chuỗi file
    • Điều kiện được thỏa mãn khi tệp có header MZ và nhỏ hơn 10MB, đáp ứng 3 mục $s*, 12 mục $rk*, bất kỳ mục $e*, vị trí gần nhau của 2 hằng số mật mã, cùng một trong $code1, $stor1, hoặc khi đáp ứng magic Lua và 7 mục $s*
  • apt_fast16_driver

    • Được thiết kế để bắt driver hoặc các tệp dự án liên quan, hash tham chiếu là 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
    • Sử dụng nhiều chuỗi nhận diện tệp nguồn như @(#)foo.c :, @(#)par.h :, @(#)pae.h :, @(#)ree.c :
    • Bao gồm các mẫu \\Device\\fast16, \\??\\fast16, C:\\buildy\\, driver\\fd\\i386\\fast16.pdb, push 0A57Ch ; DeviceType
    • Chữ ký cũng chứa các mẫu API đẩy ở dạng XOR cho ExAllocatePool, ExAllocatePoolWithTag, ExFreePool, ExFreePoolWithTag
    • Điều kiện được thỏa mãn trên tệp nhỏ hơn 10MB khi cùng có header MZ và 2 đường dẫn PDB, C:\\buildy\\ và 1 định danh nguồn, #devtype == 3, pe.machine == pe.MACHINE_I386, pe.subsystem == pe.SUBSYSTEM_NATIVE, bất kỳ api*, một trong 2 mục dev*, hoặc khi đáp ứng 6 định danh nguồn
  • clean_fast16_patchtarget

    • Phát hiện phần mềm là mục tiêu bị vá, được ghi là most probably clean, hash tham chiếu là 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
    • Sử dụng nhiều mẫu byte kéo dài từ $el0 đến $el99
    • Điều kiện là tệp nhỏ hơn 20MB, có header MZ, và khớp từ 2 chữ ký đã định nghĩa trở lên
  • apt_fast16_patch

    • Phát hiện chính mã vá, có thể tồn tại trong tệp đã bị vá tĩnh hoặc trong memory dump
    • Hash tham chiếu là 0ff6abe0252d4f37a196a1231fae5f26
    • Định nghĩa 3 mẫu byte là $p1, $p2, $p3
    • Điều kiện là any of them, tức chỉ cần khớp một trong ba mẫu là sẽ bị phát hiện

Phả hệ và hàm ý lịch sử

  • Chuỗi @(#)par.h $Revision: 1.3 $ bên trong binary là một manh mối giúp suy đoán phả hệ của framework này
  • Tiền tố @(#) chỉ tới tập quán quản lý mã nguồn kiểu SCCS/RCS của Unix trong thập niên 1970–1980, và dấu vết như vậy là hiếm thấy trong driver kernel Windows giữa những năm 2000
  • Những artifact này dường như gần với dấu vết của một kỹ sư kỳ cựu quen thuộc với văn hóa và toolchain của các môi trường Unix bảo mật cao đời cũ hơn là một nhà phát triển thuần Windows điển hình
  • svcmgmt.exe đã được tải lên VirusTotal gần 10 năm trước, nhưng đến nay tỷ lệ phát hiện vẫn rất thấp, và chỉ một engine xếp nó vào nhóm malware phổ thông với mức độ tin cậy hạn chế
  • Khi kết hợp với chữ ký Territorial Dispute của ShadowBrokers, fast16 buộc người ta phải nhìn lại thời điểm phát triển của một chiến dịch phá hoại mạng cấp quốc gia cực kỳ bí mật
  • fast16 cho thấy một cấu trúc nhất quán kết hợp công cụ script nhúng, nhắm mục tiêu hẹp dựa trên compilervá ở cấp kernel từ trước các họ được biết đến rộng rãi hơn
  • Trong thời gian dài, gần như không có phân tích công khai, chiến dịch được đặt tên, hay mối liên hệ với các sự cố tiêu biểu; ngay cả các dấu hiệu nội bộ có thể đọc được mà tác giả để lại cũng chỉ ở dạng tiết chế như *** Nothing to see here – carry on***
  • Nó được định vị như một mắt xích kết nối trong dòng tiến hóa APT dẫn tới các toolkit dựa trên Lua và LuaJIT về sau

1 bình luận

 
Ý kiến trên Hacker News
  • Đoạn này đặc biệt thú vị
    Phép so sánh việc thấy ký pháp SCCS/RCS trong mã kernel Windows năm 2005 giống như nhìn thấy điện thoại quay số trong văn phòng ngày nay khá thuyết phục
    Phòng thí nghiệm vật lý thiên văn nơi tôi làm việc năm 2006 vẫn còn dùng svn, và trong codebase có rất nhiều Fortran mang dấu vết của các hệ thống từ thập niên 70~80
    Dù vậy nó vẫn chạy tốt nhờ các trình biên dịch tối ưu hóa hiện đại, và quá trình chuyển từ Vax sang Linux vào thập niên 90 cũng mượt đến đáng ngạc nhiên
    Nó làm tôi nhớ đến bài nói chuyện do over or make due, với ý đại khái là viết lại toàn bộ một codebase lớn đang chạy ổn thường không đáng, nếu với công cụ hiện đại người ta vẫn có thể chắp vá để tiếp tục dùng được

    • Tôi từng làm ở một công ty vẫn dùng SCM dựa trên RCS cho tới khoảng năm 2012, đó là một hệ thống kiểu chắp vá bọc RCS quanh một file server dùng chung
      Tên của nó là MKS, và quản lý một cây revision cụ thể dưới dạng "project file", trông như một bản cũ từ thập niên 90 chứ không phải ngay cả phiên bản làm lại bằng Java EE
      Ở đầu file có các thẻ như $Revision: 1.3 $ và changelog, nhưng khá nhiều file mới thậm chí không có thẻ nên cũng chẳng được thay thế gì, tính nhất quán thì rất tệ
      Dòng thiết bị mục tiêu bắt đầu từ khoảng giữa thập niên 90, nhưng bản thân code ở thời điểm đó trên thực tế hầu như không có gì quá 5 năm tuổi
      Dù chỉ có vài chục kỹ sư, xung đột commit vẫn xảy ra thường xuyên và toàn bộ cây mã hay bị hỏng
      Tôi viết một script cho vui để đọc toàn bộ lịch sử và nhập vào git, nhưng chỉ cần lùi lại vài năm thôi là bản ghi đã hoàn toàn hỗn loạn
      Tôi không biết vì sao họ vẫn dùng nó tới lúc đó, nhưng các công ty phần cứng đôi khi đến gần đây hơn người ta tưởng vẫn xem quản lý mã nguồn như kiểu "thư mục chia sẻ từ xa", nên có lẽ quản lý phiên bản phía phần mềm không phải ưu tiên
    • Nếu năm 2026 mà bạn đang dùng R, khả năng rất cao là ở đâu đó bạn gần như chắc chắn đang gọi mã được biên dịch từ Fortran của thập niên 70~80
      Trong thế giới tính toán số, dòng dõi đó vẫn còn giữ vai trò nền tảng
    • Trước đây tôi hơi nghi ngờ giả thuyết Stuxnet do chính phủ hậu thuẫn, nhưng đọc những ghi chú kiểu này thì tôi hiểu vì sao người ta lại suy đoán như vậy
      Cho đến thập niên 2000 vẫn thực sự có những nơi dùng RCS, và bản thân công cụ này ở vài điểm còn tốt hơn SVN hay CVS
    • Vậy thì có phải điều đó có nghĩa là những cơ quan viết tắt 3 chữ cái ấy có thể lôi được nhân lực xuất thân đúng lĩnh vực cho từng loại malware không nhỉ
      Chẳng hạn tôi cũng hình dung được chuyện fast16 do người vốn viết phần mềm tính toán khoa học làm ra, còn Stunex thì do người từng làm ở Siemens viết
    • Refactoring không phải thuốc chữa bách bệnh
      Nếu nguyên nhân ban đầu khiến code cần refactoring vẫn còn nguyên, thì cuối cùng nó cũng sẽ quay lại trạng thái cũ
      Những nguyên nhân đó nhiều khi ăn rất sâu ở tầng tâm lý như thói quen, niềm tin, hay chấn thương nghề nghiệp của lập trình viên
      Khi định luật Conway chồng lên nữa, đội ngũ rốt cuộc khó tránh khỏi việc tạo ra phần mềm phản chiếu cấu trúc tổ chức lớn hơn, và nếu tổ chức không đổi thì kết quả refactoring phần lớn cũng sẽ lặp lại
      Ngoại lệ thường là lúc tiếp quản codebase của đội khác hoặc code của người tiền nhiệm rồi tổ chức lại cấu trúc
      Nhưng nếu cùng một nhóm tuyên bố refactor chính code của họ, thì thường chỉ dễ thành việc làm thêm một cái bẫy chuột thuận tay hơn cho chính họ
      Việc lặp đi lặp lại cải tiến sản phẩm của chính tư duy mình thì không sao, nhưng muốn bước xuống khỏi vòng quay đó thì phải viết ra nguyên nhân của kiến trúc tệ và tự soi xét mình một cách lạnh lùng
      Câu mà nhiều lập trình viên muốn tin là "chỉ cần cẩn thận và chăm chỉ thì một thiết kế hơi tệ vẫn có thể được hiện thực hóa tốt" đa phần không đúng
      Cuối cùng gốc rễ vẫn là thiết kế; hoặc chấp nhận cái cây mọc ra từ đó, hoặc chặt nó đi, chứ chỉ tỉa cành thì giới hạn rất lớn
  • Bài này tạo cảm giác khá rợn người
    Chỉ riêng chuyện malware này đã nằm dưới lưới phát hiện suốt 20 năm cũng đã đủ đáng ngại rồi

  • Đây là link tải cho ai tò mò
    https://bazaar.abuse.ch/sample/9a10e1faa86a5d39417cae44da5ad...
    Chắc tôi sẽ dựng một Windows XP VM trước đã

    • Không biết đã từng có ai đăng file dịch vụ Windows lên chưa
      Cái này trông chỉ như loader thôi
  • IEEE-754 chỉ bắt buộc làm tròn đúng với +-*/ và sqrt
    Các hàm siêu việt như sin/cos/exp/log/pow được phép lệch vài ULP cuối, và glibc, musl, MSVC, Intel SVML thực tế cũng hoạt động như vậy
    PID chủ yếu dùng các phép toán cơ bản nên ít bị ảnh hưởng bởi khác biệt của libm, nhưng điều khiển vector động cơ hay tuyến tính hóa cảm biến thì đụng tới các hàm này ở mỗi chu kỳ, nên sai khác nhỏ sẽ tích lũy
    Vì vậy ngay cả khi diff mã nguồn hoàn toàn không có gì, hành vi thực địa vẫn có thể drift chỉ vì libm được liên kết đã thay đổi
    Những khác biệt này thực sự lộ ra ở Payne-Hanek argument reduction hoặc ở biên của table-maker's dilemma trong trường hợp xấu nhất
    Có lẽ vì vậy mà hướng dẫn cho các hệ thống an toàn tối quan trọng không chỉ viết chung chung là "tuân thủ IEEE-754" mà còn cố định cả bản build libm cụ thể

  • Đây thật sự là một phát hiện lớn
    Tôi rất tò mò chính xác các quy tắc này nhắm vào đối tượng nào và đã thay đổi kết quả ra sao
    Có khi nó được thiết kế để chỉ tạo ra khác biệt trong những điều kiện mô phỏng cực kỳ cụ thể, kiểu như lò phản ứng hạt nhân chẳng hạn

    • Tôi có tìm hiểu một chút về việc phần mềm như LS-DYNA có thể bị can thiệp kiểu gì
      Chẳng hạn phương trình EOS_JWL trong tài liệu công khai [1] là công thức LS-DYNA triển khai, và khi dùng cùng các phương trình khác, có vẻ nó có thể được dùng để tính thời gian từ lúc ngòi nổ của đầu đạn tên lửa kích nổ thuốc chính đến khi tạo ra một sóng áp suất nhất định ở khoảng cách 20 m
      Từ kết quả đó cũng có thể suy ngược ra thời điểm kích nổ cần thiết của ngòi
      Các phương trình và tham số đưa vào LS-DYNA đến từ những nghiên cứu khoa học như [2], đây là nghiên cứu thí nghiệm về thuốc nổ mạnh của chính phủ Mỹ trong thập niên 1980
      Trong đó còn có các thí nghiệm đo đặc tính ma sát khi thuốc nổ cọ xát với nhiều loại vật liệu bao quanh nó
      Vì các phương trình mô hình hóa thuốc nổ đã có sẵn rồi, nên chỉ cần chỉnh nhẹ các công thức như thế để thêm nhiễu ±20% vào hệ số ma sát, nhà khoa học hay kỹ sư rất có thể sẽ nghi vấn chất lượng chế tạo thép trước khi nghĩ tới chuyện phần mềm bị thao túng
      Một phép so sánh hiện đại là tưởng tượng một quốc gia thù địch nào đó đang dùng bản crack Ansys Autodyn 2026 R1 do nhóm cracking Trung Quốc đăng trên diễn đàn Trung Quốc, tải từ một số ít seeder phía sau ISP Nga
      Rồi về sau khi số đo thực nghiệm và kết quả tính toán cứ liên tục lệch nhau, lúc đó mới nghi ngờ rằng bản crack có thể đã bị chỉnh sửa có chủ ý
      Tuy vậy hiện giờ có lẽ quốc gia thù địch đó sẽ dễ lấy bản chính thức hơn bằng cách trích xuất từ mạng bị xâm nhập của một trường đại học ngẫu nhiên hay một công ty tư vấn hàng không vũ trụ/quốc phòng
      Cũng có thể là ngây thơ nếu cho rằng quốc gia thù địch năm 2026 sẽ không thể tự làm phần mềm ngay từ đầu, và họ vẫn có thể đạt được kết quả mong muốn bằng tính toán thủ công hoặc thí nghiệm
      Cuối cùng thì để xác minh chất lượng chế tạo, thiết bị và năng lực thí nghiệm vốn dĩ vẫn là thứ phải có
      Phần mềm mô phỏng chủ yếu chỉ giúp giảm số lần làm mô hình và thí nghiệm vật lý để tiết kiệm chi phí và thời gian
      Ví dụ như [3], chạy 1000 lần một kịch bản đạn pháo bắn trúng tấm giáp thì rẻ, nhưng lặp lại điều đó ngoài đời thực sẽ tốn kém và mất thời gian hơn nhiều
      [1] https://ftp.lstc.com/anonymous/outgoing/jday/manuals/LS-DYNA...
      [2] https://www.osti.gov/servlets/purl/6530310
      [3] https://www.youtube.com/watch?v=_dv2PecKUBM
  • Khi thấy những thứ tôi công khai có kèm dữ liệu revision RCS, tôi muốn mọi người chí ít phải khựng lại một chút

  • Quyển sách tôi đọc gần đây là Sandworm: A New Era of Cyberwar and the Hunt for the Kremlin's Most Dangerous Hackers, của Andy Greenberg
    Nó khá hay, và vì thông tin mới vẫn đang tiếp tục xuất hiện nên tôi nghĩ có thể sẽ cần một loạt tiếp theo

  • Nhìn Guix và điện toán tái lập được đang dần port được cả sang PowerPC lẫn các máy legacy, tôi nghĩ chính phủ hay các tổ chức kiểu 1984, cùng một số nhóm ở Trung Đông, hẳn sẽ thực sự ghét điều đó
    Môi trường càng dị chủng thì càng có lợi

  • Con số mấu chốt là worm
    Kiểm tra bằng máy tính khác cũng không phát hiện được, vì ngay từ đầu đã không hề có chiếc máy thứ hai sạch sẽ nào cả

  • Đây là một phát hiện thú vị, nhưng bình luận liên quan tới quản lý mã nguồn có vẻ hơi lệch
    Những thứ giống SCCS thời đó chắc vẫn còn tồn tại đâu đó, và tôi cũng thoáng bối rối không biết CVS có thuộc kiểu tương tự không

    • Tôi nghĩ bình luận đó có lẽ muốn nói rằng chuyện ấy hiếm trong phần mềm Windows
      Nó gợi ý rằng các lập trình viên vốn dĩ cũng làm việc ở phía UNIX, vì SCCS/RCS là thứ rất phổ biến ở đó