2017.1.22
2018.4.13

Linuxのウイルス対策について

LinuxベースのシステムではWindowsよりもウイルス感染のリスクが低いという認識だったので、対策らしい対策はしてこなかったのですが、このたび個人利用の開発テスト機がウイルスに感染してしまいました。

最初は感染しているとはわからずにそのまま運用していましたが、どうもサーバの挙動がおかしく、見覚えのないプロセスが動いていたりと、さすがに不安を覚えたのでウイルス関連の記事を読み漁って、ウイルスの対策と駆除をやってみました。

以下のはその時にやったことのメモです。

目次

  • ウイルスの検知・駆除
  • ウイルス感染時のシステムの挙動
  • ウイルス感染時の原因
  • 最後に
  • 調査時に使用したコマンド
  • 参考リンク

ウイルスの検知・駆除

Linuxのウイルス対策については完全に無知だったので、とりあえず以下の記事を読んでどんな感じか確認。

続いて、記事やシステムのログを確認しながら怪しいファイルの削除やアクセス権が微妙なディレクトリの見直し、さらにはネットワークの監視などを行い、一時、改善したように見えたのですが、それは本当に一時的だったので、セキュリティソフトを導入してウイルスチェックを実行してみることにしました。

有料・無料問わずLinuxでベストなセキュリティソフトがどれかイマイチ分からなかったので、すぐに導入できそうだった無料のClamAVというセキュリティソフトを導入してみました。

ClamAVのインストールは、以下のサイトと記事を参照。

定義ファイルの更新


freshclam

ウイルススキャン


# -r : ディレクトリを再帰的にスキャン
# -i : 感染したファイルのみ表示
clamscan -r -i /

上記コマンドでのウイルススキャンで、「LibClamAV Warning: fmap_readpage: pread fail: asked for ~~~」といったメッセージが出力されましたが、こちらの記事(ClamAVを使ってみる — ぐらさん家のガラクタ倉庫 —)によると、「/sys、/proc、/dev」など実体のない仮想的なディレクトリを除外してスキャンしないとダメらしいので、以下のようなコマンドで実行しないといけないようです。


clamscan -r -i --exclude-dir=^/sys\|^/proc\|^/dev /

修正したコマンドで実行したウイルススキャンの結果は以下の通りでした。


/var/tmp/CsTNbI: Unix.Malware.Agent-1401041 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 5595131
Engine version: 0.99.2
Scanned directories: 31190
Scanned files: 135311
Infected files: 1
Data scanned: 3357.38 MB
Data read: 3828.65 MB (ratio 0.88:1)
Time: 3035.924 sec (50 m 35 s)

やはりというかなんというか、ウイルスに感染してしまっています。clamscanで検知したウイルスファイルに対して処理したい場合は、オプションで削除(--remove)、または特定のディレクトリに移動させる(--move=DIRECTORY)を付加します。

上記で検出されたファイルを削除すると、問題の挙動は発生しなくなったのでとりあえずは安心ですが、今後も大丈夫かどうか不安なので、ウイルススキャンについては定期的に実行するようにcronに登録しました。

続いて、バックドアが設置されている可能性もあるので、こちらもチェック。

chkrootkitが使用するコマンドが改竄されていたら元も子もなく、Linuxインストール直後に導入しておかないといけないそうなので今回はあまり意味がなさそうですが、念のためインストールして実行。

結果は問題ありませんでしたが、前述の通り改竄されている可能性もあるので、今後もサーバの挙動を注視しないといけないかなと思います。

また、今回、色々と調査することでシステムのログの大切が分かりました。これまでApacheのログもそこまで気にしていませんでしたが、調べてみると結構な数のおかしなアクセスがあり、定期的にチェックする必要がありそうです。

ウイルス感染時のシステムの挙動

さて、今回見つかったウイルス感染時のシステムの挙動についてですが、以下のような感じでした。

  • ① 10分間隔でperlコマンドによるプロセスが起動。
  • ② ①のプロセス実行時、ランダム(または攻撃者が操作?)でperlまたはrndコマンドで別のプロセスが起動。
  • ③ ②のプロセスが起動すると、CPUの使用率が上がり、どこかにメールを大量送信(iftopで確認)。

③の状態になると、メールの大量送信による送信バッファの不足に陥るようで、Apacheで公開しているWebページにアクセスすると「(105)No buffer space available: get socket to connect to listener」といったようなエラーが発生して、ページが表示できないことがあります。

システムの挙動がおかしいと思ったのはまさにWebページが正常に表示されなくなったためで、気づいたのは少し重たい処理をしていたからでした。単純にHTMLファイルのみで構成されたWebページだったら気づかなかったかもしれません。

最初の方に書きましたが、一時、問題が改善したと勘違いした理由ですが、上記の挙動をそこまで理解していない段階で、見覚えのないプロセスが時々起動するため、10分間隔で該当のプロセスを pkill コマンドで落とすようにしていたのですが、この10分間隔というのがまさに①のプロセスを起動直後にkillしてくれていたので、以後、問題が発生せずに改善したと勘違いしていたようです。

ウイルス感染時の原因

今回、ウイルスに感染してしまった原因ですが、おそらくApacheでWebサイトとして認識するディレクトリ配下の一部のディレクトリのパーミッションに chmod 777 を設定していたのが問題だったと思います。

以前、Webプログラマーであれば、WordPressに手を出してどんなものか把握くらいはしておかなければ...と思い立ったことがあり、その時にサーバにWordPressをインストールしたのですが、どうにも動かずにいろいろと試した際、WordPress配下のディレクトリに 777 のパーミッションを設定したことがあり、試した後にパーミッションの設定を戻すのを忘れていました。

WordPressはその時のお試し時以外は利用していなかったので、とっととディレクトリごと削除しておけば今回のような問題は起こらなかったのだと思います。いくら個人利用のテスト用サーバとはいえ、テキトーな管理は自分だけならまだしも他人にも迷惑がかかるので、サーバを構築・利用する際は気を付けないといけないですね。

最後に

今回のことで分かりましたが、Linuxだからとウイルスの対策をしないのは、後で痛い目にあいます。

なお、依然としてバックドアが設置されている可能性があるので、できればOSの再インストールを行いたいですがレンタルサーバだとそう簡単にもいかず、これを機にSSDタイプのサーバに乗り換えようかと思います。用途が用途なのでワンコイン...いってもツーコインくらいに収めたいですが、さすがにメモリは1Gくらいは欲しいですね。

調査時に使用したコマンド


# ファイル一覧の表示
find -ls

# 最近ログインしたユーザーの情報を表示(下記のコマンドは最新10件)
last -10

# 実行されているプロセスの一覧を確認(CPUの使用率やメモリの占有率をチェック)
top

# LISTENしているポートの表示
netstat -nlt 

# プロセスが掴んでいるファイル一覧の表示
lsof -p <PID>

# 通信の監視(CentOSの場合、外部リポジトリ(EPEL)を追加しないとインストールできない)
iftop

参考リンク

その他】関連記事