《A machine learning approach to detection of JavaScript-based attacks using AST features and paragraph vectors》
《一種基於javascript的攻擊,使用AST特徵和段落向量的機器學習檢測方法》
作者:Samuel Ndichu ,Sangwook Kim ,Seiichi Ozawa ,Takeshi Misu ,Kazuo Makishima
簡介:該方法的創新點在於用抽象語法樹表示代碼結構、採用機器學習的方法Doc2vec進行特徵學習。
一、JavaScript代碼的AST形式
AST代表了代碼的必要和功能結構,如作用域、表達式或聲明,同時通過省略不必要的語法細來避免冗餘,即在解析過程之後也不影響代碼的原始功能。有彙編基礎的讀者應該知道,編譯過程從詞法分析開始,編譯器在詞法分析中執行掃描和標記。AST的解析器就是接受這個標記化的輸入並通過語法分析生成AST。圖1顯示了使用5+(1*12)作爲源文本通過語法分析生成的AST。JS代碼用JS對象表示法(JSON)表示。然後,AST-JS可以用作機器學習算法的輸入。
二、數據預處理
作者使用esprima來解析JavaScript代碼,該解析器允許各種代碼分析和操作,如編輯、轉換、可視化和驗證,即將JS代碼解析爲AST。Esprima從JS代碼字符串輸入中生成AST-JS,如圖2所示爲解析前的JS,圖3爲解析後的AST-JS。該工具還檢查JS代碼的語法錯誤,從而確保輸入是一個有效的JS程序,如果輸入包含語法錯誤,則不會被解析成AST-JS。
三、利用Doc2Vec進行特徵學習
作者先提取到代碼的AST,進而得到CFG,根據數據傳遞關係,得出PDG,PDG作爲CFG的數據擴充。一旦JStap構建了抽象代碼表示來分析JavaScript樣本,就可以提取詞彙單位並遍歷不同的圖來收集語法單位。隨後,對於每個代碼表示,分別考慮n-gram特徵以及提取的單元與其對應節點值(變量名)的組合。最後,學習組件將這些特徵的頻率作爲輸入,用於分類過程。對幾個現成的系統(伯努利樸素貝葉斯、多項式樸素貝葉斯、支持向量機和隨機森林)進行了實證評估,並選擇了隨機森林。
該文章的主要創新點是在惡意JS檢測領域引入了Doc2Vec,其使用的AST分析工具在之前的文章中就出現過,但是提取的Plain-JS特徵還是較爲新穎,不過該文章使用的是核心網絡模型是CNN。