HDD 포렌식 복구 불가 - HDD polensig boggu bulga

이 글은 아이폰, 안드로이드, HDD, SATA SSD, NVMe SSD, 외장하드, 외장SSD, 외장메모리, USB, SD카드, microSD에 있는 데이터를 전문기관에서도 복구할 수 없도록 영구적으로 완벽하게 삭제(이하 ‘완전삭제’)하는 방법을 다룬다.

완전삭제가 왜 필요한가. 일단 노트북, 외장하드, USB 따위를 중고로 팔 때 다른 사람에게 불필요한 정보가 넘어가지 않도록 하기 위해 완전삭제가 필요하다. 여기서 불필요한 정보란 본인의 여권 사진, 주민등록번호, 인터넷 탐색 기록과 같은 자기 자신의 정보뿐만 아니라, 그 컴퓨터·저장장치를 이용해 회사일을 처리한 경우 그와 관련된 엑셀 파일, 회사 메신저 및 이메일 기록, 인터넷 탐색 기록, 그리고 그 컴퓨터·저장장치를 이용해 친구와 커뮤니케이션을 한 경우 친구가 보낸 메신저, 이메일 같은 친구의 개인정보 등을 모두 포함하는 개념이다.

또한 개인정보 보호법에 따른 개인정보처리자는 개인정보를 파기할 때 완전삭제를 할 의무를 부담한다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
개인정보의 안전성 확보조치 기준 해설서(행정자치부, 한국인터넷진흥원)

여러 가지 고려사항

현재 기술로는, 완전삭제는 기본적으로 특정 기기 전체를 포맷하는 수밖에 없고 특정 파일만 또는 특정 프로그램만 삭제하는 것은 불가능하거나 매우 어렵다. 일단 SSD 등 플래시 메모리는 컨트롤러가 소위 black-box fashion으로 동작하기 때문에 운영체제 단에서는 특정 데이터가 저장된 특정 셀의 위치를 정확히 알아 내서 그 셀을 덮어쓰기하는 것이 불가능하고, HDD를 사용한다 하더라도 운영체제에는 캐시된 파일 데이터, 파일의 제목, 열어본 일시, 썸네일 등의 데이터가 NTFS USN 저널, 페이지 파일 등 다양한 곳에 남아 있을 수 있기 때문에, 특정 파일의 주된 데이터의 상당 부분을 날리는 것은 가능할지 몰라도 그 파일의 흔적을 전부 지우는 것은 불가능하다. 따라서 완전삭제를 위해서는 기본적으로 기기 또는 저장장치 전체를 포맷해야 한다.

기기 전체를 포맷하든, 아니면 특정 데이터만 선별 삭제하려고 갖가지 노력(cf. Eterovic-Soric et al., 2017; Singh & Singh, 2018)을 하든, 완전삭제를 하면 그 시점에 완전삭제를 했다는 증거가 남는다. 대부분의 경우에는 증거가 남아도 별 상관 없을 것이나, 간혹 완전삭제의 증거를 남기면 곤란해지는 특별한 사정이 있는 경우에는 이를 대비한 ‘정당한 핑계거리’를 만들어 두는 것이 좋을 수도 있다. 예를 들면 노트북을 업그레이드하고 기존 노트북을 중고로 팔면서 초기화시키는 것이다. 그러면 ‘나는 뭔가 감춰야 할 데이터가 있어서 포맷한 것이 아니라 중고로 팔려고 포맷한 거다’라고 말하며 빠져나갈 구멍이 생긴다. 다만 스마트폰은 이 시나리오를 쓰기 어려울 수도 있다. 기기를 업그레이드하더라도 데이터를 완전히 날려버리기보다는 기존 휴대폰을 백업 기능으로 백업해 놓았다가 이를 그대로 새 휴대폰에 복원시키는 경우가 많기 때문이다. 도난·분실 쪽으로 시나리오를 잡는 방안도 고려해 볼 수 있으나, 도난을 당했다고 주장하는 그 일시에 스마트폰 위치정보 기록을 보니 도난당했다고 주장하는 그 장소와는 전혀 다른 장소에 있었다든가, 도난당했다고 주장되는 카페의 CCTV를 돌려 봤을 때 휴대폰을 테이블에 두고 가거나 도둑이 와서 가져가는 장면이 찍혀 있지 않았다든가 하는 식으로 다른 기록과 조합돼 거짓말이 밝혀질 수 있는 위험이 존재한다. 이 문제에 대한 한 가지 해결방법은 아이폰→안드로이드, 안드로이드→아이폰 같은 식으로 기존에 쓰던 것과 다른 진영의 스마트폰으로 업그레이드하면서 기존 폰을 포맷하고 중고로 판매하는 것이다. 진영이 달라지면 어차피 기존 백업은 쓸 수 없게 되므로 백업-복원 절차를 거치지 않고 새 폰을 깔끔한 상태로 유지하더라도 자연스럽다.

또 한 가지 유의해야 할 점은, 요즘 같은 클라우드, 빅데이터, IoT 시대에는 데이터가 본인 소유의 저장장치에만 기록돼 있을 가능성은 희박하다는 것이다. 예를 들어 네이버에 로그인한 상태로 네이버 검색을 하면 그 사용자가 그 시점에 그 IP주소에서 로그인해서 그 검색어를 입력했다는 사실이 네이버 데이터센터에 기록으로 남는다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
네이버 데이터센터 ‘각’. 네이버는 용인 등지에 추가적인 데이터센터 건립을 계획하고 있다.

물론 로그인하지 않고 검색한 것들도 서버에 기록되며, 그 기록은 특정 사용자와 매치시킬 수 있다. HTML5 캔버스 핑거프린팅 등 각종 트래킹 기술 덕분이다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
네이버는 각종 트래킹 기법들을 통해 비 로그인 사용자도 고유하게 식별할 수 있다. 비단 네이버만 그런 것은 아니고 모든 IT기업들은 그렇게 한다. 그러지 않으면 경쟁에서 뒤쳐지기 때문에 하고 싶지 않아도 어쩔 수 없다.

검색처럼 우리가 적극적으로 뭘 하는 것만 기록으로 남는 것도 아니다. 특정한 뉴스를 클릭해서 보는 것과 같이 소극적으로 눈으로만 보는 것도 전부 기록으로 남는다. 사실 컴퓨터의 세계에서는 게시판에 글을 써서 업로드하는 거나 게시글을 클릭해서 그 텍스트 정보를 다운로드하는 거나 똑같은 ‘요청’이지 뭐는 적극적이고 뭐는 소극적이라는 그런 구분 개념이 없다. 뉴스 클릭과 같이 우리가 특정한 의도를 갖고 하는 ‘행위’뿐만 아니라 마우스 포인터를 움직이고 휠을 굴려서 스크롤바를 이동하는 등의 무의식적인 움직임도 사이트 운영자의 정책에 따라서는 전부 수집돼 기록으로 남기도 한다.

카카오톡 메시지처럼 수 일이 지나면 자동 삭제되므로 프라이버시 측면에서 걱정할 필요가 없다고 인식하고 있는 것들도 사실 생각만큼 그렇게 프라이버시가 강하게 보호되는 것은 아니다. 카카오톡의 경우 3일 후 삭제되는 것은 “대화내용”일 뿐, 특정 일시에 특정인에게 특정한 용량(바이트)의 메시지를 보냈다는 사실 자체 즉 메타데이터는 계속 남을 수 있다. 이 메타데이터를 이용하면 소셜 그래프social graph, 즉 누가 누구와 어떤 관계를 맺고 있고 얼마나 친한지 등을 알 수 있으며 카카오는 이를 광고 등에 활용할 수 있기 때문에, 카카오가 굳이 그 데이터를 알아서 삭제해 줄 것 같지는 않다.

