靜態掃瞄之Yara第三話 編寫yara規則(2)

2021-08-14 10:28:54 字數 1818 閱讀 4640

翻譯自:

幾個月前,我寫了一篇」how to write ****** but sound yara rules「的部落格。那篇部落格所提到的技術和工具現在以及得到了改進,現在我就來詳細地介紹下更新的地方。

yara最被低估的特徵之一是可以定義乙個字串的範圍來匹配。 我使用這種技術來建立乙個規則,發現它能可靠地檢測meterpreter的payload,即使它被編碼/隱藏。

當你發現一段惡意**處在乙個可執行檔案的末尾時,你應該會有如下疑問:

這些字串位於檔案中的這個位置是正常的嗎?

這些字串在該檔案中多次出現是否正常?

兩個字串之間的距離是不是固定的?

這時我提供一種寫規則的思路,對於那些非specific字串,嘗試定義乙個制定filesize(例如檔案大小》 800kb)的規則以及非spcific字串位置的規則(如$s1 in (filesize-500..filesize))

下面是乙個webshell的例子,如果我們使用$code = "7t2jx...."來作為特徵,那麼此webshell的作者只需在後續的版本中替換掉$code7t2jx......便可繞過我們的規則。

所以我們決定將eval(gzinflate(base64_decode("作為特徵:

rule webshell_b374k_related_1
這樣的規則看起來適應性就更強

更新之後,yargen具有opcode功能。 它在預設情況下處於啟動狀態,但僅在沒有足夠的字串可以提取的情況下才有有效果。

opcode功能的弊端是在建立規則時需要占用多於2.5 gb的記憶體。 我將在下乙個版本中將其更改為可選引數。

yaranalyzer是我推出的又乙個強大的工具,專注於分析規則的通用性。 在建立了乙個大的規則集或乙個通用型的規則後,你想檢查這些規則的通用性如何,便可以使用這款工具,yaranalyzer則會輸出以下結果:

檢測到乙個以上樣本的規則

被多條規則檢測到的樣本

沒有檢測到樣本的規則

沒有被檢測到的樣本

使用如下shell可以更清晰地檢視特徵字串:

#!/bin/bash

(strings -a -td "$@" | sed 's/^\(\s*[0-9][0-9]*\) \(.*\)$/\1 a \2/' ; strings -a -td -el "$@" | sed 's/^\(\s*[0-9][0-9]*\) \(.*\)$/\1 w \2/') | sort -n

將返回字串的偏移以及描述(ascii/unicode)

順便也安利下我新推出的字串檢索工具:prisma

Spring學習第三話 元件掃瞄及註解

scope 控制物件作用域的 value屬性的取值有 singleton prototype postconstruct 控制物件初始化的標註 加在方法上 predestroy 物件銷毀對應的標註 注意必須是單例的 主動關閉容器配置檔案優先 1.value 一般用於解決複雜值的注入 用法是 valu...

白話C 之第三話

本節內容主要是對陣列與集合的闡述.1.一維陣列的定義 格式 型別 變數名 new 型別 元素個數 比如 string str new string 5 注意 當在new 型別的時候,如果在後邊初始化其值時,可以不定義元素的個數。但是如果不為其初始化值的話,那麼一定要書寫元素的個數如 new stri...

堆疊溢位第三話 GS機制

棧中的守護天使 gs,亦稱作stack canary cookie,從vs2003起開始啟用 也就說,gs機制是由編譯器決定的,跟作業系統無關 是堆疊溢位中最令人頭疼的一道關卡 gs機制分三個步驟 計算隨機種子 canary寫入棧幀 gs校驗 1 程式啟動時,讀取.data的第乙個dword作為基數...