[RE023] Phân tích nhanh và xử lý loạt biến thể mã độc mới của nhóm tin tặc Panda đã từng tấn công Ban Cơ yếu Chính Phủ Việt Nam đang hoạt động mạnh gần đây

 


Trong quá trình theo dõi, hunting các mẫu mã độc đã từng được sử dụng trong đợt tấn công vào Ban Cơ yếu Chính phủ Việt Nam, và đây cũng là dòng mã độc đã  từng tấn công vào một tập đoàn lớn tại Việt Nam từ năm 2019, chúng tôi đã phát hiện một loạt biến thể mới của các mã độc liên quan tới nhóm này. Bạn đọc có thể xem lại, đối chiếu thông tin bên dưới với bài đã đăng: [RE017-3]Phân tích kỹ thuật dòng mã độc mới được sử dụng để tấn công chuỗi cung ứng nhắm vào Ban Cơ yếu Chính phủ Việt Nam của nhóm tin tặc Panda Trung Quốc (Phần 3).

I.  Phân tích các loader

Mẫu 2b15479eb7ec43f7a554dce40fe6a4263a889ba58673b7490a991e7d66703bc8 được chúng tôi phát hiện trên VirusTotal vào ngày 11/06/2021, và được submit lên từ Việt Nam:

Điểm đáng chú ý ở file này là đuôi .NLS (National Language Support), nhưng nó lại là một DLL PE64. Chúng tôi tiến hành phân tích sâu vào mẫu này và đã xác định được đây là một mẫu dường như được build bởi chính tin tặc đã từng viết và build smanager_ssl.dll, msiscsi.dll, verifierpr.dll, wercplsupport.dll.

  • Hash: 2B15479EB7EC43F7A554DCE40FE6A4263A889BA58673B7490A991E7D66703BC8
  • Compiled time: Tuesday, 04.08.2020 06:48:49 UTC
  • Tên Dll gốc: DllSvchDtchX64.bin
  • Tên file mạo danh: C_20253.NLS, đặt trong \Windows\System32
  • Visual Studio version: 2015, linker 14.0, update 3
  • Coding language: C

Thông tin RichID:

Các bạn có thể đối chiếu lại với thông tin RichID ở part 3 – hình 3. Các file mạo danh NLS trong thư mục Windows\System32 và Windows\SysWow64 đã được tin tặc sử dụng chứa config và CC info trong đợt tấn công một tập đoàn lớn Việt Nam (part 3 –hình 4). Sau đó, tin tặc đã nâng cấp vào tháng 4/2020 thành các PE thật sự để thực hiện các tác vụ khác.

DllSvchDtchX64.bin được viết như một service Dll, code và style giống chính xác code của smanager_ssl.dllwercplsupport.dll. Các hàm ServiceMain, SvcCtrlHandlerSetSvcStatus đều giống nhau.

Hàm ServiceMain (so sánh với part 3 – hình 5):

Điểm khác nhỏ là ngoài biến toàn cục g_dwServiceState, tin tặc đã dùng thêm một biến toàn cục nữa là g_dwSvcStopped để Sleep liên tục đến khi service này của DllSvchDtchX64.bin được Windows stop. Với mẫu này, tin tặc không đưa tác vụ thực thi code malware chính vào hàm ServiceMain mà đưa thẳng vào hàm DllMain.

Hàm SetSvcStatus (đối chiếu với part 3 – hình 7 và 8):

Tại hàm DllMain, malware giải mã SID và Mutex name, tạo thread để thực thi tác vụ khác. SID và Mutex name này được dùng trong MainThreadProc của thread được tạo.

Thuật toán mã hóa encrypt và decrypt được tin tặc dùng trong mẫu này là Salsa/Chacha20. Có thể phát hiện bằng plugin FindCrypt3 hay Capa của FireEye.

Source code C implement thuật toán Salsa và Chacha có nhiều ở các thư viện Lib Crypto, ví dụ Cryptlib, libtomcrypt, libcrypto… Nhưng source C chúng tôi decompile giống với source ở đây hơn cả: http://cr.yp.to/snuffle/ecrypt.c. Chúng tôi không xác định chắc 100% là tin tặc đã thay đổi thuật toán hay do cơ chế optimize của VC compiler. Bạn đọc có thể tham khảo để tự đối chiếu.