이러한 클라우드 데이터를 삭제하는 것은 기본적으로 불가능하다고 보면 된다. 남의 컴퓨터에 저장된 남의 데이터이기 때문이다. 심지어 눈에 보이는 삭제버튼이 있는, 예를 들면 게시판에 올린 댓글의 경우에도 ‘삭제’ 버튼을 누르면 DB에서 deleted=0deleted=1로 바뀌는 것일 뿐 실제 댓글 내용 자체가 서버의 데이터베이스 파일에서 없어지는 것은 아니다. 간혹 그냥 삭제가 아닌 수정 후 삭제를 하면 덮어쓰기가 되기 때문에 삭제가 가능하다고 주장하는 사람도 있으나, 나무위키의 문서 편집내역을 보면 알 수 있듯이 실제로는 글이나 댓글을 수정하면 버전관리 형식으로 수정내역이 추가로 기록될 뿐 덮어쓰기가 이루어지는 것은 아니다. 물론 이런 글이나 댓글의 경우에는 삭제 버튼을 누르고 일정 기간이 지나면 서버에서도 삭제될 가능성이 있기 때문에 삭제를 안 하는 것보다는 하는 것이 낫긴 하지만, 요지는 클라우드 데이터를 확실하게 완전삭제하고 싶다면 애초에 그 데이터를 만들지 않는 방법밖에 없다는 것이다. 글, 댓글을 쓰지 않는 것뿐만 아니라 앞서 말했듯이 검색을 하지 않고, 글을 클릭해서 읽지도 않고, 마우스 포인터와 스크롤을 움직이지도 않는 것까지 포함이다. 이러한 목적을 달성하기 위해서는 항상 토르 브라우저를 사용하는 것 외에는 마땅한 방법이 없다.

다만 클라우드 데이터라는 게 꼭 웹 브라우저 트래킹을 통해서만 생성·수집되는 것은 아니기 때문에 토르 브라우저를 쓰는 것만으로 완벽한 방어가 되는 것은 아니다. 예를 들어, ⁂ 윈도우10에는 기본적으로 Windows Defender SmartScreen이라는 보안 기능이 켜져 있어서, 우리가 윈도우상에서 토르 브라우저를 포함해 어떤 프로그램을 이용해서든 파일을 다운받으면 윈도우는 다운받은 파일에 맬웨어가 설치돼 있는지 여부를 알아보기 위해 그 파일의 제목, 해쉬값, 파일을 다운받은 사이트 URL 등의 정보를 해당 컴퓨터에 고유하게 부여된 식별자와 함께 마이크로소프트로 전송한다. 즉, 토르 브라우저를 쓰더라도 그걸로 다운받은 파일들의 리스트는 마이크로소프트가 클라우드 데이터의 형식으로 보유한다. ⁂ 윈도우10을 설치할 때 디폴트 세팅을 그대로 유지했거나, 윈도우10이 설치된 노트북을 새로 구입해서 사용하면서 디폴트 세팅을 건드리지 않았다면 설정앱에서 개인 정보 – 피드백 및 진단 – 진단 데이터가 ‘전체’로 설정돼 있을 것이다. 이 경우 윈도우는 사용자가 어떤 이름의 프로그램을 언제 실행시켜서 언제 종료했는지에 대한 역사적인 기록을 생성해 마이크로소프트로 전송한다. ⁂ 인터넷에서 물건을 주문하면 이메일로 영수증이 오기 마련인데, 그 이메일 회사(가령 Gmail을 쓰는 경우 구글)는 사용자의 이메일 내용을 분석해 사용자가 언제 어떤 물건을 구입했는지를 데이터베이스로 만들어 불확정한 기간 동안 보관하면서 빅데이터 분석을 가한다.* ⁂ 오프라인 상점에서 물건을 구입하면서 카드결제를 하면 그 기록은 카드사와 판매자는 물론, 이니시스 같은 VAN사·결제대행사, 국세청, 본인의 거래은행(통장내역) 등 다양한 개인정보처리자에게 전달된다. 또한 우리나라에서도 그런지는 알 수 없지만 미국의 경우 오프라인에서 카드결제한 기록은 구글로 전송돼 데이터베이스화된다.*

클라우드 데이터가 삭제될 가능성을 조금이라도 높여 보기 위해서는, 삭제 가능한 데이터를 모두 삭제한 뒤 ‘회원탈퇴’를 하는 것이 한 가지 방법이 될 수 있다. 대한민국의 경우 개인정보 보호법 37조에 의하면 정보주체가 개인정보의 처리정지를 요구하면 개인정보 처리자(e.g., 웹사이트)는 특별한 사정이 없는 한 거기에 따라야 하고, 회원탈퇴는 개인정보 처리정지의 의사표시로 해석되기 때문에 회원탈퇴를 하면 웹사이트 측이 그간 수집한 개인정보를 적어도 법적으로는 대놓고는 사용하지 못하게 될 가능성이 있다. 다만 개인정보 보호법 2조 1호는 “살아 있는 개인”에 관한 개인정보만 보호하고 있기 때문에 회원탈퇴를 하더라도 사망 후에는 그간 수집된 개인정보가 합법적으로 활용될 수 있다는 점은 고려해야 할 것이다. 그리고 당연한 말이지만 회원탈퇴를 하면 특정 회원이 특정 일시에 회원탈퇴를 했다는 사실이 회사측에 기록으로 남는다.

구글 등 이메일을 지원하는 사이트에서 회원탈퇴를 할 땐 그 이메일을 못 쓰게 되는 것도 생각해야 한다. Gmail을 메인으로 쓰고 있던 사람의 경우 해당 구글 계정을 탈퇴해 버리면 그 Gmail 주소로 가입한 다른 사이트에 로그인하는 것이 불가능해지므로(비밀번호를 알고 있다 하더라도 다수의 사이트들은 중요한 작업을 할 땐 이메일 인증을 요구한다), 그 다른 사이트들을 회원탈퇴하는 길이 원천 차단돼 버린다. 이를 방지하기 위해서는 먼저 해당 Gmail 계정으로 가입한 다른 사이트들을 모두 찾아 내서 그 사이트들부터 일일이 하나씩 회원탈퇴를 하거나 회원정보와 연동된 이메일 주소를 Gmail이 아닌 다른 이메일 주소로 변경한 뒤에 비로소 구글 계정을 회원탈퇴해야 한다. 참고로 구글, 네이버 등 빅데이터 회사의 이메일 대신 사용하기에 가장 무난한 이메일은 ProtonMail이다.

암호화

암호화란 평문cleartext과 암호화 키encryption key를 이용해 암호문ciphertext를 생성하는 과정을 말한다. 일반적으로 널리 쓰이는 암호화 알고리즘이 사용된 경우, 암호화 키를 비밀로 간직하면 암호문 자체가 공격자에게 노출되더라도 공격자는 그 암호문을 복호화(평문으로 해독해 내는 것)할 수 없다. 여기서 ‘암호화 키’와 ‘비밀번호’는 엄밀하게는 전혀 다른 개념이지만, 대부분의 암호화 프로그램들은 사용자가 입력한 비밀번호를 scrypt를 비롯한 키유도함수key derivation function에 통과시킴으로써 암호화 키를 생성해 내고 그렇게 생성한 암호화 키를 통해 암호문을 평문으로 복호화시키는 구조로 돼 있으므로, 실질적으로는 ‘비밀번호’=’암호화 키’라고 이해해도 크게 틀린 것은 아니다.

잘 생각해 보면, 우리가 데이터 완전삭제를 하고 싶어하는 이유는 애초에 데이터를 암호화되지 않은 평문 상태로 저장해 두었기 때문이다. 데이터가 처음부터 암호화된 상태로 저장돼 있었다면, 비밀번호를 강력한 것으로 만들어 두었고 또한 비밀번호가 유출되지 않게 잘 관리했다는 전제 하에, 그 암호화된 데이터가 유출돼도 큰 타격이 없을 것이기 때문이다.

