Trình kiểm tra RDP tự động cho cấu hình
Xem xét chủ đề về các lỗ hổng hệ thống Windows, chúng ta sẽ tiếp tục nói về các cuộc tấn công nhằm vào các mạng công ty bị ảnh hưởng. Điều đáng ngạc nhiên là kỹ thuật Pass-the-Hash hiện hoạt động cho các kết nối RDP. Nghĩa là, chúng tôi có thể xác thực bằng cách sử dụng hàm băm NTLM của người dùng khi kết nối qua RDP!
Mặt khác, gần đây tôi được biết rằng không phải tất cả mọi người đều biết PtH là gì. Vì vậy tôi sẽ nói ngắn gọn với bạn về vấn đề này.
Vì vậy, hãy bắt đầu với thực tế là HĐH Windows là một hệ thống nhiều người dùng và do đó nó cần lưu trữ mật khẩu của người dùng. Nhưng việc lưu trữ chúng trong bản rõ không an toàn và do đó chúng được lưu trữ dưới dạng băm. Băm là hàm một chiều, kết quả của hàm này không thể được xác định từ giá trị đầu vào (nghĩa là không thể “giải mã”). Băm NT là định dạng mà Windows lưu trữ mật khẩu. Hơn nữa, tôi muốn nhấn mạnh rằng ngay cả khi đó là máy chủ hoặc miền riêng biệt thì định dạng lưu trữ vẫn giống nhau.
Điểm quan trọng thứ hai là sự hỗ trợ sâu sắc cho Đăng nhập một lần (“xác thực tự động một lần”) của Windows dựa trên xác thực NTLM. Nó không truyền văn bản rõ ràng về mật khẩu hoặc hàm băm NT. Thuật toán như sau: đầu tiên máy khách gửi yêu cầu kết nối, sau đó máy chủ trả về một chuỗi (thử thách) được tạo ngẫu nhiên. Sau đó, khách hàng lấy hàm băm của người dùng, kết nối nó với thử thách, băm nó và gửi nó đến máy chủ. Đến lượt anh ấy cũng làm như vậy. Và nếu các giá trị băm khớp nhau thì người dùng đã đúng.
Kết luận ở đây là hàm băm NT tương đương chính xác với mật khẩu của người dùng. Xét cho cùng, hầu hết tất cả các dịch vụ tồn tại trong hệ sinh thái Windows đều hỗ trợ xác thực NTLM. Ví dụ: HTTP, SMB (thông qua đó chúng ta có thể kết nối và quản lý máy chủ từ xa), SMTP, FTP, kết nối với máy chủ SQL, v.v.
Do đó, bằng cách hack một số máy chủ trong miền, chúng tôi có thể lấy giá trị băm của người dùng từ bộ nhớ và sau đó di chuyển khắp mạng, xác thực với họ ở mọi nơi. Kỹ thuật này được gọi là Pass-the-Hash. Kết quả là, việc bảo vệ miền gấp lại như một ngôi nhà bằng thẻ.
Ngoại lệ luôn là giao thức RDP. Trước đây, bạn chỉ có thể kết nối bằng cách nhập mật khẩu. Và đây là một vấn đề, vì thường có các phân đoạn đóng (ví dụ như DMZ) trong mạng công ty, nơi chỉ cho phép truy cập RDP trên tường lửa (để quản trị viên có thể quản trị).
Vì vậy, theo mặc định, trong Windows 8.1 và 2012 R2 hiện đã hỗ trợ xác thực hàm băm. Nhưng ban đầu Microsoft gọi chức năng này là Chế độ quản trị viên hạn chế và tất nhiên họ không nói về việc “hỗ trợ” cho PtH.
Vì vậy, hãy gửi lời cảm ơn đến các nhà nghiên cứu từ labs.portcullis.co.uk vì đã nói cho thế giới biết toàn bộ sự thật (để biết chi tiết, hãy xem video ở đó). Bây giờ nói ngắn gọn về thực hành. Tất cả những gì chúng ta cần kết nối là kết quả nỗ lực của Dự án FreeRPD, tức là một ứng dụng khách RDP nguồn mở (được bao gồm trong Kali theo mặc định). Sau khi xuất bản nghiên cứu, họ đã xây dựng hỗ trợ PtH ngay trong nghiên cứu. Do đó, để kết nối chúng ta cần dòng sau trong bảng điều khiển:
xfreerdp /d:domain_name /u:Quản trị viên /pth: 8846F7EAEE8FB117AD06BDD830B7586C/v: 192.168.0.1 |
trong đó sau /d: là tên miền,
sau /u: - tên người dùng,
sau /pth: -hash,
sau /v: - IP máy chủ.
Giống như các phiên bản máy khách trước đây của hệ điều hành Microsoft, người dùng phiên bản Pro và Enterprise của phiên bản Windows 10 (nhưng không phải Home) có thể kết nối từ xa với máy tính của họ thông qua Dịch vụ Máy tính Từ xa (RDP). Tuy nhiên, có giới hạn về số lượng phiên RDP đồng thời - mỗi lần chỉ một người dùng từ xa có thể làm việc. Khi cố gắng mở phiên RDP thứ hai, phiên của người dùng đầu tiên sẽ được nhắc kết thúc.
Trong phiên bản tiếng Anh, cảnh báo là:
Một người dùng khác đã đăng nhập. Nếu bạn tiếp tục, chúng sẽ bị ngắt kết nối. Bạn vẫn muốn đăng nhập?
Thực tế là trong các phiên bản máy tính để bàn của hệ điều hành Microsoft có những hạn chế chính sau đây đối với việc sử dụng dịch vụ máy tính từ xa:
- Hỗ trợ truy cập RDP chỉ khả dụng trong các phiên bản Windows cũ hơn (Chuyên nghiệp trở lên) và trong các phiên bản gia đình (Trang chủ), chức năng này bị tắt.
- Chỉ có thể có một kết nối RDP từ xa. Khi cố gắng mở phiên RDP thứ hai, người dùng sẽ được nhắc chấm dứt kết nối hiện có.
- Trong trường hợp đó, có một người dùng đang làm việc trên bảng điều khiển máy tính (cục bộ), có kết nối RDP từ xa, phiên của anh ta sẽ bị ngắt kết nối (bị chặn). Tuyên bố ngược lại cũng đúng: phiên RDP từ xa bị buộc phải chấm dứt nếu người dùng đăng nhập vào bảng điều khiển hệ thống
Trên thực tế, giới hạn về số lượng kết nối rdp đồng thời không phải là kỹ thuật mà là giới hạn cấp phép, cấm tạo kết nối dựa trên máy trạm. phần cuối Máy chủ RDP cho nhiều người dùng. Mặc dù từ quan điểm kỹ thuật, bất kỳ phiên bản Windows nào, nếu có đủ bộ nhớ, đều có thể hỗ trợ công việc đồng thời của vài chục người dùng từ xa (trung bình cần 150-200 MB bộ nhớ cho một phiên người dùng, không bao gồm các ứng dụng đang chạy) . Những thứ kia. Về lý thuyết, số lượng phiên đồng thời tối đa chỉ bị giới hạn bởi tài nguyên máy tính.
Chúng tôi sẽ xem xét hai cách để vô hiệu hóa giới hạn số lượng kết nối RDP đồng thời trong Windows 10:
Quan trọng. Ban đầu, trong phiên bản đầu tiên của bài viết, tùy chọn hoạt động chính để loại bỏ giới hạn về số lượng kết nối người dùng RDP đồng thời là phương pháp sửa đổi và thay thế tệp termrv.dll trong thư mục %SystemRoot%\System32. Tuy nhiên, khi cài đặt bản dựng Windows 10 mới hoặc một số bản cập nhật bảo mật, tệp này sẽ được cập nhật. Kết quả là bạn phải chỉnh sửa tệp này bằng trình soạn thảo Hex mỗi lần, điều này khá tẻ nhạt. Do đó, cách chính để tổ chức một máy chủ đầu cuối miễn phí trên máy khách Windows 10 là xem xét tiện ích Thư viện trình bao bọc RDP.
Ghi chú. Các sửa đổi hệ thống được mô tả trong bài viết này có thể sẽ bị coi là vi phạm Thỏa thuận cấp phép Windows và chịu mọi hậu quả sau đó.
Thư viện trình bao bọc RDP
Một cách khác để sửa đổi tệp termsrv.dll là sử dụng dự án Thư viện trình bao bọc RDP. Chương trình này hoạt động như một lớp giữa trình quản lý kiểm soát dịch vụ (SCM-Service Control Manager) và dịch vụ đầu cuối (Dịch vụ đầu cuối) và cho phép bạn không chỉ kích hoạt hỗ trợ cho một số phiên RDP đồng thời mà còn kích hoạt hỗ trợ cho RDP Host trên các phiên bản gia đình của Windows 10. RDP Wrapper không thực hiện thay đổi nào đối với tệp termsrv.dll, chỉ cần tải termsrv với các tham số đã thay đổi.
Như vậy, giải pháp này sẽ hoạt động ngay cả khi bạn cập nhật phiên bản của file termsrv.dll nên bạn không phải lo lắng về các bản cập nhật Windows.
Quan trọng. Trước khi cài đặt RDP Wrapper: điều quan trọng là bạn phải sử dụng phiên bản gốc (chưa được vá) của tệp termsrv.dll. Nếu không, RDP Wrapper có thể không hoạt động ổn định hoặc hoàn toàn không khởi động.
Bạn có thể tải xuống RDP Wrapper từ kho GitHub: https://github.com/binarymaster/rdpwrap/releases (phiên bản mới nhất hiện có của RDP Wrapper Library v1.6.2 đã được phát hành tương đối gần đây - ngày 28 tháng 12 năm 2017). Đánh giá theo thông tin trên trang của nhà phát triển, tất cả các phiên bản Windows đều được hỗ trợ. Windows 10 được hỗ trợ lên tới bản dựng Insider Preview 10.0.17063.1000 ngày 13 tháng 12 năm 2017.
Khuyên bảo. Nhân tiện, các nguồn Thư viện trình bao bọc RDP có sẵn, cho phép bạn tự lắp ráp các tệp thực thi nếu muốn.
Kho lưu trữ RDPWrap-v1.6.2.zip chứa một số tệp:
- RDPWinst.exe - chương trình cài đặt/gỡ bỏ cho Thư viện trình bao bọc RDP
- RDPConf.exe - Tiện ích cấu hình RDP Wrapper
- RDPCheck.exe - Local RDP Checker - Tiện ích kiểm tra RDP
- install.bat, uninstall.bat, update.bat - các tệp bó để cài đặt, gỡ cài đặt và cập nhật RDP Wrapper
Để cài đặt tiện ích, hãy chạy file install.bat với quyền quản trị viên.
Sau khi cài đặt xong, hãy chạy RDPConfig.exe. Và hãy chắc chắn rằng trong phần Chẩn đoán tất cả các yếu tố được sơn màu xanh lá cây.
Ghi chú. Trong trường hợp của tôi, bởi vì Không có quyền truy cập Internet trên máy tính; chương trình không thể lấy được từ Github phiên bản hiện tại của tệp INI có cài đặt cho phiên bản Windows của tôi. Đó là lý do tại sao trạng thái nói . Tải xuống tệp rdpwrap.ini từ tài nguyên phát triển và đặt nó vào thư mục cài đặt. Khởi động lại dịch vụ và đảm bảo rằng nhãn thay đổi thành .
Trong số các tính năng thú vị của phiên bản RDP Wrapper mới:
- lựa chọn Trốnngười dùngTRÊNđăng nhậpmàn hình- cho phép.
- Khi bạn tắt tùy chọn Phiên duy nhất cho mỗi người dùng- một số phiên RDP đồng thời sẽ được phép trong một tài khoản (khóa đăng ký được đặt fSingleSessionPerUser= 0 trong nhánh HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser).
Nếu sau khi cập nhật phiên bản Windows, RDP Wrapper không hoạt động, hãy kiểm tra xem phần Chẩn đoán có chứa dòng chữ hay không.
Hãy thử cập nhật tệp ini bằng tập lệnh cập nhật.bat hoặc cài đặt lại dịch vụ theo cách thủ công
rdpwinst.exe -u
rdpwinst.exe -i
Chúng tôi đang cố gắng mở phiên RDP thứ hai. Mọi thứ đã làm ra! Giờ đây, Windows 10 của chúng tôi cho phép hai người dùng từ xa kết nối đồng thời qua RDP.
Tiện ích này sẽ hoạt động trên tất cả các phiên bản Windows hiện được hỗ trợ: Windows Vista, Windows 7, Windows 8, Windows 8.1 và Windows 10. Do đó, bạn có thể tạo một máy chủ đầu cuối từ bất kỳ phiên bản máy khách nào của Windows.
Sửa đổi tập tin termsrv.dll
Ghi chú. Phương pháp này được áp dụng chỉ một sang phiên bản RTM của Windows 10 x64 (10240).
Bạn có thể loại bỏ giới hạn về số lượng kết nối RDP bằng cách sửa đổi tệp termsrv.dll (tệp thư viện được dịch vụ Remote Desktop Services sử dụng). Tệp nằm trong thư mục C:\Windows\System32).
Trước khi sửa đổi tệp termsrv.dll, bạn nên tạo một bản sao lưu của tệp đó (nếu cần, bạn có thể quay lại phiên bản gốc của tệp):
sao chép c:\Windows\System32\termsrv.dll termsrv.dll_backup
Trước khi chỉnh sửa tệp termsrv.dll, bạn cần phải trở thành chủ sở hữu của nó và cung cấp cho nhóm quản trị viên toàn quyền đối với tệp đó (tất cả các thao tác được thực hiện tương tự như các thao tác được mô tả trong bài viết). Sau đó dừng dịch vụ Remote Desktop (TermService) từ bảng điều khiển services.msc hoặc từ dòng lệnh:
Dịch vụ dừng ròng
Đối với phiên bản Windows 10 x64 RTM (phiên bản tệp termsrv.dll - 10.0.10240.16384): Mở tệp termsrv.dll bằng bất kỳ trình soạn thảo HEX nào (ví dụ: Tiny Hexer)
Tìm dòng:
39 81 3C 06 00 00 0F 84 73 42 02 00
Và thay thế nó bằng:
B8 00 01 00 00 89 81 38 06 00 00 90
Lưu tệp và khởi động dịch vụ TermService.