스왑 파티션에서 중요한 정보를 어떻게 얻을 수 있습니까?


8

이 질문을 Google에서 검색하면 민감한 데이터를 보호하는 방법, 스왑을 암호화하는 방법 및 Linux 시스템에서 "정상적인"스왑을 유지하는 "위험한"방법에 대한 모든 정보 만 얻을 수 있습니다.

그러나 스왑 파티션에서 데이터를 실제로 가져 오기 위해 소프트웨어, 방법 또는 "방법"을 찾을 수 없었습니다.

제 질문은 서유럽에 사는 "정상적인"시민이기 때문에 컴퓨터에서 스왑을 지우거나 암호화해야합니까? 그리고 누군가 "예"라고 대답하기 전에 어떻게 테스트하고 내 스왑을 유출 할 수 있는지에 대한 예를 들어서 암호화 된 홈에도 불구하고 보호되지 않은 데이터를 실제로 확인할 수 있습니까?



답변:


10

서유럽에 사는 "정상적인"시민 인 경우 컴퓨터에서 스왑을 지우거나 암호화해야합니까?

개인의 판단은 데이터의 프라이버시를 얼마나 소중하게 여기고 공격자의 손에 들어가면 데이터가 노출되지 않도록 보호 할 것인지에 따라 결정됩니다. 랩톱이 있다고 가정하고 언젠가 도난 당했다고 가정 해보십시오. 도둑이 암호 나 암호화 키 또는 기타 개인 데이터를 추출하려고 시도 할 가능성은 얼마나됩니까? 많은 사람들이 신경 쓰지 않지만 일부는 신경 쓰지 않습니다. 분명히, 대부분의 도둑은 단순히 금전적 이익을 얻기 위해 랩톱을 판매하지만 공격자가 데이터 자체에 액세스하려고 시도하는 경우가 더 많습니다.

그리고 누군가 "예"라고 대답하기 전에 어떻게 테스트하고 내 스왑을 유출 할 수 있는지에 대한 예를 들어서 암호화 된 홈에도 불구하고 보호되지 않은 데이터를 실제로 확인할 수 있습니까?

프로세스의 메모리가 스왑 공간으로 스왑 될 수 있습니다. 기억력을 잃는 것은 위험 할 수 있습니다-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 SECRETX는 스왑 패리티 턴입니다.

  • 축하합니다-방금 스왑 파티션에서 "비밀"데이터를 추출했습니다. 부모 암호 프로세스, 상위 프로세스 및 'bash -c'프로세스에서 유출 된 전체 명령 행을 포함하는 SECRET 텍스트의 여러 사본 뒤에 "암호"가 표시됩니다. 전체 명령 행을 포함하지 않는 행은 'bash -c'프로세스에서 누출되었습니다.

  • 명령 행뿐만 아니라 프로세스 메모리에서 비밀이 유출되는 것을 증명하려면 unsigned char secret[] = "SECRET=XXXX";usemem.c ( unsigned long mem;행 바로 아래)에 행 을 추가하십시오 . usemem &반복적으로 strings /dev/sdaX | grep SECRET다시 컴파일하고 실행 하십시오. 이번에는 'XXXX'비밀이 유출되는 것을 볼 수 있습니다.


좋은 설명과 좋은 예를 보려면 +1하십시오.
jobin

-1

이 질문은 소프트웨어가 민감한 데이터를 메모리에 보관하고 데이터를 암호화하는 것과 같은 소프트웨어 개발 간의 문제에 대한 논의로 이어집니다.

따라서 실용적인 소프트웨어 개발 및 데이터 암호화 관련 기사를 읽어보십시오.

이 기사를 읽기 시작하십시오 : http://www.ibm.com/developerworks/library/s-data.html?ns-311

도움이 되길 바랍니다.

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