현존하는 암호화 기술은 대부분 대칭키 알고리즘인 AES 방식에 기반하며, AES-256 수준의 암호화는 양자 컴퓨터에 대한 어느 정도 내성이 있는 것으로 알려져 있으나, 추후 기술이 발전함에 따라 취약해질 수 있습니다.

Data Encryption

FileVault 2

macOS 기본 기능인 FileVault 를 사용하여 APFS 포맷의 내장 파티션을 256비트 암호화 키를 사용한 AES-XTS 128 방식으로 암호화할 수 있다. 암호화 기술의 특성 상 마스터 비밀번호를 변경하더라도 보안에 부정적인 영향을 미치지 않는다. T2 칩을 탑재한 Intel Mac 과 M1 이후의 Apple Silicon Mac 에서는 Secure Enclave 하드웨어 덕분에 무작위 대입 공격에 대한 보호를 받으며, 220회의 비밀번호 오입력 이후 데이터를 접근 불가능하게 처리한다. 오픈 소스가 아니라는 점에서 아쉬울 수도 있겠지만 2022년 현재까지도 알려진 취약점은 없다.

FileVault 보안에 대한 세부 기술 사양은 아래 링크에서 확인할 수 있다:
https://support.apple.com/guide/security/volume-encryption-with-filevault-sec4c6dc1b6e/

External storage Encryption

외장 저장장치를 Encrypted APFS 방식으로 포맷하여, FileVault 2 와 동일한 기술로 128비트 수준의 Full-Disk Encryption 을 사용할 수 있다. 다만 무작위 대입 공격에 대한 보호가 불가능하므로 비밀번호를 충분히 길게 설정하는 것이 좋으며, APFS 볼륨 내부에 또 다른 비밀번호로 AES-256 방식으로 암호화된 DMG 컨테이너를 생성하여 이중 암호화를 구현하는 것도 가능하다. APFS 포맷 자체가 플래시 저장 장치에 최적화되어 있어, 외장하드에서 사용할 경우 디스크 단편화 현상에 따른 IO 속도 저하가 체감될 수 있다.

보다 자세한 사용 방법은 아래 링크에서 확인할 수 있다:
https://support.apple.com/guide/disk-utility/encrypt-protect-a-storage-device-password-dskutl35612/

VeraCrypt

VeraCrypt 에서만 열 수 있는 하나의 Vault 를 만들어 Full-Disk Encryption 방식으로 데이터를 보호한다. 기본적으로 256비트 암호화 키를 사용한 AES-XTS 128 방식으로 암호화를 지원하며 다른 방식도 사용할 수 있다. Windows 에서는 믿을 수 없는 BitLocker 를 대신하는 가장 신뢰할만한 암호화 방식이지만, macOS 에서는 FUSE 파일 시스템의 설치를 요구하기 때문에 다른 대안도 살펴보는게 좋을 것 같다.
Website: https://www.veracrypt.fr/en/
Github: https://github.com/veracrypt/VeraCrypt

Cryptomator – USD 11.99 for iOS

VeraCrypt 는 암호화된 모든 파일을 단일 Vault 에 집어넣기 때문에, 클라우드에서 사용할 경우 내부 파일 하나를 수정할 때마다 전체 Vault 를 다시 업로드해야 한다는 문제점을 가지고 있다. 이러한 문제점을 해소하기 위해 Cryptomator 는 AES-256 방식으로 각각의 파일을 .c9r 확장자로 암호화하고 파일명도 함께 암호화한다. Windows, macOS, Linux, Android, iOS 클라이언트를 모두 지원하지만 모바일에서만 앱스토어 수수료 때문인지 유료로 제공된다. 데스크탑에서 CyberDuck 또는 Mountain Duck 앱을 사용하면 조금 더 편하게 마운트하여 읽고 쓸 수 있다.
Website: https://cryptomator.org
Github: https://github.com/cryptomator/cryptomator

Password Manager

iCloud Keychain

