Linuxサーバーでルートキット/マルウェアを検出する方法はありますか? Windowsユーザーにとって最も簡単な方法は、ウイルス対策/マルウェア対策アプリケーションに任せることですが、悪意のある環境で長期間使用していたLinuxマシンがある場合、ハッキングされていないことをどのように確認できますか/監視され、データが侵害されていないことを確認します。
BIOSからカーネルまでの信頼チェーンを検証する手法である 測定されたブート を使用する必要があります。カーネルが検証されると、 [〜#〜] ima [〜#〜] と呼ばれる機能(整合性測定アーキテクチャ)を使用して、実行前にカーネルが実行可能ファイルを検証できるようになります。これは [〜#〜] aide [〜#〜] などの基本的な整合性チェッカーに似ていますが、事後の検出だけでなく、リアルタイムの防止が可能です。メジャードブートには、最新のほとんどのシステムにあるTPMの存在が必要です。
システムが長期間実行されていて汚染されている可能性がある場合、マルウェアをチェックする簡単で効果的な方法はありません。 nhide のようないくつかの単純なユーティリティは非常に単純なルートキットを検出できるかもしれませんが、適切に設計されたルートキットはカーネルをフックして、ユーザースペースツールによる検出を効果的に防ぐことができます。このような場合、サーバーのメモリを専用ハードウェアにダンプし、 Volatility などのメモリ分析フレームワークで分析する必要があります。
カーネルフックを使用せずにユーザー空間から身を隠す洗練されていないマルウェアの場合、従来のデジタルフォレンジック技術はうまく機能します。マルウェアまたは侵入からのソフトウェアレベルの改ざんを検出するための手法の非常に非網羅的なリストには、次のものが含まれます。
重要なシステムログで疑わしいエントリを確認します(オフラインバックアップが理想的です)。
不正な送信接続と受信接続を検出するためのネットワークアクティビティの分析。
プロセスツリーと読み込まれたモジュールを表示して、予期しないエンティティを探します。
Setuidファイルとsetgidファイルのリストを取得して、不審なファイルを探します(例:setuid sed
)。
重要なシステムファイルのiノード番号が連続していることを確認します。
疑わしいものを見つけられないからといって、マルウェアが存在しないということではありません。特に高度なマルウェアは、カーネルからは見えないシステム管理コンテキストで実行したり、GPUなどのプログラム可能なDMA対応デバイスに自分自身をロードしたりできます。サービスの機密性が非常に高い場合、マルウェアが実際に発生する可能性がある場合は、完全に再インストールする必要があります。