(セキュリティトレーニングの専門分野でのトレーニングの過程で)分野の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つ以上のテキストファイルで見つけることができます。
-
/var/log/kern.log*
; -
/var/log/syslog*
; -
/var/log/messages*
; -
/var/log/dmesg*
; -
/var/log/daemon.log*
。
FORENSIC-PROOFは、この主題に関するこのような写真さえ示しています(少し不完全ですが、問題ではありません):
その作業のために、usbripは、Debian(Ubuntu、Linux Mintなど)およびRPM(CentOS、Fedora、openSUSEなど)に基づいたすべてのLinuxアセンブリ、ログファイル、つまり
/var/log/syslog*
または
/var/log/messages*
、それらを解析して必要な情報を検索し、美しいプレート(または必要に応じてリスト)でUSBデバイス接続の見つかったトレースを探します。
また、usbripは次のことができます。
- 承認された(信頼された)デバイスのリストをJSONファイルの形式で作成します。
- 信頼できるデバイスのリストに基づいて「侵入者イベント」を検索します。USBデバイスが参加し、信頼済みとしてマークされていないイベント(USB接続/切断)。
- VID(ベンダーID)および/またはPID(製品ID)でUSBデバイスに関する追加情報を探します。
助けて
利用可能なモジュールのリストを取得します。
$ 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の人(正直なところショックを受けています)からの私のユーティリティを含む実際の(?)ケースの調査がありました。