Apple 에서 기본으로 제공하는 패스워드 매니저인 iCloud Keychain 은 운영체제의 마스터 비밀번호를 사용하여 end-to-end 암호화를 구현한다. 이 iCloud Keychain 에는 웹사이트의 비밀번호 뿐만 아니라 Airport WiFi 암호, iCloud 동기화 토큰, 때론 iokstg 같은 악질적인 추적 SDK 가 저장되기도 한다. 저장된 키체인은 iCloud 계정으로 로그인된 macOS 상에서 Keychain Access 앱을 통해 확인하고 수정할 수 있다. 적어도 Apple 생태계에서 가장 편리한 패스워드 매니저라는 점은 확실하다.
Website: https://support.apple.com/en-us/HT204085

Strongbox – Freemium / USD 59.99 for iOS / USD 29.99 for macOS

iOS, iPadOS, macOS 에서 웹사이트 비밀번호를 보기 위해 한 단계 더 암호화를 걸고 싶다면 Strongbox 가 적합하다. 비밀번호는 Keepass 기반의 오픈 소스 규격인 .kdbx 파일에 암호화하여 저장되며, 해당 파일을 원하는 클라우드에 저장하여 여러 기기에서 동기화하여 사용할 수 있다. 무료 버전에서는 Touch ID 또는 Face ID 와 같은 생체 인식을 사용할 수 없으며 다른 제한 사항은 없다.
Website: https://strongboxsafe.com
Github: https://github.com/strongbox-password-safe/Strongbox
App Store: https://apps.apple.com/us/app/strongbox/id1270075435

Network Privacy

VPN

미리 경고하지만 VPN 은 ISP 사업자로부터 IP 수집과 추적을 피하고, 인터넷 검열과 지역락을 우회하는데 적합하다. 익명성을 목적으로 한다면 OPSEC 을 철저히 하고 Tor over VPN 구성을 사용하는 것이 더 안전하며, VPN 은 단지 적은 노력과 비용으로 보안성을 높여주는 가성비 좋은 수단일 뿐이다.

사용자 수가 많은 Express VPN, Nord VPN 둘 중 하나를 쓰면 무난하다. 개인적인 경험을 말하자면 최근 3년간 Nord VPN 쪽이 한국 서버 속도가 가장 잘 나왔는데, 이번에 Express VPN 또한 서울 리전을 Nord VPN 과 동일한 서버로 교체하면서 좋아졌다. 두 회사 모두 24시간 라이브챗 상담이 가능하고 고객 응대 또한 만족스러웠다.

한편, 중국 본토의 Great Firewall 우회가 필요한 경우 VPN 에 접속하고 있다는 사실 자체를 숨겨야 한다. 2022년 기준 CN2 회선을 사용하는 Express VPN 이 그나마 낫긴 하지만 안정적이지 못하다. 이 때는 Oracle, AWS 같은 클라우드 서버를 임대하여 개인 Outline VPN 연결을 구성하거나, Shadowsocks 기반의 UCSS VPN 을 구독하는 방법을 생각할 수 있다. Tor 브라우저에서 meek-azure 브릿지를 구성하는 방법도 있지만 속도가 처참히 느리다.

IPv6 Leak Protection

현재 대부분의 VPN 은 확장된 IPv6 추적에 대한 보호를 제공하지 못한다. IPv6 없이 IPv4 만으로 웹사이트를 접속하는데 지장이 없기 때문에, Express VPN 의 경우 데스크탑 클라이언트에서, Nord VPN 의 경우 모든 플랫폼에서 IPv6 연결을 차단하는 방식으로 보호를 제공한다. 또는 직접 라우터에서 IPv6 구성을 비활성화하거나, WiFi 고급 설정에서 Configure IPv6 를 끌 수 있다. 해당 옵션이 보이지 않을 경우 Terminal.app 에 아래 명령어를 입력하여 비활성화할 수 있다:

sudo networksetup -listallnetworkservices
sudo networksetup -setv6off Ethernet
sudo networksetup -setv6off Wi-Fi

IPv6 연결이 필요한 경우 아래 명령어를 입력하여 다시 활성화해줄 수 있다:

sudo networksetup -setv6automatic Wi-Fi
sudo networksetup -setv6automatic Ethernet

