SSH 에이전트 전달과 키 복사: 실제로 무엇이 새는가
공개 키 로그인은 서명을 보내며 개인 키를 보내지 않습니다. 에이전트 전달은 여전히 다른 호스트에 서명 능력을 주며, 이는 별개의 노출입니다.
두 가지 다른 사건이 유출된 SSH 키라고 불리지만, 요구되는 대응은 다릅니다. 공개 키 인증은 공개 키와 개인 키로 만든 서명을 보내므로 개인 키가 요청의 필드가 되는 일은 없습니다. 에이전트 전달은, 전달된 에이전트에 접근할 수 있는 원격 호스트가 키를 전혀 보유하지 않고도 서명을 요청할 수 있기 때문에 다른 것을 노출합니다. 이 둘을 한 사건으로 다루면 쓸모없는 키 교체나 계속 살아 있는 위임 중 하나로 끝납니다.
공개 키 로그인은 키가 아니라 서명을 전송한다
인증 교환은 사용자의 공개 키와 세션 데이터에 대한 서명을 나릅니다. 서버는 이미 신뢰하는 키로 그 서명을 검증하므로, 신뢰할 수 없는 네트워크를 지나도 개인 키 절반은 클라이언트에 남을 수 있습니다. 터널을 지켜보는 VPN 운영자는 어느 경우든 암호화된 SSH 세션을 봅니다.
이는 프로토콜을 설명할 뿐, 경로상 모든 끝점의 신뢰성을 말하는 것이 아닙니다. 호스트 신원 검증은, 어떤 호스트 키든 받아들이는 클라이언트가 여기서 논의하는 것과 다른 통제를 포기한 것이므로 그대로 두십시오. 가로챈 세션과 가로챈 키는 별개의 발견이며, 자격 증명 손실인 것은 둘 중 하나뿐입니다. 보고서에서도 둘을 별개의 문장으로 두십시오.
ssh-keygen -lf ~/.ssh/id_ed25519.pub ssh -o StrictHostKeyChecking=yes [email protected]
첫 명령은 공개 지문을 출력하므로 서버가 나열하는 값과 비교할 수 있습니다. 둘째 명령은 아무도 읽지 않은 기본값에 기대는 대신 호스트 키 확인을 명시적으로 만듭니다. 키에 관한 무엇이든 바꾸기 전에 둘 다 실행해 기준선을 기록하십시오.
에이전트 전달은 서명 능력을 위임한다
전달이 켜지면 원격 호스트에 소켓이 생기고 로컬 에이전트가 그를 통해 들어오는 요청에 응답합니다. 세션 중 그 소켓을 쓸 수 있는 사람은 누구든 로드된 신원을 받아들이는 호스트에 자신을 당신으로 인증할 수 있습니다. 그것이 작동하도록 개인 키가 네트워크를 건너는 일은 없습니다.
노출되는 것은 능력이지 파일이 아닙니다. 그래서 전달은 노트북이 여는 모든 연결이 아니라 이름 붙은 작업과 이름 붙은 호스트에 속합니다. 전달된 에이전트 없이 연결을 중계하는 점프 호스트는 보통 필요 자체를 없앱니다.
ssh-add -l ssh -o ForwardAgent=no [email protected] ssh -J [email protected] [email protected]
첫 명령은 에이전트가 지금 어떤 신원을 쥐고 있는지 나열하므로 소켓을 다른 기계에 넘기기 전에 알아 둘 만합니다. 둘째는 위임 없이 접속합니다. 셋째는 전달을 흔히 완전히 대체하는 점프 호스트 패턴을 보여 줍니다.
가진 증거로 대응을 고르라
노출된 것으로 여겨지는 서명 신원에는 교체와 폐기 절차가 필요하고, 그것을 신뢰하던 서비스에서 수용을 제거해야 합니다. 노트북의 복사본을 지워도 다른 모든 복사본은 그대로 남습니다. 서비스에서 시작하고 나서 클라이언트를 정리하십시오.
일시적인 위임 문제는 더 좁습니다. 필요하지 않았던 전달을 끝내고, 사건 책임자와 어떤 세션과 신원을 덮었는지 검토하십시오. 키 교체가 뒤따를 수 있지만 그것은 증거가 결정하며 걱정이 아닙니다.
관찰된 내보내기가 없다는 것은 두려워한 메커니즘이 나타나지 않았다는 것만 증명합니다. 그 소켓 반대편 호스트가 또 무엇을 할 수 있었는지에 대해서는 아무 말도 하지 않습니다.
보고서에서 통제를 구분해 쓰라
개인 자료를 보호하고, 누가 그에게 서명을 요청할 수 있는지 제한하고, 상대방 신원을 검증된 상태로 유지하십시오. 이는 서로를 강화하는 세 가지 통제이며, 무슨 일이 있었는지 설명할 때 어느 것도 다른 것을 대신하지 않습니다.
침해된 노트북이나 그 위의 권한 있는 응용 프로그램은 영향 범위가 훨씬 넓은 세 번째 사례입니다. VPN 경로를 바꿔도 해결되지 않고, 디스크에서 읽혔을 수 있는 키에 대한 신뢰도 회복되지 않습니다.
어느 구성 요소를 신뢰했는지, 전달이 켜져 있었는지, 실제로 무엇을 관찰했는지 적으십시오. 그 기록이 유출의 의미에 대한 추측 대신 다음 결정을 방어 가능하게 만듭니다.