프로필에 --csd-wrapper를 추가하면 로그인 중에 이를 실행하는 데몬에 로컬 스크립트를 넘기므로, 앞에 놓인 결정은 코드 검토이지 기본 설정 토글이 아닙니다. 이 옵션은 게이트웨이의 호스트 검사 구성 요소를 교체할 수 있도록 존재하며, 이용자가 제공하는 스크립트의 경로를 받습니다. 아래의 모든 내용은 배포 담당자가 어떤 자세 검사가 필요한지 이미 정했다고 가정하며, 그 부분이 아직 열려 있다면 먼저 정하세요. 절차에는 네 단계가 있습니다: 실패한 단계를 찾고, 스크립트를 읽고, 실행되는 ID를 고르고, 결과를 입증합니다.

1단계: 실패한 단계 찾기

클라이언트의 마지막 메시지는 보통 쿠키에 관한 것인데, 이는 체인의 끝이지 시작이 아닙니다. HTTPS 로그인, 서버 인증서 확인, 인증 교환, 자세 구성 요소가 모두 그 메시지 앞에 있습니다.

사용 중인 버전과 로그인 주소를 기록하고, 상세 출력을 자신의 터미널에 남긴 채 시도를 반복하세요. 재시도가 아닌 첫 번째 오류를 읽고, 기록의 마지막 줄은 읽지 마세요. 로그가 평가 구성 요소의 이름이 나오기 전에 멈춘다면래퍼는 아직 당신의 문제가 아닙니다. 그 시점에 추가하는 것은 나중에 지켜야 할 표면을 넓힐 뿐입니다.

openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/null

쿠키와 인증 응답은 접근 자료이므로 기록은 로컬에 보관하세요. 채팅 스레드에 붙인 추적은 평가 단계가 무해해 보여도 자격 증명 유출입니다. 오류 텍스트와 흐름에서 그것이 나타난 지점을 공유하고, 페이로드는 절대 공유하지 마세요.

2단계: 프로필에 들어가기 전에 스크립트 읽기

래퍼는 검토한 리비전만큼만 신뢰할 수 있으므로 그 리비전을 고정하고 해시를 승인 메모 옆에 보관하세요. 아래 두 명령은 한 줄도 읽기 전에 지문과 값싼 구문 검사를 제공합니다. 또한 다음 사람에게 고정된 참조를 주는데, 파일이 패키지 관리 밖에 있을 때 중요합니다. 어느 명령도 스크립트가 무엇을 하는지 알려주지 않으므로 실행하고 계속 읽으세요.

sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.sh

파일 전체를 네 가지 질문을 염두에 두고 읽으세요: 외부 HTTP 호출을 하는가, 자격 증명 파일이나 환경 변수를 읽는가, 임시 디렉터리 밖에 쓰는가, 아무것도 측정하지 않고 통과 자세를 보고하는 분기가 있는가. 마지막 패턴은 로그 한 줄이 붙은 정책 우회입니다. 복사된 래퍼는 그럴듯해 보이는 검사 뒤에 그것을 몰래 넣는 경향이 있습니다. 스크립트가 장치를 보기 전에 장치가 괜찮다고 판단한다면 거기서 멈추세요.

읽을 수 있는 헤더는 파일의 나머지에 대해 아무것도 증명하지 않으므로 패킹된 페이로드도 확인하세요. 포럼 스레드에서 스크립트를 내려받는다고 해서 이름이 실제 호스트 검사 구성 요소를 닮았다는 이유만으로 신뢰할 수 있게 되지는 않습니다. 누가 설치했는지, 어디서 왔는지, 어떻게 업데이트될지 기록하세요.

grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.sh

3단계: 래퍼가 실행되는 ID 고르기

--csd-user는 CSD, TNCC 또는 HIP 프로그램이 실행되는 동안 권한을 낮춥니다. 그 계정은 로컬 실행 방식의 일부이며 게이트웨이에 제출하는 사용자 이름이 아닙니다.

래퍼에 대화형 셸도, sudo 권한도, 필요 없는 그룹 구성원 자격도 없는 전용 계정을 주세요. 스크립트와 그것이 검사하는 특정 파일에 읽기 권한을 주고, VPN 프로필을 건드리기 전에 권한 강하를 시험하세요. 여기서 문제를 찾는 것이 클라이언트 안에서 찾는 것보다 저렴합니다.

sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.sh

권한을 낮추면 나쁜 스크립트가 일으킬 수 있는 피해가 제한됩니다. 하지만 코드를 검토하지도, 보고서를 사실로 만들지도, 게이트웨이 관리자가 이 구현을 장치 정책 준수로 받아들인다는 것을 입증하지도 않습니다.

4단계: 변경을 되돌릴 수 있게 유지하기

편집하기 전에 프로필을 백업하고, 래퍼를 버전 관리 아래에 두어 롤백이 사본을 찾는 대신 알려진 해시를 복원하게 하세요. 스크립트 경로, 해시, 실행 사용자, 승인자를 한곳에 적으세요.

되돌리려면 옵션을 제거하고 클라이언트를 다시 시작한 뒤 원래 오류가 돌아오는지 확인하세요. 롤백 후에도 게이트웨이가 로그인을 거부한다면 다른 것도 바뀐 것이므로, 그 차이를 찾는 일이 래퍼를 다시 시도하기 전에 옵니다. 변경 기간 내내 이전 사본을 보관하는데, 대부분의 팀에서는 그것이 다음 유지보수 창이 지날 때까지를 뜻합니다.

배포가 성공한 뒤에는 터널이 올라오는지, 그리고 자세 검사에서 실패해야 할 장치가 여전히 거부되는지 두 가지를 확인하세요. 모두에게 연결된다고 해서 평가가 변경에서 살아남았다는 증거는 아닙니다.

두 번째 문제를 만드는 지름길

필요한 검사를 실행하지 않고 도우미가 준수 상태를 보고하게 해서는 안 되며, 다른 운영 체제에 맞추기 위해 플랫폼 ID를 덮어써서도 안 됩니다. 다른 플랫폼이라고 주장하는 것은 실제 장치가 정책을 충족한다는 증거가 아닙니다. 그러면 앞으로의 모든 로그인에서 거짓말하는 클라이언트가 남습니다.

서버 검증을 끄고, 오래된 쿠키를 재생하고, 검토하지 않은 스크립트를 쌓는 것은 모두 보이는 실패를 보이지 않는 실패로 바꿉니다. 설치된 클라이언트가 지원되는 흐름을 완료할 수 없다면, 가진 것을 구부리는 대신 승인된 대안을 요청하세요.

OpenConnect 매뉴얼 은 --csd-wrapper와 --csd-user를 별도로 문서화하며, 이것이 중요한 힌트입니다: 스크립트와 ID는 두 가지 결정입니다. 둘을 따로 검토하고 둘 다 적어 두세요. 그러면 로그인 프롬프트는 코드를 붙여 넣어 푸는 수수께끼가 아니게 됩니다.

관련 글