Để giải mã mutex name và SID, tin tặc convert hai chuỗi hardcoded dạng hex string thành buffer của byte bằng hàm Hex2Bytes tại địa chỉ 0x7FFCD3492220, rồi đưa byte buffer này vào hàm Salsa/Chacha20 giải mã tại địa chỉ 0x7FFCD34914F0

Sau giải mã, có được các thông tin:

  1. SID = S-1-5-18
  2. Mutex Name = Global\24yQoCWKY3kbZexjzTR6hc7pHU1lI0EV

SID = “S-1-5-18” có name là Local System, các Dll Service chạy dưới account này. Bạn đọc có thể tham khảo theo bài viết: Well-known security identifiers in Windows operating systems. Tin tặc khai báo và sử dụng một struct như bên dưới để lưu các config quy định hoạt động của dòng malware này. Struct này có sizeof = 0x248 (584 decimal), và đã được mã hóa bằng thuật toán Salsa/Chach20 đã dùng ở trên:

Ý nghĩa của các trường strong struct này:

  • dwSizeData: Size thật sự của cả vùng data thật tính từ field fExecuteShellcode.
  • dwHash: ROL 0xB hash của cả vùng data tính từ rgbIv.
  • rgbIv: array 12 byte, dùng làm value cho parameter Iv cho hàm salsa_decrypt_bytes.
  • fExecuteShellcode: flag quy định vùng data trong array rgbShellcode có data là shellcode, và malware sẽ thực thi shellcode này hay không.
  • fCreateMutex: flag quy định có hay không tạo mutex với name đã giải mã ở trên.
  • fCheckSID: check malware có đang được thực thi đúng trong nhóm SID đã giãi mã ra ở trên.
  • fCheckExePath: check malware đang thực thi có đúng Exe name hay Parent Exe name đúng với field szExePath hay không.
  • szExePath: Tên của Exe hay Parent Exe cần check.
  • dwShellcodeSize: Size thật của vùng rgbShellcode (rgb = Range of Bytes) hay length (in bytes) của path của file shellcode.
  • rbgShellcode: Shellcode hay path của một dll hay shellcode khác cần load và thực thi.

Source decompiler của MainThreadProc, address = 0x7FFCD3491FD0.

Chú thích: g_config là biến toàn cục của struct CConfig nói trên. 0x14 (20) là tổng size của 3 field DWORD dwSizeData, DWORD dwHashBYTE rgbIv[12]

Sau khi check size đúng, hàm Decrypt sẽ giải mã ra config đã hardcoded, mã hóa bằng các hàm decrypt Salsa/Chacha20.

Giá trị của biến local hash trong hàm Decrypt này được bắt đầu tính từ địa chỉ của rgbIv, loop size là giá trị của field dwSizeData + 0xC (12 = sizeof(rgbIv)). Nếu giá trị hash đúng với field dwHash thì vùng data sẽ được giải mã.

Key giải mã là chuỗi hardcoded “u0FBSP2dDyTLhIQ9MXsEexmH7JbiN3k”, giá trị Iv là rgbIv, giải mã ra bắt đầu tại địa chỉ của field fExecuteShellcode (offset 0x14). Sau khi giãi mã hardcoded config, trong hình của MainThreadProc ở trên, malware bắt đầu kiểm tra các flag, flag nào bật 1 sẽ gọi hàm kiểm tra tương ứng.

Kiểm tra SID của user mà malware đang chạy:

Biến g_pwszSIDWCHAR *, đã được giải mã từ đầu (“S-1-5-18”). Nếu SID bằng nhau (stricmp return 0) thì hàm sẽ return TRUE.

Hàm check Exe name hiện tại hay Parent Exe name (khi malware run như một service Dll). Hàm cũng return TRUE khi Exe Name trùng với field szExePath:

Hàm tạo mutex cũng như các hàm CreateMutex thông thường:

Giá trị biến g_pwszMutexName đã được giải mã từ đầu: “Global\24yQoCWKY3kbZexjzTR6hc7pHU1lI0EV”. Mutex được tạo sẽ được lưu vào biến toàn cục g_hMutex.

