데이터를 복구 할 수 없도록 썸 드라이브의 내용을 안전하게 삭제하려면 어떻게해야합니까?


32

가능한 경우 터미널을 통해 USB 플래시 드라이브를 삭제하여 데이터를 복구 할 수없는 방법을 알고 싶습니다.


31
플래시 드라이브? 물건을 열어서 녹색 회로 기판에서 모든 칩을 꺼내어 조금 반짝이는 작은 조각으로 으깬 다음 다른 것을 사십시오. 육체적 파괴는 실제로 모든 마모 수준 및 재료의 조합을 확신 할 수있는 유일한 방법입니다. 앞으로 전체 디스크 암호화를 사용하고 더 이상 원하지 않는 경우 암호를 잃어 버리십시오.
Blacklight Shining

1
@BlacklightShining-유일한 답변입니다. 싸구려 스틱도 많이 재활용됩니다.
mikeserv

1
@BlacklightShining 플라즈마로 전환하는 것도 잘 작동합니다.
PyRulez

3
데이터를 복구 할 수없는 것이 중요한 경우 유일한 "보안"솔루션은 물리적 파괴입니다. 복구하기가 어렵다면 포맷 / 덮어 쓰기 만 할 필요는 없습니다.
Sobrique

숯불로 태워 모든 부품이 붉은 열에 도달하도록하십시오.
Ben

답변:


47

TL / DR : 올바른 장치 이름을 가져오고 마운트되지 않았는지 확인하고 가능한 한 임의의 덮어 쓰기를 수행하십시오. 최근 배포본이 충분한 경우 플래시 하드웨어 용으로 설계된 지우기 명령을 수행 할 수 있습니다. 이 검사에서는 항상 파티션 이름 (/ dev / sd h1 ) 이 아닌 드라이브 (/ dev / sd h 등 )를 사용하십시오

# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#

이론적으로 0으로 덮어 쓰는 dd것은 괜찮습니다. 그러나 플래시 드라이브의 내부 구성 방식으로 인해 단일 덮어 쓰기 패스를 사용하는 경우 여전히 남은 정보를 저장하는 실제 블록 뒤에 숨겨진 여러 계층의 데이터가있을 수 있습니다.

일반적으로 플래시 스토리지의 일부에 결함이 있으며 제조 중에 표시됩니다. 잘못 될 수있는 다른 비트도 있습니다 (변경 불가능, 설정 불가능 또는 해제 불가능).이 부품들은 수명 동안 결함으로 표시되어야합니다. 이 정보는 데이터와 동일한 칩의 예약 된 공간에 저장됩니다. 이것은 4GB 썸 드라이브가 2 ^ 32 바이트 용량을 표시하지 않는 몇 가지 이유 중 하나입니다.

플래시 스토리지는 내부적으로 더 큰 블록으로 구성되며 때로는 드라이브에서 작업하는 파일 시스템보다 훨씬 큽니다. 일반적인 파일 시스템 블록 크기는 4KB이며 한 번에 지울 수있는 플래시 세그먼트의 범위는 64KB에서 수 메가 바이트까지입니다. 이 큰 블록은 전체적으로 만 지울 수 있으며 모든 블록을 알려진 상태 (모두 1 또는 0)로 재설정합니다. 이후 데이터 쓰기는 비트를 변경할 수 있지만 (필요한 경우 기본 1을 0으로 변경하거나 기본 0을 1로 변경) 한 번만 가능 합니다. 비트 를 기본값으로 다시 변경하려면 모든 세그먼트를 다시 지워야합니다!

따라서 4KB 블록을 변경하려면 (파일 시스템이 파일 중간에 단일 문자를 변경하도록 요청 받음) 플래시 컨트롤러는 이전 데이터의 64KB를 모두 읽고 버퍼링하고 모든 데이터를 삭제해야합니다. 새로운 내용을 다시 쓰십시오. 이것은 매우 느릴 것입니다. 세그먼트를 지우는 것이 가장 느립니다. 또한 세그먼트는 제한된 시간 (수만)이 지워질 수 있으므로 단일 파일을 너무 많이 변경하면 드라이브가 빠르게 저하 될 수 있습니다.

