오래된 해시를 재사용하지 않고 VPN 인증 백엔드 마이그레이션하기
VPN ID 이전은 복사가 아니라 전환입니다. 인증 체인을 매핑하고, 파일럿 집단을 옮기고, 자격 증명 변경을 연습하고, 재설정으로 되돌릴 수 없는 복구를 계획합니다.
사용자 이름이 새 디렉터리에 나타나고 마이그레이션이 완료되었다고 선언되었는데도 로그인은 계속 실패합니다. 게이트웨이는 여전히 지원되는 인증 경로와 올바른 권한 부여 결과가 필요하며, 둘 다 계정을 담은 디렉터리에서 저절로 나오지 않습니다. 백엔드 이전은 수명 주기가 있는 전환이지 복사 작업이 아닙니다. 아래 증상이 보통 그 차이를 드러냅니다.
증상: 계정은 있고 세션은 없다
새 디렉터리에 모든 사용자 이름이 있고 테스트 바인드도 성공하는데 VPN 클라이언트는 여전히 인증 실패를 반환합니다. 이 조합은 ID는 존재하지만 게이트웨이가 쓰는 검증 경로가 거기에 닿지 않거나, 충족할 수 없는 방식으로 닿는다는 뜻입니다. 둘 다 구성 문제이고 서로 다른 문제입니다.
첫 번째는 배선입니다, 즉 게이트웨이가 응답하지 않는 백엔드를 가리키거나, 상대가 예상하지 않는 공유 비밀을 쓰거나, 새 서비스가 반환하지 않는 속성을 요청하는 경우입니다. 두 번째는 암호학적이어서, 방식이 원래 비밀을 요구하는데 새 저장소에는 그 해시만 있습니다. 오류 문구가 두 경우 모두 비슷해서 하나의 문제로 취급됩니다.
계정을 건드리기 전에 이 둘을 분리하면 일주일이 절약됩니다. 하나는 라우팅과 신뢰의 문제이고 다른 하나는 자격 증명 재설정 결정이며, 섞으면 아무도 원인을 추적할 수 없는 변경이 생깁니다.
누군가를 옮기기 전에 체인을 매핑하세요
클라이언트 프로필마다 여섯 가지를 적습니다. 외부 인증 방식, 내부 방식이 있다면 그것, 클라이언트가 기대하는 서버 ID, 게이트웨이와 백엔드 사이의 인터페이스, 게이트웨이가 그룹 구성원 자격에 매핑하는 속성, 그 결과로 생기는 리소스 정책입니다. 순서대로 읽으면 누구도 담당하지 않는 고리가 보이고, 모든 항목에 담당자가 있으며, 전환은 아무도 확인하지 않은 곳에서 깨집니다.
| Link | Question it answers |
|---|---|
| Client profile | Which method and server name does the client use? |
| Inner method | Is there a second authentication step? |
| Server identity | Which certificate or name must the client accept? |
| Gateway to backend | Which protocol, port and shared secret? |
| Attribute mapping | Which returned value becomes group membership? |
| Resource policy | What the resulting session may reach |
일반적인 디렉터리 로그인은 그 체인의 거의 아무것도 지나지 않습니다. 계정이 있고 암호가 동작한다는 것만 증명하며, 그것이 한 번도 의심받지 않았던 부분입니다.
해시는 방식 사이를 이동하지 않습니다
자격 증명 호환성은 어떤 집단을 옮기기 전에 한 번 확인해야 합니다. FreeRADIUS는 그 구분을 분명히 기록하는데, 서버 자신이 수행하는 CHAP 검증에는 실제 암호가 필요하고, MS-CHAP은 그 암호나 적절한 NT 자료를 받아들입니다. 다른 목적으로 만든 해시는 둘 중 어디에도 맞지 않습니다, 아무리 강하더라도.
차이는 누가 증명을 계산하느냐입니다. 디렉터리에 결속해 검증하는 방식은 디렉터리가 검사할 수 있는 것을 맡깁니다. 챌린지 응답을 다시 계산해 검증하는 방식은 비밀 자체를 필요로 합니다, 서버가 같은 계산을 해야 하기 때문입니다.
자료가 없을 때 정직한 선택은 지원되는 재설정, 재등록, 외부 검증 서비스, 방식 변경입니다. 복구 가능한 암호의 임시 내보내기는 그 목록에 없습니다. 프로젝트에서 가장 혼란스러운 주에 평문 자격 증명 저장소를 만들고, 대개 마이그레이션보다 오래 살아남습니다.
파일럿 집단, 그다음 수명 주기 변경
승인된 ID의 작은 집단을 실제 클라이언트로 옮기고 네 가지를 시험합니다. 새 로그인, 의도적으로 잘못된 자격 증명, 세션이 도달해도 되는 리소스, 도달해서는 안 되는 리소스, 그리고 클라이언트가 받아들인 서버 ID도 확인합니다, 인증서 이름 불일치는 누군가 클라이언트 로그를 읽기 전까지 보이지 않습니다.
그다음 배포가 실제로 의존하는 변경을 연습합니다. 암호를 바꾸고 인증서를 갱신하거나 다시 등록하고, 파일럿 계정 하나의 접근을 제거합니다. 각각 후에 어느 검증기가 시도를 처리했는지 확인합니다, 전환 전에 만든 세션은 계속 동작할 수 있고 다음 로그인에 대해 아무것도 증명하지 않기 때문입니다.
프로필 배포와 ID 전환을 분리합니다. 각 집단에는 의도된 프로필, 자격 증명 또는 등록 상태, 사용해야 할 인증 서비스, 지원 연락처가 필요하며, 이 기록에는 비밀이 들어가면 안 됩니다.
이전 경로와 새 경로가 공존한다면 종료일로 경계를 긋습니다. 자동 폴백은 새 소유자가 접근을 제거한 뒤에도 오래된 자격 증명으로 계정을 통과시킬 수 있고, 그것은 가용성으로 위장한 보안 퇴행입니다.
롤백은 자격 증명을 복원할 수 없다
전환을 되돌려도 디렉터리는 지금 상태 그대로입니다. 재설정된 암호는 재설정된 채로, 폐기된 인증서는 폐기된 채로, 변경된 자격 증명 형식은 변경된 채로 남습니다. 그것들은 디렉터리 안의 사건이며 게이트웨이가 그 원천이었던 적은 없습니다. 복구는 사건별로 정의해야 하고, 그 어느 것도 호환되지 않는 해시에서 비밀을 재구성하는 데 의존할 수 없습니다.
이전 중인 연결을 쓰지 않는 관리 경로를 유지합니다. 새 인증이 실패하면 집단을 멈추고, 기한을 지키기 위해 모두의 인증을 약화시키는 대신 문서화된 복구 경로를 사용합니다.
집단이 덮인 뒤에는 이전 백엔드의 자격 증명, 프로필, 신뢰 관계를 소유자를 통해 퇴역시킵니다. 이전 경로가 더 이상 사용자를 통과시키지 않는지 확인하고, 지원이 여전히 필요로 하는 비밀 없는 ID-정책 매핑을 유지합니다. 마이그레이션은 새 수명 주기가 동작하고 아무도 이전 경로로 들어올 수 없을 때 끝나며, 계정 목록이 완전해 보일 때 끝나는 것이 아닙니다.