趣旨
自分のMacが誰かに攻撃されていないか確認できないことにはセキュリティの向上など見込めないなと考えたのでGPT先生にそのためのコマンドを教えてもらいました。
そもそもどれが悪意のあるものかを識別する能力は必要ぽいですが、ハッキングを受けてるかどうかも全く確認できない状況よりかはマシかと思います。
1. ユーザーアカウントの確認
システムに存在するユーザーアカウントのリストを取得します。
dscl . list /Users
このコマンドを実行することで、システム上に存在するすべてのユーザーアカウントを一覧表示できます。これにより、不審なユーザーアカウントがないか確認できます。特に、知らないユーザーアカウントが存在する場合、そのアカウントが不正に作成されたものである可能性があります。
2. プロセスの確認
現在実行中の全プロセスを表示します。
ps aux
このコマンドを実行することで、現在システム上で実行中のすべてのプロセスを詳細に一覧表示できます。これにより、CPUやメモリの使用状況、各プロセスの実行ユーザー、実行中のコマンドなどを確認できます。不審なプロセスが実行されていないかチェックし、不要なプロセスや不正なプロセスがあれば、それを特定して対処することができます。
チェックすべき項目
- 未知のプロセス名: 知らないプロセス名が存在するかどうかを確認する
- 異常なリソース使用量: 異常に高いCPU使用率やメモリ使用率を持つプロセスがないか確認する
- 実行ユーザー: 不正なユーザーが実行しているプロセスがないか確認する
- プロセスの場所: 通常のディレクトリ(例: /Applications, /System/Library)以外から実行されているプロセスをチェックする
3. chrootkitでスキャン
システムにインストールされているRootkitを検出するためのツールです。Rootkitは、不正なアクセスや活動を隠蔽するために設計されたソフトウェアです。通常、攻撃者がシステムに侵入した後、その存在を隠すためにインストールされます。
Recovery Modeでの準備
-
chkrootkit のインストール:
brew install chkrootkit
-
System Integrity Protection (SIP) の状態確認:
csrutil status
-
SIPの無効化:
csrutil disable
-
Macを再起動し、Command (⌘) + R キーを押してRecovery Modeで起動します。
-
Rootkitのチェック:
sudo chkrootkit
-
再度Recovery Modeで起動し、SIPを有効化:
csrutil enable
-
Macを再起動します
4. SIPの確認
System Integrity Protectionの状態を確認します。
sudo /usr/sbin/system_profiler SPSoftwareDataType | grep "System Integrity Protection"
以下の結果になると思います。
System Integrity Protection: Enabled
5. ログインアイテムの確認
現在のログインアイテムを取得します。Macを起動してログインしたらそれと同時に実行されるアプリのリストが得られます。
osascript -e 'tell application "System Events" to get the name of every login item'
このコマンドを実行することで、ログイン時に自動的に起動するアプリケーションのリストを取得できます。不審なアプリが含まれていないかを確認します。
6. エラーログの確認
過去24時間のエラーログを表示します。とても長いリストになるのでCtl+Cでカットしてもいいと思います。
log show --predicate 'eventMessage contains "error"' --info --last 24h
このコマンドを実行することで、過去24時間のエラーログを確認できます。システムエラーや不審な活動が記録されていないかをチェックします。
7. ネットワーク接続の確認
特定のポートでリッスンしているプロセスや、確立されたTCP接続を確認します。
ポート443でリッスンしているプロセスの確認
ポート443は、HTTPS通信に使用される標準ポート。HTTPS(HyperText Transfer Protocol Secure)は、HTTP通信にTLS(Transport Layer Security)またはSSL(Secure Sockets Layer)を使用して暗号化を追加したプロトコルで、ウェブブラウジングやデータ転送の際にセキュアな通信を提供する
lsof -i :443
僕はMacを使ってラズパイによくSSH接続してるのでポート22も確率されたTCP接続が表示されました。HTTPはポート80ですが、最近のブラウザではHTTPを採用しているサイトへのアクセスは警告を受けるので443だけで良いと思います。
確立されたTCP接続の確認
確立されたTCP接続は、現在アクティブなネットワーク接続を示し、データの送受信が行われていることを意味します。これを確認することで、不正な接続や予期しないネットワークアクティビティを発見できます。
以下のコマンドを使用して、現在確立されているTCP接続を一覧表示します。
sudo lsof -iTCP -sTCP:ESTABLISHED
コマンド解説
- sudo: スーパーユーザー権限でコマンドを実行する
- lsof: "list open files" の略で、現在開かれているファイルやネットワーク接続を表示するコマンド
- -iTCP: TCPプロトコルに関連する接続をフィルタリングする
- -sTCP:ESTABLISHED: TCP接続の中でも確立された(ESTABLISHED)状態のものだけを表示する
ネットワーク統計の表示
ネットワーク統計を表示することで、システム全体のネットワーク接続の状態を確認できます。これには、リッスン中のポートや確立された接続、待機中の接続などが含まれます。
以下のコマンドを使用して、ネットワーク統計を表示します。
netstat -an
netstat -an | grep ESTABLISHED
コマンド解説
- netstat: ネットワーク統計情報を表示するコマンド
- -a: すべてのソケット(リッスン中のものも含む)を表示する
- -n: アドレスとポートを数値で表示します。名前解決を行わないため、結果が速く表示される
- grep ESTABLISHED: netstat -an の出力から、確立された接続(ESTABLISHED)のみをフィルタリングして表示する
もし怪しい通信があればtcpdump や wireshark などのネットワークパケットキャプチャツールを使用して、通信内容を監視し、何が送受信されているかを確認します。必要であれば、ファイアウォールを設定して不要な外部接続を制限します。
8. 起動時の項目の確認
システム全体の起動項目
/Library/StartupItems ディレクトリには、システム全体で共通の起動項目が格納されています。これらの項目は、システムの起動時に自動的に実行されるスクリプトやプログラムです。通常、ここにはシステム管理者が設定した起動項目が含まれます。
ls -la /Library/StartupItems
ユーザーの起動エージェント
~/Library/LaunchAgents ディレクトリには、ユーザー固有の起動エージェントが格納されています。これらのエージェントは、ユーザーがログインしたときに自動的に実行されるスクリプトやプログラムです。通常、ユーザーアプリケーションによって設定されます。
ls -la ~/Library/LaunchAgents
システム全体の起動エージェント
/Library/LaunchAgents ディレクトリには、システム全体で使用される起動エージェントが格納されています。これらのエージェントは、任意のユーザーがログインしたときに自動的に実行されるスクリプトやプログラムです。一般的には、システム管理者やシステムアプリケーションによって設定されます。
ls -la /Library/LaunchAgents
システム全体の起動デーモン
/Library/LaunchDaemons ディレクトリには、システム全体で使用される起動デーモンが格納されています。これらのデーモンは、システムの起動時に自動的に実行されるバックグラウンドサービスやプロセスです。通常、システム管理者やシステムサービスによって設定されます。
ls -la /Library/LaunchDaemons
セキュリティ関連設定の確認
さらにセキュリティチェックを強化するためのコマンドをいくつか追加します。
ファイアウォールの状態確認
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode
無効だった場合は以下のコマンドで有効化できます。
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
macOSのビルトインファイアウォールを有効にすることで、不正なアクセスをブロックし、システムを保護します。
ステルスモードを有効にすると、システムはping要求などのネットワークプローブに応答しなくなります。これにより、システムがネットワーク上で検出されにくくなります。
不正なSUIDファイルのチェック
SUID (Set User ID) は、特定の条件下でプログラムが実行される際に、その所有者の権限で実行されることを可能にするファイル属性です。攻撃者はこの機能を利用して権限昇格攻撃を試みることがあるため、不正なSUIDファイルがないか定期的にチェックすることが重要です。
find / -perm -4000
コマンド解説
- find /: ルートディレクトリから始めて、全ファイルシステムを検索する
- -perm -4000: SUIDビットがセットされているすべてのファイルを検索する
このコマンドを実行することで、SUIDビットが設定されているすべてのファイルのリストが表示されます。不審なファイルがないかを確認し、必要に応じて適切な対処を行います。
システムログの確認
システムログは、システムイベントやエラーメッセージなどの情報を記録するファイルです。最近のシステムログを確認することで、異常な活動やエラーメッセージを検出することができます。
tail -n 50 /var/log/system.log
コマンド解説
- tail: ファイルの末尾を表示するコマンド
- -n 50: 最後の50行を表示する
- /var/log/system.log: システムログファイルのパス
セキュリティパッチの状態確認
システムのセキュリティを維持するために、最新のセキュリティパッチが適用されているかを確認します。
softwareupdate --history
Gatekeeperの設定確認
Gatekeeperは、未承認のアプリケーションの実行を防ぐmacOSのセキュリティ機能です。
spctl --status
XProtectの状態確認
XProtectは、macOSに組み込まれたマルウェア対策機能です。
defaults read /System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.meta.plist
システム設定の変更履歴の確認
システム設定の変更履歴を確認することで、設定の不正な変更がないかをチェックします。
ls -la /var/db/receipts
最近のログインの確認
最近のログイン履歴を確認することで、不審なログインがないかをチェックします。
last
システム情報の詳細確認
システムの詳細情報を確認することで、ハードウェアやソフトウェアの変更がないかをチェックします。
system_profiler SPHardwareDataType SPSoftwareDataType
ネットワーク設定の確認
現在のネットワーク設定を確認し、不審なネットワーク設定がないかをチェックします。
networksetup -listallhardwareports
cronジョブとatジョブの確認
不審なcronジョブやatジョブが設定されていないかを確認します。
crontab -l
sudo crontab -l
atq
まとめ
上記のコマンドを実行することで、Macのセキュリティ状態を包括的に確認できます。定期的にこれらのチェックを行い、システムの健全性を維持しましょう。