Data Encryption

FileVault

macOS 기본 기능인 FileVault 를 사용하여 디스크를 AES-XTS 128 수준으로 암호화한다. T2 칩을 탑재한 Intel Mac 과 Apple Silicon Mac 에서는 Secure Enclave 하드웨어 덕분에 내장 저장장치에 한해 무작위 대입에 대한 추가적인 보호를 받으며, 220회의 비밀번호 오입력 이후 데이터를 접근 불가능하게 처리한다. 외장 저장장치의 경우 Encrypted APFS 방식으로 포맷하여 비슷한 수준의 암호화를 사용할 수 있다. DMG 이미지를 사용하여 이중 레이어 암호화를 구현할 수 있다.

아이폰과 아이패드에서 파일 앱을 통한 접근을 지원하지만, 비 Apple 운영체제에서 사용하기 위해서는 불안정하고 신뢰할 수 없는 소프트웨어에 의존해야 한다. 오픈소스가 아니라는 점도 아쉬울 수 있다. FileVault 보안에 대한 공개된 기술 사양은 아래 링크에서 확인할 수 있다:
https://support.apple.com/guide/security/volume-encryption-with-filevault-sec4c6dc1b6e/

Cryptsetup

Linux 에 내장된 LUKS 암호화는 여러 리눅스 배포판에서 표준적으로 암호화를 지원하기 위해 개발되었다. 비교적 최근에 개발된 LUKS2 는 LUKS 보다 향상된 알고리즘을 사용하여 무작위 대입에 대한 우수한 보호를 제공하며 실제 공격 속도 또한 크게 낮은 것으로 보인다:
https://blog.elcomsoft.com/2022/08/probing-linux-disk-encryption-luks2-argon-2-and-gpu-acceleration/

macOS 에서는 Linux VM 호스트 파일 공유 또는 Docker 컨테이너를 사용하여 접근할 수 있으며, Windows 에서는 최신 WSL2 기능을 사용하여 간편하게 마운트할 수 있다:
https://devblogs.microsoft.com/commandline/servicing-the-windows-subsystem-for-linux-wsl-2-linux-kernel/

LUKS 는 아직 파일 시스템 안정성이 부족한 것으로 보이므로 파티션 헤더를 백업하고 중요한 자료는 이원화하여 보관하는 것이 좋다. ISO 이미지를 사용하여 이중 레이어 암호화를 구현할 수 있다.
Gitlab: https://gitlab.com/cryptsetup/cryptsetup

VeraCrypt

VeraCrypt 에서만 열 수 있는 하나의 Vault 를 만들어 데이터를 보호한다. 암호화 알고리즘과 해시 함수의 조합을 헤더에 기록하지 않으며 LUKS2 와 함께 무작위 대입에 대한 강력한 내성을 가지고 있다. 수사 협조와 같은 상황을 대비해 가짜 암호를 설정하고 데이터를 은닉하는 Steganography 기능이 포함되어 있어, 위협 모델에 따라 가장 안전한 암호화 솔루션이 될 수 있다. Windows, macOS, Linux 를 모두 지원하지만 UNIX 운영체제에서 FUSE 파일 시스템의 설치를 요구한다는 단점이 있다.
Website: https://www.veracrypt.fr/en/
Github: https://github.com/veracrypt/VeraCrypt

Cryptomator

VeraCrypt 는 암호화된 모든 파일을 단일 Vault 에 집어넣기 때문에, 클라우드에서 사용할 경우 내부 파일 하나를 수정할 때마다 전체 Vault 를 다시 업로드해야 한다는 문제점을 가지고 있다. 이러한 문제점을 해소하기 위해 Cryptomator 는 AES-256 방식으로 각각의 파일을 .c9r 확장자로 암호화하고 파일명도 함께 암호화한다.

동기화를 위해 Vault 속 파일의 개수와 크기를 노출시키며 파일의 타임스탬프와 같은 메타데이터를 보존하지 않는 문제가 있다. Vault 안정성도 높지 않아 여러 파일을 동시에 처리하면 오류가 발생하므로, 적은 용량의 파일을 보관하는데 적합하다. Windows, macOS, Linux, Android, iOS 클라이언트를 모두 지원하지만 모바일에서는 유료로 제공된다.
Website: https://cryptomator.org
Github: https://github.com/cryptomator/cryptomator

