서유럽에 사는 "정상적인"시민 인 경우 컴퓨터에서 스왑을 지우거나 암호화해야합니까?
개인의 판단은 데이터의 프라이버시를 얼마나 소중하게 여기고 공격자의 손에 들어가면 데이터가 노출되지 않도록 보호 할 것인지에 따라 결정됩니다. 랩톱이 있다고 가정하고 언젠가 도난 당했다고 가정 해보십시오. 도둑이 암호 나 암호화 키 또는 기타 개인 데이터를 추출하려고 시도 할 가능성은 얼마나됩니까? 많은 사람들이 신경 쓰지 않지만 일부는 신경 쓰지 않습니다. 분명히, 대부분의 도둑은 단순히 금전적 이익을 얻기 위해 랩톱을 판매하지만 공격자가 데이터 자체에 액세스하려고 시도하는 경우가 더 많습니다.
그리고 누군가 "예"라고 대답하기 전에 어떻게 테스트하고 내 스왑을 유출 할 수 있는지에 대한 예를 들어서 암호화 된 홈에도 불구하고 보호되지 않은 데이터를 실제로 확인할 수 있습니까?
프로세스의 메모리가 스왑 공간으로 스왑 될 수 있습니다. 기억력을 잃는 것은 위험 할 수 있습니다-Heartbleed의 명백한 예 -Heartbleed를 사용하여 사이트의 개인 암호 키를 훔치는 방법을 참조하십시오 . Heartbleed에 의해 노출되는 메모리는 하나의 단일 프로세스에만 속하는 반면 스왑 공간에 의해 노출 될 수있는 메모리는 모든 프로세스에 속합니다. 개인 키 또는 비밀번호 목록 (예 : 웹 브라우저)이 스왑 아웃되는 프로세스를 상상해보십시오. 이러한 항목은 스왑 공간에 일반 텍스트로 표시됩니다. 그것들을 추출하는 것은 특정 패턴의 데이터를 위해 메모리를 탐색하는 것입니다-그것은 평문 ASCII 데이터를 통해 볼 수 있습니다strings
또는 Heartbleed에서와 같이 더 관여 할 수 있습니다 (여기서 테스트에서는 일부 연속 바이트가 공개 암호화 키의 제 수임). 암호화 된 / home 파티션이있는 경우, 사용자가 데이터를 잠금 해제하는 암호화 키를 형성하는 데이터 블록을 찾아야합니다.
실제 예 :
수행 bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'
의 스택에 대한 몇 가지 비밀 데이터와 떠들썩한 파티 프로세스를 생성하는
않습니다 sysctl vm.swappiness=100
(필요는 없습니다 만, 쉽게 예를 만들 수 있습니다) swappiness을 증가
실행 top -c
을 눌러 F는 상위 프로세스보기로 다시 이동합니다 SWAP 열, q를 눌러 수 있도록 당신이 나타날 때까지 아래로 스크롤 bash -c
과정을
다른 터미널에서 리눅스 에서 Chimnay Kanchi의 프로그램을 저장하십시오 : 시스템 메모리에로드하는 방법? to usemem.c
, 그것을 컴파일 하고 터미널에서 반복적으로 gcc -o usemem usemem.c
실행하십시오 usemem &
. 한 번에 512MB의 메모리 블록이 사용됩니다. (메모리가 스왑 아웃되는 원인은 중요하지 않습니다. 정상적인 시스템 사용, 런 어웨이 프로세스 또는 고의적 인 공격 일 수 있습니다. 최종 결과는 동일합니다)
상단 bash -c
을보고 스왑 될 때까지 기다립니다 (SWAP 열 값> 0)
이제 strings /dev/sdaX | grep SECRET
X는 스왑 패리티 턴입니다.
축하합니다-방금 스왑 파티션에서 "비밀"데이터를 추출했습니다. 부모 암호 프로세스, 상위 프로세스 및 'bash -c'프로세스에서 유출 된 전체 명령 행을 포함하는 SECRET 텍스트의 여러 사본 뒤에 "암호"가 표시됩니다. 전체 명령 행을 포함하지 않는 행은 'bash -c'프로세스에서 누출되었습니다.
명령 행뿐만 아니라 프로세스 메모리에서 비밀이 유출되는 것을 증명하려면 unsigned char secret[] = "SECRET=XXXX";
usemem.c ( unsigned long mem;
행 바로 아래)에 행 을 추가하십시오 . usemem &
반복적으로 strings /dev/sdaX | grep SECRET
다시 컴파일하고 실행 하십시오. 이번에는 'XXXX'비밀이 유출되는 것을 볼 수 있습니다.