
엄선된 macOS 보안 및 개인정보 보호 가이드로, 위협 모델링, 디스크 암호화, 방화벽 구성, 안전한 인증, 네트워크 강화에 대한 실용적인 지침을 제공합니다.
이 가이드는 Apple silicon Mac에서 macOS의 보안과 개인정보 보호를 개선하기 위한 기법 모음입니다. 조직에서 흔히 사용하는 보안 관행을 원하는 경험 많은 사용자를 대상으로 하지만, 개인정보 보호와 보안에 관심이 있는 초보 사용자에게도 적합합니다.
조직에서 관리하는 Mac에 대해서는 미국 국립표준기술연구소가 유지관리하는 macOS Security Compliance Project를 참조하십시오.
이 가이드는 "있는 그대로" 제공되며 어떠한 보증도 없습니다. 이 가이드를 따름으로 인한 모든 결과에 대한 책임은 전적으로 사용자에게 있습니다.
일반적인 보안 모범 사례를 적용하십시오:
위협 모델 만들기
시스템과 소프트웨어를 최신 상태로 유지하십시오
softwareupdate 명령줄 유틸리티로 설치합니다. 둘 다 Apple 계정이 필요하지 않습니다.민감한 데이터 암호화
데이터 가용성 보장
신중하게 클릭하십시오
보안과 개인정보 보호를 의미 있게 개선하는 가장 중요한 단계는 위협 모델을 만드는 것입니다. 위협 모델은 보호하려는 대상, 그것에 접근하려 할 수 있는 사람, 그들이 어떻게 접근할 수 있는지, 그리고 어떤 통제가 사용성과의 절충을 감수할 가치가 있는지에 대한 일반적인 설명입니다. 이를 통해 잠재적 공격자와 그들의 동기를 이해하게 되며, 더 강력한 방어로 이어집니다.
자산에는 휴대폰, 노트북, 자격 증명, 그리고 검색 기록과 같은 개인 정보가 포함될 수 있습니다.
보호할 가치가 가장 높은 것부터 중요도 순으로 나열하십시오.
방어 대상을 정의하십시오. 각 공격자가 중요한 자산을 공격하게 될 동기를 정의하는 것부터 시작하십시오. 예를 들어 금전적 이득은 많은 공격자에게 큰 동기가 됩니다.
각 공격자에 대해 그들이 할 수 있는 일과 할 수 없는 일을 나열하고, 가장 낮은 역량부터 가장 높은 역량 순으로 순위를 매기십시오. 예를 들어, 기회를 노리는 일반적인 도둑은 화면 잠금과 강력한 암호가 있는 암호화된 저장소 같은 기본 통제로 충분히 막을 수 있을 것입니다. 더 정교하고 단호한 공격자는 사용하지 않을 때 메모리에서 자격 증명을 지우기 위해 장치를 완전히 전원 끄는 것과 더 강력한 인증 메커니즘이 필요할 수 있습니다.
각 위협에 가장 적합한 완화 조치를 선택하십시오. 예를 들어, 룸메이트가 암호를 발견할 수 있다면 종이에 적어 두지 말고, 장치가 도난당할 경우 데이터를 보호하기 위해 저장소를 암호화하십시오.
보안은 사용성과 균형을 이루어야 합니다. 모든 완화 조치는 어떤 불편함을 정당화할 수 있도록 특정 공격자의 역량을 상쇄해야 합니다. 남은 위험이 상황에 대해 수용 가능한 수준이 되면 방어를 추가하는 것을 중단하십시오. 장치, 데이터, 여행, 업무 또는 공격자가 바뀌면 모델을 다시 검토하십시오.
다음 표는 간단한 위협 모델의 예시입니다.
위협 모델링에 대해 자세히 알아보십시오.
Apple silicon 하드웨어는 Secure Enclave 기반 키 보호와 더 강력한 부팅 보안 옵션을 포함한 하드웨어 기반 보안 기능을 제공합니다. 이들은 일반적으로 이 가이드에서 논의되는 보호 조치에 선호되는 플랫폼입니다.
일부 Intel 기반 Mac, 특히 취약한 T2 시대 하드웨어가 탑재된 모델은 macOS 업데이트로 완전히 해결할 수 없는 하드웨어 취약점의 영향을 받습니다.
Apple은 레거시 버전의 모든 취약점을 패치하지 않으므로, macOS를 실행하는 비 Apple 하드웨어와 최신 macOS 릴리스를 지원하지 않는 시스템은 피하십시오.
Apple 액세서리는 일반적으로 macOS를 통해 펌웨어 업데이트를 받으며 최신 Bluetooth 보안 기능을 지원합니다. 예를 들어, Bluetooth Low Energy(BLE) 개인 정보 보호는 회전하는 장치 주소를 사용하여 추적을 줄이지만, 타사 액세서리는 이 기능을 지원하지 않을 수 있습니다.
macOS를 설치하는 방법은 여러 가지가 있습니다.
지원되는 최신 버전의 macOS를 설치하십시오. 최신 버전의 macOS에는 이전 릴리스에서 제공되지 않는 보안 수정 사항과 기타 개선 사항이 포함되어 있습니다.
설치 중에 Apple silicon Mac은 Apple 활성화 서비스에 연결하여 장치가 분실 또는 도난 상태로 신고되지 않았는지 확인합니다. 이 프로세스가 작동하는 방식에 대해 알아보십시오.
Apple 계정은 기본적인 macOS 사용에는 선택 사항이지만 App Store와 많은 Apple 서비스에는 필요합니다. 기능을 활성화하기 전에 데이터 개인정보 보호 설정을 검토하십시오.
iCloud에 대해 종단 간 암호화를 활성화하고 Apple 계정 데이터를 검토하십시오.
App Store는 Apple이 응용 프로그램을 검토하는 소프트웨어 배포 플랫폼입니다.
App Store 응용 프로그램은 App Sandbox와 Hardened Runtime을 사용해야 합니다. (앱이 할 수 있는 작업을 제한하여 일부 공격을 더 어렵게 만드는 보안 기능입니다.) 또한 자동 소프트웨어 업데이트를 제공합니다.
App Store를 사용하려면 Apple 계정이 필요하며, 이는 개인정보 보호 위험이 될 수 있습니다.
가상화는 격리된 가상 머신에서 다른 운영 체제를 실행할 수 있게 해줍니다. Apple silicon에서 macOS는 다음 앱을 사용하여 지원되는 macOS 게스트와 ARM용 Windows 11을 실행할 수 있습니다.
[!WARNING] VMware는 다운로드 전에 Broadcom 계정과 약관 동의가 필요합니다. Parallels는 계정, 결제 정보 및 기타 데이터를 요구합니다 - 개인정보 보호 고지를 참조하십시오.
Apple Container는 macOS에서 Linux 컨테이너를 실행하기 위한 명령줄 도구입니다. 단일 Linux 가상 머신을 공유하는 컨테이너 런타임과 달리, Apple Container는 macOS 가상화 기능을 사용하여 각 컨테이너를 격리된 경량 가상 머신에서 실행합니다. 이는 워크로드와 호스트 운영 체제 사이에 더 강력한 격리 경계를 제공합니다.
macOS가 처음 시작되면 Setup Assistant에서 기본 계정 생성을 요구합니다.
길고 고유한 암호를 설정하십시오. 암호 힌트 필드는 비워 두십시오.
개인을 식별할 수 있는 이름은 피하십시오. 컴퓨터 이름(예: "John Appleseed의 MacBook")은 로컬 네트워크에 브로드캐스트되어 다른 장치에 표시됩니다.
시스템 이름은 시스템 설정 > 정보 또는 scutil 명령으로 구성할 수 있습니다.```bash
sudo scutil --set ComputerName MacBook
sudo scutil --set HostName MacBook
sudo scutil --set LocalHostName MacBook
# 관리자 및 사용자 계정
첫 번째로 생성되는 계정은 관리자 계정입니다. 관리자는 시스템 전체 설정을 변경하고 [sudo](https://en.wikipedia.org/wiki/Sudo)로 명령을 실행할 수 있으며, sudo는 일시적으로 상승된 권한을 부여합니다. 관리자가 실행하는 모든 프로그램도 동일한 접근 권한을 얻을 수 있습니다. sudo에도 [취약점](https://bogner.sh/2014/03/another-mac-os-x-sudo-password-bypass/)이 있을 수 있습니다.
일상적인 작업에는 전용 표준 계정을 사용하고, 관리자 계정은 소프트웨어 및 시스템 설치, 구성, 업데이트에만 사용하는 것이 [모범 사례](https://help.apple.com/machelp/mac/10.12/index.html#/mh11389)로 간주됩니다.
macOS 로그인 화면에서 관리자 계정으로 로그인할 필요는 없습니다. 터미널 명령에 관리자 권한이 필요한 경우 시스템이 인증을 요청하며, 터미널은 해당 권한을 계속 사용합니다. 이를 위해 Apple은 관리자 계정과 홈 디렉터리를 숨기는 [권장 사항](https://support.apple.com/102099)을 제공합니다.
## 주의 사항
- 관리자만 시스템 전체 `/Applications` 디렉터리에 응용 프로그램을 설치할 수 있습니다. Finder 및 Installer는 승인이 필요할 때 표준 사용자에게 관리자 자격 증명 입력을 요청합니다. 일부 응용 프로그램은 `~/Applications`에 설치할 수 있습니다. 관리자 액세스가 필요 없는 응용 프로그램은 사용자 디렉터리에 설치해야 합니다. App Store 응용 프로그램은 여전히 `/Applications`에 설치되며 추가 인증이 필요하지 않습니다.
- 표준 사용자는 일반적으로 `sudo`를 사용할 수 없습니다. 관리자 권한이 필요한 경우 macOS가 관리자 자격 증명을 요청하거나, 관리자 계정에서 해당 작업을 실행할 수 있습니다.
- 시스템 설정 및 여러 시스템 유틸리티(예: Wi-Fi 진단)는 전체 기능을 위해 관리자 권한이 필요합니다. 일부 시스템 설정은 자물쇠 아이콘을 선택하여 잠금을 해제해야 합니다. 일부 응용 프로그램은 열 때 인증을 요청하지만, 다른 응용 프로그램은 모든 기능에 접근하려면 관리자 계정으로 직접 열어야 합니다(예: 콘솔).
- 일부 타사 응용 프로그램은 현재 사용자가 관리자라고 가정하므로 표준 계정에서는 작동하지 않습니다.
- 추가 고려 사항은 [issue 167](https://github.com/drduh/macOS-Security-and-Privacy-Guide/issues/167)을 참조하십시오.
## 설정
계정은 시스템 설정에서 생성하고 관리할 수 있습니다. 기존 시스템에서는 일반적으로 두 번째 관리자 계정을 만든 다음 원래 계정을 관리자 계정에서 표준 계정으로 변경하는 것이 더 쉽습니다. 새로 설치한 시스템은 설정 후 표준 계정을 추가해야 합니다.
계정 강등은 시스템 설정에서 새 관리자 계정으로 수행할 수 있습니다.
macOS가 그룹 구성원 자격을 결정하는 방법에 대한 자세한 내용은 [이 게시물](https://superuser.com/a/395738)도 참조하십시오.
# 펌웨어
시스템 변조를 방지하려면 펌웨어 보안이 [전체 보안](https://support.apple.com/guide/mac-help/mchl768f7291/mac)으로 설정되어 있는지 확인하십시오. 이것이 기본 설정입니다.
# FileVault
Apple silicon Mac은 기본적으로 하드웨어 기반 저장 암호화를 사용합니다. [FileVault](https://support.apple.com/guide/mac-help/protect-data-on-your-mac-with-filevault-mh11785/mac)는 재시작 후 시작 볼륨을 잠금 해제하기 위해 인증된 사용자의 암호를 추가로 요구합니다.
Apple silicon에서 FileVault 인증은 [펌웨어](https://support.apple.com/102384)도 보호하므로 지정된 시작 디스크 외의 다른 것으로 부팅하거나, [복구](https://support.apple.com/guide/mac-help/macos-recovery-a-mac-apple-silicon-mchl82829c17/15.0/mac/15.0#mchl5abfbb29)에 접근하거나, DFU(장치 펌웨어 업데이트) 모드로 복구하는 것을 방지합니다.
FileVault는 복구 키 설정을 묻는 메시지를 표시하며, 설정한 경우 안전한 위치에 보관해야 합니다. FileVault는 iCloud를 복구에 사용하는 옵션도 제공합니다.
FileVault 상태 확인:```bash
fdesetup status
잠금 모드는 정교한 공격에서 흔히 악용되는 시스템 및 앱 기능을 비활성화하여 공격 표면을 크게 줄입니다.
잠금 모드가 활성화되면 Safari에는 신뢰할 수 있는 웹사이트를 제외하는 옵션이 있습니다.
macOS에는 여러 유형의 방화벽이 있습니다.
[!NOTE] 악성 코드가 관리자 제어권을 얻으면 방화벽 정책을 비활성화하거나 우회할 수 있습니다. 전체 시스템 손상에 대한 강력한 보호 수단으로 로컬 방화벽에 의존하지 마십시오.
기본 제공 방화벽은 기본적인 보호 기능을 제공하며 들어오는 연결만 차단합니다. 나가는 연결을 모니터링하거나 차단할 수 없습니다.
시스템 설정의 네트워크에서 방화벽 탭으로 제어하거나 다음 명령으로 제어할 수 있습니다:```bash sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
### 스텔스 모드
공격자는 공격 대상 시스템을 식별하기 위해 네트워크를 자주 스캔합니다. [스텔스 모드](https://support.apple.com/guide/mac-help/use-stealth-mode-to-keep-your-mac-more-secure-mh17133/mac)가 활성화되면 닫힌 포트에 대한 연결 시도에 응답하지 않으므로 시스템을 탐지하기가 더 어려워집니다.
스텔스 모드 활성화:```bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
기본적으로 방화벽은 Apple 또는 식별된 개발자가 서명한 소프트웨어에 대한 수신 연결을 허용합니다. 이러한 규칙을 비활성화하면 macOS는 애플리케이션이 수신 연결을 수락하기 전에 허용 여부를 묻습니다:```bash sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsigned off sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsignedapp off
### 방화벽 다시 로드
`socketfilterfw`로 설정을 변경한 후, 방화벽 서비스를 다시 로드하여 새 구성을 적용하세요:```bash
sudo pkill -HUP socketfilterfw
방화벽 상태를 확인합니다:```bash
for firewallFlag in
--getglobalstate
--getblockall
--getallowsigned
--getstealthmode
--listapps
do /usr/libexec/ApplicationFirewall/socketfilterfw "$firewallFlag"
done
또는 [system profiler](https://ss64.com/mac/system_profiler.html)를 사용하여:```bash
system_profiler SPFirewallDataType
애플리케이션 계층 방화벽을 활성화하고 기본 제공 소프트웨어에 대한 수신 연결을 비활성화하면 AirDrop이(가) 작동하지 않습니다. AirDrop이 작동하려면 sharingd 및 rapportd에 대한 방화벽 예외를 허용하세요:```bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/rapportd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/sharingd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/libexec/rapportd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/libexec/sharingd
## Third-party firewalls
[Little Snitch](https://www.obdev.at/products/littlesnitch/index.html), [Radio Silence](https://radiosilenceapp.com/), [LuLu](https://objective-see.com/products/lulu.html)와 같은 애플리케이션은 사용성과 보안 사이의 균형을 제공합니다.
이 프로그램들은 들어오고 나가는 연결을 모니터링하고 차단할 수 있습니다. 그러나 폐쇄형 소스 [시스템 확장 프로그램](https://support.apple.com/HT210999)이 필요할 수 있습니다.
잦은 허용 또는 차단 프롬프트가 부담스럽다면, 연결을 기록하면서 일시적으로 허용할 수 있습니다(Little Snitch의 [Silent Allow 모드](https://help.obdev.at/littlesnitch6/concepts-opmodes)). 네트워크 활동을 이해하고 제어하기 위해 구성을 검토하세요.
## Packet filter
macOS에는 명령줄에서 구성하는 패킷 필터링 방화벽인 [pf](https://en.wikipedia.org/wiki/PF_(firewall))도 포함되어 있습니다. 강력하지만 내장된 애플리케이션 방화벽보다 훨씬 복잡합니다.
pf는 [Murus](https://www.murusfirewall.com/)와 같은 그래픽 애플리케이션으로도 제어할 수 있습니다.
많은 [책](https://nostarch.com/book-of-pf-4e)과 [가이드](https://www.openbsd.org/faq/pf/)에서 pf 방화벽을 다룹니다. 다음 예시는 기본 정책을 구성하는 방법을 보여줍니다.
### Example pf config
`pf.rules`라는 파일에 다음 규칙을 추가하세요:```console
# Define interface
wifi = "en0"
# Global options
set block-policy drop
set skip on lo0
set state-policy if-bound
set ruleset-optimization basic
# Normalize
scrub in on $wifi all fragment reassemble
# Define tables
table <blocklist> persist
# Deny and log blocked traffic
block log all
block quick from no-route to any
antispoof quick for $wifi
# Enforce blocklist
block log quick on $wifi from <blocklist> to any
block log quick on $wifi from any to <blocklist>
# Allow DHCP
pass out on $wifi proto udp from any port 68 to any port 67 keep state
pass in on $wifi proto udp from any port 67 to any port 68 keep state
# Allow outbound TCP
pass out on $wifi proto tcp from ($wifi) to any flags S/SA keep state
# Allow outbound UDP
pass out on $wifi proto udp from ($wifi) to any keep state
# Allow outbound ICMP (ping)
pass out on $wifi proto icmp from ($wifi) to any keep state
pf 구성의 고급 예제는 pf/pf.rules에서 확인할 수 있습니다.
방화벽을 제어하려면:
| 명령 | 작업 |
|---|---|
sudo pfctl -e -f pf.rules | 구성 파일로 방화벽 활성화 |
sudo pfctl -t blocklist -T add 1.2.3.4 | blocklist 테이블에 IPv4 주소 추가 |
sudo pfctl -d | 방화벽 비활성화 |
방화벽을 모니터링하려면:
pf는 네트워크 주소 범위를 차단할 수 있습니다(예: 전체 조직). Merit RADb에서 자율 시스템 (단일 조직이 운영하는 대규모 네트워크)이 사용하는 네트워크 목록을 조회하세요. 예: Facebook:```bash whois -h whois.radb.net '!gAS32934'
반환된 네트워크 목록을 차단 목록에 추가합니다:```bash
sudo pfctl -t blocklist -T add $(whois -h whois.radb.net '!gAS32934' | sed -n '2p')
주소가 추가되었는지 확인하세요:```console $ sudo pfctl -t blocklist -T show No ALTQ support in kernel ALTQ related functions disabled 31.13.24.0/21 31.13.64.0/24 157.240.0.0/16 ...
해당 주소로의 네트워크 트래픽이 차단되었는지 확인하세요(DNS 요청은 계속 작동합니다):```console
$ dig a +short facebook.com
157.240.2.35
$ curl --connect-timeout 5 -I https://facebook.com/
* Trying 157.240.2.35...
* TCP_NODELAY set
* Connection timed out after 5002 milliseconds
* Closing connection 0
curl: (28) Connection timed out after 5002 milliseconds
$ sudo tcpdump -tqni pflog0 'host 157.240.2.35'
IP 192.168.1.1.62771 > 157.240.2.35.443: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.443: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.443: tcp 0
방화벽은 TCP 연결을 시작하는 데 필요한 초기 패킷을 차단하므로 연결 시간이 초과됩니다.
더 많은 아이디어는 drduh/config/scripts/pf-blocklist.sh를 참조하세요.
많은 시스템 및 사용자 백그라운드 서비스는 launchd로 관리됩니다.
관리자 계정은 시스템 설정에서 서비스와 확장 프로그램을 수정할 수 있습니다.
서비스 구성을 읽으려면:```bash defaults read /System/Library/LaunchAgents/com.apple.Finder
> [!IMPORTANT]
> 시스템 서비스는 [SIP](https://github.com/drduh/macOS-Security-and-Privacy-Guide#system-integrity-protection)에 의해 보호됩니다. SIP를 비활성화하여 시스템 서비스를 수정하면 보안이 손상되고 시스템이 불안정해질 수 있습니다.
서비스 상태를 확인하려면:```bash
find /var/db/com.apple.xpc.launchd \
-type f -print -exec defaults read {} \; 2>/dev/null
자세한 내용은 launchd를 사용한 스크립트 관리 및 launchd.info를 참조하십시오.
Siri 제안 및 Spotlight는 활성화된 기능에 따라 일부 쿼리나 사용 정보를 Apple에 보낼 수 있습니다. 시스템 설정에서 Siri 및 Spotlight를 검색한 다음 온라인 제안을 비활성화하고 인덱싱이나 제안에서 제외할 범주를 구성하십시오. 자세한 내용은 Apple의 검색 및 개인정보 보호 정책을 검토하십시오.
프로그램이 App Store에서 제공되지 않는 경우 Homebrew 사용을 고려하십시오.
[!IMPORTANT] 일부 Homebrew 설치 또는 관리 워크플로는 앱 관리 또는 전체 디스크 접근 권한을 요청할 수 있습니다. 이러한 권한은 완전히 이해되고 필요한 경우에만 부여하십시오.
신뢰할 수 있는 보안 네트워크에서 정기적으로 brew upgrade를 실행하여 소프트웨어 업데이트를 설치하십시오. 설치 전에 패키지 정보를 확인하려면 brew info <package>를 실행하고 해당 formula를 온라인으로 검토하십시오. HOMEBREW_NO_INSECURE_REDIRECT=1과 같은 추가 보안 옵션을 활성화하십시오.
Homebrew의 익명 분석에 따르면, Homebrew는 익명 사용 분석을 수집하여 자체 호스팅되는 InfluxDB 인스턴스에 보고합니다.
Homebrew 분석을 거부하려면 brew analytics off를 실행하거나 셸 시작 파일에 HOMEBREW_NO_ANALYTICS=1을 설정하십시오.
macOS는 암호화된 DNS, 필터링 및 DNSSEC을 구성하기 위한 "DNS 구성 프로필" 기능을 제공합니다.
DNS 프로필은 생성하거나 Quad9, AdGuard 및 NextDNS와 같은 공급업체에서 얻을 수 있습니다.
hosts 파일을 사용하여 맬웨어, 광고 및 기타 원치 않는 서비스와 관련된 도메인을 차단하십시오.
A 레코드로 도메인을 차단하려면 다음 줄 중 하나를 /etc/hosts에 추가하십시오:```
0 example.com
0.0.0.0 example.com
127.0.0.1 example.com
> [!NOTE]
> IPv6은 A 레코드 대신 AAAA 레코드를 사용합니다. `::1 example.com` 항목을 포함하여 IPv6 연결을 차단하세요.
많은 도메인 목록이 온라인에서 제공됩니다. 하나를 `/etc/hosts`에 추가하기 전에 각 항목이 `0`, `0.0.0.0` 또는 `127.0.0.1`로 시작하는지 확인하고, `127.0.0.1 localhost` 항목을 유지하세요.
널리 사용되는 호스트 목록은 다음과 같습니다:
- [StevenBlack/hosts](https://github.com/StevenBlack/hosts)
- [Sinfonietta/hostfiles](https://github.com/Sinfonietta/hostfiles)
- [someonewhocares.org](https://someonewhocares.org/hosts/zero/hosts)
호스트 파일에 목록을 다운로드하여 추가하려면 [tee](https://man7.org/linux/man-pages/man1/tee.1.html) 명령을 사용하세요:```bash
curl https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts |
sudo tee -a /etc/hosts
Little Snitch는 차단 목록도 지원합니다.
DNS 트래픽을 암호화하려면 DNSCrypt/dnscrypt-proxy를 고려하세요. 신뢰할 수 있는 리졸버로 구성하면 DNSCrypt가 DNS 쿼리를 암호화합니다. 지원되는 경우 DNSSEC는 서명된 DNS 응답을 추가로 검증할 수 있습니다.
Homebrew에서 DNSCrypt를 설치하고 지침에 따라 dnscrypt-proxy를 구성하고 시작하세요:```bash
brew install dnscrypt-proxy
DNSCrypt를 Dnsmasq와 함께 사용할 때, 다음을 실행하여 DNSCrypt 구성 파일을 찾으십시오:```bash
brew info dnscrypt-proxy | grep dnscrypt-proxy.toml | head -1
이 명령은 /opt/homebrew/etc/dnscrypt-proxy.toml과 같은 경로를 표시해야 합니다.
기본적으로 dnscrypt-proxy는 127.0.0.1:53에서 수신 대기하며 하나 이상의 구성된 DNS 공급자로 쿼리를 전송합니다. 구성을 수정하고 listen_addresses가 53이 아닌 다른 포트(예: 5355)를 사용하도록 변경하십시오:```toml
listen_addresses = ['127.0.0.1:5355', '[::1]:5355']
DNSCrypt 시작:```bash
sudo brew services restart dnscrypt-proxy
DNSCrypt가 실행 중인지 확인:```console $ sudo lsof +c 15 -Pni UDP:5355 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dnscrypt-proxy 15244 nobody 7u IPv4 0x1337f85ff9f8beef 0t0 UDP 127.0.0.1:5355 dnscrypt-proxy 15244 nobody 10u IPv6 0x1337f85ff9f8beef 0t0 UDP [::1]:5355 dnscrypt-proxy 15244 nobody 12u IPv4 0x1337f85ff9f8beef 0t0 UDP 127.0.0.1:5355 dnscrypt-proxy 15244 nobody 14u IPv6 0x1337f85ff9f8beef 0t0 UDP [::1]:5355
또한, 이러한 pf 규칙은 루프백 인터페이스 외부에서 포트 53으로 향하는 일반적인 DNS 트래픽을 차단하여 [DNS 누출](https://dnsleaktest.com/)의 위험을 줄입니다:```console
block drop quick on !lo0 proto udp from any to any port = 53
block drop quick on !lo0 proto tcp from any to any port = 53
dnsmasq는 응답을 캐시하고, 정규화되지 않은 이름에 대한 업스트림 쿼리를 방지하며, 전체 최상위 도메인을 차단할 수 있습니다.
DNSCrypt와 함께 사용하면 DNS 트래픽을 암호화할 수 있습니다.
DNSCrypt를 사용하지 않는다면 최소한 ISP가 제공하는 DNS 리졸버가 아닌 다른 리졸버를 선택하세요. 널리 사용되는 두 가지 대안은 Google DNS와 OpenDNS입니다.
Dnsmasq 설치:```bash brew install dnsmasq
[drduh/config/dnsmasq.conf](https://github.com/drduh/config/blob/main/dnsmasq.conf) 또는 기본 구성 파일을 다운로드하여 편집합니다.
특정 대상을 차단하기 위해 추가할 수 있는 예제 도메인 목록은 [drduh/config/domains](https://github.com/drduh/config/tree/main/domains)를 참조하십시오.
프로그램을 설치하고 시작합니다([특권 포트](https://unix.stackexchange.com/questions/16564/why-are-the-first-1024-ports-restricted-to-the-root-user-only) 53에 바인딩하려면 sudo가 필요합니다):```bash
sudo brew services start dnsmasq
dnsmasq를 로컬 DNS 서버로 설정하려면 시스템 설정 > 네트워크를 열고 현재 사용 중인 네트워크 연결(예: Wi-Fi)을 선택한 다음 DNS 탭을 열고 **+**를 선택한 후 127.0.0.1을 추가하거나, 다음을 사용하세요:```bash
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
Dnsmasq가 구성되었는지 확인하십시오:```console
$ scutil --dns | head
DNS configuration
resolver #1
search domain[0] : whatever
nameserver[0] : 127.0.0.1
flags : Request A records, Request AAAA records
reach : 0x00030002 (Reachable,Local Address,Directly Reachable Address)
$ networksetup -getdnsservers "Wi-Fi"
127.0.0.1
[!NOTE] 일부 VPN 애플리케이션은 연결 시 DNS 설정을 재정의합니다. issue 24 및 drduh/config/scripts/macos-dns.sh를 참조하십시오.
macOS는 전 세계의 기업, 정부 및 기타 조직이 운영하는 신뢰할 수 있는 루트 인증 기관(CA) 세트를 포함합니다. 신뢰할 수 있는 CA는 macOS 및 브라우저가 HTTPS 연결에 수락할 수 있는 인증서를 발급할 수 있으므로, 루트 CA 저장소는 시스템 신뢰 경계의 중요한 부분이 됩니다.
Keychain Access 또는 security 명령줄 도구와 /System/Library/Keychains/SystemRootCertificates.keychain 파일을 사용하여 Apple이 제공하는 신뢰할 수 있는 루트 저장소를 이해하려면 System Roots를 검사하십시오. Keychain Access는 다음 명령으로도 실행할 수 있습니다:```bash
open "/System/Library/CoreServices/Applications/Keychain Access.app"
또한 **login**, **Local Items**, **System** 키체인에 사용자, 관리자, VPN 클라이언트, 보안 제품 또는 모바일 기기 관리 애플리케이션이 추가했을 수 있는 인증서를 검토하십시오.
선택한 인증서를 비활성화하려면 해당 신뢰 설정을 **Never Trust**로 변경하고 창을 닫아 확인하십시오. 이렇게 하면 사기성 인증서를 사용하여 암호화된 트래픽을 [조용히 가로채는](https://en.wikipedia.org/wiki/DigiNotar#Issuance_of_fraudulent_certificates) [MITM](https://wikipedia.org/wiki/Man-in-the-middle_attack) 공격의 위험이 줄어들 수 있습니다.
> [!WARNING]
> 인증 기관 신뢰 설정을 제거하거나 수정하면 웹사이트, 소프트웨어 업데이트, 기업 네트워크, VPN, 캡티브 포털 및 기타 서비스가 중단될 수 있습니다.
현재 신뢰 저장소 정보는 Apple의 [사용 가능한 신뢰 인증서](https://support.apple.com/103723) 및 [차단된 인증서](https://support.apple.com/103247#blocked) 목록을 참조하십시오.
# Privoxy
웹 트래픽을 필터링하기 위해 로컬 프록시로 [Privoxy](https://www.privoxy.org/) 사용을 고려하십시오.
Homebrew를 사용하여 Privoxy를 설치하고 시작하십시오:```bash
brew install privoxy
brew services start privoxy
대안으로, Privoxy용 서명된 설치 패키지는 그들의 웹사이트 또는 Sourceforge에서 제공됩니다. 서명된 패키지는 Homebrew 버전보다 더 안전하며 Privoxy 프로젝트의 지원을 받습니다.
기본적으로 Privoxy는 로컬 TCP 포트 8118에서 수신 대기합니다.
활성 네트워크 인터페이스의 시스템 HTTP 프록시를 127.0.0.1 및 포트 8118로 설정하세요:```bash
sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8118
시스템 **HTTPS** 프록시를 설정하세요:```bash
sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 8118
프록시는 System Settings > Network > Details > Proxies에서도 설정할 수 있습니다.
프록시가 설정되었는지 확인합니다:```console $ scutil --proxy { ExceptionsList : { 0 : *.local 1 : 169.254/16 } FTPPassive : 1 HTTPEnable : 1 HTTPPort : 8118 HTTPProxy : 127.0.0.1 HTTPSEnable : 1 HTTPSPort : 8118 HTTPSProxy : 127.0.0.1 }
대부분의 웹 트래픽이 암호화되어 있지만, Privoxy는 호스트 이름으로 요청을 필터링할 수 있습니다. 예를 들어, 다음 규칙은 .net, github.com 및 Apple 도메인으로의 트래픽을 제외한 모든 트래픽을 차단합니다:```console
{ +block{all} }
.
{ -block }
.apple.
.github.com
.net
Facebook 도메인을 차단하려면:```console { +block{facebook} } .cdninstagram. .facebook*. .fb. .fbcdn*. .fbinfra. .fbsbx. .fbstatic*. .fbsv. .fburl. .instagr.am .tfbnw. .thefacebook. fb*.akamaihd.net
추가 Privoxy 예제는 [drduh/config/privoxy/config](https://github.com/drduh/config/blob/main/privoxy/config) 및 [drduh/config/privoxy/user.action](https://github.com/drduh/config/blob/main/privoxy/user.action)을 참조하십시오. 필터 규칙을 편집한 후 Privoxy를 다시 시작할 필요는 **없습니다**.
트래픽이 차단되거나 리디렉션되는지 확인하려면 [curl](https://en.wikipedia.org/wiki/CURL)을 사용하거나 브라우저에서 <http://p.p>의 Privoxy 인터페이스를 여십시오:```console
$ ALL_PROXY=127.0.0.1:8118 curl example.com -IL | head
HTTP/1.1 403 Request blocked by Privoxy
Content-Length: 9001
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache
$ ALL_PROXY=127.0.0.1:8118 curl github.com -IL | head
HTTP/1.1 302 Local Redirect from Privoxy
Location: https://github.com/
Content-Length: 0
HTTP/1.1 200 Connection established
HTTP/2 200
content-type: text/html; charset=utf-8
[!NOTE] 애플리케이션과 서비스는 프록시 설정을 무시할 수 있습니다. pf는 각 애플리케이션을 별도로 구성하지 않고도 트래픽을 프록시를 통해 리디렉션할 수 있습니다.
웹 브라우저는 신뢰할 수 없는 인터넷 콘텐츠를 다운로드하고 실행하기 때문에 상당한 보안 및 개인정보(프라이버시) 위험을 초래합니다.
핵심 브라우저 보안 경계는 동일 출처 정책(SOP)으로, 한 웹사이트가 다른 웹사이트의 데이터를 읽지 못하도록 방지합니다. 이 정책을 우회하면 동일한 브라우저 프로필에 있는 다른 사이트의 데이터나 작업이 노출될 수 있습니다.
일부 브라우저 공격은 사용자가 소프트웨어를 설치하거나 권한을 부여하거나 악성 확장 프로그램을 사용하도록 유도하는 데 의존합니다. 예상치 못한 다운로드, 확장 프로그램 설치 요청, 터미널에서 명령을 실행하라는 요청에 특히 주의하십시오.
브라우저 확장 프로그램 역시 상당한 보안 위험을 초래합니다. 악의적이거나 제대로 만들어지지 않은 확장 프로그램은 자격 증명을 포함해 브라우저의 모든 것을 손상시킬 수 있습니다. 브라우저 확장 프로그램 사용은 신뢰할 수 있는 개발자가 게시한 필수 확장 프로그램으로만 제한해야 합니다.
다른 정체성과 목적에 맞게 별도의 브라우저 프로필을 사용하십시오. 가능하다면 JavaScript를 비활성화하고 브라우저 사이트 권한을 사용하여 신뢰할 수 있는 사이트에서만 허용하십시오.
Mozilla Firefox, Google Chrome, Safari, Tor Browser는 각각 고유한 기능과 개별적인 용도를 가진 인기 브라우저입니다.
Firefox는 Quantum 및 Photon 프로젝트를 통해 코드베이스의 주요 부분을 현대화했습니다. Quantum에는 일부 구성 요소를 C++에서 Rust로 전환하는 작업이 포함되며, Rust는 메모리 안전성과 동시성 안전성을 개선하도록 설계된 프로그래밍 언어입니다.
Firefox는 취약점의 책임 있는 공개를 위한 버그 바운티 프로그램을 포함하여 Chrome과 유사한 보안 모델을 제공합니다. Firefox는 4주 릴리스 주기를 따릅니다.
권장 구성을 보려면 drduh/config/firefox.user.js 및 arkenfox/user.js를 참조하십시오. 선택적 스크립트 차단을 허용하는 확장 프로그램인 NoScript도 참조하십시오.
Firefox는 사용자 개인정보 보호에 중점을 둡니다. 추적 방지를 개인 정보 보호 창 모드에서 지원합니다. 기본 계정에도 추적 방지를 활성화할 수 있지만, 일부 웹사이트에서는 검색 환경이 저하될 수 있습니다. 엄격한 추적 방지 모드의 Firefox는 추적에 대응하기 위해 지문을 무작위화합니다. Firefox는 별도의 사용자 프로필을 제공합니다. 멀티 계정 컨테이너로 검색을 구분할 수도 있습니다.
Firefox는 Chrome과 매우 유사한 WebExtension API를 통해서만 웹 확장 프로그램을 지원합니다. Firefox에서 웹 확장 프로그램을 제출하는 것은 무료입니다. Firefox의 웹 확장 프로그램은 대부분 오픈소스이지만 일부 웹 확장 프로그램은 독점(프라퍼테리)입니다.
Google Chrome는 오픈소스 Chromium 프로젝트를 기반으로 합니다. Chrome에는 일부 독점 구성 요소, 자동 업데이트, PDF 뷰어, 미디어 코덱 지원, 크래시 보고, Google 계정 통합이 포함되어 있습니다. 자세한 내용은 Chrome 개인정보 보호 설정과 Google 개인정보 처리방침을 검토하십시오.
Chrome은 자격 증명을 포함한 여러 기기 간 계정 동기화를 제공하며, 데이터는 계정 비밀번호로 암호화됩니다.
Chrome은 전 세계에서 가장 많은 사용량을 차지하며 대부분의 개발자가 선호하는 대상 플랫폼입니다. 주요 기술은 Chrome의 오픈소스 구성 요소를 기반으로 합니다. 예를 들어 Chrome의 V8 엔진을 사용하는 node.js와 Chromium 및 node.js를 기반으로 하는 Electron 프레임워크가 있습니다. Chrome의 방대한 사용자 기반은 위협 행위자와 보안 연구자에게 가장 매력적인 표적이 됩니다. 끊임없는 공격에도 불구하고 Chrome은 수년간 인상적인 보안 실적을 유지해 왔습니다. 이는 결코 작은 성과가 아닙니다.
Chrome은 별도 프로필, 강력한 샌드박싱, 빈번한 업데이트를 제공하며 인상적인 보안 실적을 자랑합니다. 또한 Google은 자체 Project Zero 팀과 함께 취약점 신고에 대해 매우 후한 바운티 프로그램을 제공합니다. 이는 수많은 재능 있고 의욕적인 사람들이 지속적으로 Chrome 코드를 감사하고 보호하고 있음을 의미합니다.
브라우저 설정에서 V8 최적화(JavaScript 엔진 성능 기능)를 비활성화하는 것을 고려하십시오. 보안상의 장단점은 이 설명을 참조하십시오.
uBlock Origin Lite로 추적기를 차단하십시오.
DNS 프리페칭을 비활성화하십시오 (DNS 프리페칭과 개인정보 보호 영향 참조). Chrome은 Google의 8.8.8.8 및 8.8.4.4 공용 이름 서버를 사용하여 DNS를 확인하려고 시도할 수 있습니다.
자세한 내용은 Chromium Security 및 Chromium Privacy를 참조하십시오. 개인 정보가 어떻게 수집되고 사용되는지 이해하려면 Google 개인정보 처리방침을 읽으십시오.
Safari는 Apple의 기본 브라우저이며 macOS에 통합되어 Apple 하드웨어에서 배터리 효율성이 향상됩니다.
Safari에는 오픈소스와 독점 구성 요소가 모두 있습니다. Safari는 macOS 생태계 전반에 널리 사용되는 오픈소스 웹 엔진인 WebKit을 기반으로 합니다. WebKit은 Mail, Books, App Store와 같은 Apple 앱에서 사용됩니다. Chrome의 Blink 엔진은 WebKit의 포크이며 두 엔진은 여러 유사점을 공유합니다.
Safari는 사용자 보안과 개인정보 보호에 도움이 되는 몇 가지 고유한 기능을 지원합니다. 콘텐츠 차단기는 JavaScript를 사용하지 않고도 콘텐츠 차단 규칙을 만들 수 있게 해줍니다. 이 규칙 기반 접근 방식은 메모리 사용, 보안, 개인정보 보호를 크게 개선합니다. Safari 11은 지능형 추적 방지(Intelligent Tracking Prevention)를 도입했으며, 이 기능은 사용자가 추적 웹사이트와 일정 기간 상호작용하지 않으면 Safari에 저장된 추적 데이터를 제거합니다. Safari는 추적을 줄이기 위해 브라우저 지문을 무작위화할 수 있습니다. Safari는 보안 및 개인정보 보호를 이유로 WebUSB나 배터리 API 같은 특정 기능을 의도적으로 지원하지 않습니다. Safari의 개인 정보 보호 탭은 쿠키와 캐시가 격리되어 있으며 탭을 닫으면 파기됩니다. Safari는 쿠키와 검색을 분리하기 위한 Firefox의 멀티 계정 컨테이너에 해당하는 프로필(Profiles)도 지원합니다. Safari는 사이트별로 비활성화할 수 있는 잠금 모드로 훨씬 더 안전하게 만들 수 있습니다. Safari의 추적 방지에 대해 자세히 알아보십시오.
Safari의 웹 확장 프로그램은 Web Extension API 외에도 Safari 샌드박스 환경에서 네이티브 코드를 사용할 수 있는 추가 옵션을 제공합니다. Safari의 웹 확장 프로그램은 Apple App Store를 통해서도 배포됩니다. App Store 제출에는 Apple이 웹 확장 프로그램 코드를 감사한다는 추가 이점이 있습니다. 반면 App Store 제출에는 높은 비용이 따릅니다. 연간 개발자 구독 비용은 100달러입니다(Chrome의 5달러 수수료 및 Firefox의 무료 제출과 대조적). 높은 비용은 대부분의 오픈소스 개발자에게 부담스러운 수준입니다. 그 결과 Safari에서 선택할 수 있는 확장 프로그램은 매우 적습니다. 그러나 확장 프로그램을 설치할 때는 높은 비용을 염두에 두십시오. 대부분의 웹 확장 프로그램은 개발 비용을 충당하기 위해 어떤 방식으로든 사용을 수익화할 것으로 예상됩니다. 검토할 수 있는 오픈소스 코드가 없는 웹 확장 프로그램은 피하십시오.
Safari는 iCloud 키체인과 사용자 환경 설정 및 비밀번호를 동기화합니다. 저장된 비밀번호를 보려면 현재 기기 계정 비밀번호 또는 다른 구성된 인증 방법으로 인증해야 합니다.
Safari는 Chrome이나 Firefox보다 새로운 웹 기능을 더 천천히 구현하지만, 보안 패치는 시스템 업데이트를 통해 신속하게 제공됩니다.
하이퍼링크 감사 비콘을 비활성화하려면 el1t/uBlock-Safari도 참조하십시오.
웹사이트는 설정, 글꼴, 화면 크기, 언어, IP 주소, 브라우저 동작을 통해 브라우저와 기기에 대한 정보를 유추합니다. 이 정보는 브라우저 지문 생성에 기여합니다.
보안을 고려한 브라우징과 브라우저가 전송하는 데이터에 대한 자세한 내용은 HowTo: Privacy & Security Conscious Browsing, browserleaks.com, Am I Unique?, EFF Cover Your Tracks 리소스를 참조하십시오.
사이트 간 추적을 줄이려면 타사 쿠키를 차단하십시오.
또한 로컬 또는 공용(VPN에 연결된 경우) IP 주소를 노출할 수 있는 WebRTC에 유의하십시오. Firefox 및 Chrome/Chromium에서는 uBlock Origin으로 이 기능을 비활성화할 수 있습니다. 잠금 모드는 Safari에서 WebRTC도 비활성화합니다.
Tor는 브라우징 중 추가적인 개인정보 보호를 제공할 수 있는 익명성 네트워크입니다. Tor Browser는 Tor 네트워크를 사용하도록 구성된 Firefox 기반 수정 브라우저입니다.
Tor Browser를 Tor Project에서 다운로드하십시오. 검증을 위해 dmg 및 asc 파일을 모두 받으십시오:```console
$ cd ~/Downloads
$ file tor-browser-macos-* tor-browser-macos-15.0.17.dmg: XZ compressed data, checksum NONE tor-browser-macos-15.0.17.dmg.asc: PGP signature Signature (old)
$ gpg --verify tor-browser-macos-*.asc [...] gpg: Can't check signature: No public key
$ gpg --auto-key-locate nodefault,wkd --locate-keys [email protected] gpg: key 0x4E2C6E8793298290: public key "Tor Browser Developers (signing key) [email protected]" imported gpg: Total number processed: 1 gpg: imported: 1 pub rsa4096/0x4E2C6E8793298290 2014-12-15 [C] [expires: 2027-07-15] Key fingerprint = EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290 uid [ unknown] Tor Browser Developers (signing key) [email protected] sub rsa4096/0x157432CF78A65729 2024-07-15 [S] [expires: 2026-10-26] Key fingerprint = CAAE 408A EBE2 288E 96FC 5D5E 1574 32CF 78A6 5729
$ gpg --verify tor-browser-macos-*.asc gpg: assuming signed data in 'tor-browser-macos-15.0.17.dmg' gpg: Signature made Sun Jun 28 15:35:20 2026 PDT gpg: using RSA key CAAE408AEBE2288E96FC5D5E157432CF78A65729 gpg: Good signature from "Tor Browser Developers (signing key) [email protected]" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290 Subkey fingerprint: CAAE 408A EBE2 288E 96FC 5D5E 1574 32CF 78A6 5729
출력에 `Good signature from "Tor Browser Developers (signing key) <[email protected]>"`가 나타나는지 확인하세요. 키가 개인적으로 검증되어 신뢰할 수 있는 키링에 추가되지 않았으므로 경고가 표시되는 것은 정상입니다.
자세한 내용은 [Tor Browser의 서명을 어떻게 확인할 수 있나요?](https://support.torproject.org/tbb/how-to-verify-signature/)를 참조하세요.
Tor Browser 설치를 완료하려면 디스크 이미지를 열어 Applications 폴더로 드래그하거나 다음 명령을 사용하세요:```bash
hdiutil mount tor-browser-macos-15.0.17.dmg
cp -r /Volumes/Tor\ Browser/Tor\ Browser.app/ ~/Applications/
애플리케이션이 The Tor Project의 Apple Developer ID(MADPSAYN6T)로 서명되었는지 확인하세요:```console
$ spctl --assess -vv ~/Applications/Tor\ Browser.app
/Users/user1/Applications/Tor Browser.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
$ pkgutil --check-signature ~/Applications/Tor\ Browser.app Package "Tor Browser.app": Status: signed by a certificate trusted by macOS Certificate Chain: 1. Developer ID Application: The Tor Project, Inc (MADPSAYN6T) Expires: 2028-10-11 17:57:46 +0000 SHA256 Fingerprint: 76 3C 89 02 ED CB AD 8E 59 86 1E 93 D3 05 5B 28 F9 04 0C 96 03 8B 16 28 9F 38 64 ED 53 45 B4 DA ------------------------------------------------------------------------ 2. Developer ID Certification Authority Expires: 2031-09-17 00:00:00 +0000 SHA256 Fingerprint: F1 6C D3 C5 4C 7F 83 CE A4 BF 1A 3E 6A 08 19 C8 AA A8 E4 A1 52 8F D1 44 71 5F 35 06 43 D2 DF 3A ------------------------------------------------------------------------ 3. Apple Root CA Expires: 2035-02-09 21:40:36 +0000 SHA256 Fingerprint: B0 B1 73 0E CB C7 FF 45 05 14 2C 49 F1 29 5E 6E DA 6B CA ED 7E 2C 68 C5 BE 91 B5 A1 10 01 F0 24
`codesign` 명령을 사용하여 애플리케이션의 코드 서명을 검사할 수도 있습니다:```console
$ codesign -dvv ~/Applications/Tor\ Browser.app
Executable=/Users/user1/Applications/Tor Browser.app/Contents/MacOS/firefox
Identifier=org.torproject.torbrowser
Format=app bundle with Mach-O universal (x86_64 arm64)
CodeDirectory v=20500 size=805 flags=0x10000(runtime) hashes=14+7 location=embedded
Signature size=9054
Authority=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Jun 28, 2026 at 14:01:57
Notarization Ticket=stapled
Info.plist entries=27
TeamIdentifier=MADPSAYN6T
Runtime Version=15.5.0
Sealed Resources version=2 rules=13 files=208
Internal requirements count=1 size=188
서명된 애플리케이션의 전체 인증서 세부 정보를 보려면 codesign으로 추출하고 openssl로 디코드하세요:```console
$ codesign -d --extract-certificates ~/Applications/Tor\ Browser.app
Executable=/Users/user1/Applications/Tor Browser.app/Contents/MacOS/firefox
$ file codesign* codesign0: Certificate, Version=3 codesign1: Certificate, Version=3 codesign2: Certificate, Version=3 Certificate, Version=02
$ openssl x509 -inform der -in codesign0 -subject -issuer -startdate -enddate -noout subject= /UID=MADPSAYN6T/CN=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)/OU=MADPSAYN6T/O=The Tor Project, Inc/C=US issuer= /CN=Developer ID Certification Authority/OU=G2/O=Apple Inc./C=US notBefore=Oct 11 17:57:47 2023 GMT notAfter=Oct 11 17:57:46 2028 GMT
$ openssl x509 -inform der -in codesign0 -fingerprint -noout SHA256 Fingerprint=76:3C:89:02:ED:CB:AD:8E:59:86:1E:93:D3:05:5B:28:F9:04:0C:96:03:8B:16:28:9F:38:64:ED:53:45:B4:DA
Tor Browser는 [플러거블 전송](https://support.torproject.org/tor-browser/circumvention/)이라고 하는 특수 연결 방법을 사용하여 트래픽을 식별하거나 차단하기 어렵게 만들 수 있습니다. 이는 [릴레이](https://support.torproject.org/relays/)를 설정하거나 기존 [브리지](https://bridges.torproject.org/)를 사용하여 수행할 수 있습니다.
Tor 네트워크는 [익명성](https://www.privateinternetaccess.com/blog/2013/10/how-does-privacy-differ-from-anonymity-and-why-are-both-important/)을 제공하지만, 이는 반드시 프라이버시와 같은 것은 아닙니다. 네트워크는 트래픽 분석과 상관관계를 수행할 수 있는 전역 관찰자로부터 방어하지 못합니다. 또한 [Seeking Anonymity in an Internet Panopticon](https://bford.info/pub/net/panopticon-cacm.pdf) 및 [Traffic Correlation on Tor by Realistic Adversaries](https://www.ohmygodel.com/publications/usersrouted-ccs13.pdf)를 참조하십시오.
자세한 내용은 [Tor 프로토콜 사양](https://spec.torproject.org/tor-spec/)을 참조하십시오.
또한 [Invisible Internet Project (I2P)](https://geti2p.net/en/about/intro) 및 [Tor 비교](https://geti2p.net/en/comparison/tor)를 참조하십시오.
# VPN
문서화된 최신 프로토콜과 잘 감사된 클라이언트를 갖춘 VPN 제공업체 또는 자체 호스팅 구성을 선택하십시오. [PPTP](https://en.wikipedia.org/wiki/Point-to-Point_Tunneling_Protocol#Security)와 같은 구식 프로토콜 대신 [OpenVPN](https://en.wikipedia.org/wiki/OpenVPN) 또는 [WireGuard](https://www.wireguard.com/)를 [Linux VM에서](https://github.com/mrash/Wireguard-macOS-LinuxVM) 또는 [크로스 플랫폼 도구](https://www.wireguard.com/xplatform/) 세트를 통해 사용하십시오.
일부 VPN 클라이언트는 연결이 중단되거나 끊어졌을 때 다음 사용 가능한 네트워크 인터페이스로 트래픽을 보낼 수 있습니다. VPN을 통해서만 트래픽을 허용하는 방법에 대한 예는 [scy/8122924](https://gist.github.com/scy/8122924)를 참조하십시오.
가상 머신([hwdsl2/setup-ipsec-vpn](https://github.com/hwdsl2/setup-ipsec-vpn)) 또는 Docker 컨테이너([hwdsl2/docker-ipsec-vpn-server](https://github.com/hwdsl2/docker-ipsec-vpn-server))에서 [IPsec](https://en.wikipedia.org/wiki/Ipsec) VPN을 설정하는 가이드를 참조하십시오.
VPN 제공업체의 지리적 위치를 고려하는 것이 좋을 수 있습니다. [issue 114](https://github.com/drduh/macOS-Security-and-Privacy-Guide/issues/114)에서 추가 논의를 참조하십시오.
또한 macOS 내장 VPN L2TP/IPsec 및 [IKEv2](https://en.wikipedia.org/wiki/IKEv2) 클라이언트에 대한 [기술 개요](https://blog.timac.org/2018/0717-macos-vpn-architecture/)도 참조하십시오.
# PGP/GPG
PGP는 데이터, 특히 이메일을 암호화하고 서명하기 위한 표준입니다. 키를 올바르게 교환하고 검증하는 통신자 간의 메시지 내용을 보호할 수 있지만, 이메일 수신자와 제목 줄과 같은 메타데이터는 보호하지 못합니다.
GPG(GNU Privacy Guard)는 PGP 표준을 준수하는 GPL 라이선스의 오픈소스 프로그램입니다. 소프트웨어 서명을 검증하고 파일을 [대칭적으로](https://en.wikipedia.org/wiki/Symmetric-key_algorithm) 또는 [공개 키](https://en.wikipedia.org/wiki/Public-key_cryptography)를 사용하여 암호화할 수 있습니다.
Homebrew로 GnuPG를 설치하거나(`brew install gnupg`) [GPG Suite](https://gpgtools.org/)를 설치하십시오.
권장 설정을 사용하려면 [gpg.conf](https://github.com/drduh/YubiKey-Guide/blob/main/config/gpg.conf)를 다운로드하십시오:```bash
curl -o ~/.gnupg/gpg.conf \
https://raw.githubusercontent.com/drduh/YubiKey-Guide/main/config/gpg.conf
drduh/YubiKey-Guide를 참고하여 자격 증명을 생성하고 관리하십시오.
이메일은 기본적으로 강력한 프라이버시를 제공하도록 설계되지 않았습니다. 메시지 내용은 서비스 제공업체가 보관하거나 수신자의 사서함에 복사되거나 전달되거나 계정 침해로 노출될 수 있습니다. 메타데이터(수신자, 제목, 타임스탬프, 메일 서버 정보 포함)는 일반적으로 메시지 내용이 암호화된 경우에도 계속 표시됩니다.
Thunderbird는 표준 IMAP, POP, CalDAV, CardDAV 지원을 포함하는 무료 오픈 소스 이메일 클라이언트입니다. 공급자의 원격 서버에만 의존하지 않고 메일에 접근하고 로컬 사본을 유지하는 데 적합한 선택입니다.
Thunderbird는 메시지 내용을 보호하고 암호화 서명을 제공할 수 있는 OpenPGP 이메일 암호화를 지원합니다. 민감한 통신에 키를 사용하기 전에 항상 독립적인 채널을 통해 공개 키 지문을 검증하십시오.
보관된 메시지 기능을 사용하면 메시지를 원격 메일 서버에서 로컬 폴더로 이동하여 프라이버시를 개선할 수 있습니다.
XMPP는 IETF가 개발한 개방형 프로토콜로, 크로스 플랫폼 연합 메시징을 지원합니다. 다양한 클라이언트 옵션이 있습니다. 브라우저 샌드박스의 이점을 활용할 수 있도록 브라우저 기반 클라이언트 중 하나를 사용하는 것을 고려하십시오.
공급자에 따라 계정을 설정하는 데 사용자 이름과 비밀번호 외에 다른 것이 필요하지 않을 수 있습니다.
XMPP는 기본적으로 종단 간 암호화(E2EE)가 적용되지 않으므로 호환 가능한 클라이언트에서 OMEMO를 사용하십시오.
Signal은 인기 있는 E2EE 메신저로, 그 double-ratchet 프로토콜은 WhatsApp, Google Messages, Facebook Messenger를 포함한 많은 다른 응용 프로그램에서 사용됩니다.
Signal 데스크톱 앱을 사용하려면 먼저 휴대폰에 Signal이 설치되어 있어야 합니다.
추가 지침은 EFF의 Signal 가이드를 참조하십시오.
iMessage는 Apple의 자사 메신저입니다. 사용하려면 Apple Account가 필요합니다.
연락처 키 검증을 활성화하고 연락처를 확인하십시오.
iMessage는 전화번호 또는 이메일로 사용할 수 있습니다.
[!WARNING] 기본적으로 iCloud 백업이 활성화되어 있으며, 이는 E2EE 없이 Apple의 서버에 메시지 암호화 키의 사본을 저장합니다. 이를 방지하려면 iCloud 백업을 비활성화하거나 고급 데이터 보호를 활성화하십시오. 메시지 수신자에게도 동일하게 하도록 알려주십시오.
Mac OS X에서 멀웨어가 지속되는 방법과 OS X Yosemite에서의 멀웨어 지속을 참조하여 일반적인 macOS 멀웨어가 어떻게 지속되는지 알아보십시오.
고급 macOS 멀웨어 기능의 예는 Hacking Team 자료를 참조하십시오. 추가 분석은 MacOS용 루트 설치, Mac 에이전트용 지원 드라이버, Mac용 RCS 에이전트를 참조하십시오.
또한 RCS 임플란트 설치 프로그램에 대한 간략한 분석과 reverse.put.as를 참조하십시오.
App Store 앱 또는 Apple이 공증한 앱은 멀웨어 위험을 줄일 수 있지만, 두 과정 모두 안전을 보장하지는 않습니다. Apple은 공증된 앱에 대해 자동 검사를 수행하며, App Store 앱은 검토를 거칩니다. 그 외에는 개발자가 공식이라고 명시한 소스에서 소프트웨어를 받고, 해당 웹사이트 또는 명령줄 다운로드가 HTTPS를 사용하는지 확인하십시오.
응용 프로그램이 App Sandbox를 사용하는지 확인하십시오:```bash
codesign --display --entitlements -
/System/Applications/Calculator.app 2>&1 |
grep -A2 com.apple.security.app-sandbox
App Sandbox가 활성화된 경우 출력은 다음과 같아야 합니다:```console
[Key] com.apple.security.app-sandbox
[Value]
[Bool] true
Activity Monitor는 "Sandbox" 열이 표시된 상태에서 활성화 여부를 나타낼 수도 있습니다:```bash
defaults write com.apple.ActivityMonitor "UserColumnsPerTab v6.0"
-dict-add 0 '(Command, CPUUsage, CPUTime, Threads, IdleWakeUps, Architecture, GPUUsage, GPUTime, PID, UID, Sandbox, restricted)'
App Store 소프트웨어는 App Sandbox를 사용해야 합니다. Google Chrome과 같은 애플리케이션은 자체 [sandbox](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)를 사용하며 App Sandbox를 사용하지 않을 수 있습니다.
> [!NOTE]
> 샌드박싱은 애플리케이션의 기본 접근 권한을 제한하지만, entitlements 및 사용자에게 부여된 권한으로 접근 범위를 확장할 수 있습니다.
## Hardened Runtime
애플리케이션이 [Hardened Runtime](https://developer.apple.com/documentation/security/hardened_runtime)을 사용하는지 확인합니다:```bash
codesign --display --verbose /path/to/application.app
Hardened Runtime이 활성화된 경우 출력에 flags=0x10000(runtime)이 표시됩니다.
이 기능이 활성화된 모든 애플리케이션을 나열합니다:```bash for app in /Applications/.app /System/Applications/.app; do if codesign -dvv "$app" 2>&1 | grep -q 'flags=0x10000(runtime)'; then echo "$app" fi done
**Activity Monitor**에는 [dynamic linker](https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html)를 통해 코드를 주입하지 못하도록 제한된 프로그램을 나타내는 "Restricted" 열을 표시하는 옵션이 있습니다.
Hardened Runtime은 배포된 앱의 공증(notarization)을 위한 전제 조건입니다.
## 안티바이러스
파일과 앱을 검사하려면 [VirusTotal](https://www.virustotal.com/gui/home/upload)에 업로드하는 것을 고려하세요. 단, 업로드하면 공개적으로 볼 수 있게 된다는 점을 유의하세요.
macOS에는 [XProtect](https://support.apple.com/guide/security/protecting-against-malware-sec469d47bd8)라는 내장 안티바이러스 소프트웨어가 포함되어 있으며, 백그라운드에서 실행되고 악성코드 탐지에 사용되는 시그니처를 자동으로 업데이트합니다. 악성코드가 감지되면 XProtect는 이를 제거하고 격리하려고 시도합니다.
XProtect 업데이트 상태 확인:```bash
xprotect version
Applications such as BlockBlock or hazcod/maclaunch might help prevent or detect persistent malware.
Antivirus software can help detect common malware, but it may also increase attack surface because it often runs with extensive system privileges. Some products may also send telemetry or samples to the vendor.
See Sophail: Applied attacks against Antivirus, Analysis and Exploitation of an ESET Vulnerability, Popular Security Software Came Under Relentless NSA and GCHQ Attacks, and How Israel Caught Russian Hackers Scouring the World for U.S. Secrets.
Gatekeeper verifies software notarization and provenance.
Gatekeeper warns when opening an application without notarization. It can be bypassed by selecting the application listed in System Settings > Privacy & Security after a failed attempt.
Check if Gatekeeper is enabled:```bash spctl --status --verbose
# 시스템 무결성 보호
시스템 무결성 보호가 활성화되어 있는지 확인하려면 `csrutil status` 명령을 사용하십시오. 반환 결과는 `System Integrity Protection status: enabled.`여야 합니다. 그렇지 않으면 [복구 모드](https://support.apple.com/102518)를 사용하여 [SIP 활성화](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection)를 수행하십시오.
# 메타데이터 및 아티팩트
macOS는 파일에 메타데이터([APFS 확장 속성](https://en.wikipedia.org/wiki/Extended_file_attributes#macOS))를 첨부합니다.
특정 메타데이터 속성은 [`mdls`](https://ss64.com/mac/mdls.html) 및 [`xattr`](https://ss64.com/mac/xattr.html) 명령으로 확인하고 제거할 수 있습니다. 환경설정(`plist`) 파일은 [`defaults`](https://ss64.com/mac/defaults.html) 명령으로 읽고 수정할 수 있습니다.
시스템 및 애플리케이션 메타데이터는 다음 위치에서 찾을 수 있습니다:
- `~/Library/Preferences/`
- `~/Library/Containers/<APP>/Data/Library/Preferences`
- `/Library/Preferences`
Bluetooth 정보:
- `/Library/Preferences/com.apple.Bluetooth.plist`
프린터 작업 캐시:
- `/var/spool/cups`
이전에 연결된 iOS 기기:
- `/Users/$USER/Library/Preferences/com.apple.iPod.plist`
- `/Library/Preferences/com.apple.iPod.plist`
Finder 환경설정:
- `~/Library/Preferences/com.apple.finder.plist`
- `~/Library/Preferences/com.apple.sidebarlists.plist`
진단 데이터:
- `/var/db/CoreDuet`
- `/var/db/diagnostics`
- `/var/db/systemstats`
- `/var/db/uuidtext`
- `/var/log/DiagnosticMessages`
맞춤법 및 언어 제안:
- `~/Library/LanguageModeling`
- `~/Library/Spelling`
- `~/Library/Suggestions`
애플리케이션 상태:
- `~/Library/Saved\ Application\ State`
- `~/Library/Containers/<APPNAME>/Data/Library/Saved\ Application\ State`
자동 저장 메타데이터:
- `~/Library/Containers/<APP>/Data/Library/Autosave\ Information`
- `~/Library/Autosave\ Information`
Siri 분석:
- `~/Library/Assistant/SiriAnalytics.db`
QuickTime Player 기록:
- `~/Library/Containers/com.apple.QuickTimePlayerX/Data/Library/Preferences/com.apple.QuickTimePlayerX.plist`
기타 메타데이터:
- `~/Library/Containers/com.apple.appstore/Data/Library/Preferences/com.apple.commerce.knownclients.plist`
- `~/Library/Preferences/com.apple.commerce.plist`
- `~/Library/Preferences/com.apple.QuickTimePlayerX.plist`
# 인증
[Passwords](https://support.apple.com/guide/passwords/the-passwords-app-mchl901b1b95/mac) 앱은 [보안 자격 증명](https://support.apple.com/guide/security/automatic-strong-passwords-secc84c811c4/web)을 생성합니다. 이 앱은 [패스키](https://fidoalliance.org/passkeys/)를 지원하며, 패스키는 호환 서비스와 함께 사용할 때 피싱에 저항하도록 설계된 자격 증명입니다.
[KeePassXC](https://keepassxc.org/)는 고려할 만한 오픈 소스 크로스 플랫폼 비밀번호 관리자입니다. 호환되는 하드웨어 토큰을 사용한 강력한 인증과 자격 증명을 자동으로 입력하는 브라우저 확장 프로그램을 지원합니다.
기억하기 쉬운 비밀번호는 [Diceware](https://secure.research.vt.edu/diceware/)를 사용하여 만들 수 있습니다.
온라인 계정에 [다단계 인증(MFA)](https://en.wikipedia.org/wiki/Multi-factor_authentication)이 활성화되어 있는지 확인하십시오. 지원되는 서비스에서는 하드웨어 토큰이나 패스키와 같은 피싱 방지 인증을 선호하십시오. 인증 앱이 SMS 코드보다 낫지만, 어떤 MFA든 비밀번호만 사용하는 인증보다는 낫습니다.
[YubiKey](https://www.yubico.com/products/)는 널리 사용되는 하드웨어 인증 토큰입니다. 암호화, 서명 및 인증 작업을 위한 키를 저장할 수도 있습니다 - [drduh/YubiKey-Guide](https://github.com/drduh/YubiKey-Guide)를 참조하십시오.
GnuPG는 비밀번호 및 기타 암호화된 파일을 관리할 수도 있습니다 - [drduh/Purse](https://github.com/drduh/Purse) 및 [drduh/pwd.sh](https://github.com/drduh/pwd.sh)를 참조하십시오.
# 백업
파일을 외부 매체나 온라인 서비스에 백업하기 전에 로컬에서 암호화하십시오.
[3-2-1 백업 모델](https://www.cisa.gov/sites/default/files/publications/data_backup_options.pdf)을 따르십시오: 중요한 데이터의 사본 세 개를 보관하고, 서로 다른 두 가지 유형 이상의 매체에 저장하며, 최소한 하나의 사본은 별도의 물리적 위치에 보관하십시오.
## Time Machine
[Time Machine](https://support.apple.com/104984)은 macOS에서 백업을 처리하는 기본 제공 도구입니다. 외장 드라이브 또는 네트워크 저장소를 사용하여 [암호화된](https://support.apple.com/guide/mac-help/keep-your-time-machine-backup-disk-secure-mh21241) 백업을 생성하십시오.
## GnuPG
[GnuPG](https://www.gnupg.org/)는 비밀번호 또는 공개 키와 함께 사용할 수 있으며, 개인 키는 [YubiKey](https://github.com/drduh/YubiKey-Guide)에 저장됩니다.
비밀번호를 사용하여 디렉터리를 압축하고 암호화합니다:```bash
tar zcvf - ~/Downloads |
gpg -c > ~/Downloads/backup-$(date +%F-%H%M%S).tar.gz.gpg
디렉터리를 복호화하고 압축을 해제하십시오:```bash gpg -o ~/Downloads/decrypted-backup.tar.gz -d ~/Downloads/backup-*.tar.gz.gpg tar zxvf ~/Downloads/decrypted-backup.tar.gz
## 디스크 유틸리티
암호화된 볼륨은 [디스크 유틸리티](https://support.apple.com/guide/disk-utility/toc) 또는 `hdiutil`을 사용하여 생성할 수 있습니다:```bash
hdiutil create ~/Downloads/encrypted.dmg -encryption -size 50M -volname "secretStuff"
hdiutil mount ~/Downloads/encrypted.dmg
cp -v ~/Documents/passwords.txt /Volumes/secretStuff
hdiutil eject /Volumes/secretStuff
Tresorit와 restic도 관심이 있을 수 있습니다.
SSID라고 불리는 Wi-Fi 네트워크 이름과 장치의 프로브 동작은 주변 및 이전에 사용한 네트워크에 대한 정보를 드러낼 수 있습니다. 숨겨진 네트워크는 의미 있는 프라이버시를 제공하지 않으며, 장치가 해당 네트워크를 적극적으로 프로브하게 만들 수 있습니다.
개인 Wi-Fi 주소를 설정하여 네트워크 추적을 줄이세요.
무선 네트워크 보안을 WPA3으로 설정하세요. Apple 지침에 따라 라우터와 액세스 포인트의 권장 설정을 지정하세요.
원격 SSH 연결의 경우, 암호 또는 하드웨어 토큰으로 보호되는 고유한 SSH 키를 사용하고, 서버 호스트 키를 확인하며, 비밀번호 기반 인증을 피하세요. 권장 클라이언트 옵션은 drduh/config/ssh_config를 참조하세요.
SSH 터널은 VPN과 유사하게 다른 컴퓨터를 통해 트래픽을 안전하게 라우팅할 수 있습니다. 원격 호스트의 8118 포트에서 실행 중인 Privoxy를 사용하려면:```bash ssh -C -L 5555:127.0.0.1:8118 [email protected] sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 5555 sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 5555
또는 SSH 연결을 [SOCKS 프록시](https://www.mikeash.com/ssh_socks.html)로 사용하려면:```bash
ssh -NCD 3000 [email protected]
기본적으로 macOS에는 원격 로그인 (SSH 서버)이 활성화되어 있지 않습니다.
SSH를 활성화하고 들어오는 연결을 허용하려면 시스템 설정 > 일반 > 공유를 사용하거나 다음 명령을 실행하세요:```bash sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
비밀번호 인증을 비활성화하고 SSH 서버 구성을 추가로 [강화](https://stribika.github.io/2015/01/04/secure-secure-shell.html)하는 것을 고려하십시오. 권장 옵션은 [drduh/config/sshd_config](https://github.com/drduh/config/blob/main/sshd_config)를 참조하십시오.
SSH 서버가 실행 중인지 확인하십시오:```bash
sudo lsof -Pni TCP:22
안전하지 않은 장소에 컴퓨터를 방치하지 마십시오. 숙련된 공격자는 감시가 없는 물리적 접근 권한을 이용해 하드웨어 키로거를 설치하여 비밀번호를 포함한 키 입력을 기록할 수 있습니다. 내장 키보드 또는 블루투스 키보드가 있는 Mac을 사용하면 이러한 공격이 더 어려워집니다. 많은 기성품 공격 도구가 USB 키보드와 컴퓨터 사이에 연결되도록 설계되었기 때문입니다.
Mac을 사용하는 동안 도난의 피해를 줄이려면 buskill/buskill-app 또는 Lennolium/swiftGuard 사용을 고려하십시오.
공공장소에서 사용할 프라이버시 스크린/필터 구매를 고려하십시오.
변조 감지를 위해 구성 요소에 매니큐어와 변조 방지 봉인을 적용할 수 있습니다.
Console 또는 log stream 명령으로 시스템 로그를 모니터링하십시오.
클래식 syslog 형식으로 지난 5분간의 모든 시스템 로그를 출력합니다:```bash log show --last 5m --style syslog
I'm ready to translate the provided content, but the input section is empty—no text was supplied for translation. Please provide the actual chunk content, and I'll translate it from English to Korean following all the specified rules.```bash
log show --last 5m --style json
줄바꿈으로 구분된 JSON을 출력합니다(줄마다 JSON 객체 하나). jq에 필요합니다:```bash log show --last 5m --style ndjson
메시지를 서브시스템별로 필터링합니다(예: `com.apple.SoftwareUpdate`에서):```bash
log show --last 1h --style json \
--predicate 'subsystem == "com.apple.SoftwareUpdate"'
내용을 기준으로 메시지를 필터링합니다(예: failed 포함):```bash
log show --last 1h --predicate 'eventMessage CONTAINS "failed"'
대소문자를 구분하지 않는 메시지 필터링:```bash
log show --last 1h --predicate 'eventMessage CONTAINS[c] "error"'
jq로 고유한 오류 메시지 세기:```bash
log show --last 1h --style ndjson
--predicate 'eventMessage CONTAINS[c] "error"' |
jq -r '.eventMessage' | sort | uniq -c | sort -nr | head -100
로그를 아카이브로 내보내면 Console에서 열 수 있습니다:```bash
log collect --last 1h --output ~/Downloads/logs-$(date +%F-%H%M).logarchive
시스템 무결성 보호는 DTrace를 방해하므로 사용 전에 부분적으로 비활성화해야 합니다.
iosnoop는 디스크 I/O를 모니터링합니다opensnoop는 파일 열기를 모니터링합니다execsnoop는 프로세스를 모니터링합니다errinfo는 실패한 시스템 호출을 모니터링합니다dtruss는 모든 시스템 호출을 모니터링합니다자세한 정보는 man -k dtrace를 참조하세요.
실행 중인 프로세스는 활성 상태 보기 또는 ps 명령으로 나열하세요.
열려 있는 네트워크 연결 나열:```bash sudo lsof -Pni
다양한 네트워크 관련 데이터 구조의 내용을 나열합니다:```bash
sudo netstat -n -p tcp
sudo netstat -n -p udp | sort | uniq
Wireshark는 tshark를 사용하여 명령줄에서 사용할 수 있습니다.
en0를 networksetup -listallhardwareports에 표시된 활성 인터페이스로 바꾸세요.
[!IMPORTANT] 승인된 네트워크와 시스템에서만 트래픽을 캡처하세요.
DNS 모니터링:```bash
/Applications/Wireshark.app/Contents/MacOS/tshark -i en0
-Y "dns.flags.response == 1" -Tfields
-e frame.time_delta
-e dns.qry.name
-e dns.a
-Eseparator=,
HTTP 모니터링:```bash
/Applications/Wireshark.app/Contents/MacOS/tshark -i en0 \
-Y "http.request or http.response" -Tfields \
-e ip.dst \
-e http.request.full_uri \
-e http.request.method \
-e http.response.code \
-e http.response.phrase \
-Eseparator=/s
TLS 인증서 모니터링:```bash
/Applications/Wireshark.app/Contents/MacOS/tshark -i en0
-Y "ssl.handshake.certificate" -Tfields
-e ip.src
-e x509sat.uTF8String
-e x509sat.printableString
-e x509sat.universalString
-e x509sat.IA5String
-e x509sat.teletexString
-Eseparator=/s -Equote=d
# 기타
## 화면 보호기
화면 보호기가 시작되면 즉시 화면을 잠그도록 설정합니다:```bash
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
진단 및 사용 데이터를 비활성화합니다.
크래시 리포터(앱이 충돌한 후 나타나며 문제를 Apple에 보고할지 묻는 대화상자)를 비활성화합니다:```bash defaults write com.apple.CrashReporter DialogType none
## 미디어 플레이어
음악 및 비디오 파일 재생에는 기본 제공 미디어 애플리케이션인 [QuickTime Player](https://en.wikipedia.org/wiki/Quicktime_player)를 사용합니다. 이 앱은 [App Sandbox](https://developer.apple.com/documentation/security/app_sandbox/protecting_user_data_with_app_sandbox), [Hardened Runtime](https://developer.apple.com/documentation/xcode/configuring-the-hardened-runtime)을 사용하며, 기본 시스템의 일부인 [Signed System Volume](https://support.apple.com/guide/security/signed-system-volume-security-secd698747c9/web)의 이점을 얻습니다.
## 파일 처리기
특정 파일 유형을 열 때의 위험을 줄이도록 [기본 파일 처리기](https://support.apple.com/guide/mac-help/choose-an-app-to-open-a-file-on-mac-mh35597)를 관리합니다.
스크립트 파일의 기본 앱을 변경하여, 스크립트 파일을 열 때 실행하지 않고 내용이 표시되도록 합니다.
Finder에서 아무 `.sh` 파일이나 찾아 선택한 다음, 해당 파일을 오른쪽 클릭하고 정보 가져오기를 선택하거나 <kbd>Command</kbd> + <kbd>I</kbd>를 누릅니다. "다음으로 열기" 섹션에서 드롭다운 메뉴의 TextEdit을 선택합니다. 목록에 없으면 "기타..." 및 응용 프로그램 > TextEdit.app을 선택합니다. "모두 변경..."을 선택하고 계속을 선택하여 확인합니다.
## Finder 옵션
Finder에서 숨김 파일 및 Library 폴더 표시:```bash
defaults write com.apple.finder AppleShowAllFiles -bool true
chflags nohidden ~/Library
모든 파일 이름 확장자 표시:```bash defaults write NSGlobalDomain AppleShowAllExtensions -bool true
문서를 기본적으로 iCloud에 저장하지 마십시오:```bash
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
사용자 지정 umask 설정:```bash sudo launchctl config user umask 077
재부팅한 다음, 파일/디렉토리를 생성하고 권한을 확인하세요(macOS 기본값은 'group/other' 읽기 액세스를 허용합니다):```console
$ ls -ld umask*
drwx------@ 2 user1 staff 64 Jul 26 12:00 umask.dir
-rw-------@ 1 user1 staff 32 Jul 26 12:00 umask.txt
터미널에서 보안 키보드 입력을 활성화합니다(TextExpander와 같은 앱과 충돌할 수 있음).
Bonjour 멀티캐스트 광고를 비활성화합니다(AirPlay 및 AirPrint 기능도 비활성화됨):```bash
sudo defaults write /Library/Preferences/com.apple.mDNSResponder
NoMulticastAdvertisements -bool YES
[Handoff 비활성화](https://support.apple.com/guide/mac-help/change-airdrop-handoff-settings-mchl6a407f99) 및 [Bluetooth](https://support.apple.com/guide/mac-help/turn-bluetooth-on-or-off-blth1008) 기능.
## Sudoers
macOS는 `/etc/sudoers`에 다음 줄이 포함되어 있습니다:```bash
Defaults env_keep += "HOME MAIL"
이것은 권한이 상승할 때 sudo가 HOME을 변경하는 것을 방지합니다. 그 결과, sudo로 실행되는 프로그램은 호출 사용자의 홈 디렉터리에 있는 구성 파일을 사용할 수 있습니다. 이 동작이 특별히 필요하지 않은 한 env_keep에서 HOME을 제거하는 것을 고려하세요.
루트 사용자가 비루트 사용자의 홈 디렉터리를 갖는 편의를 유지하려면 /var/root/.zshrc에 export 줄을 추가하세요. 예:```bash
export HOME=/Users/user1
# 관련 소프트웨어
Software | Category | Description
:-: | :-: | :-
[lynis](https://github.com/CISOfy/lynis) | 감사 스캐너 | 시스템 구성을 점검하고 하드닝 개선 사항을 제안하는 크로스 플랫폼 보안 감사 도구입니다.
[zentral](https://github.com/zentralopensource/zentral) | 모니터링 및 구성 플랫폼 | macOS 엔드포인트용 플릿 관리 서버로, 인벤토리, 이벤트, 감사 로그, osquery 결과를 수집합니다. 관리되는 환경에 가장 적합합니다.
[osquery](https://github.com/osquery/osquery) | 모니터링 엔진 | 운영체제 상태를 SQL 테이블로 노출하여 프로세스, 사용자, 시작 항목, 네트워크 연결 등을 반복적으로 점검할 수 있게 합니다.
[pareto-mac](https://github.com/paretoSecurity/pareto-mac) | 감사 스캐너 | 메뉴 막대에서 실행되는 앱으로, Mac이 일반적인 기본 보안 권장 사항에 부합하는지 점검합니다.
# 추가 자료
- [iCloud 보안 및 개인정보 보호 개요](https://support.apple.com/102651)
- [EFF 감시 자기방어 가이드](https://ssd.eff.org/)
- [beerisgood/macOS_Hardening](https://github.com/beerisgood/macOS_Hardening)
- [macOS 리버스 엔지니어링 블로그](https://reverse.put.as/)
- [리버스 엔지니어링 리소스](http://samdmarshall.com/re.html)
- [Malwarebytes 블로그](https://www.malwarebytes.com/blog)
- [Objective-See 블로그](https://objective-see.com/blog.html)
- [CIS 벤치마크](https://www.cisecurity.org/benchmark/apple_os/)
- [Apple 오픈소스](https://opensource.apple.com/)
- [iOS, macOS의 미래, 자유, 보안, 그리고 점점 더 적대적인 글로벌 환경에서의 개인정보 보호](https://gist.github.com/iosecure/357e724811fe04167332ef54e736670d)
| 공격자 | 동기 | 역량 | 완화 조치 |
|---|
| 룸메이트 | 개인 채팅이나 검색 기록을 본다 | 가까운 거리; 화면을 볼 수 있고 자격 증명을 관찰할 수 있음 | 생체 인증(지문 또는 얼굴) 사용, 개인 정보 보호 화면 사용, 사용하지 않을 때 휴대폰 잠금 |
| 도둑 | 휴대폰 잠금 해제, 개인 정보 탈취 및 은행 계좌 인출, 휴대폰을 돈으로 판매 | 암호 입력을 관찰하고, 방치된 로그인 상태의 장치를 훔침 | 항상 장치를 물리적으로 소지, 사용하지 않을 때 장치 잠금, 공공장소에서 암호 입력 피하기, Find My 또는 유사한 서비스를 사용하여 도난 장치 추적 또는 원격 비활성화 |
| 범죄자 | 금전적 이득 | 사회 공학(사용자를 속여 정보를 공개하거나 안전하지 않은 행동을 하게 만드는 것), 쉽게 구할 수 있는 맬웨어, 암호 재사용, 취약점 악용 | 소프트웨어 샌드박스, 운영 체제 보안 기능 활성화, 소프트웨어 업데이트 자동 유지 |
| 기업 | 사용자 데이터 기반 마케팅 | 원격 측정 및 행동 데이터 수집 | 네트워크 연결 차단, 장치별 식별자 재설정, 결제 데이터 추가 방지 |
| 국가/APT | 표적 감시 | 인터넷 인프라에 대한 수동적 감시, 고급 암호 분석 | 오픈소스 소프트웨어 사용, 강력한 diceware 자격 증명, 보안 요소가 있는 하드웨어, 사용하지 않을 때 장치 전원 끄기, 트립와이어/허니팟/카나리아 토큰 알림 |
| 명령 | 작업 |
|---|
sudo pfctl -t blocklist -T show | blocklist 표시 |
sudo pfctl -s rules | 활성 규칙 표시 |
sudo pfctl -s states | 상태 테이블 표시 |
sudo ifconfig pflog0 create | 패킷 로그 인터페이스 생성 |
sudo tcpdump -ni pflog0 | 차단된 패킷 모니터링 |
| 명령 | 작업 |
|---|
launchctl list | 사용자 작업 보기 |
sudo launchctl list | 시스템 작업 보기 |
launchctl list com.apple.Finder | 서비스 확인 |
systemextensionsctl list | 시스템 확장 프로그램 나열 |
ls /System/Library/LaunchDaemons | 시스템 데몬 나열 |
ls /System/Library/LaunchAgents | 시스템 에이전트 나열 |