7-Zip

오픈소스 소프트웨어인 7-Zip 을 사용하여 AES-256 수준으로 암호화된 압축 파일을 만들어 데이터를 보호한다. 7z 포맷은 솔리드 압축 방식을 사용하고 zip 포맷에 비해 범용성이 떨어지는 대신, 헤더를 암호화하여 파일의 메타데이터를 함께 보호할 수 있다. Windows, macOS, Linux 를 모두 지원하지만 Windows 에서만 GUI 인터페이스를 사용할 수 있다.
Website: https://www.7-zip.org

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 Security

SSL/TLS

웹 브라우저의 도메인에서 HTTPS 라는 단어를 본 적이 있을 것이다. HTTPS 는 HTML 전송 규격인 HTTP 하부에 SSL 레이어 보안을 추가하여 목적 서버의 신원을 검증하고 클라이언트와 서버 간 정보 교환의 무결성을 확인한다. 이 과정에서 서버에서 제시한 SSL/TLS 인증서가 클라이언트에 설치된 루트 인증서로부터 디지털 서명이 되었는지 검증한다. 기술적인 개념은 아래 링크에서 확인할 수 있다:
https://www.digicert.com/what-is-ssl-tls-and-https

TLS 인증서를 서명하는 최상단 루트 인증서는 공인된 CA 기관에서 발급되며 Comodo, DigiCert, GlobalSign 등이 있다. 신뢰할 수 있는 알려진 기관에서 서명된 인증서는 믿기로 한다. 인증서를 통한 검증이 끝나고 대칭 키 암호화 연결이 수립되면 인증서를 가지고 있는 클라이언트와 서버를 제외한 중간자는 목적 서버가 누구인지만 알 수 있을 뿐 어떤 정보를 주고 받는지 통신 내용을 복호화할 수 없다.

그러나 중간자가 인증서의 암호화에 사용되는 개인 키의 사본을 가지고 있으면 말이 달라진다. 기존 인증서의 키를 알아내는 것은 어렵지만, 사전에 개인 키를 알고 있는 인증서를 클라이언트에 설치하도록 유도하여 트래픽을 감청할 수 있다. 이는 영화에서나 볼 법한 상황이 아니며 카자흐스탄 같은 검열 국가에서 실제로 시도한 사례가 있다:
https://en.wikipedia.org/wiki/Kazakhstan_man-in-the-middle_attack

한국의 사정 또한 크게 다르지 않다. 공공 사이트에 접근하기 위해 요구되는 AhnLab Safe Transaction, TouchEn nxKey, Hancom AnySign4PC 같은 악성 소프트웨어는 설치를 위해 루트 권한을 요구하며 권한을 획득하자마자 운영체제의 인증서 저장소에 자신의 인증서를 추가한다. 이러한 인증서는 외부의 감사를 받지 않으며 개인 키의 사본을 불명확하게 관리하고 있어 기술적으로 감청이 가능하다. 애초에 개인 사용자가 루트 인증서를 설치할 일이 있어서는 안 된다.

TLS 기술이 검열을 우회할 수는 없을지라도 네트워크 트래픽을 암호화하여 중간 감청의 여지를 막아주기 때문에 필요 조건이라고 생각하는 것이 좋다. 다행히도 현대의 웹사이트는 대부분 HTTPS 연결을 지원한다. Safari 를 제외한 메이저 브라우저는 설정을 통해 HTTPS-Only 옵션을 제공한다. Safari 엔진을 강제하고 있는 iOS 운영체제에서는 이 기능을 사용할 수 없다. 이 기능을 사용하면 TLS 터널로 암호화되지 않는 HTTP 트래픽을 연결하기 전에 경고를 표시하거나 차단해주므로 반드시 활성화할 것을 권한다.

DNS

네트워크에 연결된 컴퓨터는 서로를 찾아 통신하기 위해 숫자로 구성된 고유의 IP 주소를 할당받아 가지고 있다. 웹 브라우저를 열고 인터넷을 접속하는 과정에서도 이 과정을 거치는데, 사람이 읽을 수 있는 주소를 머신이 읽을 수 있는 IP 주소로 변환해주는 것이 바로 DNS 이다. 따라서 우리는 이 IP 주소를 외우고 있지 않아도 주소 창에 amazon.com 을 입력함으로써 Amazon 서버의 인바운드 컴퓨터에 접속할 수 있게 된다. macOS 운영체제 기준으로 Terminal 앱에 traceroute 명령어를 사용하여 패킷의 이동 경로인 홉을 확인할 수 있다. 현재 내가 사용하고 있는 DNS 서비스는 아래 링크에서 확인할 수 있다:
https://dnsleaktest.com/