요즘은 아이폰, 안드로이드, 윈도우, 맥, 리눅스 등 OS 자체에서 디스크 암호화full-disk encryption를 기본으로 지원하는데, 이 기능을 켜면 그 이후로는 사용자가 암호화에 대해 딱히 신경쓰지 않아도 자동으로 모든 데이터에 대해 암호화가 이루어지므로 매우 편하다. 윈도우에서 디스크 암호화를 켜는 방법은 별도의 포스팅을 참조하기 바란다. 맥은 설정에서 FileVault를 켜면 되고, 리눅스는 gnome-disks에서 LUKS를 켜면 된다. 아이폰은 따로 암호화를 켜지 않아도 디폴트로 암호화가 켜져 있으며, 안드로이드는 확실하지는 않지만 최근에 구입한 신형이라면 아마도 디폴트로 암호화가 켜져 있을 가능성이 높다.

디스크 암호화든 파일 단위의 개별 암호화든, 암호화는 암호화를 켠 이후부터 새로 저장되는 데이터에 대해서만 효과를 발휘함에 유의하기 바란다. 디스크 암호화를 켠다고 해서 지금까지 평문으로 저장된 데이터가 자동으로 전부 삭제되는 것은 아니라는 것이다. 예를 들어 100GB SSD에 1GB 데이터가 저장돼 있는 상태에서 BitLocker 등 디스크 암호화를 켜되, 빈 공간을 포함하지 않고 현재 있는 파일만 암호화하는 옵션을 선택했다고 하자. 이 경우 윈도우는 1GB의 평문 데이터를 이용해 1GB의 암호화된 데이터를 생성한 다음 이를 SSD에 기록한다. 이 때 새롭게 기록되는 1GB의 암호화된 데이터가 기존에 있던 1GB의 평문 데이터와 정확히 같은 셀에 기록돼서 덮어쓰기가 이루어질 거라는 보장은 없으며, 기존 데이터는 온전히 남아 있는 상태로 빈 공간에 암호화딘 데이터가 기록될 가능성도 상당하다. BitLocker를 켜면서 빈 공간까지 포함한 디스크 전체를 암호화하는 옵션을 선택한다 해도 이 문제가 완전히 해결되지는 않는다. 이 경우 윈도우는 100GB SSD의 경우 100GB의 데이터를 생성해서 기록하기 때문에 해당 SSD에 숨겨져 있는 일종의 overprivisioning space에는 약간의 데이터가 남아 있을 수 있다. 따라서 기존에 평문으로 저장된 데이터가 있는 경우에는 암호화를 걸더라도 그 전에 미리 완전삭제를 한 번 거치는 것이 나을 수 있다.

백업

저장장치를 포맷하기 전에 필요한 데이터를 백업해 두어야 하는 것은 당연하다. 백업할 땐 먼저 백업용으로 쓰는 외장하드 등 저장장치에 BitLocker 등 디스크 암호화를 걸어 두는 것이 좋다. 그러지 않으면 백업용 외장하드 자체도 다시 완전삭제를 해야 하는 귀찮은 일이 발생할 수 있기 때문이다. 윈도우(BitLocker), 리눅스(LUKS)는 시스템 디스크 암호화하는 것과 동일한 방법으로 외장하드를 암호화할 수 있으며 macOS는 Finder에서 해당 외장드라이브 우클릭 후 ‘암호화’를 선택하면 된다. 이 때, 윈도우에서 BitLocker로 암호화한 외장하드는 윈도우에서만, 맥에서 암호화한 외장하드는 맥에서만, 리눅스에서 LUKS로 암호화한 외장하드는 리눅스에서만 편하게 열어볼 수 있음에 유의하기 바란다.

BitLocker를 지원하지 않는 윈도우 Home 버전, 그리고 스마트폰에서는 외장하드를 암호화시키는 편한 방법이 존재하지 않는다. 윈도우 Home 사용자는 Pro로 업그레이드하는 것을 추천하고, 스마트폰의 경우에는 USB 저장장치를 연결해서 그쪽으로 파일을 넣거나, USB로 컴퓨터에 연결해서 컴퓨터로 파일을 보내거나, 종단 간 암호화(end-to-end encrypted)된 인터넷 통신으로 데이터를 컴퓨터로 전송하는 방법으로 백업하는 것을 추천한다. 여기서 ‘종단 간 암호화된 인터넷 통신’에 이메일, 카카오톡, 텔레그램은 포함되지 않는다. 스마트폰과 컴퓨터 간에 종단 간 암호화된 통신으로 파일을 전송하는 가장 좋은 방법 중 하나는, 오픈소스 암호화 메신저인 시그널Signal을 이용하는 것이다.

백업시에는 본인이 직접 관리하는 파일뿐만 아니라 프로그램이 사용하는 데이터들도 빼놓지 않고 백업할 수 있도록 유의한다. 공인인증서는 윈도우 탐색기에서 검색창에 NPKI 종류:=폴더라고 검색하면 쉽게 찾을 수 있다. 브라우저 북마크는 Export 기능을 이용해 파일 형태로 만들어 백업하면 된다. 카카오톡 대화내역은 앱 자체에 텍스트 파일로 내보내는 기능이 있다. 문자메시지함에 있는 문자와 이메일 앱에 있는 이메일도 필요시 백업하는 것이 좋다. 그 외에 노트 앱에 적혀 있는 메모사항, 클라우드에 동기화되지 않는 로컬 패스워드 매니저를 사용 중인 경우 그 데이터베이스 파일, 로컬 캘린더 앱을 사용 중인 경우 그 데이터 파일도 내보내기 등의 방법으로 백업한다. 기본적으로 해당 기기에 설치돼 있는 모든 앱과 프로그램을 하나씩 짚어 보면서 그 안에 뭔가 백업해야 할 데이터가 있지 않은지 검토해 보는 것이 안전하다.

요즘은 아이폰, 안드로이드, 맥 등 운영체제에서 자체적으로 클라우드 백업 기능을 제공하기도 하나, 이런 기능을 쓰면 완전삭제의 의미가 퇴색될 수 있으므로 주의해야 한다. 백업 기능으로 백업을 해 놓고 아주 철저하게 완전삭제를 한 후에 기존 백업을 복원에서 이전과 똑같은 상태로 만들면 도대체 완전삭제를 한 것이 무슨 소용인가. 완전삭제를 할 땐 백업은 기본적으로 수동으로 외장하드 또는 USB에 하는 것이 좋다.

기기와 싱크되는 클라우드 계정 처리하기

요즘은 컴퓨터, 스마트폰 등 본인 소유의 전자기기도 로그인을 해서 사용하는 시대가 됐다. 윈도우는 사용자가 각고의 노력을 기울여 회피하지 않는 한 어떤 식으로든 마이크로소프트 계정에 로그인이 되도록 설계돼 있고, 애플 아이폰은 애플 계정에, 구글 안드로이드는 구글 계정에 로그인해야 정상적으로 사용할 수 있다.

이 경우 OS에서 자체 제공되는 여러 가지 편의 기능을 사용하면 그와 관련된 데이터들이 마이크로소프트, 애플, 구글 클라우드로 전송돼 동기화되는 경우가 많다. 가령 안드로이드 사용자는 대부분 Gmail을 메인으로 쓸 텐데 그 데이터가 구글 서버에 있는 것은 너무나 당연하고, 구글 캘린더로 일정관리를 하고 구글 드라이브로 스캔을 하고 파일을 관리하며 구글 킵으로 메모를 하면 당연히 그 모든 데이터들은 구글 서버에 동기화된다. 이런 식으로 안드로이드를 사용하던 사람이 휴대폰을 힘들게 완전삭제하고, 기쁜 마음으로 초기화된 휴대폰에 본인의 구글 계정으로 로그인한다면, 그 순간 기존 폰에 있던 백업, 지메일, 캘린더, 드라이브, 메모 내역들이 다시 새 폰으로 다운로드돼 동기화된다. 기껏 완전삭제를 한 의미가 없는 것이다.

