Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
debian-ssh — Debian OpenSSL 예측 가능한 PRNG (CVE-2008-0166) | Kitploit
도구/GitHubGitHub/g0tmi1k/debian-ssh
ReconnaissancePassword AttacksVulnerability AnalysisExploitationInformation GatheringCryptographyPenetration Testing
GitHubg0tmi1k/debian-ssh

debian-ssh

Debian OpenSSL 예측 가능한 PRNG (CVE-2008-0166)

저장소 보기
4101093년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Debian OpenSSL 예측 가능한 PRNG


링크

원본 URL: http://metasploit.com/users/hdm/tools/debian-openssl/ (미러)

익스플로잇:

  • https://www.exploit-db.com/exploits/5622/ (Perl)
  • https://www.exploit-db.com/exploits/5720/ (Python)
  • https://www.exploit-db.com/exploits/5632/ (Ruby)

권장 도구: Crowbar (SSH 키 무차별 대입 가능)

테스트 방법: ssh-vulnkey & dowkd.pl

CVE (CVE-2008-0166):

  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0166
  • https://security-tracker.debian.org/tracker/CVE-2008-0166
  • https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-0166
  • https://www.cvedetails.com/cve/CVE-2008-0166

정보

버그

2008년 5월 13일, 데비안 프로젝트는 발표를 통해 Luciano Bello가 이들이 배포하고 있던 OpenSSL 패키지에서 흥미로운 취약점을 발견했다고 밝혔습니다. 문제의 버그는 _md_rand.c_에서 다음 코드 줄이 제거된 데서 비롯되었습니다.

root@kitploit:~
	MD_Update(&m,buf,j);
	[ .. ]
	MD_Update(&m,buf,j); /* purify complains */

이 줄들은 제거되었는데, 그 이유는 OpenSSL에 링크된 모든 코드에서 초기화되지 않은 데이터 사용에 대한 경고를 Valgrind와 Purify 도구가 발생시켰기 때문입니다. 이러한 보고서 중 하나를 OpenSSL 팀에 제출한 내용은 여기에서 확인할 수 있습니다. 이 코드를 제거하면 OpenSSL PRNG의 시딩 프로세스가 손상되는 부작용이 발생합니다. 초기 시드에 임의 데이터를 혼합하는 대신 사용된 유일한 "임의" 값은 현재 프로세스 ID였습니다. Linux 플랫폼에서 기본 최대 프로세스 ID는 32,768이므로 모든 PRNG 작업에 사용되는 시드 값의 수가 매우 적습니다.

영향

2006년 9월과 2008년 5월 13일 사이에 데비안 기반 시스템(Ubuntu, Kubuntu 등)에서 생성된 모든 SSL 및 SSH 키가 영향을 받을 수 있습니다. SSL 키의 경우, 생성된 모든 인증서를 다시 만들어서 인증 기관(CA)에 서명을 받아야 합니다. 데비안 기반 시스템에서 생성된 모든 CA 키는 다시 생성되고 폐기되어야 합니다. 사용자가 SSH 및 공개 키 인증으로 서버에 접근할 수 있도록 허용하는 모든 시스템 관리자는 해당 키를 감사하여 취약한 시스템에서 생성된 키가 있는지 확인해야 합니다. OpenSSL의 PRNG에 의존하여 전송 데이터를 보호했던 모든 도구는 오프라인 공격에 취약할 수 있습니다. 결함이 있는 시스템에서 생성된 호스트 키를 사용하는 SSH 서버는 트래픽 복호화에 노출되며, 중간자 공격이 사용자에게 감지되지 않을 수 있습니다. 이 결함은 데비안 소프트웨어를 사용하지 않는 시스템조차도 데비안 시스템에서 생성된 키가 사용되고 있는지 감사해야 하기 때문에 심각합니다. 데비안과 Ubuntu 프로젝트는 취약한 키를 식별하기 위한 도구 세트를 출시했습니다. 아래 참고 자료 섹션에서 이들을 확인할 수 있습니다.

