Báo cáo về sự xâm phạm kho git và cơ sở người dùng của dự án PHP

Kết quả phân tích đầu tiên về một sự cố liên quan đến việc xác định hai cam kết độc hại trong kho Git của dự án PHP có cửa hậu được kích hoạt khi gửi yêu cầu với tiêu đề Tác nhân người dùng được thiết kế đặc biệt đã được công bố. Trong quá trình nghiên cứu dấu vết hoạt động của những kẻ tấn công, người ta kết luận rằng bản thân máy chủ git.php.net, nơi đặt kho git, không bị hack, nhưng cơ sở dữ liệu với tài khoản của các nhà phát triển dự án đã bị xâm phạm .

Có thể những kẻ tấn công đã tải xuống cơ sở dữ liệu người dùng được lưu trữ trong DBMS trên máy chủ master.php.net. Nội dung của master.php.net đã được di chuyển sang máy chủ main.php.net mới được cài đặt từ đầu. Tất cả mật khẩu của nhà phát triển được sử dụng để truy cập cơ sở hạ tầng php.net đã được đặt lại và quá trình thay đổi chúng được bắt đầu thông qua biểu mẫu khôi phục mật khẩu đặc biệt. Kho git.php.net và svn.php.net vẫn ở chế độ chỉ đọc (quá trình phát triển đã được chuyển sang GitHub).

Sau khi phát hiện ra cam kết độc hại đầu tiên được thực hiện thông qua tài khoản của Rasmus Lerdorf, người sáng lập PHP, người ta cho rằng tài khoản của anh ta đã bị hack và Nikita Popov, một trong những nhà phát triển PHP chủ chốt, đã khôi phục các thay đổi và chặn quyền cam kết đối với tài khoản có vấn đề. Sau một thời gian, người ta nhận ra rằng việc chặn không còn ý nghĩa gì nữa, vì nếu không xác minh các cam kết bằng chữ ký điện tử, bất kỳ người tham gia nào có quyền truy cập vào kho lưu trữ php-src đều có thể thực hiện thay đổi bằng cách thay thế tên tác giả hư cấu.

Tiếp theo, những kẻ tấn công đã gửi một cam kết độc hại thay mặt cho chính Nikita. Bằng cách phân tích nhật ký của dịch vụ gitolite, được sử dụng để tổ chức quyền truy cập vào kho lưu trữ, chúng tôi đã cố gắng xác định người tham gia thực sự thực hiện các thay đổi. Mặc dù đã tính đến tất cả các cam kết nhưng không có mục nào trong nhật ký cho hai thay đổi có hại. Rõ ràng là đã có sự xâm phạm cơ sở hạ tầng vì các cam kết được thêm trực tiếp, bỏ qua kết nối qua gitolite.

Máy chủ git.php.net đã bị vô hiệu hóa ngay lập tức và kho lưu trữ chính đã được chuyển sang GitHub. Trong lúc vội vàng, người ta đã quên rằng để truy cập vào kho lưu trữ, ngoài SSH bằng gitolite, còn có một đầu vào khác cho phép bạn gửi cam kết qua HTTPS. Trong trường hợp này, git-http-backend được sử dụng để tương tác với Git và việc xác thực được thực hiện bằng máy chủ HTTP Apache2, xác minh thông tin xác thực bằng cách truy cập cơ sở dữ liệu được lưu trữ trong DBMS trên máy chủ master.php.net. Đăng nhập không chỉ được phép bằng chìa khóa mà còn bằng mật khẩu thông thường. Phân tích nhật ký máy chủ http xác nhận rằng các thay đổi độc hại đã được thêm qua HTTPS.

Khi nghiên cứu nhật ký, người ta phát hiện ra rằng những kẻ tấn công không kết nối lần đầu mà ban đầu cố gắng tìm tên tài khoản, nhưng sau khi xác định được, chúng đã đăng nhập ngay lần thử đầu tiên, tức là. họ biết trước mật khẩu của Rasmus và Nikita, nhưng không biết thông tin đăng nhập của họ. Nếu những kẻ tấn công có thể giành được quyền truy cập vào DBMS, thì không rõ tại sao chúng không sử dụng ngay thông tin đăng nhập chính xác được chỉ định ở đó. Sự khác biệt này vẫn chưa nhận được lời giải thích đáng tin cậy. Vụ hack master.php.net được coi là tình huống có khả năng xảy ra nhất vì máy chủ này sử dụng mã rất cũ và hệ điều hành lỗi thời, lâu ngày không được cập nhật và có các lỗ hổng chưa được sửa chữa.

Các hành động được thực hiện bao gồm cài đặt lại môi trường máy chủ master.php.net và chuyển tập lệnh sang phiên bản mới của PHP 8. Mã để làm việc với DBMS đã được sửa đổi để sử dụng các truy vấn được tham số hóa làm phức tạp việc thay thế mã SQL. Thuật toán bcrypt được sử dụng để lưu trữ các hàm băm mật khẩu trong cơ sở dữ liệu (trước đây, mật khẩu được lưu trữ bằng hàm băm MD5 không đáng tin cậy). Mật khẩu hiện tại được đặt lại và bạn được nhắc đặt mật khẩu mới thông qua biểu mẫu khôi phục mật khẩu. Do quyền truy cập vào kho git.php.net và svn.php.net qua HTTPS bị ràng buộc với hàm băm MD5, nên người ta đã quyết định để git.php.net và svn.php.net ở chế độ chỉ đọc, đồng thời di chuyển tất cả những cái còn lại là kho mở rộng PECL trên GitHub, tương tự như kho lưu trữ PHP chính.

Nguồn: opennet.ru

Thêm một lời nhận xét