이런 사태를 방지하려면 데이터 삭제를 하기 전에 미리 클라우드에 동기화된 데이터에 대해서도 적절한 조치를 취해 놓을 필요가 있다. 여기서 ‘적절한 조치’란 대부분의 경우 회원탈퇴를 말한다. 윈도우 유저는 마이크로소프트 계정을, 안드로이드폰 유저는 구글 계정을, 애플 디바이스 유저는 애플 계정을 가장 먼저 처리해야 할 것이다. 에버노트, 드랍박스, 마이크로소프트 원노트 등 소소한 서드파티 계정들도 처리해야 할 필요가 있을 수 있다.

회원탈퇴를 하기 위해서는, 먼저 계정에 들어 있는 데이터 중 필요한 것들을 백업하고 삭제할 수 있는 것들은 삭제한다. 구글 계정은 Google Takeout에서 본인과 관련한 여러 가지 데이터를 다운받아 백업할 수 있고, 구글 My Activity 및 My Account에서 일부 데이터를 삭제할 수도 있다. 여기서 삭제를 한다고 그게 진짜로 삭제되는 건지는 알 수 없지만 그래도 안 하는 것보다는 하는 게 나을 것이다. 마이크로소프트 계정은 Privacy Dashboard에서, 애플 계정은 Data and Privacy에서 데이터 관리를 할 수 있다.

MS Outlook, 구글 Gmail, 애플 iCloud Mail 등 이메일 서비스를 이용하고 있었다면, 탈퇴를 하기 전에 그 이메일 주소로 가입된 다른 사이트들도 전부 탈퇴하거나 회원정보와 연동된 이메일 주소를 ProtonMail 등으로 일일이 바꿔 놓아야 한다. 그러지 않고 이메일 계정만 탈퇴해 버리면 나중에 그 이메일 계정을 쓰는 다른 사이트에서 회원탈퇴를 하지 못하게 될 수 있다.

조직organization 계정인 경우. 윈도우에 로그인할 때 학교 이메일, 회사 이메일을 사용하고 있었기 때문에 해당 계정을 탈퇴할 수가 없는 상황이라면 어떻게 해야 할까? 사실 이런 조직에서 부여받은 계정은 조직 업무용으로만 사용해야지 개인용으로 사용하면 안 된다. 조직 계정과 연동된 클라우드 데이터(가령, 이메일을 주고받은 내용 등)는 본인이 소속된 조직의 자산이며, 조직이 자유롭게 들여다 볼 수 있다. 개인정보로서 보호받지 못한다는 것이다. 탈퇴 가능 여부를 논할 것도 없이 애초에 조직 계정을 개인용으로 사용한 것 자체가 프라이버시 측면에서는 매우 나쁜 선택이었다.

하지만 ‘이미’ 그러한 실수를 해 버린 상태라면? 그럴 땐 차선책으로 계정 탈퇴는 하지 않되, 삭제가 가능한 데이터는 최대한 삭제버튼을 눌러서 삭제를 해 보는 것이 좋을 수 있다. 인터넷에서 삭제버튼을 누른다고 실제 클라우드 서버상에서 삭제가 이루어질지는 알 수 없지만 그나마 할 수 있는 데까지는 해 봐야 하지 않겠는가.

애플 아이폰, 아이패드 삭제 방법

애플의 iOS Security: iOS 12.3 (2019) 문서에 의하면 iOS 8.0부터는 아이폰과 아이패드에 저장된 모든 유저 데이터는 AES-256으로 암호화돼 있으며, 아이폰 설정앱에서 초기화 버튼을 누르면 기기에 저장된 암호화 키가 삭제돼 기존의 암호화된 데이터가 읽을 수 없는 상태로 된다고 한다. 즉 암호학적 삭제cryptographic erase가 이루어진다는 것이다. 암호학적 삭제도 완전삭제의 일종이므로, 만약 이 문서의 내용이 사실이라면 애플 디바이스는 그냥 공장초기화 버튼을 누르는 것만으로 완전삭제가 된다고 할 수 있다. 실제로 2019. 3.경 연예인인 정준영이 버닝썬 사건으로 수사받던 중 아이폰을 공장초기화하고 경찰에 제출했을 때 경찰은 복구하지 못했다.

다만 애플의 설명서에 의하면 초기화하기 전에 몇 가지 해야 할 작업들이 있다고 한다. 2019. 7. 현재 기준으로 필요한 작업은 ① 애플 워치와의 페어링 해제하기, ② 백업하기, ③ 아이클라우드, 아이튠즈 및 앱스토어에서 로그아웃하기다. 만약 애플 외의 다른 회사 폰으로 갈아타는 경우에는 ④ 아이메시지 등록도 해제해야 한다고 한다. 그런 다음 설정 – 일반 – 재설정 – 모든 콘텐츠 및 설정 지우기 를 선택해 공장초기화한다.

안드로이드폰 삭제 방법

안드로이드는 구글의 명성에 걸맞지 않게 전통적으로 보안이 매우 취약한 폰이었다. 킷캣(4.4) 미만 버전은 심지어 장치 암호화device encryption를 걸어 놓은 상태로 공장초기화를 해도 암호화 키가 삭제되지 않아 공격자가 초기화 이전에 이전에 쓰던 PIN번호를 브루트 포스로 뚫음으로써 복호화를 할 수 있을 정도였고(Simon & Anderson, 2015), 구글의 레퍼런스 폰인 넥서스 시리즈를 포함하여 장치 암호화가 걸려 있지 않은 폰은 공장초기화를 해도 대부분의 데이터를 복구할 수 있었다(Shu et al., 2017).

다만 테크 산업은 빠르게 변하기 때문에 몇 년 전에 보안이 취약했다고 해서 꼭 지금도 취약하리라는 법은 없고, 2019년 현재의 안드로이드폰 보안 상태가 어떤지는 아직 확실하게 알려져 있지 않다. 안드로이드폰은 구글에서 중앙통제식으로 만드는 게 아니라 기기 암호화, 초기화 등 보안기능조차도 각 제조사들이 독자적으로 구현하기 때문에 그런지, 구글에서는 애플의 iOS Security와 같은 명확한 보안 백서를 내놓지 않고 있다. 인터넷 검색으로 살펴본 풍문들에 의하면, 최초 구입 당시 안드로이드 누가(7.0) 또는 그 이후 버전이 설치돼 있던 폰은 아이폰과 마찬가지로 암호화가 기본으로 켜져 있을 가능성이 높다고 한다. 갤럭시의 경우 S8 이후 버전이 이에 해당한다. 이 경우 아이폰과 마찬가지로 설정에서 공장초기화만 하면 완전삭제가 될 가능성이 높으나, 확실하지는 않다. 좀 더 확실하게 하려면 공장초기화 이후 수동으로 완전삭제를 해 보는 게 좋을 수도 있다.

최초 구입 당시 안드로이드 마시멜로우(6.x) 또는 그 이전 버전이었던 폰은 설령 나중에 안드로이드 7 이상으로 업그레이드했다 하더라도 암호화가 켜져 있지 않을 가능성이 높다(cf. Leom et al., 2016). 이 경우에는 수동으로 완전삭제를 해 줘야 한다. 그 방법은 다음과 같다. ① 외장메모리(microSD)를 제거한다. ② 설정에서 ‘디바이스 암호화’를 찾아서 켠다. ③ 내장메모리 용량이 가득 찰 때까지 뭔가 용량 큰 파일을 계속 집어넣거나 다운받는다. 최대한 덮어쓰기를 시켜 보기 위함이다. ④ 설정에서 공장초기화를 한 다음, 1~4까지의 과정을 한 번 더 반복한다. 이렇게 해서 두 번째 공장초기화까지 완료됐으면 어느 정도까지는 완전삭제가 됐을 가능성이 높다. 다만 확실하지는 않다.

