6

TÓM TẮT: Bài viết này trình bày số liệu thống kê và các nguyên tắc học máy như một bài tập trong khi phân tích phần mềm độc hại. Xác suất có điều kiện hoặc xác suất của Bayes là những gì chúng ta sẽ sử dụng để hiểu rõ hơn về dữ liệu thu được từ một tập hợp mẫu và cách bạn có thể sử dụng nó để tạo phân loại phần mềm độc hại cho người nghèo của chính bạn.

Mặc dù tiền đề khá trực quan, việc sử dụng định lý Bayes có nhiều ứng dụng khác nhau từ sao chép nhạc tự động, nhận dạng giọng nói và phân loại thư rác. Trước tiên, chúng tôi sẽ giới thiệu tổng quan về xác suất có điều kiện là gì và sau đó chúng tôi sẽ xây dựng trình phân loại phần mềm độc hại của riêng mình cho nền tảng Android cũng như xem cách tiếp cận bạn có thể áp dụng tương tự với nhận dạng thư rác.

CON NGƯỜI MÔ HÌNH

Quy tắc của Bayes đã tiết lộ rằng tâm trí con người cũng hoạt động theo các mô hình xác suất. Tâm trí có thể được mô hình hóa theo các kỳ vọng có thể được rút ngắn thành con số. Nghĩ đến việc học một ngôn ngữ mới và nghe nó từ một người bản ngữ, bạn sẽ cố gắng chọn ra một bộ từ trong danh sách các từ đã học phù hợp nhất với ngữ cảnh. Đó là quy tắc Bayes trong hành động nếu tâm thực sự có thể được đơn giản hóa thành một phương trình. Bạn đang chọn tập hợp các từ theo một trình tự cụ thể - ví dụ như trong tiếng Pháp, bạn đang nghe Cẩn âm Je suis tres bon. Truyền dịch sang Hồi Tôi rất tốt. Bạn sẽ chọn giữa Je / Vous (I / You), suis / etre (động từ có nghĩa là tiếng Anh trong các mức giảm khác nhau) và tương tự. Nếu bạn xác định từ 'Je' theo sau là 'suis', bạn đã đoán rằng người nói đang cố nói điều gì đó về mình (hoặc một bối cảnh tương tự).

Một ví dụ thứ hai sẽ là sao chép khóa âm nhạc trong phần mềm âm nhạc. Ở đây một tập hợp các nốt có thể xảy ra nhất được tập hợp trong một cái gì đó chúng ta sẽ gọi là 'cấu trúc' để biên dịch một tập các nốt có thể xảy ra nhất được phát trong một bài hát trong một phím cụ thể. Các quy mô lớn và nhỏ quen thuộc có một mẫu đặt trước. Vì vậy, phân tích một khối lượng lớn âm nhạc sẽ cho chúng ta các giá trị thống kê của từng nốt trong mỗi phím được sử dụng trong rất nhiều bài hát. Những số biểu đồ này sau đó có thể được chuyển đổi thành một mô hình xác suất bằng cách chỉ cần đếm khối lượng âm nhạc có chứa cao độ ra khỏi kho mẫu. Điều này sẽ tạo thành tập dữ liệu đào tạo. Do đó, đưa ra một chuỗi đầu vào từ bất kỳ bài hát nào từ một bài kiểm tra, từng phần đã xác định các phần của âm nhạc - nói 4 thanh hoặc bất kỳ đơn vị âm nhạc được tối ưu hóa nào khác, có thể được tìm kiếm ngay lập tức danh sách các điểm xác suất và điểm số cao nhất sau khi nhân từng xác suất cao độ sẽ cho chúng ta một dấu hiệu của khóa mà nó có khả năng nhất. là phụ thuộc và có thể xảy ra như là kết quả của một biến trước đó. Điều này làm cho nó rất hấp dẫn với mục đích dự đoán và phân loại.

TÍNH TOÁN ĐIỀU KIỆN

Một trong những định nghĩa tốt hơn về xác suất sẽ là biểu diễn nó như là một hàm toán học trong đó nó lấy một biến làm đầu vào cho một đầu ra tương ứng sẽ biểu thị xác suất hoặc thước đo cơ hội của biến đó có giá trị được nhập. Đầu ra phải nằm trong khoảng từ 0 đến 1. Xác suất có thể được ký hiệu là 0. Phân phối đơn giản sẽ là tập hợp các xác suất riêng lẻ cho tất cả các giá trị của biến đầu vào.

