CHƯƠNG 1 TỔNG QUAN VỀ THIẾT BỊ IOT VÀ MÃ ĐỘC IOT BOTNET
3.2. thị lời gọi hệ thống cĩ hướng DSCG
3.2.1. Khái niệm đờ thị lời gọi hệ thống cĩ hướng DSCG
Mơ tả chi tiết phương pháp sinh đồ thị lời gọi hệ thống cĩ hướng (DSCG) được trình bày dưới đây. Đầu tiên, nghiên cứu sinh đưa ra khái niệm về đồ thị lời gọi hệ thống cĩ hướng DSCG như sau:
Khái niệm 2.1. Đồ thị DSCG là một đồ thị cĩ hướng được ký hiệu là GDSC=(V,E)
trong đĩ:
- V là tập hợp các đỉnh vi đại diện cho các lời gọi hệ thống cĩ cùng tên (name) và tham số (arguments);
- E là tập hợp các cạnh ek nối từ đỉnh vi tới đỉnh vj của đồ thị, E V×V, với các vịng lặp thì chỉ tính là một cạnh của đồ thị.
Theo khái niệm này, đồ thị DSCG là đồ thị cĩ hướng, mơ tả thứ tự các lời gọi hệ thống của tệp thực thi được thu thập trong quá trình phân tích động. Các đỉnh của đồ thị DSCG đại diện cho các lời gọi hệ thống cĩ cùng tên (name) và tham số (arguments) tương ứng. Việc sử dụng các đỉnh đồ thị biểu diễn tên và tham số của lời gọi hệ thống
thống. Tuy nhiên, với cách biểu diễn này thì đồ thị DSCG hạn chế được sự mất mát thơng tin quan trọng trong các giá trị tham số truyền vào các lời gọi hệ thống – yếu tố quan trọng để phát hiện hành vi độc hại của mã độc. Để giảm thiểu số lượng cạnh của đồ thị DSCG, các vịng lặp trong chuỗi lời gọi hệ thống được thu thập sẽ chỉ được biểu diễn như một cạnh của đồ thị. Cách xử lý này giúp cho vừa bảo tồn được thơng tin lời gọi hệ thống, vừa giảm độ phức tạp của đồ thị trong những trường hợp như mã độc sử dụng vịng lặp để chờ kết nối với C&C server, tấn cơng rà quét mật khẩu các thiết bị khác, thực hiện tấn cơng từ chối dịch vụ,…
3.2.1. Xây dựng đờ thị lời gọi hệ thống cĩ hướng DSCG
Trong bước này, nghiên cứu sinh sẽ tiến hành xây dựng các đồ thị DSCG cho mỗi một tệp thực thi đầu vào dựa trên thơng tin chuỗi lời gọi hệ thống thu được từ V-Sandbox. Sau khi thu thập được chuỗi lời gọi hệ thống của mẫu đầu vào từ mơi trường V-Sandbox (được minh họa tại Hình 3.2), mỗi một đỉnh của đồ thị DSCG được xác định tại khái niếm ở trên sẽ được gắn nhãn với định dạng gồm “PID:System call name(Argument)”. Từ đĩ, danh sách các cạnh của đồ thị được mơ tả dưới dạng cặp các đỉnh đồ thị kề nhau được tự động sinh ra và lưu trữ lại để phục vụ việc chuyển sang định dạng tệp đầu ra “gexf”. Minh họa cho một đoạn đồ thị DSCG được sinh ra dựa trên chuỗi lời gọi hệ thống được trình bày tại Hình 3.3. Thuật tốn xây dựng đồ thị DSCG được trình bày bằng mã giả như trong Thuật tốn 3.1. Thuật tốn sinh đồ thị DSCG cĩ đầu vào bao gồm: Tệp lưu trữ chuỗi lời gọi hệ thống được thu thập bởi V-Sandbox (Logfile); Mã định danh tiến trình đầu tiên mà tệp ELF thực thi tạo ra (pid); Tên đỉnh dùng để nối giữa các nhánh PID trong đồ thị DSCG (u). Giá trị khởi tạo ban đầu cho biến pid và u là giá trị “None”. Đầu ra của thuật tốn này bao gồm: Danh sách các đỉnh của DSCG (V); Danh sách các cạnh của DSCG (E) tương ứng với các đỉnh của đồ thị DSCG. Thuật tốn sẽ đọc lần lượt các dịng trong tệp lưu trữ chuỗi lời gọi hệ thống (Logfile) để lấy thơng tin về lời gọi hệ thống gồm tên lời gọi (name), tham số của lời gọi (args) và lưu vào mảng đại diện cho lời gọi hệ thống (SC). Tiếp theo, các đỉnh của đồ thị DSCG được xây dựng bởi tập hợp các lời gọi hệ thống khác nhau trong chuỗi lời gọi đã thu nhận được được. Mỗi đỉnh của đồ thị DSCG sẽ bao gồm các thơng tin: Mã định danh tiến trình được ghi nhận trong Logfile (pid); Tên lời gọi hệ thống được gọi (SC.name); Tham số của lời gọi hệ thống được gọi (SC.args). Các cạnh trong đồ thị gồm cặp giá trị của 2 đỉnh liên tiếp được gọi theo thứ tự trong Logfile. Trong trường hợp gặp lời gọi hệ thống cĩ tên
là “fork” hoặc “clone” thì đồ thị sẽ rẽ nhánh để mơ tả cho trường hợp mã độc tự mình tạo ra các tiến trình con trong hệ thống (Child process). Thuật tốn dừng khi đã duyệt qua hết tất cả các lời gọi cĩ trong tệp nhật ký Logfile.
Thuật tốn 3.1. Sinh đồ thị DSCG
Input Logfile: Tệp lưu trữ chuỗi lời gọi hệ thống được thu thập bởi V-Sandbox
𝑝𝑖𝑑: PID của tiến trình đầu tiên mà ELF thực thi.
𝑢: tên đỉnh dùng để nối giữa các nhánh PID trong DSCG.
Output 𝐸: Danh sách các cạnh của DSCG.
V: Danh sách các đỉnh của DSCG
Procedure Generate_DSCG(logfile, pid, u = None)
1: 𝐸 ← ∅
2: 𝑉 ← ∅
3: 𝑆𝐶 ← ∅
4: 𝑣 ← ∅
5: 𝑖 ← ∅
6: While not EOF(logfile) do
7: 𝑆𝐶[𝑖] ← 𝑟𝑒𝑎𝑑𝑙𝑖𝑛𝑒(𝑙𝑜𝑔𝑓𝑖𝑙𝑒, 𝑖) 8: 𝑖 ← 𝑖 + 1 9: end while 10: 𝑗 ← 0 11: 𝒘𝒉𝒊𝒍𝒆 𝑗 ≤ 𝑖 𝒅𝒐 12: 𝑣 ← 𝑝𝑖𝑑 + 𝑆𝐶[𝑗]. 𝑛𝑎𝑚𝑒 + 𝑆𝐶[𝑗]. 𝑎𝑟𝑔𝑠 13: 𝑉 ← 𝑉 ∪ 𝑣 14: 𝒊𝒇 𝑢 ≠ 𝑁𝑜𝑛𝑒 𝒕𝒉𝒆𝒏 15: 𝐸 ← 𝐸 ∪ (𝑢, 𝑣) 16: 𝒆𝒏𝒅 𝒊𝒇 17: 𝑢 ← v 18: 𝒊𝒇 𝑆𝐶[𝑖]. 𝑛𝑎𝑚𝑒 = 𝑓𝑜𝑟𝑘 𝑜𝑟 𝑐𝑙𝑜𝑛𝑒 𝒕𝒉𝒆𝒏 19: 𝑐ℎ𝑖𝑙𝑑_𝑝𝑖𝑑 ← 𝑆𝐶[𝑗]. 𝑟𝑒𝑡𝑢𝑟𝑛 20: 𝐸 ← 𝐸 ∪ 𝐺𝑒𝑛𝑒𝑟𝑎𝑡𝑒_𝐷𝑆𝐶𝐺(𝑙𝑜𝑔𝑓𝑖𝑙𝑒, 𝑐ℎ𝑖𝑙𝑑_𝑝𝑖𝑑 , 𝑢) 21: 𝒆𝒏𝒅 𝒊𝒇 22: 𝑗 ← 𝑗 + 1 23: 𝒆𝒏𝒅 𝒘𝒉𝒊𝒍𝒆 24: 𝒓𝒆𝒕𝒖𝒓𝒏 𝑉, 𝐸 25: end procedure
Hình 3.2 Chuỗi lời gọi hệ thống của mã độc Mirai thu từ V-Sandbox
Hình 3.4 Lưu trữ đồ thị DSCG dưới định dạng “gexf”