참고로, iOS 환경에서는 macOS 앱인 Apple Configurator 2 툴을 사용해 커스텀 MDM 을 설치하여 Cellular 환경에서의 IPv6 연결을 차단해줄 수 있다.

Router

일부 라우터의 경우 VPN 기능이 내장된 것도 있으나, 실시간으로 암호화와 복호화가 이루어지는 과정에서 속도 저하가 불가피하므로 개별 디바이스에서 VPN 연결을 구성하는 것이 더 낫다. 가정용 네트워크의 경우 WPA3 Personal 을 지원하는 라우터를 사용하면 된다. 연결되는 Zigbee IoT 디바이스가 많거나 넓은 공간을 음영 지역 없이 구성하고 싶은 경우 Amazon Eero, Google Nest WiFi 같은 Mesh 라우터가 적합하다. 반대로 좁은 공간에서 소수의 디바이스에 높은 속도의 안정적인 연결을 원한다면 외장 안테나가 있는 ASUS 브랜드의 라우터가 적합하다.

Anti Fingerprinting

인터넷 서핑을 하던 도중 웹사이트에서 쿠키를 수집한다는 팝업을 본 적이 있을 것이다. 많은 사이트는 접속하는 사용자를 식별하기 위해 쿠키를 수집하지만, 쿠키의 개인정보 침해 가능성이 알려지면서 많은 사용자가 쿠키 수집을 차단하는 기능을 활성화하고 있다. Browser Fingerprint 는 쿠키 없이도 사용자를 식별할 수 있게 만드는 모든 정보를 말한다고 볼 수 있으며, 접속 운영체제 정보, 설치된 폰트, 브라우저 창 크기, 언어, 시간대 등 다양한 정보를 포함한다.

Chrome 은 이러한 측면에 있어서 최악의 보호 수준을 자랑하며, Safari, Brave, Firefox 브라우저 사용을 권장한다. Firefox 기준으로 about:config 설정에서 privacy.resistFingerprinting 값을 True 로 변경해주면 된다. 아래 사이트에 접속하여 자신이 접속한 브라우저가 Fingerprinting 에 대한 어느 수준의 보호를 제공하는지 확인할 수 있다:
https://panopticlick.eff.org
http://amiunique.org/fp
https://www.deviceinfo.me
https://browserleaks.com

History Removal

QuickLook Cache

Finder 에서 스페이스 바를 눌러 사진이나 영상을 미리 보거나, 파일의 썸네일을 만들 때 QuickLook 이라는 시스템 앱이 관여한다. QuickLook 이 생성하는 캐시는 사용자가 어떤 파일을 언제 처음으로 열어보았는지에 대한 정보를 담고 있다. 이러한 기록은 Terminal.app 에 아래 명령어를 입력하여 삭제할 수 있다:

qlmanage -r cache

System Logs

macOS 시스템이 생성하는 로그 파일은 사용자의 활동에 대한 민감할 수 있는 정보를 포함한다. 전체 로그는 Console.app 또는 아래 폴더에 접근하여 확인할 수 있다:

/var/log/
/Library/Logs/
~/Library/Logs/

최상위 로그 폴더를 제외한 나머지 파일을 지우더라도 시스템에 전혀 이상이 없으므로 마음껏 삭제해도 된다. 굳이 CleanMyMac 과 같은 써드파티 클리너 앱을 사용할 필요가 없다.

Kernel Logs

Kernel 레벨에서 생성하는 로그 파일은 시스템에 마운트했던 외장 저장장치의 Serial Number 과 같은 민감할 수 있는 정보를 포함한다. 전체 로그는 Terminal.app 에 아래 명령어를 입력하여 확인할 수 있다:

log show --predicate "processID == 0" --debug

Terminal.app 에 아래 명령어를 입력하여 삭제할 수 있다:

sudo log erase --all

참고로, Windows 환경에서는 USBDeview 나 USB Oblivion 같은 툴을 사용하여 USB 디바이스 접속 기록을 지워줄 수 있다.

Secure Erase