애플 Mac 내장 SSD 삭제 방법

T2가 탑재된 맥. 2017년형 아이맥 프로, 2018년형 맥 미니, 2018년형 맥북 에어, 2018년형 맥북 프로,* 2019년형 맥 프로에는 TPM과 유사한 기능을 하는 T2 Security Chip이라는 프로세서가 탑재돼 있다. 2019년형 그냥 아이맥에는 T2가 들어 있지 않으나 아이맥의 다음 리디자인(2020)부터는 탑재될 것으로 예상된다.

애플의 Apple T2 Security Chip: Security Overview (2018) 문서에 의하면, T2가 탑재된 맥은 macOS의 디스크 암호화 기능인 FileVault가 비활성화된 상태에서도 자동으로 volume key를 이용해 저장장치에 기록하는 데이터가 암호화되며, 볼륨이 삭제되면 그 volume key를 암호화하는 데 사용된 media key (디바이스의 고유한 UID와 연동된)가 로우레벨에서 안전하게 삭제된다고 한다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

따라서, T2가 탑재된 맥에서 부트캠프 파티션이 아닌 macOS (APFS) 파티션에 저장된 데이터를 완전삭제 하려는 경우에는, FileVault 암호화가 켜져 있었든 꺼져 있었든 관계없이, 부팅하면서 Cmd+R을 눌러 복구 환경macOS Recovery으로 들어가 디스크 유틸리티를 실행시키고 해당 APFS 볼륨을 ‘지우기'(일종의 빠른 포맷)만 하면 된다. 단, 애플 설명서(HT201065)에 의하면 포맷을 하기 전에, 아이튠즈에서 로그아웃하고, 아이클라우드에서 로그아웃하고, 아이메시지에서 로그아웃하고, 블루투스 장치의 페어링을 해제하라고 한다.

T2가 탑재되지 않은 맥. 이 때는 FileVault가 켜져 있는지 여부에 관계없이 볼륨 삭제 후 수동으로 덮어쓰기를 해 주는 게 안전하다. FileVault 최초 설정시 디폴트 옵션은 애플 계정으로 디스크 잠금을 해제할 수 있게 하는 것인데, 이 옵션을 선택하면 복구 키recovery key가 애플에 업로드된다.* 복구 키는 한 번 생성되고 나면 간편하게 변경할 수 없고 FileVault 암호화를 해제했다가 다시 새로이 암호화하는 방법으로만 변경할 수 있다는 점으로 미루어 보면,* 복구 키는 FileVault의 마스터 암호화 키를 직접 유도할 수 있는 그런 정보인 것으로 보인다. 따라서 설령 모종의 방법으로 로컬에 저장된 마스터 암호화 키를 로우레벨에서 완벽하게 삭제한다 하더라도 애플이 복구 키를 보유하고 있는 한 애플 또는 애플로부터 키를 입수할 수 있는 해커 등 공격자는 디스크에 남아 있는 데이터를 복호화할 수 있을 것이다. 따라서 FileVault가 켜져 있더라도 암호화 키를 지우는 것만으로는 완전삭제가 되지 않는다.

최초 FileVault 설정시 디폴트 옵션인 애플 계정으로 잠금 해제하기를 선택하지 않고 복구 키를 로컬에 백업하는 옵션을 선택한 경우에도, 디스크 유틸리티에서 해당 볼륨을 지웠을 때 암호화 키가 로우레벨에서 완벽하게 삭제되는지가 확실하지 않다. 애플은 그 부분을 설명하는 문서를 만들어 놓지 않았다. 애초에 T2가 없는 맥에서 FileVault 볼륨 암호화 키가 정확히 어디에 저장되는지조차도 확실하게 알려져 있지 않은 실정이다.

따라서 T2가 없는 맥을 완전삭제하는 경우에는 다음 순서를 따를 것을 권한다.

① 애플 설명서(HT201065)에 나온 대로, 아이튠즈에서 로그아웃하고, 아이클라우드에서 로그아웃하고, 아이메시지에서 로그아웃하고, 블루투스 장치의 페어링을 해제한다.

② 애플 설명서(HT208496)를 따라 복구 환경에서 디스크 유틸리티로 지우기 작업을 수행한다. 여기까지 하면, FileVault 암호화가 꺼져 있었던 경우에도, 맥을 우분투로 부팅해 hexdump로 데이터를 읽어들였을 때 기존 데이터가 출력되지 않는다(Behrens, 2017). T2 탑재 맥에서 암호화가 T2단에서 이루어지는 걸 보면 맥에 들어간 SSD는 self-encrypting drive는 아닐 가능성이 높은데, 그럼에도 불구하고 이런 결과가 나오는 것을 보면 디스크 유틸리티의 ‘지우기’ 기능은 ATA secure erase 명령을 내리거나, 전체 셀에 대한 TRIM 명령을 내리는 역할을 하는 것으로 추측된다. 이 경우 SSD를 컴퓨터에 연결해서 그 SSD의 컨트롤러와 통신하는 방법으로 데이터를 읽어들이는 사람은 데이터를 복구할 수 없으나, SSD의 NAND 자체에 기록된 데이터는 크게 영향을 받지 않기 때문에 그걸 직접 읽어들일 수 있는 전문 장비를 갖춘 사람은 데이터를 복구할 수 있을 것이다.

③ 랜덤 데이터 덮어쓰기 2회를 진행한다. FileVault 암호화 키가 SSD 레벨에서는 유저 데이터로 저장돼 있을 거라는 기대 아래, 그 암호화 키가 덮어씌워지기를 기대하는 것이다. 0이 아닌 랜덤 데이터로 덮어쓰는 이유는, 0으로 덮어쓰면 SSD 컨트롤러가 그 데이터를 압축해서 기록하고 그 결과 실제 로우레벨에서 덮어쓰기가 이루어지는 용량은 아주 작아질 수 있기 때문에 압축이 불가능한 랜덤 데이터를 이용하는 것이다(cf. Bonetti et al., 2014). 덮어쓰는 횟수는 개인정보의 안전성 확보조치 기준 해설서는 3회 이상을 권고하고 있으나, 랜덤 데이터로 3회씩이나 덮어쓰려면 시간이 조금 오래 걸릴 수 있고 실측 결과 랜덤이 아닌 sequential data로 2회만 덮어쓰기해도 많은 경우 전체 공간에 대한 덮어쓰기가 이루어지는 것으로 나왔기 때문에(Wei et al., 2011), 개인정보 처리자가 아닌 일반인은 특별히 민감한 정보를 완벽하게 삭제해야 하는 경우가 아닌 한 가성비 차원에서 그냥 2회만 해도 될 것으로 본다.

랜덤 덮어쓰기 2회를 하는 구체적인 방법은 이렇다. 복구 환경에서 터미널을 열고 diskutil list를 입력해 삭제하려는 SSD에 할당된 디바이스 이름을 확인한다. /dev/disk1, /dev/disk2처럼 생겼을 것이다. disk? 뒤에 붙은 것, 그러니까 /dev/disk1s2에서 s2 같은 것은 제외하고 /dev/disk1까지만 보면 된다. 디바이스 이름을 확인했으면 diskutil secureErase 4 /dev/disk?라고 입력해 0으로 덮어쓰기 1회, 랜덤 데이터로 덮어쓰기 2회가 진행되도록 한다.

데스크탑, 노트북 PC 내장 SSD, HDD 삭제 방법

