CMC cảnh báo người dùng Việt nguy cơ bị tấn công từ bộ gõ Unikey

hang_h3
Thông tin được các chuyên gia bảo mật của Công ty an ninh mạng CMC Cyber Security phát hiện vào ngày 4-12, thông qua hệ thống giám sát và phòng thủ mã độc, họ đã phát hiện một mẫu mã độc mới có khả năng được tin tặc sử dụng vào mục đích thực hiện những cuộc tấn công mạng nhắm vào người dùng máy tính sử dụng bộ gõ phổ biến tại Việt Nam Unikey.

Thông tin chung
MD5: 08e71118bad94617bf25a0d42db6a564
Filename: KBDUS.dll
Hệ thống giám sát CMDD của CMC phát hiện được mẫu mã độc lợi dụng phần mềm Unikey để tấn công người dùng Việt Nam. Unikey là phần mềm gõ tiếng việt dành cho Windows rất phổ biến tại Việt Nam. Lợi dụng điều này, kẻ tấn công có thể tạo ra các bộ cài unikey sử dụng phiên bản chính thức(từ trang unikey.org) nhưng chèn thêm vào đó mã độc nguy hiểm đối với người dùng.

01_tt_chung.png

Phân tích kỹ thuật
Trong case dưới đây, tệp tin kbdus.dll(PE 32bit) chứa mã độc đã được chèn kèm theo cùng thư mục với UnikeyNT.exe(phiên bản 4.0 RC2 Build 091101 NT). Kẻ tấn công cũng thay đổi thuộc tính về thời gian của tệp tin kdbus.dll về cùng với thời gian của file UnikeyNT.exe để người dễ dàng đánh lừa người dùng hơn. Thực chất file này được compile vào khoảng đầu tháng 10 năm 2019.
02_timestamp.png


Kbdus.dll
kbdus.dll là một thư viện sẽ được load lên khi người dùng sử dụng layout bàn phím US(id 0x00000409). Kẻ tấn công đã thực hiện phân tích cách hoạt động của Unikey và nhận ra khi UnikeyNT.exe load dll kèm theo là UKhook40.dll, sẽ thực thi hàm LoadKeyboardLayoutA để load layout với id là 0x00000409. Khi đó kbdus.dll sẽ được load lên. Vì đặt sẵn kbdus.dll trong cùng thư mục với UnikeyNT.exe, tệp tin này sẽ được ưu tiên load trước do đó sẽ thực thi mã độc chứa trong nó.

03_loadkb.png

Tại hàm DllMain của dll, mã độc đã tạo ra 1 thread mới để thực thi các hành vi độc hại của nó.

04_kdbusmain.png

Mã độc tạo ra mutex với tên “Global\mFNXzY0g” để tránh thực thi chồng chéo nhau. Các string được mã độc sử dụng hầu hết đã bị obfuscate bằng stackstring hoặc hàm mã hóa riêng. Hàm mã hóa ở đây được thiết lập đơn giản bằng cách cộng vào giá trị của mỗi kí tự thêm 1(ví dụ kí tự “K” dạng hex có giá trị là 0x4b sẽ được mã hóa thành 0x4c ứng với kí tự “L”). Trên ida pro có thể sử dụng idapython để patch lại các kí tự này. Đối với stackstring, có thể dùng script ironstring.py của flare-teamđể đơn giản hóa việc phân tích.

04_kbdstr-1.png


Sau khi tạo và kiểm tra mutex, mã độc tiến hành đọc dữ liệu từ các khóa registry đặc biệt. Nhiều khả năng các khóa này được tạo ra khi người dùng thực hiện chạy file cài đặt được kẻ tấn công chuẩn bị. Đầu tiên là giá trị “CB5JQLWSYQP2CWVRMJ8NB4CCUE1B8K4A” ở trong key “HKEY_CLASS_ROOT.kci\PersistenHandler”. Giá trị này sẽ chứa 1 cấu trúc bao và dữ liệu xlm. Thông tin trong cấu trúc bao gồm một số giá trị để mã độc kiểm tra sau khi tiến hành giải mã dữ liệu như kích thước trước và sau của dữ liệu xlm, md5 trước và sau của dữ liệu đó.

