Security
mac,
nmap,

macで不審なポートが開いていた件(rapportd)

この間、何気なしにnmapでmacのlocalhostを検索してみると、ひどい結果が待ち受けていました。

$ nmap localhost
PORT      STATE SERVICE
111/tcp   open  rpcbind
631/tcp   open  ipp
1021/tcp  open  exp1
1023/tcp  open  netvenuechat
2049/tcp  open  nfs
49163/tcp open  unknown

正直、開けたことがあるような、ないようなポートがいっぱいです。特に、最後の49163なんてポートは絶対に自分では開けた覚えがありません。

とすると、バックドアでも仕掛けられていたのだろうかと心配になり、色々と調べてみることになりました。

結果的には、1021, 1023あたりのポートはnfsdでした。特定のリポジトリを共有してたことがあったような、なかったような...。

とりあえずディレクトリ自体は既に削除していたので、無効にすることにします。

$ sudo nfsd checkexports
$ sudo vim /etc/exports
$ sudo nfsd stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.nfsd.plist

その他、色々とやりまして、大方のポートは閉じられたのですが、残ったのはやはり、49163でした。(なお、このポートを利用するアプリは再起動と同時に開けるポートを変動させるようです)

$ nmap localhost
49163/tcp open  unknown

# root権限で開いてるポートは別です。ユーザーとは別に閉じなければいけません。
$ sudo nmap localhost
49163/tcp open  unknown

詳しく調べてみると、そのポートはアップルが署名した特定のコマンドから実行されているようでした。

$ sudo lsof -i tcp:49163
rapportd 402 syui    3u  xxxx      TCP *:49158 (LISTEN)

$ codesign -dv --verbose=4 /usr/libexec/rapportd
$ otool -L /usr/libexec/rapportd

# 一応、当該proccesをkillしておくことに
$ lsof -p 402
$ kill -KILL 402
or 
$ launchctl list | grep 402
$ launchctl stop com.apple.rapportd

次に、自動起動されているrapportdを停止させるコマンドを実行します。

rootで実行されているrapportdを停止
$ cd /System/Library/LaunchDaemons
$ grep -R rapportd .
    Binary file ./com.apple.jetsamproperties.Mac.plist matches
    Binary file ./com.apple.rapportd.plist matches

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.jetsamproperties.Mac.plist

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.rapportd.plist
    error:Operation not permitted while System Integrity Protection is engaged

ここで、問題が発生します。どうやらmacは/System/以下の変更を一部で制限しているみたいで、リカバリモードから特定のコマンドを実行して制限を解除しなければならないようです。これは、セキュリティの設定なので、変更した後は戻してほうが良いかもしれません。コンピュータウィルスに重要なディレクトリを変更されやすくなってしまう危険があるためです。

このセキュリティ制限解除の手順は以下の通り。

1. Command+Rを押しながらMACを再起動でリカバリーモード起動
2. トップメニューから「ユーティリティー>ターミナル」と選んでターミナルを起動
3. csrutil disableというコマンドを実行

さて、これで、 

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.rapportd.plist

が通るようになります。

$ sudo nmap localhost
...

確かめてみるとrapportdが開けていたポートが閉じられているようです。

ただし、まだユーザー権限で実行されているものがあるみたいなので、そちらのplistもunloadします。/System/Library/LaunchAgents/com.apple.rapportd-user.plistにあります。

$ nmap localhost
49163/tcp open  unknown

$ launchctl unload -w /System/Library/LaunchAgents/com.apple.rapportd-user.plist
$ launchctl stop com.apple.rapportd

$ nmap localhost
...

# root,userともに開いてるポートは無くなりました。よかった。

ちなみに、詳細に調べる時はopen -a Network\ Utility.appを実行して、portscanしましょう。

追記:

BetterTouがポートを開けてたので、macのfirewallでブロックしときました。多分、updateとかで必要になるかもしれませんけど、その時はその時です。