OpenConnect csd-wrapper: kiểm tra script trước khi đăng nhập
Hãy coi --csd-wrapper là ranh giới thực thi mã: kiểm tra script, chọn một người dùng csd riêng và xác minh điều gateway thực sự thấy.
Việc thêm --csd-wrapper vào một hồ sơ sẽ giao một script cục bộ cho một daemon chạy nó trong lúc đăng nhập, nên quyết định trước mắt bạn là một lần rà soát mã, không phải một nút bật tùy chọn. Tùy chọn này tồn tại để thành phần kiểm tra máy chủ của gateway có thể được thay thế, và nó nhận một đường dẫn tới script do bạn cung cấp. Mọi thứ bên dưới giả định rằng chủ sở hữu triển khai đã nói rõ cần kiểm tra tư thế nào; nếu phần đó vẫn còn mở, hãy giải quyết nó trước. Cẩm nang có bốn bước: xác định giai đoạn thất bại, đọc script, chọn danh tính mà nó chạy dưới đó, và chứng minh kết quả.
Bước 1: Xác định giai đoạn thất bại
Thông báo cuối cùng của máy khách thường là về một cookie, tức là phần cuối của chuỗi chứ không phải phần đầu. Đăng nhập HTTPS, kiểm tra chứng chỉ máy chủ, trao đổi xác thực và một thành phần tư thế đều nằm trước thông báo đó.
Ghi lại phiên bản và địa chỉ đăng nhập đang dùng, rồi lặp lại lần thử với đầu ra chi tiết được giữ trên terminal của chính bạn. Đọc lỗi đầu tiên không phải là lần thử lại, không phải dòng cuối của bản ghi. Nếu nhật ký dừng lại trước khi bất kỳ thành phần đánh giá nào được nêu tên, thì wrapper vẫn chưa phải là vấn đề của bạn. Việc thêm nó vào thời điểm đó chỉ mở rộng bề mặt mà bạn sẽ phải bảo vệ sau này.
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullGiữ bản ghi ở cục bộ, vì cookie và phản hồi xác thực là vật liệu truy cập. Một dấu vết dán vào cuộc trò chuyện là rò rỉ thông tin đăng nhập ngay cả khi bước đánh giá có vẻ vô hại. Chia sẻ văn bản lỗi và điểm trong luồng nơi nó xuất hiện, không bao giờ chia sẻ nội dung.
Bước 2: Đọc script trước khi nó vào một hồ sơ
Một wrapper chỉ đáng tin bằng bản sửa đổi mà bạn đã xem, nên hãy ghim bản sửa đổi đó và lưu mã băm của nó bên cạnh ghi chú phê duyệt. Hai lệnh dưới đây cho bạn một dấu vân tay và một lần kiểm tra cú pháp rẻ tiền trước khi bạn đọc dù chỉ một dòng. Chúng cũng cho người tiếp theo một tham chiếu cố định, điều này quan trọng khi tệp sống ngoài việc quản lý gói. Không lệnh nào cho biết script làm gì, nên hãy chạy chúng và tiếp tục đọc.
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shĐọc toàn bộ tệp với bốn câu hỏi trong đầu: nó có thực hiện các lệnh gọi HTTP ra ngoài không, nó có đọc tệp thông tin đăng nhập hoặc biến môi trường không, nó có ghi ra ngoài thư mục tạm không, và có nhánh nào báo cáo tư thế đạt mà không đo lường gì không. Mẫu cuối cùng đó là một lần vượt chính sách với một dòng nhật ký gắn kèm. Các wrapper bị sao chép thường lén đưa nó vào sau một lần kiểm tra trông có vẻ hợp lý. Nếu script quyết định thiết bị ổn trước khi nhìn vào thiết bị, hãy dừng lại ở đó.
Kiểm tra cả các gói tin đã đóng gói, vì một tiêu đề đọc được không chứng minh gì về phần còn lại của tệp. Tải một script từ một chủ đề diễn đàn không làm nó đáng tin chỉ vì tên của nó vang lên như một thành phần kiểm tra máy chủ thật. Ghi lại ai đã cài nó, nó đến từ đâu và nó sẽ được cập nhật thế nào.
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shBước 3: Chọn danh tính mà wrapper chạy dưới đó
--csd-user hạ đặc quyền trong khi chương trình CSD, TNCC hoặc HIP thực thi. Tài khoản đó là một phần của cách bố trí thực thi cục bộ, không phải tên người dùng được gửi tới gateway.
Cho wrapper một tài khoản riêng không có shell tương tác, không có quyền sudo và không có tư cách thành viên nhóm mà nó không cần. Cấp quyền đọc cho script và cho những tệp cụ thể mà nó kiểm tra, rồi thử việc hạ quyền trước khi chạm vào hồ sơ VPN. Tìm ra vấn đề ở đây rẻ hơn tìm trong máy khách.
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shHạ đặc quyền giới hạn thiệt hại mà một script tồi có thể gây ra. Nhưng nó không rà soát mã, không làm báo cáo trung thực và không chứng minh rằng quản trị viên gateway chấp nhận cách triển khai này là đáp ứng chính sách thiết bị.
Bước 4: Giữ thay đổi có thể đảo ngược
Sao lưu hồ sơ trước khi chỉnh sửa, và giữ wrapper trong kiểm soát phiên bản để một lần hoàn nguyên khôi phục mã băm đã biết thay vì đi tìm một bản sao. Ghi lại đường dẫn script, mã băm, người dùng thực thi và người phê duyệt ở một chỗ.
Để hoàn nguyên, hãy bỏ tùy chọn, khởi động lại máy khách và xác nhận lỗi ban đầu quay lại. Nếu gateway vẫn từ chối đăng nhập sau khi hoàn nguyên, thì một thứ khác cũng đã thay đổi, và việc tìm ra khác biệt đó đến trước khi thử lại wrapper. Giữ bản sao trước đó trong suốt cửa sổ thay đổi, mà với hầu hết các đội nghĩa là cho đến khi cửa sổ bảo trì tiếp theo trôi qua.
Sau một lần triển khai thành công, hãy kiểm tra hai điều thay vì một: đường hầm đi lên, và một thiết bị lẽ ra phải trượt kiểm tra tư thế vẫn bị từ chối. Một kết nối chạy được cho mọi người không phải là bằng chứng rằng việc đánh giá đã sống sót qua thay đổi của bạn.
Những lối tắt tạo ra vấn đề thứ hai
Đừng để trình trợ giúp báo cáo trạng thái tuân thủ mà không chạy các kiểm tra bắt buộc, và đừng ghi đè danh tính nền tảng để khớp với một hệ điều hành khác. Việc tuyên bố một nền tảng khác không phải là bằng chứng rằng thiết bị thật đáp ứng chính sách. Nó để bạn lại với một máy khách nói dối ở mọi lần đăng nhập sau này.
Tắt xác minh máy chủ, phát lại một cookie cũ và xếp chồng các script chưa rà soát đều đánh đổi một thất bại nhìn thấy được lấy một thất bại không nhìn thấy được. Nếu máy khách đã cài không thể hoàn tất luồng được hỗ trợ, hãy yêu cầu một lựa chọn thay thế đã được phê duyệt thay vì bẻ cong cái bạn đang có.
Sách hướng dẫn OpenConnect ghi lại --csd-wrapper và --csd-user riêng rẽ, và đó chính là gợi ý quan trọng: script và danh tính là hai quyết định. Hãy xem xét chúng riêng rẽ và ghi lại cả hai. Khi đó lời nhắc đăng nhập không còn là một câu đố mà bạn giải bằng cách dán mã.