05_kdbdecrypt.png

Dữ liệu được giải mã ra là định dạng xlm, sẽ được mã độc đọc vào 1 vùng nhớ thông qua các api trong thư viện xmllite.dll.

06_kdbxml.png

Giá trị tiếp theo trong khóa “HKEY_CLASS_ROOT.kci\PersistenHandler” được đọc là “F430D64D98E6EAC972380D568F080E08”. Tại đây chứa một cấu trúc dữ liệu khác cũng bao gồm các thông tin về kích thước và md5 của dữ liệu trong nó. Dựa vào phần struct này, mã độc sẽ decrypt ra một file PE khác với cách thức decrypt và kiểm tra tương tự như quá trình xử lý dữ liệu xml.

08_kdb_decryptdata.png


File PE này là 1 dll này có tên là Knocker.dll và export ra hàm tên là Construct, có thời gian compile gần như cùng lúc với file kdbus.dll ở trên. Mã độc tiến hành load dll lên memory. Sau đó, mã độc tìm đến địa chỉ hàm Construct và thực thi nó với tham số là địa chỉ của cấu trúc dữ liệu xml data đã đọc trước đó.
09_knocker.png

10_knockertime.png

11_knockerloader.png

Thông qua các API như VirtualAlloc, VirtualProtect, LoadLibrary, GetProcAddress, file PE đã được map lên bộ nhớ như một file PE thông thường. Trước khi thực thi hàm Construct, mã độc cũng thực thi qua hàm DllMain trong dll để đảm bảo dll hoạt động bình thường.
12_knockerresult.png


Knocker.dll – Construct
Tại hàm construct, mã độc copy dữ liệu nhận được từ tham số truyền vào 1 vùng nhớ khác, sau đó bắt đầu thu thập thông tin máy tính người dùng. Thông tin bị thu thập bao gồm CPU, RAM, thông tin Windows, computer name, organization, thông tin về user, ngôn ngữ, timezone, card mạng, thông tin ổ phân vùng cài đặt hệ điều hành.
13_knockeraction.png


Sau đó mã độc tạo ra UUID trong khóa “HKEY_CLASS_ROOT.kci\PersistenHandler”. lưu lại 2 giá trị md5. Giá trị thứ nhất được tạo ra từ thông tin về user sid, username, computer name. Thông tin md5 thứ 2 dựa trên các giá trị của cpu, ram, disk, network adapter.
14_knocker_setvalue.png



Mã độc tiếp tục tạo ra 1 string để định danh máy tính có dạng “PC: %s; MAC: %s; SerVer: %f”. Dữ liệu này sẽ nằm trong 1 struct mà mã độc sẽ mã hóa ở dạng base64 để gửi đi sử dụng method là GET.
15_knockerrequest.png


Thông tin request gửi đến C&C có dạng:
“hxxp://news.vnxahoi[.]com:443/4BwhFJ9p/job.php?[UUID][data\_in\_base64]”
Với user agent là:
“Mozilla/4.0 (compatible; MSIE 8.0; Win32)”
Header kèm theo là:
“Content-Length:%d\r\nCache-Control: no-cache\r\nMD5:%s\r\nConnection: Close\r\n”
Trong lần kết nối đầu tiên, mã độc chờ đợi nhận được một command để thực thi. Và lần kết nối thứ 2 sẽ được gửi đi tương tự như lần 1 với mục đích report lại việc thực thi của command nhưng sử dụng phương thức POST và request thay đổi với định dạng:
“hxxp://news.vnxahoi[.]com:443/4BwhFJ9p/job.php?[UUID][create\_process\_sate]”.
Đây là bước cuối cùng trong quá trình thực thi của mã độc. Tuy nhiên, ở thời điểm hiện tại, response trả về là 404 Not Found nên mã độc không thể tiếp tục thực hiện các hành vi khác của mình.