Tails 준비하기. OS가 설치된 내장 드라이브를 삭제하려면 우선 테일즈Tails라는 오픈소스 리눅스 배포판을 USB에 설치할 필요가 있다. OS로 부팅된 상태로 바로 그 OS가 설치된 C드라이브를 삭제한다는 것은 좀 이상하고 오류를 일으킬 가능성이 높으며, 무엇보다 대부분의 툴에서는 그런 기능이 지원되지도 않기 때문에, C드라이브를 삭제하기 위해서는 C드라이브가 아닌 별도의 디스크에 깔린 별도의 OS로 부팅해야 하는데 여기서 그 ‘별도의 OS’ 역할을 해 주는 것이 테일즈다. 테일즈 외에도 삼성 매지션, 나래온툴, DBAN, Parted Magic, 우분투, 페도라 등 다른 OS도 이용 가능하지만 내가 이것저것 써 본 바로는 테일즈가 가장 좋은 듯하다. 가령 삼성 매지션은 DOS 기반의 운영체제인데, 거기에는 SSD의 프리즈freeze 상태를 풀어 주는 기능이 탑재돼 있지 않기 때문에 secure erase를 하기 위해서는 컴퓨터 본체를 열고 SSD의 전원 케이블을 빼고 5~6초 후에 다시 끼워 주는 귀찮은 절차를 밟아야 할 수 있고, 그래서인지 데스크탑이 아닌 노트북에서는 부팅 자체가 불가능하다.* 테일즈는 원래부터 USB에 설치해서 사용할 목적으로 개발된 OS이기 때문에 용량이 작고 가벼우며, 기능 제약이 없는 일반적인 리눅스이므로 범용성이 좋다.

테일즈를 설치하려면 8GB 이상의 안 쓰는 USB 1개가 필요하다. 공식사이트의 영어 설명을 따라서 설치하면 된다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
컴퓨터를 테일즈로 부팅했을 때의 모습. 표준적인 GNOME 데스크탑이라 예쁘고 쓰기 편하다.

테일즈 USB가 준비됐으면, 그걸 컴퓨터에 꽂고 부팅시키면서 부트 메뉴 호출키를 연타한다.

그러면 아래와 같은 화면이 뜰 텐데, 그 중에서 테일즈 USB에 해당하는 것을 찾아서 선택한다. 만약 아래 사진에서와 같이 앞에 UEFI가 붙은 것과 그렇지 않은 것이 있다면 UEFI가 붙은 것을 우선적으로 선택한다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
부트 메뉴 예시. 출처: 이곳.

이 때 만약 정상적으로 부팅이 되지 않고 “Invalid signature detected”라는 에러가 뜨거나, 아니면 아무런 에러메시지도 뜨지 않고 컴퓨터가 재부팅된다면 이는 본인 컴퓨터에 마이크로소프트의 보안 부팅Secure Boot 기능이 켜져 있기 때문이다. 2019. 7. 기준으로, 마이크로소프트의 보안 부팅 기능이 켜져 있는 상태에서는 테일즈 USB로 정상 부팅이 불가능하다. 보안 부팅이란 마이크로소프트의 전자서명이 들어간 부트로더(e.g., 윈도우)로만 부팅할 수 있게 해 주는 기능을 말하는데, 테일즈를 비롯한 다수의 리눅스 배포판은 당연하게도 마이크로소프트의 전자서명이 들어간 부트로더를 사용하지 않기 때문에 보안 부팅이 켜져 있는 상태에서는 테일즈로 부팅이 안 되는 것이다. 따라서 테일즈로 부팅하려면 잠시 보안 부팅을 꺼야 한다. 잠깐 껐다가 작업이 끝난 후 다시 켜면 이걸 끔으로 인해 보안성이 저해될 구석은 없다. 보안 부팅은 UEFI상에서 Secure Boot 메뉴를 찾아서 쉽게 켜고 끌 수 있다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
Secure Boot 메뉴로 들어가서…

HDD 포렌식 복구 불가 - HDD polensig boggu bulga
Secure Boot가 Enabled로 돼 있는 것을 Disabled로 바꿔 준다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

참고로 테일즈도 조만간 MS 보안 부팅을 지원할 거라고 한다.* 그 때가 되면 UEFI에서 매번 설정을 바꿔 주지 않고도 테일즈로 부팅할 수 있을 것이다.

만약 보안 부팅을 꺼도 부팅이 되지 않는다면 부트 메뉴에서 USB 선택할 때 앞에 UEFI가 붙은 것 말고 UEFI가 붙지 않은 것으로 선택해서 한번 진행해 보기 바란다.

테일즈로 부팅이 완료되면 다음과 같은 화면이 뜬다. 여기서 Additional Settings 항목에 있는 ‘+’버튼을 눌러 Administration Password를 정해 준다. 본인이 평소 쓰는 비밀번호로 하는 것이 무난하다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

HDD 삭제 방법. HDD는 굳이 랜덤 데이터로 여러 번 덮어쓰기할 필요 없이 0으로 한 번만 덮어써도 데이터 복구가 거의 완전히 불가능해진다(Wright et al., 2008). HDD에는 ATA Secure Erase라는 기능이 탑재돼 있는데, 이는 만약 제조사가 해당 기능을 잘 구현해 놓았다면, 하드디스크의 배드섹터, 할당되지 않은 공간, DCO, HPA 등 유저가 접근할 수 없는 공간을 포함한 모든 공간을 0으로 1회 덮어쓰기해 주는 기능이다.

테일즈로 부팅된 상태에서, 좌상단 Applications → Utilities → Disks를 실행시키고, 왼쪽 목록에서 삭제하고자 하는 디스크를 선택한다. 아래 예시에서는 500GB HDD를 선택했다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

이 상태로 우상단 三모양 아이콘을 눌러 Format Disk를 선택하거나, 단축키 Ctrl+F를 누르면 Erase와 Partitioning을 선택할 수 있는 포맷 옵션이 뜬다. 이 중 Erase를 눌러 보면, 다음과 같은 3가지 옵션이 뜰 것이다.

  • Don’t overwrite existing data (Quick)
  • Overwrite existing data with zeroes (Slow)
  • ATA Enhanced Secure Erase (Approximately 1 hour and 24 minutes)
    • 만약 HDD를 선택했다면 이렇게 긴 시간이 표시될 것이고, SSD를 선택했다면 ‘2 minutes’처럼 짧은 시간이 표시될 것이다.

Erase 옵션창에서, ATA Enhanced Secure Erase를 선택한다. 그런데 아래 사진과 같이, 해당 옵션이 회색으로 돼 있어서 선택을 할 수 없는 경우가 있다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

이런 경우에는 우상단에 전원버튼을 눌러 보면 일시정지(||) 표시가 있을 것이다. 그걸 눌러서 컴퓨터를 절전모드(sleep)로 집어넣었다가, 10초 정도 기다린 후 키보드를 치거나 컴퓨터 전원버튼을 눌러서 다시 깨운다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

그래픽카드 모델에 따라, 절전모드로 들어간 다음에 다시 깨웠을 때 컴퓨터 본체는 정상작동하지만 모니터가 안 켜지는 경우가 있을 수 있다. 이 문제의 해결방법은 내장그래픽을 사용하는 것이다. 컴퓨터를 끄고 모니터를 외장그래픽이 아닌 메인보드 모니터 단자에 연결한 후 UEFI에서 외장그래픽이 아닌 내장그래픽을 우선 사용하게 설정한 다음 다시 부팅하면 내장그래픽으로 부팅이 된다. 작업이 끝난 후에는 모니터 연결 위치 및 UEFI 설정을 원래대로 돌려 놓음으로써, 다시 외장그래픽을 사용하도록 바꿔 놓는 것이 좋다.

절전모드에서 깨웠는데도 ATA Secure erase 옵션이 여전히 회색이라면? 그럴 땐 Disks 창에서 중간에 보면 마이너스(−) 버튼이 있을 것이다. 그게 ‘파티션 삭제’ 버튼이다. 그걸 눌러서 파티션을 하나 삭제해 준다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

그런 다음 다시 Format Disk 창으로 가 보면, 해당 옵션이 검정색으로 선택 가능하게 바뀌어 있을 것이다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

