
리눅스용 KeePass 마스터 비밀번호 추출 PoC
이 취약점을 발견하고 책임감 있게 보고한 vdohney와 훌륭한 오픈 소스 소프트웨어와 신속한 인정/수정을 해준 Dominik Reichl에게 감사드립니다.
아마 아닙니다. 이 익스플로잇은 /proc 가상 파일 시스템에 대한 접근이 필요합니다. 구체적으로는 proc/[pid]/mem입니다.
proc manfile에 따르면 이 파일에 대한 접근은 ptrace 접근 모드인 PTRACE_MODE_ATTACH_FSCREDS에 의해 제어되며, 대부분의 시스템에서 루트 사용자로 제한됩니다.
악의적인 행위자가 이미 해당 파일에 접근할 수 있다면 더 큰 걱정거리가 있을 것입니다.
출시되는 대로 KeePass 2.54로 업데이트하시기 바랍니다(~2023년 7월). 이 문제를 어느 정도 완화해 줄 것입니다. (포럼)
먼저 Keepass 프로세스 메모리를 덤프하는 것으로 시작합니다.
기본 동작은 모든 /proc/<pid>/cmdline 파일을 스캔하여 명령줄 인수에 키워드 KeePass가 있는 pid를 저장합니다.
그런 다음 /proc/<pid>/maps에서 라이브러리와 직접 연결되지 않은 메모리 맵의 주소를 획득합니다. 즉, 빈 파일 경로를 가진 맵들입니다.
그런 다음 /proc/<pid>/mem을 이용하여 모든 해당 맵의 메모리를 버퍼에 저장합니다. 이는 Linux에서 모든 프로세스의 메모리를 덤프하는 기본적인 동작입니다.
메모리를 파싱하여 사용자가 마스터 비밀번호를 입력할 때 남겨진 문자열(예: •a, ••s, •••s 형태의 연속된 문자열)을 찾으려고 시도합니다. 첫 글자는 누락됩니다. 코드를 보면 다른 기능도 찾을 수 있습니다.
gcc dump_pwd.c -o dump 명령으로 준비를 마칩니다.