Thông tin về c&c
Kiểm tra thử một số thông tin về domain của c&c biết được ip mà domain này trỏ đến là 125[.]212.218.121.
16_domain.png

Một số domain khác trỏ đến ip này là:

17_ip.png

Đánh giá mức độ nguy hiểm
Đây là chiến dịch tấn công được đầu tư nghiên cứu kỹ, rất nguy hiểm và khó bị phát hiện. Vì unikey là bộ gõ văn bản rất phổ biến ở Việt Nam, có thể nói là máy tính nào dùng Windows ở Việt Nam cũng đều cài đặt phần mềm Unikey. Những kẻ tấn công chỉ cần drop file kbdus.dll vào thư mục chứa unikey là có thể khai thác được máy của nạn nhân. Khuyến cáo người sử dụng nên kiểm tra kỹ thư mục cài đặt Unikey, loại bỏ file kbdus.dll hoặc sử dụng sản phẩm chống mã độc để bảo vệ máy tính của mình. CMDD của CMC đã cập nhật mẫu mã độc kbdus.dll, người dùng có thể download tại đường dẫn sau: https://cmccybersecurity.com/cmc-antivirus-free/
 
Trả lời

dathv

Búa Gỗ Đôi
Chỉ là các file đã biên dịch xong và các phần phụ, code chính để hình thành bộ gõ EVkey lấy từ UniKey do bạn Kim Long chia sẻ từ khi Win XP mới ra đời vài năm ở trang UNIKEY.ORG. Chính tác giả của EVkey cũng thừa nhận EVkey được phát triển từ mã nguồn mở của UniKey.
Bản UniKey mới nhất tải từ trang chủ UNIKEY.ORG sẽ không bị lỗi gì cả, kể cả trong Note (Office 2019).
@haihong20082009 | Đọc bình luận từ trên xuống dưới chỉ có của bạn này là làm mình hài lòng.
EVKey lấy source lại từ Unikey rồi biên dịch lại thì tất cả ko phải là của EVKey mà là của Unikey với tên khác do người khác làm ra. Làm vậy được gì nhỉ ??
Mình từng xài qua vietkey, unikey, gotiengviet nhưng chưa bao giờ xài EVKey này !

Mình là người có theo dõi topic về evkey lúc tác giả mới đưa lên voz, bây giờ mình vẫn đang dùng bản 2.0 cũ rích tải từ lúc đấy đến giờ nên mình muốn cãi hộ cho tác giả evkey một chút:
- Đúng là tác giả có thừa nhận là lấy nguồn từ trang unikey.org để làm evkey nhưng những thứ mà bác Phạm Kim Long chia sẻ trên trang unikey.org chỉ đủ để làm một bộ gõ tiếng việt đơn giản và lạc hậu cho lúc xưa thôi, không thể dùng nó để tạo ra một bộ gõ tiếng việt hiện đại cho thời bây giờ được. Công sức mà tác giả đã bỏ ra để tạo ra evkey là không thể chối cãi được. VD điển hình là khi mình tải bản evkey 2.0 về máy để dùng thì bản mới nhất trên trang unikey.org vẫn mắc lỗi khi gõ trong excel, còn bản evkey 2.0 thì lại không bị, chính vì vậy mà mình chuyển sang evkey. Lúc đó thì chỉ có evkey và blackci là bộ gõ tiếng việt mà không bị lỗi trong excel (Lúc đó còn chưa có chế độ telex trong windows và khá lâu sau unikey mới cập nhật để sửa lỗi gõ trong excel).
- Tác giả evkey cũng đã nói rõ là không public source.
Mình thấy việc này là hợp lý vì nếu public source một bộ gõ tiếng việt thì rất dễ bị làm giả và chỉnh sửa tạo ra một bộ gõ xấu cho người dùng. Bác Phạm Kim Long cũng chỉ public source của bộ gõ cũ chứ các bộ gõ mới không hề được bác Phạm Kim Long public.
- Nếu bạn nào không tin tưởng thì chỉ cần dùng phần mêm nào đó theo dõi xem bộ gõ có kết nối internet không là biết ngày bộ gõ có an toàn hay không.
 