국가의 통제를 받는 ISP 에서 기본 제공하는 DNS 서비스는 검열을 이유로 올바른 값을 반환하지 않거나, 사용자의 쿼리 요청을 기록하고 신원과 매칭해 프로파일링하여 데이터를 합법적으로 판매한다. 이러한 DNS 는 라우터의 관리자 설정 또는 운영체제의 네트워크 설정에서 Cloudflare 등 선호하는 퍼블릭 DNS 서비스로 변경할 수 있다. 한편 DNS 쿼리를 암호화하는 DNS over HTTPS 기능은 VPN 을 사용하는 경우 불필요하거나 역효과가 발생하므로 잘 모르겠다면 기본값인 비활성화 상태로 두는 것이 권장된다.

Encrypted SNI

중간자에 해당하는 ISP 사업자는 목적 서버가 누구인지 알 수 있다. 이 때 만약 한 서버에 A 라는 서비스와 B 라는 서비스 두 개가 운용되면 클라이언트는 혼동을 방지하기 위해 A 라는 서비스에 접속하고 싶다고 DNS 요청 뒤에 부연 설명을 적어 보내는데, 이 값을 알아내면 목적 서버 뿐만 아니라 구체적으로 어떤 서비스에 접속하고자 하는지 알아차릴 수 있다. 한국은 DNS 요청 뿐만 아니라 SNI 필드를 스캔하여 목적 도메인을 감청하고 HTTPS 통신을 중단시키는 방식으로 인터넷 검열을 실시하고 있다.

이를 우회하기 위해 두 가지 해결책이 있다. 첫 번째 방법은 TLS 1.3 부터 지원되는 ESNI 또는 ECH 기술을 사용함으로써 SNI 를 암호화하는 것이다. 먼저 목적 서버와 암호화 연결을 수립한 후 SNI 요청을 전송하는 방식이지만, 클라이언트와 목적 서버 양쪽에서 모두 이 기능을 지원하는 경우에만 가능하다.

두 번째 방법은 VPN 을 사용하여 검열이 없는 국가의 서버를 거쳐 통신하는 것이다. VPN 은 ISP 를 지나는 사용자와 데이터 센터 사이의 통신에 한 겹의 암호화를 씌워주므로 ISP 사업자는 VPN 을 사용하고 있다는 사실과 패킷의 크기를 제외하고 알 수 있는 정보가 없다. 또한 목적 서버는 사용자의 실제 IP 주소가 아닌 데이터 센터의 IP 주소를 받게 되므로 위치를 가리는 효과가 있다.

VPN

VPN 은 ISP 사업자로부터 추적을 피하고, 공용 네트워크 접속을 보호하며, 인터넷 검열과 지역 제한을 우회하는데 적합하다. 여기서는 IP 주소를 가려주는 상용 VPN 서비스의 보안 측면에 대해서만 언급하기로 한다.

VPN 회사는 ISP 사업자와 동등한 권한으로 사용자의 인터넷 활동에 액세스하고 모니터링할 수 있다는 점을 주의해야 한다. 이에 더해 VPN 회사의 인증서가 클라이언트에 설치되면 VPN 회사는 TLS 터널 속 사용자 비밀번호 입력 등을 감청하고 사이트를 변조할 수 있게 된다. 실제로 악의적으로 설계된 일부 VPN 앱에서 시스템에 위조 인증서를 등록하여 MITM 공격으로 개인정보를 탈취한 사례가 있는데, 관련된 우려는 이곳에 VPN 을 키워드로 검색하여 확인할 수 있다:
https://customer.appesteem.com/deceptors

Proton VPN 등 일부를 제외하고 대부분의 VPN 기본 제공 클라이언트는 오픈소스가 아니다. 소스 코드가 투명하게 공개된 Passepartout, WireGuard 같은 클라이언트를 사용하는 것을 강력하게 권한다.

