콜드 부트 공격을 방지하기 위해 종료 시 RAM을 닦아냅니다.

콜드 부트 공격을 방지하기 위해 종료 시 RAM을 닦아냅니다.

내 시스템은 전체 디스크 암호화를 사용하여 암호화됩니다. 즉, /boot를 제외한 모든 것이 dmcrypt/luks를 사용하여 암호화됩니다. 나는 걱정된다콜드 부팅 공격, 연구자들은시연, 해당 콘텐츠는 다음에 대해 추출될 수 있습니다.약 5분.

다음에 대한 지침을 제공해 주시겠습니까?

  • 종료/재부팅 프로세스의 마지막 단계에서 kexec를 새 커널로 트리거하는 방법(클린 마운트 해제 보장, 파일 시스템 손상 방지, 이전 커널 덮어쓰기 보장)
  • 모든 RAM을 지우는 커널을 만드는 방법

즉 우분투에서 동일한 작업을 수행하는 방법을 설명해 주시겠습니까?

종료를 감지하는 방법은 무엇입니까? RAM 삭제를 시작하는 방법은 무엇입니까? 사용자가 "종료"를 클릭하거나 "패닉 스크립트"를 시작하면 RAM을 지워야 합니다.

당신의 노력에 감사드립니다!

이전 작업:

기능이 현실화되는 것을 보고 싶다면 Ubuntu Brainstorm에 투표하세요!

http://brainstorm.ubuntu.com/idea/30076/

답변1

DDR2, 512MB 또는 1024MB와 같은 오래된 RAM을 사용하지 않는 경우 CBA에 대해 걱정할 필요가 없습니다.

원본 연구 살펴보기여기(PDF).

주의 깊게 읽으면 DDR2 이하 버전만 이 공격에 취약하다는 것을 알 수 있습니다. DDR3은 전압이 너무 빨리 손실되어 컴퓨터 케이스 분리 및 정지 절차를 수행할 수 없습니다. 그러니 문에 응답하기 전에 간단히 플러그를 뽑으세요.

또한,이 종이DDR3가 CBA에 취약하지 않음을 확인합니다. 실제로 DDR2 RAM이 있기 때문에 보안을 유지하려면 BIOS에서 활성화하십시오.

  1. 정전 후 자동 시작
  2. 부팅 시 RAM 확인

DDR3과 동일하게 수행하되 플러그를 뽑은 후 다시 연결하십시오. 컴퓨터가 자체적으로 시작되고 확인하여 램을 지웁니다. 충분히 효율적으로 삭제되지 않으면 부팅 프로세스에서 시스템을 RAM에 다시 로드합니다. CBA를 허용하기에는 너무 빠릅니다.

로부터링크귀하는 의견을 통해 다음을 제공했습니다.

따라서 결론적으로 콜드부팅 공격을 의심되는 컴퓨터 시스템의 메모리를 획득하는 주요 방법으로 보아서는 안 된다. 대신 해당 시스템에 대해 콜드 부팅 공격을 수행하기 전에 소프트웨어 및 하드웨어 기반 획득(예: FireWire)을 포함한 다른 기술을 시도해야 합니다. 그러나 앞서 언급한 기술을 사용할 수 없거나(예: FireWire 연결 또는 시스템 로그인 콘솔이 없거나 원격 메모리 획득이 불가능함) 효과가 없는 상황이 발생하면 조사자가 두 가지를 모두 이해한다는 가정 하에 콜드 부팅 공격이 실행될 수 있습니다. 어떻게, 어디서 문제가 발생하고 잘못될 수 있는지.
이 연구에서 알 수 있듯이 콜드 부트 공격은 여기서 수행된 대부분의 실험에서 메모리 상주 암호화 키가 일관되게 발견되거나 추출되어야 했지만 이를 일관되게 찾거나 추출할 수 없었기 때문에 특히 포렌식적으로 건전하거나 신뢰할 수 있다고 확립할 수 없습니다. 대부분의 실험에서 발견된 것보다 훨씬 더 많은 문자열과 키워드를 검색해야 하는 다양한 문자열과 키워드 검색에 대해서도 마찬가지입니다. 더욱이, 입증된 바와 같이, 단순히 컴퓨터 메모리를 플래시 동결시키는 행위만으로는 해당 메모리의 성공적인 획득을 보장하지 않습니다. 이미 검토한 다른 요인과 변수는 이러한 문제와 근본 원인을 충분히 조사했습니다. 따라서 콜드 부트 공격은 의심스러운 시스템의 메모리를 획득하는 데 어떤 경우에는 유용할 수 있지만 이 방법은 만병통치약으로 간주되어서는 안 되며 대신 모든 상황이 발생한 경우 최후의 수단으로 사용해야 한다는 것이 본 연구 작성자의 의견입니다. 다른 방법은 소진되었습니다.
마지막으로, 성능 저하가 거의 또는 전혀 없는 성공적인 인수라 할지라도 적어도 법학이 이루어지고 획득한 기억의 무결성이 소리와 증거를 사용하여 손상되지 않았음을 입증할 수 있을 때까지는 법정에서 확실한 증거로 입증되지 않을 가능성이 높습니다. 이해할 수 있는 방법론. 수색을 통해 용의자 컴퓨터의 메모리를 확보할 수 있는 보다 적절하고 안정적인 방법을 계속해서 확립하고 있습니다.