Như trên hình của MainThreadProc, nếu field fExecuteShellcode được bật 1, shellcode sẽ được thực thi như bình thường (VirtualAlloc, copy và excute). Khi là 0, file shellcode sẽ được đọc lên từ rgbShellcode

g_hInstDLLHINSTANCE của malware, đang run như 1 service DLL, được gán giá trị tại hàm Entrypoint DllMain. Bạn đọc chú ý ba hàm PathRemoteFileSpec, PathAddBackslashPathAppend. Ba hàm này sẽ tái tạo path cho Shellcode file là từ một thư mục con cùng cấp với Malware. Trong trường hợp malware này có tên mạo danh là C:\Windows\System32\C_20253.NLS thì thư mục con đó sẽ cũng nằm trong C:\Windows\System32.

Sau khi lấy đường dẫn của file shellcode, shellcode sẽ được đọc lên, giãi mã, trả về con trỏ trỏ tới vùng shellcode đã được giãi mã.

Vùng nhớ chứa shellcode đã giải mã này được MainThreadProc thực thi. Với mẫu này, sau hàm Decrypt, chúng tôi chỉ có các thông tin config sau:

  • Các flag đều là 0
  • File shellcode là “ErrorSvc.dll”, field dwShellcodeSize = 0x1A (26)

II.   Hunting các loader tương tự

Dựa vào chuỗi đặc biệt hardcoded làm IV cho hàm mã hóa/giải mã Salsa/Chacha20 là “u0FBSP2dDyTLhIQ9MXsEexmH7JbiN3k”, chúng tôi đã tìm kiếm trên VirusTotal và Hybrid Analysis, ra rất nhiều những loader tương tự, hầu hết đều được đưa lên gần đây, chủ yếu từ Việt Nam, Hàn Quốc, Nhật Bản, Hồng Kông… và gần đây nhất là một mẫu từ Trung Quốc.

Tính tới ngày hôm qua, chúng tôi đã tìm được và phân tích thêm 7 mẫu loader như vậy. Source code hoàn toàn là một, chỉ khác khi thì được build như Exe, khi thì Dll. Và toàn bộ đều là PE64. Gồm các mẫu sau:

  1. 4578b3bf586658c47c8db1d497a8994d7637d28f16a11af9f6af64836085d4ed
    • Build Exe
    • Flags = 0
    • Shellcode path: stuffe.dll
  2. 8061df4d29ea57a420491f0db4bf37964070cc695f4b1b45af40e46194cc8c36
    • Build Exe
    • Flags = 0
    • Shellcode path: tmp01.dat
  3. 4b1928dbaf68e427db2f3971ea2ff5604d210ef0dee876d57281d7e395da8c37
    • Tên file mạo danh là C_892.NLS
    • Build as Dll, tên Dll gốc: DllSvchDtchX64.bin
    • Flags = 0
    • Shellcode path: winsec.dll
  4. d2beff6d7f5be68cdda36182d010e8103d86053fcc63f1166fec42727c26558d
    • Build as Dll, tên Dll gốc: DllSvchDtchX64.bin
    • Flags = 0
    • Shellcode path: access.sys
  5. d28984576620aebfa929767ad9453fe7549c969716d41ba49cbe6ca7fae72789
    • Build as Exe
    • Flag fExcuteShellcode = 1
    • Shellcode size = 0x107A2 (67490)
  6. 3714568d8c8b7359259e968664de3a6c13d6d7c16559dfb0a25f9aa8194e8de4
    • Build as Dll, tên Dll gốc: DllHijkDtchX64.bin
    • fCreateMutex, fCheckSID, fCheckExePath bật 1
    • Exe Parent Name để check: WmiApSrv.exe
    • Shellcode path: AxLnst.bin
    • Bạn đọc chú ý tên file Exe Parent. Exe này là file gốc của Windows, nằm trong thư mục \Windows\System32\Wbem. Nên malware này và AxLnst.bin cũng sẽ nằm trong thư mục này (theo hàm GetShellcodePath).Đây có thể là cách tấn công dùng WMI Exploitation mà nhóm Winnti/Derusbi đã và đang dùng. Bạn đọc tham khảo thêm ở đây.
  7. b69d9ed06cba8eea081df01bad146abb004a4cf5fb6b296017d82ebb18975386
    • Build as Exe
    • Flags = 0
    • Shellcode path: koreanflass.bin

