macでnmapを試してみよう

この前、nmapでport scanする機会があったので、その時の話。

portというのは、ネットワークの通信番号のことで、通常はこの番号を指定して通信のやり取りが行われる。firewallは、どの番号を閉じ、どの番号を開けるのか指定できたりする。

で、nmapでscanすると、どのportが開いてるのかを調べられたりするんですけど、不要なportは閉じておいたほうがいいし、backdoorなどが設置されてる場合、管理者に覚えがないportが勝手に開けられてたりすることがある。

この前、macをnmapしてみると、こんな感じだった。

$ 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

$ sudo nmap -sU localhost

portを使ってるアプリを調べてみると、macの起動時に動作するプロセスのことが色々把握できた。

具体的には、macは/System/Library/{LaunchDaemons,LaunchAgents}で起動プロセスが設定されてるらしい。ちなみに、管理者とユーザーでは異なるprocが起動するので、両方チェックする必要がある。

使わないアプリが勝手に起動し、特定のportを開けている現状は望ましくない。この辺は商用OS?なので、archlinuxなどとは違い、面倒くささがあるなと思った。自分でそういったprocをkillしていかないといけないわけですね。

procについて調べるには以下のようなコマンドでやる。

$ lsof -i tcp:49163
rapportd 402 syui    3u  xxxx      TCP *:49158 (LISTEN)
# proc 402をkill
$ lsof -p 402

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

$ launchctl list | grep 402
$ launchctl stop com.apple.rapportd

macは、こんな感じのコマンドでprocをdisable, stopできる。

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

.
.
.
$ launchctl unload -w /System/Library/LaunchDaemons/com.apple.jetsamproperties.Mac.plist
$ launchctl unload -w /System/Library/LaunchAgents/com.apple.sharingd.plist
$ launchctl unload -w /System/Library/LaunchDaemons/com.apple.netbiosd.plist
# これunloadすると名前解決できなくなるので注意
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

$ open -a Network\ Utility.appを実行して、portscanしてみたけど、こちらのほうがnampより正確。

ここでBetterTouがportを開けてたので、macのfirewallでブロックした上で、appを削除した。しかし、ショートカットキーが困ったので、karabinerに一本化することにした。

~/.config/karabiner/karabiner.json

"rules": [
                    {
                        "description": "Command+1でFinderを開く",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "1",
                                    "modifiers": {
                                        "mandatory": [
                                            "command"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "shell_command": "open -a 'finder'"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Command+Shift+zでiTermを開く",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "z",
                                    "modifiers": {
                                        "mandatory": [
                                            "command",
                                            "shift"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "shell_command": "open -a 'iTerm'"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "ESCキーを押したら強制的にIMEをオフにする",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "j",
                                    "modifiers": {
                                        "mandatory": [
                                            "control"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "escape"
                                    },
                                    {
                                        "key_code": "japanese_eisuu"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Escを押したら強制的にIMEをオフにする",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "escape"
                                },
                                "to": [
                                    {
                                        "key_code": "escape"
                                    },
                                    {
                                        "key_code": "japanese_eisuu"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Command+Alt+GでChromeを開く",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "g",
                                    "modifiers": {
                                        "mandatory": [
                                            "command",
                                            "control"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "shell_command": "open -a 'Google Chrome'"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Command+Alt+KでKeepassXを開く",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "k",
                                    "modifiers": {
                                        "mandatory": [
                                            "command",
                                            "control"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "shell_command": "open -a 'KeePassX'"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    }
                ]
            }

こんな感じで色々書いてく。