그러나 이것은 그렇게 된 것이 아닙니다. 인텔리전트 플래시 컨트롤러는 단순히 다른 곳에 4KB의 새로운 데이터를 작성하고 이전 블록의 중간에있는이 4KB의 데이터로 읽기를 리디렉션하도록 메모합니다. 리디렉션에 대한이 정보를 저장할 수없는 공간이 더 필요합니다. 또한 데이터를 저장하기 위해 액세스 가능한 모든 세그먼트를 거치도록 노력합니다 . 이를 마모 레벨링 이라고 합니다 .

이것은 일반적으로 오래된 데이터가 여전히 드라이브 어딘가에 있음을 의미합니다 ! 액세스 가능한 모든 블록을 방금 지운 경우 모든 숨겨진 블록은 여전히 ​​최신 버전의 데이터를 유지합니다. 데이터를 보호하려는 공격자가 액세스 할 수 있는지 여부는 다른 질문입니다.

최근 배포판이 충분하고 USB 드라이브가 플래시 드라이브임을 나타내도록 프로그래밍 된 blkdiscard경우 TRIM위에서 언급 한 세그먼트 지우기 인 기본 작업을 사용할 수 있습니다 . 또한 보이지 않는 숨겨진 데이터조차도 하드웨어에 의해 완전히 지워지도록하는 추가 플래그가 있습니다.

# blkdiscard -s /dev/myusbdevice

-s, --secure 보안 삭제를 수행합니다. 보안 삭제는 가비지 수집에 의해 생성 된 삭제 된 블록의 모든 복사본도 삭제해야한다는 점을 제외하고 일반 삭제와 동일합니다. 이를 위해서는 장치의 지원이 필요합니다.

위에서 설명한 것처럼 반드시 작동하지는 않습니다. Operation not supported커널, 유틸리티 또는 USB 게이트웨이 칩 (플래시 컨트롤러가 USB를 통한 드라이브처럼 보일 수 있음) 을 얻으면 TRIM명령 전달을 지원하지 않습니다 . 플래시 컨트롤러는 여전히 자체 세그먼트를 지울 수 있어야합니다. 드라이브 공급 업체에서 지원하는 경우 가장 안전한 방법입니다.

이전 데이터 중 일부를 어딘가에 머 무르도록 허용하는 또 다른 안전하지 않은 방법은 가능한 경우 임의의 값으로 여러 번 덮어 쓰는 것입니다.

왜 무작위입니까? USB 드라이브가 너무 지능적으로 만들어져 섹터를 지우고 싶다는 것을 감지하고이 섹터가 현재 비어 있음을 비트 맵으로 변경 한 후 나중에 삭제해야한다고 상상해보십시오. 이것은 0의 쓰기 속도를 높일 수 있다는 것을 의미하므로 펜 드라이브 더 효율적으로 나타납니다 . 당신의 드라이브가 그것을하고 있는지 여부는 말하기 어렵습니다.

가장 극단적으로, 드라이브는 처음부터 지운 양을 기억할 수 있으며, 저장하기 위해 필요한 모든 정보는 약 4 바이트의 정보이며, 삭제하려는 데이터에서 아무것도 지우지 않습니다. 모두 매우 빠르게 보일 수 있습니다.

임의의 예측할 수없는 임의의 값으로 데이터를 덮어 쓰는 경우 이러한 최적화가 불가능합니다. 따라서 드라이브는 데이터가 플래시 칩 내부에 저장되도록해야합니다. 그러나 이전에 사용한 섹터 중 일부에 여전히 오래된 데이터가 있음을 배제 할 수는 없지만 드라이브는 정상적으로 액세스 할 수 없으므로 아직 지우지 않는 것이 중요합니다. 실제 TRIM명령 만 보장 할 수 있습니다.

임의의 값으로 덮어 쓰기를 자동화하려면 다음 shred과 같이 를 사용하는 것이 좋습니다 .

# shred -vzn88 /dev/myusbdrive