도구들

데비안과 Ubuntu가 발표한 블랙리스트는 키 공간이 얼마나 작은지를 잘 보여줍니다. 새 OpenSSH 키를 생성할 때 특정 아키텍처, 키 크기 및 키 유형에 대해 가능한 결과는 32,767개뿐입니다. 그 이유는 PRNG가 사용하는 유일한 "임의" 데이터가 프로세스 ID이기 때문입니다. 이러한 블랙리스트와 일치하는 실제 키를 생성하려면 대상 플랫폼에 맞는 올바른 바이너리를 포함하는 시스템과 특정 프로세스 ID로 키를 생성하는 방법이 필요합니다. 프로세스 ID 문제를 해결하기 위해, 미리 로드할 수 있고 getpid() libc 호출에 대해 사용자 지정 값을 반환하는 공유 라이브러리를 작성했습니다.

다음 단계는 취약한 시스템의 실제 바이너리와 라이브러리를 포함하는 chroot 환경을 구축하는 것입니다. 로컬 네트워크에 있는 Ubuntu 시스템의 스냅샷을 가져왔습니다. 전체 chroot 환경은 여기에서 찾을 수 있습니다. 특정 유형, 비트 수, 프로세스 ID로 OpenSSH 키를 생성하기 위해 chroot 환경 내에서 실행할 수 있는 셸 스크립트를 작성했습니다. 이 셸 스크립트는 여기에서 찾을 수 있습니다. 이 스크립트는 추출된 Ubuntu 파일 시스템의 루트 디렉터리에 배치됩니다. 키를 생성하려면 다음 명령줄로 이 스크립트를 호출합니다.

root@kitploit:~
# chroot ubunturoot /dokeygen.sh 1 -t dsa -b 1024 -f /tmp/dsa_1024_1

이렇게 하면 getpid() 값이 항상 "1"을 반환하는 새 OpenSSH 1024비트 DSA 키가 생성됩니다. 이제 첫 번째 사전 생성된 SSH 키를 확보했습니다. 이 과정을 모든 PID(32,767까지)에 대해 계속하고 2048비트 RSA 키에 대해 반복하면 버그가 있는 버전의 OpenSSL 라이브러리를 실행하는 x86 시스템의 유효한 키 범위를 모두 포함하게 됩니다. 이 키 세트를 사용하면 authorized_keys 파일에 취약한 키가 나열된 모든 사용자 계정을 손상시킬 수 있습니다. 또한 SSH 서버가 취약한 호스트 키를 사용하는 경우, 이전에 캡처한 SSH 세션을 복호화하는 데에도 유용합니다. 1024비트 DSA 및 2048비트 RSA 키(x86)에 대한 사전 생성된 키 세트 링크는 아래 다운로드 섹션에 제공됩니다.

이 키들의 흥미로운 점은 프로세스 ID와 어떻게 연결되어 있는가입니다. 대부분의 데비안 기반 시스템은 순차적인 프로세스 ID 값(시스템 부팅부터 증가하고 필요에 따라 다시 래핑)을 사용하므로, 특정 키의 프로세스 ID는 해당 키가 시스템 부팅 후 얼마나 빨리 생성되었는지를 나타낼 수도 있습니다. 이를 역으로 생각하면, 공격 대상에 따라 무차별 대입 중 어떤 키를 사용할지 결정할 수 있습니다. 부팅 시 생성된 키(예: SSH 호스트 키)를 추측할 때는 PID 값이 200보다 작은 키가 무차별 대입에 가장 좋은 선택입니다. 사용자 생성 키를 공격할 때는 대부분의 유효한 사용자 키가 500보다 크고 10,000보다 작은 프로세스 ID로 생성되었다고 가정할 수 있습니다. 이 최적화는 SSH 프로토콜을 통해 원격 사용자 계정에 대한 무차별 대입 공격 속도를 크게 높일 수 있습니다.

