
리눅스 메모리 암호화 키 추출기

Properties:
Dependencies:
Limitations:
이미 제 AES-REX 프로젝트를 들어보거나 사용해보셨을 수도 있습니다. 이 프로젝트는 거의 동일한 작업을 수행하지만 방식이 다릅니다. AES-REX가 레지스터에서 암호화 키를 추출하는 반면, CryKeX는 휘발성 메모리(RAM)에서 추출합니다.
DRAM 내 암호화 키 보안에 관한 일부 연구가 이미 발표되었습니다. 기본적으로 키처럼 보이는 것(엔트로피가 높고 특정 길이)을 찾은 다음, 주변 메모리 구조(C 데이터 유형)를 분석하여 그 성질을 확인해야 합니다.
아이디어는 프로세스의 라이브 메모리를 덤프하고 메모리 매핑이 변하지 않기 때문에 해당 기술을 사용하여 가능성이 있는 키를 찾는 것입니다. 다행히도 이러한 목적을 위한 도구가 존재합니다.
이 스크립트는 이미 실행 중인 프로세스에 인젝션할 수 있을 뿐만 아니라, 새 프로세스를 별도로 실행한 후 곧바로 인젝션하여 래핑할 수도 있습니다. 이를 통해 시스템의 거의 모든 프로세스/바이너리에서 키를 덤프할 수 있습니다.
물론 메모리 접근은 커널에 의해 제한되므로, 프로세스에 대한 권한이 여전히 필요합니다.
Linux 디스크 암호화(LUKS)는 이러한 문제를 완화하기 위해 안티-포렌식 기법을 사용하지만, 전체 메모리에서 키를 추출하는 것은 여전히 가능합니다.
Firefox 브라우저는 다소 유사한 메모리 관리를 사용하므로 영향을 받지 않는 것으로 보입니다.
PGP/GPG도 마찬가지입니다.
불행히도 Ansible과 같은 솔루션은 영향을 받습니다.
자세한 내용은 eForensics에서 확인할 수 있습니다.
의존성 설치:
sudo apt install gdb aeskeyfind rsakeyfind || echo 'have you heard about source compiling?'
OpenSSL AES 키에 대한 대화형 예제:
openssl aes-128-ecb -nosalt -out testAES.enc
비밀번호를 두 번 입력한 다음 텍스트를 입력하고 종료하기 전에:
CryKeX.sh openssl
마지막으로 Ctrl+D를 세 번 누르고 결과를 확인합니다.
OpenSSL RSA 키:
openssl genrsa -des3 -out testRSA.pem 2048
비밀번호를 묻는 메시지가 나타나면:
CryKeX.sh openssl
확인:
openssl rsa -noout -text -in testRSA.pem
SSH에서 키를 추출해 보겠습니다:
echo 'Ciphers [email protected]' >> /etc/ssh/sshd_config
ssh user@server
CryKeX.sh ssh
OpenVPN에서:
echo 'cipher AES-256-CBC' >> /etc/openvpn/server.conf
openvpn yourConf.ovpn
sudo CryKeX.sh openvpn
TrueCrypt/VeraCrypt도 영향을 받습니다: VeraCrypt에서 'veracrypt' 파일을 선택하고 비밀번호 'pass'로 마운트한 후:
sudo CryKeX.sh veracrypt
Chromium 기반 브라우저 (Google 덕분에):
CryKeX.sh chromium
CryKeX.sh google-chrome
Firefox가 명시적으로 영향을 받지는 않지만, Tor Browser Bundle은 터널링으로 인해 여전히 취약합니다:
CryKeX.sh tor
앞서 말한 대로 프로세스를 래핑할 수도 있습니다:
apt install libssl-dev
gcc -lcrypto cipher.c -o cipher
CryKeX.sh cipher
wrap
cipher
다른 애플리케이션을 테스트하고 기여해 주시기 바랍니다.
"인내의 열쇠는 저항이 닫은 모든 문을 열어준다"
John Di Lemme