USBデバイス接続履歴の追跡に直面したLinuxフォレンジック

画像

(セキュリティトレーニングの専門分野でのトレーニングの過程で)分野の1つに没頭する一環として、外付けハードドライブのUniverフォルダーの腸に埋めたくない1つの面白いプロジェクトに取り組みました。

このプロジェクトはusbripと呼ばれ、Linuxフォレンジック用、つまりUSBデバイス接続の履歴を操作するための小さなコンソールオープンソースユーティリティです。 このプログラムは、純粋なPython 3(サードパーティモジュールを使用)で記述されており、Python 3.xインタープリターと、pipを使用して1行で解決されるrequirements.txtの数行以外の依存関係は必要ありません。

この投稿では、このソフトウェアの機能のいくつかを説明し、ダウンロードソースへのリンクを記載した短いマニュアルを残します。

撃たれ! (...カットの意味で!)

ご注意 この記事で説明されている機能は、ユーティリティの最初のバージョンに関連しています。 多くの新機能を備えた最新バージョンについては、 リポジトリに移動することを提案します

スクリーンショット


リムーバブルUSBデバイスの接続履歴を取得する:

画像

モデルID(PID)でUSBデバイスに関する追加情報を検索します。

画像

説明


ご存知のように、GNU / Linuxベースのオペレーティングシステムは、あらゆる種類のイベントの記録に非常に敏感であり、USBデバイスの接続/切断も例外ではありません。 「ユニバーサルインターフェースとしてのテキストストリーム」に関するUNIX哲学のポイントの1つと併せて、分布に応じた(詳細度の異なる)イベントのアーティファクトに関する情報は、次の1つ以上のテキストファイルで見つけることができます。


FORENSIC-PROOFは、この主題に関するこのような写真さえ示しています(少し不完全ですが、問題ではありません):

画像

その作業のために、usbripは、Debian(Ubuntu、Linux Mintなど)およびRPM(CentOS、Fedora、openSUSEなど)に基づいたすべてのLinuxアセンブリ、ログファイル、つまり/var/log/syslog*または/var/log/messages* 、それらを解析して必要な情報を検索し、美しいプレート(または必要に応じてリスト)でUSBデバイス接続の見つかったトレースを探します。

また、usbripは次のことができます。


助けて


利用可能なモジュールのリストを取得します。

 $ python3 usbrip.py -h 

特定のモジュールで使用可能なサブモジュールのリストを取得します。

 $ python3 usbrip.py <> -h 

特定のサブモジュールで使用可能なオプションのリストを取得します。

 $ python3 usbrip.py <> <> -h 

構文


 $ python3 usbrip.py banner     . $ python3 usbrip.py events history [-q] [-t | -l] [-e] [-n _] [-d  [ ...]] [-c  [ ...]] [-f _ [_ ...]]   USB-. $ python3 usbrip.py events gen_auth <_.JSON> [-a  [ ...]] [-q] [-e] [-n _] [-d  [ ...]] [-f _ [_ ...]]    () USB-. $ python3 usbrip.py events violations <_.JSON> [-a  [ ...]] [-q] [-t | -l] [-e] [-n _] [-d  [ ...]] [-c  [ ...]] [-f _ [_ ...]]  "-"     . $ python3 usbrip.py ids search [-q] [--vid VID] [--pid PID] [--offline]        VID / PID    . $ python3 usbrip.py ids download [-q]  ()     USB-. 

オプション


 ,   'events history', 'events gen_auth', 'events violations', 'ids search', 'ids download': -q, --quiet   ,  () ,         ##################################################################################### ,   'events history', 'events gen_auth', 'events violations': -e, --external    USB- (     ) -n _, --number _     ,    -d  [ ...], --date  [ ...]  ,         -f _ [_ ...], --file _ [_ ...]  - (  ,       -  : /var/log/syslog*  /var/log/messages*     ) ##################################################################################### ,   'events history', 'events violations': -t, --table      (         ,       ;    -t       ) -l, --list      -c  [ ...], --column  [ ...]  ,       (        );  : "conn", "user", "vid", "pid", "prod", "manufact", "serial", "port", "disconn". ##################################################################################### ,   'events gen_auth', 'events violations': -a  [ ...], --attribute  [ ...]  ,         (    "-"    'events violations');  : "vid", "pid", "prod", "manufact", "serial". ##################################################################################### ,   'ids search', 'ids download': --vid VID vendor ID    USB- ( 4  ) --vid PID product ID    USB- ( 4  ) --offline  ,     USB-          ()  