일반적으로 저장 장치에서 파일을 삭제하면 즉시 원본 데이터를 지우는 것이 아닌, 원본 데이터를 가리키는 메타 데이터를 삭제하여 시스템이 파일을 삭제했다고 인식하게 된다. 하지만 각종 복구 유틸리티를 사용하면 메타 데이터가 지워지더라도 원본 데이터에 액세스할 수 있다. 이러한 가능성을 안전하게 지우는 방법은 SSD, HDD 에 따라 다르다.

SSD

Solid State 저장 장치에서는 새로운 cell 에 데이터가 쓰이기 이전에 cell 의 값이 반드시 비워져야 한다. 그러나 cell 은 쓰기 수명이 정해져 있기에, SSD 의 TRIM 기능은 원본 데이터가 저장된 cell 을 언제 삭제할지 판단하여 결정한다. Terminal.app 에 아래 명령어를 입력하여 TRIM 기능이 파일 삭제 즉시 실행되도록 강제할 수 있다:

sudo trimforce enable

해당 명령어를 실행하고 재부팅한 후 원하는 파일을 삭제하면 된다. 그러나 TRIM 기능을 강제하면 시스템 성능에 심각한 저하가 올 수 있다. 따라서 원하는 파일을 삭제한 후 아래 명령어를 입력하고 재부팅하여 초기 상태로 되돌려주는 것이 좋다:

sudo trimforce disable

참고로 SSD 남은 수명은 smartmontools 명령어를 사용하여 대략적으로 확인할 수 있다. 먼저 아래 링크의 안내에 따라 Homebrew 를 설치한 후:
https://brew.sh
Terminal.app 에 아래 명령어를 순서대로 입력하여 확인할 수 있다:

brew install smartmontools
sudo smartctl -a /dev/disk0

HDD

전통적인 Rotational 방식의 저장 장치에서는 자기력을 이용해 데이터를 기록하므로, 데이터를 삭제하더라도 자기장의 흔적을 이용하여 삭제된 데이터를 복원하는 것이 기술적으로 가능하다. 따라서 해당 영역에 데이터를 여러 번 읽고 써서 삭제된 데이터를 복원하기 어렵도록 만드는데 이 과정을 흔히 Zero Fill 이라고 한다. Disk Utility 앱의 디스크 초기화 시 나타나는 Security Options 에서 보안 수준을 선택하면 된다. 보다 자세한 방법은 아래 링크에서 확인할 수 있다:
https://support.apple.com/guide/disk-utility/erase-and-reformat-a-storage-device-dskutl14079/

Terminal.app 에 내장된 diskutil 기능을 사용할 경우, HDD 전체가 아닌 빈 영역만 Zero Fill 하는게 가능하다:

diskutil secureErase freespace 1 /Volumes/Macintosh\ HD

0, 1, 2, 3, 4 중 하나의 숫자를 입력할 수 있으며 각각의 숫자가 의미하는 바는 아래와 같다.
0 – Single-pass zero-fill erase
1 – Single-pass random-fill erase
2 – US DoD 7-pass secure erase
3 – Gutmann algorithm 35-pass secure erase
4 – US DoE algorithm 3-pass secure erase

SSD, HDD 와 상관 없이 Copy-on-Write 를 지원하지 않는 JHFS+ 포맷으로 디스크를 초기화한 후 10GB 이상의 파일을 용량이 찰 때까지 복사하는 것도 좋은 방법이다. 기업에서는 HDD 디가우저나 SSD 분쇄 장치를 사용해 물리적으로 파괴하여 저장 장치의 복구 가능성을 없애기도 한다. 그러나 일반적인 사용자에게 이러한 수준의 파일 삭제가 필요한지 의문이다.

대다수의 사람들에게 조금 더 편리하고 현명한 방법으로, APFS Encryption 같은 방법을 이용하여 전체 디스크를 암호화하는 것을 제안한다. 디스크가 암호화된 상태에서는 빠른 포맷 한 번만으로 데이터를 효과적으로 읽지 못하게 만들 수 있다. 그러나 암호화된 디스크와 마스터 비밀번호가 함께 탈취되었다면 UFS Explorer Professional 과 같은 전문 복구 툴을 사용하여 삭제된 파일을 살려내는게 가능하다는 점을 염두에 두어야 한다.

Posted by:Leon

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s