그리고 실험 결과를 확인해보면 시스템 2와 6에서만 AES 키 추출에 성공했다는 것을 알 수 있는데, 시스템 2의 사양을 보면 웜부팅 공격이었다 - 1024MB RAM 533MHz - 이건 오래된 것이다. 물건. 다른 시스템(256 RAM/128 RAM을 갖춘 시스템 6)은 설명이 필요 없을 것 같습니다.

이것이 바로 그들의 결론이 다음과 같은 이유였습니다.

수색을 통해 용의자 컴퓨터의 메모리를 확보할 수 있는 보다 적절하고 안정적인 방법을 계속해서 확립하고 있습니다.

실제로 저는 매우 매우 중요한 데이터가 있는 경우 전체 드라이브 암호화를 사용할 뿐만 아니라 별도의 암호화된 파일에 보관해야 한다고 믿습니다. 캐스케이드 알고리즘과 디스크 암호화에 사용된 비밀번호와 다른 비밀번호로 암호화됩니다. PC를 안전하게 종료하는 방법을 원하시나요? 여기있어:

  1. True Crypt 캐스케이드 알고리즘으로 암호화된 파일로 데이터를 안전하게 보관하세요.
  2. 뱀 사용
  3. 종료를 처리하는 스크립트를 만듭니다.

Windows의 경우:

truecrypt.exe /wipecache
shutdown -s -f -t 1

리눅스의 경우:

truecrypt /wipecache
shutdown -h now

캐시 삭제는 종료 후 RAM에 취약한 데이터가 남아 있지 않도록 보장합니다. 누군가 콜드 부트 공격을 수행한다면 그들은 기껏해야 시스템에 액세스할 수 있을 것입니다. 별도로 암호화된 파일에 데이터가 저장되지 않습니다.

답변2

UCLA의 Peter AH Peterson은 개념 증명 기술을 작성하고 암호화된 RAM으로 시스템을 안전하게 실행하기 위한 이론을 개발했으며 이에 대한 솔루션은 다음과 같습니다.명시적으로콜드 부팅 공격을 방지하도록 설계되었습니다. 그의 논문 이름은 Cryptkeeper입니다. 그가 소프트웨어를 다운로드할 수 있게 만드는지 아니면 UCLA에서 라이센스를 받을 수 있는지는 모르겠습니다. 그러나 적어도 원칙적으로는 RAM의 전체 내용이 공개되더라도 안전한 RAM용 암호 시스템을 설계하는 것이 가능합니다.

이 솔루션의 측정된 성능 영향은 9% 오버헤드와 다음 요소에 의한 속도 저하 사이입니다.9, 시나리오가 얼마나 "병리적인"지에 따라 다릅니다. 9% 수치는 Firefox를 사용하여 웹을 탐색하는 데 적용되는 것으로 인용되었지만 어떤 사용 사례가 성능을 9배나 저하시키는지는 명시하지 않았습니다.

Peterson의 솔루션은 귀하가 제안한 대로 RAM을 "삭제"하지 않습니다. 오히려 RAM의 내용을 얻는 것만으로도 암호 해독 키가 공개되는 것을 방지하기 위해 "보안 키 숨김 메커니즘"을 사용합니다. 구현의 세부 사항은 잘 모르겠지만 문서에 설명되어 있다고 가정합니다.

이 논문은 2010년에 출판되었습니다.

IEEE의 ieeexplore 웹사이트에서 구매할 수 있습니다. 다른 사람의 웹사이트에서 무료로 PDF로 직접 다운로드할 수도 있습니다. "cryptkeeper RAM"에 대한 Google 검색 결과에 나와 있지만 그 결과가 얼마나 오랫동안 거기에 유지될지는 잘 모르겠습니다.