III.   Hunting các malware cập nhật của nhóm này

Tiếp tục hunting theo các dấu hiệu các malware cũ mà nhóm này đã dùng trong các chiến dịch đã tấn công Việt Nam qua các năm, chúng tôi phát hiện nhóm này vẫn dùng các mẫu cũ, có update code và đều được build lại bằng Visual Studio 2019, v16.4 trở lên. Hoàn toàn build ở mode x64.

Nhóm này vẫn tiếp tục sự dụng những file mạo danh file NLS của Windows làm nơi chứa config hoặc làm shellcode file. Điểm nhận diện là nhóm này có một tin tặc chuyên dùng thư viện CryptoPP và coding theo C++ style, dùng std::string.

Các mẫu chúng tôi thu thập được rộ lên gần đây, trong tháng 5 và 6 này, cũng từ các quốc gia đã đề cập ở trên. Chúng tôi thu thập và phân tích một số mẫu sau:

  1. 5afc41060cf62d1613219caa108eb9714074479a413f4a26797c0358fc95a4db
    • Build bằng Visual Studio 2019 v16.9
    • PDB Path: C:\Users\VS\Desktop\Auto_Firefox\x64\Release\8.1.pdb
    • Dùng CryptoPP, C++ style
    • Xor value: 0x28
    • Build time: 08/06/2021 - 1:24:48 AM (UTC)
    • Hàm export: ServiceMain, run as a service Dll
    • Đọc, thực thi MSIscSI.Dll cùng thư mục và load vsmapi.dll trong SysWow64, gọi hàm export netEntryApi
  2. 8dd13f34d1734d3c844474ce98a4f39244e511bafbefd59b18bb7fb0b52ce895
    • Build bằng Visual Studio 2019 v16.9
    • PDB Path: C:\Users\Machine\Desktop\Work\20200913\Auto_Firefox\x64\Release\8.pdb
    • Dùng CryptoPP, C++ style
    • Build time: 19/09/2020 - 8:58:34 AM (UTC)
    • Hàm export: NetworkChecker
    • Giải mã, đọc hai config từ hai files NLS fake là C_4868.NLS và C_4869.NLS


  3. 9abf047566c6e9bd77120e8eb6c3503eef7c05dd4fd0abac9046d495291e5c8d
    • Build bằng Visual Studio 2008, code C style
    • Export 2 hàm Run và main. 2 hàm khác nhau nhưng code hoàn toàn giống nhau
    • PDB path: C:\Dev\16\3\x64\Release\F71.pdb
    • Build time: 01/06/2016 - 4:38:32 PM (UTC)
    • Mạo danh là VfWWDM.dll của Windows trong Resource Version Info
    • C2 hardcoded, xor với 0x27, là “www.newshcm.com”
    • Đọc 2 file NLS fake là C_436.NLS và C_20130.NLS. Giá trị xor để giải mã nội dung 2 file là 0x26 và 0x27
  4. 60fe689bafb1ce4def3fab1c91e69e46b223869314e4364fa8efb12e6a0bafba
    • Build bằng Visual Studio 2019 v16.9, C style
    • PDB path: C:\Users\VS\Desktop\Auto_Firefox\x64\Release\8.1.pdb
    • Hàm export: ServiceMain
    • Xor value: 0x2B, load dll pubiapi.dll trong Windows\SysWow64, gọi hàm export netEntryApi của dll này
  5. 68e871190f405131635ccaa851339c9ca3f61c3b6a9d84dbd7afc99b65edd588
    • Build bằng Visual Studio 2019 v16.9
    • Dùng CryptoPP, C++ style
    • Build time: 12/04/2021 - 9:18:26 PM (UTC)
    • Hàm export: netEntryApi
    • Cũng load 2 file NLS fake là C_4868.NLS và C_4869.NLS như (2)
  6. 918ad6c918b26de1e112281393f6ced9141712484bb0da5f8250fb36fc0d476b
    • Build bằng Visual Studio 2012, C style
    • PDB Path: C:\Dev\17D\Release\7.pdb
    • Build time: 30/04/2017 - 12:29:05 AM (UTC)
    • Export 2 hàm Run và main như (3)
    • CC hardcoded, xor with 0x1B, là “www.sexphm.com” và IP hardcoded 172.16.22.22
    • Đọc 2 file NLS fake là C_20831.NLS và C_20832.NLS trong Windows\System32
  7. c092546e9db9424d454cc21047d847ad93424440e7a4d339fe58fa9a4d8f6913
    • Là vsmapi.dll của (1)
    • Build bằng Visual Studio 2019 v16.9
    • Dùng CryptoPP, C++ style
    • PDB path: C:\Users\VS\Desktop\Auto_Firefox\x64\Release\8.pdb
    • Build time: 08/06/2021 - 1:24:51 AM (UTC)
    • Hàm export: netEntryApi
    • Cũng load 2 file NLS fake là C_4868.NLS và C_4869.NLS như (2) và (5)

