블로그로 돌아가기

macOS에서 의심스러운 프로세스를 탐지하는 법

코드 서명 검증, Gatekeeper 점검, 프로세스 검사 기법을 사용해 Mac에서 악성코드와 의심스러운 프로세스를 식별하는 방법을 배워보세요.

Mac은 언제나 수백 개의 프로세스를 실행합니다. 대부분은 정상적인 시스템 서비스와 직접 설치한 앱입니다. 하지만 서명되지 않았거나, 비정상적인 경로에서 실행되거나, 조용히 네트워크 연결을 여는 단 하나의 악성 프로세스가 컴퓨터 전체를 위협할 수 있습니다. 건강한 시스템 데몬과 의심스러운 침입자를 구별하는 법을 아는 것은 macOS 사용자가 익힐 수 있는 가장 실용적인 보안 기술 중 하나입니다.

빠른 답변

macOS에서 의심스러운 프로세스를 탐지하려면, codesign -dvvv로 누락되거나 유효하지 않은 코드 서명을 점검하고, spctl --assess로 Gatekeeper 승인을 확인하며, 각 프로세스의 실행 경로, 부모 프로세스, 네트워크 활동, entitlements를 검사하세요. Apple이나 개발자 서명 없이 /tmp, /var/folders, 또는 사용자가 쓰기 가능한 위치에서 실행되는 프로세스는 즉시 조사할 가치가 있습니다.

위험 신호: 의심스러운 프로세스의 징후

낯선 프로세스가 모두 악성코드는 아니지만, 특정 패턴은 경계 수준을 높여야 합니다:

단계별: 의심스러운 프로세스 조사하기

프로세스 목록에서 낯선 것을 발견하면, 이 점검 항목들을 체계적으로 진행하세요.

1. 코드 서명 검증하기

가장 중요한 단일 점검입니다. 바이너리에 대해 codesign을 실행하세요:

codesign -dvvv /path/to/suspicious-binary

Authority 체인을 살펴보세요. 건강한 앱은 다음과 같은 내용을 보여줍니다:

Authority=Developer ID Application: Company Name (TEAMID)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

code object is not signed at all이 보이거나 권한 체인이 없다면, 그 바이너리는 식별된 개발자가 서명한 적이 없는 것입니다.

2. Gatekeeper 및 공증 상태 점검하기

Apple의 Gatekeeper는 소프트웨어가 공증되었는지, 즉 자동화된 악성코드 검사를 위해 Apple에 제출되었는지 검증합니다:

spctl --assess --verbose /path/to/suspicious-binary

공증된 앱은 accepted, source=Notarized Developer ID를 반환합니다. 그 외의 결과는 해당 바이너리가 Apple의 공증 요구를 우회했거나 그 이전에 만들어졌음을 의미합니다.

3. 실행 경로와 인수 검사하기

프로세스 바이너리가 실제로 어디에 있는지 찾아보세요:

ps -eo pid,comm,args | grep <process-name>

정상적인 시스템 프로세스는 /usr/libexec, /System/Library, 또는 /Applications에서 실행됩니다. com.apple.something이라는 이름의 프로세스가 /Users/you/Library/LaunchAgents/에서 실행되고 바이너리가 /tmp에 있다면, 시스템 서비스를 흉내 내고 있는 것입니다.

4. 지속성 메커니즘 점검하기

악성코드는 보통 재부팅에서 살아남기 위해 LaunchAgent나 LaunchDaemon을 설치합니다:

# User-level persistence
ls ~/Library/LaunchAgents/

# System-level persistence
ls /Library/LaunchDaemons/
ls /Library/LaunchAgents/

낯선 .plist 파일을 열고 ProgramArguments 키를 확인해 어떤 바이너리를 실행하는지 보세요.

5. 네트워크 연결 살펴보기

프로세스가 무엇과 통신하는지 확인하세요:

lsof -i -n -P | grep <PID>

낯선 IP로의 연결, 특히 C2(명령 제어) 서버가 흔히 사용하는 4444, 8080 같은 포트나 그 외의 비표준 포트로의 연결을 살펴보세요.

6. entitlements 검토하기

entitlements는 프로세스가 어떤 시스템 리소스에 접근할 수 있는지 정의합니다:

codesign -d --entitlements - /path/to/binary

정상적인 PDF 뷰어라면 com.apple.security.device.cameracom.apple.security.network.server가 필요하지 않아야 합니다.

의심스러워 보이는 흔한 정상 프로세스