가까운 시일 내에 이 사이트는 취약한 키를 사용하여 공개 키 인증을 허용하는 모든 SSH 계정에 신속하게 액세스할 수 있는 무차별 대입 도구로 업데이트될 예정입니다. 아래 데이터 파일의 키는 다음 명명 규칙을 사용합니다.

root@kitploit:~
 / 알고리즘 / 비트 / 지문-프로세스ID
   및
 / 알고리즘 / 비트 / 지문-프로세스ID.pub

특정 공개 키에 대한 개인 키 파일을 얻으려면 키 지문을 알아야 합니다. 지문을 얻는 가장 쉬운 방법은 다음 명령을 사용하는 것입니다.

root@kitploit:~
 $ ssh-keygen -l -f targetkey.pub
 2048 c6:7b:14:fa:ae:b6:89:e6:67:17:ee:04:17:b0:ec:4e targetkey.pub

에디터에서 공개 키를 살펴보면 키 유형이 RSA임을 유추할 수도 있습니다. 이 공개 키에 대한 개인 키를 찾으려면 데이터 파일을 추출하고 다음 이름의 파일을 찾아야 합니다.

root@kitploit:~
 rsa/2048/**c67b14faaeb689e66717ee0417b0ec4e-26670**

위 예에서 지문은 콜론이 제거된 16진수로 표시되며 프로세스 ID는 "26670"으로 표시됩니다. 이 공개 키를 인증에 사용하는 취약한 시스템에 인증하려면 다음 명령을 실행합니다.

root@kitploit:~
 $ ssh -i rsa/2048/c67b14faaeb689e66717ee0417b0ec4e-26670 root@targetmachine

자주 묻는 질문

Q: 이 키들을 생성하는 데 얼마나 걸렸나요?

A: 2.33GHz로 클럭된 31개의 Xeon 코어를 사용했습니다. x86용 1024비트 DSA 및 2048비트 RSA 키를 생성하는 데 2시간이 걸렸습니다. 4096비트 RSA 키는 생성하는 데 약 6시간이 걸렸습니다. 8192비트 RSA 키 생성은 현재 속도로 약 100시간이 걸릴 것으로 예상되며 완료되기 전에 중단될 가능성이 높습니다.


Q: 여러 프로세서에 키 생성을 분산하는 코드를 공유하시겠습니까?

A: 아니요. 코드는 이 특정 클러스터에 맞게 하드코딩되었으며 정리할 가치가 없을 정도로 형편없이 작성되었습니다.


Q: 이 키들을 사용하여 SSH 사용자 계정을 크랙하는 데 얼마나 걸리나요?

A: 네트워크 속도와 SSH 서버 구성에 따라 다릅니다. DSA-1024와 RSA-2048의 모든 32,767개 키를 몇 시간 내에 시도할 수 있지만, 대상 서버의 무차별 대입 방지 스크립트를 조심하세요.


Q: 16384비트 RSA 키를 사용하는데, 이것도 깨질 수 있나요?

A: 예, 시간과 처리 능력의 문제일 뿐입니다. 8192비트 RSA 키 세트는 모든 32,767개 키를 생성하는 데 약 3100시간의 CPU 시간이 걸립니다(현재 사용 중인 31개 코어에서 100시간). 16384비트 RSA 키 세트는 100,000시간에 가까운 CPU 시간이 필요할 것으로 예상됩니다. 명심해야 할 점은 대부분의 키가 프로세스 ID 시드를 기반으로 훨씬 더 작은 범위 내에 있으며, 대부분의 사용자 키를 포함하기 위해 전체 세트를 생성할 필요가 없다는 것입니다(대부분의 키는 처음 3,000개의 프로세스 ID 내에 있습니다).

저작권 © 2008 H D Moore


도구 다운로드