사용 된 옵션 :

  • 진행 상황을 보여주기위한 -v
  • -z 최종 단계에서 0으로 설정
  • -n8은 8 번의 무작위 덮어 쓰기를 수행하는 것입니다.

가능하면 모두 사용 blkdiscard하고 shred있는 경우, blkdiscard -s드라이브에 의해 지원됩니다, 그것은 최적의 솔루션입니다하지만 할 다치게 할 수 없어 shred펌웨어 실수를 배제하기 위해 사전.

아, 그리고 항상 지우려고하는 장치를 두 배로 확인하십시오! dmesg는 가장 최근에 삽입 된 장치를 확인하는 데 도움이되며 ls -al장치 노드 번호 및 blkid출력에 대해 지우려는 장치 이름을 확인하여 사용 가능한 파티션을 확인할 수 있습니다. 지우고 싶다.

계속 사용하려는 내장 드라이브에서이 명령을 사용하지 마십시오 blkdiscard. 솔리드 스테이트 드라이브에서만 작동하지만 데이터 손실을 시도 할 가치는 없습니다!

기술이 발전함에 따라 데이터를 안전하게 지우는 다른 방법이있을 수 있습니다.

언급 된 다른 방법은 SECURITY ERASE명령을 통해 hdparm실행할 수있는 ATA 명령입니다 . 내 경험상 플래시 드라이브에서는 실제로 지원되지 않습니다. 엔터프라이즈 하드 드라이브 용으로 설계되었으며이 기능이 항상 저비용 스토리지 장치에 구현되는 것은 아닙니다.

TRIM/의 DISCARD작업은보다 최신 버전 인 SECURITY ERASE명령, 그것도 싼 USB 드라이브에서 구현되는 훨씬 더 높은 기회가있다, 그래서 플래시 기능에 대한 응답으로 만들어졌습니다,하지만 여전히 유비쿼터스 아니다. USB 동글에서 SD / 마이크로 SD 카드를 지우고 blkdiscard지원되지 않는다고보고하려는 경우 다른 동글 / 카드 리더기를 사용하거나 직접 SD / MMC 슬롯이있는 기기에서 시도 할 수 있습니다 .


최신 정보에 감사드립니다. blkdiscardDebian Jessie에 있으며 Ubuntu의 최신 두 릴리스에만 있지만 Ubuntu LTS 14.04에는 없습니다. blkdiscard패키지 util-linux버전 2.23 에 추가되었습니다 .
RobertL

@zhenech의 다른 의견 (특히 링크 : ata.wiki.kernel.org/index.php/ATA_Secure_Erase ) blkdiscard에서 hdparm솔루션 과 비교 하는 방법을 알고 있습니다.
RobertL

이것이 플래시 드라이브의 경우인지 확실하지 않지만, 이것은 howtogeek.com/234683/…을
hhaslam11

1
@RobertL 나쁜 방법으로 동일합니다. 가장 저렴한 플래시 드라이브는 ATA Secure Erase 나 TRIM을 구현하지 않으므로 두 방법 모두 실패 할 수 있습니다.
duskwuff

27

나는 이것이 실제로 귀하의 질문에 대한 답이 아니라는 것을 알고 있지만 가장 간단한 방법은 드라이브를 물리적으로 파괴하는 것입니다 (슬레지 해머로 반복해서 스매싱하는 것이 일반적으로 트릭이지만 산업 파쇄 또는 소각도 옵션입니다). 데이터를 복구 할 수 없도록하기 위해 보안에 대해 걱정이되는 경우 해당 데이터의 가치는 드라이브 비용보다 몇 배나 더 높으며 물리적 방법은 저렴하고 안정적입니다.


5
저렴하고 교체 가능한 플래시 드라이브라면 물리적으로 파괴해야합니다. 망치를 사용하는 경우 실제 스토리지 칩을 확보하십시오. 나는 몇 주 전에 낡은 플래시 드라이브를 열었습니다. 물리적 볼륨은 실제로 케이스와 공기였습니다.
Blacklight Shining

1
내 대답과는 별도로, 나는 완전히 동의합니다-ssh 액세스를 통해 조각으로 분쇄하는 것은 매우 어렵습니다.
chexum