Ví dụ quen thuộc về xác suất của một con lăn lăn đến một con số cụ thể là một minh họa tốt về xác suất trong hành động. Đối với mỗi bên của khối lập phương, một số được gán và do đó tổng số biến thể cho một số lượng chết là 6. Chúng ta có thể biểu thị tập hợp các số riêng lẻ như tập mẫu.

S1 = {1,2,3,4,5,6}

Đối với mỗi lần ném, chúng tôi quan tâm đến số trên khối lập phương phải đối mặt. Chỉ có thể có một số như vậy trong không gian mẫu. Do đó, xác suất riêng của từng số trong tập mẫu sẽ là một số bất kỳ trong tập mẫu cho mỗi lần ném. Cho rằng khuôn được cân bằng, xác suất cá nhân bằng nhau cho tất cả các số. Do đó xác suất 1, P (1) = 1/6, P (2) = 1/6 và cứ thế. Đọc nhiều hơn như sự xuất hiện của số 1 trong số 6 số; xảy ra số 2 trong số 6 số; chỉ có một trong mỗi số trong tập hợp, làm cho các số là duy nhất, do đó tử số sẽ là một trong mỗi trường hợp. Tập hợp các xác suất riêng lẻ này sẽ là phân phối. Trong trường hợp này, tổng các phân số thu được phải bằng một (1/6 X 6 bằng 1).

Trong một kịch bản thứ hai, giả sử chúng ta có hai con xúc xắc A và B, và chúng ta muốn biết xác suất để có được một con 2 trong một cái chết nếu chúng ta đã có 1 con trên một con súc sắc khác. Ở đây các biến hoàn toàn độc lập. Điều này sẽ được biểu diễn trong sơ đồ Venn là giao điểm của hai xác suất A và B. Trong trường hợp này, xác suất riêng lẻ được nhân lên một cách đơn giản.

Đến kịch bản phù hợp hơn của các biến phụ thuộc lẫn nhau đưa chúng ta đến quy tắc của Bayes. Nói một cách đơn giản nhất, khi định nghĩa lại định nghĩa cho phân loại phần mềm độc hại, đó là xác suất của một LỚP được đưa ra một BÌNH LUẬN. Đại diện bởi P (LỚP | BINary). LỚP có thể biểu thị hai loại chính của MALware và BENIGN . Trường hợp | biểu tượng dịch thành 'cho'. Nó có thể được chỉ ra rằng -

P (LỚP | BINary) tỷ lệ với P (BINary | LỚP) * P (LỚP)

Ở đây P (LỚP) sẽ là xác suất trước và P (LỚP | BINary) là xác suất sau . Các tham số này rất quan trọng, đặc biệt là giá trị trước vì nó mang lại độ lệch thống kê đối với LỚP kết quả trong toàn bộ tập hợp mẫu.

Bằng chứng khá logic và tôi khuyến khích bạn đi sâu như bạn muốn. Ở đây, chất lượng có điều kiện được thể hiện trong thực tế là chúng tôi muốn biết loại nhị phân đã cho và cố gắng xác nhận xem đó là phần mềm độc hại hay lành tính.

Do đó, lấy các loại trong LỚP của chúng tôi và tính xác suất cho từng loại chúng tôi nhận được:

P (LỢI NHUẬN | BINary) = P (BINary | LỢI) P (LỢI)

P (PHẦN MỀM | BINary) = P (BINary | MALware) P (PHẦN MỀM)

Vì các giá trị tỷ lệ thuận, chúng ta chỉ cần so sánh hai giá trị và gán giá trị lớn hơn làm kết quả cuối cùng.

Đó là tất cả để xác suất có điều kiện cho mục đích của chúng tôi. Các kỹ thuật khác như hồi quy và xếp hạng sẽ được đề cập trong các bài viết sắp tới. Các chủ đề thú vị khác của các mô hình Hidden Markov, cũng liên quan đến xác suất và cách sử dụng dự đoán của chúng, sẽ cần điều này như một tiền thân.

THỰC HIỆN