그걸 선택하고, Partitioning은 GUID Partitioning Table 또는 No Partitioning을 아무거나 선택한다. 그리고 Format을 누르면 다음과 같은 경고창이 뜰 것이다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

그러면 ATA Secure Erase가 정상적으로 진행된다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

그런데 간혹 제조사가 ATA Secure Erase 기능을 제대로 구현해 놓지 않은 경우도 있을 수 있어 주의가 필요하다. 우리가 컴퓨터로 ATA Secure Erase 명령을 내리는 것은 말 그대로 명령을 내리는 것일 뿐, 그 명령을 실제로 수행하고 그 결과를 보고하는 것은 전적으로 HDD의 컨트롤러가 하는 일이다. 때문에 HDD 제조사가 해당 기능을 제대로 구현해 놓지 않은 경우에는, 사용자가 ATA Secure Erase 명령을 내렸고 컨트롤러가 그게 성공적으로 수행됐다고 보고했음에도 불구하고, 실제로는 덮어쓰기가 이루어지지 않은 경우가 있을 수 있다(cf. Wei et al., 2011). 만약 이걸 했을 때 하드 돌아가는 소리가 나고 1시간여에 걸쳐 느리게 진행된다면 덮어쓰기가 제대로 되고 있을 가능성이 높겠지만, SSD가 아닌 HDD임에도 불구하고 ATA Secure Erase가 몇 초, 몇 분만에 완료돼 버리면 약간 수상하다는 생각을 해야 한다. 다만 이렇게 빨리 완료되는 게 반드시 비정상인 것은 아니다. 간혹 self-encrypting drive라고 해서 하드디스크 컨트롤러에서 데이터가 암호화돼 그 암호문이 플래터에 기록되는 HDD가 있는데, 이런 HDD는 ATA Secure Erase를 하면 덮어쓰기를 수행하지 않고 해당 암호화 키만 삭제하는 방법으로 빠르게 암호학적 삭제를 하기도 한다. 그러나 가정용 컴퓨터에 이런 HDD가 달려 있는 경우는 흔치 않으므로, 일반적으로는 HDD에서 ATA Secure Erase가 너무 빨리 끝나면 제대로 삭제가 안 됐을 거라고 생각하는 것이 안전하겠다. 이런 경우에는, 아까 포맷 방법 선택하는 창에서 ‘Overwrite existing data with zeroes (Slow)’를 선택해서 수동으로 0으로 덮어쓰기를 1회 진행해 주면 해결된다.

HDD 포렌식 복구 불가 - HDD polensig boggu bulga

SSD 삭제 방법. SSD는 크게 SATA 방식과 NVMe 방식으로 나뉜다. 구분방법은 Disks 앱으로 들어가서 해당 SSD를 선택한 다음 디바이스 이름이 /dev/sda라고 뜨는지 /dev/nvme0n1이라고 뜨는지 보면 된다. /dev/sd?라고 뜨면 SATA, /dev/nvme?n?라고 뜨면 NVMe다. 이 디바이스 이름은 나중에 쓸 데가 있으니 잘 확인해 두자. 뒤에 붙은 숫자(/dev/sda1)나 p숫자(/dev/nvme0n1p1)는 파티션 이름이므로 제외하고, 그 앞부분(/dev/sda, /dev/nvme0n1)까지가 디바이스 이름이다.

SATA SSD와 NVMe SSD 모두 자체적인 초기화 기능을 제공하는 경우가 많다. 해당 기능의 정식 명칭이 뭔지는 알 수 없지만 흔히 각각 ATA Secure Erase, NVMe Secure Erase라고 부른다. 그런데 이 초기화 기능이 하는 일은 실제 NAND 셀 자체를 덮어쓰기하거나 전자적으로 초기화시키는 것이 아니라, 마치 TRIM 기능과 유사하게 컨트롤러 단에서만 모든 셀들을 사용 가능한 것으로 마킹해 놓는 것이다. 초기화 후에도 NAND 자체에는 여전히 데이터가 남아 있기 때문에, 전문 장비를 가진 사람은 ATA, NVMe Secure Erase를 거쳤음에도 불구하고 기존 데이터를 복구할 수 있을 가능성이 있다. 따라서 SSD는 그냥 Secure Erase로 초기화시키는 것만으로는 완전삭제가 되지 않는다.

다만 self-encrypting drive (SED)라고도 부르는, 자체적인 암호화 기능이 내장돼 있는 SSD들은 Secure Erase를 수행하면 암호화 키가 삭제됨으로써 완전삭제가 이루어질 가능성이 있으나, 이것도 제조사가 해당 기능을 정확하게 구현해 놓았어야 그렇게 되는 것이고, SED라 하더라도 기본적인 암호화 구조나 Secure Erase 기능이 완벽하게 구현돼 있지 않은 경우에는 Secure Erase만으로 완전삭제가 이루어지지 않을 가능성도 있다. 그리고 최종 소비자 입장에서 자기 SSD가 암호학적 삭제 기능이 잘 구현된 SED인지 아닌지를 구분하기도 어렵다.

이러한 이유로, 나는 SSD는 ① 먼저 Secure Erase 기능으로 초기화를 시킨 다음, ② 수동으로 랜덤 데이터 덮어쓰기를 2회 진행함으로써 로우레벨에 있는 데이터를 최대한 파괴하는 two-phase 전략으로 완전삭제를 하는 것이 좋다고 생각한다. 초기화와 랜덤 덮어쓰기 중 뭘 먼저 하고 뭘 나중에 하는 게 더 효율적일지는 알 수 없다.

초기화를 하려면, ⁂ SATA SSD는 위 HDD 삭제 방법 항목에서 설명한 것과 동일한 방법으로 ATA Secure Erase를 수행한다. ⁂ NVMe SSD는 Applications → System Tools → Root Terminal로 들어가, apt update && apt install nvme-cli를 입력함으로써 nvme-cli라는 프로그램을 설치한다. 설치가 완료되면, 우상단의 전원모양을 누르면 나오는 일시정지(II) 버튼을 클릭해 컴퓨터를 절전sleep 모드로 집어넣었다가 약 10초 후 키보드를 치거나 컴퓨터 전원버튼을 눌러 다시 깨운다. 그런 다음 터미널에 nvme format /dev/nvme?n? -s 2를 입력한다. 이 때 물음표는 그대로 입력하지 말고 아까 확인한 그 디바이스 이름대로, 예를 들면 /dev/nvme0n1과 같이 입력한다. 명령이 성공적으로 수행되든 실패로 끝나든, 맨 끝 숫자를 1로 바꿔서 다시 입력해 본다. 즉 nvme format /dev/nvme?n? -s 1을 입력해 본다. 맨 끝 숫자를 2로 했을 때와 1로 했을 때 둘 중 하나라도 성공적으로 됐으면 그 NVMe SSD는 초기화가 된 것이다.

랜덤 데이터로 덮어쓰기를 하려면, 테일즈로 부팅한 상태에서 터미널을 열고 dd if=/dev/urandom of=/dev/??? bs=4M status=progress를 입력한다. 여기서 /dev/??? 부분은 그대로 입력하지 말고, 아까 Disks 앱에서 확인한 그 삭제하려는 SSD의 디바이스 이름을 넣어 준다. 예를 들면 /dev/sda 또는 /dev/nvme0n1을 넣어서 dd if=/dev/urandom of=/dev/nvme0n1 bs=4M status=progress와 같이 입력한다. 명령을 내리고 시간이 좀 지난 후 ‘용량이 부족하다’고 하면서 몇 바이트 썼다는 메시지가 나오면 랜덤 데이터 덮어쓰기 1회가 정상적으로 완료된 것이다. 동일한 명령을 한 번 더 내려 2회차 랜덤 덮어쓰기를 수행한다.