Như vậy, chúng ta thấy, các mẫu mà nhóm này dùng trong chiến dịch lần này hầu hết đều được build lại, bên cạnh một số mẫu cũ trong kho của chúng chưa bị phát hiện. Có thể chúng đã được dùng, thâm nhập, cài cắm vào nhiều công ty, tổ chức của nhiều nước bao gồm cả Việt nam từ 2016. Tính tới thời điểm hiện tại, chúng tôi đã phát hiện được và tổng hợp được một số file NLS fake nhóm này đã dùng xuyên suốt từ đó tới nay, bao gồm:

  • C_201263a.NLS
  • C_20130.NLS
  • C_20253.NLS
  • C_20831.NLS
  • C_20832.NLS
  • C_20834.NLS
  • C_20835.NLS
  • C_21871.NLS
  • C_21872.NLS
  • C_436.NLS
  • C_4868.NLS
  • C_4869.NLS
  • C_877.NLS
  • C_878.NLS
  • C_892.NLS

Có thể còn rất nhiều file NLS mạo danh khác ngoài kia mà chúng tôi chưa phát hiện ra.

IV.   Tìm hiểu về các file C_xxxx.NLS file của Windows

Giá trị xxxx là một số, là định danh của một codepage. Ví dụ, Việt Nam có codepage là 1258, tức file C_1258.nls trên Windows là dành cho Việt Nam.

Định nghĩa về Codepage, bạn đọc có thể đọc tại đây. Giá trị các Codepage mà quốc tế và Windows đã quy ước bạn đọc có thể tham khảo tại đây. Giá trị lớn nhất của Codepage hiện nay là 65501, Unicode UTF-8. Trong khoảng từ 1 tới 65535 (0xFFFF), bạn đọc sẽ thấy rất nhiều khoảng trống, hơn 65 ngàn số. Nhóm tin tặc này đã dùng các số không có trên bản Codepage identifiers trên để đặt tên cho các file C_XXXX.NLS mạo danh.

Các file C_xxxx.NLS gốc của Windows dùng cho việc map và convert từ MultiByte qua lại Unicode character. Hai hàm API phổ biến thường dùng trong Windows là MultiByteToWideCharWideCharToMultiByte đều dựa trên các file C_xxxx.nls này tương ứng với Codepage hiện tại của Windows trên máy user.

Trên Windows 2000, XP, các file .nls này không được đưa vào danh sách các file Windows Protection Files, chỉ có .exe, .dll, .sys, .ocx. Từ Windows Vista trở đi, danh sách các loại file Windows Protection Files của Windows được mở rộng ra và .nls file được thêm vào. Bạn đọc có thể tham khảo các file được protected ở đây.

Các file C_xxx.nls được cài đặt khi người dùng cài đặt hệ điều hành Windows, được đặt trong 2 thư mục Windows\System32 và Windows\WinSXS\ trong vài thư mục con có tên xxx.codepage-core.xxx và xxx.codepage-additional-xxx. Các file C_xxxx.nls này đều có Owner là Trust Installer, user với quyền System và Administrators chỉ có thể Read, không có quyền thay đổi. Khi cố chuyển Owner và thay đổi các file này, Windows Resource Protection sẽ cảnh báo và phục hồi lại ngay.

Khi người dùng cài đặt Windows, danh sách các file C_xxxx.nls được Windows ghi tại KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage. Giá trị name là số codepage và giá trị value là tên file codepage.

