ubuntuにWiresharkをインストールする。

ubuntu 18.04 LTS に Wireshark(Version 2.4.5) をインストールしてみました。そのときの気づきのメモです。Wireshark は「ubuntuソフトウェア」からインストールしました。

インストールの途中に「非特権ユーザ(root以外のユーザ)がパケットをキャプチャできるようにしますか?」と聞かれるのでチェックをつけておく。(チェックをつけておいたのだけど、root以外のユーザではダメみたい。後述。)

インストールが無事終わったので、Wiresharkを起動してみる。キャプチャできるインターフェースが表示されるので任意のインターフェースを選択し、上部のラベルから「キャプチャ」→「開始」を選び実行しました。が、「Couldn’t run /usr/bin/dumpcap in child process:許可がありません」のメッセージが出てしまい、起動に失敗。。

どうやら権限がない模様。調べてみると他の方も同様の問題にあたったようでいろいろとネット上には情報がありました。で、整理してみて、以下の対応で起動できるようになりました。

[広告]

まず、起動させるときのユーザ(ここでは「usr1」とします、各自の環境にあわせてください)のid情報を確認します。


$ id usr1
uid=1000(usr1) gid=1000(usr1) groups=1000(usr1),4(adm),・・・,126(sambashare)

次に、Wiresharkをインストールした際に「wireshark」のグループがOSに作成されていますので、それを確認します。

$ grep usr1 /etc/group
adm:x:4:syslog,usr1
usr1:x:1000:
 :
sambashare:x:126:usr1
wireshark:x:128:usr1 ← ココです。

Wiresharkを起動する権限がないため、usr1を「wireshark」のグループに追加します。

$ sudo usermod -aG wireshark usr1

このとき、usermodのオプションは「a」と「G」の両方が必要みたいです。はじめ「a」だけの指定で usermod を実行したらエラーとなってしまいました。ちなみに、usermod の使い方のメッセージは次のようになっていました。

  • -G, –groups GROUPS 新たな補助グループのリストを与える。
  • -a, –append ユーザを (-G で指定された) 補助グループ群GROUPS に追加する。他のグループからの削除は行わない。

再度、id情報を確認します。


$ id usr1
uid=1000(usr1) gid=1000(usr1) groups=1000(usr1),4(adm),・・・,126(sambashare),128(wireshark)

末尾に「128(wireshark)」のグループが追加されていることが確認できます。これで「wireshark」のグループに追加されました。改めてWiresharkを起動すると、今まで表示されていなかったインターフェースが表示され、上部のラベルから「キャプチャ」→「開始」でキャッチャできるようになりました。

netstatで外部との不正な通信を見極める(Linux)。

Linuxでもnetstatコマンドが使えます。windowsとオプションの指定が異なるので、その差異を書いてみます。前回の「netstatで外部との不正な通信を見極める(windows)。」と同等のコマンドとするには、以下のようにします。rootユーザで行ってください。

# netstat -npt

  • -n:名前のレゾルブをしない(windowsの「-n」オプションと同等)。
  • -p:ソケットのPID/プログラム名を表示する(windowsの「-b」オプションと同等)。root権限が必要。
  • -t:tcpプロトコルの表示。udpの場合は「u」指定(windowsの「-p」オプションと同等)。

また、Linuxでも待受状態(リッスンポート)も表示したい場合は「-a」オプションを追加することで表示可能です。

実行した結果は以下です。

このPC(OSにubuntuを使用)ではApacheを立ち上げていたため、PC内でHTTP通信(ポート80への通信)が行われていたようです。ここで内部と判断しているのはIPアドレスが「127.0.0.1」となっているためです。「127.0.0.1」はループバックアドレスで自身のIPアドレスを示します。

前回のwindowsでnetstatを試したときに「-n」オプションをつけている理由を書いていなかったのですが、「-n」オプションをつけることによって(つまり、IPアドレスを見ることによって)、通信先が内部のアドレスか外部のアドレスか自分自身かを見極めることができます。家庭で使用しているPCだと家でネットワークを組んでいることはあまりないかと思うのでほぼほぼ外部との通信になるかと思いますが、会社では社内ネットワークと社外とのやり取りが発生するので内部での通信か外部との通信かを見極めるのは大切です。社内ネットワークでの通信なら問題ないですが、知らないうちにPCが外部と通信しているようであれば、情報漏えいの可能性が出てしまうからです。

では、IPアドレスでどのように内部向け/外部向けを判断するかというと、IPアドレスにはインターネットで使用するグローバルアドレスとインターネットでは使用しない(家庭や会社内で使用する)プライベートアドレスが決まっているため、それで判断します。見分け方はプラベートアドレスかどうかです。プラベートアドレスでないものはグローバルアドレスになります。

■プライベートアドレスの範囲

  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255

会社内で使用するPCのIPアドレスは上記の範囲に入っているはずです。社内で使うPCがプライベートアドレスを持つ機器と通信している場合は問題ないですが、グローバルアドレスをもつサーバーと通信している場合は確認してみたほうがいいかもしれません。

で、先程の結果は自身のApacheとの通信だったので、ubuntuのFirefoxでGoogleの検索ページを開いたときにnetstatコマンドを打ちました。その結果が以下です(上がGoogleの検索ページを開いた直後、下がしばらく立ってから)。



状態が「ESTABLISHED」から「TIME_WAIT」にかわっています。検索ページを開いた直後にGoogleのサーバーと通信を確立(ESTABLISHED)し、必要なコンテンツを取得後に終了待ち(TIME_WAIT)の状態になっています。TCPではこのように通信の状態を持っています。netstatコマンドを打ったときに何らかのプロセスが外部との通信で「ESTABLISHED」の状態を長く続けているようであれば、疑ったほうが良いかと思います。

今までクライアントとなるPCの話でしたが、インターネットに公開しているサーバーでもnetstatコマンドは使えます。インターネット上でWEBサーバーを稼働させている場合はクライアントとの通信で「ESTABLISHED」の状態がいくつかできるのですが、たまに「SYN_RECV」という中途半端な状態にさせられるときがあります(「SYN_RECV」は「ESTABLISHED」になる前の状態)。これはTCPで通信を始める際に3ウェイハンドシェイクという3回のやりとりをサーバーとクライアントで行うのですが、クライアントが途中でやりとりを中断してしまうことで起きます。そうするとサーバーはずっとクライアントからの返事を待ち続けサーバーのリソースを使い続けます。クライアントはこの状態をいくつも作らせサーバー側のリソースを枯渇させます。SYN flood攻撃 と呼ばれるものです。WEBサーバーで「SYN_RECV」を見つけたら、攻撃されていることを考えたほうがいいかもしれません。