この間、何気なしに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を停止させるコマンドを実行します。
$ 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とかで必要になるかもしれませんけど、その時はその時です。
追記2:
久しぶりにportscanしてみました。以下のportが開いてました。必要ないアプリの場合は、disableしたほうがいいかもしれませんね。
Open TCP Port: xxx, keybase
Open TCP Port: xxx, kbfs
Open TCP Port: xxx, Dropbox
Open TCP Port: xxx, Dropbox
$ sudo lsof -i tcp:xxx
kbfs
はKeybaseが使っているPortです。
追記
現在は、ポートを全部閉じることに成功して、結果は何も表示されないというOKの状態になりました。