Hamano Kaito

Moderator
@dathv | Mình chưa xài qua bộ gõ đó nên ko dám nói thêm điều gỉ cả ! Nếu bạn ấy giỏi thì hãy tự nghĩ ra 1 bộ gõ riêng, bạn mà lấy source từ 1 nơi nào đó thì cái danh đó nó vẫn bám theo bạn thôi <== vì có phải bạn tự biên soạn và làm từ đầu đến cuối đâu ?? Tự tạo nên ý tưởng và tự thực hiên nó khác với lấy từ 1 nguồn nào đó rồi chế biến lại cho riêng mình
Tác giả của Unikey ko post full cũng có nhiều lý do <== trong đó cũng có lý do là bị lấy source đấy (phỏng đoán từ mình)
 

dathv

Búa Gỗ Đôi
@dathv | Mình chưa xài qua bộ gõ đó nên ko dám nói thêm điều gỉ cả ! Nếu bạn ấy giỏi thì hãy tự nghĩ ra 1 bộ gõ riêng, bạn mà lấy source từ 1 nơi nào đó thì cái danh đó nó vẫn bám theo bạn thôi <== vì có phải bạn tự biên soạn và làm từ đầu đến cuối đâu ?? Tự tạo nên ý tưởng và tự thực hiên nó khác với lấy từ 1 nguồn nào đó rồi chế biến lại cho riêng mình
Tác giả của Unikey ko post full cũng có nhiều lý do <== trong đó cũng có lý do là bị lấy source đấy (phỏng đoán từ mình)

Như bạn nói chính Unikey cũng không public source và nếu mình không nhầm thì không một phần mềm gõ tiếng việt nào public source cả nên bạn @haihong20082009 đòi hỏi evkey phải public source là sai rồi.

Còn cũng như bạn đã nói, Unikey không public source và chỗ source mà unikey public rất hạn chế, nên không thể nói tác giả lấy từ một nguồn nào đó rồi chế biến lại cho riêng mình được, những phần mà tác giả đã bỏ vào evkey là rất nhiều (Như mình lấy ví dụ ở trên, chỉ vì gõ được trong excel trước unikey mà mình bỏ unikey).

Nói thêm một chút về việc làm từ đầu đến cuối, chỗ source mà bác Phạm Kim Long public chính bác ấy viết trên trang unikey.org là để mang mục đích học hỏi mà, mọi người học hỏi ở source ấy là việc rất bình thường. Các bác đòi hỏi phải làm độc lập từ đầu đến cuối là hơi quá đáng rồi, muốn làm từ đầu đến cuối thì phải tự viết ra cả ngôn ngữ để làm nữa.
 

haihong20082009

Rìu Sắt Đôi
Như bạn nói chính Unikey cũng không public source và nếu mình không nhầm thì không một phần mềm gõ tiếng việt nào public source cả nên bạn @haihong20082009 đòi hỏi evkey phải public source là sai rồi.

Còn cũng như bạn đã nói, Unikey không public source và chỗ source mà unikey public rất hạn chế, nên không thể nói tác giả lấy từ một nguồn nào đó rồi chế biến lại cho riêng mình được, những phần mà tác giả đã bỏ vào evkey là rất nhiều (Như mình lấy ví dụ ở trên, chỉ vì gõ được trong excel trước unikey mà mình bỏ unikey).