VPN 은 딜루미네이터가 아니다. VPN 이 보안과 개인정보 보호의 핵심인 것처럼 설명하며 리퍼럴 링크 클릭을 유도하는 글에 이제 속지 않길 바란다. 아래 글을 읽어보는 것이 도움이 될 수 있다:
https://blog.windscribe.com/lies-told-by-vpn-companies/

VPN in Restricted Countries

인터넷 검열이 심한 일부 국가에서는 국가의 안보 그리고 미래의 아동을 보호한다는 명목으로 ISP 레벨에서 암호화 패킷을 감지하고 의심스러운 연결을 차단하는 Deep Packet Inspection 기술을 적용하고 있다. 여행객과 단기 거주자는 검열이 없는 로밍 회선을 사용하면 되지만 내국인의 입장은 다르다. 특히 높은 수준의 DPI 가 적용되는 중국 본토의 Great Firewall 우회가 필요한 경우 조금 더 복잡한 방법이 요구될 수 있다.

먼저 유료 VPN 여러 개를 설치해두고 접속 가능한 서버가 있는지 찾아본다. CN 회선을 보유한 Express VPN 이 그나마 쾌적하다는 평가를 받고 있으며, 잘 연결될 경우 이 방식으로 사용하는 것이 가장 편리하다. Telegram 에서는 MTProto 라는 자체 우회 기술을 지원하므로 알려진 MTProto Proxy 서버에 접속하여 우회하는 것이 가능하지만, 실제로 중국 본토에서 잘 작동되지 않는다는 평가가 많다.

일반적인 VPN 서버가 모두 접속되지 않을 경우 트래픽을 불완전하게 암호화시키는 Proxy 를 사용해야 할 수 있다. Oracle, AWS 같은 클라우드 서버를 임대하여 일반적인 TLS 트래픽으로 위장시키는 디코이 Proxy 연결을 구성하거나, Shadowsocks 또는 v2ray 프로토콜을 지원하는 소규모 VPN 서비스를 시도해볼 수 있다. 트래픽을 보호하고 특정 지역으로 우회하기 위해 OpenVPN over Shadowsocks 구성을 사용할 수 있다. Tor 브라우저에서 meek-azure 브릿지를 구성하는 방법도 있지만 대역폭의 제한으로 속도가 처참히 느리다.

Disable IPv6

IPv6 없이 IPv4 만으로 웹사이트를 접속하는데 지장이 없기 때문에, 대부분의 VPN 서비스는 OTT 트래픽을 제외하고 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 환경에서는 Apple Configurator 또는 iMazing 앱을 사용해 커스텀 프로필을 설치하여 Cellular 환경에서의 IPv6 연결을 차단해줄 수 있다.

MAC Address Randomization

네트워크 관리자는 연결된 기기의 MAC 주소를 바탕으로 여러 네트워크에 어우르는 사용자의 인터넷 활동을 연관지어 프로파일링하기 용이해진다. iOS 운영체제는 비공개 WiFi 주소라는 기능을 통해 기기의 실제 MAC 주소를 전송하지 않고, WiFi 연결 시마다 고유 MAC 주소를 생성하도록 하여 이러한 추적으로부터 보호하는 기능을 내장하고 있다. Windows 10 이후 운영체제와 일부 Linux 배포판은 옵트인 방식으로 옵션을 지원한다. 그러나 macOS 운영체제는 아직 이 기능이 없기 때문에 사용자가 수동으로 MAC 주소를 스푸핑해주어야 한다.

먼저 Terminal 앱에 아래 명령어를 입력하여 사용할 랜덤 MAC 주소를 생성한다:

openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'

이렇게 생성된 6개 블록의 16진수를 드래그하여 복사한 후 다음 명령어의 형태로 실행한다. 아래의 MAC 주소는 예시이며 자신이 방금 복사한 주소로 붙여넣으면 된다.

sudo ifconfig en0 ether 8e:f3:2c:58:eb:95

스푸핑된 MAC 주소를 원래대로 돌리고 싶다면 재부팅하면 된다. CLI 대신 GUI 인터페이스로 된 아래 앱을 사용하는 방법도 있다:
https://github.com/halo/LinkLiar

Artifact Wiping

