Phát hiện máy tính bị nhiễm mã độc là quá trình phát hiện liên tục dựa trên các quan sát DNS của máy tính đó. BotFighter sử dụng kết hợp cả 2 đặc trưng về ngữ nghĩa của tên miền và tần suất truy vấn DNS trả về NXDOMAIN của thiết bị để có thể phát hiện chính xác máy tính bị nhiễm mã độc DGA theo thời gian thực. Điều này được thực hiện thông qua mô hình Markov ẩn (HMM) [62] để mô hình hoá hành vi của thiết bị cần theo dõi.
𝑠1 𝑠2 𝑠3 𝑠4
𝑑1 𝑑2 𝑑3 𝑑4
Trạng thái 1.p1
p
0
Tên miền Safe Infected
(a) (b)
𝑑𝑡−1 𝑑𝑡
Safe 𝑃(𝑑𝑡 |𝑠𝑡 = 𝑆𝑎𝑓𝑒)
p Safe 1-p
𝑃(𝑑𝑡 |𝑠𝑡 = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑)
𝑃(𝑠𝑡 = 𝑆𝑎𝑓𝑒|𝐷𝑡 )
𝑠0
𝑠1 𝑠2
0 Infected
𝑠𝑡−1
Infected
𝑠𝑡
𝑃(𝑠𝑡 = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷
Hình 4.1. Áp dụng mô hình Markov ẩn (HMM) để mô hình hoá sự biến đổi trạng
thái của thiết bị Hình 4.1 mô tả việc áp dụng HMM trong mô hình hoá sự biến đổi trạng thái của thiết bị, trong đó không gian trạng thái 𝑆 bao gồm 2 trạng thái có thể có của thiết bị là Safe (an toàn) hoặc Infected (bị nhiễm mã độc DGA). Trạng thái của thiết bị là trạng thái ẩn không thể quan sát trực tiếp. Trong khi 𝑑' sẽ đại diện cho một truy vấn DNS từ thiết bị tại thời điểm 𝑡. 𝑑' là biểu hiện của thiết bị quan sát được. Như vậy không gian quan sát sẽ là 𝐷' = {𝑑%, 𝑑6, … , 𝑑'} và cũng là lịch sử truy vấn DNS của thiết bị tại thời điểm 𝑡 trở về trước. Sau khi mô hình hoá hệ thống bằng HMM, việc xác định thiết bị có bị nhiễm mã độc DGA sẽ dựa trên tập quan sát từ thời điểm hiện tại trở về trước đó, từ đó xác định trạng thái hiện tại của hệ thống. Cụ thể, cần tính
𝑑
1
𝑑
p p 2 p
Safe Safe
Safe 1-p
1-p
1-p 1
0 0
0
Infected Infected
Infected 1
1
xác suất 𝑃(𝑠' = 𝑆𝑎𝑓𝑒|𝐷') và nếu xác suất này thấp hơn một ngưỡng cho phép, thiết bị được coi là bị nhiễm mã độc DGA. Để giải quyết bài toán trên, ta có xác suất cần tính:
𝑃(𝑠 |𝐷 ) = 𝑃(𝑠 |𝑑 , 𝐷
) = 𝑃(𝑠', 𝑑'|𝐷',%)
= 𝑃(𝑠'|𝐷',%)𝑃(𝑑'|𝐷',%,
𝑠') (4.1)
' ' '
' ',
% 𝑃(𝑑'|𝐷',%) 𝑃(𝑑'|𝐷',%)
𝑃(𝑑'|𝐷',%) là xác suất truy vấn ở thời điểm t là 𝑑' biết tập truy vấn ở thời điểm trước đó là 𝐷',%, tức là đã quan sát được 𝐷',% truy vấn DNS. Tuy nhiên, các truy vấn DNS độc lập với nhau tức là mỗi quan sát sẽ không phụ thuộc vào quan sát khác mà chỉ phụ thuộc vào trạng thái ẩn tại thời điểm đó. Do đó, ta coi (𝑑'|𝐷',%) là như nhau với mọi 𝑡. Dễ dàng nhận thấy:
𝑃(𝑠'|𝐷') ∝ 𝑃(𝑑'|𝑠', 𝐷',%)𝑃(𝑠'|𝐷',%) (4.2) Mặt khác:
𝑃(𝑠'|𝐷',%) = 6 𝑃(𝑠'|𝑠',%, 𝐷',% )𝑃(𝑠',%|𝐷',
%)
I#)*∈ T
(4.3)
Có thể thấy, việc tính toán thực hiện theo nguyên tắc của thuật toán đệ quy trong đó cần giả định thiết bị ở tình trạng an toàn tại thời điểm 𝑡 = 0, có nghĩa
𝑃(𝑠U = 𝑆𝑎𝑓𝑒|𝐷U) = 1 và 𝑃(𝑠U = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷U) = 0. Trên cơ sở giả định Markov, ta có 𝑃(𝑑'|𝑠', 𝐷',%) = 𝑃(𝑑'|𝑠') và 𝑃(𝑠'|𝐷',%, 𝑠',%) = 𝑃(𝑠'|𝑠',%), có nghĩa tên miền và trạng thái hiện tại không phụ thuộc vào lịch sử truy vấn tên miền trước đó. Như vậy, biểu thức (4.2) và (4.3) có thể viết thành.
𝑃(𝑠'|𝐷') ∝ 𝑃(𝑑'|𝑠'). 𝑃(𝑠'|𝐷',%) (4.4)
𝑃(𝑠'|𝐷',%) = 6 𝑃(𝑠'|𝑠',%)𝑃(𝑠',%|𝐷',
%)
I#)*∈ 𝐒
(4.5)
Trong đó 𝑃(𝑑'|𝑠') là giá trị xác suất hậu nghiệm của tên miền đầu vào khi máy tính ở trạng thái an toàn hoặc nhiễm mã độc.
𝑃(𝑠 |𝐷 ) ∝ 𝑃(𝑠'|𝑑')𝑃(𝑑')
𝑃(𝑠
|𝐷 ) (4.6)
' '
𝑃(𝑠') ' ',%
Giả sử rằng các xác suất là bằng nhau, biểu thức (4.6) rút gọn lại thành như dưới đây:
𝑃(𝑠'|𝐷') ∝ 𝑃(𝑠'|𝑑')𝑃(𝑠'|𝐷',%) (4.7) Kết hợp biểu thức (4.5) và (4.7) ta có:
𝑃(𝑠'|𝐷') ∝ 𝑃(𝑠'|𝑑') 6 𝑃(𝑠'|𝑠',%)𝑃(𝑠',%|𝐷',
%)
I#)*∈ 𝐒
(4.8)
Trong đó 𝑃(𝑠'|𝑑') là xác suất hậu nghiệm. 𝑃(𝑠'|𝑑') có thể xác định gián tiếp qua bộ phân loại tên miền.
𝑃(𝑠'|𝑠',%) được tính toán dựa trên mô hình biến đổi trạng thái tại trong đó 𝑝 được hiểu là xác suất chuyển trạng thái từ 𝑠',% = 𝑆𝑎𝑓𝑒 sang 𝑠' = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑. Trong trường hợp trạng thái là Infected, thiết bị sẽ không thể quay lại được trạng thái an toàn. Giá trị 𝑝 được xác định dựa trên tri thức của chuyên gia. Như đã phân tích trong Chương 1, bot sẽ truy vấn một lượng lớn các tên miền, nhưng chỉ có một lượng nhỏ tên miền được đăng ký và trỏ đến IP của máy chủ C&C. Như vậy, phần lớn các phản hồi của truy vấn DNS mà bot nhận được là NXDOMAIN hay tên miền không tồn tại trên hệ thống DNS. Nếu tần suất trả về NXDOMAIN lớn, giá trị 𝑝 nên cao tương ứng với việc mức độ tin cậy thiết bị này an toàn là thấp. Bên cạnh đó, các NXDOMAIN này được trả về tại các thời điểm khác nhau và độc lập với nhau. Giả sử sự kiện E là sự kiện nhận được phản hồi NXDOMAIN. Gọi số lần E xảy ra trong thời gian ∆t là X, λ là số trung bình của các lần sự kiện E xảy ra trong khoảng thời gian cố định ∆t, và k là số lần sự kiện E xảy ra trong khoảng thời gian ∆t gần nhất tính từ thời điểm hiện tại trở về trước. Từ những phân tích này, ta sẽ lựa chọn hàm phân phối tích luỹ Posion
[63] để định nghĩa giá trị 𝑝 .
: :
𝜆# 𝑝 = 𝑃(𝑋 ≤ 𝑘) = 6 𝑃(𝑋
= 𝑖)
#$U
= 𝑒,> 6 𝑖! #$U
(4.9)
Trong đó 𝜆 là giá trị động được xác định bằng số lượng NXDOMAIN nhận được trong một giờ. Đưa giá trị p và biểu thức, biểu thức (4.8) được mở rộng như sau:
𝑃(𝑠' = 𝑆𝑎𝑓𝑒|𝐷') ∝ 𝑃(𝑠' = 𝑠𝑎𝑓𝑒|𝑑'). (1 − 𝑝). 𝑃(𝑠',% = 𝑆𝑎𝑓𝑒|𝐷',%) (4.10)
𝑃(𝑠' = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷') ∝ 𝑃(𝑠' = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝑑') (4.11)
[𝑝𝑃(𝑠',% = 𝑆𝑎𝑓𝑒|𝐷',%) + 𝑃(𝑠',% = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷',%)]
Lưu ý rằng 𝑃(𝑠',% = 𝑆𝑎𝑓𝑒|𝐷',%) và 𝑃(𝑠',% = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷',%) được tính toán tương tự dựa trên chuỗi tên miền đến thời điểm 𝑡 − 1. Theo lý thuyết, tổng hai giá trị xác suất phải bằng 1, vì thế
𝑃(𝑠 = 𝑆𝑎𝑓𝑒|𝐷 ) ∝ 𝑃(𝑠' =
𝑆𝑎𝑓𝑒|𝐷') (4.12)
' '
𝑃(𝑠' = 𝑆𝑎𝑓𝑒|𝐷') + 𝑃(𝑠' = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷')
𝑃(𝑠 = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷 ) ∝ 𝑃(𝑠' = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷') (4.13)
' '
𝑃(𝑠' = 𝑆𝑎𝑓𝑒|𝐷') + 𝑃(𝑠' = 𝐼𝑛𝑓𝑒𝑐𝑡𝑒𝑑|𝐷')