Nói thêm một chút về việc làm từ đầu đến cuối, chỗ source mà bác Phạm Kim Long public chính bác ấy viết trên trang unikey.org là để mang mục đích học hỏi mà, mọi người học hỏi ở source ấy là việc rất bình thường. Các bác đòi hỏi phải làm độc lập từ đầu đến cuối là hơi quá đáng rồi, muốn làm từ đầu đến cuối thì phải tự viết ra cả ngôn ngữ để làm nữa.
Mình không yêu cầu phải public source bản mới, nhưng evkey dù gì cũng đã code lại của unikey từ bản "củ rích" đó. Bạn ạ, không phải khoe, nhưng mình cũng tự viết bộ gõ tiếng Việt từ khi còn Win 95 bằng Pascal, bây giờ cũng bằng Pascal biên dịch Delphi và rất nhiều những người bạn của mình cũng phải tự viết các bộ gõ như thế khi Win chưa hỗ trợ, khi làm việc với cơ chế cơ quan không cho cài bất kỳ phần mềm nào của bên thứ ba bạn ạ. Đã code lại của người khác thì không nên chê bai như thế, mà nên khiêm tốn làm tốt hơn có thể để người dùng Việt được hưởng lợi. Nói thật nhé, tôi đã từng test evkey từ khi mới ra, cho đến bây giờ, vẫn bị lỗi đầy ra đó, trong khi unikey bạn Kim Long dừng hỗ trợ từ năm ngoái vẫn gõ ngon lành trong Note 2019 không gây lỗi như evkey.
Dừng tại đây, không tranh luận nữa.
Người dùng sẽ có lựa chọn cho chính mình.
 

dathv

Búa Gỗ Đôi
Mình không yêu cầu phải public source bản mới, nhưng evkey dù gì cũng đã code lại của unikey từ bản "củ rích" đó. Bạn ạ, không phải khoe, nhưng mình cũng tự viết bộ gõ tiếng Việt từ khi còn Win 95 bằng Pascal, bây giờ cũng bằng Pascal biên dịch Delphi và rất nhiều những người bạn của mình cũng phải tự viết các bộ gõ như thế khi Win chưa hỗ trợ, khi làm việc với cơ chế cơ quan không cho cài bất kỳ phần mềm nào của bên thứ ba bạn ạ. Đã code lại của người khác thì không nên chê bai như thế, mà nên khiêm tốn làm tốt hơn có thể để người dùng Việt được hưởng lợi. Nói thật nhé, tôi đã từng test evkey từ khi mới ra, cho đến bây giờ, vẫn bị lỗi đầy ra đó, trong khi unikey bạn Kim Long dừng hỗ trợ từ năm ngoái vẫn gõ ngon lành trong Note 2019 không gây lỗi như evkey.
Dừng tại đây, không tranh luận nữa.
Người dùng sẽ có lựa chọn cho chính mình.
Mình có chê gì Unikey đâu, mình chỉ phản đối việc các bác chê evkey vì nó dựa trên code của bác Kim Long public thôi. Mình thấy rất vô lý khi tác giả đã làm được rất nhiều mà mọi người cứ vin vào lý do nó phát triển từ code của unikey để chê bai.
Chính vì mình không thể tự code được một bộ gõ tiếng việt nên mình mới có ấn tượng về evkey như thế, nó là cái đầu tiên gõ không lỗi trên excel (chỉ ra sau mỗi blackci). Nó đáp ứng quá tốt cái nhu cầu của mình nên mình ủng hộ thôi.
 

Hamano Kaito

Moderator
@dathv | Bạn ko rành về code à !? Hèn gì bạn nói là phải tự viết ra 1 ngôn ngữ mình đọc mà hết hồn ! Ahaha, để tự viết ra 1 ngôn ngữ riêng đòi hỏi bạn phải giỏi vì đã số giờ dựa vào ngôn ngữ có sẵn từ đó code lên thôi. Mà thôi, tranh cãi hoài cũng vậy, khá kỳ nếu chê bai trong topic này. Cho nên mình xin cáo lui ở ẩn {tongue}
 