여느 운영체제가 그렇듯 macOS 또한 동작 과정에서 필연적으로 많은 Artifacts 를 생성한다. 오래된 로그는 시스템이 주기적으로 삭제하지만 때때로 자신의 사용 흔적이 기록되는 것이 불쾌할 수 있다. 로그를 최소한으로 남기고 싶다면, 암호화된 파티션 위에 격리된 Linux 가상머신을 사용하여 작업하고 스냅샷을 아카이빙하여 롤백하는 방법을 제안한다. 아래 글 중 일부는 이곳에서 참고했음을 알린다:
https://github.com/ForensicArtifacts/artifacts

FSEvents

FSEvents 프레임워크는 파일 시스템 디렉토리의 변경 사항에 대한 타임스탬프를 추적한다. FSEvents 가 기록하는 로그 파일은 볼륨 단위로 최상단 디렉토리의 .fseventsd 폴더에 기록되는데, 기본적으로 사용자가 접근할 수 없도록 권한이 제한되어 있어 우클릭 후 권한을 추가해주어야 한다. Catalina 이후 버전에서 아래 폴더에 접근하여 확인한 후 하위 디렉토리 파일을 삭제할 수 있다:

/System/Volumes/Data/.fseventsd

Spotlight

Spotlight 는 시스템 전반에 걸친 검색을 담당하는 기능으로, 디렉토리 구조에 대한 캐싱 파일은 이미 삭제한 파일에 대한 메타데이터 정보를 포함할 수 있다. 마찬가지로 사용자가 접근할 수 없도록 권한이 제한되어 있으며 아래 폴더에 접근하여 확인할 수 있다:

/System/Volumes/Data/.Spotlight-V100

Spotlight 기능을 비활성화하면 검색 기능을 사용할 수 없게 되므로, 하위 디렉토리 파일을 직접 삭제하는 대신 Spotlight 인덱싱을 재구성하는 것이 좋다. 특정 폴더 혹은 볼륨의 Spotlight 인덱싱을 재구성하는 방법은 아래 링크에서 확인할 수 있다:
https://support.apple.com/en-us/HT201716

QuickLook Cache

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

qlmanage -r cache

Terminal Logs

UNIX 계열 운영체제에서 Terminal 앱에 입력한 명령어는 사용 편의를 위해 기록된다. 아래 폴더에 접근하여 확인한 후 하위 디렉토리 파일을 삭제할 수 있다:

~/.zsh_history
~/.zsh_sessions

히스토리 기능의 사용 빈도가 낮다면 기록을 비활성화하거나 저장되는 수를 줄일 수 있다:

echo $HISTSIZE
export HISTSIZE=10

System Logs

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

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

첫 번째 디렉토리 하위의 asl 폴더는 사용자의 로그인 세션과 관련된 정보를 포함한다. 실제로 폴더를 삭제한 후 Terminal 앱에 last 명령어를 사용해보면 데이터가 나타나지 않는 것을 확인할 수 있다. 굳이 CleanMyMac 과 같은 써드파티 클리너 앱을 사용할 필요가 없다.

Kernel Logs

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

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

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

sudo log erase --all

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

CUPS Logs

CUPS 로그 파일은 사용자가 프린트한 이미지 또는 문서에 대한 정보를 포함할 수 있으며 아래 폴더에 접근하여 확인할 수 있다:

/var/spool/cups

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

cancel -a -x

Apple Unified Logs

AUL 로깅 시스템은 os_log 프레임워크를 사용하여 각종 이벤트에 대한 많은 진단 로그를 기록한다. 기술적인 세부 사항은 아래 링크에서 확인할 수 있다:
https://developer.apple.com/documentation/os/logging

아래 폴더에 접근하여 확인한 후 하위 디렉토리 파일을 삭제할 수 있다:

/var/db/diagnostics
/var/db/uuidtext

iOS Diagnostic Logs

동기화한 적 있는 iOS 디바이스의 진단 로그는 macOS 진단 로그와 다른 별도의 폴더에 저장된다. 아래 폴더에 접근하여 확인한 후 하위 디렉토리 파일을 삭제할 수 있다:

~/Library/Logs/CrashReporter/MobileDevice

iCloud Hidden Containers

iCloud 동기화를 사용하면 아래 경로에 클라우드 데이터의 로컬 사본이 생성된다. Finder 앱에서 접근할 수 없으며 Terminal 앱에 ls 명령어를 사용하여 전체 폴더를 확인할 수 있다. 설치한 적 있는 iOS 앱의 동기화 데이터가 여기에 포함된다.