Hình trên là  phần trong danh sách của Windows 10. Bạn đọc chú ý, ngoài các file .nls ra, Windows còn dùng các file C_xxxx.dll để phục vụ việc map, convert giữa codepage đó qua lại Unicode. Các dll này chỉ export một hàm duy nhất là NlsDllCodePageTranslation. Prototype của hàm này: DWORD __stdcall NlsDllCodePageTranslation(DWORD CodePage, DWORD dwFlags, LPSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar, LPCPINFO lpCPInfo)

Trên Windows XP và 2000, số codepage trong registry trên ít hơn, mặc dù số file .nls được Windows installer chép vào System32\dllcache nhiều, nhưng không được xem là đã được installed và update trong registry trên. Codepage Registry trên Windows  XP

Số codepage được xem là installed và supported trên mỗi version của Windows cũng khác nhau. Từ Windows Vista trở đi, mọi .nls file được cài vào đều được bật lên là installed. Codepage đã cài đặt và được hỗ trợ trên Windows XP

Codepage đã cài đặt và được hỗ trợ trên Windows 7

Codepage đã cài đặt và được hỗ trợ trên Windows 10

Do Microsoft không công bố cấu trúc của file .nls, chúng tôi đã tìm kiếm trên Internet và dựa vào file WinNLS.h trong Windows SDK để tạo ra file NLS.bt. File này dùng làm template parser cho 010 Editor, một chương trình HexEditor hỗ trợ script và parse template rất mạnh, được cộng đồng RE, forensics… dùng nhiều. Khi sử dụng 010Editor mở một file NLS và chọn template file là NLS.bt, 010Editor sẽ hiển thị cho chúng ta trực quan về cấu trúc bên trong của một file NLS. File NLS.bt được chúng tôi upload ở đây.


V.   Các công cụ kiểm tra số codepage và rà quét các file fake NLS

Sau khi phân tích được cấu trúc của một file C_xxxx.NLS chính thống, gốc của Windows, VinCSS đã phát triển hai công cụ để kiểm tra và rà quét các file NLS fake của nhóm tin tặc này.  Hai công cụ này được viết bằng ngôn ngữ Delphi (Object Pascal) và build bằng Free Embarcadero Delphi Community Edition.

Chúng tôi cung cấp cả hai files exe đã build và cả source code để bạn đọc tham khảo, có thể dể dàng kiểm tra, tự build lại, cũng ở repo trên. Theo báo cáo này của Positive Technologies, hiện tin tặc đã update lên các NLS fake mới. Cụ thể như sau:

  1. CheckCPDựa trên hàm API EnumSystemCodePages với hai thông số là CP_INSTALLEDCP_SUPPORTED, CheckCP sẽ hiển thị danh sách các codepages đã installed và supported trên Windows hiện tại của user. Bạn đọc nếu phát hiện một file C_xxxx.NLS lạ, nghi ngờ, có thể nhập số đó vào trong chương trình CheckCP để kiểm tra xem số codepage đó là fake hay của Windows. XXXX là số, ví dụ: file C_20130.NSL thì số cần kiểm tra là 20130.

    Với danh sách các file NLS fake trên, chúng ta thấy ngay tất cả các số codepage đều là fake (1258 và 1252 là hợp lệ, chúng tôi nhập thêm vào):

    Mã nguồn CheckCP.exe các bạn download tại repo trên,  trong thư mục con .\src, file CheckCP.dpr

  2.  NLSScan.exe
    NLSScan là chương trình chính để rà quét tất cả các file C_xxxx.NLS trong thư mục Windows\SysWow64 và Windows\System32, vào sâu tất cả các thư mục con. File này được  chúng tôi buid with 32bit mode, chạy được trên các Windows cũ như XP, 2000 do khả năng cao vẫn còn nhiều máy tính ở các cơ quan còn sử dụng các hệ điều hành này.

    Nhóm tin tặc này luôn đặt các file NLS fake trong 2 thư mục nói trên. NLSScan kiểm tra rất nhiều yếu tố để bảo đảm một file C_xxxx.NLS phải thỏa tất cả điều kiện đó mới không được xem là fake, malwares. Khi chạy NLSScan với không tham số, NLSScan sẽ yêu cầu quyền Admin để chỉ đọc một phần nhỏ các file C_xxxx.NLS tìm ra. Bạn đọc trả lời Yes thì NLSScan sẽ tự chạy lại ở quyền Admin.

    Ví dụ, một yêu cầu là phải thống nhất số codepage trong tên file và trong nội dung file. Chúng tôi đã phát hiện hai trường hợp content của file .NLS là hợp lệ khi parse trong NLS.bt, nhưng số codepage trong file name là không hợp lệ, và số codepage trong nội dung là không thống nhất. Tin tặc đã copy file gốc là C_037.NLS của Windows ra 2 file mới C_21871.NLS và C_21872.NLS, ghi đè config trong vùng content của file. 



    Compare 2 file này với file C_037.NLS sẽ thấy vùng bị ghi đè