Để phân loại một bộ nhị phân Android, cách tiếp cận tôi đã thực hiện để phân loại sơ bộ liên quan đến việc sử dụng các bộ dữ liệu nghiên cứu có sẵn công khai, đủ để sao chép trong phòng thí nghiệm của tôi. Ngoài ra, dữ liệu nghiên cứu có liên quan đến thống kê sẽ hữu ích nhất cho mục đích của chúng tôi. Hữu ích nhất để tham khảo đầu tiên là bộ dữ liệu Dự án bộ gen của Android gồm 1260 phần mềm độc hại. Một trong những biểu đồ biểu thị biểu đồ quyền được tìm thấy trong 1260 phần mềm độc hại và 1260 ứng dụng Android lành tính. Đây sẽ là thử nghiệm rất tốt được đặt ra cho giai đoạn đầu tiên của Phân loại Naïve Bayes. Chúng tôi gọi nó là ngây thơ bởi vì chúng tôi đưa ra một giả định về xác suất trước đó và điều chỉnh giá trị để có được phân loại đúng. 20 quyền hàng đầu là những gì đã được vẽ với số lượng phần mềm độc hại trong bộ 1260 phần mềm độc hại có quyền này. Đây chính xác là bộ lọc dữ liệu đã được thực hiện cho chúng tôi. Được thừa nhận đang chạy lại mã trích xuất quyền của Android trên bộ sưu tập phần mềm độc hại Android của riêng tôi và sau đó trên một bộ ứng dụng hợp pháp của Android, tôi đã nhận được một con số chính xác 99% cả hai lần. Mã trích xuất các quyền hoàn chỉnh và lưu trữ nó trong một danh sách và sau khi hoàn thành bộ mẫu, nó được sắp xếp theo thứ tự giảm dần để cung cấp cho chúng tôi 20 quyền hàng đầu trên mỗi bộ mẫu.

Liên quan đến Quy tắc Bayes, điều khác để giới thiệu về các tính toán là nhân từng xác suất trong một tập hợp biến. Áp dụng điều đó vào biểu đồ quyền thu được của chúng tôi, chúng tôi chỉ cần tạo một danh sách bao gồm mỗi quyền bằng cách lấy một phần của (số phần mềm độc hại có quyền đó) / tổng số phần mềm độc hại được thiết lập. Lặp lại và rửa sạch cho bộ sưu tập lành tính.

Những gì chúng tôi nhận được là 2 danh sách chứa xác suất của mỗi trong số 20 quyền hàng đầu đối với phần mềm độc hại và tệp .apk hợp pháp. Bước đầu tiên để có được mã đúng sẽ là viết các liệt kê C # cho mỗi phân phối xác suất. Mỗi enum bên dưới kế thừa từ kiểu dữ liệu int biểu thị tất cả các giá trị số là kiểu số nguyên. Việc khai báo enums có định dạng -

enum {}

Enums là một cách để đặt tên cho hằng số. Ở đây mỗi chuỗi quyền được gán một giá trị nguyên. Khi tên được gọi, chúng có thể được gõ thành int. Ở đây tần suất của phần mềm độc hại cho mỗi quyền trong các bộ mẫu tương ứng được đưa ra theo định dạng -

PERMISSION_NAME = FREQUENCY (COUNT OF FILES IN THE SAMPLE SET)
public enum perm20 : int{
 INTERNET = 1232,
 READ_PHONE_STATE=1179,
 ACCESS_NETWORK_STATE = 1023,
 WRITE_EXTERNAL_STORAGE=847,
 ACCESS_WIFI_STATE=804,
 READ_SMS=790,
 RECEIVE_BOOT_COMPLETED=688,
 WRITE_SMS=658,
 SEND_SMS=553,
 RECEIVE_SMS=499,
 VIBRATE=483,
 ACCESS_COARSE_LOCATION=480,
 READ_CONTACTS=457,
 ACCESS_FINE_LOCATION=432,
 WAKE_LOCK=425,
 CALL_PHONE=424,
 CHANGE_WIFI_STATE=398,
 WRITE_CONTACTS=374,
 WRITE_APN_SETTINGS=349,
 RESTART_PACKAGES=333
 }
public enum perm20Benign : int {
 INTERNET=1122,
 ACCESS_NETWORK_STATE=913,
 WRITE_EXTERNAL_STORAGE=488,
 READ_PHONE_STATE=433,
 VIBRATE=287,
 ACCESS_FINE_LOCATION=285,
 ACCESS_COARSE_LOCATION=263,
 WAKE_LOCK=218,
 RECEIVE_BOOT_COMPLETED=137,
 ACCESS_WIFI_STATE=134,
 CALL_PHONE=114,
 CAMERA=73,
 READ_CONTACTS=71,
 GET_TASKS=60,
 GET_ACCOUNTS=54,
 SET_WALLPAPER=49,
 SEND_SMS=43,
 WRITE_SETTINGS=39,
 CHANGE_WIFI_STATE=34,
RESTART_PACKAGES=33
}

Các tính toán thực tế liên quan đến việc nhân bộ nhóm quyền trong mỗi tệp Android, tính xác suất Bayes cho mỗi bộ quyền cho mỗi phần mềm độc hại và lặp lại tương tự cho bộ lành tính.