~/Library/Mobile\ Documents

rm -rf 명령어를 사용하여 폴더 삭제를 시도하면 bird 데몬이 클라우드에서 다시 다운로드하기 때문에, 사실상 삭제가 불가능하다. 다행히도 대부분의 폴더는 비어 있으며 데이터가 있는 일부 폴더는 iCloud 설정 메뉴에서 관리할 수 있다.

Keyboard Dictionary

Predictive 기능은 키보드 자동완성 정확도를 위해 사용자가 입력한 단어와 관련된 정보를 저장한다. 아래 경로에 있는 파일을 삭제하여 Keyboard Dictionary 설정을 초기화할 수 있다:

~/Library/Spelling/dynamic-text.dat

iOS 에서는 설정 앱의 Reset Keyboard Dictionary 옵션을 사용하면 된다.

Secure Erase

일반적으로 저장 장치에서 파일을 삭제하면 즉시 원본 데이터를 지우는 것이 아닌, 원본 데이터를 가리키는 메타 데이터를 삭제하여 시스템이 파일을 삭제했다고 인식하게 된다. 하지만 각종 복구 유틸리티를 사용하면 메타 데이터가 지워지더라도 원본 데이터에 액세스할 수 있다. 따라서 해당 영역에 의미 없는 데이터를 여러 번 읽고 써서 삭제된 데이터를 복원하기 어렵도록 만드는데 이 과정을 흔히 Zero Fill 이라고 한다.

HDD

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

Terminal 앱에 내장된 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

Zero Fill 작업을 여러 차례 반복하여 복구 가능성을 낮출 수 있으나 기술의 발전 속도를 볼 때 신뢰할 수 있는 수준으로 확신하기는 어렵다. Terminal 앱에서 지원되는 영구 삭제 명령어는 특정 파일이 저장된 영역만 3차례 덮어쓰기하여 Zero Fill 할 수 있도록 하며, 마찬가지로 HDD 타입의 디스크에서만 효과가 있다:

rm -P (dragyourfilehere)

SSD

Solid State 저장 장치에서는 새로운 cell 에 데이터가 쓰이기 이전에 cell 의 값이 반드시 비워져야 한다. 데이터를 삭제할 때마다 각 cell 의 값을 비우면 쓰기 속도가 저하되고 Read disturb 효과에 따른 자동 작업의 수행을 방해하므로, SSD 의 TRIM 기능은 원본 데이터가 저장된 cell 에 stale 마킹해두고 논리 블록을 언제 삭제할지 판단하여 결정한다. 이러한 Garbage Collection 작업이 수행되면 복구 유틸리티는 NAND 컨트롤러의 FTL 레이어를 통해 cell 의 원본 데이터에 액세스할 수 없게 된다. 제조사에서 지원하는 ATA Secure Erase 작업을 수행하는 것 또한 도움이 될 수 있다. 한편 USB 포트로 연결된 외장 SSD 에서는 운영체제 레벨에서 TRIM 작업을 수행할 수 없다.

Physical Destruction

엄밀히 말하면, 위와 같은 작업을 수행하더라도 원본 데이터가 남아있지 않다는 것을 보장하지 못한다. 이미 데이터를 암호화되지 않은 상태로 저장했고 데이터의 삭제가 그만한 가치가 있다면 물리적으로 파괴하면 된다. HDD 의 경우 자기 차폐된 외장 케이스를 분해하고 내부에 있는 플래터에 네오디뮴 자석을 여러 번 문질러 데이터를 손실시킬 수 있다. SSD 의 경우 USB 에 고전압을 인가하여 회로를 전기적으로 망가뜨릴 수 있다. 이보다 더 강력하고 확실한 방법은 망치로 두들겨 바다에 던지는 것이다.

데이터의 안전한 삭제가 필요한 상황 중 전자기기를 중고로 판매하거나 타인의 손에 넘겨주는 상황이 있을 수 있다. 평소에 BitLocker, FileVault, LUKS2 같은 방식을 통해 전체 디스크 암호화를 사용한다면 빠른 포맷 한 번만으로 암호화 키를 삭제할 수 있어 적은 노력으로 데이터의 복구하기 어렵게 만들 수 있다.

Posted by:Superuser