동의-데이터를 복구 할 수없는 것이 중요한 경우 물리적 파괴가 유일한 옵션입니다. 데이터의 상업적 가치와 비교할 때 가장 비싼 드라이브조차 그렇게 중요하지 않을 수 있습니다. 그렇지 않은 경우 것이 중요 거의 모든 / 덮어 쓰기는 '충분히 좋은에게'닦습니다.
Sobrique

1
이 방법은 가장 효과적 일뿐만 아니라 가장 재미 있습니다. 슬레지 해머를 사용할 수있는 기회를 놓치지 말고 지불하십시오.
zetetic

2

사용 가능한 거의 모든 보안 삭제 기능은 자기 미디어를 회전시키기 위해 설계되었으며 컴퓨터는 일반적으로 파일에 사용 된 블록의 물리적 위치 [1]를 결정하고 동일한 블록 위에 쓸 수 있습니다. SSD (Solid-State Storage Controller) 칩은 시스템에서 데이터의 물리적 위치를 추상화하고 데이터를 옮기는 것을 좋아합니다.

당신의 질문은 실제로 누가 당신의 데이터를 따라 가고 있는지에 달려 있습니다. 무작위 손실 또는 일시적인 도난이 우려되는 경우 일반적인 형식이 좋습니다. 상당한 자원을 가진 동기가 부여되고 기술적으로 유능한 사용자가 목표로 삼을 염려가 있다면 [2] 드라이브를 소각하고 새 드라이브에 10 달러를 소비하십시오.

  1. 예, 논리적 블록 매핑이 있습니다. 그러나 논리적 블록 A는 항상 물리적 블록 B에 매핑됩니다.

  2. 이 사람은 드라이브를 열고 카드에서 메모리 칩을 꺼내 컨트롤러를 우회하여 플래시 메모리를 직접 읽습니다.


1

내가 아는 가장 간단하고 빠른 방법은 전체 드라이브에 0을 쓰는 것입니다.

dd if=/dev/zero of=/dev/sdX

/dev/sdX썸 드라이브의 장치 노드는 어디에 있습니까 ?

일부는 더 많은 반복과 다른 패턴으로 더 철저한 프로세스를 제안합니다. 이를 위해 특정 유틸리티를 사용할 수 있습니다. GNU coreutils 패키지에는 shred이 목적을위한 명령이 포함되어 있습니다 . 많은 사람들이 또한 badblocks -we2fsprogs 패키지의 일부인을 사용 합니다. FreeBSD에서는 shred유틸리티가 호출 gshred되며 /usr/ports/sysutils/coreutils또는 /usr/ports/sysutils/fileutils포트 에서 사용 가능해야합니다 .


안전한 닦기를하기에는 충분하지 않습니다. 나는 무작위로 적어도 20 번의 일련의 글을 쓸 것입니다. 무엇보다도 나는 안전한 와이 핑 도구를 사용합니다. 어떤 사람들은 말이 안되고 제로화로 충분하다고 말하지만, 나는 그것을 믿지 않을 것입니다.
monsune

4
@monsune 그것은 도시의 전설 일뿐입니다. 일부 표준에는이 필요 하지만 실제 공격은없는 것 같습니다.
Gilles 'SO- 악마 그만해'

플래시 드라이브는 마모 레벨링을 사용하여 플래시 셀을 너무 빨리 파괴하지 않습니다. 드라이브에 1200 개의 셀이 있지만 1000 개의 셀만 있고 컨트롤러가 실제로 어떤 셀에 쓸지를 선택한다고 알려줍니다. 따라서 dd 후에는 1000 개의 셀을 지 웠지만 200 개의 셀은 예약하지 않았으며 실제 셀을 예약하지 않고 컨트롤러에 연결하여 읽을 수 있습니다. dd 후에 보안 지우기를 수행하는 것이 좋지만 모든 플래시 미디어가이를 지원하는 것은 아닙니다.
zhenech

@zhenech, "보안 지우기"란 무엇입니까?
RobertL


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.