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の人(正直なところショックを受けています)からの私のユーティリティを含む実際の(?)ケースの調査がありました。



All Articles