Khi NLSScan phát hiện ra các file NLS fake, công cụ sẽ hỏi bạn đọc cho phép copy các file đó tới thư mục %TEMP% và xóa các file đó đi. Nếu tool không xóa được, NLSScan sẽ nhắc bạn đọc reboot để xóa tại lần khởi động tới. Khi bạn đọc được NLSScan báo như trên, có file NLS fake, nên cho phép copy và delete, rồi reboot Windows lại ngay, chạy lại tool. Nếu công cụ vẫn không xóa được, user vui lòng khởi động lại Windows ở Safe Mode, chạy lại công cụ hay tìm xóa các file fake NLS đó bằng tay.

Khi NLSScan đã phát hiện có file fake NLS thì hầu như chắc chắn máy tính của bạn đọc đã nhiễm một vài malware của nhóm này. Bạn đọc nên ngắt kết nối Internet, quét lại máy bằng các chương trình AV, thay đổi các password, rà soát lại tất cả các yếu tố bảo mật.

Các bạn có thể gửi cho chúng tôi các file NLS fake đã được copy ra thư mục %Temp%, và nếu có yêu cầu trợ giúp, rà soát…, các bạn vui lòng liên hệ chúng tôi tại địa chỉ mail: malware.report@vincss.net

Đây là một kết quả test, kiểm tra NLSScan trên máy Windows 10 chúng tôi. Đặc biệt bạn đọc thấy file C_878.NLS mà chúng tôi đã đề cập trong phần II, là PE x64 dll file, tới thời điểm bài viết này Windows Defender vẫn chưa phát hiện ra.

NLSScan cũng có thể quét từng file hay nhiều file NLS, bạn đọc nhập đường dẫn các file NLS đó.
Hiện tại, NLSScan chỉ support scan các file C_XXXX.NLS. Trên Windows còn một số các file NLS khác như: l_intl.nls, locale.nls, normidna.nls, normnfc.nls, normnfd.nls, normnfkc.nls, normnfkd.nls, SortXXX.nls. Nhưng do format của các file này Microsoft không công bố nên chúng tôi không thể kiểm tra được. Khi gặp các file có tên như vậy, các bạn dùng chính tool sfc.exe (System File Checker) của Windows.

File C_20253.NLS là không hợp lệ, nên sfc sẽ báo là “WRP could not perform….”, C_037.NLS là file hợp lệ, nằm trong Windows Protection Files, không bị xâm phạm, nên sfc báo “WRP did not find…

Chúng tôi cũng cung cấp thêm một file bat nhỏ sfcnls.cmd ở repo trên để bạn đọc định kỳ chạy kiểm tra lại cùng NLSScan tất cả các file .nls trong thư mục Windows. Chúng tôi rất mong các bạn đọc chia sẻ, phổ biến các công cụ này để tiến hành rà quét tất cả các máy tính dùng Windows ở các công ty, cơ quan, tổ chức và tập đoàn kinh tế nhà nước lớn của Việt Nam. Theo nhận định của chúng tôi, các nhóm tin tặc này rất nguy hiểm, đã có thể xâm nhập và nằm sâu, nằm im mà ít/không bị phát hiện từ lâu, gây nguy hại lớn cho Việt Nam.

Chúng tôi chúc bạn đọc mạnh khỏe, bình an, dồi dào sức khỏe…cùng gia đình, Tổ quốc vượt qua đại dịch lần này.

Trân trọng.


Trương Quốc Ngân (HTC)

Đặng Đình Phương

VinCSS (a member of Vingroup)



No comments:

Post a Comment