dathv

Búa Gỗ Đôi
@dathv | Bạn ko rành về code à !? Hèn gì bạn nói là phải tự viết ra 1 ngôn ngữ mình đọc mà hết hồn ! Ahaha, để tự viết ra 1 ngôn ngữ riêng đòi hỏi bạn phải giỏi vì đã số giờ dựa vào ngôn ngữ có sẵn từ đó code lên thôi. Mà thôi, tranh cãi hoài cũng vậy, khá kỳ nếu chê bai trong topic này. Cho nên mình xin cáo lui ở ẩn
Thì ý mình là đa số giờ dựa vào ngôn ngữ có sẵn từ đó code lên thôi, vậy sao mọi người cứ chê bai việc code từ một dự án trước đó. Chính bác Kim Long đã ghi là bác public code để phục vụ việc học tập mà.
 

Hamano Kaito

Moderator
Thì ý mình là đa số giờ dựa vào ngôn ngữ có sẵn từ đó code lên thôi, vậy sao mọi người cứ chê bai việc code từ một dự án trước đó. Chính bác Kim Long đã ghi là bác public code để phục vụ việc học tập mà.

Một bài toán đố có nhiều cách giải. Giống như viết 1 soft sẽ có nhiều cách viết ra VD như lấy 1 mãng nào đó trong tệp văn bản.
Bạn có thể viết cách 1 nhưng người khác lại viết cách 2,........... <== mỗi người sẽ cho ra kết quả tối ưu khác nhau tùy vào độ hiểu biết cũng như khả năng của bản thân.
Dựa vào code người khác làm nên nền tảng ko thể gọi là của bản thân được. Đó là học lỏm đấy, hihiihi <= mình đôi khi cũng học lỏm nhưng ko dám công khai như vậy.
Một ngôn ngữ lập trình thì ko bàn tới. Cái mình muốn bạn hiểu là khi viết 1 soft nào đó bạn bạn phải tự mài mò và tự biên tự diễn (nếu ko thể tự biên tự diễn thì nhờ người khác test giùm).
Để rồi cho ra sản phẩm đó chính là của bạn. Hi vọng bạn hiểu ý mình nói...
 

dathv

Búa Gỗ Đôi
Một bài toán đố có nhiều cách giải. Giống như viết 1 soft sẽ có nhiều cách viết ra VD như lấy 1 mãng nào đó trong tệp văn bản.
Bạn có thể viết cách 1 nhưng người khác lại viết cách 2,........... <== mỗi người sẽ cho ra kết quả tối ưu khác nhau tùy vào độ hiểu biết cũng như khả năng của bản thân.
Dựa vào code người khác làm nên nền tảng ko thể gọi là của bản thân được. Đó là học lỏm đấy, hihiihi <= mình đôi khi cũng học lỏm nhưng ko dám công khai như vậy.
Một ngôn ngữ lập trình thì ko bàn tới. Cái mình muốn bạn hiểu là khi viết 1 soft nào đó bạn bạn phải tự mài mò và tự biên tự diễn (nếu ko thể tự biên tự diễn thì nhờ người khác test giùm).
Để rồi cho ra sản phẩm đó chính là của bạn. Hi vọng bạn hiểu ý mình nói...
Nếu vậy thì bác nghĩ khác mình rồi, học lỏm của người khác rồi hiểu nó, phát triển nó lên đâu có gì là xấu, nếu tất cả đều phải đi lên từ số 0 thì làm sao tiến xa được. Mình vẫn nhắc lại là bác Kim Long đã ghi là public source lên để học tập rồi mà.
Mình thấy đúng ra phải thế này: Bài toán là đi từ A đến B, ở giữa có C. Học lỏm cách đi từ A đến C rồi tự tìm cách đi từ C đến B. Ở đây mình thấy C gần A hơn B nhiều.