이 때 0이 아닌 랜덤 데이터로 덮어쓰는 이유는, 0으로 덮어쓰면 SSD 컨트롤러가 그 데이터를 압축해서 기록하고 그 결과 실제 로우레벨에서 덮어쓰기가 이루어지는 용량은 아주 작아질 수 있기 때문이다(cf. Bonetti et al., 2014). 덮어쓰는 횟수 관련해서는 ‘개인정보의 안전성 확보조치 기준 해설서’는 3회 이상을 권고하고 있으나, 랜덤 데이터로 3회씩이나 덮어쓰려면 시간이 조금 오래 걸릴 수 있고 실측 결과 랜덤이 아닌 sequential data로 2회만 덮어쓰기해도 많은 경우 전체 공간에 대한 덮어쓰기가 이루어지는 것으로 나왔기 때문에(Wei et al., 2011), 개인정보 처리자가 아닌 일반인은 특별히 민감한 정보를 완벽하게 삭제해야 하는 경우가 아닌 한 가성비 차원에서 그냥 2회만 해도 될 것이라고 생각한다. 덮어쓰기를 2회 했는지 3회 했는지를 포렌식으로 구분하는 것은 거의 불가능할 것으로 생각되나 확실하지는 않다.

USB, SD카드, microSD카드 삭제 방법

USB (thumb drive)는 SSD와 비슷한 플래시 메모리라는 특성상 덮어쓰기를 한다고 ‘모든’ 데이터가 완벽하게 삭제된다는 보장은 없다. 그러나 아직 덮어쓰기보다 나은 삭제방법이 존재하지 않기 때문에 부득이 덮어쓰기의 방법으로 삭제할 수밖에 없다. FAT로 포맷된 채로 사용되던 USB에 덮어쓰기를 하면 인터넷에서 다운받을 수 있는 복구 프로그램으로는 복구가 되지 않는다는 보고가 있다(Diesburg et al., 2016).

USB에 덮어쓰기는 랜덤 데이터로 2회 하는 것을 추천한다. 랜덤 데이터로 하는 이유는 0으로 덮어쓰기하면 USB의 컨트롤러 단에서 그 데이터를 압축해 버려서 실제 NAND 셀에 쓰기 작업이 제대로 수행되지 않을 우려가 있기 때문이다.

윈도우 8 이상에서는 USB를 꽂고 cmd를 열고 format X: /p:2를 입력한다. 여기서 X:는 그대로 입력하지 말고 덮어쓰기를 하고자 하는 그 USB에 할당된 문자(D:, E:, F:)로 바꿔서 입력한다. /p: 다음에 오는 숫자는 우선 0으로 1회 덮어쓰기한 다음 랜덤 데이터로 추가적으로 덮어쓰기 하는 횟수를 의미한다. 예시에서처럼 2라고 입력하면 윈도우는 먼저 해당 드라이브를 0으로 1회 덮어쓰기한 다음, 랜덤 데이터로 2회 추가로 덮어쓰기를 해서 총 3회 덮어쓰기를 하게 된다. 이렇게 하면 드라이브 문자가 할당된 그 볼륨에 대해서만 덮어쓰기가 이루어지고, 할당되지 않은 공간이나 다른 파티션에 대해서는 덮어쓰기가 이루어지지 않는다는 점에 유의하기 바란다. 참고로 윈도우 7 이전 버전에서는 위 명령어를 사용하면 랜덤 데이터가 아닌 0으로만 여러 번 덮어쓰기가 이루어지므로, 되도록이면 윈도우 8 이후 버전을 사용하는 것을 추천한다.

맥에서는 USB를 꽂고 터미널을 열고 diskutil list를 입력해 삭제하려는 USB에 할당된 디바이스 이름을 확인한다. /dev/disk3, /dev/disk4처럼 생겼을 것이다. 여기서 disk? 뒤에 붙은 것, 그러니까 /dev/disk3s2에서 s2 같은 것은 제외하고 /dev/disk3까지가 디바이스 이름이다. 디바이스 이름을 확인했으면, diskutil secureErase를 입력해 secureErase의 각 옵션별로 정확히 어떤 동작이 수행되는지를 확인한 다음, diskutil secureErase ? /dev/disk?를 입력해 덮어쓰기 명령을 내린다. 여기서 앞쪽 ?에는 앞서 확인한 옵션에 해당하는 숫자(0, 1, 2, 3, 4)를 넣으면 되고, 뒤쪽 /dev/disk?에는 삭제하려는 USB에 할당된 디바이스 이름을 넣으면 된다. 예를 들어 diskutil secureErase 4 /dev/disk3과 같이 입력한다.

리눅스에서는 USB를 꽂고 Gnome Disks 앱으로 삭제하려는 USB의 디바이스 이름을 확인한다. /dev/sda, /dev/sdb, /dev/sdc처럼 생겼을 것이다. 터미널을 열고 dd if=/dev/urandom of=/dev/sd? bs=4M status=progress를 입력한다. 여기서 /dev/sd?는 물음표까지 그대로 입력하지 말고, 삭제하려는 디스크의 명칭(/dev/sda, /dev/sdb, /dev/sdc)으로 바꿔 준다. 명령을 내리고 시간이 좀 지난 후 ‘용량이 부족하다’고 하면서 몇 바이트 썼다는 메시지가 나오면 랜덤 데이터 덮어쓰기 1회가 정상적으로 완료된 것이다. 필요에 따라 추가적으로 덮어쓰기를 진행하면 된다.

SD카드, microSD카드는 USB와 동일한 방법으로 삭제하면 된다.

외장하드(HDD) 삭제 방법

HDD는 굳이 랜덤 데이터로 여러 번 덮어쓰기할 필요 없이 0으로 한 번만 덮어써도 데이터 복구가 거의 완전히 불가능해진다(Wright et al., 2008).

윈도우 비스타 이후 버전(Vista, 7, 8, 10)에서는 탐색기에서 삭제하려는 외장하드를 찾아 우클릭하고 ‘포맷(A)…’을 누른 다음, ‘빠른 포맷(Q)’에 기본으로 체크가 돼 있는 것을 해제한 뒤 포맷을 한다. 즉, 풀 포맷을 한다. 그러면 0으로 1회 덮어쓰기가 이루어진다.* 다만 이렇게 하면 드라이브 문자가 할당된 그 볼륨에 대해서만 덮어쓰기가 되고, 할당되지 않은 공간이 있거나 다른 파티션이 있으면 거기에 대해서는 덮어쓰기가 되지 않음에 유의하기 바란다.

맥에서는 디스크 유틸리티를 실행시키고, 삭제하려는 외장하드를 선택한 다음 ‘지우기’를 누른 뒤, 지우기 메뉴에 좌하단에 있는 ‘보안 옵션’ 단추를 누르고 원하는 옵션을 선택해서 진행한다. ※ 만약 보안 옵션 단추가 보이지 않으면 위 USB, SD카드 삭제방법에 있는 것과 동일하게 터미널을 이용해서 진행하면 된다.

리눅스에서는 Gnome Disks를 열고 삭제하려는 외장하드를 선택한 다음 메뉴에서 Format을 찾아 선택한다(Ctrl+F). 그리고 옵션에서, 만약 ATA Enhanced Secure Erase 옵션이 뜬다면 그것을 선택하고, 만약 뜨지 않는다면 Overwrite existing data with zeroes (Slow)를 선택하고 진행한다.

외장 SSD 삭제 방법

외장 SSD는, 만약 분리 가능한 모델이라면, 분리해서 내부의 SSD를 꺼내 컴퓨터에 내장 SSD의 형식으로 연결한 다음 내장 SSD와 동일한 방법으로 삭제하는 것이 최선이다.

만약 그럴 수 없는 모델이라면 USB, SD카드 삭제방법과 동일하게 랜덤 데이터로 2회 이상 덮어쓰기를 해 준다.