Volatility プラグインを作成して、マルウェアが使用する構成ファイルをメモリ ダンプから抽出しようとしています。ただし、ルート権限なしでこのプラグインを (「sudo」なしで) 実行すると、プラグインは行 yara.compile でクラッシュします。このプラグインを「sudo」で実行すると、yara.compile 行の後のコードが実行されません。yara.compile がこの問題を引き起こしている理由がわかりません。誰かがこれで私を助けてくれますか? 以下は私が書いたコードです:
import volatility.plugins.common as common
import volatility.utils as utils
import volatility.win32.tasks as tasks
import volatility.debug as debug
import volatility.plugins.malware.malfind as malfind
import volatility.conf as conf
import volatility.plugins.taskmods as taskmods
try:
import yara
HAS_YARA = True
except ImportError:
HAS_YARA = False
YARA_SIGS = {
'malware_conf' : 'rule malware_conf {strings: $a = /<settings/ condition: $a}'
}
class malwarescan(taskmods.PSList):
def get_vad_base(self, task, address):
for vad in task.VadRoot.traverse():
if address >= vad.Start and address < vad.End:
return vad.Start
return None
def calculate(self):
if not HAS_YARA:
debug.error('Yara must be installed for this plugin')
print "in calculate function"
kernel_space = utils.load_as(self._config)
print "before yara compile"
rules = yara.compile(sources=YARA_SIGS)
print "after yara compile"
for process in tasks.pslist(kernel_space):
if "IEXPLORE.EXE".lower() == process.ImageFileName.lower():
scanner = malfind.VadYaraScanner(task=process, rules=rules)
for hit, address in scanner.scan():
vad_base_addr = self.get_vad_base(process, address)
yield process, address
def render_text(self, outfd, data):
for process, address in data:
outfd.write("Process: {0}, Pid: {1}\n".format(process.ImageFileName, process.UniqueProcessId))
そのため、このプラグインをルート権限で実行すると、「print 'after yara compile'」という行が実行されません。その理由は何ですか?ありがとうございました。