실행중인 Apache 인스턴스에서 RSA 키를 검색 하시겠습니까?


26

SSL 인증서에 대한 RSA 키 쌍을 생성하고에 개인 키를 저장했습니다 /etc/ssl/private/server.key. 불행히도 이것은 내가 가진 개인 키의 유일한 사본이었습니다.

그런 다음 실수로 디스크의 파일을 덮어 썼습니다 (예, 알고 있습니다).

Apache는 여전히 SSL 요청을 실행하고 있으며 개인 키 복구에 대한 희망이 있다고 생각합니다. (어쩌면 어딘가에 상징적 인 링크가 /proc있습니까?)

이 서버는 Ubuntu 12.04 LTS를 실행 중입니다.

답변:


39

성공!

개인 키를 검색 할 수있었습니다. 그러나 쉽지 않았습니다. 수행해야 할 작업은 다음과 같습니다.

  1. 만들기는 확실히 당신은 서버 나 아파치를 다시 시작하지 않습니다. 그 시점에서 게임은 끝났습니다. 이는 모니터링 서비스가 Apache를 다시 시작하지 않도록하는 것을 의미합니다.
  2. 잡아 이 파일 에 대한 소스 코드 - 도구라는 패스포트 투트을 .
  3. 소스 코드를 추출하고 9 행을 다음과 같이 조정하십시오 Makefile.main.

    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
    

    (주목하라 있음 $(OBJS)과는 $(LDFLAGS)역순으로한다.)

  4. 를 실행하십시오 ./build.sh.
  5. 다음을 사용하여 Apache의 PID를 가져옵니다.

    service apache2 status
    
  6. passe-partout루트로 명령을 실행하십시오 .

    sudo passe-partout [PID]
    

    ... 여기 [PID]에서 5 단계에서 검색 한 값이 있습니다.

  7. 프로그램이 성공하면 현재 디렉토리에는 많은 추가 키가 있습니다.

    you@server:~# ls
    id_rsa-0.key  id_rsa-1.key  id_rsa-2.key
    

모든 것이 잘 진행 되었다면 (그리고 희망적으로도), 그 열쇠 중 하나가 필요한 열쇠입니다. 그러나 사용중인 인증서 / 키 파일이 둘 이상인 경우 인증서 / 키 파일이 무엇인지 파악해야합니다. 그렇게하는 방법은 다음과 같습니다.

먼저 서명 된 키와 일치하는 인증서 사본을 가져옵니다. 파일 이름이이라고 가정하면 server.crt다음 명령을 실행하십시오.

openssl x509 -noout -modulus -in server.crt | openssl md5

각 키와 일치해야하는 값이 출력됩니다. 각 키에 대해 다음 명령을 실행하십시오.

openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5

그들 중 하나가 일치하면 키를 찾았습니다.


크레디트 : 이 기사 는 나에게 pass-partout을 지적했다.


2
그 유틸리티를 잘 찾으십시오.
Falcon Momot

3
글쓰기에 +1 (및 기사 작성자에 대한 가상 +1 : 부끄러워하고 계속 작성하면 해당 상황에있는 다른 사람들에게 도움이 됨).
Joachim Sauer

2
오, 정말 멋지고 더러워 요. 나는 그것을 좋아한다.
Tom O'Connor 12

8

키를 메모리에 저장하고있을 가능성이 높습니다. 이는 제공된 암호를 사용하여 권한을 삭제하거나 키를 해독 한 후에 사본을 보관해야하기 때문입니다.

이론적으로 디버거를 연결하면 프로세스 이미지에서 가져올 수 있지만 모범 사례를 따르는 경우 메모리의 무언가에 대해 암호화됩니다.

그것은 여전히 ​​그것이 열려 있다면 일어날 /proc/${PID}/fd/${SOMETHING}지도 모른다고 말했다. 덮어 쓰면 덮어 쓰기 데이터가 있기 때문에 키가 없을 것입니다. 다른 곳을 다른 곳에 복사했거나 삭제하거나 연결을 해제했거나 부모 디렉토리를 재귀 적으로 삭제 한 경우에는 그 곳에 있습니다.


예전 cp키 대신 새 키를 복사했습니다.
Nathan Osman

열린 파일 설명자를 살펴 보았습니다 /proc... 아무것도 없습니다.
Nathan Osman

그때는 복사본을 열어 두지 않았을 가능성이 높습니다. 이것은 개인 키를 읽는 일반적인 경우입니다. 유일한 옵션은 소스에서 소스가 저장되는 방법과 위치를 파악하고 디버거를 사용하여 코드를 작성했다고 가정하고 암호를 해독하거나 인증서를 교체하는 것입니다.
Falcon Momot

알았습니다! 당신이 옳았습니다-Apache는 키를 메모리에 보관하고 검색 할 수있었습니다. 내 대답을 참조하십시오.
Nathan Osman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.