이 솔루션은 귀하가 요청한 대로 RAM을 "삭제"하지 않기 때문에 답변이 아닌 설명으로 작성하고 싶었습니다. 그러나 나는 Peterson의 연구가 기술적으로 정확하다면 이것이 RAM을 지우는 것과 동일한 실질적인 효과를 가지거나 심지어 "더 나은" 효과를 가져올 것이라고 믿습니다. 그 이유는 숙련된 물리적 공격자가 그러한 작업이 발생할 것으로 예상하는 경우 RAM을 지우려는 시스템 프로그램의 시도를 중단할 수 있기 때문입니다. 예를 들어 작업이 완료되기 전에 장치에서 배터리를 빼내거나 전원 버튼을 누르는 등의 작업이 가능합니다. 완벽한. Peterson의 솔루션은 컴퓨터가 삭제를 완료하기 위해 명령을 계속 실행하도록 허용되는 필수 시간 창을 기반으로 하지 않기 때문에 더욱 안전합니다. 대신 기억은끊임없이공격자에게 대응할 기회를 갖기도 전에 놀라운 기술의 위업으로 인해 CPU 자체가 즉시 종료되더라도 보호됩니다.

그리고 "놀라운 기술의 위업"이란 Stuxnet과 같은 것을 의미합니다.

답변3

나는 상상할 것이다멤테스트86RAM을 지우는 데 꽤 능숙 할 것입니다. 나는 항상 아래를 시도하고 싶었지만 하지 못했습니다. 시도하면 업데이트하겠습니다.

kexec매뉴얼 페이지 읽기. 그리고 .iso를 시도하지 말고 kexeciso의 압축을 풀고 부팅 가능한 바이너리를 가져와야 합니다. 위의 memtest86 사이트에서 바이너리를 다운로드할 수 있습니다.

kexec먼저 부팅할 항목을 로드하려면 명령 을 사용해야 합니다 .

그래서 당신이 할 수 있는 일은 다음과 같습니다.

kexec -l {path-to-memtest86-bootable-binary} --append=console=ttyS0,115200n8

방아쇠를 당길 준비가 되면:

kexec -e

나는 --append=console=ttyS0,115200n8memtest86이 직렬 포트를 통해 작동하게 한다고 생각합니다(그러나 틀릴 수도 있습니다). 따라서 비디오 출력에 표시되지 않더라도 작동하는지 확인할 수 있습니다. 이는 memtest86이 비디오 초기화를 수행하지 않기 때문에 가능한 일입니다. 실행 중인 X 인스턴스를 모두 종료하는 것이 아마도 좋은 생각일 것입니다.

Debian kexec-tools패키지(Ubuntu에서도 사용 가능)는 이를 종료 스크립트에 연결하므로 편집하면 재부팅하는 대신 /etc/default/kexec종료 프로세스가 최종 프로세스로 호출되도록 지시할 수 있습니다 . kexec즉, 완전한 종료에 관심이 있는 경우입니다.

긴급 상황에서는 sync; kexec -e작동합니다.

그러나 일부 칩셋은 초기화된 후 메모리의 특정 영역이 처리되면 작동 중지가 발생할 수 있습니다. 이것이 실제로 어떻게 작동할지 모르겠습니다.

작동하지 않는 경우 좋은 절충안은 kexec부트로더에 memtest86을 설치하고 이를 기본 부팅 항목으로 설정한 다음 자동 선택까지 1초 지연하는 것입니다(또는 지연 없이 키 누르기에 의존하여 메모를 불러오는 것). 이렇게 하면 "새 부팅" 상태에서 상당히 빠르게 memtest86으로 들어갈 수 있지만 즉시는 아닙니다.

이는 비디오 RAM을 고려하지 않는다는 점에 유의하십시오. 이에 대한 해결책은비디오 RAM을 블록 장치로 설정, /dev/random몇 번의 반복을 위해 블록 장치로 출력됩니다.

답변4

문제는 컴퓨터가 실행 중이고 화면이 잠겨 있는 경우입니다. 이 시점에서 AES 키는 RAM에 저장되고 사용자는 컴퓨터에서 떨어져 있습니다. 침입자는 컴퓨터 케이스를 열고 RAM 모듈을 제거하는 동시에 전원을 공급하고 콘텐츠를 읽는 별도의 장치에 배치할 수 있습니다. 추출하기 전에 시스템을 종료하거나 모듈을 정지할 필요가 없습니다. RAM은 AES 키를 보유할 만큼 신뢰할 수 없지만 프로세서의 캐시는 TRESOR라는 솔루션과 같습니다. 불행히도 이를 위해서는 오래된 Linux 커널과 커널 패치 및 컴파일에 대한 고급 지식이 필요합니다.

관련 정보