1000個のプロセスのリストがあり、それらのうち正当なものとそうでないものを特定したいと思います。私はプロセスの名前しか持っておらず、それらを分類したいと思います。これらのプロセスの情報を取得する方法はありますかプログラムで?
それらのうち少なくともどれが一般的なプロセスであるかを特定できれば、リストを短くするのに役立ちます。その後、他の不明なプロセスを検索して、それらの情報を取得できます。
基本的に、Mac/LinuxでWindowsプロセスのリストを確認する必要がありますプロセスの名前しかありません。プロセスの完全な情報を見つけて、正当なプロセスを見つけたいと思います。リストには現在1000個のプロセスがあり、将来的に増加する可能性があります。現時点では手動で実行できますが、スクリプトを実行してチェックを自動的に実行したいと考えています。
共通/正当なプロセスのリストは、インストールされているOSによって異なります。また、リストはマシンにインストールしたソフトウェアによって異なります。
Windowsでは、あなたは試すことができますtasklist
Linuxでは、ps
信頼できるアプリケーションのリストを作成できます(手動またはオンラインで検索できます)。次に、実行中のプロセスのリストをプログラムで取得した後、そのリストを信頼できるプロセスのリストと比較して、残りのプロセスのみを表示できます。
これらのプロセスの一部が無害で合法であると思われる場合は、信頼できるアプリケーションのリストにこれらのプロセスを追加して、次にプログラムを実行したときに再び表示されないようにすることができます。
マシンにアクセスできる場合は、SysInternalsのProcessExplorerが役立ちます。
ハッシュ化されたプロセスデータをVirusTotalに送信して、正当なファイル/プロセスであるかどうかを判断することもできます。
また、署名されているファイルをすばやく特定できます。
ProcessExplorerを最大限に活用する方法の簡単なチュートリアルについては、以下をチェックしてください。 http://www.howtogeek.com/school/sysinternals-pro/lesson2/ (howtogeek.comからの画像)
すべてのプロセスが悪意のあるものかどうかを見つけることができる多くのヒューリスティックがあります。これをいくつかの例で説明します。
マルウェアは、一般的なexe名を使用して検出ツールから隠す傾向があります。そのような場合は、実行中のプロセスのファイルの場所を確認できます。たとえば、svchost.exeという名前のプロセスは、\ Windows\System32 \ディレクトリからのみ起動する必要があります。
マルウェアは process hollowing のような高度な手法を使用しており、これを使用してsvchost.exeまたは任意の正当なバイナリ(最初のケースのバイパスのようなもの)を実行できます。このような場合は、既知のウィンドウの内部を使用することができます。例:services.exeのみが正当なsvchost.exeを起動できます。したがって、svchost.exeプロセスにservices.exeではない親がある場合、それは100%悪意があります。
同様に、services.exeやlsass.exeのような他のヒューリスティックでは、1つのインスタンスのみを実行する必要があります。
上記のテクニックとは別に、このリファレンスはウィンドウで疑わしいプロセスを見つけるのに本当に素晴らしいものです。
https://digital-forensics.sans.org/media/SANS_Poster_2018_Hunt_Evil_FINAL.pdf
プログラムでプロセスinforomationを取得するには(要求したとおり)、それは使用する言語によって異なりますが、プロセッサのバージョン(32ビットまたは64ビット)によっても異なります。
Pythonの subprocess モジュールを使用できます:
_import subprocess
cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
proc = subprocess.Popen(cmd, Shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
print line
_
または [〜#〜] wmi [〜#〜] 両方のプロセッサのバージョンのモジュール:
_import wmi
c = wmi.WMI ()
for process in c.Win32_Process ():
print process.ProcessId, process.Name
_
前述のサブプロセスモジュールを使用して、CMDに入力したコマンドをPythonから呼び出すこともできます。
疑わしいプロセスを分離するだけの場合と同様に、最初に判断の基準となる基準をリストする必要があります。
たとえば、Windows 7および8 OSには、通常3つまたは4つの最上位プロセスを見つけることができるプロセスの階層があります。これにより、どのプロセスが他のプロセスの親であるかを簡単に確認できます。たとえば、Wininit
は、有名な svchost.exe プロセスの複数のインスタンスを含む多数のプロセスの祖先です。このプロセスはWindows OSにとって非常に重要であるため、マルウェアはそれを使用し、_svch0st.exe
_(svchost
)ではなく_0
_、_svhost.exe
_(o
なし)などのc
のリストに表示されます。オン。
したがって、この基準を頭に入れたら、それらを Pythonリスト で並べ替えて個別に表示し、不審なプロセスを区別することができます。