당황하기 전에 이 목록을 확인하세요. 다음 Apple 시스템 프로세스들은 사용자를 자주 혼란스럽게 합니다:

프로세스실제로 하는 일
kernel_taskmacOS 커널; 높은 CPU는 악성코드가 아니라 발열 조절을 의미하는 경우가 많음
mds / mds_storesSpotlight 인덱싱 엔진; 앱 설치나 파일 복사 후 급증함
WindowServer전체 GUI의 컴포지터; 높은 CPU는 보통 디스플레이 배율 문제를 의미함
nsurlsessiondApp Store 업데이트와 iCloud 동기화를 위한 백그라운드 다운로드
trustd인증서 및 신뢰 평가 데몬
syspolicydGatekeeper 정책 시행
clouddiCloud Drive 동기화 데몬
birdiCloud 문서 동기화 도우미
mediaanalysisd얼굴/객체 인식을 위한 사진 앱의 ML 처리
suggestdSiri 제안 및 Spotlight 지식 인덱싱

이들 중 하나가 유효한 Apple 서명을 가지고 /usr/libexec/System/Library에서 실행된다면, 거의 확실히 정상입니다.

프로세스 보안 감사를 위한 도구

Activity Monitor

활성 상태 보기(Activity Monitor)는 CPU, 메모리, 기본적인 프로세스 정보를 보여주지만, 코드 서명, entitlements, 부모-자식 프로세스 트리, 실행 경로를 유용한 방식으로 표시하지 못합니다. 보안 작업에서는 기껏해야 출발점에 불과합니다.

Terminal: codesign과 spctl

명령줄 도구 codesignspctl은 서명 및 공증 검증의 가장 확실한 근거입니다. 필수적이지만 수십 개의 프로세스를 감사해야 할 때는 번거롭습니다. 각각 바이너리 경로를 수동으로 찾아야 하기 때문입니다.

ProcXray

ProcXray는 코드 서명 검증과 entitlements 검사를 프로세스 모니터링 UI 안으로 직접 가져옵니다. 실행 중인 모든 프로세스에 대해 다음을 볼 수 있습니다:

각 바이너리에 대해 수동으로 codesign -dvvv를 실행하는 대신, ProcXray는 모든 프로세스의 보안 컨텍스트를 실시간으로 보여줍니다. 서명되지 않았거나 예상치 못한 위치에서 실행되는 것을 발견하면, Terminal로 전환하지 않고도 그 계보와 네트워크 컨텍스트를 조사할 수 있습니다.

자주 묻는 질문

프로세스가 악성코드인지 정상적인 시스템 서비스인지 어떻게 구별하나요?

세 가지를 확인하세요: (1) 코드 서명 — codesign -dvvv를 실행해 Apple 또는 식별된 개발자 권한 체인을 찾으세요, (2) 실행 경로 — 정상 서비스는 /tmp나 숨김 디렉터리가 아니라 /System이나 /usr/libexec에서 실행됩니다, (3) 지속성 — ~/Library/LaunchAgents/Library/LaunchDaemons에 바이너리를 가리키는 낯선 plist 파일이 있는지 확인하세요.

악성코드가 Activity Monitor에 숨을 수 있나요?

네. 루트킷은 시스템 호출을 후킹해 사용자 공간 도구로부터 프로세스를 숨길 수 있습니다. macOS 시스템 무결성 보호(SIP)는 이를 훨씬 어렵게 만듭니다. SIP가 활성화되어 있으면(csrutil status) 최신 macOS에서 커널 수준의 은닉이 차단됩니다. 다만 악성코드는 여전히 정상처럼 들리는 이름을 사용하거나 서명된 프로세스에 주입하는 방식으로 위장할 수 있습니다.

Gatekeeper가 모든 악성코드를 막아주나요?

아니요. Gatekeeper와 공증은 강력한 1차 방어선을 제공합니다. 기본적으로 서명되지 않고 공증되지 않은 소프트웨어의 실행을 차단합니다. 하지만 사용자가 Gatekeeper를 명시적으로 우회하거나(우클릭 > 열기), 악성코드가 이미 실행 중인 프로세스를 통해 전달되면(예: 브라우저 익스플로잇) Gatekeeper는 우회됩니다. 심층 방어 — 서명 점검, 프로세스 동작 모니터링, 지속성 메커니즘 감사 — 는 여전히 필수적입니다.

출처 및 참고 자료

ProcXray 다운로드 → — 코드 서명 검증 내장, macOS Sonoma+.