LƯU Ý: Điều rất quan trọng là phân chia tập huấn luyện và tập kiểm thử để đảm bảo rằng bài kiểm tra là tối ưu và việc đào tạo không được trang bị quá mức. Đó là để nói rằng nó chỉ hoạt động với tập huấn luyện chứ không phải dữ liệu trong thế giới thực. Do đó, việc điều chỉnh phải được thực hiện bằng cách chia đôi tập hợp mẫu thành tập dữ liệu huấn luyệnkiểm tra. Điều này là bắt buộc đối với bất kỳ quy trình học máy nào cho dù chúng là mạng lưới thần kinh hay phân loại của Bayes.

Các hàm tính toán trông như thế này -

public void setScore(List p) {




intmalIdx = 0; intgoodIdx = 0;
for each (perm20 mal in Enum.GetValues(typeof(perm20)))
 {
foreach (string l in p ){
stringtmp = getUpper(l);
if (tmp.Contains(mal.ToString()))
 {
malScore *= (float.Parse(((int)mal).ToString())/ 1260);
 //above does the probability multiplication
PermCount++;
mar[malIdx] = 1; //hit flagger for viz
 }
 } malIdx++;
 }
foreach (perm20Benign good in Enum.GetValues(typeof(perm20Benign)))
 {
foreach (string l in p)
 {
if (getUpper(l).Contains(good.ToString()))
 {
benignScore *= (float.Parse(((int)good).ToString()) / 1260);
ben[goodIdx] = 1;
 }
 } goodIdx++;
 }

Một hàm tiện ích để lấy các ký tự chữ hoa từ các giá trị enum:

private string getUpper(string a) {
char[] c = a.ToCharArray();
 StringBuilder s = new StringBuilder();
foreach (char f in c) {
if (Char.IsUpper(f) || f=='_') { s.Append(f); }
 }
returns.ToString();
 }

Lưu ý các dữ liệu nghiên cứu khác, tôi đã bao gồm số lượng quyền cũng như giá trị phân tích bài đăng để đưa ra quyết định cuối cùng.

intPermCount = 0;
publicint COUNT {
get {return PermCount;}
 }

BÌNH LUẬN: Có thể không cần thiết ở giai đoạn này, nhưng việc biểu diễn phạm vi hoặc chuẩn hóa, được thực hiện bằng các phương pháp khác nhau. Biểu diễn sigmoid được sử dụng để bình thường hóa các giá trị dương. Trong trường hợp các giá trị âm là cần thiết hoặc cụ thể hơn là cần có biểu diễn lưỡng cực thì hàm hyperbol được sử dụng thay thế. Trong nhiều trường hợp, tốt nhất là bắt đầu bằng cách lấy một giá trị đối ứng cho một phạm vi cụ thể. Điều này có hiệu lực bình thường hóa toàn bộ phạm vi trong các giá trị từ 0 đến 1.

Sigmoid (X) = 1 / (1 + e ^ -X)

Hyperbolic (X) = (e ^ 2X -1) / (e ^ 2X + 1)

Đối ứng (X) = 1 / X

Tôi đã khởi tạo các biến số điểm cuối cùng dưới dạng các kiểu dữ liệu dấu phẩy động.

Biểu diễn các phạm vi xác suất được thực hiện tốt nhất với các giá trị từ 0 đến 1 và vì các giá trị trung gian sẽ rất nhỏ sau khi nhân các số dấu phẩy động.

floatmalScore=0.001f;
floatbenignScore=0.001f;
string verdict = String.Empty;

Các thuộc tính dưới đây được sử dụng để trả về các giá trị cho lớp khác.

public string VERDICT { get { return verdict; } }
public double MALSCORE { get { return malScore; } }
public double GOODSCORE { get { return benignScore; } }

Tôi cũng đã sử dụng hai mảng số nguyên được sử dụng để khởi tạo trực quan hóa các quyền cho các mục đích trực quan hóa sau này nếu cần. Họ lưu trữ 20 quyền hàng đầu như một bộ cờ thành công. 1 cho mỗi lần nhấn và 0 cho các vị trí trống. Ngoài ra các thuộc tính tương ứng của chúng được khởi tạo để thu hồi sau này.

int[] mar = new int[20];
int[] ben = new int[20];
publicint[] MALVIZ {
get { return mar; }
 }
publicint[] BENVIZ {
get { return ben; }
 }

Tất cả các mã trên có thể được gói gọn trong một lớp C # và luôn sẵn sàng để sử dụng mô-đun. Lớp này được đặt tên là bayesClassifier.cs.

Trong một lớp khác khi xảy ra hàng loạt trích xuất, hàm IO ghi các giá trị được tính cho mỗi tệp trong tập huấn luyện thành một tệp có tên là stats.txt trong thư mục hiện tại. Nhớ sử dụng một nửa của mỗi bộ mẫu. Giữ nửa còn lại để tests.IO () lấy hai giá trị được tính từ bayesClassifier.cs . Mặc dù hàm IO () có hai chuỗi, tôi hiện đang cung cấp kích thước tệp và số lượng quyền cùng với xác suất Bayes của phần mềm độc hại và chuỗi xác suất lành tính.

bayesClassifier.cspS = new bayesClassifier.cs(); //instance of the permissionScore class
pS.setScore(_MANSET[idx]._PERMSET); // setScore() called passing extracted permissions string list.
IO(pS.COUNT.ToString() + "," + _FILEPROPS[0].FILESIZE.Substring(0, _FILEPROPS[0].FILESIZE.Length-6) + "," + pS.MALSCORE.ToString(), pS.GOODSCORE.ToString());
private void IO(string malScore, string benignScore)
 {
using (FileStreamfs = new FileStream(Environment.CurrentDirectory + "\\stats.txt", FileMode.Append, FileAccess.Write))
 {
using (StreamWritersw = new StreamWriter(fs))
 {
sw.WriteLine(malScore + "," + benignScore);
 }
 }
 }

Chạy một nửa bộ mẫu phần mềm độc hại và mẫu lành tính cung cấp cho chúng tôi một bộ dữ liệu csv có thể được điều tra cho các mẫu và điểm số để điều chỉnh thêm phân loại cho bộ kiểm tra.

Một điều sẽ nhắc nhở bạn về phần 'Naïve' của bài tập này là các giá trị sau được đặt trong mã bayesClassifier.cs sau khi nhân xác suất được thực hiện.

benignScore * = 0,80f;

malScore * = 0,20f;

Đây là các xác suất trước cho từng bộ mẫu được giả định theo thống kê dựa trên không gian chung của các ứng dụng hợp pháp và phần mềm độc hại. Giá trị này có thể cần phải được điều chỉnh trước khi nó phân loại đúng. Giá trị 0,80 cho các ứng dụng lành tính cho thấy giả định rằng khoảng 80% ứng dụng trong không gian ứng dụng Android là các ứng dụng hợp pháp và phần mềm độc hại chiếm khoảng 20% ​​tổng số.

Đoạn trích gồm 3 hàng từ stats.txt cuối cùng chạy trên 500 mẫu phần mềm độc hại -

ĐẾM KÍCH THƯỚC MAL_BAYES_PROBABILITY BENIGN_BAYES_PROBABILITY
số 8 1860822 2.80749645753531E-06 3.45789041844569E-09
4 48869 2.28490225708811E-05 9,41584949032404E-06

Bạn có thể thấy ngay rằng các giá trị xác suất phần mềm độc hại lớn hơn xác suất lành tính được tính cho cùng một mẫu phần mềm độc hại. Chạy lại cái này trên bộ lành tính cũng cho ra bộ dữ liệu thú vị và được mong đợi. Thêm vào đó và điều chỉnh thêm các tham số của tập dữ liệu trong bài viết tiếp theo.

PHẦN KẾT LUẬN:

Học máy hoàn toàn không đáng sợ nếu bạn tiếp cận nó một cách thực tế. Có nguồn gốc từ số liệu thống kê và xác suất, việc áp dụng định lý Bayes đã bắt đầu như ngọn lửa hoang dã, và vì một lý do - nó hoạt động khá tốt khi dữ liệu được quản lý đúng cách. Bạn đã tìm hiểu về các nguyên tắc cơ bản của Định lý Naïve Bayes và có được một cái nhìn tổng quan về xác suất có điều kiện.

Bạn cũng đã từng bước hiểu biết về việc triển khai Quy tắc Bayes và phân loại phần mềm độc hại trên Android như một bước sơ bộ hướng tới một công cụ phân loại hoạt động.

Trong phần tiếp theo, tôi sẽ thảo luận về các phương pháp học máy khác để xây dựng một bộ phân tích phần mềm độc hại Android trong khi sử dụng dữ liệu lượm lặt được từ bài tập này. Phát hiện thư rác là một ví dụ tuyệt vời khác sẽ được thảo luận trong bài viết tiếp theo như là sự tiếp nối của loạt bài cơ bản về máy học này để phân tích phần mềm độc hại và nghiên cứu bảo mật.

|