使用例


すべてのUSBデバイスの接続履歴を表示し、バナー、情報(緑色)メッセージを省略し、途中で質問することなく( -q, --quite )、リスト形式( -l, --list )で出力を形成します。最後に見つかった100個のイベント( -n _, --number _ ):
 $ python3 usbrip.py events history -ql -n 100 

リムーバブルUSBデバイスの接続履歴を表示し( -e, --external-e, --externalフィールド(列)が「接続済み」、「VID」、「PID」、「切断」、および「シリアル番号」の表形式で出力を-e, --externalます( -c [ ...], --column [ ...] )情報を取得しながら、日付( -d [ ...], --date [ ...] date -d [ ...], --date [ ...] )で検索をフィルタリングする外部ログファイルから( -f _ [_ ...], --file _ [_ ...] ):
 $ python3 usbrip.py events history -et -c conn vid pid disconn serial -d "Dec 9" "Dec 10" -f /var/log/syslog.1 /var/log/syslog.2.gz 

すべてのUSBデバイスの接続履歴テーブルを作成し、さらに分析するために出力をファイルにリダイレクトします。 出力ストリームが標準の標準出力( "|"または">"など)ではない場合、特別なデータは出力に存在しません。 端末のフォントの色を担当する文字。そのため、テキストファイルに判読不能な文字が散らばることはありません。 また、usbripはいくつかのUNICODE定数を使用するため、作成されたファイルのエンコードを正しい表示のためにUTF-8にすぐに変換して(たとえば、 encovを使用)、移植性を高めるためにWindowsスタイルの改行文字を使用することもencov (例: awkを使用)
 $ python3 usbrip.py history events -t | awk '{ sub("$", "\r"); print }' > usbrip.txt && enconv -x UTF8 usbrip.txt 

注:スペシャルを取り除きます。 出力がすでにstdoutに送信されている場合は、色を担当する文字も使用できます。 これを行うには、受信したデータを新しいusbrip.txtファイルにコピーし、別のawk命令を追加します。
 $ awk '{ sub("$", "\r"); gsub("\\x1B\\[[0-?]*[ -/]*[@-~]", ""); print }' usbrip.txt && enconv -x UTF8 usbrip.txt 

9月26日に接続された最初の3つのデバイスの「VID」フィールドと「PID」フィールドを含むJSONファイル( trusted/auth.json )の形式で、信頼できるデバイスのリストを作成します。
 $ python3 usbrip.py events gen_auth trusted/auth.json -a vid pid -n 3 -d "Sep 26" 

「PID」フィールドによるtrusted/auth.jsonできるデバイスのリスト( trusted/auth.json )に基づいて、リムーバブルUSBデバイスの「侵入者イベント」の接続履歴を検索し、「Connected」、「VID」、および「PID」フィールドを持つテーブル形式で出力を生成します。
 $ python3 usbrip.py events violations trusted/auth.json -a pid -et -c conn vid pid 

VIDとPIDに基づいてUSBデバイスに関する追加情報を検索します。
 $ python3 usbrip.py ids search --vid 0781 --pid 5580 

USBデバイス識別子データベースをダウンロード/更新します(ソースはこちら ):
 $ python3 usbrip.py ids download 

リンクと追記


Githubからユーティリティを選択できます 。起動と正しい操作のすべての依存関係は、 requirements.txtで指定されています

ご清聴ありがとうございました!

PSはい、バナーと情報メッセージのスタイルはsqlmapプロジェクトに触発されてます(* ^。^ *)

UPD 06/13/2018。 Codebyの人(正直なところショックを受けています)からの私のユーティリティを含む実際の(?)ケースの調査がありました。

Source: https://habr.com/ru/post/J352254/


All Articles